linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 1/4] omap4 hsmmc: Adding card detect support for MMC1
@ 2010-09-24 17:13 kishore kadiyala
  2010-09-25  0:38 ` Tony Lindgren
                   ` (2 more replies)
  0 siblings, 3 replies; 14+ messages in thread
From: kishore kadiyala @ 2010-09-24 17:13 UTC (permalink / raw)
  To: linux-arm-kernel

Adding card detect callback function and card detect configuration
function for MMC1 Controller on OMAP4.

Card detect configuration function does initial configuration of the
MMC Control & PullUp-PullDown registers of Phoenix.

For MMC1 Controller, card detect interrupt source is
twl6030 which is non-gpio. The card detect call back function provides
card present/absent status by reading MMC Control register present
on twl6030.

Since OMAP4 doesn't use any GPIO line as used in OMAP3 for card detect,
the suspend/resume initialization which was done in omap_hsmmc_gpio_init
previously is moved to the probe thus making it generic for both OMAP3 & OMAP4.

Cc: Tony Lindgren <tony@atomide.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Madhusudhan Chikkature <madhu.cr@ti.com>
Cc: Adrian Hunter <adrian.hunter@nokia.com>
Signed-off-by: Kishore Kadiyala <kishore.kadiyala@ti.com>
---
 arch/arm/mach-omap2/board-4430sdp.c |    7 +++-
 drivers/mfd/twl6030-irq.c           |   73 +++++++++++++++++++++++++++++++++++
 drivers/mmc/host/omap_hsmmc.c       |    4 +-
 include/linux/i2c/twl.h             |   31 +++++++++++++++
 4 files changed, 112 insertions(+), 3 deletions(-)

diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c
index 9447644..a49f285 100644
--- a/arch/arm/mach-omap2/board-4430sdp.c
+++ b/arch/arm/mach-omap2/board-4430sdp.c
@@ -227,9 +227,14 @@ static int omap4_twl6030_hsmmc_late_init(struct device *dev)
 	struct omap_mmc_platform_data *pdata = dev->platform_data;

 	/* Setting MMC1 Card detect Irq */
-	if (pdev->id == 0)
+	if (pdev->id == 0) {
+		ret = twl6030_mmc_card_detect_config();
+		if (ret)
+			pr_err("Failed configuring MMC1 card detect\n");
 		pdata->slots[0].card_detect_irq = TWL6030_IRQ_BASE +
 						MMCDETECT_INTR_OFFSET;
+		pdata->slots[0].card_detect = twl6030_mmc_card_detect;
+	}
 	return ret;
 }

diff --git a/drivers/mfd/twl6030-irq.c b/drivers/mfd/twl6030-irq.c
index 10bf228..2d3bb82 100644
--- a/drivers/mfd/twl6030-irq.c
+++ b/drivers/mfd/twl6030-irq.c
@@ -36,6 +36,7 @@
 #include <linux/irq.h>
 #include <linux/kthread.h>
 #include <linux/i2c/twl.h>
+#include <linux/platform_device.h>

 /*
  * TWL6030 (unlike its predecessors, which had two level interrupt handling)
@@ -223,6 +224,78 @@ int twl6030_interrupt_mask(u8 bit_mask, u8 offset)
 }
 EXPORT_SYMBOL(twl6030_interrupt_mask);

+int twl6030_mmc_card_detect_config(void)
+{
+	int ret;
+	u8 reg_val = 0;
+
+	/* Unmasking the Card detect Interrupt line for MMC1 from Phoenix */
+	twl6030_interrupt_unmask(TWL6030_MMCDETECT_INT_MASK,
+						REG_INT_MSK_LINE_B);
+	twl6030_interrupt_unmask(TWL6030_MMCDETECT_INT_MASK,
+						REG_INT_MSK_STS_B);
+	/*
+	 * Intially Configuring MMC_CTRL for receving interrupts &
+	 * 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;
+	}
+	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;
+	}
+
+	/* 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;
+	}
+	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;
+}
+EXPORT_SYMBOL(twl6030_mmc_card_detect_config);
+
+int twl6030_mmc_card_detect(struct device *dev, int slot)
+{
+	int ret = -EIO;
+	u8 read_reg = 0;
+	struct platform_device *pdev = to_platform_device(dev);
+
+	if (pdev->id) {
+		/* TWL6030 provide's Card detect support for
+		 * only MMC1 controller.
+		 */
+		pr_err("Unkown MMC controller %d in %s\n", pdev->id, __func__);
+		return ret;
+	}
+	/*
+	 * BIT0 of MMC_CTRL on TWL6030 provides card status for MMC1
+	 * 0 - Card not present ,1 - Card present
+	 */
+	ret = twl_i2c_read_u8(TWL6030_MODULE_ID0, &read_reg,
+						TWL6030_MMCCTRL);
+	if (ret >= 0)
+		ret = read_reg & STS_MMC;
+	return ret;
+}
+EXPORT_SYMBOL(twl6030_mmc_card_detect);
+
 int twl6030_init_irq(int irq_num, unsigned irq_base, unsigned irq_end)
 {

diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
index 562dbbb..a51894d 100644
--- a/drivers/mmc/host/omap_hsmmc.c
+++ b/drivers/mmc/host/omap_hsmmc.c
@@ -466,8 +466,6 @@ static int omap_hsmmc_gpio_init(struct omap_mmc_platform_data *pdata)
 	int ret;

 	if (gpio_is_valid(pdata->slots[0].switch_pin)) {
-		pdata->suspend = omap_hsmmc_suspend_cdirq;
-		pdata->resume = omap_hsmmc_resume_cdirq;
 		if (pdata->slots[0].cover)
 			pdata->slots[0].get_cover_state =
 					omap_hsmmc_get_cover_state;
@@ -2211,6 +2209,8 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)
 				"Unable to grab MMC CD IRQ\n");
 			goto err_irq_cd;
 		}
+		pdata->suspend = omap_hsmmc_suspend_cdirq;
+		pdata->resume = omap_hsmmc_resume_cdirq;
 	}

 	omap_hsmmc_disable_irq(host);
diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h
index 6de90bf..e64894c 100644
--- a/include/linux/i2c/twl.h
+++ b/include/linux/i2c/twl.h
@@ -141,6 +141,16 @@
 #define TWL6030_CHARGER_CTRL_INT_MASK 	0x10
 #define TWL6030_CHARGER_FAULT_INT_MASK 	0x60

+#define TWL6030_MMCCTRL		0xEE
+#define VMMC_AUTO_OFF			(0x1 << 3)
+#define SW_FC				(0x1 << 2)
+#define STS_MMC			0x1
+
+#define TWL6030_CFG_INPUT_PUPD3	0xF2
+#define MMC_PU				(0x1 << 3)
+#define MMC_PD				(0x1 << 2)
+
+

 #define TWL4030_CLASS_ID 		0x4030
 #define TWL6030_CLASS_ID 		0x6030
@@ -173,6 +183,27 @@ int twl_i2c_read(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes);
 int twl6030_interrupt_unmask(u8 bit_mask, u8 offset);
 int twl6030_interrupt_mask(u8 bit_mask, u8 offset);

