RE: [PATCH V2 2/10] omap: Rename mmc-twl4030 files to hsmmc

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> -----Original Message-----
> From: linux-mmc-owner@xxxxxxxxxxxxxxx [mailto:linux-mmc-
> owner@xxxxxxxxxxxxxxx] On Behalf Of Madhusudhan
> Sent: Wednesday, January 20, 2010 5:42 PM
> To: 'Adrian Hunter'; 'Tony Lindgren'
> Cc: 'Paul Walmsley'; 'linux-omap Mailing List'; 'linux-mmc Mailing List';
> 'Andrew Morton'
> Subject: RE: [PATCH V2 2/10] omap: Rename mmc-twl4030 files to hsmmc
> 
> 
> 
> > -----Original Message-----
> > From: Adrian Hunter [mailto:adrian.hunter@xxxxxxxxx]
> > Sent: Saturday, January 16, 2010 7:33 PM
> > To: Tony Lindgren
> > Cc: Adrian Hunter; Madhusudhan Chikkature; Paul Walmsley; linux-omap
> > Mailing List; linux-mmc Mailing List; Andrew Morton
> > Subject: [PATCH V2 2/10] omap: Rename mmc-twl4030 files to hsmmc
> >
> > From a65fae702aa81d4596d6fbefd2ab3c8ea87c244a Mon Sep 17 00:00:00 2001
> > From: Adrian Hunter <adrian.hunter@xxxxxxxxx>
> > Date: Sun, 17 Jan 2010 02:34:22 +0200
> > Subject: [PATCH] omap: Rename mmc-twl4030 files to hsmmc
> >
> > mmc-twl4030.[ch] no longer has any dependency on twl4030
> > and should be renamed to reflect that.
> >
> > Signed-off-by: Adrian Hunter <adrian.hunter@xxxxxxxxx>
> > ---
> >  arch/arm/mach-omap2/Makefile                 |   28 ++--
> >  arch/arm/mach-omap2/board-2430sdp.c          |    2 +-
> >  arch/arm/mach-omap2/board-3430sdp.c          |    2 +-
> >  arch/arm/mach-omap2/board-cm-t35.c           |    2 +-
> >  arch/arm/mach-omap2/board-igep0020.c         |    2 +-
> >  arch/arm/mach-omap2/board-ldp.c              |    2 +-
> >  arch/arm/mach-omap2/board-omap3beagle.c      |    2 +-
> >  arch/arm/mach-omap2/board-omap3evm.c         |    2 +-
> >  arch/arm/mach-omap2/board-omap3pandora.c     |    2 +-
> >  arch/arm/mach-omap2/board-omap3touchbook.c   |    2 +-
> >  arch/arm/mach-omap2/board-overo.c            |    2 +-
> >  arch/arm/mach-omap2/board-rx51-peripherals.c |    2 +-
> >  arch/arm/mach-omap2/board-zoom-peripherals.c |    2 +-
> >  arch/arm/mach-omap2/hsmmc.c                  |  247
> > ++++++++++++++++++++++++++
> >  arch/arm/mach-omap2/hsmmc.h                  |   34 ++++
> >  arch/arm/mach-omap2/mmc-twl4030.c            |  247 -------------------
> --
> > -----
> >  arch/arm/mach-omap2/mmc-twl4030.h            |   34 ----
> >  17 files changed, 307 insertions(+), 307 deletions(-)
> >  create mode 100644 arch/arm/mach-omap2/hsmmc.c
> >  create mode 100644 arch/arm/mach-omap2/hsmmc.h
> >  delete mode 100644 arch/arm/mach-omap2/mmc-twl4030.c
> >  delete mode 100644 arch/arm/mach-omap2/mmc-twl4030.h
> >
> > diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
> > index b32678b..a7e4c5a 100644
> > --- a/arch/arm/mach-omap2/Makefile
> > +++ b/arch/arm/mach-omap2/Makefile
> > @@ -71,42 +71,42 @@ obj-y					+=
> $(i2c-omap-m)
> > $(i2c-omap-y)
> >  obj-$(CONFIG_MACH_OMAP_GENERIC)		+= board-generic.o
> >  obj-$(CONFIG_MACH_OMAP_H4)		+= board-h4.o
> >  obj-$(CONFIG_MACH_OMAP_2430SDP)		+= board-2430sdp.o \
> > -					   mmc-twl4030.o
> > +					   hsmmc.o
> >  obj-$(CONFIG_MACH_OMAP_APOLLON)		+= board-apollon.o
> >  obj-$(CONFIG_MACH_OMAP3_BEAGLE)		+= board-omap3beagle.o \
> > -					   mmc-twl4030.o
> > +					   hsmmc.o
> >  obj-$(CONFIG_MACH_OMAP_LDP)		+= board-ldp.o \
> > -					   mmc-twl4030.o
> > +					   hsmmc.o
> >  obj-$(CONFIG_MACH_OVERO)		+= board-overo.o \
> > -					   mmc-twl4030.o
> > +					   hsmmc.o
> >  obj-$(CONFIG_MACH_OMAP3EVM)		+= board-omap3evm.o \
> > -					   mmc-twl4030.o
> > +					   hsmmc.o
> >  obj-$(CONFIG_MACH_OMAP3_PANDORA)	+= board-omap3pandora.o \
> > -					   mmc-twl4030.o
> > +					   hsmmc.o
> >  obj-$(CONFIG_MACH_OMAP_3430SDP)		+= board-3430sdp.o \
> > -					   mmc-twl4030.o
> > +					   hsmmc.o
> >  obj-$(CONFIG_MACH_NOKIA_N8X0)		+= board-n8x0.o
> >  obj-$(CONFIG_MACH_NOKIA_RX51)		+= board-rx51.o \
> >  					   board-rx51-sdram.o \
> >  					   board-rx51-peripherals.o \
> > -					   mmc-twl4030.o
> > +					   hsmmc.o
> >  obj-$(CONFIG_MACH_OMAP_ZOOM2)		+= board-zoom2.o \
> >  					   board-zoom-peripherals.o \
> > -					   mmc-twl4030.o \
> > +					   hsmmc.o \
> >  					   board-zoom-debugboard.o
> >  obj-$(CONFIG_MACH_OMAP_ZOOM3)		+= board-zoom3.o \
> >  					   board-zoom-peripherals.o \
> > -					   mmc-twl4030.o \
> > +					   hsmmc.o \
> >  					   board-zoom-debugboard.o
> >  obj-$(CONFIG_MACH_OMAP_3630SDP)		+= board-3630sdp.o \
> >  					   board-zoom-peripherals.o \
> > -					   mmc-twl4030.o
> > +					   hsmmc.o
> >  obj-$(CONFIG_MACH_CM_T35)		+= board-cm-t35.o \
> > -					   mmc-twl4030.o
> > +					   hsmmc.o
> >  obj-$(CONFIG_MACH_IGEP0020)		+= board-igep0020.o \
> > -					   mmc-twl4030.o
> > +					   hsmmc.o
> >  obj-$(CONFIG_MACH_OMAP3_TOUCHBOOK)	+= board-omap3touchbook.o \
> > -					   mmc-twl4030.o
> > +					   hsmmc.o
> >  obj-$(CONFIG_MACH_OMAP_4430SDP)		+= board-4430sdp.o
> >
> >  obj-$(CONFIG_MACH_OMAP3517EVM)     += board-am3517evm.o
> > diff --git a/arch/arm/mach-omap2/board-2430sdp.c b/arch/arm/mach-
> > omap2/board-2430sdp.c
> > index 31042ee..e42848d 100644
> > --- a/arch/arm/mach-omap2/board-2430sdp.c
> > +++ b/arch/arm/mach-omap2/board-2430sdp.c
> > @@ -38,7 +38,7 @@
> >  #include <plat/usb.h>
> >  #include <plat/gpmc-smc91x.h>
> >
> > -#include "mmc-twl4030.h"
> > +#include "hsmmc.h"
> >
> >  #define SDP2430_CS0_BASE	0x04000000
> >  #define SECONDARY_LCD_GPIO		147
> > diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-
> > omap2/board-3430sdp.c
> > index c90b0d0..a0cf00f 100644
> > --- a/arch/arm/mach-omap2/board-3430sdp.c
> > +++ b/arch/arm/mach-omap2/board-3430sdp.c
> > @@ -43,7 +43,7 @@
> >
> >  #include "mux.h"
> >  #include "sdram-qimonda-hyb18m512160af-6.h"
> > -#include "mmc-twl4030.h"
> > +#include "hsmmc.h"
> >
> >  #define CONFIG_DISABLE_HFCLK 1
> >
> > diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-
> > omap2/board-cm-t35.c
> > index 2626a9f..214a2a8 100644
> > --- a/arch/arm/mach-omap2/board-cm-t35.c
> > +++ b/arch/arm/mach-omap2/board-cm-t35.c
> > @@ -46,7 +46,7 @@
> >
> >  #include "mux.h"
> >  #include "sdram-micron-mt46h32m32lf-6.h"
> > -#include "mmc-twl4030.h"
> > +#include "hsmmc.h"
> >
> >  #define CM_T35_GPIO_PENDOWN	57
> >
> > diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-
> > omap2/board-igep0020.c
> > index 117b8fd..9db061f 100644
> > --- a/arch/arm/mach-omap2/board-igep0020.c
> > +++ b/arch/arm/mach-omap2/board-igep0020.c
> > @@ -30,7 +30,7 @@
> >  #include <plat/usb.h>
> >
> >  #include "mux.h"
> > -#include "mmc-twl4030.h"
> > +#include "hsmmc.h"
> >
> >  #define IGEP2_SMSC911X_CS       5
> >  #define IGEP2_SMSC911X_GPIO     176
> > diff --git a/arch/arm/mach-omap2/board-ldp.c b/arch/arm/mach-
> omap2/board-
> > ldp.c
> > index 995d4a2..635f54d 100644
> > --- a/arch/arm/mach-omap2/board-ldp.c
> > +++ b/arch/arm/mach-omap2/board-ldp.c
> > @@ -44,7 +44,7 @@
> >  #include <plat/usb.h>
> >
> >  #include "mux.h"
> > -#include "mmc-twl4030.h"
> > +#include "hsmmc.h"
> >
> >  #define LDP_SMSC911X_CS		1
> >  #define LDP_SMSC911X_GPIO	152
> > diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-
> > omap2/board-omap3beagle.c
> > index 231cb4e..aaa9760 100644
> > --- a/arch/arm/mach-omap2/board-omap3beagle.c
> > +++ b/arch/arm/mach-omap2/board-omap3beagle.c
> > @@ -45,7 +45,7 @@
> >  #include <plat/timer-gp.h>
> >
> >  #include "mux.h"
> > -#include "mmc-twl4030.h"
> > +#include "hsmmc.h"
> >
> >  #define GPMC_CS0_BASE  0x60
> >  #define GPMC_CS_SIZE   0x30
> > diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-
> > omap2/board-omap3evm.c
> > index 34de178..2dd52ad 100644
> > --- a/arch/arm/mach-omap2/board-omap3evm.c
> > +++ b/arch/arm/mach-omap2/board-omap3evm.c
> > @@ -44,7 +44,7 @@
> >
> >  #include "mux.h"
> >  #include "sdram-micron-mt46h32m32lf-6.h"
> > -#include "mmc-twl4030.h"
> > +#include "hsmmc.h"
> >
> >  #define OMAP3_EVM_TS_GPIO	175
> >  #define OMAP3_EVM_EHCI_VBUS	22
> > diff --git a/arch/arm/mach-omap2/board-omap3pandora.c b/arch/arm/mach-
> > omap2/board-omap3pandora.c
> > index ef17cf1..3a11506 100644
> > --- a/arch/arm/mach-omap2/board-omap3pandora.c
> > +++ b/arch/arm/mach-omap2/board-omap3pandora.c
> > @@ -43,7 +43,7 @@
> >
> >  #include "mux.h"
> >  #include "sdram-micron-mt46h32m32lf-6.h"
> > -#include "mmc-twl4030.h"
> > +#include "hsmmc.h"
> >
> >  #define OMAP3_PANDORA_TS_GPIO		94
> >
> > diff --git a/arch/arm/mach-omap2/board-omap3touchbook.c b/arch/arm/mach-
> > omap2/board-omap3touchbook.c
> > index fe3d22c..8efef51 100644
> > --- a/arch/arm/mach-omap2/board-omap3touchbook.c
> > +++ b/arch/arm/mach-omap2/board-omap3touchbook.c
> > @@ -50,7 +50,7 @@
> >  #include <plat/timer-gp.h>
> >
> >  #include "mux.h"
> > -#include "mmc-twl4030.h"
> > +#include "hsmmc.h"
> >
> >  #include <asm/setup.h>
> >
> > diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-
> > omap2/board-overo.c
> > index d192dd9..8a9d439 100644
> > --- a/arch/arm/mach-omap2/board-overo.c
> > +++ b/arch/arm/mach-omap2/board-overo.c
> > @@ -48,7 +48,7 @@
> >
> >  #include "mux.h"
> >  #include "sdram-micron-mt46h32m32lf-6.h"
> > -#include "mmc-twl4030.h"
> > +#include "hsmmc.h"
> >
> >  #define OVERO_GPIO_BT_XGATE	15
> >  #define OVERO_GPIO_W2W_NRESET	16
> > diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c
> b/arch/arm/mach-
> > omap2/board-rx51-peripherals.c
> > index acafdbc..b2de206 100644
> > --- a/arch/arm/mach-omap2/board-rx51-peripherals.c
> > +++ b/arch/arm/mach-omap2/board-rx51-peripherals.c
> > @@ -34,7 +34,7 @@
> >  #include <plat/gpmc-smc91x.h>
> >
> >  #include "mux.h"
> > -#include "mmc-twl4030.h"
> > +#include "hsmmc.h"
> >
> >  #define SYSTEM_REV_B_USES_VAUX3	0x1699
> >  #define SYSTEM_REV_S_USES_VAUX3 0x8
> > diff --git a/arch/arm/mach-omap2/board-zoom-peripherals.c
> b/arch/arm/mach-
> > omap2/board-zoom-peripherals.c
> > index 5c8474c..671dd06 100755
> > --- a/arch/arm/mach-omap2/board-zoom-peripherals.c
> > +++ b/arch/arm/mach-omap2/board-zoom-peripherals.c
> > @@ -25,7 +25,7 @@
> >  #include <plat/usb.h>
> >
> >  #include "mux.h"
> > -#include "mmc-twl4030.h"
> > +#include "hsmmc.h"
> >
> >  /* Zoom2 has Qwerty keyboard*/
> >  static int board_keymap[] = {
> > diff --git a/arch/arm/mach-omap2/hsmmc.c b/arch/arm/mach-omap2/hsmmc.c
> > new file mode 100644
> > index 0000000..b88c538
> > --- /dev/null
> > +++ b/arch/arm/mach-omap2/hsmmc.c
> > @@ -0,0 +1,247 @@
> > +/*
> > + * linux/arch/arm/mach-omap2/hsmmc.c
> > + *
> > + * Copyright (C) 2007-2008 Texas Instruments
> > + * Copyright (C) 2008 Nokia Corporation
> > + * Author: Texas Instruments
> > + *
> > + * This program is free software; you can redistribute it and/or modify
> > + * it under the terms of the GNU General Public License version 2 as
> > + * published by the Free Software Foundation.
> > + */
> > +#include <linux/kernel.h>
> > +#include <linux/slab.h>
> > +#include <linux/string.h>
> > +#include <linux/delay.h>
> > +#include <mach/hardware.h>
> > +#include <plat/control.h>
> > +#include <plat/mmc.h>
> > +
> > +#include "hsmmc.h"
> > +
> > +#if defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE)
> > +
> > +static u16 control_pbias_offset;
> > +static u16 control_devconf1_offset;
> > +
> > +#define HSMMC_NAME_LEN	9
> > +
> > +static struct twl_mmc_controller {
> 
> Now that this file is hsmmc specific, how about renaming this as
> "hsmmc_controller"?
>

My bad, please ignore. The 3rd patch in the series seems to take care of
renaming these bits.

Regards,
Madhu

> > +	char				name[HSMMC_NAME_LEN + 1];
> > +} hsmmc[OMAP34XX_NR_MMC];
> > +
> > +#if defined(CONFIG_ARCH_OMAP3) && defined(CONFIG_PM)
> > +
> > +static int twl4030_mmc_get_context_loss(struct device *dev)
> 
> Ditto, hsmmc_get_context_loss?
> 
> > +{
> > +	/* FIXME: PM DPS not implemented yet */
> > +	return 0;
> > +}
> > +
> > +#else
> > +#define twl4030_mmc_get_context_loss NULL
> > +#endif
> > +
> > +static void hsmmc1_before_set_reg(struct device *dev, int slot,
> > +				  int power_on, int vdd)
> > +{
> > +	u32 reg, prog_io;
> > +	struct omap_mmc_platform_data *mmc = dev->platform_data;
> > +
> > +	/*
> > +	 * Assume we power both OMAP VMMC1 (for CMD, CLK, DAT0..3) and the
> > +	 * card with Vcc regulator (from twl4030 or whatever).  OMAP has
> > both
> > +	 * 1.8V and 3.0V modes, controlled by the PBIAS register.
> > +	 *
> > +	 * In 8-bit modes, OMAP VMMC1A (for DAT4..7) needs a supply, which
> > +	 * is most naturally TWL VSIM; those pins also use PBIAS.
> > +	 *
> > +	 * FIXME handle VMMC1A as needed ...
> > +	 */
> > +	if (power_on) {
> > +		if (cpu_is_omap2430()) {
> > +			reg = omap_ctrl_readl(OMAP243X_CONTROL_DEVCONF1);
> > +			if ((1 << vdd) >= MMC_VDD_30_31)
> > +				reg |= OMAP243X_MMC1_ACTIVE_OVERWRITE;
> > +			else
> > +				reg &= ~OMAP243X_MMC1_ACTIVE_OVERWRITE;
> > +			omap_ctrl_writel(reg, OMAP243X_CONTROL_DEVCONF1);
> > +		}
> > +
> > +		if (mmc->slots[0].internal_clock) {
> > +			reg = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0);
> > +			reg |= OMAP2_MMCSDIO1ADPCLKISEL;
> > +			omap_ctrl_writel(reg, OMAP2_CONTROL_DEVCONF0);
> > +		}
> > +
> > +		reg = omap_ctrl_readl(control_pbias_offset);
> > +		if (cpu_is_omap3630()) {
> > +			/* Set MMC I/O to 52Mhz */
> > +			prog_io =
> omap_ctrl_readl(OMAP343X_CONTROL_PROG_IO1);
> > +			prog_io |= OMAP3630_PRG_SDMMC1_SPEEDCTRL;
> > +			omap_ctrl_writel(prog_io,
> OMAP343X_CONTROL_PROG_IO1);
> > +		} else {
> > +			reg |= OMAP2_PBIASSPEEDCTRL0;
> > +		}
> > +		reg &= ~OMAP2_PBIASLITEPWRDNZ0;
> > +		omap_ctrl_writel(reg, control_pbias_offset);
> > +	} else {
> > +		reg = omap_ctrl_readl(control_pbias_offset);
> > +		reg &= ~OMAP2_PBIASLITEPWRDNZ0;
> > +		omap_ctrl_writel(reg, control_pbias_offset);
> > +	}
> > +}
> > +
> > +static void hsmmc1_after_set_reg(struct device *dev, int slot,
> > +				 int power_on, int vdd)
> > +{
> > +	u32 reg;
> > +
> > +	/* 100ms delay required for PBIAS configuration */
> > +	msleep(100);
> > +
> > +	if (power_on) {
> > +		reg = omap_ctrl_readl(control_pbias_offset);
> > +		reg |= (OMAP2_PBIASLITEPWRDNZ0 | OMAP2_PBIASSPEEDCTRL0);
> > +		if ((1 << vdd) <= MMC_VDD_165_195)
> > +			reg &= ~OMAP2_PBIASLITEVMODE0;
> > +		else
> > +			reg |= OMAP2_PBIASLITEVMODE0;
> > +		omap_ctrl_writel(reg, control_pbias_offset);
> > +	} else {
> > +		reg = omap_ctrl_readl(control_pbias_offset);
> > +		reg |= (OMAP2_PBIASSPEEDCTRL0 | OMAP2_PBIASLITEPWRDNZ0 |
> > +			OMAP2_PBIASLITEVMODE0);
> > +		omap_ctrl_writel(reg, control_pbias_offset);
> > +	}
> > +}
> > +
> > +static void hsmmc23_before_set_reg(struct device *dev, int slot,
> > +				   int power_on, int vdd)
> > +{
> > +	struct omap_mmc_platform_data *mmc = dev->platform_data;
> > +
> > +	if (power_on) {
> > +		/* Only MMC2 supports a CLKIN */
> > +		if (mmc->slots[0].internal_clock) {
> > +			u32 reg;
> > +
> > +			reg = omap_ctrl_readl(control_devconf1_offset);
> > +			reg |= OMAP2_MMCSDIO2ADPCLKISEL;
> > +			omap_ctrl_writel(reg, control_devconf1_offset);
> > +		}
> > +	}
> > +}
> > +
> > +static struct omap_mmc_platform_data *hsmmc_data[OMAP34XX_NR_MMC]
> > __initdata;
> > +
> > +void __init twl4030_mmc_init(struct twl4030_hsmmc_info *controllers)
> 
> Ditto, hsmmc_init?
> 
> > +{
> > +	struct twl4030_hsmmc_info *c;
> > +	int nr_hsmmc = ARRAY_SIZE(hsmmc_data);
> > +
> > +	if (cpu_is_omap2430()) {
> > +		control_pbias_offset = OMAP243X_CONTROL_PBIAS_LITE;
> > +		control_devconf1_offset = OMAP243X_CONTROL_DEVCONF1;
> > +	} else {
> > +		control_pbias_offset = OMAP343X_CONTROL_PBIAS_LITE;
> > +		control_devconf1_offset = OMAP343X_CONTROL_DEVCONF1;
> > +	}
> > +
> > +	for (c = controllers; c->mmc; c++) {
> > +		struct twl_mmc_controller *twl = hsmmc + c->mmc - 1;
> > +		struct omap_mmc_platform_data *mmc = hsmmc_data[c->mmc - 1];
> > +
> > +		if (!c->mmc || c->mmc > nr_hsmmc) {
> > +			pr_debug("MMC%d: no such controller\n", c->mmc);
> > +			continue;
> > +		}
> > +		if (mmc) {
> > +			pr_debug("MMC%d: already configured\n", c->mmc);
> > +			continue;
> > +		}
> > +
> > +		mmc = kzalloc(sizeof(struct omap_mmc_platform_data),
> > GFP_KERNEL);
> > +		if (!mmc) {
> > +			pr_err("Cannot allocate memory for mmc device!\n");
> > +			return;
> > +		}
> > +
> > +		if (c->name)
> > +			strncpy(twl->name, c->name, HSMMC_NAME_LEN);
> > +		else
> > +			snprintf(twl->name, ARRAY_SIZE(twl->name),
> > +				"mmc%islot%i", c->mmc, 1);
> > +		mmc->slots[0].name = twl->name;
> > +		mmc->nr_slots = 1;
> > +		mmc->slots[0].wires = c->wires;
> > +		mmc->slots[0].internal_clock = !c->ext_clock;
> > +		mmc->dma_mask = 0xffffffff;
> > +
> > +		mmc->get_context_loss_count =
> > +				twl4030_mmc_get_context_loss;
> > +
> > +		mmc->slots[0].switch_pin = c->gpio_cd;
> > +		mmc->slots[0].gpio_wp = c->gpio_wp;
> > +
> > +		if (c->cover_only)
> > +			mmc->slots[0].cover = 1;
> > +
> > +		if (c->nonremovable)
> > +			mmc->slots[0].nonremovable = 1;
> > +
> > +		if (c->power_saving)
> > +			mmc->slots[0].power_saving = 1;
> > +
> > +		/* NOTE:  MMC slots should have a Vcc regulator set up.
> > +		 * This may be from a TWL4030-family chip, another
> > +		 * controllable regulator, or a fixed supply.
> > +		 *
> > +		 * temporary HACK: ocr_mask instead of fixed supply
> > +		 */
> > +		mmc->slots[0].ocr_mask = c->ocr_mask;
> > +
> > +		switch (c->mmc) {
> > +		case 1:
> > +			/* on-chip level shifting via PBIAS0/PBIAS1 */
> > +			mmc->slots[0].before_set_reg =
> hsmmc1_before_set_reg;
> > +			mmc->slots[0].after_set_reg = hsmmc1_after_set_reg;
> > +
> > +			/* Omap3630 HSMMC1 supports only 4-bit */
> > +			if (cpu_is_omap3630() && c->wires > 4) {
> > +				c->wires = 4;
> > +				mmc->slots[0].wires = c->wires;
> > +			}
> > +			break;
> > +		case 2:
> > +			if (c->ext_clock)
> > +				c->transceiver = 1;
> > +			if (c->transceiver && c->wires > 4)
> > +				c->wires = 4;
> > +			/* FALLTHROUGH */
> > +		case 3:
> > +			/* off-chip level shifting, or none */
> > +			mmc->slots[0].before_set_reg =
> hsmmc23_before_set_reg;
> > +			mmc->slots[0].after_set_reg = NULL;
> > +			break;
> > +		default:
> > +			pr_err("MMC%d configuration not supported!\n",
> c->mmc);
> > +			kfree(mmc);
> > +			continue;
> > +		}
> > +		hsmmc_data[c->mmc - 1] = mmc;
> > +	}
> > +
> > +	omap2_init_mmc(hsmmc_data, OMAP34XX_NR_MMC);
> > +
> > +	/* pass the device nodes back to board setup code */
> > +	for (c = controllers; c->mmc; c++) {
> > +		struct omap_mmc_platform_data *mmc = hsmmc_data[c->mmc - 1];
> > +
> > +		if (!c->mmc || c->mmc > nr_hsmmc)
> > +			continue;
> > +		c->dev = mmc->dev;
> > +	}
> > +}
> > +
> > +#endif
> > diff --git a/arch/arm/mach-omap2/hsmmc.h b/arch/arm/mach-omap2/hsmmc.h
> > new file mode 100644
> > index 0000000..87d67c1
> > --- /dev/null
> > +++ b/arch/arm/mach-omap2/hsmmc.h
> > @@ -0,0 +1,34 @@
> > +/*
> > + * MMC definitions for OMAP2
> > + *
> > + * This program is free software; you can redistribute it and/or modify
> > + * it under the terms of the GNU General Public License version 2 as
> > + * published by the Free Software Foundation.
> > + */
> > +
> > +struct twl4030_hsmmc_info {
> > +	u8	mmc;		/* controller 1/2/3 */
> > +	u8	wires;		/* 1/4/8 wires */
> > +	bool	transceiver;	/* MMC-2 option */
> > +	bool	ext_clock;	/* use external pin for input clock */
> > +	bool	cover_only;	/* No card detect - just cover switch */
> > +	bool	nonremovable;	/* Nonremovable e.g. eMMC */
> > +	bool	power_saving;	/* Try to sleep or power off when possible
> > */
> > +	int	gpio_cd;	/* or -EINVAL */
> > +	int	gpio_wp;	/* or -EINVAL */
> > +	char	*name;		/* or NULL for default */
> > +	struct device *dev;	/* returned: pointer to mmc adapter */
> > +	int	ocr_mask;	/* temporary HACK */
> > +};
> > +
> > +#if defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE)
> > +
> > +void twl4030_mmc_init(struct twl4030_hsmmc_info *);
> 
> Ditto
> 
> > +
> > +#else
> > +
> > +static inline void twl4030_mmc_init(struct twl4030_hsmmc_info *info)
> > +{
> > +}
> > +
> > +#endif
> > diff --git a/arch/arm/mach-omap2/mmc-twl4030.c b/arch/arm/mach-
> omap2/mmc-
> > twl4030.c
> > deleted file mode 100644
> > index 9d5ad0b..0000000
> > --- a/arch/arm/mach-omap2/mmc-twl4030.c
> > +++ /dev/null
> > @@ -1,247 +0,0 @@
> > -/*
> > - * linux/arch/arm/mach-omap2/mmc-twl4030.c
> > - *
> > - * Copyright (C) 2007-2008 Texas Instruments
> > - * Copyright (C) 2008 Nokia Corporation
> > - * Author: Texas Instruments
> > - *
> > - * This program is free software; you can redistribute it and/or modify
> > - * it under the terms of the GNU General Public License version 2 as
> > - * published by the Free Software Foundation.
> > - */
> > -#include <linux/kernel.h>
> > -#include <linux/slab.h>
> > -#include <linux/string.h>
> > -#include <linux/delay.h>
> > -#include <mach/hardware.h>
> > -#include <plat/control.h>
> > -#include <plat/mmc.h>
> > -
> > -#include "mmc-twl4030.h"
> > -
> > -#if defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE)
> > -
> > -static u16 control_pbias_offset;
> > -static u16 control_devconf1_offset;
> > -
> > -#define HSMMC_NAME_LEN	9
> > -
> > -static struct twl_mmc_controller {
> > -	char				name[HSMMC_NAME_LEN + 1];
> > -} hsmmc[OMAP34XX_NR_MMC];
> > -
> > -#if defined(CONFIG_ARCH_OMAP3) && defined(CONFIG_PM)
> > -
> > -static int twl4030_mmc_get_context_loss(struct device *dev)
> > -{
> > -	/* FIXME: PM DPS not implemented yet */
> > -	return 0;
> > -}
> > -
> > -#else
> > -#define twl4030_mmc_get_context_loss NULL
> > -#endif
> > -
> > -static void hsmmc1_before_set_reg(struct device *dev, int slot,
> > -				  int power_on, int vdd)
> > -{
> > -	u32 reg, prog_io;
> > -	struct omap_mmc_platform_data *mmc = dev->platform_data;
> > -
> > -	/*
> > -	 * Assume we power both OMAP VMMC1 (for CMD, CLK, DAT0..3) and the
> > -	 * card with Vcc regulator (from twl4030 or whatever).  OMAP has
> > both
> > -	 * 1.8V and 3.0V modes, controlled by the PBIAS register.
> > -	 *
> > -	 * In 8-bit modes, OMAP VMMC1A (for DAT4..7) needs a supply, which
> > -	 * is most naturally TWL VSIM; those pins also use PBIAS.
> > -	 *
> > -	 * FIXME handle VMMC1A as needed ...
> > -	 */
> > -	if (power_on) {
> > -		if (cpu_is_omap2430()) {
> > -			reg = omap_ctrl_readl(OMAP243X_CONTROL_DEVCONF1);
> > -			if ((1 << vdd) >= MMC_VDD_30_31)
> > -				reg |= OMAP243X_MMC1_ACTIVE_OVERWRITE;
> > -			else
> > -				reg &= ~OMAP243X_MMC1_ACTIVE_OVERWRITE;
> > -			omap_ctrl_writel(reg, OMAP243X_CONTROL_DEVCONF1);
> > -		}
> > -
> > -		if (mmc->slots[0].internal_clock) {
> > -			reg = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0);
> > -			reg |= OMAP2_MMCSDIO1ADPCLKISEL;
> > -			omap_ctrl_writel(reg, OMAP2_CONTROL_DEVCONF0);
> > -		}
> > -
> > -		reg = omap_ctrl_readl(control_pbias_offset);
> > -		if (cpu_is_omap3630()) {
> > -			/* Set MMC I/O to 52Mhz */
> > -			prog_io =
> omap_ctrl_readl(OMAP343X_CONTROL_PROG_IO1);
> > -			prog_io |= OMAP3630_PRG_SDMMC1_SPEEDCTRL;
> > -			omap_ctrl_writel(prog_io,
> OMAP343X_CONTROL_PROG_IO1);
> > -		} else {
> > -			reg |= OMAP2_PBIASSPEEDCTRL0;
> > -		}
> > -		reg &= ~OMAP2_PBIASLITEPWRDNZ0;
> > -		omap_ctrl_writel(reg, control_pbias_offset);
> > -	} else {
> > -		reg = omap_ctrl_readl(control_pbias_offset);
> > -		reg &= ~OMAP2_PBIASLITEPWRDNZ0;
> > -		omap_ctrl_writel(reg, control_pbias_offset);
> > -	}
> > -}
> > -
> > -static void hsmmc1_after_set_reg(struct device *dev, int slot,
> > -				 int power_on, int vdd)
> > -{
> > -	u32 reg;
> > -
> > -	/* 100ms delay required for PBIAS configuration */
> > -	msleep(100);
> > -
> > -	if (power_on) {
> > -		reg = omap_ctrl_readl(control_pbias_offset);
> > -		reg |= (OMAP2_PBIASLITEPWRDNZ0 | OMAP2_PBIASSPEEDCTRL0);
> > -		if ((1 << vdd) <= MMC_VDD_165_195)
> > -			reg &= ~OMAP2_PBIASLITEVMODE0;
> > -		else
> > -			reg |= OMAP2_PBIASLITEVMODE0;
> > -		omap_ctrl_writel(reg, control_pbias_offset);
> > -	} else {
> > -		reg = omap_ctrl_readl(control_pbias_offset);
> > -		reg |= (OMAP2_PBIASSPEEDCTRL0 | OMAP2_PBIASLITEPWRDNZ0 |
> > -			OMAP2_PBIASLITEVMODE0);
> > -		omap_ctrl_writel(reg, control_pbias_offset);
> > -	}
> > -}
> > -
> > -static void hsmmc23_before_set_reg(struct device *dev, int slot,
> > -				   int power_on, int vdd)
> > -{
> > -	struct omap_mmc_platform_data *mmc = dev->platform_data;
> > -
> > -	if (power_on) {
> > -		/* Only MMC2 supports a CLKIN */
> > -		if (mmc->slots[0].internal_clock) {
> > -			u32 reg;
> > -
> > -			reg = omap_ctrl_readl(control_devconf1_offset);
> > -			reg |= OMAP2_MMCSDIO2ADPCLKISEL;
> > -			omap_ctrl_writel(reg, control_devconf1_offset);
> > -		}
> > -	}
> > -}
> > -
> > -static struct omap_mmc_platform_data *hsmmc_data[OMAP34XX_NR_MMC]
> > __initdata;
> > -
> > -void __init twl4030_mmc_init(struct twl4030_hsmmc_info *controllers)
> > -{
> > -	struct twl4030_hsmmc_info *c;
> > -	int nr_hsmmc = ARRAY_SIZE(hsmmc_data);
> > -
> > -	if (cpu_is_omap2430()) {
> > -		control_pbias_offset = OMAP243X_CONTROL_PBIAS_LITE;
> > -		control_devconf1_offset = OMAP243X_CONTROL_DEVCONF1;
> > -	} else {
> > -		control_pbias_offset = OMAP343X_CONTROL_PBIAS_LITE;
> > -		control_devconf1_offset = OMAP343X_CONTROL_DEVCONF1;
> > -	}
> > -
> > -	for (c = controllers; c->mmc; c++) {
> > -		struct twl_mmc_controller *twl = hsmmc + c->mmc - 1;
> > -		struct omap_mmc_platform_data *mmc = hsmmc_data[c->mmc - 1];
> > -
> > -		if (!c->mmc || c->mmc > nr_hsmmc) {
> > -			pr_debug("MMC%d: no such controller\n", c->mmc);
> > -			continue;
> > -		}
> > -		if (mmc) {
> > -			pr_debug("MMC%d: already configured\n", c->mmc);
> > -			continue;
> > -		}
> > -
> > -		mmc = kzalloc(sizeof(struct omap_mmc_platform_data),
> > GFP_KERNEL);
> > -		if (!mmc) {
> > -			pr_err("Cannot allocate memory for mmc device!\n");
> > -			return;
> > -		}
> > -
> > -		if (c->name)
> > -			strncpy(twl->name, c->name, HSMMC_NAME_LEN);
> > -		else
> > -			snprintf(twl->name, ARRAY_SIZE(twl->name),
> > -				"mmc%islot%i", c->mmc, 1);
> > -		mmc->slots[0].name = twl->name;
> > -		mmc->nr_slots = 1;
> > -		mmc->slots[0].wires = c->wires;
> > -		mmc->slots[0].internal_clock = !c->ext_clock;
> > -		mmc->dma_mask = 0xffffffff;
> > -
> > -		mmc->get_context_loss_count =
> > -				twl4030_mmc_get_context_loss;
> > -
> > -		mmc->slots[0].switch_pin = c->gpio_cd;
> > -		mmc->slots[0].gpio_wp = c->gpio_wp;
> > -
> > -		if (c->cover_only)
> > -			mmc->slots[0].cover = 1;
> > -
> > -		if (c->nonremovable)
> > -			mmc->slots[0].nonremovable = 1;
> > -
> > -		if (c->power_saving)
> > -			mmc->slots[0].power_saving = 1;
> > -
> > -		/* NOTE:  MMC slots should have a Vcc regulator set up.
> > -		 * This may be from a TWL4030-family chip, another
> > -		 * controllable regulator, or a fixed supply.
> > -		 *
> > -		 * temporary HACK: ocr_mask instead of fixed supply
> > -		 */
> > -		mmc->slots[0].ocr_mask = c->ocr_mask;
> > -
> > -		switch (c->mmc) {
> > -		case 1:
> > -			/* on-chip level shifting via PBIAS0/PBIAS1 */
> > -			mmc->slots[0].before_set_reg =
> hsmmc1_before_set_reg;
> > -			mmc->slots[0].after_set_reg = hsmmc1_after_set_reg;
> > -
> > -			/* Omap3630 HSMMC1 supports only 4-bit */
> > -			if (cpu_is_omap3630() && c->wires > 4) {
> > -				c->wires = 4;
> > -				mmc->slots[0].wires = c->wires;
> > -			}
> > -			break;
> > -		case 2:
> > -			if (c->ext_clock)
> > -				c->transceiver = 1;
> > -			if (c->transceiver && c->wires > 4)
> > -				c->wires = 4;
> > -			/* FALLTHROUGH */
> > -		case 3:
> > -			/* off-chip level shifting, or none */
> > -			mmc->slots[0].before_set_reg =
> hsmmc23_before_set_reg;
> > -			mmc->slots[0].after_set_reg = NULL;
> > -			break;
> > -		default:
> > -			pr_err("MMC%d configuration not supported!\n",
> c->mmc);
> > -			kfree(mmc);
> > -			continue;
> > -		}
> > -		hsmmc_data[c->mmc - 1] = mmc;
> > -	}
> > -
> > -	omap2_init_mmc(hsmmc_data, OMAP34XX_NR_MMC);
> > -
> > -	/* pass the device nodes back to board setup code */
> > -	for (c = controllers; c->mmc; c++) {
> > -		struct omap_mmc_platform_data *mmc = hsmmc_data[c->mmc - 1];
> > -
> > -		if (!c->mmc || c->mmc > nr_hsmmc)
> > -			continue;
> > -		c->dev = mmc->dev;
> > -	}
> > -}
> > -
> > -#endif
> > diff --git a/arch/arm/mach-omap2/mmc-twl4030.h b/arch/arm/mach-
> omap2/mmc-
> > twl4030.h
> > deleted file mode 100644
> > index 87d67c1..0000000
> > --- a/arch/arm/mach-omap2/mmc-twl4030.h
> > +++ /dev/null
> > @@ -1,34 +0,0 @@
> > -/*
> > - * MMC definitions for OMAP2
> > - *
> > - * This program is free software; you can redistribute it and/or modify
> > - * it under the terms of the GNU General Public License version 2 as
> > - * published by the Free Software Foundation.
> > - */
> > -
> > -struct twl4030_hsmmc_info {
> > -	u8	mmc;		/* controller 1/2/3 */
> > -	u8	wires;		/* 1/4/8 wires */
> > -	bool	transceiver;	/* MMC-2 option */
> > -	bool	ext_clock;	/* use external pin for input clock */
> > -	bool	cover_only;	/* No card detect - just cover switch */
> > -	bool	nonremovable;	/* Nonremovable e.g. eMMC */
> > -	bool	power_saving;	/* Try to sleep or power off when possible
> > */
> > -	int	gpio_cd;	/* or -EINVAL */
> > -	int	gpio_wp;	/* or -EINVAL */
> > -	char	*name;		/* or NULL for default */
> > -	struct device *dev;	/* returned: pointer to mmc adapter */
> > -	int	ocr_mask;	/* temporary HACK */
> > -};
> > -
> > -#if defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE)
> > -
> > -void twl4030_mmc_init(struct twl4030_hsmmc_info *);
> > -
> > -#else
> > -
> > -static inline void twl4030_mmc_init(struct twl4030_hsmmc_info *info)
> > -{
> > -}
> > -
> > -#endif
> > --
> > 1.6.0.4
> 
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux