2016-02-16 09:14:37

by Amitkumar Karwar

[permalink] [raw]
Subject: [PATCH v4 1/3] mwifiex: register platform specific driver

From: Xinming Hu <[email protected]>

Platform device and driver provides easy way to interact with
device-tree-enabled system.

This patch registers platform driver and reorganise existing device
tree specific code. Corresponding device tree binding file is also
created.

Signed-off-by: Xinming Hu <[email protected]>
Signed-off-by: Amitkumar Karwar <[email protected]>
---
v3: Don't update adapter->dt_node if mwifiex_plt_dev is NULL
v4: Corrected the 'name' and 'compatible' property names.(Arnd Bergmann and Rob
Herring)
Patch description wraped in 72 columns(Rob Herring)
Moved DT binding file to bindings/net/wireless/(Rob Herring)
---
.../bindings/net/wireless/marvell-sd8xxx.txt | 29 +++++++++++
drivers/net/wireless/marvell/mwifiex/Makefile | 1 +
drivers/net/wireless/marvell/mwifiex/main.c | 2 +
drivers/net/wireless/marvell/mwifiex/main.h | 14 +++++
.../net/wireless/marvell/mwifiex/platform_drv.c | 59 ++++++++++++++++++++++
drivers/net/wireless/marvell/mwifiex/sta_cmd.c | 4 +-
6 files changed, 107 insertions(+), 2 deletions(-)
create mode 100644 Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt
create mode 100644 drivers/net/wireless/marvell/mwifiex/platform_drv.c

diff --git a/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt b/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt
new file mode 100644
index 0000000..f7671ae
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt
@@ -0,0 +1,29 @@
+Marvell Sd8xxx Wireless devices
+------
+
+Required properties:
+
+ - name : must be "wlan"
+ - compatible : must be "marvell,sd8xxx"
+
+Optional properties:
+
+ - marvell,caldata* : A series of properties with marvell,caldata prefix,
+ represent Calibration data downloaded to the device during
+ initialization. This is an array of unsigned values.
+
+
+Example:
+
+Tx power limit calibration data is configured in below example.
+The calibration data is an array of unsigned values, the length
+can vary between hw versions.
+
+wlan {
+ compatible = "marvell,sd8xxx";
+
+ marvell,caldata_00_txpwrlimit_2g_cfg_set = /bits/ 8 <
+0x01 0x00 0x06 0x00 0x08 0x02 0x89 0x01 ...>;
+
+};
+
diff --git a/drivers/net/wireless/marvell/mwifiex/Makefile b/drivers/net/wireless/marvell/mwifiex/Makefile
index fdfd9bf..1444fd1 100644
--- a/drivers/net/wireless/marvell/mwifiex/Makefile
+++ b/drivers/net/wireless/marvell/mwifiex/Makefile
@@ -42,6 +42,7 @@ mwifiex-y += cfg80211.o
mwifiex-y += ethtool.o
mwifiex-y += 11h.o
mwifiex-y += tdls.o
+mwifiex-y += platform_drv.o
mwifiex-$(CONFIG_DEBUG_FS) += debugfs.o
obj-$(CONFIG_MWIFIEX) += mwifiex.o

