From c60e43a2b31e86aee614ba7a7768b0139b9528fe Mon Sep 17 00:00:00 2001 From: Bartosz Markowski Date: Mon, 19 Sep 2011 15:51:26 +0200 Subject: WLAN: u5500: Add new wlan platform file for u5500 * Split board config files for u8500 and u5500 * Set sdi3 and mmc2 for u5500 WLAN ST-Ericsson ID: 352334 ST-Ericsson FOSS-OUT ID: Trivial Signed-off-by: Bartosz Markowski Change-Id: I9746591fe33c3c3748a50c86d01205fc0680f5d2 Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/31410 Reviewed-by: Stefan NILSSON9 Reviewed-by: Srinidhi KASAGAR --- arch/arm/mach-ux500/board-mop500-wlan.c | 52 ++------------- arch/arm/mach-ux500/board-u5500-wlan.c | 109 ++++++++++++++++++++++++++++++++ arch/arm/mach-ux500/board-u5500-wlan.h | 18 ++++++ 3 files changed, 133 insertions(+), 46 deletions(-) create mode 100644 arch/arm/mach-ux500/board-u5500-wlan.c create mode 100644 arch/arm/mach-ux500/board-u5500-wlan.h (limited to 'arch') diff --git a/arch/arm/mach-ux500/board-mop500-wlan.c b/arch/arm/mach-ux500/board-mop500-wlan.c index 16169d1cfcb..e525d4fe8aa 100644 --- a/arch/arm/mach-ux500/board-mop500-wlan.c +++ b/arch/arm/mach-ux500/board-mop500-wlan.c @@ -16,8 +16,6 @@ #include static void cw1200_release(struct device *dev); -static int cw1200_power_ctrl(const struct cw1200_platform_data *pdata, - bool enable); static struct resource cw1200_href_resources[] = { { @@ -68,10 +66,11 @@ EXPORT_SYMBOL_GPL(cw1200_get_platform_data); static int cw1200_pins_enable(bool enable) { - struct ux500_pins *pins; + struct ux500_pins *pins = NULL; int ret = 0; pins = ux500_pins_get("sdi1"); + if (!pins) { printk(KERN_ERR "cw1200: Pins are not found. " "Check platform data.\n"); @@ -93,45 +92,12 @@ static int cw1200_pins_enable(bool enable) return ret; } -static int cw1200_power_ctrl(const struct cw1200_platform_data *pdata, - bool enable) -{ - static const char *vdd_name = "vdd"; - struct regulator *vdd; - int ret = 0; - - vdd = regulator_get(&cw1200_device.dev, vdd_name); - if (IS_ERR(vdd)) { - ret = PTR_ERR(vdd); - dev_warn(&cw1200_device.dev, - "%s: Failed to get regulator '%s': %d\n", - __func__, vdd_name, ret); - } else { - if (enable) - ret = regulator_enable(vdd); - else - ret = regulator_disable(vdd); - - if (ret) { - dev_warn(&cw1200_device.dev, - "%s: Failed to %s regulator '%s': %d\n", - __func__, enable ? "enable" : "disable", - vdd_name, ret); - } - regulator_put(vdd); - } - return ret; -} - int __init mop500_wlan_init(void) { int ret; - if (machine_is_snowball() || - machine_is_u8500() || - machine_is_u5500() || - machine_is_nomadik()) { - cw1200_device.num_resources = - ARRAY_SIZE(cw1200_href_resources); + + if (machine_is_u8500() || machine_is_nomadik()) { + cw1200_device.num_resources = ARRAY_SIZE(cw1200_href_resources); cw1200_device.resource = cw1200_href_resources; } else if (machine_is_hrefv60()) { cw1200_device.num_resources = @@ -145,18 +111,12 @@ int __init mop500_wlan_init(void) return -ENOTSUPP; } - if (machine_is_snowball() || - machine_is_u5500()) - cw1200_platform_data.mmc_id = "mmc2"; - else - cw1200_platform_data.mmc_id = "mmc3"; + cw1200_platform_data.mmc_id = "mmc3"; cw1200_platform_data.reset = &cw1200_device.resource[0]; cw1200_platform_data.irq = &cw1200_device.resource[1]; cw1200_device.dev.release = cw1200_release; - if (machine_is_snowball()) - cw1200_platform_data.power_ctrl = cw1200_power_ctrl; ret = cw1200_pins_enable(true); if (WARN_ON(ret)) diff --git a/arch/arm/mach-ux500/board-u5500-wlan.c b/arch/arm/mach-ux500/board-u5500-wlan.c new file mode 100644 index 00000000000..68282db06c3 --- /dev/null +++ b/arch/arm/mach-ux500/board-u5500-wlan.c @@ -0,0 +1,109 @@ +/* + * Copyright (C) ST-Ericsson SA 2011 + * + * Author: Dmitry Tarnyagin + *Author: Bartosz Markowski for ST-Ericsson + * License terms: GNU General Public License (GPL) version 2 + */ + +#include +#include +#include +#include +#include +#include +#include +#include "pins.h" +#include + +static void cw1200_release(struct device *dev); + +static struct resource cw1200_u5500_resources[] = { + { + .start = NOMADIK_GPIO_TO_IRQ(129), + .end = NOMADIK_GPIO_TO_IRQ(129), + .flags = IORESOURCE_IRQ, + .name = "cw1200_irq", + }, +}; + +static struct cw1200_platform_data cw1200_platform_data = { 0 }; + +static struct platform_device cw1200_device = { + .name = "cw1200_wlan", + .dev = { + .platform_data = &cw1200_platform_data, + .release = cw1200_release, + .init_name = "cw1200_wlan", + }, +}; + +const struct cw1200_platform_data *cw1200_get_platform_data(void) +{ + return &cw1200_platform_data; +} +EXPORT_SYMBOL_GPL(cw1200_get_platform_data); + +static int cw1200_pins_enable(bool enable) +{ + struct ux500_pins *pins = NULL; + int ret = 0; + + pins = ux500_pins_get("sdi3"); + + if (!pins) { + printk(KERN_ERR "cw1200: Pins are not found. " + "Check platform data.\n"); + return -ENOENT; + } + + if (enable) + ret = ux500_pins_enable(pins); + else + ret = ux500_pins_disable(pins); + + if (ret) + printk(KERN_ERR "cw1200: Pins can not be %s: %d.\n", + enable ? "enabled" : "disabled", + ret); + + ux500_pins_put(pins); + + return ret; +} + +int __init u5500_wlan_init(void) +{ + int ret; + + if (machine_is_u5500()) { + cw1200_device.num_resources = ARRAY_SIZE(cw1200_u5500_resources); + cw1200_device.resource = cw1200_u5500_resources; + } else { + dev_err(&cw1200_device.dev, + "Unsupported mach type %d " + "(check mach-types.h)\n", + __machine_arch_type); + return -ENOTSUPP; + } + + cw1200_platform_data.mmc_id = "mmc2"; + cw1200_platform_data.irq = &cw1200_device.resource[0]; + + cw1200_device.dev.release = cw1200_release; + + ret = cw1200_pins_enable(true); + if (WARN_ON(ret)) + return ret; + + ret = platform_device_register(&cw1200_device); + if (ret) + cw1200_pins_enable(false); + + return ret; +} + +static void cw1200_release(struct device *dev) +{ + cw1200_pins_enable(false); +} diff --git a/arch/arm/mach-ux500/board-u5500-wlan.h b/arch/arm/mach-ux500/board-u5500-wlan.h new file mode 100644 index 00000000000..89fd41166fd --- /dev/null +++ b/arch/arm/mach-ux500/board-u5500-wlan.h @@ -0,0 +1,18 @@ +/* + * Copyright (C) ST-Ericsson SA 2011 + * + * License terms: GNU General Public License (GPL), version 2 + * + * U5500 board specific cw1200 (WLAN device) initialization. + * + * Author: Dmitry Tarnyagin + * Author: Bartosz Markowski for ST-Ericsson + * + */ + +#ifndef __BOARD_U5500_WLAN_H +#define __BOARD_U5500_WLAN_H + +int u5500_wlan_init(void); + +#endif -- cgit v1.2.3