mwifiex: parse device tree node for PCIe
authorXinming Hu <huxm@marvell.com>
Fri, 18 Nov 2016 12:37:04 +0000 (18:07 +0530)
committerKalle Valo <kvalo@codeaurora.org>
Sat, 19 Nov 2016 07:11:06 +0000 (09:11 +0200)
This patch derives device tree node from pcie bus layer framework.
Device tree bindings file has been renamed(marvell-sd8xxx.txt ->
marvell-8xxx.txt) to accommodate PCIe changes.

Signed-off-by: Xinming Hu <huxm@marvell.com>
Signed-off-by: Rajat Jain <rajatja@google.com>
Reviewed-by: Brian Norris <briannorris@chromium.org>
Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Documentation/devicetree/bindings/net/wireless/marvell-8xxx.txt [new file with mode: 0644]
Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt [deleted file]
drivers/net/wireless/marvell/mwifiex/pcie.c
drivers/net/wireless/marvell/mwifiex/sta_cmd.c

diff --git a/Documentation/devicetree/bindings/net/wireless/marvell-8xxx.txt b/Documentation/devicetree/bindings/net/wireless/marvell-8xxx.txt
new file mode 100644 (file)
index 0000000..980b16d
--- /dev/null
@@ -0,0 +1,65 @@
+Marvell 8897/8997 (sd8897/sd8997/pcie8997) SDIO/PCIE devices
+------
+
+This node provides properties for controlling the Marvell SDIO/PCIE wireless device.
+The node is expected to be specified as a child node to the SDIO/PCIE controller that
+connects the device to the system.
+
+Required properties:
+
+  - compatible : should be one of the following:
+       * "marvell,sd8897"
+       * "marvell,sd8997"
+       * "pci11ab,2b42"
+       * "pci1b4b,2b42"
+
+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 8-bit values.
+                     the properties should follow below property name and
+                     corresponding array length:
+       "marvell,caldata-txpwrlimit-2g" (length = 566).
+       "marvell,caldata-txpwrlimit-5g-sub0" (length = 502).
+       "marvell,caldata-txpwrlimit-5g-sub1" (length = 688).
+       "marvell,caldata-txpwrlimit-5g-sub2" (length = 750).
+       "marvell,caldata-txpwrlimit-5g-sub3" (length = 502).
+  - marvell,wakeup-pin : a wakeup pin number of wifi chip which will be configured
+                     to firmware. Firmware will wakeup the host using this pin
+                     during suspend/resume.
+  - interrupt-parent: phandle of the parent interrupt controller
+  - interrupts : interrupt pin number to the cpu. driver will request an irq based on
+                this interrupt number. during system suspend, the irq will be enabled
+                so that the wifi chip can wakeup host platform under certain condition.
+                during system resume, the irq will be disabled to make sure
+                unnecessary interrupt is not received.
+
+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.
+IRQ pin 38 is used as system wakeup source interrupt. wakeup pin 3 is configured
+so that firmware can wakeup host using this device side pin.
+
+&mmc3 {
+       status = "okay";
+       vmmc-supply = <&wlan_en_reg>;
+       bus-width = <4>;
+       cap-power-off-card;
+       keep-power-in-suspend;
+
+       #address-cells = <1>;
+       #size-cells = <0>;
+       mwifiex: wifi@1 {
+               compatible = "marvell,sd8897";
+               reg = <1>;
+               interrupt-parent = <&pio>;
+               interrupts = <38 IRQ_TYPE_LEVEL_LOW>;
+
+               marvell,caldata_00_txpwrlimit_2g_cfg_set = /bits/ 8 <
+       0x01 0x00 0x06 0x00 0x08 0x02 0x89 0x01>;
+               marvell,wakeup-pin = <3>;
+       };
+};
diff --git a/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt b/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt
deleted file mode 100644 (file)
index c421aba..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-Marvell 8897/8997 (sd8897/sd8997) SDIO devices
-------
-
-This node provides properties for controlling the marvell sdio wireless device.
-The node is expected to be specified as a child node to the SDIO controller that
-connects the device to the system.
-
-Required properties:
-
-  - compatible : should be one of the following:
-       * "marvell,sd8897"
-       * "marvell,sd8997"
-
-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 8-bit values.
-                     the properties should follow below property name and
-                     corresponding array length:
-       "marvell,caldata-txpwrlimit-2g" (length = 566).
-       "marvell,caldata-txpwrlimit-5g-sub0" (length = 502).
-       "marvell,caldata-txpwrlimit-5g-sub1" (length = 688).
-       "marvell,caldata-txpwrlimit-5g-sub2" (length = 750).
-       "marvell,caldata-txpwrlimit-5g-sub3" (length = 502).
-  - marvell,wakeup-pin : a wakeup pin number of wifi chip which will be configured
-                     to firmware. Firmware will wakeup the host using this pin
-                     during suspend/resume.
-  - interrupt-parent: phandle of the parent interrupt controller
-  - interrupts : interrupt pin number to the cpu. driver will request an irq based on
-                this interrupt number. during system suspend, the irq will be enabled
-                so that the wifi chip can wakeup host platform under certain condition.
-                during system resume, the irq will be disabled to make sure
-                unnecessary interrupt is not received.
-
-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.
-IRQ pin 38 is used as system wakeup source interrupt. wakeup pin 3 is configured
-so that firmware can wakeup host using this device side pin.
-
-&mmc3 {
-       status = "okay";
-       vmmc-supply = <&wlan_en_reg>;
-       bus-width = <4>;
-       cap-power-off-card;
-       keep-power-in-suspend;
-
-       #address-cells = <1>;
-       #size-cells = <0>;
-       mwifiex: wifi@1 {
-               compatible = "marvell,sd8897";
-               reg = <1>;
-               interrupt-parent = <&pio>;
-               interrupts = <38 IRQ_TYPE_LEVEL_LOW>;
-
-               marvell,caldata_00_txpwrlimit_2g_cfg_set = /bits/ 8 <
-       0x01 0x00 0x06 0x00 0x08 0x02 0x89 0x01>;
-               marvell,wakeup-pin = <3>;
-       };
-};
index 3047c1ab944aaba046173296e8a10c01f30b7868..5737cc64f211fb9699bb01427274f7423b5b2441 100644 (file)
@@ -37,6 +37,22 @@ static struct mwifiex_if_ops pcie_ops;
 
 static struct semaphore add_remove_card_sem;
 
