|
@@ -247,49 +247,10 @@ static struct pxa2xx_udc_mach_info udc_info __initdata = {
|
|
|
/*
|
|
|
* MMC/SD Device
|
|
|
*/
|
|
|
-static struct pxamci_platform_data tosa_mci_platform_data;
|
|
|
-
|
|
|
static int tosa_mci_init(struct device *dev, irq_handler_t tosa_detect_int, void *data)
|
|
|
{
|
|
|
int err;
|
|
|
|
|
|
- tosa_mci_platform_data.detect_delay = msecs_to_jiffies(250);
|
|
|
-
|
|
|
- err = gpio_request(TOSA_GPIO_nSD_DETECT, "MMC/SD card detect");
|
|
|
- if (err) {
|
|
|
- printk(KERN_ERR "tosa_mci_init: can't request nSD_DETECT gpio\n");
|
|
|
- goto err_gpio_detect;
|
|
|
- }
|
|
|
- err = gpio_direction_input(TOSA_GPIO_nSD_DETECT);
|
|
|
- if (err)
|
|
|
- goto err_gpio_detect_dir;
|
|
|
-
|
|
|
- err = request_irq(TOSA_IRQ_GPIO_nSD_DETECT, tosa_detect_int,
|
|
|
- IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
|
|
|
- "MMC/SD card detect", data);
|
|
|
- if (err) {
|
|
|
- printk(KERN_ERR "tosa_mci_init: MMC/SD: can't request MMC card detect IRQ\n");
|
|
|
- goto err_irq;
|
|
|
- }
|
|
|
-
|
|
|
- err = gpio_request(TOSA_GPIO_SD_WP, "SD Write Protect");
|
|
|
- if (err) {
|
|
|
- printk(KERN_ERR "tosa_mci_init: can't request SD_WP gpio\n");
|
|
|
- goto err_gpio_wp;
|
|
|
- }
|
|
|
- err = gpio_direction_input(TOSA_GPIO_SD_WP);
|
|
|
- if (err)
|
|
|
- goto err_gpio_wp_dir;
|
|
|
-
|
|
|
- err = gpio_request(TOSA_GPIO_PWR_ON, "SD Power");
|
|
|
- if (err) {
|
|
|
- printk(KERN_ERR "tosa_mci_init: can't request SD_PWR gpio\n");
|
|
|
- goto err_gpio_pwr;
|
|
|
- }
|
|
|
- err = gpio_direction_output(TOSA_GPIO_PWR_ON, 0);
|
|
|
- if (err)
|
|
|
- goto err_gpio_pwr_dir;
|
|
|
-
|
|
|
err = gpio_request(TOSA_GPIO_nSD_INT, "SD Int");
|
|
|
if (err) {
|
|
|
printk(KERN_ERR "tosa_mci_init: can't request SD_PWR gpio\n");
|
|
@@ -304,51 +265,21 @@ static int tosa_mci_init(struct device *dev, irq_handler_t tosa_detect_int, void
|
|
|
err_gpio_int_dir:
|
|
|
gpio_free(TOSA_GPIO_nSD_INT);
|
|
|
err_gpio_int:
|
|
|
-err_gpio_pwr_dir:
|
|
|
- gpio_free(TOSA_GPIO_PWR_ON);
|
|
|
-err_gpio_pwr:
|
|
|
-err_gpio_wp_dir:
|
|
|
- gpio_free(TOSA_GPIO_SD_WP);
|
|
|
-err_gpio_wp:
|
|
|
- free_irq(TOSA_IRQ_GPIO_nSD_DETECT, data);
|
|
|
-err_irq:
|
|
|
-err_gpio_detect_dir:
|
|
|
- gpio_free(TOSA_GPIO_nSD_DETECT);
|
|
|
-err_gpio_detect:
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
-static void tosa_mci_setpower(struct device *dev, unsigned int vdd)
|
|
|
-{
|
|
|
- struct pxamci_platform_data* p_d = dev->platform_data;
|
|
|
-
|
|
|
- if (( 1 << vdd) & p_d->ocr_mask) {
|
|
|
- gpio_set_value(TOSA_GPIO_PWR_ON, 1);
|
|
|
- } else {
|
|
|
- gpio_set_value(TOSA_GPIO_PWR_ON, 0);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static int tosa_mci_get_ro(struct device *dev)
|
|
|
-{
|
|
|
- return gpio_get_value(TOSA_GPIO_SD_WP);
|
|
|
-}
|
|
|
-
|
|
|
static void tosa_mci_exit(struct device *dev, void *data)
|
|
|
{
|
|
|
gpio_free(TOSA_GPIO_nSD_INT);
|
|
|
- gpio_free(TOSA_GPIO_PWR_ON);
|
|
|
- gpio_free(TOSA_GPIO_SD_WP);
|
|
|
- free_irq(TOSA_IRQ_GPIO_nSD_DETECT, data);
|
|
|
- gpio_free(TOSA_GPIO_nSD_DETECT);
|
|
|
}
|
|
|
|
|
|
static struct pxamci_platform_data tosa_mci_platform_data = {
|
|
|
- .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
|
|
|
- .init = tosa_mci_init,
|
|
|
- .get_ro = tosa_mci_get_ro,
|
|
|
- .setpower = tosa_mci_setpower,
|
|
|
- .exit = tosa_mci_exit,
|
|
|
+ .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
|
|
|
+ .init = tosa_mci_init,
|
|
|
+ .exit = tosa_mci_exit,
|
|
|
+ .gpio_card_detect = TOSA_GPIO_nSD_DETECT,
|
|
|
+ .gpio_card_ro = TOSA_GPIO_SD_WP,
|
|
|
+ .gpio_power = TOSA_GPIO_PWR_ON,
|
|
|
};
|
|
|
|
|
|
/*
|
|
@@ -910,6 +841,7 @@ static void __init tosa_init(void)
|
|
|
dummy = gpiochip_reserve(TOSA_SCOOP_JC_GPIO_BASE, 12);
|
|
|
dummy = gpiochip_reserve(TOSA_TC6393XB_GPIO_BASE, 16);
|
|
|
|
|
|
+ tosa_mci_platform_data.detect_delay = msecs_to_jiffies(250);
|
|
|
pxa_set_mci_info(&tosa_mci_platform_data);
|
|
|
pxa_set_udc_info(&udc_info);
|
|
|
pxa_set_ficp_info(&tosa_ficp_platform_data);
|