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: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