diff options
Diffstat (limited to 'arch/arm/mach-pxa/magician.c')
-rw-r--r-- | arch/arm/mach-pxa/magician.c | 59 |
1 files changed, 11 insertions, 48 deletions
diff --git a/arch/arm/mach-pxa/magician.c b/arch/arm/mach-pxa/magician.c index ca39669cffc5..5360c07f5138 100644 --- a/arch/arm/mach-pxa/magician.c +++ b/arch/arm/mach-pxa/magician.c | |||
@@ -140,15 +140,9 @@ static unsigned long magician_pin_config[] __initdata = { | |||
140 | * IRDA | 140 | * IRDA |
141 | */ | 141 | */ |
142 | 142 | ||
143 | static void magician_irda_transceiver_mode(struct device *dev, int mode) | ||
144 | { | ||
145 | gpio_set_value(GPIO83_MAGICIAN_nIR_EN, mode & IR_OFF); | ||
146 | pxa2xx_transceiver_mode(dev, mode); | ||
147 | } | ||
148 | |||
149 | static struct pxaficp_platform_data magician_ficp_info = { | 143 | static struct pxaficp_platform_data magician_ficp_info = { |
150 | .transceiver_cap = IR_SIRMODE | IR_OFF, | 144 | .gpio_pwdown = GPIO83_MAGICIAN_nIR_EN, |
151 | .transceiver_mode = magician_irda_transceiver_mode, | 145 | .transceiver_cap = IR_SIRMODE | IR_OFF, |
152 | }; | 146 | }; |
153 | 147 | ||
154 | /* | 148 | /* |
@@ -651,55 +645,24 @@ static struct platform_device bq24022 = { | |||
651 | static int magician_mci_init(struct device *dev, | 645 | static int magician_mci_init(struct device *dev, |
652 | irq_handler_t detect_irq, void *data) | 646 | irq_handler_t detect_irq, void *data) |
653 | { | 647 | { |
654 | int err; | 648 | return request_irq(IRQ_MAGICIAN_SD, detect_irq, |
655 | |||
656 | err = request_irq(IRQ_MAGICIAN_SD, detect_irq, | ||
657 | IRQF_DISABLED | IRQF_SAMPLE_RANDOM, | 649 | IRQF_DISABLED | IRQF_SAMPLE_RANDOM, |
658 | "MMC card detect", data); | 650 | "mmc card detect", data); |
659 | if (err) | ||
660 | goto err_request_irq; | ||
661 | err = gpio_request(EGPIO_MAGICIAN_SD_POWER, "SD_POWER"); | ||
662 | if (err) | ||
663 | goto err_request_power; | ||
664 | err = gpio_request(EGPIO_MAGICIAN_nSD_READONLY, "nSD_READONLY"); | ||
665 | if (err) | ||
666 | goto err_request_readonly; | ||
667 | |||
668 | return 0; | ||
669 | |||
670 | err_request_readonly: | ||
671 | gpio_free(EGPIO_MAGICIAN_SD_POWER); | ||
672 | err_request_power: | ||
673 | free_irq(IRQ_MAGICIAN_SD, data); | ||
674 | err_request_irq: | ||
675 | return err; | ||
676 | } | ||
677 | |||
678 | static void magician_mci_setpower(struct device *dev, unsigned int vdd) | ||
679 | { | ||
680 | struct pxamci_platform_data *pdata = dev->platform_data; | ||
681 | |||
682 | gpio_set_value(EGPIO_MAGICIAN_SD_POWER, (1 << vdd) & pdata->ocr_mask); | ||
683 | } | ||
684 | |||
685 | static int magician_mci_get_ro(struct device *dev) | ||
686 | { | ||
687 | return (!gpio_get_value(EGPIO_MAGICIAN_nSD_READONLY)); | ||
688 | } | 651 | } |
689 | 652 | ||
690 | static void magician_mci_exit(struct device *dev, void *data) | 653 | static void magician_mci_exit(struct device *dev, void *data) |
691 | { | 654 | { |
692 | gpio_free(EGPIO_MAGICIAN_nSD_READONLY); | ||
693 | gpio_free(EGPIO_MAGICIAN_SD_POWER); | ||
694 | free_irq(IRQ_MAGICIAN_SD, data); | 655 | free_irq(IRQ_MAGICIAN_SD, data); |
695 | } | 656 | } |
696 | 657 | ||
697 | static struct pxamci_platform_data magician_mci_info = { | 658 | static struct pxamci_platform_data magician_mci_info = { |
698 | .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, | 659 | .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, |
699 | .init = magician_mci_init, | 660 | .init = magician_mci_init, |
700 | .get_ro = magician_mci_get_ro, | 661 | .exit = magician_mci_exit, |
701 | .setpower = magician_mci_setpower, | 662 | .gpio_card_detect = -1, |
702 | .exit = magician_mci_exit, | 663 | .gpio_card_ro = EGPIO_MAGICIAN_nSD_READONLY, |
664 | .gpio_card_ro_invert = 1, | ||
665 | .gpio_power = EGPIO_MAGICIAN_SD_POWER, | ||
703 | }; | 666 | }; |
704 | 667 | ||
705 | 668 | ||