2 * Based on arch/arm/mach-pxa/mainstone.h
6 #include <linux/config.h>
7 #include <linux/init.h>
8 #include <linux/platform_device.h>
11 #include <asm/arch/mmc.h>
12 #include <asm/hardware.h>
14 #include <asm/mach/arch.h>
15 #include <asm/mach/map.h>
16 #include <asm/mach-types.h>
18 #include <asm/arch/pxa-regs.h>
19 #include <asm/arch/asus730-gpio.h>
21 static int a730_mci_init(struct device
*dev
, irqreturn_t (*a730_detect_int
)(int, void *, struct pt_regs
*), void *data
)
24 printk("%s\n", __FUNCTION__
);
26 * setup GPIO for PXA27x MMC controller
29 pxa_gpio_mode(GPIO32_MMCCLK_MD
);
30 pxa_gpio_mode(GPIO92_MMCDAT0_MD
);
31 pxa_gpio_mode(GPIO109_MMCDAT1_MD
);
32 pxa_gpio_mode(GPIO110_MMCDAT2_MD
);
33 pxa_gpio_mode(GPIO111_MMCDAT3_MD
);
34 pxa_gpio_mode(GPIO112_MMCCMD_MD
);
36 set_irq_type(A730_IRQ(SD_DETECT_N
), IRQF_TRIGGET_RISING
| IRQF_TRIGGER_FALLING
);
37 err
= request_irq(A730_IRQ(SD_DETECT_N
), a730_detect_int
, IRQF_DISABLED
, "SD/MMC card detect", data
);
39 printk(KERN_ERR
"a730_mci_init: SD/MMC: can't request SD/MMC card detect IRQ\n");
46 static void a730_mci_setpower(struct device
*dev
, unsigned int vdd
)
48 struct pxamci_platform_data
* p_d
= dev
->platform_data
;
49 printk("%s\n", __FUNCTION__
);
50 if (( 1 << vdd
) & p_d
->ocr_mask
)
52 printk(KERN_DEBUG
"%s: on\n", __FUNCTION__
);
53 SET_A730_GPIO(SD_PWR
, 0);
57 printk(KERN_DEBUG
"%s: off\n", __FUNCTION__
);
58 SET_A730_GPIO(SD_PWR
, 1);
62 static int a730_mci_get_ro(struct device
*dev
)
64 return GET_A730_GPIO(SD_RO
);
67 static void a730_mci_exit(struct device
*dev
, void *data
)
69 printk("%s\n", __FUNCTION__
);
70 free_irq(A730_IRQ(SD_DETECT_N
), data
);
73 static struct pxamci_platform_data a730_mci_platform_data
= {
74 .ocr_mask
= MMC_VDD_32_33
| MMC_VDD_33_34
,
75 .init
= a730_mci_init
,
76 .setpower
= a730_mci_setpower
,
77 .get_ro
= a730_mci_get_to
,
78 .exit
= a730_mci_exit
,
81 static int __init
a730_mci_mod_init(void)
83 if (!machine_is_a730()) return -ENODEV
;
84 printk("%s\n", __FUNCTION__
);
85 pxa_set_mci_info(&a730_mci_platform_data
);
89 static void __exit
a730_mci_mod_exit(void)
91 //printk("%s\n",__PRETTY_FUNCTION__);
92 //platform_device_unregister(&a730_pcmcia_device);
95 module_init(a730_mci_mod_init
);
96 module_exit(a730_mci_mod_exit
);
98 MODULE_LICENSE("GPL");
99 MODULE_AUTHOR("Serge Nikolaenko <mypal_hh@utl.ru>");
100 MODULE_DESCRIPTION("MCI platform support for Asus MyPal 730");