2010/8/11 <[email protected]>:
> From: Grazvydas Ignotas <[email protected]>
>
> There are some chips (like TI WL12xx series) that can be interfaced over
> SDIO but don't support the SDIO specification, meaning that they are
> missing CIA (Common I/O Area) with all it's registers. Current Linux SDIO
> implementation relies on those registers to identify and configure the
> card, so non-standard cards can not function and cause lots of warnings
> from the core when it reads invalid data from non-existent registers.
>
> After this patch, init_card() host callback can now set new quirk
> MMC_QUIRK_NONSTD_SDIO, which means that SDIO core should not try to access
> any standard SDIO registers and rely on init_card() to fill all SDIO
> structures instead. As those cards are usually embedded chips, all the
> required information can be obtained from machine board files by the host
> driver when it's called through init_card() callback.
>
[...]
> diff -puN drivers/mmc/core/sdio.c~sdio-allow-non-standard-sdio-cards
> drivers/mmc/core/sdio.c
> --- a/drivers/mmc/core/sdio.c~sdio-allow-non-standard-sdio-cards
> +++ a/drivers/mmc/core/sdio.c
[...]
> @@ -412,6 +418,23 @@ static int mmc_sdio_init_card(struct mmc
> goto remove;
> }
>
> + if (card->quirks & MMC_QUIRK_NONSTD_SDIO) {
> + /*
> + * This is non-standard SDIO device, meaning it doesn't
> + * have any CIA (Common I/O area) registers present.
> + * It's host's responsibility to fill cccr and cis
> + * structures in init_card().
> + */
> + mmc_set_clock(host, card->cis.max_dtr);
> +
> + if (card->cccr.high_speed) {
> + mmc_card_set_highspeed(card);
> + mmc_set_timing(card->host, MMC_TIMING_SD_HS);
> + }
Since this goes after patch 032/177 "mmc: split mmc_sd_init_card()",
you can use:
if (card->cccr.high_speed)
mmc_sd_go_highspeed(card);
> +
> + goto finish;
> + }
> +
> /*
> * Read the common registers.
> */
[...]
Best Regards,
Michał Mirosław
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html