+static const struct of_device_id mwifiex_pcie_of_match_table[] = {
+       { .compatible = "pci11ab,2b42" },
+       { .compatible = "pci1b4b,2b42" },
+       { }
+};
+
+static int mwifiex_pcie_probe_of(struct device *dev)
+{
+       if (!of_match_node(mwifiex_pcie_of_match_table, dev->of_node)) {
+               dev_err(dev, "required compatible string missing\n");
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
 static int
 mwifiex_map_pci_memory(struct mwifiex_adapter *adapter, struct sk_buff *skb,
                       size_t size, int flags)
@@ -185,6 +201,7 @@ static int mwifiex_pcie_probe(struct pci_dev *pdev,
                                        const struct pci_device_id *ent)
 {
        struct pcie_service_card *card;
+       int ret;
 
        pr_debug("info: vendor=0x%4.04X device=0x%4.04X rev=%d\n",
                 pdev->vendor, pdev->device, pdev->revision);
@@ -206,6 +223,13 @@ static int mwifiex_pcie_probe(struct pci_dev *pdev,
                card->pcie.can_ext_scan = data->can_ext_scan;
        }
 
+       /* device tree node parsing and platform specific configuration*/
+       if (pdev->dev.of_node) {
+               ret = mwifiex_pcie_probe_of(&pdev->dev);
+               if (ret)
+                       return ret;
+       }
+
        if (mwifiex_add_card(card, &add_remove_card_sem, &pcie_ops,
                             MWIFIEX_PCIE)) {
                pr_err("%s failed\n", __func__);
index 0a54e2136128b53f1caac3b22909746539da72f1..b697b61e8a1081cdecbc9919b7603cdd5a173732 100644 (file)
@@ -2235,7 +2235,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.
                 */
-               if (priv->adapter->iface_type == MWIFIEX_SDIO &&
+               if ((priv->adapter->iface_type == MWIFIEX_SDIO ||
+                   priv->adapter->iface_type == MWIFIEX_PCIE) &&
                    adapter->dev->of_node) {
                        adapter->dt_node = adapter->dev->of_node;
                        if (of_property_read_u32(adapter->dt_node,