
* Mike Frysinger wrote:
On Tuesday 20 December 2011 03:52:39 Thierry Reding wrote:
This series of patches implements central card-detection within the MMC framework. Before this patch series, many boards actually did implement the board_mmc_getcd() function, but it wasn't used except by one driver (fsl_esdhc). Unfortunately, implementations interpreted the meaning of the cd parameter differently, some taking it to signal card absence and others using it to detect card presence. Furthermore, the signature of the board_mmc_getcd() function was not at all consistent with other MMC related functions.
as you've seen, GPIO pin detection is not novel or unique to any driver/SoC. i'd suggest instead finding a way to move this into "struct mmc". perhaps something like:
include/mmc.h: struct mmc { ... #ifdef CONFIG_MMC_GPIO_CD unsigned gpio_cd; #endif ... };
and then the default mmc_register() func can do: #ifdef CONFIG_MMC_GPIO_CD if (!mmc->getcd) mmc->getcd = mmc_getcd_gpio; #endif
and we can have the drivers/mmc/mmc.c: #ifdef CONFIG_MMC_GPIO_CD int mmc_getcd_gpio(struct mmc *mmc) { return !gpio_get_value(mmc->getcd); } #endif
then mmc drivers can extend their register function to take a GPIO number (if they don't already). and then they get everything else for free.
Yes, there is some potential for refactoring drivers, though only a very limited number of boards actually implement card-detection. I guess something like what you are proposing could be added on top of the series. That would hard-code the fact that card-detect GPIOs are always low-active, though. Can we live with that? If a board handles that differently they can always override the behaviour by specifying their own board_mmc_getcd().
Thierry