static int __init wcn36xx_msm_init(void) { int ret; struct resource *wcnss_memory; struct resource *tx_irq; struct resource *rx_irq; struct resource res[3]; wmsm.core = platform_device_alloc("wcn36xx", -1); memset(res, 0x00, sizeof(res)); wmsm.ctrl_ops.open = wcn36xx_msm_smd_open; wmsm.ctrl_ops.close = wcn36xx_msm_smd_close; wmsm.ctrl_ops.tx = wcn36xx_msm_smd_send_and_wait; wmsm.ctrl_ops.get_hw_mac = wcn36xx_msm_get_hw_mac; wmsm.ctrl_ops.smsm_change_state = wcn36xx_msm_smsm_change_state; wcnss_memory = platform_get_resource_byname(wcnss_get_platform_device(), IORESOURCE_MEM, "wcnss_mmio"); if (wcnss_memory == NULL) { dev_err(&wmsm.core->dev, "Failed to get wcnss wlan memory map.\n"); ret = -ENOMEM; return ret; } memcpy(&res[0], wcnss_memory, sizeof(*wcnss_memory)); tx_irq = platform_get_resource_byname(wcnss_get_platform_device(), IORESOURCE_IRQ, "wcnss_wlantx_irq"); if (tx_irq == NULL) { dev_err(&wmsm.core->dev, "Failed to get wcnss tx_irq"); ret = -ENOMEM; return ret; } memcpy(&res[1], tx_irq, sizeof(*tx_irq)); rx_irq = platform_get_resource_byname(wcnss_get_platform_device(), IORESOURCE_IRQ, "wcnss_wlanrx_irq"); if (rx_irq == NULL) { dev_err(&wmsm.core->dev, "Failed to get wcnss rx_irq"); ret = -ENOMEM; return ret; } memcpy(&res[2], rx_irq, sizeof(*rx_irq)); platform_device_add_resources(wmsm.core, res, ARRAY_SIZE(res)); ret = platform_device_add_data(wmsm.core, &wmsm.ctrl_ops, sizeof(wmsm.ctrl_ops)); if (ret) { dev_err(&wmsm.core->dev, "Can't add platform data\n"); ret = -ENOMEM; return ret; } platform_device_add(wmsm.core); return 0; }
static void riva_post_bootup(struct work_struct *work) { struct platform_device *pdev = wcnss_get_platform_device(); struct wcnss_wlan_config *pwlanconfig = wcnss_get_wlan_config(); wcnss_wlan_power(&pdev->dev, pwlanconfig, WCNSS_WLAN_SWITCH_OFF, NULL); }
static int pil_pronto_make_proxy_vote(struct pil_desc *pil) { struct pronto_data *drv = dev_get_drvdata(pil->dev); struct platform_device *pdev = wcnss_get_platform_device(); struct wcnss_wlan_config *pwlanconfig = wcnss_get_wlan_config(); int ret; ret = regulator_enable(drv->vreg); if (ret) { dev_err(pil->dev, "failed to enable pll supply\n"); goto err; } ret = clk_prepare_enable(drv->cxo); if (ret) { dev_err(pil->dev, "failed to enable cxo\n"); goto err_clk; } if (pdev && pwlanconfig) { ret = wcnss_wlan_power(&pdev->dev, pwlanconfig, WCNSS_WLAN_SWITCH_ON, &drv->xo_mode); wcnss_set_iris_xo_mode(drv->xo_mode); if (ret) pr_err("Failed to execute wcnss_wlan_power\n"); } return 0; err_clk: regulator_disable(drv->vreg); err: return ret; }
static void riva_post_bootup(struct work_struct *work) { struct platform_device *pdev = wcnss_get_platform_device(); struct wcnss_wlan_config *pwlanconfig = wcnss_get_wlan_config(); pr_debug(MODULE_NAME ": Cancel APPS vote for Iris & Riva\n"); wcnss_wlan_power(&pdev->dev, pwlanconfig, WCNSS_WLAN_SWITCH_OFF); }
/* Subsystem handlers */ static int riva_shutdown(const struct subsys_data *subsys) { struct platform_device *pdev = wcnss_get_platform_device(); struct wcnss_wlan_config *pwlanconfig = wcnss_get_wlan_config(); int ret = -1; pil_force_shutdown("wcnss"); /* proxy vote on behalf of Riva */ if (pdev && pwlanconfig) ret = wcnss_wlan_power(&pdev->dev, pwlanconfig, WCNSS_WLAN_SWITCH_OFF); return ret; }
static void riva_post_bootup(struct work_struct *work) { struct platform_device *pdev = wcnss_get_platform_device(); struct wcnss_wlan_config *pwlanconfig = wcnss_get_wlan_config(); pr_debug(MODULE_NAME ": riva_post_bootup, Cancel APPS vote for Iris & Riva\n"); //ASUS_BSP+++ "for /data/log/ASUSEvtlog" ASUSEvtlog("[wcnss]: riva_post_bootup, Cancel APPS vote for Iris & Riva.\n"); //ASUS_BSP--- "for /data/log/ASUSEvtlog" wcnss_wlan_power(&pdev->dev, pwlanconfig, WCNSS_WLAN_SWITCH_OFF); }
static void pil_pronto_remove_proxy_vote(struct pil_desc *pil) { struct pronto_data *drv = dev_get_drvdata(pil->dev); struct platform_device *pdev = wcnss_get_platform_device(); struct wcnss_wlan_config *pwlanconfig = wcnss_get_wlan_config(); regulator_disable(drv->vreg); clk_disable_unprepare(drv->cxo); if (pdev && pwlanconfig) { /* Temporary workaround as pronto sends interrupt that * it is capable of voting for it's resources too early. */ msleep(20); wcnss_wlan_power(&pdev->dev, pwlanconfig, WCNSS_WLAN_SWITCH_OFF, NULL); } }
static int riva_powerup(const struct subsys_data *subsys) { struct platform_device *pdev = wcnss_get_platform_device(); struct wcnss_wlan_config *pwlanconfig = wcnss_get_wlan_config(); int ret = -1; if (pdev && pwlanconfig) ret = wcnss_wlan_power(&pdev->dev, pwlanconfig, WCNSS_WLAN_SWITCH_ON); if (!ret) pil_force_boot("wcnss"); ss_restart_inprogress = false; enable_irq(RIVA_APSS_WDOG_BITE_RESET_RDY_IRQ); return ret; }
static int riva_powerup(const struct subsys_data *subsys) { struct platform_device *pdev = wcnss_get_platform_device(); struct wcnss_wlan_config *pwlanconfig = wcnss_get_wlan_config(); int ret = -1; if (pdev && pwlanconfig) ret = wcnss_wlan_power(&pdev->dev, pwlanconfig, WCNSS_WLAN_SWITCH_ON); if (!ret) { msleep(1000); pil_force_boot("wcnss"); } ss_restart_inprogress = false; enable_irq(RIVA_APSS_WDOG_BITE_RESET_RDY_IRQ); schedule_delayed_work(&cancel_vote_work, msecs_to_jiffies(5000)); return ret; }
static int riva_powerup(const struct subsys_desc *desc) { struct riva_data *drv; struct platform_device *pdev = wcnss_get_platform_device(); struct wcnss_wlan_config *pwlanconfig = wcnss_get_wlan_config(); int ret = 0; drv = container_of(desc, struct riva_data, subsys_desc); if (pdev && pwlanconfig) { ret = wcnss_wlan_power(&pdev->dev, pwlanconfig, WCNSS_WLAN_SWITCH_ON, NULL); if (!ret) pil_boot(&drv->pil_desc); } drv->rst_in_progress = 0; enable_irq(drv->irq); schedule_delayed_work(&drv->cancel_work, msecs_to_jiffies(5000)); return ret; }
static int riva_powerup(const struct subsys_data *subsys) { struct platform_device *pdev = wcnss_get_platform_device(); struct wcnss_wlan_config *pwlanconfig = wcnss_get_wlan_config(); int ret = -1; if (pdev && pwlanconfig) ret = wcnss_wlan_power(&pdev->dev, pwlanconfig, WCNSS_WLAN_SWITCH_ON); /* delay PIL operation, this SSR may be happening soon after kernel * resumes because of a SMSM RESET by Riva when APPS was suspended. * PIL fails to locate the images without this delay */ if (!ret) { msleep(1000); pil_force_boot("wcnss"); } ss_restart_inprogress = false; enable_irq(RIVA_APSS_WDOG_BITE_RESET_RDY_IRQ); return ret; }
static int wcnss_powerup(const struct subsys_desc *subsys) { struct pronto_data *drv = subsys_to_drv(subsys); struct platform_device *pdev = wcnss_get_platform_device(); struct wcnss_wlan_config *pwlanconfig = wcnss_get_wlan_config(); int ret = -1; if (pdev && pwlanconfig) ret = wcnss_wlan_power(&pdev->dev, pwlanconfig, WCNSS_WLAN_SWITCH_ON, NULL); if (!ret) { msleep(1000); ret = pil_boot(&drv->desc); if (ret) return ret; } drv->restart_inprogress = false; enable_irq(drv->irq); schedule_delayed_work(&drv->cancel_vote_work, msecs_to_jiffies(5000)); return 0; }
static int riva_powerup(const struct subsys_desc *subsys) { struct platform_device *pdev = wcnss_get_platform_device(); struct wcnss_wlan_config *pwlanconfig = wcnss_get_wlan_config(); int ret = -1; pr_info(MODULE_NAME "%s + \n", __FUNCTION__); if (pdev && pwlanconfig) ret = wcnss_wlan_power(&pdev->dev, pwlanconfig, WCNSS_WLAN_SWITCH_ON); /* delay PIL operation, this SSR may be happening soon after kernel * resumes because of a SMSM RESET by Riva when APPS was suspended. * PIL fails to locate the images without this delay */ if (!ret) { msleep(1000); pil_force_boot("wcnss"); } ss_restart_inprogress = false; enable_irq(RIVA_APSS_WDOG_BITE_RESET_RDY_IRQ); schedule_delayed_work(&cancel_vote_work, msecs_to_jiffies(5000)); pr_info(MODULE_NAME "%s - \n", __FUNCTION__); return ret; }