OMAP35xx:SDIO IRQ Support for OMAP35xx
Subsystems (2)
PATCH 1/1 OMAP35xx:SDIO IRQ Support for OMAP35xx
This patch adds SDIO IRQ support for OMAP35xx. Tested on OMAP3530EVM with Marvell 88W8686 card and below are the observed throughput results (ttcp utility): 13Mbps (Downlink), 10.5 Mbps(Uplink)
--- drivers/mmc/host/omap_hsmmc.c | 55 ++++++++++++++++++++++++++++++++++++---- 1 files changed, 49 insertions(+), 6 deletions(-)
drivers/mmc/host/omap_hsmmc.c +49 -6
@@ -100,6 +100,10 @@#define SRD (1 << 26)#define SOFTRESET (1 << 1)#define RESETDONE (1 << 0) +#define CIRQ (1 << 8) +#define CIRQ_ENABLE (1 << 8) +#define CTPL (1 << 11) +#define CLKEXTFREE (1 << 16)/* * FIXME: Most likely all the data using these _DEVID defines should come
@@ -171,6 +175,7 @@ struct omap_hsmmc_host {int vdd;int protect_card;int reqs_blocked; +int sdio_int;struct omap_mmc_platform_data *pdata; };
@@ -436,6 +441,13 @@ omap_hsmmc_start_command(struct omap_hsmmc_host *host, struct mmc_command *cmd,else OMAP_HSMMC_WRITE (host->base,IE ,INT_EN_MASK ); +if (host->sdio_int) { +OMAP_HSMMC_WRITE (host->base,ISE , + (OMAP_HSMMC_READ (host->base,ISE ) |CIRQ_ENABLE )); +OMAP_HSMMC_WRITE (host->base,IE , + (OMAP_HSMMC_READ (host->base,IE ) |CIRQ_ENABLE )); + } + host->response_busy =0 ;if (cmd->flags &MMC_RSP_PRESENT ) {if (cmd->flags &MMC_RSP_136 )
@@ -640,6 +652,17 @@ static irqreturn_t omap_hsmmc_irq(int irq, void *dev_id)spin_lock (&host->irq_lock); + data = host->data; + status =OMAP_HSMMC_READ (host->base,STAT ); +dev_dbg (mmc_dev (host->mmc),"IRQ Status is %x\n" , status); + +if (host->mmc->caps &MMC_CAP_SDIO_IRQ ) { +if (status &CIRQ ) { +dev_dbg (mmc_dev (host->mmc),"SDIO Card Interrupt\n" ); +mmc_signal_sdio_irq (host->mmc); + } + } +if (host->mrq ==NULL ) {OMAP_HSMMC_WRITE (host->base,STAT ,OMAP_HSMMC_READ (host->base,STAT ));
@@ -649,10 +672,6 @@ static irqreturn_t omap_hsmmc_irq(int irq, void *dev_id)return IRQ_HANDLED ; } - data = host->data; - status =OMAP_HSMMC_READ (host->base,STAT ); -dev_dbg (mmc_dev (host->mmc),"IRQ Status is %x\n" , status); -if (status &ERR ) {#ifdef CONFIG_MMC_DEBUG omap_hsmmc_report_irq (host, status);
@@ -1254,6 +1273,25 @@ static int omap_hsmmc_get_ro(struct mmc_host *mmc)return mmc_slot (host).get_ro (host->dev,0 ); } +static void omap_hsmmc_enable_sdio_irq (struct mmc_host *mmc,int enable) +{ +struct omap_hsmmc_host *host =mmc_priv (mmc); + + host->sdio_int = enable; +if (enable) { +OMAP_HSMMC_WRITE (host->base,ISE , + (OMAP_HSMMC_READ (host->base,ISE ) |CIRQ_ENABLE )); +OMAP_HSMMC_WRITE (host->base,IE , + (OMAP_HSMMC_READ (host->base,IE ) |CIRQ_ENABLE )); + }else { +OMAP_HSMMC_WRITE (host->base,IE , + (OMAP_HSMMC_READ (host->base,IE ) & (~CIRQ_ENABLE ))); +OMAP_HSMMC_WRITE (host->base,ISE , + (OMAP_HSMMC_READ (host->base,ISE ) & (~CIRQ_ENABLE ))); + } + +} +static void omap_hsmmc_conf_bus_power (struct omap_hsmmc_host *host) {u32 hctl, capa, value;
@@ -1519,7 +1557,7 @@ static const struct mmc_host_ops omap_hsmmc_ops = { .set_ios = omap_hsmmc_set_ios, .get_cd = omap_hsmmc_get_cd, .get_ro = omap_hsmmc_get_ro, -/* NYET -- enable_sdio_irq */ + .enable_sdio_irq = omap_hsmmc_enable_sdio_irq, };static const struct mmc_host_ops omap_hsmmc_ps_ops = {
@@ -1529,7 +1567,7 @@ static const struct mmc_host_ops omap_hsmmc_ps_ops = { .set_ios = omap_hsmmc_set_ios, .get_cd = omap_hsmmc_get_cd, .get_ro = omap_hsmmc_get_ro, -/* NYET -- enable_sdio_irq */ + .enable_sdio_irq = omap_hsmmc_enable_sdio_irq, };#ifdef CONFIG_DEBUG_FS
@@ -1657,6 +1695,7 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev) host->mapbase = res->start; host->base =ioremap (host->mapbase,SZ_4K ); host->power_mode =-1 ; + host->sdio_int =0 ;platform_set_drvdata (pdev, host);INIT_WORK (&host->mmc_carddetect_work, omap_hsmmc_detect);
@@ -1744,6 +1783,10 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)if (mmc_slot (host).nonremovable) mmc->caps |=MMC_CAP_NONREMOVABLE ; + mmc->caps |=MMC_CAP_SDIO_IRQ ; +OMAP_HSMMC_WRITE (host->base,CON , +OMAP_HSMMC_READ (host->base,CON ) | (CTPL |CLKEXTFREE )); +omap_hsmmc_conf_bus_power (host);/* Select DMA lines */
Signature · 1 line
1.6.3.3
Hi,
Quoted 8 lines · Phaneendra Kumar Alapati
This patch adds SDIO IRQ support for OMAP35xx. Tested on OMAP3530EVM with Marvell 88W8686 card and below are the observed throughput results (ttcp utility): 13Mbps (Downlink), 10.5 Mbps(Uplink)
Signed-off-by Phaneendra Kumar <[email protected]>--- drivers/mmc/host/omap_hsmmc.c | 55 ++++++++++++++++++++++++++++++++++++---- 1 files changed, 49 insertions(+), 6 deletions(-)
I've tried the patch on CM-T35 that has Marvell 88W8686 on-board and surprisingly I get a lot of command timeouts from the libertas driver :(
---
libertas: requeueing command 0x0006 due to timeout (#1)
libertas: Received result 0 to command 6 after 1 retries
libertas: command 0x0006 timed out
---
I hope I'll find time to debug it in the next few days and provide more valuable information...
Quoted 129 lines
drivers/mmc/host/omap_hsmmc.c +49
-6@@ -100,6 +100,10 @@#define SRD (1 << 26)#define SOFTRESET (1 << 1)#define RESETDONE (1 << 0) +#define CIRQ (1 << 8) +#define CIRQ_ENABLE (1 << 8) +#define CTPL (1 << 11) +#define CLKEXTFREE (1 << 16)/* * FIXME: Most likely all the data using these _DEVID defines should come @@ -171,6 +175,7 @@ struct omap_hsmmc_host {int vdd;int protect_card;int reqs_blocked; +int sdio_int;struct omap_mmc_platform_data *pdata; };@@ -436,6 +441,13 @@ omap_hsmmc_start_command(struct omap_hsmmc_host *host, struct mmc_command *cmd,else OMAP_HSMMC_WRITE (host->base,IE ,INT_EN_MASK ); +if (host->sdio_int) { +OMAP_HSMMC_WRITE (host->base,ISE , + (OMAP_HSMMC_READ (host->base,ISE ) |CIRQ_ENABLE )); +OMAP_HSMMC_WRITE (host->base,IE , + (OMAP_HSMMC_READ (host->base,IE ) |CIRQ_ENABLE )); + } + host->response_busy =0 ;if (cmd->flags &MMC_RSP_PRESENT ) {if (cmd->flags &MMC_RSP_136 )@@ -640,6 +652,17 @@ static irqreturn_t omap_hsmmc_irq(int irq, void *dev_id)spin_lock (&host->irq_lock); + data = host->data; + status =OMAP_HSMMC_READ (host->base,STAT ); +dev_dbg (mmc_dev (host->mmc),"IRQ Status is %x\n" , status); + +if (host->mmc->caps &MMC_CAP_SDIO_IRQ ) { +if (status &CIRQ ) { +dev_dbg (mmc_dev (host->mmc),"SDIO Card Interrupt\n" ); +mmc_signal_sdio_irq (host->mmc); + } + } +if (host->mrq ==NULL ) {OMAP_HSMMC_WRITE (host->base,STAT ,OMAP_HSMMC_READ (host->base,STAT ));@@ -649,10 +672,6 @@ static irqreturn_t omap_hsmmc_irq(int irq, void *dev_id)return IRQ_HANDLED ; } - data = host->data; - status =OMAP_HSMMC_READ (host->base,STAT ); -dev_dbg (mmc_dev (host->mmc),"IRQ Status is %x\n" , status); -if (status &ERR ) {#ifdef CONFIG_MMC_DEBUG omap_hsmmc_report_irq (host, status);@@ -1254,6 +1273,25 @@ static int omap_hsmmc_get_ro(struct mmc_host *mmc)return mmc_slot (host).get_ro (host->dev,0 ); } +static void omap_hsmmc_enable_sdio_irq (struct mmc_host *mmc,int enable) +{ +struct omap_hsmmc_host *host =mmc_priv (mmc); + + host->sdio_int = enable; +if (enable) { +OMAP_HSMMC_WRITE (host->base,ISE , + (OMAP_HSMMC_READ (host->base,ISE ) |CIRQ_ENABLE )); +OMAP_HSMMC_WRITE (host->base,IE , + (OMAP_HSMMC_READ (host->base,IE ) |CIRQ_ENABLE )); + }else { +OMAP_HSMMC_WRITE (host->base,IE , + (OMAP_HSMMC_READ (host->base,IE ) & (~CIRQ_ENABLE ))); +OMAP_HSMMC_WRITE (host->base,ISE , + (OMAP_HSMMC_READ (host->base,ISE ) & (~CIRQ_ENABLE ))); + } + +} +static void omap_hsmmc_conf_bus_power (struct omap_hsmmc_host *host) {u32 hctl, capa, value;@@ -1519,7 +1557,7 @@ static const struct mmc_host_ops omap_hsmmc_ops = { .set_ios = omap_hsmmc_set_ios, .get_cd = omap_hsmmc_get_cd, .get_ro = omap_hsmmc_get_ro, -/* NYET -- enable_sdio_irq */ + .enable_sdio_irq = omap_hsmmc_enable_sdio_irq, };static const struct mmc_host_ops omap_hsmmc_ps_ops = {@@ -1529,7 +1567,7 @@ static const struct mmc_host_ops omap_hsmmc_ps_ops = { .set_ios = omap_hsmmc_set_ios, .get_cd = omap_hsmmc_get_cd, .get_ro = omap_hsmmc_get_ro, -/* NYET -- enable_sdio_irq */ + .enable_sdio_irq = omap_hsmmc_enable_sdio_irq, };#ifdef CONFIG_DEBUG_FS @@ -1657,6 +1695,7 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev) host->mapbase = res->start; host->base =ioremap (host->mapbase,SZ_4K ); host->power_mode =-1 ; + host->sdio_int =0 ;platform_set_drvdata (pdev, host);INIT_WORK (&host->mmc_carddetect_work, omap_hsmmc_detect);@@ -1744,6 +1783,10 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)if (mmc_slot (host).nonremovable) mmc->caps |=MMC_CAP_NONREMOVABLE ; + mmc->caps |=MMC_CAP_SDIO_IRQ ; +OMAP_HSMMC_WRITE (host->base,CON , +OMAP_HSMMC_READ (host->base,CON ) | (CTPL |CLKEXTFREE )); +omap_hsmmc_conf_bus_power (host);/* Select DMA lines */
Signature · 2 lines
Sincerely yours, Mike.
Quoted 12 lines · Mike Rapoport
Hi,
Quoted 8 lines · Phaneendra Kumar Alapati
This patch adds SDIO IRQ support for OMAP35xx. Tested on OMAP3530EVM with Marvell 88W8686 card and below are the observed throughput results (ttcp utility): 13Mbps (Downlink), 10.5 Mbps(Uplink)
Signed-off-by Phaneendra Kumar<[email protected]>--- drivers/mmc/host/omap_hsmmc.c | 55 ++++++++++++++++++++++++++++++++++++---- 1 files changed, 49 insertions(+), 6 deletions(-)
Quoted 9 lines
I've tried the patch on CM-T35 that has Marvell 88W8686 on-board and surprisingly I get a lot of command timeouts from the libertas driver :(
---
libertas: requeueing command0x0006due to timeout (#1)
libertas: Received result 0 to command 6 after 1 retries
libertas: command0x0006timed out
---
I hope I'll find time to debug it in the next few days and provide more valuable information...
There is a test report from Overo air that there it doesn't work, too:
http://old.nabble.com/Re%3A-Overo-wifi-speed-and-WPA2-connection-issue-p27231874.html
Any news on this patch?
Best regards
Dirk
Quoted 130 lines
Quoted 129 lines
drivers/mmc/host/omap_hsmmc.c +49
-6@@ -100,6 +100,10 @@#define SRD (1<< 26)#define SOFTRESET (1<< 1)#define RESETDONE (1<< 0) +#define CIRQ (1<< 8) +#define CIRQ_ENABLE (1<< 8) +#define CTPL (1<< 11) +#define CLKEXTFREE (1<< 16)/* * FIXME: Most likely all the data using these _DEVID defines should come @@ -171,6 +175,7 @@ struct omap_hsmmc_host {int vdd;int protect_card;int reqs_blocked; +int sdio_int;struct omap_mmc_platform_data *pdata; };@@ -436,6 +441,13 @@ omap_hsmmc_start_command(struct omap_hsmmc_host *host, struct mmc_command *cmd,else OMAP_HSMMC_WRITE (host->base,IE ,INT_EN_MASK ); +if (host->sdio_int) { +OMAP_HSMMC_WRITE (host->base,ISE , + (OMAP_HSMMC_READ (host->base,ISE ) |CIRQ_ENABLE )); +OMAP_HSMMC_WRITE (host->base,IE , + (OMAP_HSMMC_READ (host->base,IE ) |CIRQ_ENABLE )); + } + host->response_busy =0 ;if (cmd->flags&MMC_RSP_PRESENT ) {if (cmd->flags&MMC_RSP_136 )@@ -640,6 +652,17 @@ static irqreturn_t omap_hsmmc_irq(int irq, void *dev_id)spin_lock (&host->irq_lock); + data = host->data; + status =OMAP_HSMMC_READ (host->base,STAT ); +dev_dbg (mmc_dev (host->mmc),"IRQ Status is %x\n" , status); + +if (host->mmc->caps&MMC_CAP_SDIO_IRQ ) { +if (status&CIRQ ) { +dev_dbg (mmc_dev (host->mmc),"SDIO Card Interrupt\n" ); +mmc_signal_sdio_irq (host->mmc); + } + } +if (host->mrq ==NULL ) {OMAP_HSMMC_WRITE (host->base,STAT ,OMAP_HSMMC_READ (host->base,STAT ));@@ -649,10 +672,6 @@ static irqreturn_t omap_hsmmc_irq(int irq, void *dev_id)return IRQ_HANDLED ; } - data = host->data; - status =OMAP_HSMMC_READ (host->base,STAT ); -dev_dbg (mmc_dev (host->mmc),"IRQ Status is %x\n" , status); -if (status&ERR ) {#ifdef CONFIG_MMC_DEBUG omap_hsmmc_report_irq (host, status);@@ -1254,6 +1273,25 @@ static int omap_hsmmc_get_ro(struct mmc_host *mmc)return mmc_slot (host).get_ro (host->dev,0 ); } +static void omap_hsmmc_enable_sdio_irq (struct mmc_host *mmc,int enable) +{ +struct omap_hsmmc_host *host =mmc_priv (mmc); + + host->sdio_int = enable; +if (enable) { +OMAP_HSMMC_WRITE (host->base,ISE , + (OMAP_HSMMC_READ (host->base,ISE ) |CIRQ_ENABLE )); +OMAP_HSMMC_WRITE (host->base,IE , + (OMAP_HSMMC_READ (host->base,IE ) |CIRQ_ENABLE )); + }else { +OMAP_HSMMC_WRITE (host->base,IE , + (OMAP_HSMMC_READ (host->base,IE )& (~CIRQ_ENABLE ))); +OMAP_HSMMC_WRITE (host->base,ISE , + (OMAP_HSMMC_READ (host->base,ISE )& (~CIRQ_ENABLE ))); + } + +} +static void omap_hsmmc_conf_bus_power (struct omap_hsmmc_host *host) {u32 hctl, capa, value;@@ -1519,7 +1557,7 @@ static const struct mmc_host_ops omap_hsmmc_ops = { .set_ios = omap_hsmmc_set_ios, .get_cd = omap_hsmmc_get_cd, .get_ro = omap_hsmmc_get_ro, -/* NYET -- enable_sdio_irq */ + .enable_sdio_irq = omap_hsmmc_enable_sdio_irq, };static const struct mmc_host_ops omap_hsmmc_ps_ops = {@@ -1529,7 +1567,7 @@ static const struct mmc_host_ops omap_hsmmc_ps_ops = { .set_ios = omap_hsmmc_set_ios, .get_cd = omap_hsmmc_get_cd, .get_ro = omap_hsmmc_get_ro, -/* NYET -- enable_sdio_irq */ + .enable_sdio_irq = omap_hsmmc_enable_sdio_irq, };#ifdef CONFIG_DEBUG_FS @@ -1657,6 +1695,7 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev) host->mapbase = res->start; host->base =ioremap (host->mapbase,SZ_4K ); host->power_mode =-1 ; + host->sdio_int =0 ;platform_set_drvdata (pdev, host);INIT_WORK (&host->mmc_carddetect_work, omap_hsmmc_detect);@@ -1744,6 +1783,10 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)if (mmc_slot (host).nonremovable) mmc->caps |=MMC_CAP_NONREMOVABLE ; + mmc->caps |=MMC_CAP_SDIO_IRQ ; +OMAP_HSMMC_WRITE (host->base,CON , +OMAP_HSMMC_READ (host->base,CON ) | (CTPL |CLKEXTFREE )); +omap_hsmmc_conf_bus_power (host);/* Select DMA lines */
Hi Dirk,
Quoted 25 lines · Dirk Behme
Quoted 13 lines · Mike Rapoport
Hi,
Quoted 9 lines · Phaneendra Kumar Alapati
This patch adds SDIO IRQ support for OMAP35xx. Tested on OMAP3530EVM with Marvell 88W8686 card and below are the observed throughput results (ttcp utility): 13Mbps (Downlink), 10.5 Mbps(Uplink)
Signed-off-by Phaneendra Kumar<[email protected]>--- drivers/mmc/host/omap_hsmmc.c | 55 ++++++++++++++++++++++++++++++++++++---- 1 files changed, 49 insertions(+), 6 deletions(-)Quoted 10 lines
I've tried the patch on CM-T35 that has Marvell 88W8686 on-board and surprisingly I get a lot of command timeouts from the libertas driver :(
---
libertas: requeueing command0x0006due to timeout (#1)
libertas: Received result 0 to command 6 after 1 retries
libertas: command0x0006timed out
---
I hope I'll find time to debug it in the next few days and provide more valuable
information...
Quoted 6 lines
There is a test report from Overo air that there it doesn't work, too:
http://old.nabble.com/Re%3A-Overo-wifi-speed-and-WPA2-connection-issue-p27231874.html
Any news on this patch?
Unfortunately I haven't got time to see why libertas is unhappy with this patch.. :(
Quoted 146 lines
Best regards
Dirk
Quoted 141 lines
Quoted 140 lines
drivers/mmc/host/omap_hsmmc.c +4
-0@@ -100,6 +100,10 @@#define SRD (1<< 26)#define SOFTRESET (1<< 1)#define RESETDONE (1<< 0) +#define CIRQ (1<< 8) +#define CIRQ_ENABLE (1<< 8) +#define CTPL (1<< 11) +#define CLKEXTFREE (1<< 16)/* * FIXME: Most likely all the data using these _DEVID defines should come
drivers/mmc/host/omap_hsmmc.c +8
-0@@ -171,6 +175,7 @@ struct omap_hsmmc_host {int vdd;int protect_card;int reqs_blocked; +int sdio_int;struct omap_mmc_platform_data *pdata; };@@ -436,6 +441,13 @@ omap_hsmmc_start_command(struct omap_hsmmc_host *host, struct mmc_command *cmd, elseOMAP_HSMMC_WRITE (host->base,IE ,INT_EN_MASK ); +if (host->sdio_int) { +OMAP_HSMMC_WRITE (host->base,ISE , + (OMAP_HSMMC_READ (host->base,ISE ) |CIRQ_ENABLE )); +OMAP_HSMMC_WRITE (host->base,IE , + (OMAP_HSMMC_READ (host->base,IE ) |CIRQ_ENABLE )); + } + host->response_busy =0 ;if (cmd->flags&MMC_RSP_PRESENT ) {if (cmd->flags& MMC_RSP_136)drivers/mmc/host/omap_hsmmc.c +11
-0@@ -640,6 +652,17 @@ static irqreturn_t omap_hsmmc_irq(int irq, void *dev_id)spin_lock (&host->irq_lock); + data = host->data; + status =OMAP_HSMMC_READ (host->base,STAT ); +dev_dbg (mmc_dev (host->mmc),"IRQ Status is %x\n" , status); + +if (host->mmc->caps&MMC_CAP_SDIO_IRQ ) { +if (status&CIRQ ) { +dev_dbg (mmc_dev (host->mmc),"SDIO Card Interrupt\n" ); +mmc_signal_sdio_irq (host->mmc); + } + } +if (host->mrq ==NULL ) { OMAP_HSMMC_WRITE(host->base, STAT,OMAP_HSMMC_READ(host->base, STAT));drivers/mmc/host/omap_hsmmc.c +0
-4@@ -649,10 +672,6 @@ static irqreturn_t omap_hsmmc_irq(int irq, void *dev_id)return IRQ_HANDLED ; } - data = host->data; - status =OMAP_HSMMC_READ (host->base,STAT ); -dev_dbg (mmc_dev (host->mmc),"IRQ Status is %x\n" , status); -if (status&ERR ) {#ifdef CONFIG_MMC_DEBUG omap_hsmmc_report_irq(host, status);drivers/mmc/host/omap_hsmmc.c +19
-0@@ -1254,6 +1273,25 @@ static int omap_hsmmc_get_ro(struct mmc_host *mmc)return mmc_slot (host).get_ro (host->dev,0 ); } +static void omap_hsmmc_enable_sdio_irq (struct mmc_host *mmc,int enable) +{ +struct omap_hsmmc_host *host =mmc_priv (mmc); + + host->sdio_int = enable; +if (enable) { +OMAP_HSMMC_WRITE (host->base,ISE , + (OMAP_HSMMC_READ (host->base,ISE ) |CIRQ_ENABLE )); +OMAP_HSMMC_WRITE (host->base,IE , + (OMAP_HSMMC_READ (host->base,IE ) |CIRQ_ENABLE )); + }else { +OMAP_HSMMC_WRITE (host->base,IE , + (OMAP_HSMMC_READ (host->base,IE )& (~CIRQ_ENABLE ))); +OMAP_HSMMC_WRITE (host->base,ISE , + (OMAP_HSMMC_READ (host->base,ISE )& (~CIRQ_ENABLE ))); + } + +} +static void omap_hsmmc_conf_bus_power (struct omap_hsmmc_host *host){ u32 hctl, capa, value;drivers/mmc/host/omap_hsmmc.c +1
-1@@ -1519,7 +1557,7 @@ static const struct mmc_host_ops omap_hsmmc_ops = { .set_ios = omap_hsmmc_set_ios, .get_cd = omap_hsmmc_get_cd, .get_ro = omap_hsmmc_get_ro, -/* NYET -- enable_sdio_irq */ + .enable_sdio_irq = omap_hsmmc_enable_sdio_irq, };static const struct mmc_host_ops omap_hsmmc_ps_ops = {drivers/mmc/host/omap_hsmmc.c +1
-1@@ -1529,7 +1567,7 @@ static const struct mmc_host_ops omap_hsmmc_ps_ops = { .set_ios = omap_hsmmc_set_ios, .get_cd = omap_hsmmc_get_cd, .get_ro = omap_hsmmc_get_ro, - /* NYET -- enable_sdio_irq */ + .enable_sdio_irq = omap_hsmmc_enable_sdio_irq, };#ifdef CONFIG_DEBUG_FSdrivers/mmc/host/omap_hsmmc.c +1
-0@@ -1657,6 +1695,7 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev) host->mapbase = res->start; host->base =ioremap (host->mapbase,SZ_4K ); host->power_mode =-1 ; + host->sdio_int =0 ;platform_set_drvdata (pdev, host);INIT_WORK(&host->mmc_carddetect_work, omap_hsmmc_detect);drivers/mmc/host/omap_hsmmc.c +4
-0@@ -1744,6 +1783,10 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)if (mmc_slot (host).nonremovable) mmc->caps |=MMC_CAP_NONREMOVABLE ; + mmc->caps |=MMC_CAP_SDIO_IRQ ; +OMAP_HSMMC_WRITE (host->base,CON , +OMAP_HSMMC_READ (host->base,CON ) | (CTPL |CLKEXTFREE )); +omap_hsmmc_conf_bus_power (host);/* Select DMA lines */
Signature · 2 lines
Sincerely yours, Mike.