[ARM] pxa/treo680: pxamci simplify to use GPIO
Signed-off-by: Tomáš Čech <sleep_walker@suse.cz> Acked-by: Marek Vasut <marek.vasut@gmail.com> Signed-off-by: Eric Miao <eric.y.miao@gmail.com>
This commit is contained in:
Родитель
93dd29a818
Коммит
7dafdf3d22
|
@ -153,87 +153,11 @@ static unsigned long treo680_pin_config[] __initdata = {
|
|||
/******************************************************************************
|
||||
* SD/MMC card controller
|
||||
******************************************************************************/
|
||||
static int treo680_mci_init(struct device *dev,
|
||||
irq_handler_t treo680_detect_int, void *data)
|
||||
{
|
||||
int err = 0;
|
||||
|
||||
/* Setup an interrupt for detecting card insert/remove events */
|
||||
err = gpio_request(GPIO_NR_TREO680_SD_DETECT_N, "SD IRQ");
|
||||
|
||||
if (err)
|
||||
goto err;
|
||||
|
||||
err = gpio_direction_input(GPIO_NR_TREO680_SD_DETECT_N);
|
||||
if (err)
|
||||
goto err2;
|
||||
|
||||
err = request_irq(gpio_to_irq(GPIO_NR_TREO680_SD_DETECT_N),
|
||||
treo680_detect_int, IRQF_DISABLED | IRQF_SAMPLE_RANDOM |
|
||||
IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
|
||||
"SD/MMC card detect", data);
|
||||
|
||||
if (err) {
|
||||
dev_err(dev, "%s: cannot request SD/MMC card detect IRQ\n",
|
||||
__func__);
|
||||
goto err2;
|
||||
}
|
||||
|
||||
err = gpio_request(GPIO_NR_TREO680_SD_POWER, "SD_POWER");
|
||||
if (err)
|
||||
goto err3;
|
||||
|
||||
err = gpio_direction_output(GPIO_NR_TREO680_SD_POWER, 1);
|
||||
if (err)
|
||||
goto err4;
|
||||
|
||||
err = gpio_request(GPIO_NR_TREO680_SD_READONLY, "SD_READONLY");
|
||||
if (err)
|
||||
goto err4;
|
||||
|
||||
err = gpio_direction_input(GPIO_NR_TREO680_SD_READONLY);
|
||||
if (err)
|
||||
goto err5;
|
||||
|
||||
return 0;
|
||||
|
||||
err5:
|
||||
gpio_free(GPIO_NR_TREO680_SD_READONLY);
|
||||
err4:
|
||||
gpio_free(GPIO_NR_TREO680_SD_POWER);
|
||||
err3:
|
||||
free_irq(gpio_to_irq(GPIO_NR_TREO680_SD_DETECT_N), data);
|
||||
err2:
|
||||
gpio_free(GPIO_NR_TREO680_SD_DETECT_N);
|
||||
err:
|
||||
return err;
|
||||
}
|
||||
|
||||
static void treo680_mci_exit(struct device *dev, void *data)
|
||||
{
|
||||
gpio_free(GPIO_NR_TREO680_SD_READONLY);
|
||||
gpio_free(GPIO_NR_TREO680_SD_POWER);
|
||||
free_irq(gpio_to_irq(GPIO_NR_TREO680_SD_DETECT_N), data);
|
||||
gpio_free(GPIO_NR_TREO680_SD_DETECT_N);
|
||||
}
|
||||
|
||||
static void treo680_mci_power(struct device *dev, unsigned int vdd)
|
||||
{
|
||||
struct pxamci_platform_data *p_d = dev->platform_data;
|
||||
gpio_set_value(GPIO_NR_TREO680_SD_POWER, p_d->ocr_mask & (1 << vdd));
|
||||
}
|
||||
|
||||
static int treo680_mci_get_ro(struct device *dev)
|
||||
{
|
||||
return gpio_get_value(GPIO_NR_TREO680_SD_READONLY);
|
||||
}
|
||||
|
||||
static struct pxamci_platform_data treo680_mci_platform_data = {
|
||||
.ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
|
||||
.setpower = treo680_mci_power,
|
||||
.get_ro = treo680_mci_get_ro,
|
||||
.init = treo680_mci_init,
|
||||
.exit = treo680_mci_exit,
|
||||
.ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
|
||||
.gpio_card_detect = GPIO_NR_TREO680_SD_DETECT_N,
|
||||
.gpio_card_ro = GPIO_NR_TREO680_SD_READONLY,
|
||||
.gpio_power = GPIO_NR_TREO680_SD_POWER,
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
|
|
Загрузка…
Ссылка в новой задаче