Re: [PATCH v5 2/2] OMAP4 HSMMC: Adding card detect support for MMC1 Controller
* Andrew Morton a...@linux-foundation.org [100617 23:09]: On Thu, 17 Jun 2010 20:57:19 +0530 (IST) kishore kadiyala kishore.kadiy...@ti.com wrote: Adding card detect callback function which gives the status of the card .For MMC1 Controller, Card detect interrupt source is twl6030 and card present/absent status is provided by MMCCTRL register of twl6030. Signed-off-by: Kishore Kadiyala kishore.kadiy...@ti.com --- arch/arm/mach-omap2/board-4430sdp.c | 11 +-- arch/arm/mach-omap2/hsmmc.c |1 + arch/arm/plat-omap/include/plat/mmc.h |1 + drivers/mfd/twl6030-irq.c | 23 drivers/mmc/host/omap_hsmmc.c | 30 ++--- include/linux/i2c/twl.h | 46 + 6 files changed, 104 insertions(+), 8 deletions(-) I assume this depends on [PATCH v5 1/2] OMAP HSMMC: Adding a Flag to determine the type of Card detect? It's all a bit too remote from my (ever-expanding) work area, so I'll assume that Tony or someone will look after these. Yeah we'll queue these via the omap patches once everybody is happy with them. Regards, Tony -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v5 2/2] OMAP4 HSMMC: Adding card detect support for MMC1 Controller
ext kishore kadiyala wrote: Adrian , Sorry for the late response snip As per my email 5/5/10, I would suggest the only change to omap_hsmmc is: Agreed and followed the changes mostly but made some more changes on top of it. snip And that the late init function is used to do the rest e.g. find a home for these 3 functions: I agree just having the 3 functions makes it work. static int omap4_twl6030_hsmmc_late_init(struct device *dev) { int ret = 0; struct platform_device *pdev = container_of(dev, struct platform_device, dev); struct omap_mmc_platform_data *pdata = dev-platform_data; /* MMC1 Card detect Configuration */ if (pdev-id == 0) { ret = omap4_hsmmc1_card_detect_config(); if (ret 0) pr_err(Unable to configure Card detect for MMC1\n); pdata-slots[0].card_detect = twl6030_mmc_card_detect; pdata-slots[0].card_detect_irq = TWL6030_IRQ_BASE + MMCDETECT_INTR_OFFSET; } return ret; snip Few Comments below: 1) In the above function, initializing card_detect in the driver as done in omap_hsmmc_gpio_init might be more readable and this has been done in nongpio_init instead. Even having initialization of card_detect_irq inside nongpio_init is fine. The problem is that referencing twl6030 from omap_hsmmc.c is not ok. The driver must work with any platform and that is the reason that platform data provides callbacks. 2)Also calling omap_hsmmc_gpio_init in case of a card detect line which is not GPIO doesn't make sense though it assigns -EINVAL to switch_pin in case of invalid GPIO which is intended for a non-removable card . 3) And also having some thing like GPIO and NON_GPIO flag to distinguish might make sense. Regards, Kishore -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v5 2/2] OMAP4 HSMMC: Adding card detect support for MMC1 Controller
On Tue, Jun 29, 2010 at 1:00 PM, Adrian Hunter adrian.hun...@nokia.com wrote: ext kishore kadiyala wrote: Adrian , Sorry for the late response snip As per my email 5/5/10, I would suggest the only change to omap_hsmmc is: Agreed and followed the changes mostly but made some more changes on top of it. snip And that the late init function is used to do the rest e.g. find a home for these 3 functions: I agree just having the 3 functions makes it work. static int omap4_twl6030_hsmmc_late_init(struct device *dev) { int ret = 0; struct platform_device *pdev = container_of(dev, struct platform_device, dev); struct omap_mmc_platform_data *pdata = dev-platform_data; /* MMC1 Card detect Configuration */ if (pdev-id == 0) { ret = omap4_hsmmc1_card_detect_config(); if (ret 0) pr_err(Unable to configure Card detect for MMC1\n); pdata-slots[0].card_detect = twl6030_mmc_card_detect; pdata-slots[0].card_detect_irq = TWL6030_IRQ_BASE + MMCDETECT_INTR_OFFSET; } return ret; snip Few Comments below: 1) In the above function, initializing card_detect in the driver as done in omap_hsmmc_gpio_init might be more readable and this has been done in nongpio_init instead. Even having initialization of card_detect_irq inside nongpio_init is fine. The problem is that referencing twl6030 from omap_hsmmc.c is not ok. The driver must work with any platform and that is the reason that platform data provides callbacks. ok, in that case how about having handler initialized in mach-omap2/hsmmc.c for both gpio and non-gpio case. -Kishore 2)Also calling omap_hsmmc_gpio_init in case of a card detect line which is not GPIO doesn't make sense though it assigns -EINVAL to switch_pin in case of invalid GPIO which is intended for a non-removable card . 3) And also having some thing like GPIO and NON_GPIO flag to distinguish might make sense. Regards, Kishore -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v5 2/2] OMAP4 HSMMC: Adding card detect support for MMC1 Controller
kishore kadiyala wrote: On Tue, Jun 29, 2010 at 1:00 PM, Adrian Hunter adrian.hun...@nokia.com wrote: ext kishore kadiyala wrote: Adrian , Sorry for the late response snip As per my email 5/5/10, I would suggest the only change to omap_hsmmc is: Agreed and followed the changes mostly but made some more changes on top of it. snip And that the late init function is used to do the rest e.g. find a home for these 3 functions: I agree just having the 3 functions makes it work. static int omap4_twl6030_hsmmc_late_init(struct device *dev) { int ret = 0; struct platform_device *pdev = container_of(dev, struct platform_device, dev); struct omap_mmc_platform_data *pdata = dev-platform_data; /* MMC1 Card detect Configuration */ if (pdev-id == 0) { ret = omap4_hsmmc1_card_detect_config(); if (ret 0) pr_err(Unable to configure Card detect for MMC1\n); pdata-slots[0].card_detect = twl6030_mmc_card_detect; pdata-slots[0].card_detect_irq = TWL6030_IRQ_BASE + MMCDETECT_INTR_OFFSET; } return ret; snip Few Comments below: 1) In the above function, initializing card_detect in the driver as done in omap_hsmmc_gpio_init might be more readable and this has been done in nongpio_init instead. Even having initialization of card_detect_irq inside nongpio_init is fine. The problem is that referencing twl6030 from omap_hsmmc.c is not ok. The driver must work with any platform and that is the reason that platform data provides callbacks. ok, in that case how about having handler initialized in mach-omap2/hsmmc.c for both gpio and non-gpio case. Unless twl6030 is part of OMAP4 then it doesn't belong in hsmmc.c either -Kishore 2)Also calling omap_hsmmc_gpio_init in case of a card detect line which is not GPIO doesn't make sense though it assigns -EINVAL to switch_pin in case of invalid GPIO which is intended for a non-removable card . 3) And also having some thing like GPIO and NON_GPIO flag to distinguish might make sense. Regards, Kishore -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v5 2/2] OMAP4 HSMMC: Adding card detect support for MMC1 Controller
On Tue, Jun 29, 2010 at 1:48 PM, Adrian Hunter adrian.hun...@nokia.com wrote: kishore kadiyala wrote: On Tue, Jun 29, 2010 at 1:00 PM, Adrian Hunter adrian.hun...@nokia.com wrote: ext kishore kadiyala wrote: Adrian , Sorry for the late response snip As per my email 5/5/10, I would suggest the only change to omap_hsmmc is: Agreed and followed the changes mostly but made some more changes on top of it. snip And that the late init function is used to do the rest e.g. find a home for these 3 functions: I agree just having the 3 functions makes it work. static int omap4_twl6030_hsmmc_late_init(struct device *dev) { int ret = 0; struct platform_device *pdev = container_of(dev, struct platform_device, dev); struct omap_mmc_platform_data *pdata = dev-platform_data; /* MMC1 Card detect Configuration */ if (pdev-id == 0) { ret = omap4_hsmmc1_card_detect_config(); if (ret 0) pr_err(Unable to configure Card detect for MMC1\n); pdata-slots[0].card_detect = twl6030_mmc_card_detect; pdata-slots[0].card_detect_irq = TWL6030_IRQ_BASE + MMCDETECT_INTR_OFFSET; } return ret; snip Few Comments below: 1) In the above function, initializing card_detect in the driver as done in omap_hsmmc_gpio_init might be more readable and this has been done in nongpio_init instead. Even having initialization of card_detect_irq inside nongpio_init is fine. The problem is that referencing twl6030 from omap_hsmmc.c is not ok. The driver must work with any platform and that is the reason that platform data provides callbacks. ok, in that case how about having handler initialized in mach-omap2/hsmmc.c for both gpio and non-gpio case. Unless twl6030 is part of OMAP4 then it doesn't belong in hsmmc.c either ok, I'll make changes as suggested and post next version. Regards, Kishore -Kishore 2)Also calling omap_hsmmc_gpio_init in case of a card detect line which is not GPIO doesn't make sense though it assigns -EINVAL to switch_pin in case of invalid GPIO which is intended for a non-removable card . 3) And also having some thing like GPIO and NON_GPIO flag to distinguish might make sense. Regards, Kishore -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v5 2/2] OMAP4 HSMMC: Adding card detect support for MMC1 Controller
Adrian , Sorry for the late response snip As per my email 5/5/10, I would suggest the only change to omap_hsmmc is: Agreed and followed the changes mostly but made some more changes on top of it. snip And that the late init function is used to do the rest e.g. find a home for these 3 functions: I agree just having the 3 functions makes it work. static int omap4_twl6030_hsmmc_late_init(struct device *dev) { int ret = 0; struct platform_device *pdev = container_of(dev, struct platform_device, dev); struct omap_mmc_platform_data *pdata = dev-platform_data; /* MMC1 Card detect Configuration */ if (pdev-id == 0) { ret = omap4_hsmmc1_card_detect_config(); if (ret 0) pr_err(Unable to configure Card detect for MMC1\n); pdata-slots[0].card_detect = twl6030_mmc_card_detect; pdata-slots[0].card_detect_irq = TWL6030_IRQ_BASE + MMCDETECT_INTR_OFFSET; } return ret; snip Few Comments below: 1) In the above function, initializing card_detect in the driver as done in omap_hsmmc_gpio_init might be more readable and this has been done in nongpio_init instead. Even having initialization of card_detect_irq inside nongpio_init is fine. 2)Also calling omap_hsmmc_gpio_init in case of a card detect line which is not GPIO doesn't make sense though it assigns -EINVAL to switch_pin in case of invalid GPIO which is intended for a non-removable card . 3) And also having some thing like GPIO and NON_GPIO flag to distinguish might make sense. Regards, Kishore -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v5 2/2] OMAP4 HSMMC: Adding card detect support for MMC1 Controller
On Fri, Jun 18, 2010 at 1:57 AM, Andrew Morton a...@linux-foundation.org wrote: On Thu, 17 Jun 2010 20:57:19 +0530 (IST) kishore kadiyala kishore.kadiy...@ti.com wrote: Adding card detect callback function which gives the status of the card .For MMC1 Controller, Card detect interrupt source is twl6030 and card present/absent status is provided by MMCCTRL register of twl6030. ... + int ret = -ENOSYS; + int ret = -ENOSYS; ENOSYS seems an inappropriate errno to use in a driver. ENOSYS -- The system doesn't support that function. For example, if you call setpgid() on a system without job control, you'll get an ENOSYS error. I think it means you the programmer tried to do something in a syscall which didn't make sense in this context. I'm not sure what _is_ appropraite here. There's always EIO I guess. ENODEV? Agree, I will make changes with EIO . This happens a lot. The userspace errnos just don't map well onto kernel-internal operations. it was a mistake - we should have defined a kernel-internal namespace and perhaps type for such things. Oh well. +/* Configuring Card Detect for MMC1 */ +static inline int omap4_hsmmc1_card_detect_config(void) +{ + int res = -1; + u8 reg_val = 0; + + /* Unmasking the Card detect Interrupt line for MMC1 from Phoenix */ + if (twl_class_is_6030()) { + 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 + */ + res = twl_i2c_read_u8(TWL6030_MODULE_ID0, reg_val, TWL6030_MMCCTRL); + if (res 0) + return res; + reg_val = ~VMMC_AUTO_OFF; + reg_val |= SW_FC; + twl_i2c_write_u8(TWL6030_MODULE_ID0, reg_val, TWL6030_MMCCTRL); + + /* Configuring CFG_INPUT_PUPD3 */ + res = twl_i2c_read_u8(TWL6030_MODULE_ID0, reg_val, + TWL6030_CFG_INPUT_PUPD3); + if (res 0) + return res; + reg_val = ~(MMC_PU | MMC_PD); + twl_i2c_write_u8(TWL6030_MODULE_ID0, reg_val, TWL6030_CFG_INPUT_PUPD3); + return res; +} This is way to large to be inlined. Why not put it in a .c file? ok, I will repost with the inlined moved as a function in .c file . Regards, Kishore -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v5 2/2] OMAP4 HSMMC: Adding card detect support for MMC1 Controller
kishore kadiyala wrote: Adding card detect callback function which gives the status of the card .For MMC1 Controller, Card detect interrupt source is twl6030 and card present/absent status is provided by MMCCTRL register of twl6030. Signed-off-by: Kishore Kadiyala kishore.kadiy...@ti.com --- arch/arm/mach-omap2/board-4430sdp.c | 11 +-- arch/arm/mach-omap2/hsmmc.c |1 + arch/arm/plat-omap/include/plat/mmc.h |1 + drivers/mfd/twl6030-irq.c | 23 drivers/mmc/host/omap_hsmmc.c | 30 ++--- include/linux/i2c/twl.h | 46 + 6 files changed, 104 insertions(+), 8 deletions(-) diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c index e4a5d66..1cf6f3b 100644 --- a/arch/arm/mach-omap2/board-4430sdp.c +++ b/arch/arm/mach-omap2/board-4430sdp.c @@ -144,6 +144,7 @@ static struct omap2_hsmmc_info mmc[] = { { .mmc= 1, .wires = 8, + .cd_type= NON_GPIO, .gpio_wp= -EINVAL, }, { @@ -174,10 +175,14 @@ static int omap4_twl6030_hsmmc_late_init(struct device *dev) struct platform_device, dev); struct omap_mmc_platform_data *pdata = dev-platform_data; - /* Setting MMC1 Card detect Irq */ - if (pdev-id == 0) + /* MMC1 Card detect Configuration */ + if (pdev-id == 0) { + ret = omap4_hsmmc1_card_detect_config(); + if (ret 0) + pr_err(Unable to configure Card detect for MMC1\n); pdata-slots[0].card_detect_irq = TWL6030_IRQ_BASE + - MMCDETECT_INTR_OFFSET; + MMCDETECT_INTR_OFFSET; + } return ret; } diff --git a/arch/arm/mach-omap2/hsmmc.c b/arch/arm/mach-omap2/hsmmc.c index 1ef54b0..8a8f7b1 100644 --- a/arch/arm/mach-omap2/hsmmc.c +++ b/arch/arm/mach-omap2/hsmmc.c @@ -265,6 +265,7 @@ void __init omap2_hsmmc_init(struct omap2_hsmmc_info *controllers) mmc-get_context_loss_count = hsmmc_get_context_loss; mmc-slots[0].switch_pin = c-gpio_cd; + mmc-slots[0].cd_type = c-cd_type; mmc-slots[0].gpio_wp = c-gpio_wp; mmc-slots[0].remux = c-remux; diff --git a/arch/arm/plat-omap/include/plat/mmc.h b/arch/arm/plat-omap/include/plat/mmc.h index ed60c0f..cd42c77 100644 --- a/arch/arm/plat-omap/include/plat/mmc.h +++ b/arch/arm/plat-omap/include/plat/mmc.h @@ -14,6 +14,7 @@ #include linux/types.h #include linux/device.h #include linux/mmc/host.h +#include linux/i2c/twl.h #include plat/board.h diff --git a/drivers/mfd/twl6030-irq.c b/drivers/mfd/twl6030-irq.c index 10bf228..f17e4e7 100644 --- a/drivers/mfd/twl6030-irq.c +++ b/drivers/mfd/twl6030-irq.c @@ -223,6 +223,29 @@ int twl6030_interrupt_mask(u8 bit_mask, u8 offset) } EXPORT_SYMBOL(twl6030_interrupt_mask); +int twl6030_mmc_card_detect(int host_id, int slot) +{ + int ret = -ENOSYS; + u8 read_reg; + + switch (host_id) { + case 0: + /* +* BIT0 of REG_MMC_CTRL +* 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; + break; + default: + pr_err(Unkown MMC controller %d in %s\n, host_id, __func__); + } + 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 b032828..5d5bd29 100644 --- a/drivers/mmc/host/omap_hsmmc.c +++ b/drivers/mmc/host/omap_hsmmc.c As per my email 5/5/10, I would suggest the only change to omap_hsmmc is: diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c index e9caf69..f792cff 100644 --- a/drivers/mmc/host/omap_hsmmc.c +++ b/drivers/mmc/host/omap_hsmmc.c @@ -465,8 +465,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; @@ -2160,6 +2158,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; +
[PATCH v5 2/2] OMAP4 HSMMC: Adding card detect support for MMC1 Controller
Adding card detect callback function which gives the status of the card .For MMC1 Controller, Card detect interrupt source is twl6030 and card present/absent status is provided by MMCCTRL register of twl6030. Signed-off-by: Kishore Kadiyala kishore.kadiy...@ti.com --- arch/arm/mach-omap2/board-4430sdp.c | 11 +-- arch/arm/mach-omap2/hsmmc.c |1 + arch/arm/plat-omap/include/plat/mmc.h |1 + drivers/mfd/twl6030-irq.c | 23 drivers/mmc/host/omap_hsmmc.c | 30 ++--- include/linux/i2c/twl.h | 46 + 6 files changed, 104 insertions(+), 8 deletions(-) diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c index e4a5d66..1cf6f3b 100644 --- a/arch/arm/mach-omap2/board-4430sdp.c +++ b/arch/arm/mach-omap2/board-4430sdp.c @@ -144,6 +144,7 @@ static struct omap2_hsmmc_info mmc[] = { { .mmc= 1, .wires = 8, + .cd_type= NON_GPIO, .gpio_wp= -EINVAL, }, { @@ -174,10 +175,14 @@ static int omap4_twl6030_hsmmc_late_init(struct device *dev) struct platform_device, dev); struct omap_mmc_platform_data *pdata = dev-platform_data; - /* Setting MMC1 Card detect Irq */ - if (pdev-id == 0) + /* MMC1 Card detect Configuration */ + if (pdev-id == 0) { + ret = omap4_hsmmc1_card_detect_config(); + if (ret 0) + pr_err(Unable to configure Card detect for MMC1\n); pdata-slots[0].card_detect_irq = TWL6030_IRQ_BASE + - MMCDETECT_INTR_OFFSET; + MMCDETECT_INTR_OFFSET; + } return ret; } diff --git a/arch/arm/mach-omap2/hsmmc.c b/arch/arm/mach-omap2/hsmmc.c index 1ef54b0..8a8f7b1 100644 --- a/arch/arm/mach-omap2/hsmmc.c +++ b/arch/arm/mach-omap2/hsmmc.c @@ -265,6 +265,7 @@ void __init omap2_hsmmc_init(struct omap2_hsmmc_info *controllers) mmc-get_context_loss_count = hsmmc_get_context_loss; mmc-slots[0].switch_pin = c-gpio_cd; + mmc-slots[0].cd_type = c-cd_type; mmc-slots[0].gpio_wp = c-gpio_wp; mmc-slots[0].remux = c-remux; diff --git a/arch/arm/plat-omap/include/plat/mmc.h b/arch/arm/plat-omap/include/plat/mmc.h index ed60c0f..cd42c77 100644 --- a/arch/arm/plat-omap/include/plat/mmc.h +++ b/arch/arm/plat-omap/include/plat/mmc.h @@ -14,6 +14,7 @@ #include linux/types.h #include linux/device.h #include linux/mmc/host.h +#include linux/i2c/twl.h #include plat/board.h diff --git a/drivers/mfd/twl6030-irq.c b/drivers/mfd/twl6030-irq.c index 10bf228..f17e4e7 100644 --- a/drivers/mfd/twl6030-irq.c +++ b/drivers/mfd/twl6030-irq.c @@ -223,6 +223,29 @@ int twl6030_interrupt_mask(u8 bit_mask, u8 offset) } EXPORT_SYMBOL(twl6030_interrupt_mask); +int twl6030_mmc_card_detect(int host_id, int slot) +{ + int ret = -ENOSYS; + u8 read_reg; + + switch (host_id) { + case 0: + /* +* BIT0 of REG_MMC_CTRL +* 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; + break; + default: + pr_err(Unkown MMC controller %d in %s\n, host_id, __func__); + } + 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 b032828..5d5bd29 100644 --- a/drivers/mmc/host/omap_hsmmc.c +++ b/drivers/mmc/host/omap_hsmmc.c @@ -189,9 +189,16 @@ struct omap_hsmmc_host { static int omap_hsmmc_card_detect(struct device *dev, int slot) { struct omap_mmc_platform_data *mmc = dev-platform_data; + struct platform_device *pdev = container_of(dev, + struct platform_device, dev); + int ret = -ENOSYS; - /* NOTE: assumes card detect signal is active-low */ - return !gpio_get_value_cansleep(mmc-slots[0].switch_pin); + if (mmc-slots[0].cd_type == GPIO) + /* NOTE: assumes card detect signal is active-low */ + ret = !gpio_get_value_cansleep(mmc-slots[0].switch_pin); + else + ret = twl6030_mmc_card_detect(pdev-id, slot); + return ret; } static int omap_hsmmc_get_wp(struct device *dev, int slot) @@ -464,8 +471,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 =
Re: [PATCH v5 2/2] OMAP4 HSMMC: Adding card detect support for MMC1 Controller
On Thu, 17 Jun 2010 20:57:19 +0530 (IST) kishore kadiyala kishore.kadiy...@ti.com wrote: Adding card detect callback function which gives the status of the card .For MMC1 Controller, Card detect interrupt source is twl6030 and card present/absent status is provided by MMCCTRL register of twl6030. Signed-off-by: Kishore Kadiyala kishore.kadiy...@ti.com --- arch/arm/mach-omap2/board-4430sdp.c | 11 +-- arch/arm/mach-omap2/hsmmc.c |1 + arch/arm/plat-omap/include/plat/mmc.h |1 + drivers/mfd/twl6030-irq.c | 23 drivers/mmc/host/omap_hsmmc.c | 30 ++--- include/linux/i2c/twl.h | 46 + 6 files changed, 104 insertions(+), 8 deletions(-) I assume this depends on [PATCH v5 1/2] OMAP HSMMC: Adding a Flag to determine the type of Card detect? It's all a bit too remote from my (ever-expanding) work area, so I'll assume that Tony or someone will look after these. -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v5 2/2] OMAP4 HSMMC: Adding card detect support for MMC1 Controller
On Thu, 17 Jun 2010 20:57:19 +0530 (IST) kishore kadiyala kishore.kadiy...@ti.com wrote: Adding card detect callback function which gives the status of the card .For MMC1 Controller, Card detect interrupt source is twl6030 and card present/absent status is provided by MMCCTRL register of twl6030. ... + int ret = -ENOSYS; + int ret = -ENOSYS; ENOSYS seems an inappropriate errno to use in a driver. ENOSYS -- The system doesn't support that function. For example, if you call setpgid() on a system without job control, you'll get an ENOSYS error. I think it means you the programmer tried to do something in a syscall which didn't make sense in this context. I'm not sure what _is_ appropraite here. There's always EIO I guess. ENODEV? This happens a lot. The userspace errnos just don't map well onto kernel-internal operations. it was a mistake - we should have defined a kernel-internal namespace and perhaps type for such things. Oh well. +/* Configuring Card Detect for MMC1 */ +static inline int omap4_hsmmc1_card_detect_config(void) +{ + int res = -1; + u8 reg_val = 0; + + /* Unmasking the Card detect Interrupt line for MMC1 from Phoenix */ + if (twl_class_is_6030()) { + 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 + */ + res = twl_i2c_read_u8(TWL6030_MODULE_ID0, reg_val, TWL6030_MMCCTRL); + if (res 0) + return res; + reg_val = ~VMMC_AUTO_OFF; + reg_val |= SW_FC; + twl_i2c_write_u8(TWL6030_MODULE_ID0, reg_val, TWL6030_MMCCTRL); + + /* Configuring CFG_INPUT_PUPD3 */ + res = twl_i2c_read_u8(TWL6030_MODULE_ID0, reg_val, + TWL6030_CFG_INPUT_PUPD3); + if (res 0) + return res; + reg_val = ~(MMC_PU | MMC_PD); + twl_i2c_write_u8(TWL6030_MODULE_ID0, reg_val, TWL6030_CFG_INPUT_PUPD3); + return res; +} This is way to large to be inlined. Why not put it in a .c file? -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html