devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Eliad Peller <eliad-Ix1uc/W3ht7QT0dZR+AlfA@public.gmane.org>
To: linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
Cc: Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>,
	Ido Yariv <ido-Ix1uc/W3ht7QT0dZR+AlfA@public.gmane.org>
Subject: [PATCH v5 2/3] wl18xx: add basic device-tree support
Date: Mon,  9 Mar 2015 17:36:41 +0200	[thread overview]
Message-ID: <1425915402-10012-2-git-send-email-eliad@wizery.com> (raw)
In-Reply-To: <1425915402-10012-1-git-send-email-eliad-Ix1uc/W3ht7QT0dZR+AlfA@public.gmane.org>

When running with device-tree, we no longer have a board file
that can set up the platform data for wlcore.
Allow this data to be passed from DT.

For now, parse only the irq used. Other (optional) properties
can be added later on.

Signed-off-by: Ido Yariv <ido-Ix1uc/W3ht7QT0dZR+AlfA@public.gmane.org>
Signed-off-by: Eliad Peller <eliad-Ix1uc/W3ht7QT0dZR+AlfA@public.gmane.org>
---
 drivers/net/wireless/ti/wlcore/sdio.c | 80 ++++++++++++++++++++++++++++++++---
 1 file changed, 74 insertions(+), 6 deletions(-)

diff --git a/drivers/net/wireless/ti/wlcore/sdio.c b/drivers/net/wireless/ti/wlcore/sdio.c
index d3dd7bf..ee556ac 100644
--- a/drivers/net/wireless/ti/wlcore/sdio.c
+++ b/drivers/net/wireless/ti/wlcore/sdio.c
@@ -34,6 +34,8 @@
 #include <linux/wl12xx.h>
 #include <linux/pm_runtime.h>
 #include <linux/printk.h>
+#include <linux/of.h>
+#include <linux/of_irq.h>
 
 #include "wlcore.h"
 #include "wl12xx_80211.h"
@@ -214,6 +216,69 @@ static struct wl1271_if_operations sdio_ops = {
 	.set_block_size = wl1271_sdio_set_block_size,
 };
 
