[REPOST][PATCH] Fix IGEPv2 second MMC channel power supply
Enric Balletbò i Serra
eballetbo at gmail.com
Mon Dec 13 11:47:53 EST 2010
Hi all,
2010/12/4 Marc Zyngier <maz at misterjones.org>:
> Commit 72f381ba056 (omap3: Remove VMMC2 regulator on IGEP v2)
> removed an unused regulator entry, but left the second MMC channel
> (used by the Libertas WLAN module) without link to power regulator.
> This causes the SDIO module to fail being detected.
>
> This patch adds the two regulators that actually feed the WLAN module
> (1v8 from the TWL4030 VIO LDO, and a fixed 3v3). With that patch, the
> second channel is properly detected. Details of the power supply
> implementation were kindly provided by Enric Balletbo i Serra.
>
> Also change vmmc1 to use symbolic names instead of direct device
> reference.
>
> Tested on an IGEPv2 Rev-B.
>
> Signed-off-by: Marc Zyngier <maz at misterjones.org>
> Acked-by: Enric Balletbo i Serra <eballetbo at gmail.com>
> Cc: Tony Lindgren <tony at atomide.com>
> ---
> arch/arm/mach-omap2/board-igep0020.c | 61 ++++++++++++++++++++++++++++-----
> 1 files changed, 51 insertions(+), 10 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c
> index 5e035a5..9a85e60 100644
> --- a/arch/arm/mach-omap2/board-igep0020.c
> +++ b/arch/arm/mach-omap2/board-igep0020.c
> @@ -19,6 +19,7 @@
> #include <linux/interrupt.h>
>
> #include <linux/regulator/machine.h>
> +#include <linux/regulator/fixed.h>
> #include <linux/i2c/twl.h>
> #include <linux/mmc/host.h>
>
> @@ -257,9 +258,8 @@ static inline void __init igep2_init_smsc911x(void) { }
> static struct omap_board_config_kernel igep2_config[] __initdata = {
> };
>
> -static struct regulator_consumer_supply igep2_vmmc1_supply = {
> - .supply = "vmmc",
> -};
> +static struct regulator_consumer_supply igep2_vmmc1_supply =
> + REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.0");
>
> /* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */
> static struct regulator_init_data igep2_vmmc1 = {
> @@ -276,6 +276,52 @@ static struct regulator_init_data igep2_vmmc1 = {
> .consumer_supplies = &igep2_vmmc1_supply,
> };
>
> +static struct regulator_consumer_supply igep2_vio_supply =
> + REGULATOR_SUPPLY("vmmc_aux", "mmci-omap-hs.1");
> +
> +static struct regulator_init_data igep2_vio = {
> + .constraints = {
> + .min_uV = 1800000,
> + .max_uV = 1800000,
> + .apply_uV = 1,
> + .valid_modes_mask = REGULATOR_MODE_NORMAL
> + | REGULATOR_MODE_STANDBY,
> + .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
> + | REGULATOR_CHANGE_MODE
> + | REGULATOR_CHANGE_STATUS,
> + },
> + .num_consumer_supplies = 1,
> + .consumer_supplies = &igep2_vio_supply,
> +};
> +
> +static struct regulator_consumer_supply igep2_vmmc2_supply =
> + REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.1");
> +
> +static struct regulator_init_data igep2_vmmc2 = {
> + .constraints = {
> + .valid_modes_mask = REGULATOR_MODE_NORMAL,
> + .always_on = 1,
> + },
> + .num_consumer_supplies = 1,
> + .consumer_supplies = &igep2_vmmc2_supply,
> +};
> +
> +static struct fixed_voltage_config igep2_vwlan = {
> + .supply_name = "vwlan",
> + .microvolts = 3300000,
> + .gpio = -EINVAL,
> + .enabled_at_boot = 1,
> + .init_data = &igep2_vmmc2,
> +};
> +
> +static struct platform_device igep2_vwlan_device = {
> + .name = "reg-fixed-voltage",
> + .id = 0,
> + .dev = {
> + .platform_data = &igep2_vwlan,
> + },
> +};
> +
> static struct omap2_hsmmc_info mmc[] = {
> {
> .mmc = 1,
> @@ -373,12 +419,6 @@ static int igep2_twl_gpio_setup(struct device *dev,
> omap2_hsmmc_init(mmc);
>
> /*
> - * link regulators to MMC adapters ... we "know" the
> - * regulators will be set up only *after* we return.
> - */
> - igep2_vmmc1_supply.dev = mmc[0].dev;
> -
> - /*
> * REVISIT: need ehci-omap hooks for external VBUS
> * power switch and overcurrent detect
> */
> @@ -489,6 +529,7 @@ static void __init igep2_display_init(void)
>
> static struct platform_device *igep2_devices[] __initdata = {
> &igep2_dss_device,
> + &igep2_vwlan_device,
> };
>
> static void __init igep2_init_irq(void)
> @@ -519,7 +560,7 @@ static struct twl4030_platform_data igep2_twldata = {
> .gpio = &igep2_twl4030_gpio_pdata,
> .vmmc1 = &igep2_vmmc1,
> .vpll2 = &igep2_vpll2,
> -
> + .vio = &igep2_vio,
> };
>
> static struct i2c_board_info __initdata igep2_i2c1_boardinfo[] = {
> --
> 1.7.3.2
>
>
Tony, please can this patch be included before 2.6.37 ? Without this
patch the wifi module on IGEP v2 board not works.
Thanks,
Enric Balletbo i Serra.
More information about the linux-arm-kernel
mailing list