From patchwork Tue Jul 6 00:37:45 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ohad Ben Cohen X-Patchwork-Id: 110332 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter.kernel.org (8.14.4/8.14.3) with ESMTP id o660eqVd022118 for ; Tue, 6 Jul 2010 00:41:09 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757218Ab0GFAlG (ORCPT ); Mon, 5 Jul 2010 20:41:06 -0400 Received: from mail-bw0-f46.google.com ([209.85.214.46]:37901 "EHLO mail-bw0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757167Ab0GFAlE (ORCPT ); Mon, 5 Jul 2010 20:41:04 -0400 Received: by mail-bw0-f46.google.com with SMTP id 1so3098513bwz.19 for ; Mon, 05 Jul 2010 17:41:03 -0700 (PDT) Received: by 10.204.84.20 with SMTP id h20mr2976510bkl.186.1278376863341; Mon, 05 Jul 2010 17:41:03 -0700 (PDT) Received: from localhost.localdomain ([46.116.56.182]) by mx.google.com with ESMTPS id v6sm20227262bkx.11.2010.07.05.17.40.56 (version=TLSv1/SSLv3 cipher=RC4-MD5); Mon, 05 Jul 2010 17:41:02 -0700 (PDT) From: Ohad Ben-Cohen To: , , Cc: , , Chikkature Rajashekar Madhusudhan , Luciano Coelho , , San Mehat , Ohad Ben-Cohen Subject: [PATCH 14/15] omap: zoom: add WLAN device Date: Tue, 6 Jul 2010 03:37:45 +0300 Message-Id: <1278376666-3509-15-git-send-email-ohad@wizery.com> X-Mailer: git-send-email 1.7.0.4 In-Reply-To: <1278376666-3509-1-git-send-email-ohad@wizery.com> References: <1278376666-3509-1-git-send-email-ohad@wizery.com> Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter.kernel.org [140.211.167.41]); Tue, 06 Jul 2010 00:41:09 +0000 (UTC) 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 +#include +#include +#include +#include +#include +#include +#include + +#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);