sdio: add CD disable support
PATCH v2 1/1 sdio: add CD disable support
From: Ohad Ben-Cohen <[email protected]>
Add support to disconnect the pull-up resistor on CD/DAT[3] (pin 1) of the card. This may be desired on certain setups of boards, controllers and embedded sdio devices which do not need the card's pull-up. As a result, card detection is disabled and power is saved.
Signed-off-by Ohad Ben-Cohen <[email protected]>
Acked-by Matt Fleming <[email protected]>
--- drivers/mmc/core/sdio.c | 34 ++++++++++++++++++++++++++++++++++ include/linux/mmc/card.h | 3 ++- 2 files changed, 36 insertions(+), 1 deletions(-)
drivers/mmc/core/sdio.c +34 -0
@@ -165,6 +165,33 @@ static int sdio_enable_wide(struct mmc_card *card) }/* +* If desired, disconnect the pull-up resistor on CD/DAT[3] (pin 1) +* of the card. This may be required on certain setups of boards, +* controllers and embedded sdio device which do not need the card's +* pull-up. As a result, card detection is disabled and power is saved. +*/ +static int sdio_disable_cd (struct mmc_card *card) +{ +int ret; +u8 ctrl; + +if (!card->cccr.disable_cd) +return 0 ; + + ret =mmc_io_rw_direct (card,0 ,0 ,SDIO_CCCR_IF ,0 , &ctrl); +if (ret) +return ret; + + ctrl |=SDIO_BUS_CD_DISABLE ; + + ret =mmc_io_rw_direct (card,1 ,0 ,SDIO_CCCR_IF , ctrl,NULL ); +if (ret) +return ret; + +return 0 ; +} + +/* * Test if the card supports high-speed mode and, if so, switch to it. */ static int sdio_enable_hs (struct mmc_card *card)
@@ -392,6 +419,13 @@ int mmc_attach_sdio(struct mmc_host *host, u32 ocr) goto remove;/* +* If needed, disconnect card detection pull-up resistor. +*/ + err =sdio_disable_cd (card); +if (err) + goto remove; + +/* * Initialize (but don't add) all present functions. */ for (i =0 ;i < funcs;i++) {
include/linux/mmc/card.h +2 -1
@@ -62,7 +62,8 @@ struct sdio_cccr { low_speed:1, wide_bus:1, high_power:1, - high_speed:1; + high_speed:1, + disable_cd:1; };struct sdio_cis {
Signature · 1 line
1.5.4.3