Merge tag 'mmc-updates-for-3.12-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc
Pull MMC updates from Chris Ball: "MMC highlights for 3.12: Core: - Support Allocation Units 8MB-64MB in SD3.0, previous max was 4MB. - The slot-gpio helper can now handle GPIO debouncing card-detect. - Read supported voltages from DT "voltage-ranges" property. Drivers: - dw_mmc: Add support for ARC architecture, and support exynos5420. - mmc_spi: Support CD/RO GPIOs. - sh_mobile_sdhi: Add compatibility for more Renesas SoCs. - sh_mmcif: Add DT support for DMA channels" * tag 'mmc-updates-for-3.12-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc: (50 commits) Revert "mmc: tmio-mmc: Remove .set_pwr() callback from platform data" mmc: dw_mmc: Add support for ARC mmc: sdhci-s3c: initialize host->quirks2 for using quirks2 mmc: sdhci-s3c: fix the wrong register value, when clock is disabled mmc: esdhc: add support to get voltage from device-tree mmc: sdhci: get voltage from sdhc host mmc: core: parse voltage from device-tree mmc: omap_hsmmc: use the generic config for omap2plus devices mmc: omap_hsmmc: clear status flags before starting a new command mmc: dw_mmc: exynos: Add a new compatible string for exynos5420 mmc: sh_mmcif: revision-specific CLK_CTRL2 handling mmc: sh_mmcif: revision-specific Command Completion Signal handling mmc: sh_mmcif: add support for Device Tree DMA bindings mmc: sh_mmcif: move header include from header into .c mmc: SDHI: add DT compatibility strings for further SoCs mmc: dw_mmc-pci: enable bus-mastering mode mmc: dw_mmc-pci: get resources from a proper BAR mmc: tmio-mmc: Remove .set_pwr() callback from platform data mmc: tmio-mmc: Remove .get_cd() callback from platform data mmc: sh_mobile_sdhi: Remove .set_pwr() callback from platform data ...
This commit is contained in:
@@ -224,62 +224,15 @@ 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;
|
||||
|
||||
err = request_irq(gpio_to_irq(VISION_SPI_MMC_CD), func,
|
||||
IRQ_TYPE_EDGE_BOTH, "mmc_spi:cd", pdata);
|
||||
if (err)
|
||||
goto exit_err;
|
||||
|
||||
return 0;
|
||||
|
||||
exit_err:
|
||||
gpio_free_array(vision_spi_mmc_gpios, ARRAY_SIZE(vision_spi_mmc_gpios));
|
||||
return err;
|
||||
|
||||
}
|
||||
|
||||
static void vision_spi_mmc_exit(struct device *pdev, void *pdata)
|
||||
{
|
||||
free_irq(gpio_to_irq(VISION_SPI_MMC_CD), pdata);
|
||||
gpio_free_array(vision_spi_mmc_gpios, ARRAY_SIZE(vision_spi_mmc_gpios));
|
||||
}
|
||||
|
||||
static int vision_spi_mmc_get_ro(struct device *pdev)
|
||||
{
|
||||
return !!gpio_get_value(VISION_SPI_MMC_WP);
|
||||
}
|
||||
|
||||
static int vision_spi_mmc_get_cd(struct device *pdev)
|
||||
{
|
||||
return !gpio_get_value(VISION_SPI_MMC_CD);
|
||||
}
|
||||
|
||||
static struct mmc_spi_platform_data vision_spi_mmc_data = {
|
||||
.init = vision_spi_mmc_init,
|
||||
.exit = vision_spi_mmc_exit,
|
||||
.get_ro = vision_spi_mmc_get_ro,
|
||||
.get_cd = vision_spi_mmc_get_cd,
|
||||
.detect_delay = 100,
|
||||
.powerup_msecs = 100,
|
||||
.ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
|
||||
.flags = MMC_SPI_USE_CD_GPIO | MMC_SPI_USE_RO_GPIO,
|
||||
.cd_gpio = VISION_SPI_MMC_CD,
|
||||
.cd_debounce = 1,
|
||||
.ro_gpio = VISION_SPI_MMC_WP,
|
||||
.caps2 = MMC_CAP2_RO_ACTIVE_HIGH,
|
||||
};
|
||||
|
||||
static int vision_spi_mmc_hw_setup(struct spi_device *spi)
|
||||
|
Reference in New Issue
Block a user