linux-omap.vger.kernel.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-mmc, linux-omap, linux-arm-kernel
  Cc: tony, akpm, madhu.cr, adrian.hunter

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

* Re: [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: kishore kadiyala
  Cc: linux-mmc, linux-omap, linux-arm-kernel, akpm, madhu.cr,
	adrian.hunter

* 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

* Re: [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: Tony Lindgren
  Cc: kishore kadiyala, linux-mmc, linux-omap, linux-arm-kernel, akpm,
	madhu.cr, adrian.hunter

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

* Re: [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: sameo
  Cc: linux-mmc, linux-omap, linux-arm-kernel, tony, akpm, madhu.cr,
	adrian.hunter

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@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>

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

* Re: [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: sameo
  Cc: linux-mmc, linux-omap, linux-arm-kernel, tony, akpm, madhu.cr,
	adrian.hunter

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@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>
>

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

* Re: [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: sameo
  Cc: linux-mmc, linux-omap, linux-arm-kernel, tony, akpm, madhu.cr,
	adrian.hunter

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@vger.kernel.org
>>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>>
>>
>

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

* Re: [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: sameo
  Cc: linux-mmc, linux-omap, linux-arm-kernel, tony, akpm, madhu.cr,
	adrian.hunter

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@vger.kernel.org
>>>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>>>
>>>
>>
>

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

* Re: [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: kishore kadiyala
  Cc: linux-mmc, linux-omap, linux-arm-kernel, tony, akpm, madhu.cr,
	adrian.hunter

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@vger.kernel.org
> >>>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> >>>>
> >>>
> >>
> >

-- 
Intel Open Source Technology Centre
http://oss.intel.com/
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* Re: [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: Samuel Ortiz
  Cc: linux-mmc, linux-omap, linux-arm-kernel, tony, akpm, madhu.cr,
	adrian.hunter

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

* RE: [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: kishore kadiyala, Samuel Ortiz
  Cc: linux-mmc@vger.kernel.org, linux-omap@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, tony@atomide.com,
	akpm@linux-foundation.org, Chikkature Rajashekar, Madhusudhan,
	adrian.hunter@nokia.com

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

* Re: [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: Varadarajan, Charulatha
  Cc: Samuel Ortiz, linux-mmc@vger.kernel.org,
	linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	tony@atomide.com, akpm@linux-foundation.org,
	Chikkature Rajashekar, Madhusudhan, adrian.hunter@nokia.com

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

* RE: [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: Kadiyala, Kishore, linux-mmc@vger.kernel.org,
	linux-omap@vger.kernel.org, linux-arm-kernel
  Cc: tony@atomide.com, akpm@linux-foundation.org,
	Chikkature Rajashekar, Madhusudhan, adrian.hunter@nokia.com

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

* RE: [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: kishore kadiyala
  Cc: Samuel Ortiz, linux-mmc@vger.kernel.org,
	linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	tony@atomide.com, akpm@linux-foundation.org,
	Chikkature Rajashekar, Madhusudhan, adrian.hunter@nokia.com



> -----Original Message-----
> From: kishore kadiyala [mailto:kishorek.kadiyala@gmail.com]
> Sent: Friday, October 01, 2010 8:15 PM
> To: Varadarajan, Charulatha
> Cc: Samuel Ortiz; linux-mmc@vger.kernel.org; linux-omap@vger.kernel.org;
> linux-arm-kernel@lists.infradead.org; tony@atomide.com; akpm@linux-
> foundation.org; Chikkature Rajashekar, Madhusudhan;
> adrian.hunter@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>>
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* RE: [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: kishore kadiyala, Varadarajan, Charulatha
  Cc: Samuel Ortiz, linux-mmc@vger.kernel.org,
	linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	tony@atomide.com, akpm@linux-foundation.org,
	Chikkature Rajashekar, Madhusudhan, adrian.hunter@nokia.com


> -----Original Message-----
> From: linux-omap-owner@vger.kernel.org [mailto:linux-omap-
> owner@vger.kernel.org] On Behalf Of kishore kadiyala
> Sent: Friday, October 01, 2010 8:15 PM
> To: Varadarajan, Charulatha
> Cc: Samuel Ortiz; linux-mmc@vger.kernel.org; linux-omap@vger.kernel.org;
> linux-arm-kernel@lists.infradead.org; tony@atomide.com; akpm@linux-
> foundation.org; Chikkature Rajashekar, Madhusudhan;
> adrian.hunter@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@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).