[PATCH 4/4] mmc: omap_hsmmc: Simplify init for twl6030 MMC card detect
Rajendra Nayak
rnayak at ti.com
Fri Mar 2 01:10:03 EST 2012
On Friday 02 March 2012 12:25 AM, Tony Lindgren wrote:
> There's no need to use callbacks for this, we can
> do it directly between MMC driver and twl6030.
>
> Cc: Samuel Ortiz<sameo at linux.intel.com>
> Cc: Chris Ball<cjb at laptop.org>
> Cc: Rajendra Nayak<rnayak at ti.com>
> Signed-off-by: Tony Lindgren<tony at atomide.com>
> ---
[..]
> diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c
> index 7ca7a5c..8cf4e54 100644
> --- a/arch/arm/mach-omap2/board-omap4panda.c
> +++ b/arch/arm/mach-omap2/board-omap4panda.c
> @@ -153,8 +153,8 @@ static struct omap2_hsmmc_info mmc[] = {
> {
> .mmc = 1,
> .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
> - .gpio_wp = -EINVAL,
> .gpio_cd = -EINVAL,
> + .gpio_wp = -EINVAL,
stray change.
> },
[..]
> diff --git a/drivers/mfd/twl6030-irq.c b/drivers/mfd/twl6030-irq.c
> index c6b456a..ce0002b 100644
> --- a/drivers/mfd/twl6030-irq.c
> +++ b/drivers/mfd/twl6030-irq.c
> @@ -283,35 +283,30 @@ int twl6030_mmc_card_detect_config(void)
> * Card status on TWL6030 for MMC1
> */
> ret = twl_i2c_read_u8(TWL6030_MODULE_ID0,®_val, TWL6030_MMCCTRL);
> - if (ret< 0) {
> - pr_err("twl6030: Failed to read MMCCTRL, error %d\n", ret);
> - return ret;
> - }
> + if (ret< 0)
> + goto err;
> reg_val&= ~VMMC_AUTO_OFF;
> reg_val |= SW_FC;
> ret = twl_i2c_write_u8(TWL6030_MODULE_ID0, reg_val, TWL6030_MMCCTRL);
> - if (ret< 0) {
> - pr_err("twl6030: Failed to write MMCCTRL, error %d\n", ret);
> - return ret;
> - }
> + if (ret< 0)
> + goto err;
>
> /* Configuring PullUp-PullDown register */
> ret = twl_i2c_read_u8(TWL6030_MODULE_ID0,®_val,
> TWL6030_CFG_INPUT_PUPD3);
> - if (ret< 0) {
> - pr_err("twl6030: Failed to read CFG_INPUT_PUPD3, error %d\n",
> - ret);
> - return ret;
> - }
> + if (ret< 0)
> + goto err;
> reg_val&= ~(MMC_PU | MMC_PD);
> ret = twl_i2c_write_u8(TWL6030_MODULE_ID0, reg_val,
> TWL6030_CFG_INPUT_PUPD3);
> - if (ret< 0) {
> - pr_err("twl6030: Failed to write CFG_INPUT_PUPD3, error %d\n",
> - ret);
> - return ret;
> - }
> - return 0;
> + if (ret< 0)
> + goto err;
> +
> + return twl6030_irq_base + MMCDETECT_INTR_OFFSET;
> +
> +err:
> + pr_err("twl6030: Failed to initialize MMC card detect: %d\n", ret);
> + return -ENODEV;
> }
> EXPORT_SYMBOL(twl6030_mmc_card_detect_config);
>
> diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
> index 1aa2420..7f483b7 100644
> --- a/drivers/mmc/host/omap_hsmmc.c
> +++ b/drivers/mmc/host/omap_hsmmc.c
> @@ -34,6 +34,7 @@
> #include<linux/gpio.h>
> #include<linux/regulator/consumer.h>
> #include<linux/pm_runtime.h>
> +#include<linux/i2c/twl.h>
> #include<plat/dma.h>
> #include<mach/hardware.h>
> #include<plat/board.h>
> @@ -578,6 +579,32 @@ static void omap_hsmmc_gpio_free(struct omap_hsmmc_host *host)
> gpio_free(host->gpio_cd);
> }
>
> +#ifdef CONFIG_TWL4030_CORE
> +static int omap_hsmmc_init_twl6030(struct omap_hsmmc_host *host)
> +{
> + struct omap_mmc_platform_data *pdata = host->pdata;
> + struct omap_mmc_slot_data *slot =&pdata->slots[0];
> + int irq;
> +
> + if (gpio_is_valid(host->gpio_cd) || host->id)
I have a series, which I am asking Chris to pull, which completely
gets rid of all host->id based hard-codings' in the driver.
Isn't there a better way to do this than rely on the device instance?
regards,
Rajendra
> + return 0;
> +
> + irq = twl6030_mmc_card_detect_config();
> + if (irq<= 0)
> + return irq;
> +
> + slot->card_detect_irq = irq;
> + slot->card_detect = twl6030_mmc_card_detect;
> +
> + return 0;
> +}
> +#else
> +static inline int omap_hsmmc_init_twl6030(struct omap_hsmmc_host *host)
> +{
> + return -ENODEV;
> +}
> +#endif
> +
> /*
> * Start clock to the card
> */
> @@ -1933,6 +1960,10 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)
> if (ret)
> goto err1;
>
> + ret = omap_hsmmc_init_twl6030(host);
> + if (ret)
> + goto err1;
> +
> mmc->ops =&omap_hsmmc_ops;
>
> /*
>
More information about the linux-arm-kernel
mailing list