Re: [PATCH 4/4] mmc: omap_hsmmc: Simplify init for twl6030 MMC card detect

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

 



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@xxxxxxxxxxxxxxx>
Cc: Chris Ball<cjb@xxxxxxxxxx>
Cc: Rajendra Nayak<rnayak@xxxxxx>
Signed-off-by: Tony Lindgren<tony@xxxxxxxxxxx>
---
[..]
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,&reg_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,&reg_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;

  	/*


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


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux