summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/broadcom/brcm80211
diff options
context:
space:
mode:
authorAndy Duan <fugang.duan@nxp.com>2019-01-04 14:48:59 +0800
committerDong Aisheng <aisheng.dong@nxp.com>2019-11-25 15:44:49 +0800
commit9198db3a1a052eb3f0fcbd651f3a2ea1cde03355 (patch)
tree294e5380311b55b92c557c79ea475113f6f455fc /drivers/net/wireless/broadcom/brcm80211
parent0536e4052dc984695bab1a52fa6d315dd5aad5c9 (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> (cherry picked from commit 88f2834cd5b8cb8864af68d265b5bdee3000c4bf)
Diffstat (limited to 'drivers/net/wireless/broadcom/brcm80211')
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c24
1 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 2fe7efc07dd7..31f2ea29146d 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
@@ -8,6 +8,7 @@
#include <linux/netdevice.h>
#include <linux/module.h>
#include <linux/firmware.h>
+#include <linux/pinctrl/consumer.h>
#include <brcmu_wifi.h>
#include <brcmu_utils.h>
#include "core.h"
@@ -442,6 +443,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) &&
@@ -475,10 +477,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();
@@ -489,7 +511,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;