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
>
>
next prev parent reply other threads:[~2010-01-21 9:08 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.