+/* Card detect Configuration for MMC1 Controller on OMAP4 */
+#ifdef CONFIG_TWL4030_CORE
+int twl6030_mmc_card_detect_config(void);
+#else
+static inline int twl6030_mmc_card_detect_config(void)
+{
+	pr_debug("twl6030_mmc_card_detect_config not supported\n");
+	return 0;
+}
+#endif
+
+/* MMC1 Controller on OMAP4 uses Phoenix irq for Card detect */
+#ifdef CONFIG_TWL4030_CORE
+int twl6030_mmc_card_detect(struct device *dev, int slot);
+#else
+static inline int twl6030_mmc_card_detect(struct device *dev, int slot)
+{
+	pr_debug("Call back twl6030_mmc_card_detect not supported\n");
+	return -EIO;
+}
+#endif
 /*----------------------------------------------------------------------*/

 /*
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v4 1/4] omap4 hsmmc: Adding card detect support for MMC1
  2010-09-24 17:13 [PATCH v4 1/4] omap4 hsmmc: Adding card detect support for MMC1 kishore kadiyala
@ 2010-09-25  0:38 ` Tony Lindgren
  2010-09-27  7:52   ` kishore kadiyala
  2010-09-27  7:55 ` kishore kadiyala
  2010-10-01 14:46 ` Varadarajan, Charulatha
  2 siblings, 1 reply; 14+ messages in thread
From: Tony Lindgren @ 2010-09-25  0:38 UTC (permalink / raw)
  To: linux-arm-kernel

* kishore kadiyala <kishore.kadiyala@ti.com> [100924 10:05]:
> Adding card detect callback function and card detect configuration
> function for MMC1 Controller on OMAP4.
> 
> Card detect configuration function does initial configuration of the
> MMC Control & PullUp-PullDown registers of Phoenix.
> 
> For MMC1 Controller, card detect interrupt source is
> twl6030 which is non-gpio. The card detect call back function provides
> card present/absent status by reading MMC Control register present
> on twl6030.
> 
> Since OMAP4 doesn't use any GPIO line as used in OMAP3 for card detect,
> the suspend/resume initialization which was done in omap_hsmmc_gpio_init
> previously is moved to the probe thus making it generic for both OMAP3 & OMAP4.

> --- a/drivers/mfd/twl6030-irq.c
> +++ b/drivers/mfd/twl6030-irq.c

Looks like this patch should be sent to Samuel Ortiz as it's mostly
mfd related.

Tony

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH v4 1/4] omap4 hsmmc: Adding card detect support for MMC1
  2010-09-25  0:38 ` Tony Lindgren
@ 2010-09-27  7:52   ` kishore kadiyala
  0 siblings, 0 replies; 14+ messages in thread
From: kishore kadiyala @ 2010-09-27  7:52 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Tony,

On Sat, Sep 25, 2010 at 6:08 AM, Tony Lindgren <tony@atomide.com> wrote:
> * kishore kadiyala <kishore.kadiyala@ti.com> [100924 10:05]:
>> Adding card detect callback function and card detect configuration
>> function for MMC1 Controller on OMAP4.
>>
>> Card detect configuration function does initial configuration of the
>> MMC Control & PullUp-PullDown registers of Phoenix.
>>
>> For MMC1 Controller, card detect interrupt source is
>> twl6030 which is non-gpio. The card detect call back function provides
>> card present/absent status by reading MMC Control register present
>> on twl6030.
>>
>> Since OMAP4 doesn't use any GPIO line as used in OMAP3 for card detect,
>> the suspend/resume initialization which was done in omap_hsmmc_gpio_init
>> previously is moved to the probe thus making it generic for both OMAP3 & OMAP4.
>
>> --- a/drivers/mfd/twl6030-irq.c
>> +++ b/drivers/mfd/twl6030-irq.c
>
> Looks like this patch should be sent to Samuel Ortiz as it's mostly
> mfd related.

Thanks , I will send this patch to Samuel.

<snip>

Regards,
Kishore

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH v4 1/4] omap4 hsmmc: Adding card detect support for MMC1
  2010-09-24 17:13 [PATCH v4 1/4] omap4 hsmmc: Adding card detect support for MMC1 kishore kadiyala
  2010-09-25  0:38 ` Tony Lindgren
@ 2010-09-27  7:55 ` kishore kadiyala
  2010-09-28  6:52   ` kishore kadiyala
  2010-10-01 14:46 ` Varadarajan, Charulatha
  2 siblings, 1 reply; 14+ messages in thread
From: kishore kadiyala @ 2010-09-27  7:55 UTC (permalink / raw)
  To: linux-arm-kernel

Cc: Samuel Ortiz <sameo@linux.intel.com>

On Fri, Sep 24, 2010 at 10:43 PM, kishore kadiyala
<kishore.kadiyala@ti.com> wrote:
> Adding card detect callback function and card detect configuration
> function for MMC1 Controller on OMAP4.
>
> Card detect configuration function does initial configuration of the
> MMC Control & PullUp-PullDown registers of Phoenix.
>
> For MMC1 Controller, card detect interrupt source is
> twl6030 which is non-gpio. The card detect call back function provides
> card present/absent status by reading MMC Control register present
> on twl6030.
>
> Since OMAP4 doesn't use any GPIO line as used in OMAP3 for card detect,
> the suspend/resume initialization which was done in omap_hsmmc_gpio_init
> previously is moved to the probe thus making it generic for both OMAP3 & OMAP4.
>
> Cc: Tony Lindgren <tony@atomide.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Madhusudhan Chikkature <madhu.cr@ti.com>
> Cc: Adrian Hunter <adrian.hunter@nokia.com>
> Signed-off-by: Kishore Kadiyala <kishore.kadiyala@ti.com>
> ---
> ?arch/arm/mach-omap2/board-4430sdp.c | ? ?7 +++-
> ?drivers/mfd/twl6030-irq.c ? ? ? ? ? | ? 73 +++++++++++++++++++++++++++++++++++
> ?drivers/mmc/host/omap_hsmmc.c ? ? ? | ? ?4 +-
> ?include/linux/i2c/twl.h ? ? ? ? ? ? | ? 31 +++++++++++++++
> ?4 files changed, 112 insertions(+), 3 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c
> index 9447644..a49f285 100644
> --- a/arch/arm/mach-omap2/board-4430sdp.c
> +++ b/arch/arm/mach-omap2/board-4430sdp.c
> @@ -227,9 +227,14 @@ static int omap4_twl6030_hsmmc_late_init(struct device *dev)
> ? ? ? ?struct omap_mmc_platform_data *pdata = dev->platform_data;
>
> ? ? ? ?/* Setting MMC1 Card detect Irq */
> - ? ? ? if (pdev->id == 0)
> + ? ? ? if (pdev->id == 0) {
> + ? ? ? ? ? ? ? ret = twl6030_mmc_card_detect_config();
> + ? ? ? ? ? ? ? if (ret)
> + ? ? ? ? ? ? ? ? ? ? ? pr_err("Failed configuring MMC1 card detect\n");
> ? ? ? ? ? ? ? ?pdata->slots[0].card_detect_irq = TWL6030_IRQ_BASE +
> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?MMCDETECT_INTR_OFFSET;
> + ? ? ? ? ? ? ? pdata->slots[0].card_detect = twl6030_mmc_card_detect;
> + ? ? ? }
> ? ? ? ?return ret;
> ?}
>
> diff --git a/drivers/mfd/twl6030-irq.c b/drivers/mfd/twl6030-irq.c
> index 10bf228..2d3bb82 100644
> --- a/drivers/mfd/twl6030-irq.c
> +++ b/drivers/mfd/twl6030-irq.c
> @@ -36,6 +36,7 @@
> ?#include <linux/irq.h>
> ?#include <linux/kthread.h>
> ?#include <linux/i2c/twl.h>
> +#include <linux/platform_device.h>
>
> ?/*
> ?* TWL6030 (unlike its predecessors, which had two level interrupt handling)
> @@ -223,6 +224,78 @@ int twl6030_interrupt_mask(u8 bit_mask, u8 offset)
> ?}
> ?EXPORT_SYMBOL(twl6030_interrupt_mask);
>
> +int twl6030_mmc_card_detect_config(void)
> +{
> + ? ? ? int ret;
> + ? ? ? u8 reg_val = 0;
> +
> + ? ? ? /* Unmasking the Card detect Interrupt line for MMC1 from Phoenix */
> + ? ? ? twl6030_interrupt_unmask(TWL6030_MMCDETECT_INT_MASK,
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? REG_INT_MSK_LINE_B);
> + ? ? ? twl6030_interrupt_unmask(TWL6030_MMCDETECT_INT_MASK,
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? REG_INT_MSK_STS_B);
> + ? ? ? /*
> + ? ? ? ?* Intially Configuring MMC_CTRL for receving interrupts &
> + ? ? ? ?* 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;
> + ? ? ? }
> + ? ? ? 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;
> + ? ? ? }
> +
> + ? ? ? /* 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;
> + ? ? ? }
> + ? ? ? 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;
> +}
> +EXPORT_SYMBOL(twl6030_mmc_card_detect_config);
> +
> +int twl6030_mmc_card_detect(struct device *dev, int slot)
> +{
> + ? ? ? int ret = -EIO;
> + ? ? ? u8 read_reg = 0;
> + ? ? ? struct platform_device *pdev = to_platform_device(dev);
> +
> + ? ? ? if (pdev->id) {
> + ? ? ? ? ? ? ? /* TWL6030 provide's Card detect support for
> + ? ? ? ? ? ? ? ?* only MMC1 controller.
> + ? ? ? ? ? ? ? ?*/
> + ? ? ? ? ? ? ? pr_err("Unkown MMC controller %d in %s\n", pdev->id, __func__);
> + ? ? ? ? ? ? ? return ret;
> + ? ? ? }
> + ? ? ? /*
> + ? ? ? ?* BIT0 of MMC_CTRL on TWL6030 provides card status for MMC1
> + ? ? ? ?* 0 - Card not present ,1 - Card present
> + ? ? ? ?*/
> + ? ? ? ret = twl_i2c_read_u8(TWL6030_MODULE_ID0, &read_reg,
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TWL6030_MMCCTRL);
> + ? ? ? if (ret >= 0)
> + ? ? ? ? ? ? ? ret = read_reg & STS_MMC;
> + ? ? ? return ret;
> +}
> +EXPORT_SYMBOL(twl6030_mmc_card_detect);
> +
> ?int twl6030_init_irq(int irq_num, unsigned irq_base, unsigned irq_end)
> ?{
>
> diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
> index 562dbbb..a51894d 100644
> --- a/drivers/mmc/host/omap_hsmmc.c
> +++ b/drivers/mmc/host/omap_hsmmc.c
> @@ -466,8 +466,6 @@ static int omap_hsmmc_gpio_init(struct omap_mmc_platform_data *pdata)
> ? ? ? ?int ret;
>
> ? ? ? ?if (gpio_is_valid(pdata->slots[0].switch_pin)) {
> - ? ? ? ? ? ? ? pdata->suspend = omap_hsmmc_suspend_cdirq;
> - ? ? ? ? ? ? ? pdata->resume = omap_hsmmc_resume_cdirq;
> ? ? ? ? ? ? ? ?if (pdata->slots[0].cover)
> ? ? ? ? ? ? ? ? ? ? ? ?pdata->slots[0].get_cover_state =
> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?omap_hsmmc_get_cover_state;
> @@ -2211,6 +2209,8 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)
> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"Unable to grab MMC CD IRQ\n");
> ? ? ? ? ? ? ? ? ? ? ? ?goto err_irq_cd;
> ? ? ? ? ? ? ? ?}
> + ? ? ? ? ? ? ? pdata->suspend = omap_hsmmc_suspend_cdirq;
> + ? ? ? ? ? ? ? pdata->resume = omap_hsmmc_resume_cdirq;
> ? ? ? ?}
>
> ? ? ? ?omap_hsmmc_disable_irq(host);
> diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h
> index 6de90bf..e64894c 100644
> --- a/include/linux/i2c/twl.h
> +++ b/include/linux/i2c/twl.h
> @@ -141,6 +141,16 @@
> ?#define TWL6030_CHARGER_CTRL_INT_MASK ?0x10
> ?#define TWL6030_CHARGER_FAULT_INT_MASK ? ? ? ? 0x60
>
> +#define TWL6030_MMCCTRL ? ? ? ? ? ? ? ?0xEE
> +#define VMMC_AUTO_OFF ? ? ? ? ? ? ? ? ?(0x1 << 3)
> +#define SW_FC ? ? ? ? ? ? ? ? ? ? ? ? ?(0x1 << 2)
> +#define STS_MMC ? ? ? ? ? ? ? ? ? ? ? ?0x1
> +
> +#define TWL6030_CFG_INPUT_PUPD3 ? ? ? ?0xF2
> +#define MMC_PU ? ? ? ? ? ? ? ? ? ? ? ? (0x1 << 3)
> +#define MMC_PD ? ? ? ? ? ? ? ? ? ? ? ? (0x1 << 2)
> +
> +
>
> ?#define TWL4030_CLASS_ID ? ? ? ? ? ? ? 0x4030
> ?#define TWL6030_CLASS_ID ? ? ? ? ? ? ? 0x6030
> @@ -173,6 +183,27 @@ int twl_i2c_read(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes);
> ?int twl6030_interrupt_unmask(u8 bit_mask, u8 offset);
> ?int twl6030_interrupt_mask(u8 bit_mask, u8 offset);
>
> +/* Card detect Configuration for MMC1 Controller on OMAP4 */
> +#ifdef CONFIG_TWL4030_CORE
> +int twl6030_mmc_card_detect_config(void);
> +#else
> +static inline int twl6030_mmc_card_detect_config(void)
> +{
> + ? ? ? pr_debug("twl6030_mmc_card_detect_config not supported\n");
> + ? ? ? return 0;
> +}
> +#endif
> +
> +/* MMC1 Controller on OMAP4 uses Phoenix irq for Card detect */
> +#ifdef CONFIG_TWL4030_CORE
> +int twl6030_mmc_card_detect(struct device *dev, int slot);
> +#else
> +static inline int twl6030_mmc_card_detect(struct device *dev, int slot)
> +{
> + ? ? ? pr_debug("Call back twl6030_mmc_card_detect not supported\n");
> + ? ? ? return -EIO;
> +}
> +#endif
> ?/*----------------------------------------------------------------------*/
>
> ?/*
> --
> 1.7.0.4
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at ?http://vger.kernel.org/majordomo-info.html
>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH v4 1/4] omap4 hsmmc: Adding card detect support for MMC1
  2010-09-27  7:55 ` kishore kadiyala
@ 2010-09-28  6:52   ` kishore kadiyala
  2010-09-29 10:41     ` kishore kadiyala
  0 siblings, 1 reply; 14+ messages in thread
From: kishore kadiyala @ 2010-09-28  6:52 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Samuel,

Could you please review this patch which touches mfd/twl6030-irq.c for
card detect support
of MMC1 controller on OMAP4.

Regards,
Kishore

On Mon, Sep 27, 2010 at 1:25 PM, kishore kadiyala
<kishorek.kadiyala@gmail.com> wrote:
> Cc: Samuel Ortiz <sameo@linux.intel.com>
>
> On Fri, Sep 24, 2010 at 10:43 PM, kishore kadiyala
> <kishore.kadiyala@ti.com> wrote:
>> Adding card detect callback function and card detect configuration
>> function for MMC1 Controller on OMAP4.
>>
>> Card detect configuration function does initial configuration of the
>> MMC Control & PullUp-PullDown registers of Phoenix.
>>
>> For MMC1 Controller, card detect interrupt source is
>> twl6030 which is non-gpio. The card detect call back function provides
>> card present/absent status by reading MMC Control register present
>> on twl6030.
>>
>> Since OMAP4 doesn't use any GPIO line as used in OMAP3 for card detect,
>> the suspend/resume initialization which was done in omap_hsmmc_gpio_init
>> previously is moved to the probe thus making it generic for both OMAP3 & OMAP4.
>>
>> Cc: Tony Lindgren <tony@atomide.com>
>> Cc: Andrew Morton <akpm@linux-foundation.org>
>> Cc: Madhusudhan Chikkature <madhu.cr@ti.com>
>> Cc: Adrian Hunter <adrian.hunter@nokia.com>
>> Signed-off-by: Kishore Kadiyala <kishore.kadiyala@ti.com>
>> ---
>> ?arch/arm/mach-omap2/board-4430sdp.c | ? ?7 +++-
>> ?drivers/mfd/twl6030-irq.c ? ? ? ? ? | ? 73 +++++++++++++++++++++++++++++++++++
>> ?drivers/mmc/host/omap_hsmmc.c ? ? ? | ? ?4 +-
>> ?include/linux/i2c/twl.h ? ? ? ? ? ? | ? 31 +++++++++++++++
>> ?4 files changed, 112 insertions(+), 3 deletions(-)
>>
>> diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c
>> index 9447644..a49f285 100644
>> --- a/arch/arm/mach-omap2/board-4430sdp.c
>> +++ b/arch/arm/mach-omap2/board-4430sdp.c
>> @@ -227,9 +227,14 @@ static int omap4_twl6030_hsmmc_late_init(struct device *dev)
>> ? ? ? ?struct omap_mmc_platform_data *pdata = dev->platform_data;
>>
>> ? ? ? ?/* Setting MMC1 Card detect Irq */
>> - ? ? ? if (pdev->id == 0)
>> + ? ? ? if (pdev->id == 0) {
>> + ? ? ? ? ? ? ? ret = twl6030_mmc_card_detect_config();
>> + ? ? ? ? ? ? ? if (ret)
>> + ? ? ? ? ? ? ? ? ? ? ? pr_err("Failed configuring MMC1 card detect\n");
>> ? ? ? ? ? ? ? ?pdata->slots[0].card_detect_irq = TWL6030_IRQ_BASE +
>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?MMCDETECT_INTR_OFFSET;
>> + ? ? ? ? ? ? ? pdata->slots[0].card_detect = twl6030_mmc_card_detect;
>> + ? ? ? }
>> ? ? ? ?return ret;
>> ?}
>>
>> diff --git a/drivers/mfd/twl6030-irq.c b/drivers/mfd/twl6030-irq.c
>> index 10bf228..2d3bb82 100644
>> --- a/drivers/mfd/twl6030-irq.c
>> +++ b/drivers/mfd/twl6030-irq.c
>> @@ -36,6 +36,7 @@
>> ?#include <linux/irq.h>
>> ?#include <linux/kthread.h>
>> ?#include <linux/i2c/twl.h>
>> +#include <linux/platform_device.h>
>>
>> ?/*
>> ?* TWL6030 (unlike its predecessors, which had two level interrupt handling)
>> @@ -223,6 +224,78 @@ int twl6030_interrupt_mask(u8 bit_mask, u8 offset)
>> ?}
>> ?EXPORT_SYMBOL(twl6030_interrupt_mask);
>>
>> +int twl6030_mmc_card_detect_config(void)
>> +{
>> + ? ? ? int ret;
>> + ? ? ? u8 reg_val = 0;
>> +
>> + ? ? ? /* Unmasking the Card detect Interrupt line for MMC1 from Phoenix */
>> + ? ? ? twl6030_interrupt_unmask(TWL6030_MMCDETECT_INT_MASK,
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? REG_INT_MSK_LINE_B);
>> + ? ? ? twl6030_interrupt_unmask(TWL6030_MMCDETECT_INT_MASK,
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? REG_INT_MSK_STS_B);
>> + ? ? ? /*
>> + ? ? ? ?* Intially Configuring MMC_CTRL for receving interrupts &
>> + ? ? ? ?* 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;
>> + ? ? ? }
>> + ? ? ? 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;
>> + ? ? ? }
>> +
>> + ? ? ? /* 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;
>> + ? ? ? }
>> + ? ? ? 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;
>> +}
>> +EXPORT_SYMBOL(twl6030_mmc_card_detect_config);
>> +
>> +int twl6030_mmc_card_detect(struct device *dev, int slot)
>> +{
>> + ? ? ? int ret = -EIO;
>> + ? ? ? u8 read_reg = 0;
>> + ? ? ? struct platform_device *pdev = to_platform_device(dev);
>> +
>> + ? ? ? if (pdev->id) {
>> + ? ? ? ? ? ? ? /* TWL6030 provide's Card detect support for
>> + ? ? ? ? ? ? ? ?* only MMC1 controller.
>> + ? ? ? ? ? ? ? ?*/
>> + ? ? ? ? ? ? ? pr_err("Unkown MMC controller %d in %s\n", pdev->id, __func__);
>> + ? ? ? ? ? ? ? return ret;
>> + ? ? ? }
>> + ? ? ? /*
>> + ? ? ? ?* BIT0 of MMC_CTRL on TWL6030 provides card status for MMC1
>> + ? ? ? ?* 0 - Card not present ,1 - Card present
>> + ? ? ? ?*/
>> + ? ? ? ret = twl_i2c_read_u8(TWL6030_MODULE_ID0, &read_reg,
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TWL6030_MMCCTRL);
>> + ? ? ? if (ret >= 0)
>> + ? ? ? ? ? ? ? ret = read_reg & STS_MMC;
>> + ? ? ? return ret;
>> +}
>> +EXPORT_SYMBOL(twl6030_mmc_card_detect);
>> +
>> ?int twl6030_init_irq(int irq_num, unsigned irq_base, unsigned irq_end)
>> ?{
>>
>> diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
>> index 562dbbb..a51894d 100644
>> --- a/drivers/mmc/host/omap_hsmmc.c
>> +++ b/drivers/mmc/host/omap_hsmmc.c
>> @@ -466,8 +466,6 @@ static int omap_hsmmc_gpio_init(struct omap_mmc_platform_data *pdata)
>> ? ? ? ?int ret;
>>
>> ? ? ? ?if (gpio_is_valid(pdata->slots[0].switch_pin)) {
>> - ? ? ? ? ? ? ? pdata->suspend = omap_hsmmc_suspend_cdirq;
>> - ? ? ? ? ? ? ? pdata->resume = omap_hsmmc_resume_cdirq;
>> ? ? ? ? ? ? ? ?if (pdata->slots[0].cover)
>> ? ? ? ? ? ? ? ? ? ? ? ?pdata->slots[0].get_cover_state =
>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?omap_hsmmc_get_cover_state;
>> @@ -2211,6 +2209,8 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)
>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"Unable to grab MMC CD IRQ\n");
>> ? ? ? ? ? ? ? ? ? ? ? ?goto err_irq_cd;
>> ? ? ? ? ? ? ? ?}
>> + ? ? ? ? ? ? ? pdata->suspend = omap_hsmmc_suspend_cdirq;
>> + ? ? ? ? ? ? ? pdata->resume = omap_hsmmc_resume_cdirq;
>> ? ? ? ?}
>>
>> ? ? ? ?omap_hsmmc_disable_irq(host);
>> diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h
>> index 6de90bf..e64894c 100644
>> --- a/include/linux/i2c/twl.h
>> +++ b/include/linux/i2c/twl.h
>> @@ -141,6 +141,16 @@
>> ?#define TWL6030_CHARGER_CTRL_INT_MASK ?0x10
>> ?#define TWL6030_CHARGER_FAULT_INT_MASK ? ? ? ? 0x60
>>
>> +#define TWL6030_MMCCTRL ? ? ? ? ? ? ? ?0xEE
>> +#define VMMC_AUTO_OFF ? ? ? ? ? ? ? ? ?(0x1 << 3)
>> +#define SW_FC ? ? ? ? ? ? ? ? ? ? ? ? ?(0x1 << 2)
>> +#define STS_MMC ? ? ? ? ? ? ? ? ? ? ? ?0x1
>> +
>> +#define TWL6030_CFG_INPUT_PUPD3 ? ? ? ?0xF2
>> +#define MMC_PU ? ? ? ? ? ? ? ? ? ? ? ? (0x1 << 3)
>> +#define MMC_PD ? ? ? ? ? ? ? ? ? ? ? ? (0x1 << 2)
>> +
>> +
>>
>> ?#define TWL4030_CLASS_ID ? ? ? ? ? ? ? 0x4030
>> ?#define TWL6030_CLASS_ID ? ? ? ? ? ? ? 0x6030
>> @@ -173,6 +183,27 @@ int twl_i2c_read(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes);
>> ?int twl6030_interrupt_unmask(u8 bit_mask, u8 offset);
>> ?int twl6030_interrupt_mask(u8 bit_mask, u8 offset);
>>
>> +/* Card detect Configuration for MMC1 Controller on OMAP4 */
>> +#ifdef CONFIG_TWL4030_CORE
>> +int twl6030_mmc_card_detect_config(void);
>> +#else
>> +static inline int twl6030_mmc_card_detect_config(void)
>> +{
>> + ? ? ? pr_debug("twl6030_mmc_card_detect_config not supported\n");
>> + ? ? ? return 0;
>> +}
>> +#endif
>> +
>> +/* MMC1 Controller on OMAP4 uses Phoenix irq for Card detect */
>> +#ifdef CONFIG_TWL4030_CORE
>> +int twl6030_mmc_card_detect(struct device *dev, int slot);
>> +#else
>> +static inline int twl6030_mmc_card_detect(struct device *dev, int slot)
>> +{
>> + ? ? ? pr_debug("Call back twl6030_mmc_card_detect not supported\n");
>> + ? ? ? return -EIO;
>> +}
>> +#endif
>> ?/*----------------------------------------------------------------------*/
>>
>> ?/*
>> --
>> 1.7.0.4
>>
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
>> the body of a message to majordomo at vger.kernel.org
>> More majordomo info at ?http://vger.kernel.org/majordomo-info.html
>>
>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH v4 1/4] omap4 hsmmc: Adding card detect support for MMC1
  2010-09-28  6:52   ` kishore kadiyala
@ 2010-09-29 10:41     ` kishore kadiyala
  2010-10-01  6:59       ` kishore kadiyala
  0 siblings, 1 reply; 14+ messages in thread
From: kishore kadiyala @ 2010-09-29 10:41 UTC (permalink / raw)
  To: linux-arm-kernel

Gentle Reminder !

Regards,
Kishore

On Tue, Sep 28, 2010 at 12:22 PM, kishore kadiyala
<kishorek.kadiyala@gmail.com> wrote:
> Hi Samuel,
>
> Could you please review this patch which touches mfd/twl6030-irq.c for
> card detect support
> of MMC1 controller on OMAP4.
>
> Regards,
> Kishore
>
> On Mon, Sep 27, 2010 at 1:25 PM, kishore kadiyala
> <kishorek.kadiyala@gmail.com> wrote:
>> Cc: Samuel Ortiz <sameo@linux.intel.com>
>>
>> On Fri, Sep 24, 2010 at 10:43 PM, kishore kadiyala
>> <kishore.kadiyala@ti.com> wrote:
>>> Adding card detect callback function and card detect configuration
>>> function for MMC1 Controller on OMAP4.
>>>
>>> Card detect configuration function does initial configuration of the
>>> MMC Control & PullUp-PullDown registers of Phoenix.
>>>
>>> For MMC1 Controller, card detect interrupt source is
>>> twl6030 which is non-gpio. The card detect call back function provides
>>> card present/absent status by reading MMC Control register present
>>> on twl6030.
>>>
>>> Since OMAP4 doesn't use any GPIO line as used in OMAP3 for card detect,
>>> the suspend/resume initialization which was done in omap_hsmmc_gpio_init
>>> previously is moved to the probe thus making it generic for both OMAP3 & OMAP4.
>>>
>>> Cc: Tony Lindgren <tony@atomide.com>
>>> Cc: Andrew Morton <akpm@linux-foundation.org>
>>> Cc: Madhusudhan Chikkature <madhu.cr@ti.com>
>>> Cc: Adrian Hunter <adrian.hunter@nokia.com>
>>> Signed-off-by: Kishore Kadiyala <kishore.kadiyala@ti.com>
>>> ---
>>> ?arch/arm/mach-omap2/board-4430sdp.c | ? ?7 +++-
>>> ?drivers/mfd/twl6030-irq.c ? ? ? ? ? | ? 73 +++++++++++++++++++++++++++++++++++
>>> ?drivers/mmc/host/omap_hsmmc.c ? ? ? | ? ?4 +-
>>> ?include/linux/i2c/twl.h ? ? ? ? ? ? | ? 31 +++++++++++++++
>>> ?4 files changed, 112 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c
>>> index 9447644..a49f285 100644
>>> --- a/arch/arm/mach-omap2/board-4430sdp.c
>>> +++ b/arch/arm/mach-omap2/board-4430sdp.c
>>> @@ -227,9 +227,14 @@ static int omap4_twl6030_hsmmc_late_init(struct device *dev)
>>> ? ? ? ?struct omap_mmc_platform_data *pdata = dev->platform_data;
>>>
>>> ? ? ? ?/* Setting MMC1 Card detect Irq */
>>> - ? ? ? if (pdev->id == 0)
>>> + ? ? ? if (pdev->id == 0) {
>>> + ? ? ? ? ? ? ? ret = twl6030_mmc_card_detect_config();
>>> + ? ? ? ? ? ? ? if (ret)
>>> + ? ? ? ? ? ? ? ? ? ? ? pr_err("Failed configuring MMC1 card detect\n");
>>> ? ? ? ? ? ? ? ?pdata->slots[0].card_detect_irq = TWL6030_IRQ_BASE +
>>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?MMCDETECT_INTR_OFFSET;
>>> + ? ? ? ? ? ? ? pdata->slots[0].card_detect = twl6030_mmc_card_detect;
>>> + ? ? ? }
>>> ? ? ? ?return ret;
>>> ?}
>>>
>>> diff --git a/drivers/mfd/twl6030-irq.c b/drivers/mfd/twl6030-irq.c
>>> index 10bf228..2d3bb82 100644
>>> --- a/drivers/mfd/twl6030-irq.c
>>> +++ b/drivers/mfd/twl6030-irq.c
>>> @@ -36,6 +36,7 @@
>>> ?#include <linux/irq.h>
>>> ?#include <linux/kthread.h>
>>> ?#include <linux/i2c/twl.h>
>>> +#include <linux/platform_device.h>
>>>
>>> ?/*
>>> ?* TWL6030 (unlike its predecessors, which had two level interrupt handling)
>>> @@ -223,6 +224,78 @@ int twl6030_interrupt_mask(u8 bit_mask, u8 offset)
>>> ?}
>>> ?EXPORT_SYMBOL(twl6030_interrupt_mask);
>>>
>>> +int twl6030_mmc_card_detect_config(void)
>>> +{
>>> + ? ? ? int ret;
>>> + ? ? ? u8 reg_val = 0;
>>> +
>>> + ? ? ? /* Unmasking the Card detect Interrupt line for MMC1 from Phoenix */
>>> + ? ? ? twl6030_interrupt_unmask(TWL6030_MMCDETECT_INT_MASK,
>>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? REG_INT_MSK_LINE_B);
>>> + ? ? ? twl6030_interrupt_unmask(TWL6030_MMCDETECT_INT_MASK,
>>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? REG_INT_MSK_STS_B);
>>> + ? ? ? /*
>>> + ? ? ? ?* Intially Configuring MMC_CTRL for receving interrupts &
>>> + ? ? ? ?* 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;
>>> + ? ? ? }
>>> + ? ? ? 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;
>>> + ? ? ? }
>>> +
>>> + ? ? ? /* 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;
>>> + ? ? ? }
>>> + ? ? ? 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;
>>> +}
>>> +EXPORT_SYMBOL(twl6030_mmc_card_detect_config);
>>> +
>>> +int twl6030_mmc_card_detect(struct device *dev, int slot)
>>> +{
>>> + ? ? ? int ret = -EIO;
>>> + ? ? ? u8 read_reg = 0;
>>> + ? ? ? struct platform_device *pdev = to_platform_device(dev);
>>> +
>>> + ? ? ? if (pdev->id) {
>>> + ? ? ? ? ? ? ? /* TWL6030 provide's Card detect support for
>>> + ? ? ? ? ? ? ? ?* only MMC1 controller.
>>> + ? ? ? ? ? ? ? ?*/
>>> + ? ? ? ? ? ? ? pr_err("Unkown MMC controller %d in %s\n", pdev->id, __func__);
>>> + ? ? ? ? ? ? ? return ret;
>>> + ? ? ? }
>>> + ? ? ? /*
>>> + ? ? ? ?* BIT0 of MMC_CTRL on TWL6030 provides card status for MMC1
>>> + ? ? ? ?* 0 - Card not present ,1 - Card present
>>> + ? ? ? ?*/
>>> + ? ? ? ret = twl_i2c_read_u8(TWL6030_MODULE_ID0, &read_reg,
>>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TWL6030_MMCCTRL);
>>> + ? ? ? if (ret >= 0)
>>> + ? ? ? ? ? ? ? ret = read_reg & STS_MMC;
>>> + ? ? ? return ret;
>>> +}
>>> +EXPORT_SYMBOL(twl6030_mmc_card_detect);
>>> +
>>> ?int twl6030_init_irq(int irq_num, unsigned irq_base, unsigned irq_end)
>>> ?{
>>>
>>> diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
>>> index 562dbbb..a51894d 100644
>>> --- a/drivers/mmc/host/omap_hsmmc.c
>>> +++ b/drivers/mmc/host/omap_hsmmc.c
>>> @@ -466,8 +466,6 @@ static int omap_hsmmc_gpio_init(struct omap_mmc_platform_data *pdata)
>>> ? ? ? ?int ret;
>>>
>>> ? ? ? ?if (gpio_is_valid(pdata->slots[0].switch_pin)) {
>>> - ? ? ? ? ? ? ? pdata->suspend = omap_hsmmc_suspend_cdirq;
>>> - ? ? ? ? ? ? ? pdata->resume = omap_hsmmc_resume_cdirq;
>>> ? ? ? ? ? ? ? ?if (pdata->slots[0].cover)
>>> ? ? ? ? ? ? ? ? ? ? ? ?pdata->slots[0].get_cover_state =
>>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?omap_hsmmc_get_cover_state;
>>> @@ -2211,6 +2209,8 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)
>>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"Unable to grab MMC CD IRQ\n");
>>> ? ? ? ? ? ? ? ? ? ? ? ?goto err_irq_cd;
>>> ? ? ? ? ? ? ? ?}
>>> + ? ? ? ? ? ? ? pdata->suspend = omap_hsmmc_suspend_cdirq;
>>> + ? ? ? ? ? ? ? pdata->resume = omap_hsmmc_resume_cdirq;
>>> ? ? ? ?}
>>>
>>> ? ? ? ?omap_hsmmc_disable_irq(host);
>>> diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h
>>> index 6de90bf..e64894c 100644
>>> --- a/include/linux/i2c/twl.h
>>> +++ b/include/linux/i2c/twl.h
>>> @@ -141,6 +141,16 @@
>>> ?#define TWL6030_CHARGER_CTRL_INT_MASK ?0x10
>>> ?#define TWL6030_CHARGER_FAULT_INT_MASK ? ? ? ? 0x60
>>>
>>> +#define TWL6030_MMCCTRL ? ? ? ? ? ? ? ?0xEE
>>> +#define VMMC_AUTO_OFF ? ? ? ? ? ? ? ? ?(0x1 << 3)
>>> +#define SW_FC ? ? ? ? ? ? ? ? ? ? ? ? ?(0x1 << 2)
>>> +#define STS_MMC ? ? ? ? ? ? ? ? ? ? ? ?0x1
>>> +
>>> +#define TWL6030_CFG_INPUT_PUPD3 ? ? ? ?0xF2
>>> +#define MMC_PU ? ? ? ? ? ? ? ? ? ? ? ? (0x1 << 3)
>>> +#define MMC_PD ? ? ? ? ? ? ? ? ? ? ? ? (0x1 << 2)
>>> +
>>> +
>>>
>>> ?#define TWL4030_CLASS_ID ? ? ? ? ? ? ? 0x4030
>>> ?#define TWL6030_CLASS_ID ? ? ? ? ? ? ? 0x6030
>>> @@ -173,6 +183,27 @@ int twl_i2c_read(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes);
>>> ?int twl6030_interrupt_unmask(u8 bit_mask, u8 offset);
>>> ?int twl6030_interrupt_mask(u8 bit_mask, u8 offset);
>>>
>>> +/* Card detect Configuration for MMC1 Controller on OMAP4 */
>>> +#ifdef CONFIG_TWL4030_CORE
>>> +int twl6030_mmc_card_detect_config(void);
>>> +#else
>>> +static inline int twl6030_mmc_card_detect_config(void)
>>> +{
>>> + ? ? ? pr_debug("twl6030_mmc_card_detect_config not supported\n");
>>> + ? ? ? return 0;
>>> +}
>>> +#endif
>>> +
>>> +/* MMC1 Controller on OMAP4 uses Phoenix irq for Card detect */
>>> +#ifdef CONFIG_TWL4030_CORE
>>> +int twl6030_mmc_card_detect(struct device *dev, int slot);
>>> +#else
>>> +static inline int twl6030_mmc_card_detect(struct device *dev, int slot)
>>> +{
>>> + ? ? ? pr_debug("Call back twl6030_mmc_card_detect not supported\n");
>>> + ? ? ? return -EIO;
>>> +}
>>> +#endif
>>> ?/*----------------------------------------------------------------------*/
>>>
>>> ?/*
>>> --
>>> 1.7.0.4
>>>
>>>
>>> --
>>> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
>>> the body of a message to majordomo at vger.kernel.org
>>> More majordomo info at ?http://vger.kernel.org/majordomo-info.html
>>>
>>
>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH v4 1/4] omap4 hsmmc: Adding card detect support for MMC1
  2010-09-29 10:41     ` kishore kadiyala
@ 2010-10-01  6:59       ` kishore kadiyala
  2010-10-01 11:29         ` Samuel Ortiz
  0 siblings, 1 reply; 14+ messages in thread
From: kishore kadiyala @ 2010-10-01  6:59 UTC (permalink / raw)
  To: linux-arm-kernel

Ping !!

On Wed, Sep 29, 2010 at 4:11 PM, kishore kadiyala
<kishorek.kadiyala@gmail.com> wrote:
> Gentle Reminder !
>
> Regards,
> Kishore
>
> On Tue, Sep 28, 2010 at 12:22 PM, kishore kadiyala
> <kishorek.kadiyala@gmail.com> wrote:
>> Hi Samuel,
>>
>> Could you please review this patch which touches mfd/twl6030-irq.c for
>> card detect support
>> of MMC1 controller on OMAP4.
>>
>> Regards,
>> Kishore
>>
>> On Mon, Sep 27, 2010 at 1:25 PM, kishore kadiyala
>> <kishorek.kadiyala@gmail.com> wrote:
>>> Cc: Samuel Ortiz <sameo@linux.intel.com>
>>>
>>> On Fri, Sep 24, 2010 at 10:43 PM, kishore kadiyala
>>> <kishore.kadiyala@ti.com> wrote:
>>>> Adding card detect callback function and card detect configuration
>>>> function for MMC1 Controller on OMAP4.
>>>>
>>>> Card detect configuration function does initial configuration of the
>>>> MMC Control & PullUp-PullDown registers of Phoenix.
>>>>
>>>> For MMC1 Controller, card detect interrupt source is
>>>> twl6030 which is non-gpio. The card detect call back function provides
>>>> card present/absent status by reading MMC Control register present
>>>> on twl6030.
>>>>
>>>> Since OMAP4 doesn't use any GPIO line as used in OMAP3 for card detect,
>>>> the suspend/resume initialization which was done in omap_hsmmc_gpio_init
>>>> previously is moved to the probe thus making it generic for both OMAP3 & OMAP4.
>>>>
>>>> Cc: Tony Lindgren <tony@atomide.com>
>>>> Cc: Andrew Morton <akpm@linux-foundation.org>
>>>> Cc: Madhusudhan Chikkature <madhu.cr@ti.com>
>>>> Cc: Adrian Hunter <adrian.hunter@nokia.com>
>>>> Signed-off-by: Kishore Kadiyala <kishore.kadiyala@ti.com>
>>>> ---
>>>> ?arch/arm/mach-omap2/board-4430sdp.c | ? ?7 +++-
>>>> ?drivers/mfd/twl6030-irq.c ? ? ? ? ? | ? 73 +++++++++++++++++++++++++++++++++++
>>>> ?drivers/mmc/host/omap_hsmmc.c ? ? ? | ? ?4 +-
>>>> ?include/linux/i2c/twl.h ? ? ? ? ? ? | ? 31 +++++++++++++++
>>>> ?4 files changed, 112 insertions(+), 3 deletions(-)
>>>>
>>>> diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c
>>>> index 9447644..a49f285 100644
>>>> --- a/arch/arm/mach-omap2/board-4430sdp.c
>>>> +++ b/arch/arm/mach-omap2/board-4430sdp.c
>>>> @@ -227,9 +227,14 @@ static int omap4_twl6030_hsmmc_late_init(struct device *dev)
>>>> ? ? ? ?struct omap_mmc_platform_data *pdata = dev->platform_data;
>>>>
>>>> ? ? ? ?/* Setting MMC1 Card detect Irq */
>>>> - ? ? ? if (pdev->id == 0)
>>>> + ? ? ? if (pdev->id == 0) {
>>>> + ? ? ? ? ? ? ? ret = twl6030_mmc_card_detect_config();
>>>> + ? ? ? ? ? ? ? if (ret)
>>>> + ? ? ? ? ? ? ? ? ? ? ? pr_err("Failed configuring MMC1 card detect\n");
>>>> ? ? ? ? ? ? ? ?pdata->slots[0].card_detect_irq = TWL6030_IRQ_BASE +
>>>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?MMCDETECT_INTR_OFFSET;
>>>> + ? ? ? ? ? ? ? pdata->slots[0].card_detect = twl6030_mmc_card_detect;
>>>> + ? ? ? }
>>>> ? ? ? ?return ret;
>>>> ?}
>>>>
>>>> diff --git a/drivers/mfd/twl6030-irq.c b/drivers/mfd/twl6030-irq.c
>>>> index 10bf228..2d3bb82 100644
>>>> --- a/drivers/mfd/twl6030-irq.c
>>>> +++ b/drivers/mfd/twl6030-irq.c
>>>> @@ -36,6 +36,7 @@
>>>> ?#include <linux/irq.h>
>>>> ?#include <linux/kthread.h>
>>>> ?#include <linux/i2c/twl.h>
>>>> +#include <linux/platform_device.h>
>>>>
>>>> ?/*
>>>> ?* TWL6030 (unlike its predecessors, which had two level interrupt handling)
>>>> @@ -223,6 +224,78 @@ int twl6030_interrupt_mask(u8 bit_mask, u8 offset)
>>>> ?}
>>>> ?EXPORT_SYMBOL(twl6030_interrupt_mask);
>>>>
>>>> +int twl6030_mmc_card_detect_config(void)
>>>> +{
>>>> + ? ? ? int ret;
>>>> + ? ? ? u8 reg_val = 0;
>>>> +
>>>> + ? ? ? /* Unmasking the Card detect Interrupt line for MMC1 from Phoenix */
>>>> + ? ? ? twl6030_interrupt_unmask(TWL6030_MMCDETECT_INT_MASK,
>>>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? REG_INT_MSK_LINE_B);
>>>> + ? ? ? twl6030_interrupt_unmask(TWL6030_MMCDETECT_INT_MASK,
>>>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? REG_INT_MSK_STS_B);
>>>> + ? ? ? /*
>>>> + ? ? ? ?* Intially Configuring MMC_CTRL for receving interrupts &
>>>> + ? ? ? ?* 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;
>>>> + ? ? ? }
>>>> + ? ? ? 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;
>>>> + ? ? ? }
>>>> +
>>>> + ? ? ? /* 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;
>>>> + ? ? ? }
>>>> + ? ? ? 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;
>>>> +}
>>>> +EXPORT_SYMBOL(twl6030_mmc_card_detect_config);
>>>> +
>>>> +int twl6030_mmc_card_detect(struct device *dev, int slot)
>>>> +{
>>>> + ? ? ? int ret = -EIO;
>>>> + ? ? ? u8 read_reg = 0;
>>>> + ? ? ? struct platform_device *pdev = to_platform_device(dev);
>>>> +
>>>> + ? ? ? if (pdev->id) {
>>>> + ? ? ? ? ? ? ? /* TWL6030 provide's Card detect support for
>>>> + ? ? ? ? ? ? ? ?* only MMC1 controller.
>>>> + ? ? ? ? ? ? ? ?*/
>>>> + ? ? ? ? ? ? ? pr_err("Unkown MMC controller %d in %s\n", pdev->id, __func__);
>>>> + ? ? ? ? ? ? ? return ret;
>>>> + ? ? ? }
>>>> + ? ? ? /*
>>>> + ? ? ? ?* BIT0 of MMC_CTRL on TWL6030 provides card status for MMC1
>>>> + ? ? ? ?* 0 - Card not present ,1 - Card present
>>>> + ? ? ? ?*/
>>>> + ? ? ? ret = twl_i2c_read_u8(TWL6030_MODULE_ID0, &read_reg,
>>>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TWL6030_MMCCTRL);
>>>> + ? ? ? if (ret >= 0)
>>>> + ? ? ? ? ? ? ? ret = read_reg & STS_MMC;
>>>> + ? ? ? return ret;
>>>> +}
>>>> +EXPORT_SYMBOL(twl6030_mmc_card_detect);
>>>> +
>>>> ?int twl6030_init_irq(int irq_num, unsigned irq_base, unsigned irq_end)
>>>> ?{
>>>>
>>>> diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
>>>> index 562dbbb..a51894d 100644
>>>> --- a/drivers/mmc/host/omap_hsmmc.c
>>>> +++ b/drivers/mmc/host/omap_hsmmc.c
>>>> @@ -466,8 +466,6 @@ static int omap_hsmmc_gpio_init(struct omap_mmc_platform_data *pdata)
>>>> ? ? ? ?int ret;
>>>>
>>>> ? ? ? ?if (gpio_is_valid(pdata->slots[0].switch_pin)) {
>>>> - ? ? ? ? ? ? ? pdata->suspend = omap_hsmmc_suspend_cdirq;
>>>> - ? ? ? ? ? ? ? pdata->resume = omap_hsmmc_resume_cdirq;
>>>> ? ? ? ? ? ? ? ?if (pdata->slots[0].cover)
>>>> ? ? ? ? ? ? ? ? ? ? ? ?pdata->slots[0].get_cover_state =
>>>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?omap_hsmmc_get_cover_state;
>>>> @@ -2211,6 +2209,8 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)
>>>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"Unable to grab MMC CD IRQ\n");
>>>> ? ? ? ? ? ? ? ? ? ? ? ?goto err_irq_cd;
>>>> ? ? ? ? ? ? ? ?}
>>>> + ? ? ? ? ? ? ? pdata->suspend = omap_hsmmc_suspend_cdirq;
>>>> + ? ? ? ? ? ? ? pdata->resume = omap_hsmmc_resume_cdirq;
>>>> ? ? ? ?}
>>>>
>>>> ? ? ? ?omap_hsmmc_disable_irq(host);
>>>> diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h
>>>> index 6de90bf..e64894c 100644
>>>> --- a/include/linux/i2c/twl.h
>>>> +++ b/include/linux/i2c/twl.h
>>>> @@ -141,6 +141,16 @@
>>>> ?#define TWL6030_CHARGER_CTRL_INT_MASK ?0x10
>>>> ?#define TWL6030_CHARGER_FAULT_INT_MASK ? ? ? ? 0x60
>>>>
>>>> +#define TWL6030_MMCCTRL ? ? ? ? ? ? ? ?0xEE
>>>> +#define VMMC_AUTO_OFF ? ? ? ? ? ? ? ? ?(0x1 << 3)
>>>> +#define SW_FC ? ? ? ? ? ? ? ? ? ? ? ? ?(0x1 << 2)
>>>> +#define STS_MMC ? ? ? ? ? ? ? ? ? ? ? ?0x1
>>>> +
>>>> +#define TWL6030_CFG_INPUT_PUPD3 ? ? ? ?0xF2
>>>> +#define MMC_PU ? ? ? ? ? ? ? ? ? ? ? ? (0x1 << 3)
>>>> +#define MMC_PD ? ? ? ? ? ? ? ? ? ? ? ? (0x1 << 2)
>>>> +
>>>> +
>>>>
>>>> ?#define TWL4030_CLASS_ID ? ? ? ? ? ? ? 0x4030
>>>> ?#define TWL6030_CLASS_ID ? ? ? ? ? ? ? 0x6030
>>>> @@ -173,6 +183,27 @@ int twl_i2c_read(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes);
>>>> ?int twl6030_interrupt_unmask(u8 bit_mask, u8 offset);
>>>> ?int twl6030_interrupt_mask(u8 bit_mask, u8 offset);
>>>>
>>>> +/* Card detect Configuration for MMC1 Controller on OMAP4 */
>>>> +#ifdef CONFIG_TWL4030_CORE
>>>> +int twl6030_mmc_card_detect_config(void);
>>>> +#else
>>>> +static inline int twl6030_mmc_card_detect_config(void)
>>>> +{
>>>> + ? ? ? pr_debug("twl6030_mmc_card_detect_config not supported\n");
>>>> + ? ? ? return 0;
>>>> +}
>>>> +#endif
>>>> +
>>>> +/* MMC1 Controller on OMAP4 uses Phoenix irq for Card detect */
>>>> +#ifdef CONFIG_TWL4030_CORE
>>>> +int twl6030_mmc_card_detect(struct device *dev, int slot);
>>>> +#else
>>>> +static inline int twl6030_mmc_card_detect(struct device *dev, int slot)
>>>> +{
>>>> + ? ? ? pr_debug("Call back twl6030_mmc_card_detect not supported\n");
>>>> + ? ? ? return -EIO;
>>>> +}
>>>> +#endif
>>>> ?/*----------------------------------------------------------------------*/
>>>>
>>>> ?/*
>>>> --
>>>> 1.7.0.4
>>>>
>>>>
>>>> --
>>>> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
>>>> the body of a message to majordomo at vger.kernel.org
>>>> More majordomo info at ?http://vger.kernel.org/majordomo-info.html
>>>>
>>>
>>
>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH v4 1/4] omap4 hsmmc: Adding card detect support for MMC1
  2010-10-01  6:59       ` kishore kadiyala
@ 2010-10-01 11:29         ` Samuel Ortiz
  2010-10-01 12:02           ` kishore kadiyala
  0 siblings, 1 reply; 14+ messages in thread
From: Samuel Ortiz @ 2010-10-01 11:29 UTC (permalink / raw)
  To: linux-arm-kernel

On Fri, Oct 01, 2010 at 12:29:48PM +0530, kishore kadiyala wrote:
> Ping !!
Applied !!

BTW, please add the full patch when you cc me, so that I don't have to dig
through patchwork to grab something I can git-am.

Cheers,
Samuel.

 
> On Wed, Sep 29, 2010 at 4:11 PM, kishore kadiyala
> <kishorek.kadiyala@gmail.com> wrote:
> > Gentle Reminder !
> >
> > Regards,
> > Kishore
> >
> > On Tue, Sep 28, 2010 at 12:22 PM, kishore kadiyala
> > <kishorek.kadiyala@gmail.com> wrote:
> >> Hi Samuel,
> >>
> >> Could you please review this patch which touches mfd/twl6030-irq.c for
> >> card detect support
> >> of MMC1 controller on OMAP4.
> >>
> >> Regards,
> >> Kishore
> >>
> >> On Mon, Sep 27, 2010 at 1:25 PM, kishore kadiyala
> >> <kishorek.kadiyala@gmail.com> wrote:
> >>> Cc: Samuel Ortiz <sameo@linux.intel.com>
> >>>
> >>> On Fri, Sep 24, 2010 at 10:43 PM, kishore kadiyala
> >>> <kishore.kadiyala@ti.com> wrote:
> >>>> Adding card detect callback function and card detect configuration
> >>>> function for MMC1 Controller on OMAP4.
> >>>>
> >>>> Card detect configuration function does initial configuration of the
> >>>> MMC Control & PullUp-PullDown registers of Phoenix.
> >>>>
> >>>> For MMC1 Controller, card detect interrupt source is
> >>>> twl6030 which is non-gpio. The card detect call back function provides
> >>>> card present/absent status by reading MMC Control register present
> >>>> on twl6030.
> >>>>
> >>>> Since OMAP4 doesn't use any GPIO line as used in OMAP3 for card detect,
> >>>> the suspend/resume initialization which was done in omap_hsmmc_gpio_init
> >>>> previously is moved to the probe thus making it generic for both OMAP3 & OMAP4.
> >>>>
> >>>> Cc: Tony Lindgren <tony@atomide.com>
> >>>> Cc: Andrew Morton <akpm@linux-foundation.org>
> >>>> Cc: Madhusudhan Chikkature <madhu.cr@ti.com>
> >>>> Cc: Adrian Hunter <adrian.hunter@nokia.com>
> >>>> Signed-off-by: Kishore Kadiyala <kishore.kadiyala@ti.com>
> >>>> ---
> >>>> ?arch/arm/mach-omap2/board-4430sdp.c | ? ?7 +++-
> >>>> ?drivers/mfd/twl6030-irq.c ? ? ? ? ? | ? 73 +++++++++++++++++++++++++++++++++++
> >>>> ?drivers/mmc/host/omap_hsmmc.c ? ? ? | ? ?4 +-
> >>>> ?include/linux/i2c/twl.h ? ? ? ? ? ? | ? 31 +++++++++++++++
> >>>> ?4 files changed, 112 insertions(+), 3 deletions(-)
> >>>>
> >>>> diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c
> >>>> index 9447644..a49f285 100644
> >>>> --- a/arch/arm/mach-omap2/board-4430sdp.c
> >>>> +++ b/arch/arm/mach-omap2/board-4430sdp.c
> >>>> @@ -227,9 +227,14 @@ static int omap4_twl6030_hsmmc_late_init(struct device *dev)
> >>>> ? ? ? ?struct omap_mmc_platform_data *pdata = dev->platform_data;
> >>>>
> >>>> ? ? ? ?/* Setting MMC1 Card detect Irq */
> >>>> - ? ? ? if (pdev->id == 0)
> >>>> + ? ? ? if (pdev->id == 0) {
> >>>> + ? ? ? ? ? ? ? ret = twl6030_mmc_card_detect_config();
> >>>> + ? ? ? ? ? ? ? if (ret)
> >>>> + ? ? ? ? ? ? ? ? ? ? ? pr_err("Failed configuring MMC1 card detect\n");
> >>>> ? ? ? ? ? ? ? ?pdata->slots[0].card_detect_irq = TWL6030_IRQ_BASE +
> >>>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?MMCDETECT_INTR_OFFSET;
> >>>> + ? ? ? ? ? ? ? pdata->slots[0].card_detect = twl6030_mmc_card_detect;
> >>>> + ? ? ? }
> >>>> ? ? ? ?return ret;
> >>>> ?}
> >>>>
> >>>> diff --git a/drivers/mfd/twl6030-irq.c b/drivers/mfd/twl6030-irq.c
> >>>> index 10bf228..2d3bb82 100644
> >>>> --- a/drivers/mfd/twl6030-irq.c
> >>>> +++ b/drivers/mfd/twl6030-irq.c
> >>>> @@ -36,6 +36,7 @@
> >>>> ?#include <linux/irq.h>
> >>>> ?#include <linux/kthread.h>
> >>>> ?#include <linux/i2c/twl.h>
> >>>> +#include <linux/platform_device.h>
> >>>>
> >>>> ?/*
> >>>> ?* TWL6030 (unlike its predecessors, which had two level interrupt handling)
> >>>> @@ -223,6 +224,78 @@ int twl6030_interrupt_mask(u8 bit_mask, u8 offset)
> >>>> ?}
> >>>> ?EXPORT_SYMBOL(twl6030_interrupt_mask);
> >>>>
> >>>> +int twl6030_mmc_card_detect_config(void)
> >>>> +{
> >>>> + ? ? ? int ret;
> >>>> + ? ? ? u8 reg_val = 0;
> >>>> +
> >>>> + ? ? ? /* Unmasking the Card detect Interrupt line for MMC1 from Phoenix */
> >>>> + ? ? ? twl6030_interrupt_unmask(TWL6030_MMCDETECT_INT_MASK,
> >>>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? REG_INT_MSK_LINE_B);
> >>>> + ? ? ? twl6030_interrupt_unmask(TWL6030_MMCDETECT_INT_MASK,
> >>>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? REG_INT_MSK_STS_B);
> >>>> + ? ? ? /*
> >>>> + ? ? ? ?* Intially Configuring MMC_CTRL for receving interrupts &
> >>>> + ? ? ? ?* 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;
> >>>> + ? ? ? }
> >>>> + ? ? ? 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;
> >>>> + ? ? ? }
> >>>> +
> >>>> + ? ? ? /* 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;
> >>>> + ? ? ? }
> >>>> + ? ? ? 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;
> >>>> +}
> >>>> +EXPORT_SYMBOL(twl6030_mmc_card_detect_config);
> >>>> +
> >>>> +int twl6030_mmc_card_detect(struct device *dev, int slot)
> >>>> +{
> >>>> + ? ? ? int ret = -EIO;
> >>>> + ? ? ? u8 read_reg = 0;
> >>>> + ? ? ? struct platform_device *pdev = to_platform_device(dev);
> >>>> +
> >>>> + ? ? ? if (pdev->id) {
> >>>> + ? ? ? ? ? ? ? /* TWL6030 provide's Card detect support for
> >>>> + ? ? ? ? ? ? ? ?* only MMC1 controller.
> >>>> + ? ? ? ? ? ? ? ?*/
> >>>> + ? ? ? ? ? ? ? pr_err("Unkown MMC controller %d in %s\n", pdev->id, __func__);
> >>>> + ? ? ? ? ? ? ? return ret;
> >>>> + ? ? ? }
> >>>> + ? ? ? /*
> >>>> + ? ? ? ?* BIT0 of MMC_CTRL on TWL6030 provides card status for MMC1
> >>>> + ? ? ? ?* 0 - Card not present ,1 - Card present
> >>>> + ? ? ? ?*/
> >>>> + ? ? ? ret = twl_i2c_read_u8(TWL6030_MODULE_ID0, &read_reg,
> >>>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TWL6030_MMCCTRL);
> >>>> + ? ? ? if (ret >= 0)
> >>>> + ? ? ? ? ? ? ? ret = read_reg & STS_MMC;
> >>>> + ? ? ? return ret;
> >>>> +}
> >>>> +EXPORT_SYMBOL(twl6030_mmc_card_detect);
> >>>> +
> >>>> ?int twl6030_init_irq(int irq_num, unsigned irq_base, unsigned irq_end)
> >>>> ?{
> >>>>
> >>>> diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
> >>>> index 562dbbb..a51894d 100644
> >>>> --- a/drivers/mmc/host/omap_hsmmc.c
> >>>> +++ b/drivers/mmc/host/omap_hsmmc.c
> >>>> @@ -466,8 +466,6 @@ static int omap_hsmmc_gpio_init(struct omap_mmc_platform_data *pdata)
> >>>> ? ? ? ?int ret;
> >>>>
> >>>> ? ? ? ?if (gpio_is_valid(pdata->slots[0].switch_pin)) {
> >>>> - ? ? ? ? ? ? ? pdata->suspend = omap_hsmmc_suspend_cdirq;
> >>>> - ? ? ? ? ? ? ? pdata->resume = omap_hsmmc_resume_cdirq;
> >>>> ? ? ? ? ? ? ? ?if (pdata->slots[0].cover)
> >>>> ? ? ? ? ? ? ? ? ? ? ? ?pdata->slots[0].get_cover_state =
> >>>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?omap_hsmmc_get_cover_state;
> >>>> @@ -2211,6 +2209,8 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)
> >>>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"Unable to grab MMC CD IRQ\n");
> >>>> ? ? ? ? ? ? ? ? ? ? ? ?goto err_irq_cd;
> >>>> ? ? ? ? ? ? ? ?}
> >>>> + ? ? ? ? ? ? ? pdata->suspend = omap_hsmmc_suspend_cdirq;
> >>>> + ? ? ? ? ? ? ? pdata->resume = omap_hsmmc_resume_cdirq;
> >>>> ? ? ? ?}
> >>>>
> >>>> ? ? ? ?omap_hsmmc_disable_irq(host);
> >>>> diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h
> >>>> index 6de90bf..e64894c 100644
> >>>> --- a/include/linux/i2c/twl.h
> >>>> +++ b/include/linux/i2c/twl.h
> >>>> @@ -141,6 +141,16 @@
> >>>> ?#define TWL6030_CHARGER_CTRL_INT_MASK ?0x10
> >>>> ?#define TWL6030_CHARGER_FAULT_INT_MASK ? ? ? ? 0x60
> >>>>
> >>>> +#define TWL6030_MMCCTRL ? ? ? ? ? ? ? ?0xEE
> >>>> +#define VMMC_AUTO_OFF ? ? ? ? ? ? ? ? ?(0x1 << 3)
> >>>> +#define SW_FC ? ? ? ? ? ? ? ? ? ? ? ? ?(0x1 << 2)
> >>>> +#define STS_MMC ? ? ? ? ? ? ? ? ? ? ? ?0x1
> >>>> +
> >>>> +#define TWL6030_CFG_INPUT_PUPD3 ? ? ? ?0xF2
> >>>> +#define MMC_PU ? ? ? ? ? ? ? ? ? ? ? ? (0x1 << 3)
> >>>> +#define MMC_PD ? ? ? ? ? ? ? ? ? ? ? ? (0x1 << 2)
> >>>> +
> >>>> +
> >>>>
> >>>> ?#define TWL4030_CLASS_ID ? ? ? ? ? ? ? 0x4030
> >>>> ?#define TWL6030_CLASS_ID ? ? ? ? ? ? ? 0x6030
> >>>> @@ -173,6 +183,27 @@ int twl_i2c_read(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes);
> >>>> ?int twl6030_interrupt_unmask(u8 bit_mask, u8 offset);
> >>>> ?int twl6030_interrupt_mask(u8 bit_mask, u8 offset);
> >>>>
> >>>> +/* Card detect Configuration for MMC1 Controller on OMAP4 */
> >>>> +#ifdef CONFIG_TWL4030_CORE
> >>>> +int twl6030_mmc_card_detect_config(void);
> >>>> +#else
> >>>> +static inline int twl6030_mmc_card_detect_config(void)
> >>>> +{
> >>>> + ? ? ? pr_debug("twl6030_mmc_card_detect_config not supported\n");
> >>>> + ? ? ? return 0;
> >>>> +}
> >>>> +#endif
> >>>> +
> >>>> +/* MMC1 Controller on OMAP4 uses Phoenix irq for Card detect */
> >>>> +#ifdef CONFIG_TWL4030_CORE
> >>>> +int twl6030_mmc_card_detect(struct device *dev, int slot);
> >>>> +#else
> >>>> +static inline int twl6030_mmc_card_detect(struct device *dev, int slot)
> >>>> +{
> >>>> + ? ? ? pr_debug("Call back twl6030_mmc_card_detect not supported\n");
> >>>> + ? ? ? return -EIO;
> >>>> +}
> >>>> +#endif
> >>>> ?/*----------------------------------------------------------------------*/
> >>>>
> >>>> ?/*
> >>>> --
> >>>> 1.7.0.4
> >>>>
> >>>>
> >>>> --
> >>>> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
> >>>> the body of a message to majordomo at vger.kernel.org
> >>>> More majordomo info at ?http://vger.kernel.org/majordomo-info.html
> >>>>
> >>>
> >>
> >

-- 
Intel Open Source Technology Centre
http://oss.intel.com/

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH v4 1/4] omap4 hsmmc: Adding card detect support for MMC1
  2010-10-01 11:29         ` Samuel Ortiz
@ 2010-10-01 12:02           ` kishore kadiyala
  2010-10-01 14:41             ` Varadarajan, Charulatha
  0 siblings, 1 reply; 14+ messages in thread
From: kishore kadiyala @ 2010-10-01 12:02 UTC (permalink / raw)
  To: linux-arm-kernel

Samuel,

Sorry , I will ensure to CC you for MFD related changes in future.

Regards,
Kishore

On Fri, Oct 1, 2010 at 4:59 PM, Samuel Ortiz <sameo@linux.intel.com> wrote:
> On Fri, Oct 01, 2010 at 12:29:48PM +0530, kishore kadiyala wrote:
>> Ping !!
> Applied !!
>
> BTW, please add the full patch when you cc me, so that I don't have to dig
> through patchwork to grab something I can git-am.
>
> Cheers,
> Samuel.
>
>
>> On Wed, Sep 29, 2010 at 4:11 PM, kishore kadiyala
>> <kishorek.kadiyala@gmail.com> wrote:
>> > Gentle Reminder !
>> >
>> > Regards,
>> > Kishore
>> >
>> > On Tue, Sep 28, 2010 at 12:22 PM, kishore kadiyala
>> > <kishorek.kadiyala@gmail.com> wrote:
>> >> Hi Samuel,
>> >>
>> >> Could you please review this patch which touches mfd/twl6030-irq.c for
>> >> card detect support
>> >> of MMC1 controller on OMAP4.
>> >>
>> >> Regards,
>> >> Kishore
>> >>
>> >> On Mon, Sep 27, 2010 at 1:25 PM, kishore kadiyala
>> >> <kishorek.kadiyala@gmail.com> wrote:
>> >>> Cc: Samuel Ortiz <sameo@linux.intel.com>
>> >>>
>> >>> On Fri, Sep 24, 2010 at 10:43 PM, kishore kadiyala
>> >>> <kishore.kadiyala@ti.com> wrote:
>> >>>> Adding card detect callback function and card detect configuration
>> >>>> function for MMC1 Controller on OMAP4.
>> >>>>
>> >>>> Card detect configuration function does initial configuration of the
>> >>>> MMC Control & PullUp-PullDown registers of Phoenix.
>> >>>>
>> >>>> For MMC1 Controller, card detect interrupt source is
>> >>>> twl6030 which is non-gpio. The card detect call back function provides
>> >>>> card present/absent status by reading MMC Control register present
>> >>>> on twl6030.
>> >>>>
>> >>>> Since OMAP4 doesn't use any GPIO line as used in OMAP3 for card detect,
>> >>>> the suspend/resume initialization which was done in omap_hsmmc_gpio_init
>> >>>> previously is moved to the probe thus making it generic for both OMAP3 & OMAP4.
>> >>>>
>> >>>> Cc: Tony Lindgren <tony@atomide.com>
>> >>>> Cc: Andrew Morton <akpm@linux-foundation.org>
>> >>>> Cc: Madhusudhan Chikkature <madhu.cr@ti.com>
>> >>>> Cc: Adrian Hunter <adrian.hunter@nokia.com>
>> >>>> Signed-off-by: Kishore Kadiyala <kishore.kadiyala@ti.com>
>> >>>> ---
>> >>>> ?arch/arm/mach-omap2/board-4430sdp.c | ? ?7 +++-
>> >>>> ?drivers/mfd/twl6030-irq.c ? ? ? ? ? | ? 73 +++++++++++++++++++++++++++++++++++
>> >>>> ?drivers/mmc/host/omap_hsmmc.c ? ? ? | ? ?4 +-
>> >>>> ?include/linux/i2c/twl.h ? ? ? ? ? ? | ? 31 +++++++++++++++
>> >>>> ?4 files changed, 112 insertions(+), 3 deletions(-)
>> >>>>
>> >>>> diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c
>> >>>> index 9447644..a49f285 100644
>> >>>> --- a/arch/arm/mach-omap2/board-4430sdp.c
>> >>>> +++ b/arch/arm/mach-omap2/board-4430sdp.c
>> >>>> @@ -227,9 +227,14 @@ static int omap4_twl6030_hsmmc_late_init(struct device *dev)
>> >>>> ? ? ? ?struct omap_mmc_platform_data *pdata = dev->platform_data;
>> >>>>
>> >>>> ? ? ? ?/* Setting MMC1 Card detect Irq */
>> >>>> - ? ? ? if (pdev->id == 0)
>> >>>> + ? ? ? if (pdev->id == 0) {
>> >>>> + ? ? ? ? ? ? ? ret = twl6030_mmc_card_detect_config();
>> >>>> + ? ? ? ? ? ? ? if (ret)
>> >>>> + ? ? ? ? ? ? ? ? ? ? ? pr_err("Failed configuring MMC1 card detect\n");
>> >>>> ? ? ? ? ? ? ? ?pdata->slots[0].card_detect_irq = TWL6030_IRQ_BASE +
>> >>>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?MMCDETECT_INTR_OFFSET;
>> >>>> + ? ? ? ? ? ? ? pdata->slots[0].card_detect = twl6030_mmc_card_detect;
>> >>>> + ? ? ? }
>> >>>> ? ? ? ?return ret;
>> >>>> ?}
>> >>>>
>> >>>> diff --git a/drivers/mfd/twl6030-irq.c b/drivers/mfd/twl6030-irq.c
>> >>>> index 10bf228..2d3bb82 100644
>> >>>> --- a/drivers/mfd/twl6030-irq.c
>> >>>> +++ b/drivers/mfd/twl6030-irq.c
>> >>>> @@ -36,6 +36,7 @@
>> >>>> ?#include <linux/irq.h>
>> >>>> ?#include <linux/kthread.h>
>> >>>> ?#include <linux/i2c/twl.h>
>> >>>> +#include <linux/platform_device.h>
>> >>>>
>> >>>> ?/*
>> >>>> ?* TWL6030 (unlike its predecessors, which had two level interrupt handling)
>> >>>> @@ -223,6 +224,78 @@ int twl6030_interrupt_mask(u8 bit_mask, u8 offset)
>> >>>> ?}
>> >>>> ?EXPORT_SYMBOL(twl6030_interrupt_mask);
>> >>>>
>> >>>> +int twl6030_mmc_card_detect_config(void)
>> >>>> +{
>> >>>> + ? ? ? int ret;
>> >>>> + ? ? ? u8 reg_val = 0;
>> >>>> +
>> >>>> + ? ? ? /* Unmasking the Card detect Interrupt line for MMC1 from Phoenix */
>> >>>> + ? ? ? twl6030_interrupt_unmask(TWL6030_MMCDETECT_INT_MASK,
>> >>>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? REG_INT_MSK_LINE_B);
>> >>>> + ? ? ? twl6030_interrupt_unmask(TWL6030_MMCDETECT_INT_MASK,
>> >>>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? REG_INT_MSK_STS_B);
>> >>>> + ? ? ? /*
>> >>>> + ? ? ? ?* Intially Configuring MMC_CTRL for receving interrupts &
>> >>>> + ? ? ? ?* 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;
>> >>>> + ? ? ? }
>> >>>> + ? ? ? 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;
>> >>>> + ? ? ? }
>> >>>> +
>> >>>> + ? ? ? /* 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;
>> >>>> + ? ? ? }
>> >>>> + ? ? ? 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;
>> >>>> +}
>> >>>> +EXPORT_SYMBOL(twl6030_mmc_card_detect_config);
>> >>>> +
>> >>>> +int twl6030_mmc_card_detect(struct device *dev, int slot)
>> >>>> +{
>> >>>> + ? ? ? int ret = -EIO;
>> >>>> + ? ? ? u8 read_reg = 0;
>> >>>> + ? ? ? struct platform_device *pdev = to_platform_device(dev);
>> >>>> +
>> >>>> + ? ? ? if (pdev->id) {
>> >>>> + ? ? ? ? ? ? ? /* TWL6030 provide's Card detect support for
>> >>>> + ? ? ? ? ? ? ? ?* only MMC1 controller.
>> >>>> + ? ? ? ? ? ? ? ?*/
>> >>>> + ? ? ? ? ? ? ? pr_err("Unkown MMC controller %d in %s\n", pdev->id, __func__);
>> >>>> + ? ? ? ? ? ? ? return ret;
>> >>>> + ? ? ? }
>> >>>> + ? ? ? /*
>> >>>> + ? ? ? ?* BIT0 of MMC_CTRL on TWL6030 provides card status for MMC1
>> >>>> + ? ? ? ?* 0 - Card not present ,1 - Card present
>> >>>> + ? ? ? ?*/
>> >>>> + ? ? ? ret = twl_i2c_read_u8(TWL6030_MODULE_ID0, &read_reg,
>> >>>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TWL6030_MMCCTRL);
>> >>>> + ? ? ? if (ret >= 0)
>> >>>> + ? ? ? ? ? ? ? ret = read_reg & STS_MMC;
>> >>>> + ? ? ? return ret;
>> >>>> +}
>> >>>> +EXPORT_SYMBOL(twl6030_mmc_card_detect);
>> >>>> +
>> >>>> ?int twl6030_init_irq(int irq_num, unsigned irq_base, unsigned irq_end)
>> >>>> ?{
>> >>>>
>> >>>> diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
>> >>>> index 562dbbb..a51894d 100644
>> >>>> --- a/drivers/mmc/host/omap_hsmmc.c
>> >>>> +++ b/drivers/mmc/host/omap_hsmmc.c
>> >>>> @@ -466,8 +466,6 @@ static int omap_hsmmc_gpio_init(struct omap_mmc_platform_data *pdata)
>> >>>> ? ? ? ?int ret;
>> >>>>
>> >>>> ? ? ? ?if (gpio_is_valid(pdata->slots[0].switch_pin)) {
>> >>>> - ? ? ? ? ? ? ? pdata->suspend = omap_hsmmc_suspend_cdirq;
>> >>>> - ? ? ? ? ? ? ? pdata->resume = omap_hsmmc_resume_cdirq;
>> >>>> ? ? ? ? ? ? ? ?if (pdata->slots[0].cover)
>> >>>> ? ? ? ? ? ? ? ? ? ? ? ?pdata->slots[0].get_cover_state =
>> >>>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?omap_hsmmc_get_cover_state;
>> >>>> @@ -2211,6 +2209,8 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)
>> >>>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"Unable to grab MMC CD IRQ\n");
>> >>>> ? ? ? ? ? ? ? ? ? ? ? ?goto err_irq_cd;
>> >>>> ? ? ? ? ? ? ? ?}
>> >>>> + ? ? ? ? ? ? ? pdata->suspend = omap_hsmmc_suspend_cdirq;
>> >>>> + ? ? ? ? ? ? ? pdata->resume = omap_hsmmc_resume_cdirq;
>> >>>> ? ? ? ?}
>> >>>>
>> >>>> ? ? ? ?omap_hsmmc_disable_irq(host);
>> >>>> diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h
>> >>>> index 6de90bf..e64894c 100644
>> >>>> --- a/include/linux/i2c/twl.h
>> >>>> +++ b/include/linux/i2c/twl.h
>> >>>> @@ -141,6 +141,16 @@
>> >>>> ?#define TWL6030_CHARGER_CTRL_INT_MASK ?0x10
>> >>>> ?#define TWL6030_CHARGER_FAULT_INT_MASK ? ? ? ? 0x60
>> >>>>
>> >>>> +#define TWL6030_MMCCTRL ? ? ? ? ? ? ? ?0xEE
>> >>>> +#define VMMC_AUTO_OFF ? ? ? ? ? ? ? ? ?(0x1 << 3)
>> >>>> +#define SW_FC ? ? ? ? ? ? ? ? ? ? ? ? ?(0x1 << 2)
>> >>>> +#define STS_MMC ? ? ? ? ? ? ? ? ? ? ? ?0x1
>> >>>> +
>> >>>> +#define TWL6030_CFG_INPUT_PUPD3 ? ? ? ?0xF2
>> >>>> +#define MMC_PU ? ? ? ? ? ? ? ? ? ? ? ? (0x1 << 3)
>> >>>> +#define MMC_PD ? ? ? ? ? ? ? ? ? ? ? ? (0x1 << 2)
>> >>>> +
>> >>>> +
>> >>>>
>> >>>> ?#define TWL4030_CLASS_ID ? ? ? ? ? ? ? 0x4030
>> >>>> ?#define TWL6030_CLASS_ID ? ? ? ? ? ? ? 0x6030
>> >>>> @@ -173,6 +183,27 @@ int twl_i2c_read(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes);
>> >>>> ?int twl6030_interrupt_unmask(u8 bit_mask, u8 offset);
>> >>>> ?int twl6030_interrupt_mask(u8 bit_mask, u8 offset);
>> >>>>
>> >>>> +/* Card detect Configuration for MMC1 Controller on OMAP4 */
>> >>>> +#ifdef CONFIG_TWL4030_CORE
>> >>>> +int twl6030_mmc_card_detect_config(void);
>> >>>> +#else
>> >>>> +static inline int twl6030_mmc_card_detect_config(void)
>> >>>> +{
>> >>>> + ? ? ? pr_debug("twl6030_mmc_card_detect_config not supported\n");
>> >>>> + ? ? ? return 0;
>> >>>> +}
>> >>>> +#endif
>> >>>> +
>> >>>> +/* MMC1 Controller on OMAP4 uses Phoenix irq for Card detect */
>> >>>> +#ifdef CONFIG_TWL4030_CORE
>> >>>> +int twl6030_mmc_card_detect(struct device *dev, int slot);
>> >>>> +#else
>> >>>> +static inline int twl6030_mmc_card_detect(struct device *dev, int slot)
>> >>>> +{
>> >>>> + ? ? ? pr_debug("Call back twl6030_mmc_card_detect not supported\n");
>> >>>> + ? ? ? return -EIO;
>> >>>> +}
>> >>>> +#endif
>> >>>> ?/*----------------------------------------------------------------------*/
>> >>>>
>> >>>> ?/*
>> >>>> --
>> >>>> 1.7.0.4
>> >>>>
>> >>>>
>> >>>> --
>> >>>> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
>> >>>> the body of a message to majordomo at vger.kernel.org
>> >>>> More majordomo info at ?http://vger.kernel.org/majordomo-info.html
>> >>>>
>> >>>
>> >>
>> >
>
> --
> Intel Open Source Technology Centre
> http://oss.intel.com/
>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH v4 1/4] omap4 hsmmc: Adding card detect support for MMC1
  2010-10-01 12:02           ` kishore kadiyala
@ 2010-10-01 14:41             ` Varadarajan, Charulatha
  2010-10-01 14:44               ` kishore kadiyala
  0 siblings, 1 reply; 14+ messages in thread
From: Varadarajan, Charulatha @ 2010-10-01 14:41 UTC (permalink / raw)
  To: linux-arm-kernel

 
<<snip>>

> >> >>>> diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h
> >> >>>> index 6de90bf..e64894c 100644
> >> >>>> --- a/include/linux/i2c/twl.h
> >> >>>> +++ b/include/linux/i2c/twl.h
> >> >>>> @@ -141,6 +141,16 @@
> >> >>>> ?#define TWL6030_CHARGER_CTRL_INT_MASK ?0x10
> >> >>>> ?#define TWL6030_CHARGER_FAULT_INT_MASK ? ? ? ? 0x60
> >> >>>>
> >> >>>> +#define TWL6030_MMCCTRL ? ? ? ? ? ? ? ?0xEE
> >> >>>> +#define VMMC_AUTO_OFF ? ? ? ? ? ? ? ? ?(0x1 << 3)
> >> >>>> +#define SW_FC ? ? ? ? ? ? ? ? ? ? ? ? ?(0x1 << 2)
> >> >>>> +#define STS_MMC ? ? ? ? ? ? ? ? ? ? ? ?0x1
> >> >>>> +
> >> >>>> +#define TWL6030_CFG_INPUT_PUPD3 ? ? ? ?0xF2
> >> >>>> +#define MMC_PU ? ? ? ? ? ? ? ? ? ? ? ? (0x1 << 3)
> >> >>>> +#define MMC_PD ? ? ? ? ? ? ? ? ? ? ? ? (0x1 << 2)
> >> >>>> +
> >> >>>> +
> >> >>>>
> >> >>>> ?#define TWL4030_CLASS_ID ? ? ? ? ? ? ? 0x4030
> >> >>>> ?#define TWL6030_CLASS_ID ? ? ? ? ? ? ? 0x6030
> >> >>>> @@ -173,6 +183,27 @@ int twl_i2c_read(u8 mod_no, u8 
> *value, u8 reg, unsigned num_bytes);
> >> >>>> ?int twl6030_interrupt_unmask(u8 bit_mask, u8 offset);
> >> >>>> ?int twl6030_interrupt_mask(u8 bit_mask, u8 offset);
> >> >>>>
> >> >>>> +/* Card detect Configuration for MMC1 Controller on OMAP4 */
> >> >>>> +#ifdef CONFIG_TWL4030_CORE
> >> >>>> +int twl6030_mmc_card_detect_config(void);
> >> >>>> +#else
> >> >>>> +static inline int twl6030_mmc_card_detect_config(void)
> >> >>>> +{
> >> >>>> + ? ? ? pr_debug("twl6030_mmc_card_detect_config not 
> supported\n");
> >> >>>> + ? ? ? return 0;
> >> >>>> +}
> >> >>>> +#endif
> >> >>>> +
> >> >>>> +/* MMC1 Controller on OMAP4 uses Phoenix irq for 
> Card detect */
> >> >>>> +#ifdef CONFIG_TWL4030_CORE
> >> >>>> +int twl6030_mmc_card_detect(struct device *dev, int slot);
> >> >>>> +#else
> >> >>>> +static inline int twl6030_mmc_card_detect(struct 
> device *dev, int slot)
> >> >>>> +{
> >> >>>> + ? ? ? pr_debug("Call back twl6030_mmc_card_detect 
> not supported\n");

Use dev_dbg() instead of pr_debug... 
Same comment applies across this patch series whereever pr_err/pr_debug
APIs are used.

> >> >>>> + ? ? ? return -EIO;
> >> >>>> +}
> >> >>>> +#endif

<<snip>>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH v4 1/4] omap4 hsmmc: Adding card detect support for MMC1
  2010-10-01 14:41             ` Varadarajan, Charulatha
@ 2010-10-01 14:44               ` kishore kadiyala
  2010-10-01 14:54                 ` Varadarajan, Charulatha
  2010-10-20 13:11                 ` DebBarma, Tarun Kanti
  0 siblings, 2 replies; 14+ messages in thread
From: kishore kadiyala @ 2010-10-01 14:44 UTC (permalink / raw)
  To: linux-arm-kernel

On Fri, Oct 1, 2010 at 8:11 PM, Varadarajan, Charulatha <charu@ti.com> wrote:
>
> <<snip>>
>
>> >> >>>> diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h
>> >> >>>> index 6de90bf..e64894c 100644
>> >> >>>> --- a/include/linux/i2c/twl.h
>> >> >>>> +++ b/include/linux/i2c/twl.h
>> >> >>>> @@ -141,6 +141,16 @@
>> >> >>>> ?#define TWL6030_CHARGER_CTRL_INT_MASK ?0x10
>> >> >>>> ?#define TWL6030_CHARGER_FAULT_INT_MASK ? ? ? ? 0x60
>> >> >>>>
>> >> >>>> +#define TWL6030_MMCCTRL ? ? ? ? ? ? ? ?0xEE
>> >> >>>> +#define VMMC_AUTO_OFF ? ? ? ? ? ? ? ? ?(0x1 << 3)
>> >> >>>> +#define SW_FC ? ? ? ? ? ? ? ? ? ? ? ? ?(0x1 << 2)
>> >> >>>> +#define STS_MMC ? ? ? ? ? ? ? ? ? ? ? ?0x1
>> >> >>>> +
>> >> >>>> +#define TWL6030_CFG_INPUT_PUPD3 ? ? ? ?0xF2
>> >> >>>> +#define MMC_PU ? ? ? ? ? ? ? ? ? ? ? ? (0x1 << 3)
>> >> >>>> +#define MMC_PD ? ? ? ? ? ? ? ? ? ? ? ? (0x1 << 2)
>> >> >>>> +
>> >> >>>> +
>> >> >>>>
>> >> >>>> ?#define TWL4030_CLASS_ID ? ? ? ? ? ? ? 0x4030
>> >> >>>> ?#define TWL6030_CLASS_ID ? ? ? ? ? ? ? 0x6030
>> >> >>>> @@ -173,6 +183,27 @@ int twl_i2c_read(u8 mod_no, u8
>> *value, u8 reg, unsigned num_bytes);
>> >> >>>> ?int twl6030_interrupt_unmask(u8 bit_mask, u8 offset);
>> >> >>>> ?int twl6030_interrupt_mask(u8 bit_mask, u8 offset);
>> >> >>>>
>> >> >>>> +/* Card detect Configuration for MMC1 Controller on OMAP4 */
>> >> >>>> +#ifdef CONFIG_TWL4030_CORE
>> >> >>>> +int twl6030_mmc_card_detect_config(void);
>> >> >>>> +#else
>> >> >>>> +static inline int twl6030_mmc_card_detect_config(void)
>> >> >>>> +{
>> >> >>>> + ? ? ? pr_debug("twl6030_mmc_card_detect_config not
>> supported\n");
>> >> >>>> + ? ? ? return 0;
>> >> >>>> +}
>> >> >>>> +#endif
>> >> >>>> +
>> >> >>>> +/* MMC1 Controller on OMAP4 uses Phoenix irq for
>> Card detect */
>> >> >>>> +#ifdef CONFIG_TWL4030_CORE
>> >> >>>> +int twl6030_mmc_card_detect(struct device *dev, int slot);
>> >> >>>> +#else
>> >> >>>> +static inline int twl6030_mmc_card_detect(struct
>> device *dev, int slot)
>> >> >>>> +{
>> >> >>>> + ? ? ? pr_debug("Call back twl6030_mmc_card_detect
>> not supported\n");
>
> Use dev_dbg() instead of pr_debug...
> Same comment applies across this patch series whereever pr_err/pr_debug
> APIs are used.

Couldn't get it  how it makes a difference ? could you explain

Regards,
Kishore
>
>> >> >>>> + ? ? ? return -EIO;
>> >> >>>> +}
>> >> >>>> +#endif
>
> <<snip>>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH v4 1/4] omap4 hsmmc: Adding card detect support for MMC1
  2010-09-24 17:13 [PATCH v4 1/4] omap4 hsmmc: Adding card detect support for MMC1 kishore kadiyala
  2010-09-25  0:38 ` Tony Lindgren
  2010-09-27  7:55 ` kishore kadiyala
@ 2010-10-01 14:46 ` Varadarajan, Charulatha
  2 siblings, 0 replies; 14+ messages in thread
From: Varadarajan, Charulatha @ 2010-10-01 14:46 UTC (permalink / raw)
  To: linux-arm-kernel

Kishore, 

<<snip>>

A minor comment

> +int twl6030_mmc_card_detect(struct device *dev, int slot)
> +{
> +	int ret = -EIO;
> +	u8 read_reg = 0;
> +	struct platform_device *pdev = to_platform_device(dev);
> +
> +	if (pdev->id) {
> +		/* TWL6030 provide's Card detect support for
> +		 * only MMC1 controller.
> +		 */

Check multiline comment style

> +		pr_err("Unkown MMC controller %d in %s\n", 
> pdev->id, __func__);
> +		return ret;
> +	}
> +	/*
> +	 * BIT0 of MMC_CTRL on TWL6030 provides card status for MMC1
> +	 * 0 - Card not present ,1 - Card present
> +	 */
> +	ret = twl_i2c_read_u8(TWL6030_MODULE_ID0, &read_reg,
> +						TWL6030_MMCCTRL);
> +	if (ret >= 0)
> +		ret = read_reg & STS_MMC;
> +	return ret;
> +}
> +EXPORT_SYMBOL(twl6030_mmc_card_detect);
> +

<<snip>>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH v4 1/4] omap4 hsmmc: Adding card detect support for MMC1
  2010-10-01 14:44               ` kishore kadiyala
@ 2010-10-01 14:54                 ` Varadarajan, Charulatha
  2010-10-20 13:11                 ` DebBarma, Tarun Kanti
  1 sibling, 0 replies; 14+ messages in thread
From: Varadarajan, Charulatha @ 2010-10-01 14:54 UTC (permalink / raw)
  To: linux-arm-kernel



> -----Original Message-----
> From: kishore kadiyala [mailto:kishorek.kadiyala at gmail.com]
> Sent: Friday, October 01, 2010 8:15 PM
> To: Varadarajan, Charulatha
> Cc: Samuel Ortiz; linux-mmc at vger.kernel.org; linux-omap at vger.kernel.org;
> linux-arm-kernel at lists.infradead.org; tony at atomide.com; akpm at linux-
> foundation.org; Chikkature Rajashekar, Madhusudhan;
> adrian.hunter at nokia.com
> Subject: Re: [PATCH v4 1/4] omap4 hsmmc: Adding card detect support for
> MMC1
> 
> On Fri, Oct 1, 2010 at 8:11 PM, Varadarajan, Charulatha <charu@ti.com>
> wrote:
> >
> > <<snip>>
> >
> >> >> >>>> diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h
> >> >> >>>> index 6de90bf..e64894c 100644
> >> >> >>>> --- a/include/linux/i2c/twl.h
> >> >> >>>> +++ b/include/linux/i2c/twl.h
> >> >> >>>> @@ -141,6 +141,16 @@
> >> >> >>>> ?#define TWL6030_CHARGER_CTRL_INT_MASK ?0x10
> >> >> >>>> ?#define TWL6030_CHARGER_FAULT_INT_MASK ? ? ? ? 0x60
> >> >> >>>>
> >> >> >>>> +#define TWL6030_MMCCTRL ? ? ? ? ? ? ? ?0xEE
> >> >> >>>> +#define VMMC_AUTO_OFF ? ? ? ? ? ? ? ? ?(0x1 << 3)
> >> >> >>>> +#define SW_FC ? ? ? ? ? ? ? ? ? ? ? ? ?(0x1 << 2)
> >> >> >>>> +#define STS_MMC ? ? ? ? ? ? ? ? ? ? ? ?0x1
> >> >> >>>> +
> >> >> >>>> +#define TWL6030_CFG_INPUT_PUPD3 ? ? ? ?0xF2
> >> >> >>>> +#define MMC_PU ? ? ? ? ? ? ? ? ? ? ? ? (0x1 << 3)
> >> >> >>>> +#define MMC_PD ? ? ? ? ? ? ? ? ? ? ? ? (0x1 << 2)
> >> >> >>>> +
> >> >> >>>> +
> >> >> >>>>
> >> >> >>>> ?#define TWL4030_CLASS_ID ? ? ? ? ? ? ? 0x4030
> >> >> >>>> ?#define TWL6030_CLASS_ID ? ? ? ? ? ? ? 0x6030
> >> >> >>>> @@ -173,6 +183,27 @@ int twl_i2c_read(u8 mod_no, u8
> >> *value, u8 reg, unsigned num_bytes);
> >> >> >>>> ?int twl6030_interrupt_unmask(u8 bit_mask, u8 offset);
> >> >> >>>> ?int twl6030_interrupt_mask(u8 bit_mask, u8 offset);
> >> >> >>>>
> >> >> >>>> +/* Card detect Configuration for MMC1 Controller on OMAP4 */
> >> >> >>>> +#ifdef CONFIG_TWL4030_CORE
> >> >> >>>> +int twl6030_mmc_card_detect_config(void);
> >> >> >>>> +#else
> >> >> >>>> +static inline int twl6030_mmc_card_detect_config(void)
> >> >> >>>> +{
> >> >> >>>> + ? ? ? pr_debug("twl6030_mmc_card_detect_config not
> >> supported\n");
> >> >> >>>> + ? ? ? return 0;
> >> >> >>>> +}
> >> >> >>>> +#endif
> >> >> >>>> +
> >> >> >>>> +/* MMC1 Controller on OMAP4 uses Phoenix irq for
> >> Card detect */
> >> >> >>>> +#ifdef CONFIG_TWL4030_CORE
> >> >> >>>> +int twl6030_mmc_card_detect(struct device *dev, int slot);
> >> >> >>>> +#else
> >> >> >>>> +static inline int twl6030_mmc_card_detect(struct
> >> device *dev, int slot)
> >> >> >>>> +{
> >> >> >>>> + ? ? ? pr_debug("Call back twl6030_mmc_card_detect
> >> not supported\n");
> >
> > Use dev_dbg() instead of pr_debug...
> > Same comment applies across this patch series whereever pr_err/pr_debug
> > APIs are used.
> 
> Couldn't get it  how it makes a difference ? could you explain
> 

device information gets added for debug prints which is very useful
while debugging

> Regards,
> Kishore
> >
> >> >> >>>> + ? ? ? return -EIO;
> >> >> >>>> +}
> >> >> >>>> +#endif
> >
> > <<snip>>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH v4 1/4] omap4 hsmmc: Adding card detect support for MMC1
  2010-10-01 14:44               ` kishore kadiyala
  2010-10-01 14:54                 ` Varadarajan, Charulatha
@ 2010-10-20 13:11                 ` DebBarma, Tarun Kanti
  1 sibling, 0 replies; 14+ messages in thread
From: DebBarma, Tarun Kanti @ 2010-10-20 13:11 UTC (permalink / raw)
  To: linux-arm-kernel


> -----Original Message-----
> From: linux-omap-owner at vger.kernel.org [mailto:linux-omap-
> owner at vger.kernel.org] On Behalf Of kishore kadiyala
> Sent: Friday, October 01, 2010 8:15 PM
> To: Varadarajan, Charulatha
> Cc: Samuel Ortiz; linux-mmc at vger.kernel.org; linux-omap at vger.kernel.org;
> linux-arm-kernel at lists.infradead.org; tony at atomide.com; akpm at linux-
> foundation.org; Chikkature Rajashekar, Madhusudhan;
> adrian.hunter at nokia.com
> Subject: Re: [PATCH v4 1/4] omap4 hsmmc: Adding card detect support for
> MMC1
> 
> On Fri, Oct 1, 2010 at 8:11 PM, Varadarajan, Charulatha <charu@ti.com>
> wrote:
> >
> > <<snip>>
> >
> >> >> >>>> diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h
> >> >> >>>> index 6de90bf..e64894c 100644
> >> >> >>>> --- a/include/linux/i2c/twl.h
> >> >> >>>> +++ b/include/linux/i2c/twl.h
> >> >> >>>> @@ -141,6 +141,16 @@
> >> >> >>>> ?#define TWL6030_CHARGER_CTRL_INT_MASK ?0x10
> >> >> >>>> ?#define TWL6030_CHARGER_FAULT_INT_MASK ? ? ? ? 0x60
> >> >> >>>>
> >> >> >>>> +#define TWL6030_MMCCTRL ? ? ? ? ? ? ? ?0xEE
> >> >> >>>> +#define VMMC_AUTO_OFF ? ? ? ? ? ? ? ? ?(0x1 << 3)
> >> >> >>>> +#define SW_FC ? ? ? ? ? ? ? ? ? ? ? ? ?(0x1 << 2)
> >> >> >>>> +#define STS_MMC ? ? ? ? ? ? ? ? ? ? ? ?0x1
> >> >> >>>> +
> >> >> >>>> +#define TWL6030_CFG_INPUT_PUPD3 ? ? ? ?0xF2
> >> >> >>>> +#define MMC_PU ? ? ? ? ? ? ? ? ? ? ? ? (0x1 << 3)
> >> >> >>>> +#define MMC_PD ? ? ? ? ? ? ? ? ? ? ? ? (0x1 << 2)
> >> >> >>>> +
> >> >> >>>> +
> >> >> >>>>
> >> >> >>>> ?#define TWL4030_CLASS_ID ? ? ? ? ? ? ? 0x4030
> >> >> >>>> ?#define TWL6030_CLASS_ID ? ? ? ? ? ? ? 0x6030
> >> >> >>>> @@ -173,6 +183,27 @@ int twl_i2c_read(u8 mod_no, u8
> >> *value, u8 reg, unsigned num_bytes);
> >> >> >>>> ?int twl6030_interrupt_unmask(u8 bit_mask, u8 offset);
> >> >> >>>> ?int twl6030_interrupt_mask(u8 bit_mask, u8 offset);
> >> >> >>>>
> >> >> >>>> +/* Card detect Configuration for MMC1 Controller on OMAP4 */
> >> >> >>>> +#ifdef CONFIG_TWL4030_CORE
> >> >> >>>> +int twl6030_mmc_card_detect_config(void);
> >> >> >>>> +#else
> >> >> >>>> +static inline int twl6030_mmc_card_detect_config(void)
> >> >> >>>> +{
> >> >> >>>> + ? ? ? pr_debug("twl6030_mmc_card_detect_config not
> >> supported\n");
> >> >> >>>> + ? ? ? return 0;
> >> >> >>>> +}
> >> >> >>>> +#endif
> >> >> >>>> +
> >> >> >>>> +/* MMC1 Controller on OMAP4 uses Phoenix irq for
> >> Card detect */
> >> >> >>>> +#ifdef CONFIG_TWL4030_CORE
> >> >> >>>> +int twl6030_mmc_card_detect(struct device *dev, int slot);
> >> >> >>>> +#else
> >> >> >>>> +static inline int twl6030_mmc_card_detect(struct
> >> device *dev, int slot)
> >> >> >>>> +{
> >> >> >>>> + ? ? ? pr_debug("Call back twl6030_mmc_card_detect
> >> not supported\n");
> >
> > Use dev_dbg() instead of pr_debug...
> > Same comment applies across this patch series whereever pr_err/pr_debug
> > APIs are used.
> 
> Couldn't get it  how it makes a difference ? could you explain
One things which I can think of is dev_dbg() would contain the
device name so that you know which device the error is associated with.
-tarun
> 
> >
> >> >> >>>> + ? ? ? return -EIO;
> >> >> >>>> +}
> >> >> >>>> +#endif
> >
> > <<snip>>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2010-10-20 13:11 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-09-24 17:13 [PATCH v4 1/4] omap4 hsmmc: Adding card detect support for MMC1 kishore kadiyala
2010-09-25  0:38 ` Tony Lindgren
2010-09-27  7:52   ` kishore kadiyala
2010-09-27  7:55 ` kishore kadiyala
2010-09-28  6:52   ` kishore kadiyala
2010-09-29 10:41     ` kishore kadiyala
2010-10-01  6:59       ` kishore kadiyala
2010-10-01 11:29         ` Samuel Ortiz
2010-10-01 12:02           ` kishore kadiyala
2010-10-01 14:41             ` Varadarajan, Charulatha
2010-10-01 14:44               ` kishore kadiyala
2010-10-01 14:54                 ` Varadarajan, Charulatha
2010-10-20 13:11                 ` DebBarma, Tarun Kanti
2010-10-01 14:46 ` Varadarajan, Charulatha

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).