[PATCH 02/12] ARM: ep93xx: vision_ep9307: Use MMC CD and RO GPIO
H Hartley Sweeten
hartleys at visionengravers.com
Thu Jul 25 20:19:52 EDT 2013
On Thursday, July 25, 2013 4:27 PM, Laurent Pinchart wrote:
>
> Pass the CD and RO GPIO numbers to the MMC SPI driver and remove the
> custom .get_cd() and .get_ro() callback functions.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas at ideasonboard.com>
> ---
> arch/arm/mach-ep93xx/vision_ep9307.c | 56 +++---------------------------------
> 1 file changed, 4 insertions(+), 52 deletions(-)
>
> diff --git a/arch/arm/mach-ep93xx/vision_ep9307.c b/arch/arm/mach-ep93xx/vision_ep9307.c
> index 605956f..ab94dc5 100644
> --- a/arch/arm/mach-ep93xx/vision_ep9307.c
> +++ b/arch/arm/mach-ep93xx/vision_ep9307.c
> @@ -224,62 +224,14 @@ static struct ep93xx_spi_chip_ops vision_spi_flash_hw = {
> #define VISION_SPI_MMC_WP EP93XX_GPIO_LINE_F(0)
> #define VISION_SPI_MMC_CD EP93XX_GPIO_LINE_EGPIO15
>
> -static struct gpio vision_spi_mmc_gpios[] = {
> - { VISION_SPI_MMC_WP, GPIOF_DIR_IN, "mmc_spi:wp" },
> - { VISION_SPI_MMC_CD, GPIOF_DIR_IN, "mmc_spi:cd" },
> -};
> -
> -static int vision_spi_mmc_init(struct device *pdev,
> - irqreturn_t (*func)(int, void *), void *pdata)
> -{
> - int err;
> -
> - err = gpio_request_array(vision_spi_mmc_gpios,
> - ARRAY_SIZE(vision_spi_mmc_gpios));
> - if (err)
> - return err;
> -
> - err = gpio_set_debounce(VISION_SPI_MMC_CD, 1);
> - if (err)
> - goto exit_err;
I tested this and it _kind_ of works.
The card detect is a bit flaky due to the gpio interrupt debounce not being enabled.
The only way I can see to fix this is add the following to this patch:
@@ -233,8 +233,31 @@ static struct mmc_spi_platform_data vision_spi_mmc_data = {
.caps2 = MMC_CAP2_RO_ACTIVE_HIGH,
};
+static int vision_spi_mmc_enable_cd_debounce(struct spi_device *spi)
+{
+ int ret;
+
+ ret = gpio_request_one(VISION_SPI_MMC_CD, GPIOF_DIR_IN, spi->modalias);
+ if (ret)
+ return ret;
+
+ ret = gpio_set_debounce(VISION_SPI_MMC_CD, 1);
+ if (ret)
+ return ret;
+
+ gpio_free(VISION_SPI_MMC_CD);
+
+ return 0;
+}
+
static int vision_spi_mmc_hw_setup(struct spi_device *spi)
{
+ int ret;
+
+ ret = vision_spi_mmc_enable_cd_debounce(spi);
+ if (ret)
+ return ret;
+
return gpio_request_one(VISION_SPI_MMC_CS, GPIOF_INIT_HIGH,
spi->modalias);
}
Regards,
Hartley
More information about the linux-arm-kernel
mailing list