diff options
author | Andy Duan <fugang.duan@nxp.com> | 2019-01-04 14:48:59 +0800 |
---|---|---|
committer | Jason Liu <jason.hui.liu@nxp.com> | 2019-02-12 10:35:49 +0800 |
commit | 88f2834cd5b8cb8864af68d265b5bdee3000c4bf (patch) | |
tree | 68db17b30125060e070232314bc0bbce41da6c36 /drivers/net | |
parent | 05601af462145e27142e3d140e10a66d4a493d40 (diff) |
MLK-20681 brcmfmac: add brcmfmac platform device pinctrl state support
Add brcmfmac platform device pinctrl state support. That is useful
for dynamically configurate pin group for different wlan chips.
Reviewed-by: Richard Zhu <hongxing.zhu@nxp.com>
Signed-off-by: Fugang Duan <fugang.duan@nxp.com>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c | 23 |
1 files changed, 22 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; |