* [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, ®_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, ®_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, ®_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, ®_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, ®_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, ®_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, ®_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, ®_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, ®_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, ®_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, ®_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, ®_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, ®_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, ®_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).