Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 714bfa4f authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "cnss2: Refactor callbacks for SSR framework"

parents 2a540036 7335d274
Loading
Loading
Loading
Loading
+66 −57
Original line number Diff line number Diff line
@@ -1187,34 +1187,38 @@ static void cnss_qca6290_crash_shutdown(struct cnss_plat_data *plat_priv)
	cnss_pci_collect_dump_info(pci_priv);
}

static int cnss_powerup(const struct subsys_desc *subsys_desc)
static int cnss_powerup(struct cnss_plat_data *plat_priv)
{
	int ret = 0;
	struct cnss_plat_data *plat_priv;
	int ret;

	if (!subsys_desc->dev) {
		cnss_pr_err("dev from subsys_desc is NULL\n");
		return -ENODEV;
	switch (plat_priv->device_id) {
	case QCA6174_DEVICE_ID:
		ret = cnss_qca6174_powerup(plat_priv);
		break;
	case QCA6290_EMULATION_DEVICE_ID:
	case QCA6290_DEVICE_ID:
		ret = cnss_qca6290_powerup(plat_priv);
		break;
	default:
		cnss_pr_err("Unknown device_id found: 0x%lx\n",
			    plat_priv->device_id);
		ret = -ENODEV;
	}

	plat_priv = dev_get_drvdata(subsys_desc->dev);
	if (!plat_priv) {
		cnss_pr_err("plat_priv is NULL!\n");
		return -ENODEV;
	return ret;
}

	if (!plat_priv->driver_state) {
		cnss_pr_dbg("Powerup is ignored.\n");
		return 0;
	}
static int cnss_shutdown(struct cnss_plat_data *plat_priv)
{
	int ret;

	switch (plat_priv->device_id) {
	case QCA6174_DEVICE_ID:
		ret = cnss_qca6174_powerup(plat_priv);
		ret = cnss_qca6174_shutdown(plat_priv);
		break;
	case QCA6290_EMULATION_DEVICE_ID:
	case QCA6290_DEVICE_ID:
		ret = cnss_qca6290_powerup(plat_priv);
		ret = cnss_qca6290_shutdown(plat_priv);
		break;
	default:
		cnss_pr_err("Unknown device_id found: 0x%lx\n",
@@ -1225,9 +1229,8 @@ static int cnss_powerup(const struct subsys_desc *subsys_desc)
	return ret;
}

static int cnss_shutdown(const struct subsys_desc *subsys_desc, bool force_stop)
static int cnss_subsys_powerup(const struct subsys_desc *subsys_desc)
{
	int ret = 0;
	struct cnss_plat_data *plat_priv;

	if (!subsys_desc->dev) {
@@ -1237,25 +1240,40 @@ static int cnss_shutdown(const struct subsys_desc *subsys_desc, bool force_stop)

	plat_priv = dev_get_drvdata(subsys_desc->dev);
	if (!plat_priv) {
		cnss_pr_err("plat_priv is NULL!\n");
		cnss_pr_err("plat_priv is NULL\n");
		return -ENODEV;
	}

	switch (plat_priv->device_id) {
	case QCA6174_DEVICE_ID:
		ret = cnss_qca6174_shutdown(plat_priv);
		break;
	case QCA6290_EMULATION_DEVICE_ID:
	case QCA6290_DEVICE_ID:
		ret = cnss_qca6290_shutdown(plat_priv);
		break;
	default:
		cnss_pr_err("Unknown device_id found: 0x%lx\n",
			    plat_priv->device_id);
		ret = -ENODEV;
	if (!plat_priv->driver_state) {
		cnss_pr_dbg("Powerup is ignored\n");
		return 0;
	}

	return ret;
	return cnss_powerup(plat_priv);
}

static int cnss_subsys_shutdown(const struct subsys_desc *subsys_desc,
				bool force_stop)
{
	struct cnss_plat_data *plat_priv;

	if (!subsys_desc->dev) {
		cnss_pr_err("dev from subsys_desc is NULL\n");
		return -ENODEV;
	}

	plat_priv = dev_get_drvdata(subsys_desc->dev);
	if (!plat_priv) {
		cnss_pr_err("plat_priv is NULL\n");
		return -ENODEV;
	}

	if (!plat_priv->driver_state) {
		cnss_pr_dbg("shutdown is ignored\n");
		return 0;
	}

	return cnss_shutdown(plat_priv);
}

static int cnss_qca6290_ramdump(struct cnss_plat_data *plat_priv)
@@ -1313,7 +1331,8 @@ static int cnss_qca6174_ramdump(struct cnss_plat_data *plat_priv)
	return ret;
}

static int cnss_ramdump(int enable, const struct subsys_desc *subsys_desc)
static int cnss_subsys_ramdump(int enable,
			       const struct subsys_desc *subsys_desc)
{
	int ret = 0;
	struct cnss_plat_data *plat_priv = dev_get_drvdata(subsys_desc->dev);
@@ -1375,7 +1394,7 @@ void cnss_device_crashed(struct device *dev)
}
EXPORT_SYMBOL(cnss_device_crashed);

static void cnss_crash_shutdown(const struct subsys_desc *subsys_desc)
static void cnss_subsys_crash_shutdown(const struct subsys_desc *subsys_desc)
{
	struct cnss_plat_data *plat_priv = dev_get_drvdata(subsys_desc->dev);

@@ -1464,8 +1483,8 @@ static int cnss_do_recovery(struct cnss_plat_data *plat_priv,
	return 0;

self_recovery:
	cnss_shutdown(&subsys_info->subsys_desc, false);
	cnss_powerup(&subsys_info->subsys_desc);
	cnss_shutdown(plat_priv);
	cnss_powerup(plat_priv);

	return 0;
}
@@ -1614,12 +1633,11 @@ static int cnss_register_driver_hdlr(struct cnss_plat_data *plat_priv,
				     void *data)
{
	int ret = 0;
	struct cnss_subsys_info *subsys_info = &plat_priv->subsys_info;

	set_bit(CNSS_DRIVER_LOADING, &plat_priv->driver_state);
	plat_priv->driver_ops = data;

	ret = cnss_powerup(&subsys_info->subsys_desc);
	ret = cnss_powerup(plat_priv);
	if (ret) {
		clear_bit(CNSS_DRIVER_LOADING, &plat_priv->driver_state);
		plat_priv->driver_ops = NULL;
@@ -1630,10 +1648,8 @@ static int cnss_register_driver_hdlr(struct cnss_plat_data *plat_priv,

static int cnss_unregister_driver_hdlr(struct cnss_plat_data *plat_priv)
{
	struct cnss_subsys_info *subsys_info = &plat_priv->subsys_info;

	set_bit(CNSS_DRIVER_UNLOADING, &plat_priv->driver_state);
	cnss_shutdown(&subsys_info->subsys_desc, false);
	cnss_shutdown(plat_priv);
	plat_priv->driver_ops = NULL;

	return 0;
@@ -1642,10 +1658,9 @@ static int cnss_unregister_driver_hdlr(struct cnss_plat_data *plat_priv)
static int cnss_cold_boot_cal_start_hdlr(struct cnss_plat_data *plat_priv)
{
	int ret = 0;
	struct cnss_subsys_info *subsys_info = &plat_priv->subsys_info;

	set_bit(CNSS_COLD_BOOT_CAL, &plat_priv->driver_state);
	ret = cnss_powerup(&subsys_info->subsys_desc);
	ret = cnss_powerup(plat_priv);
	if (ret)
		clear_bit(CNSS_COLD_BOOT_CAL, &plat_priv->driver_state);

@@ -1654,10 +1669,8 @@ static int cnss_cold_boot_cal_start_hdlr(struct cnss_plat_data *plat_priv)

static int cnss_cold_boot_cal_done_hdlr(struct cnss_plat_data *plat_priv)
{
	struct cnss_subsys_info *subsys_info = &plat_priv->subsys_info;

	cnss_wlfw_wlan_mode_send_sync(plat_priv, QMI_WLFW_OFF_V01);
	cnss_shutdown(&subsys_info->subsys_desc, false);
	cnss_shutdown(plat_priv);
	clear_bit(CNSS_COLD_BOOT_CAL, &plat_priv->driver_state);

	return 0;
@@ -1665,16 +1678,12 @@ static int cnss_cold_boot_cal_done_hdlr(struct cnss_plat_data *plat_priv)

static int cnss_power_up_hdlr(struct cnss_plat_data *plat_priv)
{
	struct cnss_subsys_info *subsys_info = &plat_priv->subsys_info;

	return cnss_powerup(&subsys_info->subsys_desc);
	return cnss_powerup(plat_priv);
}

static int cnss_power_down_hdlr(struct cnss_plat_data *plat_priv)
{
	struct cnss_subsys_info *subsys_info = &plat_priv->subsys_info;

	cnss_shutdown(&subsys_info->subsys_desc, false);
	cnss_shutdown(plat_priv);

	return 0;
}
@@ -1799,10 +1808,10 @@ int cnss_register_subsys(struct cnss_plat_data *plat_priv)
	}

	subsys_info->subsys_desc.owner = THIS_MODULE;
	subsys_info->subsys_desc.powerup = cnss_powerup;
	subsys_info->subsys_desc.shutdown = cnss_shutdown;
	subsys_info->subsys_desc.ramdump = cnss_ramdump;
	subsys_info->subsys_desc.crash_shutdown = cnss_crash_shutdown;
	subsys_info->subsys_desc.powerup = cnss_subsys_powerup;
	subsys_info->subsys_desc.shutdown = cnss_subsys_shutdown;
	subsys_info->subsys_desc.ramdump = cnss_subsys_ramdump;
	subsys_info->subsys_desc.crash_shutdown = cnss_subsys_crash_shutdown;
	subsys_info->subsys_desc.dev = &plat_priv->plat_dev->dev;

	subsys_info->subsys_device = subsys_register(&subsys_info->subsys_desc);