diff options
-rw-r--r-- | drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c | 23 | ||||
-rw-r--r-- | include/linux/platform_data/brcmfmac.h | 1 |
2 files changed, 23 insertions, 1 deletions
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c index df13bb7cb51e..7ca24d5e1b5b 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c @@ -467,6 +467,7 @@ struct brcmf_mp_device *brcmf_get_module_param(struct device *dev, /* See if there is any device specific platform data configured */ found = false; if (brcmfmac_pdata) { + pinctrl_pm_select_default_state(brcmfmac_pdata->dev); for (i = 0; i < brcmfmac_pdata->device_count; i++) { device_pd = &brcmfmac_pdata->devices[i]; if ((device_pd->bus_type == bus_type) && @@ -499,10 +500,30 @@ void brcmf_release_module_param(struct brcmf_mp_device *module_param) static int __init brcmf_common_pd_probe(struct platform_device *pdev) { + int err; + struct brcmfmac_platform_data pdata = { + .power_on = NULL, + .power_off = NULL, + .fw_alternative_path = NULL, + .device_count = 0, + }; + brcmf_dbg(INFO, "Enter\n"); brcmfmac_pdata = dev_get_platdata(&pdev->dev); + if (!brcmfmac_pdata) { + err = platform_device_add_data(pdev, &pdata, + sizeof(pdata)); + if (err) + brcmf_err("platform data allocation failed\n"); + brcmfmac_pdata = dev_get_platdata(&pdev->dev); + pinctrl_pm_select_idle_state(&pdev->dev); + } + + if (!brcmfmac_pdata) + return 0; + brcmfmac_pdata->dev = &pdev->dev; if (brcmfmac_pdata->power_on) brcmfmac_pdata->power_on(); @@ -513,7 +534,7 @@ static int brcmf_common_pd_remove(struct platform_device *pdev) { brcmf_dbg(INFO, "Enter\n"); - if (brcmfmac_pdata->power_off) + if (brcmfmac_pdata && brcmfmac_pdata->power_off) brcmfmac_pdata->power_off(); return 0; diff --git a/include/linux/platform_data/brcmfmac.h b/include/linux/platform_data/brcmfmac.h index 1d30bf278231..b737c0a8e58d 100644 --- a/include/linux/platform_data/brcmfmac.h +++ b/include/linux/platform_data/brcmfmac.h @@ -178,6 +178,7 @@ struct brcmfmac_platform_data { void (*power_off)(void); char *fw_alternative_path; int device_count; + struct device *dev; struct brcmfmac_pd_device devices[0]; }; |