+#ifdef CONFIG_OF
+static const struct of_device_id wlcore_sdio_of_match_table[] = {
+	{ .compatible = "ti,wl1801" },
+	{ .compatible = "ti,wl1805" },
+	{ .compatible = "ti,wl1807" },
+	{ .compatible = "ti,wl1831" },
+	{ .compatible = "ti,wl1835" },
+	{ .compatible = "ti,wl1837" },
+	{ }
+};
+
+static struct wl12xx_platform_data *wlcore_probe_of(struct device *dev)
+{
+	struct device_node *np = dev->of_node;
+	struct wl12xx_platform_data *pdata;
+
+	if (!np || !of_match_node(wlcore_sdio_of_match_table, np))
+		return NULL;
+
+	pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
+	if (!pdata)
+		return NULL;
+
+	pdata->irq = irq_of_parse_and_map(np, 0);
+	if (!pdata->irq) {
+		dev_err(dev, "No irq in platform data\n");
+		kfree(pdata);
+		return NULL;
+	}
+
+	return pdata;
+}
+#else
+static struct wl12xx_platform_data *wlcore_probe_of(struct device *dev)
+{
+	return NULL;
+}
+#endif
+
+static struct wl12xx_platform_data *
+wlcore_get_platform_data(struct device *dev)
+{
+	struct wl12xx_platform_data *pdata;
+
+	/* first, look for DT data */
+	pdata = wlcore_probe_of(dev);
+	if (pdata)
+		return pdata;
+
+	/* if not found - fallback to static platform data */
+	pdata = wl12xx_get_platform_data();
+	if (!IS_ERR(pdata))
+		return kmemdup(pdata, sizeof(*pdata), GFP_KERNEL);
+
+	dev_err(dev, "No platform data set\n");
+	return NULL;
+}
+
+static void wlcore_del_platform_data(struct wl12xx_platform_data *pdata)
+{
+	kfree(pdata);
+}
+
 static int wl1271_probe(struct sdio_func *func,
 				  const struct sdio_device_id *id)
 {
@@ -245,12 +310,9 @@ static int wl1271_probe(struct sdio_func *func,
 	/* Use block mode for transferring over one block size of data */
 	func->card->quirks |= MMC_QUIRK_BLKSZ_FOR_BYTE_MODE;
 
-	pdev_data.pdata = wl12xx_get_platform_data();
-	if (IS_ERR(pdev_data.pdata)) {
-		ret = PTR_ERR(pdev_data.pdata);
-		dev_err(glue->dev, "missing wlan platform data: %d\n", ret);
+	pdev_data.pdata = wlcore_get_platform_data(&func->dev);
+	if (!pdev_data.pdata)
 		goto out_free_glue;
-	}
 
 	/* if sdio can keep power while host is suspended, enable wow */
 	mmcflags = sdio_get_host_pm_caps(func);
@@ -279,7 +341,7 @@ static int wl1271_probe(struct sdio_func *func,
 	if (!glue->core) {
 		dev_err(glue->dev, "can't allocate platform_device");
 		ret = -ENOMEM;
-		goto out_free_glue;
+		goto out_free_pdata;
 	}
 
 	glue->core->dev.parent = &func->dev;
@@ -313,6 +375,9 @@ static int wl1271_probe(struct sdio_func *func,
 out_dev_put:
 	platform_device_put(glue->core);
 
+out_free_pdata:
+	wlcore_del_platform_data(pdev_data.pdata);
+
 out_free_glue:
 	kfree(glue);
 
@@ -323,11 +388,14 @@ out:
 static void wl1271_remove(struct sdio_func *func)
 {
 	struct wl12xx_sdio_glue *glue = sdio_get_drvdata(func);
+	struct wlcore_platdev_data *pdev_data = glue->core->dev.platform_data;
+	struct wl12xx_platform_data *pdata = pdev_data->pdata;
 
 	/* Undo decrement done above in wl1271_probe */
 	pm_runtime_get_noresume(&func->dev);
 
 	platform_device_unregister(glue->core);
+	wlcore_del_platform_data(pdata);
 	kfree(glue);
 }
 
-- 
1.8.5.2.229.g4448466.dirty

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2015-03-09 15:36 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-09 15:36 [PATCH v5 1/3] dt: bindings: add wl18xx wireless device Eliad Peller
     [not found] ` <1425915402-10012-1-git-send-email-eliad-Ix1uc/W3ht7QT0dZR+AlfA@public.gmane.org>
2015-03-09 15:36   ` Eliad Peller [this message]
     [not found]     ` <1425915402-10012-2-git-send-email-eliad-Ix1uc/W3ht7QT0dZR+AlfA@public.gmane.org>
2015-03-09 19:47       ` [PATCH v5 2/3] wl18xx: add basic device-tree support Arnd Bergmann
2015-03-11  0:34     ` Javier Martinez Canillas
     [not found]       ` <CABxcv=mygdT2Q+ByVKPx4+o_Oj9KSy=zVX9ng9yN25ivkfSn1A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-03-11  9:51         ` Arnd Bergmann
2015-03-11 10:05           ` Javier Martinez Canillas
2015-03-11 10:32             ` Arnd Bergmann
2015-03-11 11:50           ` Eliad Peller
2015-03-09 15:36 ` [PATCH v5 3/3] ARM: dts: igep00x0: add wl18xx bindings Eliad Peller
     [not found]   ` <1425915402-10012-3-git-send-email-eliad-Ix1uc/W3ht7QT0dZR+AlfA@public.gmane.org>
2015-03-09 19:50     ` Arnd Bergmann
2015-03-09 21:03       ` Eliad Peller
     [not found]         ` <CAB3XZEc_sjpA8kgfYCsO8FjGEc6O0xhE9aKO3VtgVbd+Meaakg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-03-09 22:49           ` Tony Lindgren
     [not found]             ` <20150309224929.GL5264-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2015-03-10 11:00               ` Eliad Peller
     [not found]                 ` <CAB3XZEdS+mK1MiB7OWiehFGRBnUzJ84s3rFrCy3-YFYhL-BNWw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-03-10 14:11                   ` Arnd Bergmann
2015-03-10 14:28                     ` Tony Lindgren
     [not found]                       ` <20150310142805.GN5264-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2015-03-10 15:48                         ` Arnd Bergmann
2015-03-10 15:55                           ` Tony Lindgren
2015-03-10 14:31                     ` Eliad Peller
2015-03-10 15:52                       ` Arnd Bergmann
2015-03-10 16:11                         ` Eliad Peller
     [not found]                           ` <CAB3XZEfEQnb7qsxuAAr6pUehm1nw6Eu4ZsV1+E477yF5K1hczA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-03-10 16:18                             ` Tony Lindgren
     [not found]                               ` <20150310161801.GR5264-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2015-03-10 17:01                                 ` Eliad Peller
2015-03-10 17:35                                   ` Tony Lindgren
     [not found]                                     ` <20150310173550.GT5264-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2015-03-10 19:49                                       ` Arnd Bergmann
2015-03-11  1:00                                       ` Javier Martinez Canillas
2015-03-11  9:53                                         ` Arnd Bergmann
2015-03-11 11:34                                           ` Javier Martinez Canillas
     [not found]                                             ` <CABxcv=nE_Qd7do+dRyp=fw3wYmWFb+0eEjXYOtdjqE55Cp0zmQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-03-11 12:12                                               ` Eliad Peller
2015-03-11 13:13                                                 ` Arnd Bergmann
2015-03-11 12:40                                             ` Arnd Bergmann
2015-03-11 13:07                                               ` Javier Martinez Canillas
     [not found]                                                 ` <CABxcv=mPVxW=BqL2PUL=AtS74kcqMG1yxC1WqMpxGiNOqGAnyQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-03-11 13:17                                                   ` Arnd Bergmann
2015-03-11 13:21                                                     ` Javier Martinez Canillas
     [not found]                                                       ` <CABxcv==yx3dy-beEF9cf1mKo1vjCh_LU6iLuvn1z-SKz9xG0qA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-03-11 13:38                                                         ` Eliad Peller
     [not found]                                                           ` <CAB3XZEfi49qMsB7A3p4Y7r9emzSbeyUGVy4-njzey1UnJU0qzA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-03-11 15:11                                                             ` Tony Lindgren
2015-03-10 14:34                     ` Sekhar Nori
2015-03-10 15:54         ` Arnd Bergmann
2015-03-11  0:28     ` Javier Martinez Canillas
2015-03-11  1:19       ` Javier Martinez Canillas
     [not found]         ` <CABxcv=kUwU2KVw5jYryh62v5us2-CiJFMnYN2nyWLRMWnEkU3w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-03-11 11:59           ` Eliad Peller
     [not found]             ` <CAB3XZEdbVgOGH_uz4BX+8NXEu_vZzd=JF_1qvSPbyvvc0-O9iA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-03-11 12:07               ` Javier Martinez Canillas
2015-03-11 11:54       ` Eliad Peller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1425915402-10012-2-git-send-email-eliad@wizery.com \
    --to=eliad-ix1uc/w3ht7qt0dzr+alfa@public.gmane.org \
    --cc=arnd-r2nGTMty4D4@public.gmane.org \
    --cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=ido-Ix1uc/W3ht7QT0dZR+AlfA@public.gmane.org \
    --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).