linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: ohad@wizery.com (Ohad Ben-Cohen)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 14/15] omap: zoom: add WLAN device
Date: Tue,  6 Jul 2010 03:37:45 +0300	[thread overview]
Message-ID: <1278376666-3509-15-git-send-email-ohad@wizery.com> (raw)
In-Reply-To: <1278376666-3509-1-git-send-email-ohad@wizery.com>

From: Ohad Ben-Cohen <ohadb@ti.com>

Add WLAN platform device and control
functions (power and virtual card detect)
in order to allow software to control the
embedded SDIO WLAN device which resides on
the ZOOM board (TI's wl1271 device).

Based on Android's WLAN control functions by
San Mehat <san@android.com>.

Signed-off-by: Ohad Ben-Cohen <ohadb@ti.com>
---
 arch/arm/mach-omap2/board-zoom-wlan.c         |  129 +++++++++++++++++++++++++
 arch/arm/mach-omap2/include/mach/board-zoom.h |    5 +
 2 files changed, 134 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/mach-omap2/board-zoom-wlan.c

diff --git a/arch/arm/mach-omap2/board-zoom-wlan.c b/arch/arm/mach-omap2/board-zoom-wlan.c
new file mode 100644
index 0000000..7ed5139
--- /dev/null
+++ b/arch/arm/mach-omap2/board-zoom-wlan.c
@@ -0,0 +1,129 @@
+/* mach-omap2/board-zoom-wlan.c
+ *
+ * Board support for wl1271 embedded SDIO device.
+ *
+ * Copyright (C) 2010 Texas Instruments, Inc.
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2. This program is licensed "as is" without any warranty of any
+ * kind, whether express or implied.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/mmc/host.h>
+#include <linux/mmc/sdio_ids.h>
+#include <linux/err.h>
+#include <linux/gpio.h>
+#include <linux/wl12xx.h>
+
+#include "mux.h"
+
+#ifdef CONFIG_OMAP_ZOOM_WLAN
+
+/* these are zoom-specific board numbers */
+#define OMAP_ZOOM_WLAN_PMENA_GPIO	(101)
+#define OMAP_ZOOM_WLAN_IRQ_GPIO		(162)
+
+/* wl1271 virtual 'card detect' status */
+static int omap_zoom_wlan_cd;
+static void (*wlan_set_virtual_cd)(void *dev_id, int card_present);
+static void (*wlan_set_data)(void *dev_id, void *priv);
+static void *wlan_host_devid;
+
+int omap_zoom_wlan_register_embedded_control(void *dev_id,
+			void (*set_virtual_cd)(void *dev_id, int card_present),
+			void (*set_data)(void *dev_id, void *priv))
+{
+	if (wlan_host_devid || wlan_set_virtual_cd || wlan_set_data)
+		return -EBUSY;
+
+	wlan_set_virtual_cd = set_virtual_cd;
+	wlan_set_data = set_data;
+	wlan_host_devid = dev_id;
+
+	return 0;
+}
+
+int omap_zoom_wlan_get_virtual_cd(void)
+{
+	return omap_zoom_wlan_cd;
+}
+
+static void omap_zoom_wlan_set_embedded_data(void *priv)
+{
+	if (wlan_set_data)
+		wlan_set_data(wlan_host_devid, priv);
+	else
+		pr_err("%s: host controller not registered yet\n", __func__);
+}
+
+static void omap_zoom_wlan_set_carddetect(bool card_present)
+{
+	omap_zoom_wlan_cd = card_present ? 1 : 0;
+
+	pr_info("%s: %d\n", __func__, omap_zoom_wlan_cd);
+
+	if (wlan_set_virtual_cd)
+		wlan_set_virtual_cd(wlan_host_devid, omap_zoom_wlan_cd);
+	else
+		pr_err("%s: host controller not registered yet\n", __func__);
+}
+
+static void omap_zoom_wlan_power(bool enable)
+{
+	int val = enable ? 1 : 0;
+
+	pr_info("%s: set power %d\n", __func__, val);
+
+	gpio_set_value(OMAP_ZOOM_WLAN_PMENA_GPIO, val);
+}
+
+struct wl12xx_platform_data omap_zoom_wlan_control = {
+	.set_power = omap_zoom_wlan_power,
+	.set_carddetect = omap_zoom_wlan_set_carddetect,
+	.set_embedded_data = omap_zoom_wlan_set_embedded_data,
+	/* ZOOM ref clock is 26 MHz */
+	.board_ref_clock = 1,
+	.irq = OMAP_GPIO_IRQ(OMAP_ZOOM_WLAN_IRQ_GPIO),
+};
+
+static struct platform_device omap_zoom_wlan_device = {
+	.name = "wl1271_sdio",
+	.id = 1,
+	.dev = {
+		.platform_data = &omap_zoom_wlan_control,
+	},
+};
+
+int __init omap_zoom_wlan_init(void)
+{
+	int ret;
+
+	ret = gpio_request(OMAP_ZOOM_WLAN_PMENA_GPIO, "wlan_power");
+	if (ret < 0) {
+		pr_err("%s: power gpio request failed: %d\n", __func__, ret);
+		return ret;
+	}
+
+	gpio_direction_output(OMAP_ZOOM_WLAN_PMENA_GPIO, 0);
+
+	ret = gpio_request(OMAP_ZOOM_WLAN_IRQ_GPIO, "wlan_irq");
+	if (ret < 0) {
+		pr_err("%s: gpio request failed: %d\n", __func__, ret);
+		return ret;
+	}
+	gpio_direction_input(OMAP_ZOOM_WLAN_IRQ_GPIO);
+
+	ret = platform_device_register(&omap_zoom_wlan_device);
+
+	return ret;
+}
+
+#else
+int __init omap_zoom_wlan_init(void)
+{
+	return 0;
+}
+#endif /* CONFIG_OMAP_ZOOM_WLAN */
diff --git a/arch/arm/mach-omap2/include/mach/board-zoom.h b/arch/arm/mach-omap2/include/mach/board-zoom.h
index c93b29e..61bbd81 100644
--- a/arch/arm/mach-omap2/include/mach/board-zoom.h
+++ b/arch/arm/mach-omap2/include/mach/board-zoom.h
@@ -3,3 +3,8 @@
  */
 extern int __init zoom_debugboard_init(void);
 extern void __init zoom_peripherals_init(void);
+int __init omap_zoom_wlan_init(void);
+int omap_zoom_wlan_register_embedded_control(void *dev_id,
+			void (*set_virtual_cd)(void *dev_id, int card_present),
+			void (*set_data)(void *dev_id, void *priv));
+int omap_zoom_wlan_get_virtual_cd(void);
-- 
1.7.0.4

  parent reply	other threads:[~2010-07-06  0:37 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-07-06  0:37 [PATCH 00/15] wlan+omap+mmc: out-of-the-box WLAN support for ZOOM2/3 Ohad Ben-Cohen
2010-07-06  0:37 ` [PATCH 01/15] sdio: add TI + wl1271 ids Ohad Ben-Cohen
2010-07-06  0:37 ` [PATCH 02/15] wireless: wl1271: remove SDIO IDs from driver Ohad Ben-Cohen
2010-07-06  7:04   ` Luciano Coelho
2010-07-06  0:37 ` [PATCH 03/15] omap: mmc: prepare for software card detect support Ohad Ben-Cohen
2010-07-06  0:37 ` [PATCH 04/15] mmc: support embedded data field in mmc_host Ohad Ben-Cohen
2010-07-06 15:49   ` Grazvydas Ignotas
2010-07-06 15:54     ` Ohad Ben-Cohen
2010-07-08  3:39   ` Ghorai, Sukumar
2010-07-06  0:37 ` [PATCH 05/15] omap: hsmmc: add virtual card detect support Ohad Ben-Cohen
2010-07-06  1:45   ` Nicolas Pitre
2010-07-06 10:22     ` Ohad Ben-Cohen
2010-07-06 11:02       ` Roger Quadros
2010-07-06 12:02         ` Ohad Ben-Cohen
2010-07-06 11:48       ` Ohad Ben-Cohen
2010-07-06 12:39         ` Roger Quadros
2010-07-06 13:44           ` Ohad Ben-Cohen
2010-07-06 15:34         ` Madhusudhan
2010-07-06 17:00           ` Nicolas Pitre
2010-07-06  0:37 ` [PATCH 06/15] omap zoom2: wlan board muxing Ohad Ben-Cohen
2010-07-06 11:43   ` Tony Lindgren
2010-07-08  3:39   ` Ghorai, Sukumar
2010-07-08  9:45     ` Tony Lindgren
2010-07-08 20:12       ` Ohad Ben-Cohen
2010-07-06  0:37 ` [PATCH 07/15] omap zoom3: " Ohad Ben-Cohen
2010-07-06  0:37 ` [PATCH 08/15] wireless: wl1271: make wl12xx.h common to both spi and sdio Ohad Ben-Cohen
2010-07-06  7:08   ` Luciano Coelho
2010-07-06  0:37 ` [PATCH 09/15] wireless: wl12xx: support pdata SDIO handlers Ohad Ben-Cohen
2010-07-06  0:37 ` [PATCH 10/15] wireless: wl1271: support return value for the set power func Ohad Ben-Cohen
2010-07-06  7:11   ` Luciano Coelho
2010-07-06  0:37 ` [PATCH 11/15] wireless: wl1271: introduce platform device support Ohad Ben-Cohen
2010-07-06  8:53   ` Roger Quadros
2010-07-06  9:30     ` Ohad Ben-Cohen
2010-07-06 10:35       ` Roger Quadros
2010-07-06 12:53         ` Ohad Ben-Cohen
2010-07-06 14:30           ` Roger Quadros
2010-07-06 17:42             ` Nicolas Pitre
2010-07-06 19:51               ` Adrian Hunter
2010-07-07  8:02                 ` Roger Quadros
2010-07-07 14:02                   ` Nicolas Pitre
2010-07-07 14:54                     ` Madhusudhan
2010-07-07 15:46                       ` Nicolas Pitre
2010-07-07 19:59                     ` Adrian Hunter
2010-07-08  4:34                       ` Nicolas Pitre
2010-07-07  7:48               ` Roger Quadros
2010-07-07 13:52                 ` Nicolas Pitre
2010-07-08  8:54                   ` Roger Quadros
2010-07-08 20:10               ` Ohad Ben-Cohen
2010-07-09  8:12                 ` Roger Quadros
2010-07-09  8:32                   ` Ohad Ben-Cohen
2010-07-09  9:24                     ` Grazvydas Ignotas
2010-08-10 21:21               ` Ohad Ben-Cohen
2010-07-06  0:37 ` [PATCH 12/15] wireless: wl1271: take irq info from platform data Ohad Ben-Cohen
2010-07-06  0:37 ` [PATCH 13/15] wireless: wl1271: make ref_clock configurable by board Ohad Ben-Cohen
2010-07-06  0:37 ` Ohad Ben-Cohen [this message]
2010-07-06 12:33   ` [PATCH 14/15] omap: zoom: add WLAN device Roger Quadros
2010-07-06 13:47     ` Ohad Ben-Cohen
2010-07-08  3:39   ` Ghorai, Sukumar
2010-07-06  0:37 ` [PATCH 15/15] omap: zoom: enable " Ohad Ben-Cohen
2010-07-08  3:39   ` Ghorai, Sukumar
2010-07-08 20:13     ` Ohad Ben-Cohen
2010-07-08  3:39 ` [PATCH 00/15] wlan+omap+mmc: out-of-the-box WLAN support for ZOOM2/3 Ghorai, Sukumar

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=1278376666-3509-15-git-send-email-ohad@wizery.com \
    --to=ohad@wizery.com \
    --cc=linux-arm-kernel@lists.infradead.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).