summaryrefslogtreecommitdiffstats
path: root/target/linux/pxa/patches-2.6.21/005-compact-flash.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/pxa/patches-2.6.21/005-compact-flash.patch')
-rw-r--r--target/linux/pxa/patches-2.6.21/005-compact-flash.patch283
1 files changed, 0 insertions, 283 deletions
diff --git a/target/linux/pxa/patches-2.6.21/005-compact-flash.patch b/target/linux/pxa/patches-2.6.21/005-compact-flash.patch
deleted file mode 100644
index 6143fc69d1..0000000000
--- a/target/linux/pxa/patches-2.6.21/005-compact-flash.patch
+++ /dev/null
@@ -1,283 +0,0 @@
---- a/drivers/pcmcia/Makefile
-+++ b/drivers/pcmcia/Makefile
-@@ -69,4 +69,4 @@ sa1100_cs-$(CONFIG_SA1100_SIMPAD) += sa
- pxa2xx_cs-$(CONFIG_ARCH_LUBBOCK) += pxa2xx_lubbock.o sa1111_generic.o
- pxa2xx_cs-$(CONFIG_MACH_MAINSTONE) += pxa2xx_mainstone.o
- pxa2xx_cs-$(CONFIG_PXA_SHARPSL) += pxa2xx_sharpsl.o
--
-+pxa2xx_cs-$(CONFIG_ARCH_GUMSTIX) += pxa2xx_gumstix.o
---- /dev/null
-+++ b/drivers/pcmcia/pxa2xx_gumstix.c
-@@ -0,0 +1,272 @@
-+/*
-+ * linux/drivers/pcmcia/pxa2xx_gumstix.c
-+ *
-+ * Gumstix PCMCIA specific routines. Based on Mainstone
-+ *
-+ * Copyright 2004, Craig Hughes <craig@gumstix.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/kernel.h>
-+#include <linux/errno.h>
-+#include <linux/interrupt.h>
-+#include <linux/device.h>
-+#include <linux/platform_device.h>
-+
-+#include <pcmcia/ss.h>
-+
-+#include <asm/hardware.h>
-+#include <asm/delay.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/irq.h>
-+#include <asm/io.h>
-+
-+#include <asm/arch/gumstix.h>
-+
-+#include "soc_common.h"
-+
-+static struct pcmcia_irqs gumstix_pcmcia_irqs0[] = {
-+ { 0, GUMSTIX_S0_nCD_IRQ, "CF0 nCD" },
-+ { 0, GUMSTIX_S0_nSTSCHG_IRQ, "CF0 nSTSCHG" },
-+};
-+
-+static struct pcmcia_irqs gumstix_pcmcia_irqs1[] = {
-+ { 1, GUMSTIX_S1_nCD_IRQ, "CF1 nCD" },
-+ { 1, GUMSTIX_S1_nSTSCHG_IRQ, "CF1 nSTSCHG" },
-+};
-+
-+static int net_cf_vx_mode = 0;
-+
-+static int gumstix_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
-+{
-+ if(skt->nr == 0)
-+ {
-+ pxa_gpio_mode(GPIO_GUMSTIX_nSTSCHG_0_MD);
-+ pxa_gpio_mode(GPIO_GUMSTIX_nCD_0_MD);
-+ if(net_cf_vx_mode)
-+ pxa_gpio_mode(GPIO_GUMSTIX_PRDY_nBSY_0_OLD_MD);
-+ else
-+ pxa_gpio_mode(GPIO_GUMSTIX_PRDY_nBSY_0_MD);
-+ } else {
-+ pxa_gpio_mode(GPIO_GUMSTIX_nSTSCHG_1_MD);
-+ pxa_gpio_mode(GPIO_GUMSTIX_nCD_1_MD);
-+ pxa_gpio_mode(GPIO_GUMSTIX_PRDY_nBSY_1_MD);
-+ }
-+
-+ pxa_gpio_mode(GPIO_GUMSTIX_nPOE_MD);
-+ pxa_gpio_mode(GPIO_GUMSTIX_nPWE_MD);
-+ pxa_gpio_mode(GPIO_GUMSTIX_nPIOR_MD);
-+ pxa_gpio_mode(GPIO_GUMSTIX_nPIOW_MD);
-+ pxa_gpio_mode(GPIO_GUMSTIX_nPCE_1_MD);
-+ pxa_gpio_mode(GPIO_GUMSTIX_nPCE_2_MD);
-+ pxa_gpio_mode(GPIO_GUMSTIX_pSKTSEL_MD);
-+ pxa_gpio_mode(GPIO_GUMSTIX_nPREG_MD);
-+ pxa_gpio_mode(GPIO_GUMSTIX_nPWAIT_MD);
-+ pxa_gpio_mode(GPIO_GUMSTIX_nIOIS16_MD);
-+
-+ skt->irq = (skt->nr == 0) ? ((net_cf_vx_mode == 0) ? GUMSTIX_S0_PRDY_nBSY_IRQ : GUMSTIX_S0_PRDY_nBSY_OLD_IRQ) : GUMSTIX_S1_PRDY_nBSY_IRQ;
-+
-+ return (skt->nr == 0) ? soc_pcmcia_request_irqs(skt, gumstix_pcmcia_irqs0, ARRAY_SIZE(gumstix_pcmcia_irqs0)) :
-+ soc_pcmcia_request_irqs(skt, gumstix_pcmcia_irqs1, ARRAY_SIZE(gumstix_pcmcia_irqs1));
-+}
-+
-+static void gumstix_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
-+{
-+ if(skt->nr == 0)
-+ {
-+ soc_pcmcia_free_irqs(skt, gumstix_pcmcia_irqs0, ARRAY_SIZE(gumstix_pcmcia_irqs0));
-+ } else {
-+ soc_pcmcia_free_irqs(skt, gumstix_pcmcia_irqs1, ARRAY_SIZE(gumstix_pcmcia_irqs1));
-+ }
-+}
-+
-+static void gumstix_pcmcia_socket_state(struct soc_pcmcia_socket *skt,
-+ struct pcmcia_state *state)
-+{
-+ unsigned int cd, prdy_nbsy, nbvd1;
-+ if(skt->nr == 0)
-+ {
-+ cd = GPIO_GUMSTIX_nCD_0;
-+ if(net_cf_vx_mode)
-+ prdy_nbsy = GPIO_GUMSTIX_PRDY_nBSY_0_OLD;
-+ else
-+ prdy_nbsy = GPIO_GUMSTIX_PRDY_nBSY_0;
-+ nbvd1 = GPIO_GUMSTIX_nBVD1_0;
-+ } else {
-+ cd = GPIO_GUMSTIX_nCD_1;
-+ prdy_nbsy = GPIO_GUMSTIX_PRDY_nBSY_1;
-+ nbvd1 = GPIO_GUMSTIX_nBVD1_1;
-+ }
-+ state->detect = !(GPLR(cd) & GPIO_bit(cd));
-+ state->ready = !!(GPLR(prdy_nbsy) & GPIO_bit(prdy_nbsy));
-+ state->bvd1 = !!(GPLR(nbvd1) & GPIO_bit(nbvd1));
-+ state->bvd2 = 1;
-+ state->vs_3v = 0;
-+ state->vs_Xv = 0;
-+ state->wrprot = 0;
-+}
-+
-+static int gumstix_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
-+ const socket_state_t *state)
-+{
-+ return 0;
-+}
-+
-+static void gumstix_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
-+{
-+ if(skt->nr) {
-+ soc_pcmcia_enable_irqs(skt, gumstix_pcmcia_irqs0, ARRAY_SIZE(gumstix_pcmcia_irqs0));
-+ } else {
-+ soc_pcmcia_enable_irqs(skt, gumstix_pcmcia_irqs1, ARRAY_SIZE(gumstix_pcmcia_irqs1));
-+ }
-+}
-+
-+static void gumstix_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
-+{
-+ if(skt->nr) {
-+ soc_pcmcia_disable_irqs(skt, gumstix_pcmcia_irqs0, ARRAY_SIZE(gumstix_pcmcia_irqs0));
-+ } else {
-+ soc_pcmcia_disable_irqs(skt, gumstix_pcmcia_irqs1, ARRAY_SIZE(gumstix_pcmcia_irqs1));
-+ }
-+}
-+
-+static struct pcmcia_low_level gumstix_pcmcia_ops = {
-+ .owner = THIS_MODULE,
-+ .hw_init = gumstix_pcmcia_hw_init,
-+ .hw_shutdown = gumstix_pcmcia_hw_shutdown,
-+ .socket_state = gumstix_pcmcia_socket_state,
-+ .configure_socket = gumstix_pcmcia_configure_socket,
-+ .socket_init = gumstix_pcmcia_socket_init,
-+ .socket_suspend = gumstix_pcmcia_socket_suspend,
-+ .nr = 2,
-+};
-+
-+static struct platform_device *gumstix_pcmcia_device;
-+
-+inline void __init gumstix_pcmcia_cpld_clk(void)
-+{
-+ GPCR(GPIO_GUMSTIX_nPOE) = GPIO_bit(GPIO_GUMSTIX_nPOE);
-+ GPSR(GPIO_GUMSTIX_nPOE) = GPIO_bit(GPIO_GUMSTIX_nPOE);
-+}
-+
-+inline unsigned char __init gumstix_pcmcia_cpld_read_bits(int bits)
-+{
-+ unsigned char result = 0;
-+ unsigned int shift = 0;
-+ while(bits--)
-+ {
-+ result |= !!(GPLR(GPIO_GUMSTIX_nCD_0) & GPIO_bit(GPIO_GUMSTIX_nCD_0)) << shift;
-+ shift ++;
-+ gumstix_pcmcia_cpld_clk();
-+ }
-+ printk("CPLD responded with: %02x\n",result);
-+ return result;
-+}
-+
-+/* We use the CPLD on the CF-CF card to read a value from a shift register. If we can read that
-+ * magic sequence, then we have 2 CF cards; otherwise we assume just one
-+ * The CPLD will send the value of the shift register on GPIO11 (the CD line for slot 0)
-+ * when RESET is held in reset. We use GPIO48 (nPOE) as a clock signal,
-+ * GPIO52/53 (card enable for both cards) to control read/write to the shift register
-+ */
-+static void __init gumstix_count_cards(void)
-+{
-+ pxa_gpio_mode(GPIO_GUMSTIX_nPOE | GPIO_OUT);
-+ pxa_gpio_mode(GPIO_GUMSTIX_nPCE_1 | GPIO_OUT);
-+ pxa_gpio_mode(GPIO_GUMSTIX_nPCE_2 | GPIO_OUT);
-+ pxa_gpio_mode(GPIO_GUMSTIX_nCD_0 | GPIO_IN);
-+ if(net_cf_vx_mode)
-+ pxa_gpio_mode(GPIO_GUMSTIX_CF_OLD_RESET | GPIO_OUT);
-+ else
-+ pxa_gpio_mode(GPIO_GUMSTIX_CF_RESET | GPIO_OUT);
-+
-+ // Enter reset
-+ if(net_cf_vx_mode)
-+ GPSR(GPIO_GUMSTIX_CF_OLD_RESET) = GPIO_bit(GPIO_GUMSTIX_CF_OLD_RESET);
-+ else
-+ GPSR(GPIO_GUMSTIX_CF_RESET) = GPIO_bit(GPIO_GUMSTIX_CF_RESET);
-+
-+ // Setup the shift register
-+ GPSR(GPIO_GUMSTIX_nPCE_1) = GPIO_bit(GPIO_GUMSTIX_nPCE_1);
-+ GPCR(GPIO_GUMSTIX_nPCE_2) = GPIO_bit(GPIO_GUMSTIX_nPCE_2);
-+
-+ // Tick the clock to program the shift register
-+ gumstix_pcmcia_cpld_clk();
-+
-+ // Now set shift register into read mode
-+ GPCR(GPIO_GUMSTIX_nPCE_1) = GPIO_bit(GPIO_GUMSTIX_nPCE_1);
-+ GPSR(GPIO_GUMSTIX_nPCE_2) = GPIO_bit(GPIO_GUMSTIX_nPCE_2);
-+
-+ // We can read the bits now -- 0xC2 means "Dual compact flash"
-+ if(gumstix_pcmcia_cpld_read_bits(8) != 0xC2)
-+ {
-+ // We do not have 2 CF slots
-+ gumstix_pcmcia_ops.nr = 1;
-+ }
-+}
-+
-+#ifdef CONFIG_ARCH_GUMSTIX_VERDEX
-+static void __init gumstix_check_if_netCF_vx(void)
-+{
-+ void *network_controller_memory = ioremap(0x04000300,16);
-+ // Look for the special 91c111 value in the bank select register
-+ if((0xff00 & readw(network_controller_memory+0x0e)) == 0x3300) {
-+ printk("Detected netCF-vx board: using older GPIO configuration\n");
-+ net_cf_vx_mode = 1;
-+ } else {
-+ printk("Not netCF-vx board: using newer GPIO configuration\n");
-+ net_cf_vx_mode = 0;
-+ }
-+ iounmap(network_controller_memory);
-+}
-+#endif
-+
-+static int __init gumstix_pcmcia_init(void)
-+{
-+ int ret;
-+
-+#ifdef CONFIG_ARCH_GUMSTIX_VERDEX
-+ gumstix_check_if_netCF_vx();
-+#endif
-+
-+ gumstix_count_cards();
-+
-+ udelay(50);
-+ if(net_cf_vx_mode)
-+ GPCR(GPIO_GUMSTIX_CF_OLD_RESET) = GPIO_bit(GPIO_GUMSTIX_CF_OLD_RESET);
-+ else
-+ GPCR(GPIO_GUMSTIX_CF_RESET) = GPIO_bit(GPIO_GUMSTIX_CF_RESET);
-+
-+ gumstix_pcmcia_device = platform_device_alloc("pxa2xx-pcmcia", -1);
-+ if (!gumstix_pcmcia_device)
-+ return -ENOMEM;
-+
-+ gumstix_pcmcia_device->dev.platform_data = &gumstix_pcmcia_ops;
-+
-+ ret = platform_device_add(gumstix_pcmcia_device);
-+ if (ret)
-+ platform_device_put(gumstix_pcmcia_device);
-+
-+ return ret;
-+}
-+
-+static void __exit gumstix_pcmcia_exit(void)
-+{
-+ /*
-+ * This call is supposed to free our gumstix_pcmcia_device.
-+ * Unfortunately platform_device don't have a free method, and
-+ * we can't assume it's free of any reference at this point so we
-+ * can't free it either.
-+ */
-+ platform_device_unregister(gumstix_pcmcia_device);
-+}
-+
-+fs_initcall(gumstix_pcmcia_init);
-+module_exit(gumstix_pcmcia_exit);
-+
-+MODULE_LICENSE("GPL");