summaryrefslogtreecommitdiff
path: root/packages/linux/gumstix-kernel-2.6.21/mmc-card-detect.patch
diff options
context:
space:
mode:
authorPhilip Balister <philip@balister.org>2008-02-15 13:27:34 +0000
committerPhilip Balister <philip@balister.org>2008-02-15 13:27:34 +0000
commit7192c8cda818dee66ccd54fa42b909a3b740f05c (patch)
tree1c86d1f26ae4412c093ad5befa636b99bbfc3286 /packages/linux/gumstix-kernel-2.6.21/mmc-card-detect.patch
parent9eff3cb5ad3afdcb429a2302e0ec303b07cb5604 (diff)
gumstix-kernel : Add files to build a kernel for gumstix machines. These are
copied verbatim from the gumstix OE based build system.
Diffstat (limited to 'packages/linux/gumstix-kernel-2.6.21/mmc-card-detect.patch')
-rw-r--r--packages/linux/gumstix-kernel-2.6.21/mmc-card-detect.patch80
1 files changed, 80 insertions, 0 deletions
diff --git a/packages/linux/gumstix-kernel-2.6.21/mmc-card-detect.patch b/packages/linux/gumstix-kernel-2.6.21/mmc-card-detect.patch
new file mode 100644
index 0000000000..26dd970e3b
--- /dev/null
+++ b/packages/linux/gumstix-kernel-2.6.21/mmc-card-detect.patch
@@ -0,0 +1,80 @@
+Index: linux-2.6.21gum/arch/arm/mach-pxa/gumstix.c
+===================================================================
+--- linux-2.6.21gum.orig/arch/arm/mach-pxa/gumstix.c
++++ linux-2.6.21gum/arch/arm/mach-pxa/gumstix.c
+@@ -29,19 +29,55 @@
+
+ #include "generic.h"
+
+-static int gumstix_mci_init(struct device *dev, irqreturn_t (*lubbock_detect_int)(int, void *, struct pt_regs *), void *data)
++static struct pxamci_platform_data gumstix_mci_platform_data;
++
++static int gumstix_mci_init(struct device *dev, irqreturn_t (*gumstix_detect_int)(int, void *, struct pt_regs *), void *data)
+ {
+- // Set up MMC controller
++ int err;
++
+ pxa_gpio_mode(GPIO6_MMCCLK_MD);
+ pxa_gpio_mode(GPIO53_MMCCLK_MD);
+ pxa_gpio_mode(GPIO8_MMCCS0_MD);
+
++ pxa_gpio_mode(GUMSTIX_GPIO_nSD_DETECT | GPIO_IN);
++ set_irq_type(GUMSTIX_IRQ_GPIO_nSD_DETECT, IRQT_BOTHEDGE);
++ pxa_gpio_mode(GUMSTIX_GPIO_nSD_WP | GPIO_IN);
++
++ gumstix_mci_platform_data.detect_delay = msecs_to_jiffies(250);
++
++ err = request_irq(GUMSTIX_IRQ_GPIO_nSD_DETECT, gumstix_detect_int, SA_INTERRUPT,
++ "MMC card detect", data);
++ if (err) {
++ printk(KERN_ERR "gumstix_mci_init: MMC/SD: can't request MMC card detect IRQ\n");
++ return -1;
++ }
++
++ err = set_irq_type(GUMSTIX_IRQ_GPIO_nSD_DETECT, IRQT_BOTHEDGE);
++
+ return 0;
+ }
+
++static int gumstix_mci_get_ro(struct device *dev)
++{
++#ifdef CONFIG_ARCH_GUMSTIX_VERDEX
++ return 0; // microSD is always writable on verdex
++#else
++ int ro;
++ ro = GPLR(GUMSTIX_GPIO_nSD_WP) & GPIO_bit(GUMSTIX_GPIO_nSD_WP);
++ return ro;
++#endif
++}
++
++static void gumstix_mci_exit(struct device *dev, void *data)
++{
++ free_irq(GUMSTIX_IRQ_GPIO_nSD_DETECT, data);
++}
++
+ static struct pxamci_platform_data gumstix_mci_platform_data = {
+ .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
+- .init = &gumstix_mci_init,
++ .init = gumstix_mci_init,
++ .get_ro = gumstix_mci_get_ro,
++ .exit = gumstix_mci_exit,
+ };
+
+ static struct pxa2xx_udc_mach_info gumstix_udc_info __initdata = {
+Index: linux-2.6.21gum/include/asm-arm/arch-pxa/gumstix.h
+===================================================================
+--- linux-2.6.21gum.orig/include/asm-arm/arch-pxa/gumstix.h
++++ linux-2.6.21gum/include/asm-arm/arch-pxa/gumstix.h
+@@ -36,6 +36,12 @@
+ #define GPIO_GUMSTIX_USB_GPIOx_CON_MD (GPIO_GUMSTIX_USB_GPIOx | GPIO_OUT)
+ #define GPIO_GUMSTIX_USB_GPIOx_DIS_MD (GPIO_GUMSTIX_USB_GPIOx | GPIO_IN)
+
++/*
++ * SD/MMC definitions
++ */
++#define GUMSTIX_GPIO_nSD_WP 22 /* SD Write Protect */
++#define GUMSTIX_GPIO_nSD_DETECT 11 /* MMC/SD Card Detect */
++#define GUMSTIX_IRQ_GPIO_nSD_DETECT IRQ_GPIO(GUMSTIX_GPIO_nSD_DETECT)
+
+ /*
+ * SMC Ethernet definitions