diff --git a/drivers/net/wireless/marvell/mwifiex/main.c b/drivers/net/wireless/marvell/mwifiex/main.c
index 3cfa946..b93ae69 100644
--- a/drivers/net/wireless/marvell/mwifiex/main.c
+++ b/drivers/net/wireless/marvell/mwifiex/main.c
@@ -1538,6 +1538,7 @@ EXPORT_SYMBOL_GPL(_mwifiex_dbg);
static int
mwifiex_init_module(void)
{
+ mwifiex_platform_drv_init();
#ifdef CONFIG_DEBUG_FS
mwifiex_debugfs_init();
#endif
@@ -1552,6 +1553,7 @@ mwifiex_init_module(void)
static void
mwifiex_cleanup_module(void)
{
+ mwifiex_platform_drv_exit();
#ifdef CONFIG_DEBUG_FS
mwifiex_debugfs_remove();
#endif
diff --git a/drivers/net/wireless/marvell/mwifiex/main.h b/drivers/net/wireless/marvell/mwifiex/main.h
index aea7aee..464d79f 100644
--- a/drivers/net/wireless/marvell/mwifiex/main.h
+++ b/drivers/net/wireless/marvell/mwifiex/main.h
@@ -37,6 +37,16 @@
#include <linux/idr.h>
#include <linux/inetdevice.h>
#include <linux/devcoredump.h>
+#include <linux/err.h>
+#include <linux/gpio.h>
+#include <linux/gfp.h>
+#include <linux/interrupt.h>
+#include <linux/io.h>
+#include <linux/of_gpio.h>
+#include <linux/of_platform.h>
+#include <linux/platform_device.h>
+#include <linux/pm_runtime.h>
+#include <linux/slab.h>

#include "decl.h"
#include "ioctl.h"
@@ -47,6 +57,7 @@
#include "sdio.h"

extern const char driver_version[];
+extern struct platform_device *mwifiex_plt_dev;

struct mwifiex_adapter;
struct mwifiex_private;
@@ -1597,6 +1608,9 @@ void mwifiex_process_multi_chan_event(struct mwifiex_private *priv,
struct sk_buff *event_skb);
void mwifiex_multi_chan_resync(struct mwifiex_adapter *adapter);

+int mwifiex_platform_drv_init(void);
+void mwifiex_platform_drv_exit(void);
+
#ifdef CONFIG_DEBUG_FS
void mwifiex_debugfs_init(void);
void mwifiex_debugfs_remove(void);
diff --git a/drivers/net/wireless/marvell/mwifiex/platform_drv.c b/drivers/net/wireless/marvell/mwifiex/platform_drv.c
new file mode 100644
index 0000000..5fd5d80
--- /dev/null
+++ b/drivers/net/wireless/marvell/mwifiex/platform_drv.c
@@ -0,0 +1,59 @@
+/* Marvell wireless LAN device driver: platform specific driver
+ *
+ * Copyright (C) 2015, Marvell International Ltd.
+ *
+ * This software file (the "File") is distributed by Marvell International
+ * Ltd. under the terms of the GNU General Public License Version 2, June 1991
+ * (the "License"). You may use, redistribute and/or modify this File in
+ * accordance with the terms and conditions of the License, a copy of which
+ * is available on the worldwide web at
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+ *
+ * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
+ * ARE EXPRESSLY DISCLAIMED. The License provides additional details about
+ * this warranty disclaimer.
+ */
+#include "main.h"
+
+struct platform_device *mwifiex_plt_dev;
+
+static int mwifiex_plt_probe(struct platform_device *pdev)
+{
+ mwifiex_plt_dev = pdev;
+ return 0;
+}
+
+static int mwifiex_plt_remove(struct platform_device *pdev)
+{
+ mwifiex_plt_dev = NULL;
+ return 0;
+}
+
+static const struct of_device_id mwifiex_dt_match[] = {
+ {
+ .compatible = "marvell,sd8xxx",
+ },
+ {},
+};
+
+MODULE_DEVICE_TABLE(of, mwifiex_dt_match);
+
+static struct platform_driver mwifiex_platform_driver = {
+ .probe = mwifiex_plt_probe,
+ .remove = mwifiex_plt_remove,
+ .driver = {
+ .name = "mwifiex_plt",
+ .of_match_table = mwifiex_dt_match,
+ }
+};
+
+int mwifiex_platform_drv_init(void)
+{
+ return platform_driver_register(&mwifiex_platform_driver);
+}
+
+void mwifiex_platform_drv_exit(void)
+{
+ platform_driver_unregister(&mwifiex_platform_driver);
+}
diff --git a/drivers/net/wireless/marvell/mwifiex/sta_cmd.c b/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
index 30f1526..238fe4f 100644
--- a/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
+++ b/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
@@ -2154,8 +2154,8 @@ int mwifiex_sta_init_cmd(struct mwifiex_private *priv, u8 first_sta, bool init)
* The cal-data can be read from device tree and/or
* a configuration file and downloaded to firmware.
*/
- adapter->dt_node =
- of_find_node_by_name(NULL, "marvell_cfgdata");
+ adapter->dt_node = mwifiex_plt_dev ?
+ mwifiex_plt_dev->dev.of_node : NULL;
if (adapter->dt_node) {
ret = mwifiex_dnld_dt_cfgdata(priv, adapter->dt_node,
"marvell,caldata");
--
1.8.1.4


2016-02-29 14:04:44

by Amitkumar Karwar

[permalink] [raw]
Subject: RE: [PATCH v4 1/3] mwifiex: register platform specific driver

Hi Rob,

> From: Rob Herring [mailto:[email protected]]
> Sent: Thursday, February 18, 2016 8:08 PM
> To: Amitkumar Karwar
> Cc: [email protected]; Nishant Sarmukadam;
> [email protected]; [email protected]; Cathy Luo; linux-
> [email protected]; Xinming Hu
> Subject: Re: [PATCH v4 1/3] mwifiex: register platform specific driver
>
> On Tue, Feb 16, 2016 at 01:14:37AM -0800, Amitkumar Karwar wrote:
> > From: Xinming Hu <[email protected]>
> >
> > Platform device and driver provides easy way to interact with
> > device-tree-enabled system.
> >
> > This patch registers platform driver and reorganise existing device
> > tree specific code. Corresponding device tree binding file is also
> > created.
> >
> > Signed-off-by: Xinming Hu <[email protected]>
> > Signed-off-by: Amitkumar Karwar <[email protected]>
> > ---
> > v3: Don't update adapter->dt_node if mwifiex_plt_dev is NULL
> > v4: Corrected the 'name' and 'compatible' property names.(Arnd
> Bergmann and Rob
> > Herring)
> > Patch description wraped in 72 columns(Rob Herring)
> > Moved DT binding file to bindings/net/wireless/(Rob Herring)
> > ---

Thanks for reviewing mwifiex and btmrvl patch series.
We are working on a updated version which will address your review comments.

Regards,
Amitkumar

2016-02-18 14:37:57

by Rob Herring (Arm)

[permalink] [raw]
Subject: Re: [PATCH v4 2/3] mwifiex: parse chip specific gpio from device tree

On Tue, Feb 16, 2016 at 01:14:38AM -0800, Amitkumar Karwar wrote:
> From: Xinming Hu <[email protected]>
>
> This patch parse chip specific gpio parameter from device
> tree. Corresponding binding file is also updated.
>
> Signed-off-by: Xinming Hu <[email protected]>
> Signed-off-by: Amitkumar Karwar <[email protected]>
> ---
> v4: Renamed "mwifiex,chip-gpio" to "marvell,wakeup-gpios"(Rob Herring/
> Arnd Bergmann)
> ---
> .../devicetree/bindings/net/wireless/marvell-sd8xxx.txt | 6 ++++--

Combine this with the DT change in the next patch.

> drivers/net/wireless/marvell/mwifiex/sta_cmd.c | 9 +++++++++
> 2 files changed, 13 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt b/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt
> index f7671ae..c337fab 100644
> --- a/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt
> +++ b/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt
> @@ -11,7 +11,9 @@ Optional properties:
> - marvell,caldata* : A series of properties with marvell,caldata prefix,
> represent Calibration data downloaded to the device during
> initialization. This is an array of unsigned values.
> -
> + - marvell,wakeup-gpios : Chip's wakeup gpio pin number. This needs to be downloaded
> + to to firmware. Chip notifies wifi wakeup signal to SOC
> + through this pin.

This is still confusing that it is not a GPIO from the host. I'd suggest
"marvell,wakeup-pin"

2016-02-18 14:38:03

by Rob Herring (Arm)

[permalink] [raw]
Subject: Re: [PATCH v4 1/3] mwifiex: register platform specific driver

On Tue, Feb 16, 2016 at 01:14:37AM -0800, Amitkumar Karwar wrote:
> From: Xinming Hu <[email protected]>
>
> Platform device and driver provides easy way to interact with
> device-tree-enabled system.
>
> This patch registers platform driver and reorganise existing device
> tree specific code. Corresponding device tree binding file is also
> created.
>
> Signed-off-by: Xinming Hu <[email protected]>
> Signed-off-by: Amitkumar Karwar <[email protected]>
> ---
> v3: Don't update adapter->dt_node if mwifiex_plt_dev is NULL
> v4: Corrected the 'name' and 'compatible' property names.(Arnd Bergmann and Rob
> Herring)
> Patch description wraped in 72 columns(Rob Herring)
> Moved DT binding file to bindings/net/wireless/(Rob Herring)
> ---
> .../bindings/net/wireless/marvell-sd8xxx.txt | 29 +++++++++++

Again, one patch for all the binding changes.

> drivers/net/wireless/marvell/mwifiex/Makefile | 1 +
> drivers/net/wireless/marvell/mwifiex/main.c | 2 +
> drivers/net/wireless/marvell/mwifiex/main.h | 14 +++++
> .../net/wireless/marvell/mwifiex/platform_drv.c | 59 ++++++++++++++++++++++
> drivers/net/wireless/marvell/mwifiex/sta_cmd.c | 4 +-
> 6 files changed, 107 insertions(+), 2 deletions(-)
> create mode 100644 Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt
> create mode 100644 drivers/net/wireless/marvell/mwifiex/platform_drv.c
>
> diff --git a/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt b/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt
> new file mode 100644
> index 0000000..f7671ae
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt
> @@ -0,0 +1,29 @@
> +Marvell Sd8xxx Wireless devices
> +------
> +
> +Required properties:
> +
> + - name : must be "wlan"
> + - compatible : must be "marvell,sd8xxx"

No wildcards as Arnd mentioned.

> +
> +Optional properties:
> +
> + - marvell,caldata* : A series of properties with marvell,caldata prefix,
> + represent Calibration data downloaded to the device during
> + initialization. This is an array of unsigned values.
> +
> +
> +Example:
> +
> +Tx power limit calibration data is configured in below example.
> +The calibration data is an array of unsigned values, the length
> +can vary between hw versions.
> +
> +wlan {

This also needs to be specified as a subnode of the SDIO controller.

> + compatible = "marvell,sd8xxx";
> +
> + marvell,caldata_00_txpwrlimit_2g_cfg_set = /bits/ 8 <
> +0x01 0x00 0x06 0x00 0x08 0x02 0x89 0x01 ...>;
> +
> +};
> +

2016-02-18 14:37:54

by Rob Herring (Arm)

[permalink] [raw]
Subject: Re: [PATCH v4 3/3] mwifiex: parse host wakeup configuration from device

On Tue, Feb 16, 2016 at 01:14:39AM -0800, Amitkumar Karwar wrote:
> From: Xinming Hu <[email protected]>
>
> This patch implement a framework for board specific wakeup.
> driver parse irq/gpio number from device tree, corresponding
> resources will be allocated, and used for host suspend/resume.
> driver private binding file is also updated in the patch.
>
> Signed-off-by: Xinming Hu <[email protected]>
> Signed-off-by: Amitkumar Karwar <[email protected]>
> ---
> v4: Replaced #ifdef with __maybe_unused(Arnd Bergmann)
> ---
> .../bindings/net/wireless/marvell-sd8xxx.txt | 10 +++
> .../net/wireless/marvell/mwifiex/platform_drv.c | 91 ++++++++++++++++++++++
> 2 files changed, 101 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt b/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt
> index c337fab..50138fd 100644
> --- a/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt
> +++ b/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt
> @@ -14,6 +14,11 @@ Optional properties:
> - marvell,wakeup-gpios : Chip's wakeup gpio pin number. This needs to be downloaded
> to to firmware. Chip notifies wifi wakeup signal to SOC
> through this pin.
> + - interrupt-parent: phandle of the parent interrupt controller
> + - interrupts : interrupt number to the cpu
> + - gpios: specify SOC's wakeup GPIO

If you define the GPIO line as an interrupt, you shouldn't need it to be
as GPIO too. Same on the BT side.

> + - pinctrl-names : a pinctrl state named "default" must be defined
> + - pinctrl-0 : pin control group to be used for this controller
>
> Example:
>
> @@ -27,5 +32,10 @@ wlan {
> marvell,caldata_00_txpwrlimit_2g_cfg_set = /bits/ 8 <
> 0x01 0x00 0x06 0x00 0x08 0x02 0x89 0x01 ...>;
> marvell,wakeup-gpios = <3>;
> + interrupt-parent = <&pio>;
> + interrupts = <38 IRQ_TYPE_LEVEL_LOW>;
> + gpios = <&pio 38 GPIO_ACTIVE_HIGH>;
> + pinctrl-names = "default";
> + pinctrl-0 = <&wake_pins>;
> };
>

2016-02-16 11:28:44

by Arnd Bergmann

[permalink] [raw]
Subject: Re: [PATCH v4 1/3] mwifiex: register platform specific driver

On Tuesday 16 February 2016 01:14:37 Amitkumar Karwar wrote:
> + - compatible : must be "marvell,sd8xxx"
>

I think we mentioned it before, but a compatible string must not contain
wildcards of any kind, as it is very possible that there are some future
sd8xxx devices that are slightly incompatible with the first one.

Please use a specfic model name here, or a list of multiple models
if they are actually different.

Arnd

2016-02-16 09:14:39

by Amitkumar Karwar

[permalink] [raw]
Subject: [PATCH v4 3/3] mwifiex: parse host wakeup configuration from device

From: Xinming Hu <[email protected]>

This patch implement a framework for board specific wakeup.
driver parse irq/gpio number from device tree, corresponding
resources will be allocated, and used for host suspend/resume.
driver private binding file is also updated in the patch.

Signed-off-by: Xinming Hu <[email protected]>
Signed-off-by: Amitkumar Karwar <[email protected]>
---
v4: Replaced #ifdef with __maybe_unused(Arnd Bergmann)
---
.../bindings/net/wireless/marvell-sd8xxx.txt | 10 +++
.../net/wireless/marvell/mwifiex/platform_drv.c | 91 ++++++++++++++++++++++
2 files changed, 101 insertions(+)

diff --git a/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt b/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt
index c337fab..50138fd 100644
--- a/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt
+++ b/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt
@@ -14,6 +14,11 @@ Optional properties:
- marvell,wakeup-gpios : Chip's wakeup gpio pin number. This needs to be downloaded
to to firmware. Chip notifies wifi wakeup signal to SOC
through this pin.
+ - interrupt-parent: phandle of the parent interrupt controller
+ - interrupts : interrupt number to the cpu
+ - gpios: specify SOC's wakeup GPIO
+ - pinctrl-names : a pinctrl state named "default" must be defined
+ - pinctrl-0 : pin control group to be used for this controller

Example:

@@ -27,5 +32,10 @@ wlan {
marvell,caldata_00_txpwrlimit_2g_cfg_set = /bits/ 8 <
0x01 0x00 0x06 0x00 0x08 0x02 0x89 0x01 ...>;
marvell,wakeup-gpios = <3>;
+ interrupt-parent = <&pio>;
+ interrupts = <38 IRQ_TYPE_LEVEL_LOW>;
+ gpios = <&pio 38 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&wake_pins>;
};

diff --git a/drivers/net/wireless/marvell/mwifiex/platform_drv.c b/drivers/net/wireless/marvell/mwifiex/platform_drv.c
index 5fd5d80..5ae7dc0 100644
--- a/drivers/net/wireless/marvell/mwifiex/platform_drv.c
+++ b/drivers/net/wireless/marvell/mwifiex/platform_drv.c
@@ -18,9 +18,63 @@

struct platform_device *mwifiex_plt_dev;

+struct mwifiex_wake_dev {
+ struct device *dev;
+ int irq_wifi;
+ bool wake_by_wifi;
+};
+
+static irqreturn_t mwifiex_wake_irq_wifi(int irq, void *priv)
+{
+ struct mwifiex_wake_dev *ctx = priv;
+
+ if (ctx->irq_wifi >= 0) {
+ ctx->wake_by_wifi = true;
+ disable_irq_nosync(ctx->irq_wifi);
+ }
+
+ return IRQ_HANDLED;
+}
+
static int mwifiex_plt_probe(struct platform_device *pdev)
{
+ int ret;
+ struct mwifiex_wake_dev *ctx;
+ int gpio;
+
mwifiex_plt_dev = pdev;
+
+ ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL);
+ if (!ctx)
+ return -ENOMEM;
+
+ ctx->dev = &pdev->dev;
+ ctx->irq_wifi = platform_get_irq(pdev, 0);
+ if (ctx->irq_wifi < 0)
+ dev_err(&pdev->dev, "Failed to get irq_wifi\n");
+
+ gpio = of_get_gpio(pdev->dev.of_node, 0);
+ if (gpio_is_valid(gpio))
+ gpio_direction_input(gpio);
+ else
+ dev_err(&pdev->dev, "gpio wifi is invalid\n");
+
+ if (ctx->irq_wifi >= 0) {
+ ret = devm_request_irq(&pdev->dev, ctx->irq_wifi,
+ mwifiex_wake_irq_wifi,
+ IRQF_TRIGGER_LOW,
+ "wifi_wake", ctx);
+ if (ret) {
+ dev_err(&pdev->dev,
+ "Failed to request irq_wifi %d (%d)\n",
+ ctx->irq_wifi, ret);
+ return -EINVAL;
+ }
+ disable_irq(ctx->irq_wifi);
+ }
+
+ platform_set_drvdata(pdev, ctx);
+
return 0;
}

@@ -30,6 +84,42 @@ static int mwifiex_plt_remove(struct platform_device *pdev)
return 0;
}

+static int __maybe_unused mwifiex_plt_suspend(struct device *dev)
+{
+ struct mwifiex_wake_dev *ctx = dev_get_drvdata(dev);
+ int ret;
+
+ if (ctx->irq_wifi >= 0) {
+ ctx->wake_by_wifi = false;
+ enable_irq(ctx->irq_wifi);
+ ret = enable_irq_wake(ctx->irq_wifi);
+ if (ret)
+ return ret;
+ }
+
+ return 0;
+}
+
+static int __maybe_unused mwifiex_plt_resume(struct device *dev)
+{
+ struct mwifiex_wake_dev *ctx = dev_get_drvdata(dev);
+ int ret;
+
+ if (ctx->irq_wifi >= 0) {
+ ret = disable_irq_wake(ctx->irq_wifi);
+ if (!ctx->wake_by_wifi)
+ disable_irq(ctx->irq_wifi);
+ if (ret)
+ return ret;
+ }
+
+ return 0;
+}
+
+static const struct dev_pm_ops mwifiex_plt_pm_ops = {
+ SET_SYSTEM_SLEEP_PM_OPS(mwifiex_plt_suspend, mwifiex_plt_resume)
+};
+
static const struct of_device_id mwifiex_dt_match[] = {
{
.compatible = "marvell,sd8xxx",
@@ -45,6 +135,7 @@ static struct platform_driver mwifiex_platform_driver = {
.driver = {
.name = "mwifiex_plt",
.of_match_table = mwifiex_dt_match,
+ .pm = &mwifiex_plt_pm_ops,
}
};

--
1.8.1.4

2016-02-16 09:14:38

by Amitkumar Karwar

[permalink] [raw]
Subject: [PATCH v4 2/3] mwifiex: parse chip specific gpio from device tree

From: Xinming Hu <[email protected]>

This patch parse chip specific gpio parameter from device
tree. Corresponding binding file is also updated.

Signed-off-by: Xinming Hu <[email protected]>
Signed-off-by: Amitkumar Karwar <[email protected]>
---
v4: Renamed "mwifiex,chip-gpio" to "marvell,wakeup-gpios"(Rob Herring/
Arnd Bergmann)
---
.../devicetree/bindings/net/wireless/marvell-sd8xxx.txt | 6 ++++--
drivers/net/wireless/marvell/mwifiex/sta_cmd.c | 9 +++++++++
2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt b/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt
index f7671ae..c337fab 100644
--- a/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt
+++ b/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt
@@ -11,7 +11,9 @@ Optional properties:
- marvell,caldata* : A series of properties with marvell,caldata prefix,
represent Calibration data downloaded to the device during
initialization. This is an array of unsigned values.
-
+ - marvell,wakeup-gpios : Chip's wakeup gpio pin number. This needs to be downloaded
+ to to firmware. Chip notifies wifi wakeup signal to SOC
+ through this pin.

Example:

@@ -24,6 +26,6 @@ wlan {

marvell,caldata_00_txpwrlimit_2g_cfg_set = /bits/ 8 <
0x01 0x00 0x06 0x00 0x08 0x02 0x89 0x01 ...>;
-
+ marvell,wakeup-gpios = <3>;
};

diff --git a/drivers/net/wireless/marvell/mwifiex/sta_cmd.c b/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
index 238fe4f..fce3f98 100644
--- a/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
+++ b/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
@@ -2134,6 +2134,7 @@ int mwifiex_sta_init_cmd(struct mwifiex_private *priv, u8 first_sta, bool init)
enum state_11d_t state_11d;
struct mwifiex_ds_11n_tx_cfg tx_cfg;
u8 sdio_sp_rx_aggr_enable;
+ u32 data;

if (first_sta) {
if (priv->adapter->iface_type == MWIFIEX_PCIE) {
@@ -2157,6 +2158,14 @@ int mwifiex_sta_init_cmd(struct mwifiex_private *priv, u8 first_sta, bool init)
adapter->dt_node = mwifiex_plt_dev ?
mwifiex_plt_dev->dev.of_node : NULL;
if (adapter->dt_node) {
+ if (of_property_read_u32(adapter->dt_node,
+ "marvell,wakeup-gpios",
+ &data) == 0) {
+ mwifiex_dbg(adapter, INFO,
+ "Wakeup gpio = 0x%x\n", data);
+ adapter->hs_cfg.gpio = data;
+ }
+
ret = mwifiex_dnld_dt_cfgdata(priv, adapter->dt_node,
"marvell,caldata");
if (ret)
--
1.8.1.4