public inbox for linux-omap@vger.kernel.org
 help / color / mirror / Atom feed
From: Adrian Hunter <adrian.hunter@nokia.com>
To: Madhusudhan <madhu.cr@ti.com>
Cc: 'Tony Lindgren' <tony@atomide.com>,
	'Paul Walmsley' <paul@pwsan.com>,
	'linux-omap Mailing List' <linux-omap@vger.kernel.org>,
	'linux-mmc Mailing List' <linux-mmc@vger.kernel.org>,
	'Andrew Morton' <akpm@linux-foundation.org>
Subject: Re: [PATCH V2 2/10] omap: Rename mmc-twl4030 files to hsmmc
Date: Thu, 21 Jan 2010 11:07:49 +0200	[thread overview]
Message-ID: <4B581965.3090403@nokia.com> (raw)
In-Reply-To: <017701ca9a2b$07ceb920$544ff780@am.dhcp.ti.com>

ext Madhusudhan wrote:
> 
>> -----Original Message-----
>> From: linux-mmc-owner@vger.kernel.org [mailto:linux-mmc-
>> owner@vger.kernel.org] 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@nokia.com]
>>> 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@nokia.com>
>>> 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@nokia.com>
>>> ---
>>>  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
> 

Will you be Ack'ing these patches?

>>> +   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@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
> 


  reply	other threads:[~2010-01-21  9:07 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-01-17  1:32 [PATCH V2 0/10] omap_hsmmc changes V2 Adrian Hunter
2010-01-17  1:32 ` [PATCH V2 1/10] omap_hsmmc: Move gpio and regulator control from board file Adrian Hunter
2010-01-17  1:33 ` [PATCH V2 2/10] omap: Rename mmc-twl4030 files to hsmmc Adrian Hunter
2010-01-20 23:41   ` Madhusudhan
2010-01-20 23:48     ` Madhusudhan
2010-01-21  9:07       ` Adrian Hunter [this message]
2010-01-21 17:23         ` Madhusudhan
2010-01-17  1:33 ` [PATCH V2 3/10] omap: Rename hsmmc symbols to reflect independence from twl4030 Adrian Hunter
2010-01-17  1:33 ` [PATCH V2 4/10] omap: Reconnect hsmmc context loss count Adrian Hunter
2010-01-17  1:33 ` [PATCH V2 5/10] omap: Add functions for dynamic remuxing of pins Adrian Hunter
2010-01-20  1:21   ` Tony Lindgren
2010-01-20  8:05     ` Adrian Hunter
2010-01-22 17:17       ` Tony Lindgren
2010-01-17  1:33 ` [PATCH V2 6/10] omap: RX51: Remux to pull eMMC lines down when powering off Adrian Hunter
2010-01-17  1:33 ` [PATCH V2 7/10] omap_hsmmc: Allow for power saving without going off Adrian Hunter
2010-01-17  1:33 ` [PATCH V2 8/10] omap_hsmmc: Fix disable timeouts Adrian Hunter
2010-01-17  1:33 ` [PATCH V2 9/10] omap_hsmmc: Ensure regulator enable / disable are paired Adrian Hunter
2010-01-17  1:34 ` [PATCH V2 10/10] omap_hsmmc: Allow for a shared VccQ Adrian Hunter
2010-01-21 17:29 ` [PATCH V2 0/10] omap_hsmmc changes V2 Madhusudhan
2010-01-22  8:41   ` Adrian Hunter
  -- strict thread matches above, loose matches on Subject: below --
2010-01-17  1:28 Adrian Hunter
2010-01-17  1:28 ` [PATCH V2 2/10] omap: Rename mmc-twl4030 files to hsmmc Adrian Hunter

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=4B581965.3090403@nokia.com \
    --to=adrian.hunter@nokia.com \
    --cc=akpm@linux-foundation.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=madhu.cr@ti.com \
    --cc=paul@pwsan.com \
    --cc=tony@atomide.com \
    /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