summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c23
-rw-r--r--include/linux/platform_data/brcmfmac.h1
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];
};