diff options
Diffstat (limited to 'packages/linux/linux-ezx-2.6.23/patches')
64 files changed, 0 insertions, 27844 deletions
diff --git a/packages/linux/linux-ezx-2.6.23/patches/Makefile.OpenEZX b/packages/linux/linux-ezx-2.6.23/patches/Makefile.OpenEZX deleted file mode 100644 index e7e9115e3c..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/Makefile.OpenEZX +++ /dev/null @@ -1,77 +0,0 @@ -# Makefile used to build binary images of OpenEZX kernels -# -# If you are currently in the linux kernel toplevel dir, -# you can call this Makefile with: -# $ make -f path_to/Makefile.OpenEZX -# -# Note that you can set the CROSS_COMPILE and QUILT_PATCHES variable -# in your environment. -# - -PHONES = a780 e680 a1200 e6 e2 - -CROSS_COMPILE ?= /home/wyrm/ezx/dev/cross/bin/arm-angstrom-linux-gnueabi- -QUILT_PATCHES ?= patches - -LV ?= ezxdev# replace LOCALVERSION string -J ?= 2 # simultaneous jobs -SIG ?= 0 # BOOL sign md5sums file - -DATE = $(shell date +%Y%m%d) -DEPLOY_SERVER ?= people.openezx.org -DEPLOY_DIR ?= public_html/images/$(DATE)/ - -all: $(foreach p, $(PHONES), zImage-$(p) modules-$(p).tar.gz) - -zImages: $(foreach p, $(PHONES), zImage-$(p)) - -modules: $(foreach p, $(PHONES), modules-$(p).tar.gz) - -config: $(foreach p, $(PHONES), config-$(p)) - -config-%: $(QUILT_PATCHES)/defconfig-% - cp $< .config - make ARCH=arm oldconfig - cp .config $< - -deploy: release - ssh $(DEPLOY_SERVER) \ - mkdir -p $(DEPLOY_DIR) - scp ezxrelease-$(DATE).tar $(DEPLOY_SERVER):$(DEPLOY_DIR) - ssh $(DEPLOY_SERVER) \ - cd $(DEPLOY_DIR)\; \ - tar -xf ezxrelease-$(DATE).tar\; \ - rm -f ezxrelease-$(DATE).tar - -release: $(foreach p, $(PHONES), tag-$(p)) - cp md5sums.tmp md5sums - test "$(SIG)" = "1" && \ - cat md5sums.tmp | gpg --clearsign > md5sums \ - ; echo - tar -rf ezxrelease.tar md5sums - rm -f md5sums.tmp md5sums - mv ezxrelease.tar ezxrelease-$(DATE).tar - -tag-%: zImage-% modules-%.tar.gz - p=$(patsubst tag-%,%,$@) && \ - tag=$(shell cat include/config/kernel.release)-$(DATE) && \ - mv zImage-$$p zImage-$$tag-$$p && \ - mv modules-$$p.tar.gz modules-$$tag-$$p.tar.gz && \ - tar -rf ezxrelease.tar zImage-$$tag-$$p modules-$$tag-$$p.tar.gz && \ - md5sum zImage-$$tag-$$p modules-$$tag-$$p.tar.gz >> md5sums.tmp && \ - rm -f zImage-$$tag-$$p modules-$$tag-$$p.tar.gz - -zImage-%: $(QUILT_PATCHES)/defconfig-% - cat $< | sed 's/LOCALVERSION=".*"$$/LOCALVERSION="-$(LV)"/' > .config - make -j$(J) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) zImage - mv arch/arm/boot/zImage $@ - -modules-%.tar.gz: $(QUILT_PATCHES)/defconfig-% - cat $< | sed 's/LOCALVERSION=".*"$$/LOCALVERSION="-$(LV)"/' > .config - -find . -name "*.ko" -print0 | xargs -r0 rm - mkdir -p Makefile.OpenEZX-tmp/$@ - make -j$(J) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) modules - make -j1 ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) \ - INSTALL_MOD_PATH=Makefile.OpenEZX-tmp/$@ modules_install - tar -C Makefile.OpenEZX-tmp/$@ -czf $@ . - rm -rf Makefile.OpenEZX-tmp/ diff --git a/packages/linux/linux-ezx-2.6.23/patches/a1200-eoc.patch b/packages/linux/linux-ezx-2.6.23/patches/a1200-eoc.patch deleted file mode 100644 index 77aec1c629..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/a1200-eoc.patch +++ /dev/null @@ -1,20 +0,0 @@ -Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c -=================================================================== ---- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-a1200.c 2007-09-24 20:14:54.000000000 -0300 -+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c 2007-09-24 20:15:18.000000000 -0300 -@@ -203,8 +203,15 @@ - }, - }; - -+ -+struct platform_device a1200_eoc_device = { -+ .name = "ezx-eoc", -+ .id = -1, -+}; -+ - static struct platform_device *devices[] __initdata = { - &a1200_pcap_device, -+ &a1200_eoc_device, - }; - - static void __init a1200_init(void) diff --git a/packages/linux/linux-ezx-2.6.23/patches/a1200-flip.patch b/packages/linux/linux-ezx-2.6.23/patches/a1200-flip.patch deleted file mode 100644 index d932ca1605..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/a1200-flip.patch +++ /dev/null @@ -1,47 +0,0 @@ -Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a1200.c 2007-10-24 19:37:28.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c 2007-10-24 19:40:22.000000000 +0200 -@@ -16,6 +16,7 @@ - #include <linux/mmc/host.h> - #include <linux/irq.h> - #include <linux/input.h> -+#include <linux/gpio_keys.h> - - #include <asm/mach-types.h> - #include <asm/mach/arch.h> -@@ -292,11 +293,34 @@ - .num_resources = ARRAY_SIZE(pcap_ts_resources), - .resource = pcap_ts_resources, - }; -+/* Flip */ -+#undef GPIO_FLIP_PIN -+#define GPIO_FLIP_PIN 15 /* FIXME */ -+static struct gpio_keys_button a1200flip_buttons[] = { -+ [0] = { -+ .code = KEY_SLEEP, -+ .gpio = GPIO_FLIP_PIN, -+ .desc = "A1200 flip", -+ }, -+}; -+ -+static struct gpio_keys_platform_data a1200flip_platform_data = { -+ .buttons = a1200flip_buttons, -+ .nbuttons = 1, -+}; -+static struct platform_device a1200flip_device = { -+ .name = "gpio-keys", -+ .id = -1, -+ .dev = { -+ .platform_data = &a1200flip_platform_data, -+ }, -+}; - - static struct platform_device *devices[] __initdata = { - &a1200_pcap_device, - &a1200_eoc_device, - &pcap_ts_device, -+ &a1200flip_device, - }; - - static void __init a1200_init(void) diff --git a/packages/linux/linux-ezx-2.6.23/patches/a1200-kbd.patch b/packages/linux/linux-ezx-2.6.23/patches/a1200-kbd.patch deleted file mode 100644 index 5771f6d359..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/a1200-kbd.patch +++ /dev/null @@ -1,98 +0,0 @@ -Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c -=================================================================== ---- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-a1200.c 2007-09-25 00:03:01.000000000 -0300 -+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c 2007-09-25 02:00:40.000000000 -0300 -@@ -15,6 +15,7 @@ - #include <linux/fb.h> - #include <linux/mmc/host.h> - #include <linux/irq.h> -+#include <linux/input.h> - - #include <asm/mach-types.h> - #include <asm/mach/arch.h> -@@ -23,11 +24,13 @@ - #include <asm/arch/ezx.h> - #include <asm/arch/ezx-pcap.h> - #include <asm/arch/mmc.h> -+#include <asm/arch/kbd.h> - - #include "generic.h" - - extern void ezx_lcd_power(int, struct fb_var_screeninfo *); - extern void ezx_backlight_power(int); -+extern void __init pxa_set_kbd_info(struct pxakbd_platform_data *); - - #ifdef CONFIG_EZX_PCAP - extern int ezx_pcap_mmcsd_power(int); -@@ -209,6 +212,63 @@ - .id = -1, - }; - -+/* Keypad */ -+static unsigned char a1200_keycode[] = { -+ /* row 0 */ -+ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, -+ /* row 1 */ -+ KEY_RIGHT, KEY_DOWN, KEY_KPENTER, KEY_UP, KEY_LEFT, -+ /* row 2 */ -+ KEY_PAGEDOWN, KEY_CAMERA, KEY_RECORD, KEY_HOME, KEY_PAGEUP, -+ /* row 3 */ -+ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, -+ /* row 4 */ -+ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, -+ /* row 5 */ -+ KEY_RESERVED, KEY_RESERVED, KEY_MENU, KEY_RESERVED, KEY_RESERVED, -+}; -+/* -+static unsigned char a1200_direct_keycode[] = { -+ KEY_CAMERA, -+}; -+*/ -+ -+static int a1200_kbd_init(void) -+{ -+ pxa_gpio_mode(100 | GPIO_ALT_FN_1_IN); /* KP_MKIN<0> */ -+ pxa_gpio_mode(101 | GPIO_ALT_FN_1_IN); /* KP_MKIN<1> */ -+ pxa_gpio_mode(102 | GPIO_ALT_FN_1_IN); /* KP_MKIN<2> */ -+ pxa_gpio_mode(97 | GPIO_ALT_FN_3_IN); /* KP_MKIN<3> */ -+ pxa_gpio_mode(98 | GPIO_ALT_FN_3_IN); /* KP_MKIN<4> */ -+ pxa_gpio_mode(103 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<0> */ -+ pxa_gpio_mode(104 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<1> */ -+ pxa_gpio_mode(105 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<2> */ -+ pxa_gpio_mode(106 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<3> */ -+ pxa_gpio_mode(107 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<4> */ -+ pxa_gpio_mode(108 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<5> */ -+ -+ PKWR = 0xEC000; -+ PGSR3 |= 0x1F80; -+ return 0; -+} -+ -+static struct pxakbd_platform_data a1200_kbd_platform_data = { -+ .init = &a1200_kbd_init, -+ .scan_interval = HZ/40, -+ .matrix = { -+ .keycode = a1200_keycode, -+ .cols = 6, -+ .rows = 5, -+ }, -+/* -+ .direct = { -+ .keycode = a1200_direct_keycode, -+ .num = 1, -+ }, -+*/ -+}; -+ -+ - static struct platform_device *devices[] __initdata = { - &a1200_pcap_device, - &a1200_eoc_device, -@@ -218,6 +278,7 @@ - { - set_pxa_fb_info(&a1200_fb_info); - pxa_set_mci_info(&a1200_mci_platform_data); -+ pxa_set_kbd_info(&a1200_kbd_platform_data); - - platform_add_devices(devices, ARRAY_SIZE(devices)); - } diff --git a/packages/linux/linux-ezx-2.6.23/patches/a1200-mci.patch b/packages/linux/linux-ezx-2.6.23/patches/a1200-mci.patch deleted file mode 100644 index e5f3257d11..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/a1200-mci.patch +++ /dev/null @@ -1,124 +0,0 @@ -Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a1200.c 2007-10-24 18:58:55.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c 2007-10-24 19:37:21.000000000 +0200 -@@ -13,6 +13,8 @@ - #include <linux/init.h> - #include <linux/platform_device.h> - #include <linux/fb.h> -+#include <linux/mmc/host.h> -+#include <linux/irq.h> - - #include <asm/mach-types.h> - #include <asm/mach/arch.h> -@@ -20,12 +22,102 @@ - #include <asm/arch/pxafb.h> - #include <asm/arch/ezx.h> - #include <asm/arch/ezx-pcap.h> -+#include <asm/arch/mmc.h> - - #include "generic.h" - - extern void ezx_lcd_power(int, struct fb_var_screeninfo *); - extern void ezx_backlight_power(int); - -+#ifdef CONFIG_EZX_PCAP -+extern int ezx_pcap_mmcsd_power(int); -+extern void ezx_pcap_mmcsd_voltage(u_int32_t); -+#else -+#define ezx_pcap_mmcsd_voltage(x) {} -+#define ezx_pcap_mmcsd_power(x) {} -+#endif -+ -+static struct pxamci_platform_data a1200_mci_platform_data; -+ -+static u_int8_t mmc_voltage[] = { -+ [ilog2(MMC_VDD_165_195)] = 6, -+ [ilog2(MMC_VDD_20_21)] = 7, -+ [ilog2(MMC_VDD_21_22)] = 8, -+ [ilog2(MMC_VDD_22_23)] = 8, -+ [ilog2(MMC_VDD_23_24)] = 9, -+ [ilog2(MMC_VDD_24_25)] = 9, -+ [ilog2(MMC_VDD_25_26)] = 10, -+ [ilog2(MMC_VDD_26_27)] = 10, -+ [ilog2(MMC_VDD_27_28)] = 11, -+ [ilog2(MMC_VDD_28_29)] = 11, -+ [ilog2(MMC_VDD_29_30)] = 12, -+ [ilog2(MMC_VDD_30_31)] = 12, -+ [ilog2(MMC_VDD_31_32)] = 13, -+ [ilog2(MMC_VDD_32_33)] = 13, -+ [ilog2(MMC_VDD_33_34)] = 14, -+ [ilog2(MMC_VDD_34_35)] = 14, -+ [ilog2(MMC_VDD_35_36)] = 15, -+}; -+ -+static int a1200_mci_init(struct device *dev, -+ irqreturn_t (*ezx_detect_int)(int, void *), -+ void *data) -+{ -+ int err; -+ -+ /* Setup GPIO for PXA27x MMC/SD controller */ -+ pxa_gpio_mode(GPIO32_MMCCLK_MD); -+ pxa_gpio_mode(GPIO112_MMCCMD_MD); -+ pxa_gpio_mode(GPIO92_MMCDAT0_MD); -+ pxa_gpio_mode(GPIO109_MMCDAT1_MD); -+ pxa_gpio_mode(GPIO110_MMCDAT2_MD); -+ pxa_gpio_mode(GPIO111_MMCDAT3_MD); -+ -+ ezx_pcap_mmcsd_power(1); -+ -+ a1200_mci_platform_data.detect_delay = msecs_to_jiffies(250); -+ -+ err = request_irq(0x49, ezx_detect_int, IRQF_DISABLED, -+ "MMC card detect", data); -+ if (err) { -+ printk(KERN_ERR "ezx_mci_detect: MMC/SD: can't request " -+ "MMC card detect IRQ\n"); -+ return -1; -+ } -+ -+ set_irq_type(0x0b, IRQT_BOTHEDGE); -+ -+ return 0; -+} -+ -+static void a1200_mci_setpower(struct device *dev, unsigned int vdd) -+{ -+ struct pxamci_platform_data* p_d = dev->platform_data; -+ -+ if (( 1 << vdd) & p_d->ocr_mask) -+ ezx_pcap_mmcsd_voltage(mmc_voltage[vdd]); -+ -+ ezx_pcap_mmcsd_power(1); -+} -+ -+static void a1200_mci_exit(struct device *dev, void *data) -+{ -+ ezx_pcap_mmcsd_power(0); -+ free_irq(0x49, data); -+} -+ -+static struct pxamci_platform_data a1200_mci_platform_data = { -+ .ocr_mask = MMC_VDD_165_195|MMC_VDD_20_21|MMC_VDD_21_22 -+ |MMC_VDD_22_23|MMC_VDD_23_24|MMC_VDD_24_25 -+ |MMC_VDD_25_26|MMC_VDD_26_27|MMC_VDD_27_28 -+ |MMC_VDD_28_29|MMC_VDD_29_30|MMC_VDD_30_31 -+ |MMC_VDD_31_32|MMC_VDD_32_33|MMC_VDD_33_34 -+ |MMC_VDD_34_35|MMC_VDD_35_36, -+ .init = a1200_mci_init, -+ .setpower = a1200_mci_setpower, -+ .exit = a1200_mci_exit, -+}; -+ - static struct pxafb_mode_info mode_a1200 = { - .pixclock = 192308, - .xres = 240, -@@ -118,6 +210,7 @@ - static void __init a1200_init(void) - { - set_pxa_fb_info(&a1200_fb_info); -+ pxa_set_mci_info(&a1200_mci_platform_data); - - platform_add_devices(devices, ARRAY_SIZE(devices)); - } diff --git a/packages/linux/linux-ezx-2.6.23/patches/a1200-pcap.patch b/packages/linux/linux-ezx-2.6.23/patches/a1200-pcap.patch deleted file mode 100644 index 8aa1e46d73..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/a1200-pcap.patch +++ /dev/null @@ -1,83 +0,0 @@ -Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c -=================================================================== ---- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-a1200.c 2007-09-07 11:32:32.000000000 -0300 -+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c 2007-09-07 11:51:55.000000000 -0300 -@@ -19,6 +19,7 @@ - #include <asm/arch/pxa-regs.h> - #include <asm/arch/pxafb.h> - #include <asm/arch/ezx.h> -+#include <asm/arch/ezx-pcap.h> - - #include "generic.h" - -@@ -48,7 +49,70 @@ - .pxafb_lcd_power = &ezx_lcd_power, - }; - -+/* PCAP */ -+static int __init a1200_pcap_init(void) -+{ -+ /* -+ * FIXME: this is the PCAP INITIAL STATE. -+ * most of these writes should NOT be done here -+ * * voltage regulators, voltage enablers should be set by the -+ * driver which uses the connected hardware. Otherwise you -+ * drain power unnecessarily. -+ * * interrupt related registers should be set by the irq functions -+ * only. I think that the INT_SEL register selects on which irq -+ * pin the (ap/bp) the irq goes. This should go on ezx-pcap.c, but -+ * only if it actually makes any difference. -+ * * Only power state automatic changes should be done here. -+ * (*LOWPWR, *STBY, LOWPWR*) -+ * * I removed some writes which i consider extremelly wrong. And -+ * which i think will not break anything (they were overwritten -+ * later anyway). -+ * -+ * --WM -+ */ -+ ezx_pcap_write(PCAP_REG_INT_SEL, 0x0); /* wrong */ -+ ezx_pcap_write(PCAP_REG_SWCTRL, 0x2ee6); /* partially wrong */ -+ ezx_pcap_write(PCAP_REG_VREG1, 0x15778e3); /* wrong */ -+ ezx_pcap_write(PCAP_REG_VREG2, 0x810234); /* partially wrong */ -+ ezx_pcap_write(PCAP_REG_AUXVREG, 0x1024bec); /* wrong */ -+ ezx_pcap_write(PCAP_REG_PWR, 0x94108); /* partially wrong */ -+ ezx_pcap_write(PCAP_REG_AUXVREG_MASK, 0x214d48); /* wrong */ -+ ezx_pcap_write(PCAP_REG_BUSCTRL, 0x2a0); /* wrong */ -+ ezx_pcap_write(PCAP_REG_LOWPWR, 0x1d9610c); -+ ezx_pcap_write(PCAP_REG_PERIPH, 0x0); /* wrong */ -+ ezx_pcap_write(PCAP_REG_GP, 0x107); /* probably unnecessary */ -+ -+ return 0; -+} -+ -+static struct pcap_platform_data a1200_pcap_platform_data = { -+ .port = 1, -+ .cs = GPIO_SPI_CE, -+ .flags = PCAP_CS_AH | PCAP_MCI_TF, -+ .clk = 1, -+ .init = a1200_pcap_init, -+}; -+ -+static struct resource a1200_pcap_resources[] = { -+ [0] = { -+ .start = IRQ_GPIO1, -+ .end = IRQ_GPIO1, -+ .flags = IORESOURCE_IRQ, -+ }, -+}; -+ -+struct platform_device a1200_pcap_device = { -+ .name = "ezx-pcap", -+ .id = -1, -+ .num_resources = ARRAY_SIZE(a1200_pcap_resources), -+ .resource = a1200_pcap_resources, -+ .dev = { -+ .platform_data = &a1200_pcap_platform_data, -+ }, -+}; -+ - static struct platform_device *devices[] __initdata = { -+ &a1200_pcap_device, - }; - - static void __init a1200_init(void) diff --git a/packages/linux/linux-ezx-2.6.23/patches/a1200-ts.patch b/packages/linux/linux-ezx-2.6.23/patches/a1200-ts.patch deleted file mode 100644 index bf328cd931..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/a1200-ts.patch +++ /dev/null @@ -1,39 +0,0 @@ -Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c -=================================================================== ---- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-a1200.c 2007-09-25 02:00:40.000000000 -0300 -+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c 2007-09-25 02:00:53.000000000 -0300 -@@ -269,9 +269,34 @@ - }; - - -+/* PCAP_TS */ -+struct resource pcap_ts_resources[] = { -+ [0] = { -+ .start = EZX_IRQ_ADCDONE, -+ .end = EZX_IRQ_ADCDONE, -+ .flags = IORESOURCE_IRQ, -+ }, -+ [1] = { -+ .start = EZX_IRQ_TS, -+ .end = EZX_IRQ_TS, -+ .flags = IORESOURCE_IRQ, -+ } -+}; -+ -+struct platform_device pcap_ts_device = { -+ .name = "pcap-ts", -+ .id = -1, -+ .dev = { -+ .parent = &a1200_pcap_device.dev, -+ }, -+ .num_resources = ARRAY_SIZE(pcap_ts_resources), -+ .resource = pcap_ts_resources, -+}; -+ - static struct platform_device *devices[] __initdata = { - &a1200_pcap_device, - &a1200_eoc_device, -+ &pcap_ts_device, - }; - - static void __init a1200_init(void) diff --git a/packages/linux/linux-ezx-2.6.23/patches/a780-emu.patch b/packages/linux/linux-ezx-2.6.23/patches/a780-emu.patch deleted file mode 100644 index ae9237394d..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/a780-emu.patch +++ /dev/null @@ -1,38 +0,0 @@ -Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 23:03:48.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 23:04:03.000000000 +0200 -@@ -212,8 +212,33 @@ - }, - }; - -+/* EMU */ -+static struct resource a780_emu_resources[] = { -+ [0] = { -+ .start = EZX_IRQ_USB4V, -+ .end = EZX_IRQ_USB4V, -+ .flags = IORESOURCE_IRQ, -+ }, -+ [1] = { -+ .start = EZX_IRQ_USB1V, -+ .end = EZX_IRQ_USB1V, -+ .flags = IORESOURCE_IRQ, -+ }, -+}; -+ -+struct platform_device a780_emu_device = { -+ .name = "ezx-emu", -+ .id = -1, -+ .dev = { -+ .parent = &a780_pcap_device.dev, -+ }, -+ .num_resources = ARRAY_SIZE(a780_emu_resources), -+ .resource = a780_emu_resources, -+}; -+ - static struct platform_device *devices[] __initdata = { - &a780_pcap_device, -+ &a780_emu_device, - }; - - static void __init a780_init(void) diff --git a/packages/linux/linux-ezx-2.6.23/patches/a780-flip.patch b/packages/linux/linux-ezx-2.6.23/patches/a780-flip.patch deleted file mode 100644 index 44b97880ca..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/a780-flip.patch +++ /dev/null @@ -1,46 +0,0 @@ -Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:37:58.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:38:04.000000000 +0200 -@@ -18,6 +18,7 @@ - #include <linux/irq.h> - #include <linux/log2.h> - #include <linux/input.h> -+#include <linux/gpio_keys.h> - - #include <asm/mach-types.h> - #include <asm/mach/arch.h> -@@ -312,10 +313,33 @@ - .resource = pcap_ts_resources, - }; - -+static struct gpio_keys_button a780flip_buttons[] = { -+ [0] = { -+ .code = KEY_SLEEP, -+ .gpio = GPIO_FLIP_PIN, -+ .desc = "A780 flip", -+ }, -+}; -+ -+static struct gpio_keys_platform_data a780flip_platform_data = { -+ .buttons = a780flip_buttons, -+ .nbuttons = 1, -+}; -+ -+static struct platform_device a780flip_device = { -+ .name = "gpio-keys", -+ .id = -1, -+ .dev = { -+ .platform_data = &a780flip_platform_data, -+ }, -+}; -+ -+ - static struct platform_device *devices[] __initdata = { - &a780_pcap_device, - &a780_emu_device, - &pcap_ts_device, -+ &a780flip_device, - }; - - static void __init a780_init(void) diff --git a/packages/linux/linux-ezx-2.6.23/patches/a780-kbd.patch b/packages/linux/linux-ezx-2.6.23/patches/a780-kbd.patch deleted file mode 100644 index df60384b9c..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/a780-kbd.patch +++ /dev/null @@ -1,90 +0,0 @@ -Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:36:54.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:37:43.000000000 +0200 -@@ -17,6 +17,7 @@ - #include <linux/mmc/host.h> - #include <linux/irq.h> - #include <linux/log2.h> -+#include <linux/input.h> - - #include <asm/mach-types.h> - #include <asm/mach/arch.h> -@@ -25,11 +26,13 @@ - #include <asm/arch/ezx.h> - #include <asm/arch/ezx-pcap.h> - #include <asm/arch/mmc.h> -+#include <asm/arch/kbd.h> - - #include "generic.h" - - extern void ezx_lcd_power(int, struct fb_var_screeninfo *); - extern void ezx_backlight_power(int); -+extern void __init pxa_set_kbd_info(struct pxakbd_platform_data *); - - #ifdef CONFIG_EZX_PCAP - extern int ezx_pcap_mmcsd_power(int); -@@ -236,6 +239,55 @@ - .resource = a780_emu_resources, - }; - -+static unsigned char a780_keycode[] = { -+ /* row 0 */ -+ KEY_PHONE, KEY_MENU, KEY_CANCEL, KEY_PAGEUP, KEY_UP, -+ /* row 1 */ -+ KEY_KP1, KEY_KP2, KEY_KP3, KEY_ENTER, KEY_KPENTER, /*center joypad */ -+ /* row 2 */ -+ KEY_KP4, KEY_KP5, KEY_KP6, KEY_RECORD, KEY_LEFT, -+ /* row 3 */ -+ KEY_KP7, KEY_KP8, KEY_KP9, KEY_HOME, KEY_RIGHT, -+ /* row 4 */ -+ KEY_KPASTERISK, KEY_KP0, KEY_KPDOT, KEY_PAGEDOWN, KEY_DOWN, -+}; -+ -+static unsigned char a780_direct_keycode[] = { -+ KEY_CAMERA, -+}; -+ -+static int a780_kbd_init(void) -+{ -+ pxa_gpio_mode(93 | GPIO_ALT_FN_1_IN); /* KP_DKIN<0>, voice_rec */ -+ pxa_gpio_mode(97 | GPIO_ALT_FN_3_IN); /* KP_MKIN<3> */ -+ pxa_gpio_mode(98 | GPIO_ALT_FN_3_IN); /* KP_MKIN<4> */ -+ pxa_gpio_mode(100 | GPIO_ALT_FN_1_IN); /* KP_MKIN<0> */ -+ pxa_gpio_mode(101 | GPIO_ALT_FN_1_IN); /* KP_MKIN<1> */ -+ pxa_gpio_mode(102 | GPIO_ALT_FN_1_IN); /* KP_MKIN<2> */ -+ pxa_gpio_mode(103 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<0> */ -+ pxa_gpio_mode(104 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<1> */ -+ pxa_gpio_mode(105 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<2> */ -+ pxa_gpio_mode(106 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<3> */ -+ pxa_gpio_mode(107 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<4> */ -+ PKWR = 0xec400; -+ PGSR3 |= 0xf80; -+ return 0; -+} -+ -+static struct pxakbd_platform_data a780_kbd_platform_data = { -+ .init = &a780_kbd_init, -+ .scan_interval = HZ/40, -+ .matrix = { -+ .keycode = a780_keycode, -+ .cols = 5, -+ .rows = 5, -+ }, -+ .direct = { -+ .keycode = a780_direct_keycode, -+ .num = 1, -+ }, -+}; -+ - static struct platform_device *devices[] __initdata = { - &a780_pcap_device, - &a780_emu_device, -@@ -256,6 +308,7 @@ - - set_pxa_fb_info(&a780_fb_info); - pxa_set_mci_info(&a780_mci_platform_data); -+ pxa_set_kbd_info(&a780_kbd_platform_data); - - /* clear EMU MUX1/MUX2 (low) to close the audio path to EMU */ - pxa_gpio_mode(GPIO_EMU_MUX1|GPIO_OUT); diff --git a/packages/linux/linux-ezx-2.6.23/patches/a780-leds.patch b/packages/linux/linux-ezx-2.6.23/patches/a780-leds.patch deleted file mode 100644 index 94aae070ae..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/a780-leds.patch +++ /dev/null @@ -1,187 +0,0 @@ - -# -# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher -# - -Index: linux-2.6.23/drivers/leds/Kconfig -=================================================================== ---- linux-2.6.23.orig/drivers/leds/Kconfig 2007-10-23 19:35:34.000000000 +0200 -+++ linux-2.6.23/drivers/leds/Kconfig 2007-10-23 19:38:13.000000000 +0200 -@@ -110,6 +110,13 @@ - These triggers allow kernel events to drive the LEDs and can - be configured via sysfs. If unsure, say Y. - -+config LEDS_A780 -+ tristate "LED Support for the Motorola A780 GSM Phone" -+ depends LEDS_CLASS && PXA_EZX_A780 -+ help -+ This option enables support for the LEDs on the -+ Motorola A780 GSM Phone. -+ - config LEDS_TRIGGER_TIMER - tristate "LED Timer Trigger" - depends on LEDS_TRIGGERS -Index: linux-2.6.23/drivers/leds/Makefile -=================================================================== ---- linux-2.6.23.orig/drivers/leds/Makefile 2007-10-23 19:35:34.000000000 +0200 -+++ linux-2.6.23/drivers/leds/Makefile 2007-10-23 19:38:13.000000000 +0200 -@@ -17,6 +17,7 @@ - obj-$(CONFIG_LEDS_H1940) += leds-h1940.o - obj-$(CONFIG_LEDS_COBALT) += leds-cobalt.o - obj-$(CONFIG_LEDS_GPIO) += leds-gpio.o -+obj-$(CONFIG_LEDS_A780) += leds-a780.o - - # LED Triggers - obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o -Index: linux-2.6.23/drivers/leds/leds-a780.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/drivers/leds/leds-a780.c 2007-10-23 19:38:09.000000000 +0200 -@@ -0,0 +1,122 @@ -+/* -+ * EZX Platform LED Driver for the Motorola A780 GSM Phone -+ * -+ * Copyright 2006 Vanille-Media -+ * -+ * Author: Michael Lauer <mickey@Vanille.de> -+ * -+ * Based on keylight.c by Motorola and leds-corgi.c by Richard Purdie -+ * -+ * 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/kernel.h> -+#include <linux/platform_device.h> -+#include <linux/leds.h> -+#include <asm/arch/ezx-pcap.h> -+ -+static void a780led_main_set(struct led_classdev *led_cdev, enum led_brightness value) -+{ -+ if ( value > 31 ) value = 31; -+ printk( KERN_DEBUG "a780led_main_set: %d\n", value ); -+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL_CTRL0, value & 0x01); -+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL_CTRL1, value & 0x02); -+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL_CTRL2, value & 0x04); -+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL_CTRL3, value & 0x08); -+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL_CTRL4, value & 0x10); -+} -+ -+static void a780led_aux_set(struct led_classdev *led_cdev, enum led_brightness value) -+{ -+ if ( value > 31 ) value = 31; -+ printk( KERN_DEBUG "a780led_aux_set: %d\n", value ); -+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL2_CTRL0, value & 0x01); -+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL2_CTRL1, value & 0x02); -+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL2_CTRL2, value & 0x04); -+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL2_CTRL3, value & 0x08); -+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL2_CTRL4, value & 0x10); -+} -+ -+static struct led_classdev a780_main_led = { -+ .name = "a780:main", -+ .default_trigger = "none", -+ .brightness_set = a780led_main_set, -+}; -+ -+static struct led_classdev a780_aux_led = { -+ .name = "a780:aux", -+ .default_trigger = "none", -+ .brightness_set = a780led_aux_set, -+}; -+ -+#ifdef CONFIG_PM -+static int a780led_suspend(struct platform_device *dev, pm_message_t state) -+{ -+ led_classdev_suspend(&a780_main_led); -+ led_classdev_suspend(&a780_aux_led); -+ return 0; -+} -+ -+static int a780led_resume(struct platform_device *dev) -+{ -+ led_classdev_resume(&a780_main_led); -+ led_classdev_resume(&a780_aux_led); -+ return 0; -+} -+#endif -+ -+static int a780led_probe(struct platform_device *pdev) -+{ -+ int ret; -+ -+ ret = led_classdev_register(&pdev->dev, &a780_main_led); -+ if (ret < 0) -+ return ret; -+ -+ ret = led_classdev_register(&pdev->dev, &a780_aux_led); -+ if (ret < 0) -+ led_classdev_unregister(&a780_main_led); -+ -+ return ret; -+} -+ -+static int a780led_remove(struct platform_device *pdev) -+{ -+ led_classdev_unregister(&a780_main_led); -+ led_classdev_unregister(&a780_aux_led); -+ return 0; -+} -+ -+static struct platform_driver a780led_driver = { -+ .probe = a780led_probe, -+ .remove = a780led_remove, -+#ifdef CONFIG_PM -+ .suspend = a780led_suspend, -+ .resume = a780led_resume, -+#endif -+ .driver = { -+ .name = "a780-led", -+ }, -+}; -+ -+static int __init a780led_init(void) -+{ -+ return platform_driver_register(&a780led_driver); -+} -+ -+static void __exit a780led_exit(void) -+{ -+ a780led_main_set( &a780_main_led, 0 ); -+ a780led_aux_set( &a780_aux_led, 0 ); -+ platform_driver_unregister(&a780led_driver); -+} -+ -+module_init(a780led_init); -+module_exit(a780led_exit); -+ -+MODULE_AUTHOR("Michael Lauer <mickey@Vanille.de>"); -+MODULE_DESCRIPTION("Motorola A780 LED driver"); -+MODULE_LICENSE("GPL"); -Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:38:04.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:38:09.000000000 +0200 -@@ -334,12 +334,20 @@ - }, - }; - -+static struct platform_device a780led_device = { -+ .name = "a780-led", -+ .id = -1, -+ .dev = { -+ .parent = &a780_pcap_device.dev, -+ }, -+}; - - static struct platform_device *devices[] __initdata = { - &a780_pcap_device, - &a780_emu_device, - &pcap_ts_device, - &a780flip_device, -+ &a780led_device, - }; - - static void __init a780_init(void) diff --git a/packages/linux/linux-ezx-2.6.23/patches/a780-mci.patch b/packages/linux/linux-ezx-2.6.23/patches/a780-mci.patch deleted file mode 100644 index 1e427b33f9..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/a780-mci.patch +++ /dev/null @@ -1,125 +0,0 @@ -Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 12:38:08.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 12:44:42.000000000 +0200 -@@ -14,6 +14,9 @@ - #include <linux/init.h> - #include <linux/platform_device.h> - #include <linux/fb.h> -+#include <linux/mmc/host.h> -+#include <linux/irq.h> -+#include <linux/log2.h> - - #include <asm/mach-types.h> - #include <asm/mach/arch.h> -@@ -21,12 +24,102 @@ - #include <asm/arch/pxafb.h> - #include <asm/arch/ezx.h> - #include <asm/arch/ezx-pcap.h> -+#include <asm/arch/mmc.h> - - #include "generic.h" - - extern void ezx_lcd_power(int, struct fb_var_screeninfo *); - extern void ezx_backlight_power(int); - -+#ifdef CONFIG_EZX_PCAP -+extern int ezx_pcap_mmcsd_power(int); -+extern void ezx_pcap_mmcsd_voltage(u_int32_t); -+#else -+#define ezx_pcap_mmcsd_voltage(x) {} -+#define ezx_pcap_mmcsd_power(x) {} -+#endif -+ -+static struct pxamci_platform_data a780_mci_platform_data; -+ -+static u_int8_t mmc_voltage[] = { -+ [ilog2(MMC_VDD_165_195)] = 6, -+ [ilog2(MMC_VDD_20_21)] = 7, -+ [ilog2(MMC_VDD_21_22)] = 8, -+ [ilog2(MMC_VDD_22_23)] = 8, -+ [ilog2(MMC_VDD_23_24)] = 9, -+ [ilog2(MMC_VDD_24_25)] = 9, -+ [ilog2(MMC_VDD_25_26)] = 10, -+ [ilog2(MMC_VDD_26_27)] = 10, -+ [ilog2(MMC_VDD_27_28)] = 11, -+ [ilog2(MMC_VDD_28_29)] = 11, -+ [ilog2(MMC_VDD_29_30)] = 12, -+ [ilog2(MMC_VDD_30_31)] = 12, -+ [ilog2(MMC_VDD_31_32)] = 13, -+ [ilog2(MMC_VDD_32_33)] = 13, -+ [ilog2(MMC_VDD_33_34)] = 14, -+ [ilog2(MMC_VDD_34_35)] = 14, -+ [ilog2(MMC_VDD_35_36)] = 15, -+}; -+ -+static int a780_mci_init(struct device *dev, -+ irqreturn_t (*ezx_detect_int)(int, void *), -+ void *data) -+{ -+ int err; -+ -+ /* Setup GPIO for PXA27x MMC/SD controller */ -+ pxa_gpio_mode(GPIO32_MMCCLK_MD); -+ pxa_gpio_mode(GPIO112_MMCCMD_MD); -+ pxa_gpio_mode(GPIO92_MMCDAT0_MD); -+ pxa_gpio_mode(GPIO109_MMCDAT1_MD); -+ pxa_gpio_mode(GPIO110_MMCDAT2_MD); -+ pxa_gpio_mode(GPIO111_MMCDAT3_MD); -+ -+ ezx_pcap_mmcsd_power(1); -+ -+ a780_mci_platform_data.detect_delay = msecs_to_jiffies(250); -+ -+ err = request_irq(0x49, ezx_detect_int, IRQF_DISABLED, -+ "MMC card detect", data); -+ if (err) { -+ printk(KERN_ERR "ezx_mci_detect: MMC/SD: can't request " -+ "MMC card detect IRQ\n"); -+ return -1; -+ } -+ -+ set_irq_type(0x0b, IRQT_BOTHEDGE); -+ -+ return 0; -+} -+ -+static void a780_mci_setpower(struct device *dev, unsigned int vdd) -+{ -+ struct pxamci_platform_data* p_d = dev->platform_data; -+ -+ if (( 1 << vdd) & p_d->ocr_mask) -+ ezx_pcap_mmcsd_voltage(mmc_voltage[vdd]); -+ -+ ezx_pcap_mmcsd_power(1); -+} -+ -+static void a780_mci_exit(struct device *dev, void *data) -+{ -+ ezx_pcap_mmcsd_power(0); -+ free_irq(0x49, data); -+} -+ -+static struct pxamci_platform_data a780_mci_platform_data = { -+ .ocr_mask = MMC_VDD_165_195|MMC_VDD_20_21|MMC_VDD_21_22 -+ |MMC_VDD_22_23|MMC_VDD_23_24|MMC_VDD_24_25 -+ |MMC_VDD_25_26|MMC_VDD_26_27|MMC_VDD_27_28 -+ |MMC_VDD_28_29|MMC_VDD_29_30|MMC_VDD_30_31 -+ |MMC_VDD_31_32|MMC_VDD_32_33|MMC_VDD_33_34 -+ |MMC_VDD_34_35|MMC_VDD_35_36, -+ .init = a780_mci_init, -+ .setpower = a780_mci_setpower, -+ .exit = a780_mci_exit, -+}; -+ - static struct pxafb_mode_info mode_a780 = { - .pixclock = 150000, - .xres = 240, -@@ -137,6 +230,7 @@ - PSLR = 0x05800f00; - - set_pxa_fb_info(&a780_fb_info); -+ pxa_set_mci_info(&a780_mci_platform_data); - - /* clear EMU MUX1/MUX2 (low) to close the audio path to EMU */ - pxa_gpio_mode(GPIO_EMU_MUX1|GPIO_OUT); diff --git a/packages/linux/linux-ezx-2.6.23/patches/a780-pcap.patch b/packages/linux/linux-ezx-2.6.23/patches/a780-pcap.patch deleted file mode 100644 index afb5d9c005..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/a780-pcap.patch +++ /dev/null @@ -1,90 +0,0 @@ -Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c -=================================================================== ---- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-a780.c 2007-08-31 22:33:03.000000000 -0300 -+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c 2007-08-31 23:01:17.000000000 -0300 -@@ -20,6 +20,7 @@ - #include <asm/arch/pxa-regs.h> - #include <asm/arch/pxafb.h> - #include <asm/arch/ezx.h> -+#include <asm/arch/ezx-pcap.h> - - #include "generic.h" - -@@ -49,7 +50,77 @@ - .pxafb_lcd_power = &ezx_lcd_power, - }; - -+/* PCAP */ -+static int __init a780_pcap_init(void) -+{ -+ /* initialize PCAP registers */ -+ /* set SW1 sleep to keep SW1 1.3v in sync mode */ -+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE10, 0); -+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE11, 0); -+ -+ /* SW1 active in sync mode */ -+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE00, 1); -+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE01, 0); -+ -+ /* at SW1 -core voltage to 1.30V */ -+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW10_DVS, 1); -+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW11_DVS, 1); -+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW12_DVS, 1); -+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW13_DVS, 0); -+ -+ /* when STANDY2 PIN ACTIVE (high) set V3-- sram V8 -- pll off */ -+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V3_STBY, 1); -+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V3_LOWPWR, 0); -+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V8_STBY, 1); -+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V8_LOWPWR, 0); -+ -+ /* -+ * when STANDY2 PIN ACTIVE (high) set V4-- lcd only for e680 V6 --- -+ * camera for e680 -+ */ -+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V4_STBY, 1); -+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V4_LOWPWR, 1); -+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V6_STBY, 1); -+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V6_LOWPWR, 0); -+ -+ /* set Vc to low power mode when AP sleep */ -+// SSP_PCAP_bit_set(PCAP_BIT_LOWPWR_CTRL_VC_STBY); -+ -+ /* set VAUX2 to low power mode when AP sleep */ -+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_VAUX2_STBY, 1); -+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_VAUX2_LOWPWR, 1); -+ -+ return 0; -+} -+ -+static struct pcap_platform_data a780_pcap_platform_data = { -+ .port = 1, -+ .cs = GPIO_SPI_CE, -+ .flags = PCAP_MCI_TF, -+ .clk = 1, -+ .init = a780_pcap_init, -+}; -+ -+static struct resource a780_pcap_resources[] = { -+ [0] = { -+ .start = IRQ_GPIO1, -+ .end = IRQ_GPIO1, -+ .flags = IORESOURCE_IRQ, -+ }, -+}; -+ -+struct platform_device a780_pcap_device = { -+ .name = "ezx-pcap", -+ .id = -1, -+ .num_resources = ARRAY_SIZE(a780_pcap_resources), -+ .resource = a780_pcap_resources, -+ .dev = { -+ .platform_data = &a780_pcap_platform_data, -+ }, -+}; -+ - static struct platform_device *devices[] __initdata = { -+ &a780_pcap_device, - }; - - static void __init a780_init(void) diff --git a/packages/linux/linux-ezx-2.6.23/patches/a780-ts.patch b/packages/linux/linux-ezx-2.6.23/patches/a780-ts.patch deleted file mode 100644 index e1dd6ca5c6..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/a780-ts.patch +++ /dev/null @@ -1,39 +0,0 @@ -Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:37:43.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:37:58.000000000 +0200 -@@ -288,9 +288,34 @@ - }, - }; - -+/* PCAP_TS */ -+struct resource pcap_ts_resources[] = { -+ [0] = { -+ .start = EZX_IRQ_ADCDONE2, -+ .end = EZX_IRQ_ADCDONE2, -+ .flags = IORESOURCE_IRQ, -+ }, -+ [1] = { -+ .start = EZX_IRQ_TS, -+ .end = EZX_IRQ_TS, -+ .flags = IORESOURCE_IRQ, -+ } -+}; -+ -+struct platform_device pcap_ts_device = { -+ .name = "pcap-ts", -+ .id = -1, -+ .dev = { -+ .parent = &a780_pcap_device.dev, -+ }, -+ .num_resources = ARRAY_SIZE(pcap_ts_resources), -+ .resource = pcap_ts_resources, -+}; -+ - static struct platform_device *devices[] __initdata = { - &a780_pcap_device, - &a780_emu_device, -+ &pcap_ts_device, - }; - - static void __init a780_init(void) diff --git a/packages/linux/linux-ezx-2.6.23/patches/a780-vibrator.patch b/packages/linux/linux-ezx-2.6.23/patches/a780-vibrator.patch deleted file mode 100644 index f9fe614af6..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/a780-vibrator.patch +++ /dev/null @@ -1,102 +0,0 @@ -Index: linux-2.6.23/drivers/leds/leds-a780.c -=================================================================== ---- linux-2.6.23.orig/drivers/leds/leds-a780.c 2007-10-22 22:26:07.000000000 +0200 -+++ linux-2.6.23/drivers/leds/leds-a780.c 2007-10-22 22:26:46.000000000 +0200 -@@ -40,6 +40,17 @@ - ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL2_CTRL4, value & 0x10); - } - -+static void a780vibrator_set(struct led_classdev *led_cdev, enum led_brightness value) -+{ -+ if (value > 4) value = 4; -+ printk( KERN_DEBUG "a780vibrator_set: %d\n", value ); -+ ezx_pcap_vibrator_level(value-1); -+ if (value == 0) -+ ezx_pcap_bit_set(PCAP_BIT_AUXVREG_V_VIB_EN, 0); -+ else -+ ezx_pcap_bit_set(PCAP_BIT_AUXVREG_V_VIB_EN, 1); -+} -+ - static struct led_classdev a780_main_led = { - .name = "a780:main", - .default_trigger = "none", -@@ -52,11 +63,18 @@ - .brightness_set = a780led_aux_set, - }; - -+static struct led_classdev a780_vibrator = { -+ .name = "a780:vibrator", -+ .default_trigger = "none", -+ .brightness_set = a780vibrator_set, -+}; -+ - #ifdef CONFIG_PM - static int a780led_suspend(struct platform_device *dev, pm_message_t state) - { - led_classdev_suspend(&a780_main_led); - led_classdev_suspend(&a780_aux_led); -+ led_classdev_suspend(&a780_vibrator); - return 0; - } - -@@ -64,6 +82,7 @@ - { - led_classdev_resume(&a780_main_led); - led_classdev_resume(&a780_aux_led); -+ led_classdev_resume(&a780_vibrator); - return 0; - } - #endif -@@ -77,8 +96,16 @@ - return ret; - - ret = led_classdev_register(&pdev->dev, &a780_aux_led); -- if (ret < 0) -+ if (ret < 0) { -+ led_classdev_unregister(&a780_main_led); -+ return ret; -+ } -+ -+ ret = led_classdev_register(&pdev->dev, &a780_vibrator); -+ if (ret < 0) { - led_classdev_unregister(&a780_main_led); -+ led_classdev_unregister(&a780_aux_led); -+ } - - return ret; - } -@@ -87,6 +114,7 @@ - { - led_classdev_unregister(&a780_main_led); - led_classdev_unregister(&a780_aux_led); -+ led_classdev_unregister(&a780_vibrator); - return 0; - } - -@@ -111,6 +139,7 @@ - { - a780led_main_set( &a780_main_led, 0 ); - a780led_aux_set( &a780_aux_led, 0 ); -+ a780vibrator_set( &a780_vibrator, 0 ); - platform_driver_unregister(&a780led_driver); - } - -Index: linux-2.6.23/drivers/leds/Kconfig -=================================================================== ---- linux-2.6.23.orig/drivers/leds/Kconfig 2007-10-22 22:26:42.000000000 +0200 -+++ linux-2.6.23/drivers/leds/Kconfig 2007-10-22 22:26:46.000000000 +0200 -@@ -111,11 +111,11 @@ - be configured via sysfs. If unsure, say Y. - - config LEDS_A780 -- tristate "LED Support for the Motorola A780 GSM Phone" -+ tristate "LED/Vibrator Support for the Motorola A780 GSM Phone" - depends LEDS_CLASS && PXA_EZX_A780 - help -- This option enables support for the LEDs on the -- Motorola A780 GSM Phone. -+ This option enables support for the LEDs and the -+ vibrator on the Motorola A780 GSM Phone. - - config LEDS_E680 - tristate "LED Support for the Motorola E680(i) GSM Phone" diff --git a/packages/linux/linux-ezx-2.6.23/patches/asoc-fix-loopback.patch b/packages/linux/linux-ezx-2.6.23/patches/asoc-fix-loopback.patch deleted file mode 100644 index feea138984..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/asoc-fix-loopback.patch +++ /dev/null @@ -1,14 +0,0 @@ -Index: linux-2.6.21/sound/soc/pxa/pxa2xx-pcm.c -=================================================================== ---- linux-2.6.21.orig/sound/soc/pxa/pxa2xx-pcm.c 2007-09-02 22:30:56.000000000 -0300 -+++ linux-2.6.21/sound/soc/pxa/pxa2xx-pcm.c 2007-09-02 22:36:26.000000000 -0300 -@@ -153,7 +153,8 @@ - static int pxa2xx_pcm_prepare(struct snd_pcm_substream *substream) - { - struct pxa2xx_runtime_data *prtd = substream->runtime->private_data; -- -+ /* no dma if on loopback */ -+ if (!prtd->params) return 0; - DCSR(prtd->dma_ch) &= ~DCSR_RUN; - DCSR(prtd->dma_ch) = 0; - DCMD(prtd->dma_ch) = 0; diff --git a/packages/linux/linux-ezx-2.6.23/patches/asoc-pxa-ssp.patch b/packages/linux/linux-ezx-2.6.23/patches/asoc-pxa-ssp.patch deleted file mode 100644 index e53b61c352..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/asoc-pxa-ssp.patch +++ /dev/null @@ -1,755 +0,0 @@ -Index: linux-2.6.23/sound/soc/pxa/pxa2xx-ssp.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/sound/soc/pxa/pxa2xx-ssp.c 2007-10-22 22:27:11.000000000 +0200 -@@ -0,0 +1,671 @@ -+/* -+ * pxa2xx-ssp.c -- ALSA Soc Audio Layer -+ * -+ * Copyright 2005 Wolfson Microelectronics PLC. -+ * Author: Liam Girdwood -+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License as published by the -+ * Free Software Foundation; either version 2 of the License, or (at your -+ * option) any later version. -+ * -+ * Revision history -+ * 12th Aug 2005 Initial version. -+ * -+ * TODO: -+ * o The SSP driver _mostly_ works, however is in need of testing and -+ * someone with time to complete it. -+ * o Test network mode for > 16bit sample size -+ */ -+ -+#include <linux/init.h> -+#include <linux/module.h> -+#include <linux/platform_device.h> -+ -+#include <sound/driver.h> -+#include <sound/core.h> -+#include <sound/pcm.h> -+#include <sound/initval.h> -+#include <sound/pcm_params.h> -+#include <sound/soc.h> -+ -+#include <asm/hardware.h> -+#include <asm/arch/pxa-regs.h> -+#include <asm/arch/audio.h> -+#include <asm/arch/ssp.h> -+ -+#include "pxa2xx-pcm.h" -+#include "pxa2xx-ssp.h" -+ -+#define PXA_SSP_DEBUG 0 -+ -+/* -+ * The following should be defined in pxa-regs.h -+ */ -+#define SSCR0_ACS (1 << 30) /* Audio Clock Select */ -+#define SSACD_SCDB (1 << 3) /* SSPSYSCLK Divider Bypass (SSCR0[ACS] must be set) */ -+#define SSACD_ACPS(x) (x << 4) /* Audio clock PLL select */ -+#define SSACD_ACDS(x) (x << 0) /* Audio clock divider select */ -+ -+/* -+ * SSP audio private data -+ */ -+struct ssp_priv { -+ unsigned int sysclk; -+}; -+ -+static struct ssp_priv ssp_clk[3]; -+static struct ssp_dev ssp[3]; -+#ifdef CONFIG_PM -+static struct ssp_state ssp_state[3]; -+#endif -+ -+static struct pxa2xx_pcm_dma_params pxa2xx_ssp1_pcm_mono_out = { -+ .name = "SSP1 PCM Mono out", -+ .dev_addr = __PREG(SSDR_P1), -+ .drcmr = &DRCMRTXSSDR, -+ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG | -+ DCMD_BURST16 | DCMD_WIDTH2, -+}; -+ -+static struct pxa2xx_pcm_dma_params pxa2xx_ssp1_pcm_mono_in = { -+ .name = "SSP1 PCM Mono in", -+ .dev_addr = __PREG(SSDR_P1), -+ .drcmr = &DRCMRRXSSDR, -+ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC | -+ DCMD_BURST16 | DCMD_WIDTH2, -+}; -+ -+static struct pxa2xx_pcm_dma_params pxa2xx_ssp1_pcm_stereo_out = { -+ .name = "SSP1 PCM Stereo out", -+ .dev_addr = __PREG(SSDR_P1), -+ .drcmr = &DRCMRTXSSDR, -+ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG | -+ DCMD_BURST16 | DCMD_WIDTH4, -+}; -+ -+static struct pxa2xx_pcm_dma_params pxa2xx_ssp1_pcm_stereo_in = { -+ .name = "SSP1 PCM Stereo in", -+ .dev_addr = __PREG(SSDR_P1), -+ .drcmr = &DRCMRRXSSDR, -+ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC | -+ DCMD_BURST16 | DCMD_WIDTH4, -+}; -+ -+static struct pxa2xx_pcm_dma_params pxa2xx_ssp2_pcm_mono_out = { -+ .name = "SSP2 PCM Mono out", -+ .dev_addr = __PREG(SSDR_P2), -+ .drcmr = &DRCMRTXSS2DR, -+ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG | -+ DCMD_BURST16 | DCMD_WIDTH2, -+}; -+ -+static struct pxa2xx_pcm_dma_params pxa2xx_ssp2_pcm_mono_in = { -+ .name = "SSP2 PCM Mono in", -+ .dev_addr = __PREG(SSDR_P2), -+ .drcmr = &DRCMRRXSS2DR, -+ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC | -+ DCMD_BURST16 | DCMD_WIDTH2, -+}; -+ -+static struct pxa2xx_pcm_dma_params pxa2xx_ssp2_pcm_stereo_out = { -+ .name = "SSP2 PCM Stereo out", -+ .dev_addr = __PREG(SSDR_P2), -+ .drcmr = &DRCMRTXSS2DR, -+ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG | -+ DCMD_BURST16 | DCMD_WIDTH4, -+}; -+ -+static struct pxa2xx_pcm_dma_params pxa2xx_ssp2_pcm_stereo_in = { -+ .name = "SSP2 PCM Stereo in", -+ .dev_addr = __PREG(SSDR_P2), -+ .drcmr = &DRCMRRXSS2DR, -+ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC | -+ DCMD_BURST16 | DCMD_WIDTH4, -+}; -+ -+static struct pxa2xx_pcm_dma_params pxa2xx_ssp3_pcm_mono_out = { -+ .name = "SSP3 PCM Mono out", -+ .dev_addr = __PREG(SSDR_P3), -+ .drcmr = &DRCMRTXSS3DR, -+ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG | -+ DCMD_BURST16 | DCMD_WIDTH2, -+}; -+ -+static struct pxa2xx_pcm_dma_params pxa2xx_ssp3_pcm_mono_in = { -+ .name = "SSP3 PCM Mono in", -+ .dev_addr = __PREG(SSDR_P3), -+ .drcmr = &DRCMRRXSS3DR, -+ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC | -+ DCMD_BURST16 | DCMD_WIDTH2, -+}; -+ -+static struct pxa2xx_pcm_dma_params pxa2xx_ssp3_pcm_stereo_out = { -+ .name = "SSP3 PCM Stereo out", -+ .dev_addr = __PREG(SSDR_P3), -+ .drcmr = &DRCMRTXSS3DR, -+ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG | -+ DCMD_BURST16 | DCMD_WIDTH4, -+}; -+ -+static struct pxa2xx_pcm_dma_params pxa2xx_ssp3_pcm_stereo_in = { -+ .name = "SSP3 PCM Stereo in", -+ .dev_addr = __PREG(SSDR_P3), -+ .drcmr = &DRCMRRXSS3DR, -+ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC | -+ DCMD_BURST16 | DCMD_WIDTH4, -+}; -+ -+static struct pxa2xx_pcm_dma_params *ssp_dma_params[3][4] = { -+ {&pxa2xx_ssp1_pcm_mono_out, &pxa2xx_ssp1_pcm_mono_in, -+ &pxa2xx_ssp1_pcm_stereo_out,&pxa2xx_ssp1_pcm_stereo_in,}, -+ {&pxa2xx_ssp2_pcm_mono_out, &pxa2xx_ssp2_pcm_mono_in, -+ &pxa2xx_ssp2_pcm_stereo_out, &pxa2xx_ssp2_pcm_stereo_in,}, -+ {&pxa2xx_ssp3_pcm_mono_out, &pxa2xx_ssp3_pcm_mono_in, -+ &pxa2xx_ssp3_pcm_stereo_out,&pxa2xx_ssp3_pcm_stereo_in,}, -+}; -+ -+static int pxa2xx_ssp_startup(struct snd_pcm_substream *substream) -+{ -+ struct snd_soc_pcm_runtime *rtd = substream->private_data; -+ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai; -+ int ret = 0; -+ -+ if (!rtd->dai->cpu_dai->active) { -+ ret = ssp_init (&ssp[cpu_dai->id], cpu_dai->id + 1, -+ SSP_NO_IRQ); -+ if (ret < 0) -+ return ret; -+ ssp_disable(&ssp[cpu_dai->id]); -+ } -+ return ret; -+} -+ -+static void pxa2xx_ssp_shutdown(struct snd_pcm_substream *substream) -+{ -+ struct snd_soc_pcm_runtime *rtd = substream->private_data; -+ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai; -+ -+ if (!cpu_dai->active) { -+ ssp_disable(&ssp[cpu_dai->id]); -+ ssp_exit(&ssp[cpu_dai->id]); -+ } -+} -+ -+#if defined (CONFIG_PXA27x) -+static int cken[3] = {CKEN_SSP1, CKEN_SSP2, CKEN_SSP3}; -+#else -+static int cken[3] = {CKEN_SSP, CKEN_NSSP, CKEN_ASSP}; -+#endif -+ -+#ifdef CONFIG_PM -+ -+static int pxa2xx_ssp_suspend(struct platform_device *pdev, -+ struct snd_soc_cpu_dai *dai) -+{ -+ if (!dai->active) -+ return 0; -+ -+ ssp_save_state(&ssp[dai->id], &ssp_state[dai->id]); -+ pxa_set_cken(cken[dai->id], 0); -+ return 0; -+} -+ -+static int pxa2xx_ssp_resume(struct platform_device *pdev, -+ struct snd_soc_cpu_dai *dai) -+{ -+ if (!dai->active) -+ return 0; -+ -+ pxa_set_cken(cken[dai->id], 1); -+ ssp_restore_state(&ssp[dai->id], &ssp_state[dai->id]); -+ ssp_enable(&ssp[dai->id]); -+ -+ return 0; -+} -+ -+#else -+#define pxa2xx_ssp_suspend NULL -+#define pxa2xx_ssp_resume NULL -+#endif -+ -+/* -+ * Set the SSP ports SYSCLK. -+ */ -+static int pxa2xx_ssp_set_dai_sysclk(struct snd_soc_cpu_dai *cpu_dai, -+ int clk_id, unsigned int freq, int dir) -+{ -+ int port = cpu_dai->id + 1; -+ u32 sscr0 = SSCR0_P(port) & -+ ~(SSCR0_ECS | SSCR0_NCS | SSCR0_MOD | SSCR0_ACS); -+ -+ switch (clk_id) { -+ case PXA2XX_SSP_CLK_PLL: -+ /* Internal PLL is fixed on pxa25x and pxa27x */ -+#ifdef CONFIG_PXA27x -+ ssp_clk[cpu_dai->id].sysclk = 13000000; -+#else -+ ssp_clk[cpu_dai->id].sysclk = 1843200; -+#endif -+ break; -+ case PXA2XX_SSP_CLK_EXT: -+ ssp_clk[cpu_dai->id].sysclk = freq; -+ sscr0 |= SSCR0_ECS; -+ break; -+ case PXA2XX_SSP_CLK_NET: -+ ssp_clk[cpu_dai->id].sysclk = freq; -+ sscr0 |= SSCR0_NCS | SSCR0_MOD; -+ break; -+ case PXA2XX_SSP_CLK_AUDIO: -+ ssp_clk[cpu_dai->id].sysclk = 0; -+ SSCR0_P(port) |= SSCR0_SerClkDiv(1); -+ sscr0 |= SSCR0_ACS; -+ break; -+ default: -+ return -ENODEV; -+ } -+ -+ /* the SSP CKEN clock must be disabled when changing SSP clock mode */ -+ pxa_set_cken(cken[cpu_dai->id], 0); -+ SSCR0_P(port) |= sscr0; -+ pxa_set_cken(cken[cpu_dai->id], 1); -+ return 0; -+} -+ -+/* -+ * Set the SSP clock dividers. -+ */ -+static int pxa2xx_ssp_set_dai_clkdiv(struct snd_soc_cpu_dai *cpu_dai, -+ int div_id, int div) -+{ -+ int port = cpu_dai->id + 1; -+ -+ switch (div_id) { -+ case PXA2XX_SSP_AUDIO_DIV_ACDS: -+ SSACD_P(port) &= ~ 0x7; -+ SSACD_P(port) |= SSACD_ACDS(div); -+ break; -+ case PXA2XX_SSP_AUDIO_DIV_SCDB: -+ SSACD_P(port) &= ~0x8; -+ if (div == PXA2XX_SSP_CLK_SCDB_1) -+ SSACD_P(port) |= SSACD_SCDB; -+ break; -+ case PXA2XX_SSP_DIV_SCR: -+ SSCR0_P(port) &= ~SSCR0_SCR; -+ SSCR0_P(port) |= SSCR0_SerClkDiv(div); -+ break; -+ default: -+ return -ENODEV; -+ } -+ -+ return 0; -+} -+ -+/* -+ * Configure the PLL frequency pxa27x and (afaik - pxa320 only) -+ */ -+static int pxa2xx_ssp_set_dai_pll(struct snd_soc_cpu_dai *cpu_dai, -+ int pll_id, unsigned int freq_in, unsigned int freq_out) -+{ -+ int port = cpu_dai->id + 1; -+ -+ SSACD_P(port) &= ~0x70; -+ switch (freq_out) { -+ case 5622000: -+ break; -+ case 11345000: -+ SSACD_P(port) |= (0x1 << 4); -+ break; -+ case 12235000: -+ SSACD_P(port) |= (0x2 << 4); -+ break; -+ case 14857000: -+ SSACD_P(port) |= (0x3 << 4); -+ break; -+ case 32842000: -+ SSACD_P(port) |= (0x4 << 4); -+ break; -+ case 48000000: -+ SSACD_P(port) |= (0x5 << 4); -+ break; -+ } -+ return 0; -+} -+ -+/* -+ * Set the active slots in TDM/Network mode -+ */ -+static int pxa2xx_ssp_set_dai_tdm_slot(struct snd_soc_cpu_dai *cpu_dai, -+ unsigned int mask, int slots) -+{ -+ int port = cpu_dai->id + 1; -+ -+ SSCR0_P(port) &= ~SSCR0_SlotsPerFrm(7); -+ -+ /* set number of active slots */ -+ SSCR0_P(port) |= SSCR0_SlotsPerFrm(slots); -+ -+ /* set active slot mask */ -+ SSTSA_P(port) = mask; -+ SSRSA_P(port) = mask; -+ return 0; -+} -+ -+/* -+ * Tristate the SSP DAI lines -+ */ -+static int pxa2xx_ssp_set_dai_tristate(struct snd_soc_cpu_dai *cpu_dai, -+ int tristate) -+{ -+ int port = cpu_dai->id + 1; -+ -+ if (tristate) -+ SSCR1_P(port) &= ~SSCR1_TTE; -+ else -+ SSCR1_P(port) |= SSCR1_TTE; -+ -+ return 0; -+} -+ -+/* -+ * Set up the SSP DAI format. -+ * The SSP Port must be inactive before calling this function as the -+ * physical interface format is changed. -+ */ -+static int pxa2xx_ssp_set_dai_fmt(struct snd_soc_cpu_dai *cpu_dai, -+ unsigned int fmt) -+{ -+ int port = cpu_dai->id + 1; -+ -+ /* reset port settings */ -+ SSCR0_P(port) = 0; -+ SSCR1_P(port) = 0; -+ SSPSP_P(port) = 0; -+ -+ /* NOTE: I2S emulation is still very much work in progress here */ -+ -+ /* FIXME: this is what wince uses for msb */ -+ if ((fmt & SND_SOC_DAIFMT_FORMAT_MASK) == SND_SOC_DAIFMT_MSB) { -+ SSCR0_P(port) = SSCR0_EDSS | SSCR0_TISSP | SSCR0_DataSize(16); -+ -+// SSCR1_P(port) = SSCR1_RxTresh(8) | SSCR1_TxTresh(8); /* doesn't seem to be needed */ -+ return 0; -+ } -+ -+ /* check for I2S emulation mode - handle it separately */ -+ if (((fmt & SND_SOC_DAIFMT_FORMAT_MASK) == SND_SOC_DAIFMT_I2S) || -+ ((fmt & SND_SOC_DAIFMT_FORMAT_MASK) == SND_SOC_DAIFMT_MSB)) { -+ /* 8.4.11 */ -+ -+ /* Only SSCR0[NCS] or SSCR0[ECS] bit fields settings are optional */ -+ SSCR0_P(port) = SSCR0_EDSS | SSCR0_PSP | SSCR0_DataSize(16); -+ -+ /* SSCR1 = 0x203C3C03 */ -+ /* SSCR1[SCLKDIR] and SSCR1[SFRMDIR] must be cleared (master only ???), -+ * all other bit fields settings are optional. */ -+ //SSCR1_P(port) &= ~(SSCR1_SCLKDIR | SSCR1_SFRMDIR); -+ -+ /* set FIFO thresholds */ -+ SSCR1_P(port) = SSCR1_RxTresh(14) | SSCR1_TxTresh(1); -+ -+ /* normal: */ -+ /* all bit fields must be cleared except: FSRT = 1 and -+ * SFRMWDTH = 16, DMYSTART=0,1) */ -+ SSPSP_P(port) = SSPSP_FSRT | SSPSP_SFRMWDTH(16) | SSPSP_DMYSTRT(0); -+ return 0; -+ } -+ -+ SSCR0_P(port) |= SSCR0_PSP; -+ SSCR1_P(port) = SSCR1_RxTresh(14) | SSCR1_TxTresh(1) | -+ SSCR1_TRAIL | SSCR1_RWOT; -+ -+ switch(fmt & SND_SOC_DAIFMT_MASTER_MASK) { -+ case SND_SOC_DAIFMT_CBM_CFM: -+ SSCR1_P(port) |= (SSCR1_SCLKDIR | SSCR1_SFRMDIR); -+ break; -+ case SND_SOC_DAIFMT_CBM_CFS: -+ SSCR1_P(port) |= SSCR1_SCLKDIR; -+ break; -+ case SND_SOC_DAIFMT_CBS_CFM: -+ SSCR1_P(port) |= SSCR1_SFRMDIR; -+ break; -+ case SND_SOC_DAIFMT_CBS_CFS: -+ break; -+ default: -+ return -EINVAL; -+ } -+ -+ switch (fmt & SND_SOC_DAIFMT_INV_MASK) { -+ case SND_SOC_DAIFMT_NB_NF: -+ SSPSP_P(port) |= SSPSP_SFRMP | SSPSP_FSRT; -+ break; -+ case SND_SOC_DAIFMT_IB_IF: -+ break; -+ default: -+ return -EINVAL; -+ } -+ -+ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { -+ case SND_SOC_DAIFMT_DSP_A: -+ SSPSP_P(port) |= SSPSP_DMYSTRT(1); -+ case SND_SOC_DAIFMT_DSP_B: -+ SSPSP_P(port) |= SSPSP_SCMODE(2); -+ break; -+ case SND_SOC_DAIFMT_I2S: -+ case SND_SOC_DAIFMT_MSB: -+ /* handled above */ -+ break; -+ default: -+ return -EINVAL; -+ } -+ -+ return 0; -+} -+ -+/* -+ * Set the SSP audio DMA parameters and sample size. -+ * Can be called multiple times by oss emulation. -+ */ -+static int pxa2xx_ssp_hw_params(struct snd_pcm_substream *substream, -+ struct snd_pcm_hw_params *params) -+{ -+ struct snd_soc_pcm_runtime *rtd = substream->private_data; -+ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai; -+ int dma = 0, chn = params_channels(params); -+ int port = cpu_dai->id + 1; -+ -+ /* select correct DMA params */ -+ if (substream->stream != SNDRV_PCM_STREAM_PLAYBACK) -+ dma = 1; /* capture DMA offset is 1,3 */ -+ if (chn == 2) -+ dma += 2; /* stereo DMA offset is 2, mono is 0 */ -+ cpu_dai->dma_data = ssp_dma_params[cpu_dai->id][dma]; -+ -+ /* we can only change the settings if the port is not in use */ -+ if (SSCR0_P(port) & SSCR0_SSE) -+ return 0; -+ -+ /* clear selected SSP bits */ -+ SSCR0_P(port) &= ~(SSCR0_DSS | SSCR0_EDSS); -+ -+ /* bit size */ -+ switch(params_format(params)) { -+ case SNDRV_PCM_FORMAT_S16_LE: -+ SSCR0_P(port) |= SSCR0_DataSize(16); -+ break; -+ case SNDRV_PCM_FORMAT_S24_LE: -+ SSCR0_P(port) |=(SSCR0_EDSS | SSCR0_DataSize(8)); -+ /* we must be in network mode (2 slots) for 24 bit stereo */ -+ break; -+ case SNDRV_PCM_FORMAT_S32_LE: -+ SSCR0_P(port) |= (SSCR0_EDSS | SSCR0_DataSize(16)); -+ /* we must be in network mode (2 slots) for 32 bit stereo */ -+ break; -+ } -+ -+#if PXA_SSP_DEBUG -+ printk("SSCR0 %x SSCR1 %x SSTO %x SSPSP %x SSSR %x SSACD %x\n", -+ SSCR0_P(port), SSCR1_P(port), -+ SSTO_P(port), SSPSP_P(port), -+ SSSR_P(port), SSACD_P(port)); -+#endif -+ return 0; -+} -+ -+static int pxa2xx_ssp_trigger(struct snd_pcm_substream *substream, int cmd) -+{ -+ struct snd_soc_pcm_runtime *rtd = substream->private_data; -+ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai; -+ int ret = 0; -+ int port = cpu_dai->id + 1; -+ -+ switch (cmd) { -+ case SNDRV_PCM_TRIGGER_RESUME: -+ ssp_enable(&ssp[cpu_dai->id]); -+ break; -+ case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: -+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) -+ SSCR1_P(port) |= SSCR1_TSRE; -+ else -+ SSCR1_P(port) |= SSCR1_RSRE; -+ SSSR_P(port) |= SSSR_P(port); -+ break; -+ case SNDRV_PCM_TRIGGER_START: -+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) -+ SSCR1_P(port) |= SSCR1_TSRE; -+ else -+ SSCR1_P(port) |= SSCR1_RSRE; -+ ssp_enable(&ssp[cpu_dai->id]); -+ break; -+ case SNDRV_PCM_TRIGGER_STOP: -+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) -+ SSCR1_P(port) &= ~SSCR1_TSRE; -+ else -+ SSCR1_P(port) &= ~SSCR1_RSRE; -+ break; -+ case SNDRV_PCM_TRIGGER_SUSPEND: -+ ssp_disable(&ssp[cpu_dai->id]); -+ break; -+ case SNDRV_PCM_TRIGGER_PAUSE_PUSH: -+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) -+ SSCR1_P(port) &= ~SSCR1_TSRE; -+ else -+ SSCR1_P(port) &= ~SSCR1_RSRE; -+ break; -+ -+ default: -+ ret = -EINVAL; -+ } -+#if PXA_SSP_DEBUG -+ printk("trig cmd %d\n", cmd); -+ printk("SSCR0 %x SSCR1 %x SSTO %x SSPSP %x SSSR %x\n", -+ SSCR0_P(port), SSCR1_P(port), -+ SSTO_P(port), SSPSP_P(port), -+ SSSR_P(port)); -+#endif -+ return ret; -+} -+ -+#define PXA2XX_SSP_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |\ -+ SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_44100 | \ -+ SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000) -+ -+#define PXA2XX_SSP_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\ -+ SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE) -+ -+struct snd_soc_cpu_dai pxa_ssp_dai[] = { -+ { .name = "pxa2xx-ssp1", -+ .id = 0, -+ .type = SND_SOC_DAI_PCM, -+ .suspend = pxa2xx_ssp_suspend, -+ .resume = pxa2xx_ssp_resume, -+ .playback = { -+ .channels_min = 1, -+ .channels_max = 2, -+ .rates = PXA2XX_SSP_RATES, -+ .formats = PXA2XX_SSP_FORMATS,}, -+ .capture = { -+ .channels_min = 1, -+ .channels_max = 2, -+ .rates = PXA2XX_SSP_RATES, -+ .formats = PXA2XX_SSP_FORMATS,}, -+ .ops = { -+ .startup = pxa2xx_ssp_startup, -+ .shutdown = pxa2xx_ssp_shutdown, -+ .trigger = pxa2xx_ssp_trigger, -+ .hw_params = pxa2xx_ssp_hw_params,}, -+ .dai_ops = { -+ .set_sysclk = pxa2xx_ssp_set_dai_sysclk, -+ .set_clkdiv = pxa2xx_ssp_set_dai_clkdiv, -+ .set_pll = pxa2xx_ssp_set_dai_pll, -+ .set_fmt = pxa2xx_ssp_set_dai_fmt, -+ .set_tdm_slot = pxa2xx_ssp_set_dai_tdm_slot, -+ .set_tristate = pxa2xx_ssp_set_dai_tristate, -+ }, -+ }, -+ { .name = "pxa2xx-ssp2", -+ .id = 1, -+ .type = SND_SOC_DAI_PCM, -+ .suspend = pxa2xx_ssp_suspend, -+ .resume = pxa2xx_ssp_resume, -+ .playback = { -+ .channels_min = 1, -+ .channels_max = 2, -+ .rates = PXA2XX_SSP_RATES, -+ .formats = PXA2XX_SSP_FORMATS,}, -+ .capture = { -+ .channels_min = 1, -+ .channels_max = 2, -+ .rates = PXA2XX_SSP_RATES, -+ .formats = PXA2XX_SSP_FORMATS,}, -+ .ops = { -+ .startup = pxa2xx_ssp_startup, -+ .shutdown = pxa2xx_ssp_shutdown, -+ .trigger = pxa2xx_ssp_trigger, -+ .hw_params = pxa2xx_ssp_hw_params,}, -+ .dai_ops = { -+ .set_sysclk = pxa2xx_ssp_set_dai_sysclk, -+ .set_clkdiv = pxa2xx_ssp_set_dai_clkdiv, -+ .set_pll = pxa2xx_ssp_set_dai_pll, -+ .set_fmt = pxa2xx_ssp_set_dai_fmt, -+ .set_tdm_slot = pxa2xx_ssp_set_dai_tdm_slot, -+ .set_tristate = pxa2xx_ssp_set_dai_tristate, -+ }, -+ }, -+ { .name = "pxa2xx-ssp3", -+ .id = 2, -+ .type = SND_SOC_DAI_PCM, -+ .suspend = pxa2xx_ssp_suspend, -+ .resume = pxa2xx_ssp_resume, -+ .playback = { -+ .channels_min = 1, -+ .channels_max = 2, -+ .rates = PXA2XX_SSP_RATES, -+ .formats = PXA2XX_SSP_FORMATS,}, -+ .capture = { -+ .channels_min = 1, -+ .channels_max = 2, -+ .rates = PXA2XX_SSP_RATES, -+ .formats = PXA2XX_SSP_FORMATS,}, -+ .ops = { -+ .startup = pxa2xx_ssp_startup, -+ .shutdown = pxa2xx_ssp_shutdown, -+ .trigger = pxa2xx_ssp_trigger, -+ .hw_params = pxa2xx_ssp_hw_params,}, -+ .dai_ops = { -+ .set_sysclk = pxa2xx_ssp_set_dai_sysclk, -+ .set_clkdiv = pxa2xx_ssp_set_dai_clkdiv, -+ .set_pll = pxa2xx_ssp_set_dai_pll, -+ .set_fmt = pxa2xx_ssp_set_dai_fmt, -+ .set_tdm_slot = pxa2xx_ssp_set_dai_tdm_slot, -+ .set_tristate = pxa2xx_ssp_set_dai_tristate, -+ }, -+ }, -+}; -+EXPORT_SYMBOL_GPL(pxa_ssp_dai); -+ -+/* Module information */ -+MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com"); -+MODULE_DESCRIPTION("pxa2xx SSP/PCM SoC Interface"); -+MODULE_LICENSE("GPL"); -Index: linux-2.6.23/sound/soc/pxa/pxa2xx-ssp.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/sound/soc/pxa/pxa2xx-ssp.h 2007-10-22 22:27:11.000000000 +0200 -@@ -0,0 +1,42 @@ -+/* -+ * linux/sound/arm/pxa2xx-ssp.h -+ * -+ * 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. -+ */ -+ -+#ifndef _PXA2XX_SSP_H -+#define _PXA2XX_SSP_H -+ -+/* pxa2xx DAI SSP ID's */ -+#define PXA2XX_DAI_SSP1 0 -+#define PXA2XX_DAI_SSP2 1 -+#define PXA2XX_DAI_SSP3 2 -+ -+/* SSP clock sources */ -+#define PXA2XX_SSP_CLK_PLL 0 -+#define PXA2XX_SSP_CLK_EXT 1 -+#define PXA2XX_SSP_CLK_NET 2 -+#define PXA2XX_SSP_CLK_AUDIO 3 -+ -+/* SSP audio dividers */ -+#define PXA2XX_SSP_AUDIO_DIV_ACDS 0 -+#define PXA2XX_SSP_AUDIO_DIV_SCDB 1 -+#define PXA2XX_SSP_DIV_SCR 2 -+ -+/* SSP ACDS audio dividers values */ -+#define PXA2XX_SSP_CLK_AUDIO_DIV_1 0 -+#define PXA2XX_SSP_CLK_AUDIO_DIV_2 1 -+#define PXA2XX_SSP_CLK_AUDIO_DIV_4 2 -+#define PXA2XX_SSP_CLK_AUDIO_DIV_8 3 -+#define PXA2XX_SSP_CLK_AUDIO_DIV_16 4 -+#define PXA2XX_SSP_CLK_AUDIO_DIV_32 5 -+ -+/* SSP divider bypass */ -+#define PXA2XX_SSP_CLK_SCDB_4 0 -+#define PXA2XX_SSP_CLK_SCDB_1 1 -+ -+extern struct snd_soc_cpu_dai pxa_ssp_dai[3]; -+ -+#endif -Index: linux-2.6.23/sound/soc/pxa/Kconfig -=================================================================== ---- linux-2.6.23.orig/sound/soc/pxa/Kconfig 2007-10-10 09:38:42.000000000 +0200 -+++ linux-2.6.23/sound/soc/pxa/Kconfig 2007-10-22 22:27:11.000000000 +0200 -@@ -18,6 +18,10 @@ - config SND_PXA2XX_SOC_I2S - tristate - -+config SND_PXA2XX_SOC_SSP -+ tristate -+ select PXA_SSP -+ - config SND_PXA2XX_SOC_CORGI - tristate "SoC Audio support for Sharp Zaurus SL-C7x0" - depends on SND_PXA2XX_SOC && PXA_SHARP_C7xx -Index: linux-2.6.23/sound/soc/pxa/Makefile -=================================================================== ---- linux-2.6.23.orig/sound/soc/pxa/Makefile 2007-10-10 09:38:42.000000000 +0200 -+++ linux-2.6.23/sound/soc/pxa/Makefile 2007-10-22 22:27:11.000000000 +0200 -@@ -2,10 +2,12 @@ - snd-soc-pxa2xx-objs := pxa2xx-pcm.o - snd-soc-pxa2xx-ac97-objs := pxa2xx-ac97.o - snd-soc-pxa2xx-i2s-objs := pxa2xx-i2s.o -+snd-soc-pxa2xx-ssp-objs := pxa2xx-ssp.o - - obj-$(CONFIG_SND_PXA2XX_SOC) += snd-soc-pxa2xx.o - obj-$(CONFIG_SND_PXA2XX_SOC_AC97) += snd-soc-pxa2xx-ac97.o - obj-$(CONFIG_SND_PXA2XX_SOC_I2S) += snd-soc-pxa2xx-i2s.o -+obj-$(CONFIG_SND_PXA2XX_SOC_SSP) += snd-soc-pxa2xx-ssp.o - - # PXA Machine Support - snd-soc-corgi-objs := corgi.o diff --git a/packages/linux/linux-ezx-2.6.23/patches/binutils-buildid-arm.patch b/packages/linux/linux-ezx-2.6.23/patches/binutils-buildid-arm.patch deleted file mode 100644 index 68e35e89e1..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/binutils-buildid-arm.patch +++ /dev/null @@ -1,16 +0,0 @@ ---- - arch/arm/kernel/vmlinux.lds.S | 1 + - 1 file changed, 1 insertion(+) - -Index: linux-2.6.22/arch/arm/kernel/vmlinux.lds.S -=================================================================== ---- linux-2.6.22.orig/arch/arm/kernel/vmlinux.lds.S 2007-09-11 18:32:29.000000000 +0200 -+++ linux-2.6.22/arch/arm/kernel/vmlinux.lds.S 2007-09-11 18:33:42.000000000 +0200 -@@ -94,6 +94,7 @@ - TEXT_TEXT - SCHED_TEXT - LOCK_TEXT -+ *(.note.*) - #ifdef CONFIG_MMU - *(.fixup) - #endif diff --git a/packages/linux/linux-ezx-2.6.23/patches/defconfig-a1200 b/packages/linux/linux-ezx-2.6.23/patches/defconfig-a1200 deleted file mode 100644 index 4649d7ba96..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/defconfig-a1200 +++ /dev/null @@ -1,1208 +0,0 @@ -# -# Automatically generated make config: don't edit -# Linux kernel version: 2.6.23.1 -# Wed Oct 24 18:03:17 2007 -# -CONFIG_ARM=y -CONFIG_SYS_SUPPORTS_APM_EMULATION=y -CONFIG_GENERIC_GPIO=y -CONFIG_GENERIC_TIME=y -CONFIG_GENERIC_CLOCKEVENTS=y -CONFIG_MMU=y -# CONFIG_NO_IOPORT is not set -CONFIG_GENERIC_HARDIRQS=y -CONFIG_STACKTRACE_SUPPORT=y -CONFIG_LOCKDEP_SUPPORT=y -CONFIG_TRACE_IRQFLAGS_SUPPORT=y -CONFIG_HARDIRQS_SW_RESEND=y -CONFIG_GENERIC_IRQ_PROBE=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_ARCH_HAS_ILOG2_U32 is not set -# CONFIG_ARCH_HAS_ILOG2_U64 is not set -CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y -CONFIG_ZONE_DMA=y -CONFIG_ARCH_MTD_XIP=y -CONFIG_VECTORS_BASE=0xffff0000 -CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" - -# -# General setup -# -CONFIG_EXPERIMENTAL=y -CONFIG_BROKEN_ON_SMP=y -CONFIG_LOCK_KERNEL=y -CONFIG_INIT_ENV_ARG_LIMIT=32 -CONFIG_LOCALVERSION="-ezxdev" -# CONFIG_LOCALVERSION_AUTO is not set -# CONFIG_SWAP is not set -CONFIG_SYSVIPC=y -CONFIG_SYSVIPC_SYSCTL=y -# CONFIG_POSIX_MQUEUE is not set -# CONFIG_BSD_PROCESS_ACCT is not set -# CONFIG_TASKSTATS is not set -# CONFIG_USER_NS is not set -# CONFIG_AUDIT is not set -# CONFIG_IKCONFIG is not set -CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_SYSFS_DEPRECATED is not set -# CONFIG_RELAY is not set -# CONFIG_BLK_DEV_INITRD is not set -CONFIG_CC_OPTIMIZE_FOR_SIZE=y -CONFIG_SYSCTL=y -CONFIG_EMBEDDED=y -CONFIG_UID16=y -# CONFIG_SYSCTL_SYSCALL is not set -CONFIG_KALLSYMS=y -# CONFIG_KALLSYMS_EXTRA_PASS is not set -CONFIG_HOTPLUG=y -CONFIG_PRINTK=y -CONFIG_BUG=y -CONFIG_ELF_CORE=y -CONFIG_BASE_FULL=y -CONFIG_FUTEX=y -CONFIG_ANON_INODES=y -CONFIG_EPOLL=y -CONFIG_SIGNALFD=y -CONFIG_EVENTFD=y -CONFIG_SHMEM=y -CONFIG_VM_EVENT_COUNTERS=y -CONFIG_SLAB=y -# CONFIG_SLUB is not set -# CONFIG_SLOB is not set -CONFIG_RT_MUTEXES=y -# CONFIG_TINY_SHMEM is not set -CONFIG_BASE_SMALL=0 -CONFIG_MODULES=y -CONFIG_MODULE_UNLOAD=y -CONFIG_MODULE_FORCE_UNLOAD=y -CONFIG_MODVERSIONS=y -# CONFIG_MODULE_SRCVERSION_ALL is not set -CONFIG_KMOD=y -CONFIG_BLOCK=y -# CONFIG_LBD is not set -# CONFIG_BLK_DEV_IO_TRACE is not set -# CONFIG_LSF is not set -# CONFIG_BLK_DEV_BSG is not set - -# -# IO Schedulers -# -CONFIG_IOSCHED_NOOP=y -# CONFIG_IOSCHED_AS is not set -CONFIG_IOSCHED_DEADLINE=y -# CONFIG_IOSCHED_CFQ is not set -# CONFIG_DEFAULT_AS is not set -CONFIG_DEFAULT_DEADLINE=y -# CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="deadline" - -# -# System Type -# -# CONFIG_ARCH_AAEC2000 is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_REALVIEW is not set -# CONFIG_ARCH_VERSATILE is not set -# CONFIG_ARCH_AT91 is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_EP93XX is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_NETX is not set -# CONFIG_ARCH_H720X is not set -# CONFIG_ARCH_IMX is not set -# CONFIG_ARCH_IOP13XX is not set -# CONFIG_ARCH_IOP32X is not set -# CONFIG_ARCH_IOP33X is not set -# CONFIG_ARCH_IXP23XX is not set -# CONFIG_ARCH_IXP2000 is not set -# CONFIG_ARCH_IXP4XX is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_KS8695 is not set -# CONFIG_ARCH_NS9XXX is not set -# CONFIG_ARCH_MXC is not set -# CONFIG_ARCH_PNX4008 is not set -CONFIG_ARCH_PXA=y -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_S3C2410 is not set -# CONFIG_ARCH_SHARK is not set -# CONFIG_ARCH_LH7A40X is not set -# CONFIG_ARCH_DAVINCI is not set -# CONFIG_ARCH_OMAP is not set - -# -# Intel PXA2xx Implementations -# -# CONFIG_ARCH_LUBBOCK is not set -# CONFIG_MACH_LOGICPD_PXA270 is not set -# CONFIG_MACH_MAINSTONE is not set -# CONFIG_ARCH_PXA_IDP is not set -# CONFIG_PXA_SHARPSL is not set -# CONFIG_MACH_TRIZEPS4 is not set -# CONFIG_MACH_EM_X270 is not set -CONFIG_PXA_EZX=y -# CONFIG_PXA_EZX_E680 is not set -# CONFIG_PXA_EZX_A780 is not set -# CONFIG_PXA_EZX_E2 is not set -CONFIG_PXA_EZX_A1200=y -# CONFIG_PXA_EZX_E6 is not set -# CONFIG_EZX_BP is not set -CONFIG_EZX_PCAP=y -CONFIG_EZX_EOC=y -# CONFIG_EZX_EMU is not set -CONFIG_PXA27x=y -CONFIG_PXA_SSP=y - -# -# Boot options -# - -# -# Power management -# - -# -# Processor Type -# -CONFIG_CPU_32=y -CONFIG_CPU_XSCALE=y -CONFIG_CPU_32v5=y -CONFIG_CPU_ABRT_EV5T=y -CONFIG_CPU_CACHE_VIVT=y -CONFIG_CPU_TLB_V4WBI=y -CONFIG_CPU_CP15=y -CONFIG_CPU_CP15_MMU=y - -# -# Processor Features -# -CONFIG_ARM_THUMB=y -# CONFIG_CPU_DCACHE_DISABLE is not set -# CONFIG_OUTER_CACHE is not set -CONFIG_IWMMXT=y -CONFIG_XSCALE_PMU=y - -# -# Bus support -# -# CONFIG_PCI_SYSCALL is not set -# CONFIG_ARCH_SUPPORTS_MSI is not set - -# -# PCCARD (PCMCIA/CardBus) support -# -# CONFIG_PCCARD is not set - -# -# Kernel Features -# -# CONFIG_TICK_ONESHOT is not set -# CONFIG_NO_HZ is not set -# CONFIG_HIGH_RES_TIMERS is not set -CONFIG_PREEMPT=y -CONFIG_HZ=100 -CONFIG_AEABI=y -# CONFIG_OABI_COMPAT is not set -# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set -CONFIG_SELECT_MEMORY_MODEL=y -CONFIG_FLATMEM_MANUAL=y -# CONFIG_DISCONTIGMEM_MANUAL is not set -# CONFIG_SPARSEMEM_MANUAL is not set -CONFIG_FLATMEM=y -CONFIG_FLAT_NODE_MEM_MAP=y -# CONFIG_SPARSEMEM_STATIC is not set -CONFIG_SPLIT_PTLOCK_CPUS=4096 -# CONFIG_RESOURCES_64BIT is not set -CONFIG_ZONE_DMA_FLAG=1 -CONFIG_BOUNCE=y -CONFIG_VIRT_TO_BUS=y -CONFIG_ALIGNMENT_TRAP=y - -# -# Boot options -# -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000" -# CONFIG_XIP_KERNEL is not set -# CONFIG_KEXEC is not set - -# -# Floating point emulation -# - -# -# At least one emulation must be selected -# - -# -# Userspace binary formats -# -CONFIG_BINFMT_ELF=y -CONFIG_BINFMT_AOUT=m -CONFIG_BINFMT_MISC=m - -# -# Power management options -# -CONFIG_PM=y -# CONFIG_PM_LEGACY is not set -# CONFIG_PM_DEBUG is not set -CONFIG_SUSPEND_UP_POSSIBLE=y -# CONFIG_SUSPEND is not set -CONFIG_APM_EMULATION=y - -# -# Networking -# -CONFIG_NET=y - -# -# Networking options -# -CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set -CONFIG_UNIX=y -# CONFIG_NET_KEY is not set -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_FIB_HASH=y -CONFIG_IP_PNP=y -CONFIG_IP_PNP_DHCP=y -# CONFIG_IP_PNP_BOOTP is not set -# CONFIG_IP_PNP_RARP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_ARPD is not set -CONFIG_SYN_COOKIES=y -# CONFIG_INET_AH is not set -# CONFIG_INET_ESP is not set -# CONFIG_INET_IPCOMP is not set -# CONFIG_INET_XFRM_TUNNEL is not set -# CONFIG_INET_TUNNEL is not set -# CONFIG_INET_XFRM_MODE_TRANSPORT is not set -# CONFIG_INET_XFRM_MODE_TUNNEL is not set -# CONFIG_INET_XFRM_MODE_BEET is not set -# CONFIG_INET_DIAG is not set -# CONFIG_TCP_CONG_ADVANCED is not set -CONFIG_TCP_CONG_CUBIC=y -CONFIG_DEFAULT_TCP_CONG="cubic" -# CONFIG_TCP_MD5SIG is not set -# CONFIG_IPV6 is not set -# CONFIG_INET6_XFRM_TUNNEL is not set -# CONFIG_INET6_TUNNEL is not set -# CONFIG_NETWORK_SECMARK is not set -# CONFIG_NETFILTER is not set -# CONFIG_IP_DCCP is not set -# CONFIG_IP_SCTP is not set -# CONFIG_TIPC is not set -# CONFIG_ATM is not set -# CONFIG_BRIDGE is not set -# CONFIG_VLAN_8021Q is not set -# CONFIG_DECNET is not set -# CONFIG_LLC2 is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network testing -# -# CONFIG_NET_PKTGEN is not set -# CONFIG_HAMRADIO is not set -# CONFIG_IRDA is not set -CONFIG_BT=y -CONFIG_BT_L2CAP=y -CONFIG_BT_SCO=y -CONFIG_BT_RFCOMM=y -CONFIG_BT_RFCOMM_TTY=y -CONFIG_BT_BNEP=y -CONFIG_BT_BNEP_MC_FILTER=y -CONFIG_BT_BNEP_PROTO_FILTER=y -CONFIG_BT_HIDP=y - -# -# Bluetooth device drivers -# -# CONFIG_BT_HCIUSB is not set -CONFIG_BT_HCIUART=y -CONFIG_BT_HCIUART_H4=y -# CONFIG_BT_HCIUART_BCSP is not set -# CONFIG_BT_HCIBCM203X is not set -# CONFIG_BT_HCIBPA10X is not set -# CONFIG_BT_HCIBFUSB is not set -# CONFIG_BT_HCIVHCI is not set -# CONFIG_AF_RXRPC is not set - -# -# Wireless -# -# CONFIG_CFG80211 is not set -# CONFIG_WIRELESS_EXT is not set -# CONFIG_MAC80211 is not set -# CONFIG_IEEE80211 is not set -# CONFIG_RFKILL is not set -# CONFIG_NET_9P is not set - -# -# Device Drivers -# - -# -# Generic Driver Options -# -CONFIG_STANDALONE=y -CONFIG_PREVENT_FIRMWARE_BUILD=y -CONFIG_FW_LOADER=m -# CONFIG_SYS_HYPERVISOR is not set -CONFIG_CONNECTOR=m -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -# CONFIG_MTD_CONCAT is not set -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_REDBOOT_PARTS is not set -# CONFIG_MTD_CMDLINE_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -# CONFIG_MTD_BLKDEVS is not set -# CONFIG_MTD_BLOCK is not set -# CONFIG_MTD_BLOCK_RO is not set -# CONFIG_FTL is not set -# CONFIG_NFTL is not set -# CONFIG_INFTL is not set -# CONFIG_RFD_FTL is not set -# CONFIG_SSFDC is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -CONFIG_MTD_CFI_ADV_OPTIONS=y -CONFIG_MTD_CFI_NOSWAP=y -# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set -# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set -CONFIG_MTD_CFI_GEOMETRY=y -# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set -CONFIG_MTD_MAP_BANK_WIDTH_2=y -# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set -CONFIG_MTD_CFI_I1=y -# CONFIG_MTD_CFI_I2 is not set -# CONFIG_MTD_CFI_I4 is not set -# CONFIG_MTD_CFI_I8 is not set -# CONFIG_MTD_OTP is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_CFI_STAA is not set -CONFIG_MTD_CFI_UTIL=y -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -CONFIG_MTD_XIP=y - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_COMPLEX_MAPPINGS is not set -CONFIG_MTD_PHYSMAP=y -CONFIG_MTD_PHYSMAP_START=0x0 -CONFIG_MTD_PHYSMAP_LEN=0x0 -CONFIG_MTD_PHYSMAP_BANKWIDTH=2 -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_SHARP_SL is not set -CONFIG_MTD_EZX=y -# CONFIG_MTD_EZX_A780 is not set -# CONFIG_MTD_EZX_A780_ALTERNATE is not set -CONFIG_MTD_EZX_A1200=y -# CONFIG_MTD_EZX_E2 is not set -# CONFIG_MTD_EZX_E6 is not set -# CONFIG_MTD_PLATRAM is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_DATAFLASH is not set -# CONFIG_MTD_M25P80 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_PHRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLOCK2MTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOC2001PLUS is not set -# CONFIG_MTD_NAND is not set -# CONFIG_MTD_ONENAND is not set - -# -# UBI - Unsorted block images -# -# CONFIG_MTD_UBI is not set -# CONFIG_PARPORT is not set -CONFIG_BLK_DEV=y -# CONFIG_BLK_DEV_COW_COMMON is not set -CONFIG_BLK_DEV_LOOP=m -# CONFIG_BLK_DEV_CRYPTOLOOP is not set -# CONFIG_BLK_DEV_NBD is not set -# CONFIG_BLK_DEV_UB is not set -# CONFIG_BLK_DEV_RAM is not set -# CONFIG_CDROM_PKTCDVD is not set -# CONFIG_ATA_OVER_ETH is not set -# CONFIG_IDE is not set - -# -# SCSI device support -# -# CONFIG_RAID_ATTRS is not set -# CONFIG_SCSI is not set -# CONFIG_SCSI_DMA is not set -# CONFIG_SCSI_NETLINK is not set -# CONFIG_ATA is not set -# CONFIG_MD is not set -CONFIG_NETDEVICES=y -# CONFIG_NETDEVICES_MULTIQUEUE is not set -CONFIG_DUMMY=y -# CONFIG_BONDING is not set -# CONFIG_MACVLAN is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_NET_ETHERNET is not set -# CONFIG_NETDEV_1000 is not set -# CONFIG_NETDEV_10000 is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set - -# -# USB Network Adapters -# -# CONFIG_USB_CATC is not set -# CONFIG_USB_KAWETH is not set -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_RTL8150 is not set -# CONFIG_USB_USBNET_MII is not set -# CONFIG_USB_USBNET is not set -# CONFIG_WAN is not set -CONFIG_PPP=m -CONFIG_PPP_MULTILINK=y -CONFIG_PPP_FILTER=y -CONFIG_PPP_ASYNC=m -CONFIG_PPP_SYNC_TTY=m -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -# CONFIG_PPP_MPPE is not set -# CONFIG_PPPOE is not set -# CONFIG_PPPOL2TP is not set -# CONFIG_SLIP is not set -CONFIG_SLHC=m -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set -# CONFIG_ISDN is not set - -# -# Input device support -# -CONFIG_INPUT=y -# CONFIG_INPUT_FF_MEMLESS is not set -# CONFIG_INPUT_POLLDEV is not set - -# -# Userland interfaces -# -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -CONFIG_INPUT_TSDEV=y -CONFIG_INPUT_TSDEV_SCREEN_X=240 -CONFIG_INPUT_TSDEV_SCREEN_Y=320 -CONFIG_INPUT_EVDEV=y -# CONFIG_INPUT_EVBUG is not set - -# -# Input Device Drivers -# -CONFIG_INPUT_KEYBOARD=y -# CONFIG_KEYBOARD_ATKBD is not set -# CONFIG_KEYBOARD_SUNKBD is not set -# CONFIG_KEYBOARD_LKKBD is not set -# CONFIG_KEYBOARD_XTKBD is not set -# CONFIG_KEYBOARD_NEWTON is not set -# CONFIG_KEYBOARD_STOWAWAY is not set -# CONFIG_KEYBOARD_PXA27x is not set -CONFIG_KEYBOARD_GPIO=y -CONFIG_KEYBOARD_PXA=y -# CONFIG_INPUT_MOUSE is not set -# CONFIG_INPUT_JOYSTICK is not set -# CONFIG_INPUT_TABLET is not set -CONFIG_INPUT_TOUCHSCREEN=y -# CONFIG_TOUCHSCREEN_ADS7846 is not set -# CONFIG_TOUCHSCREEN_FUJITSU is not set -# CONFIG_TOUCHSCREEN_GUNZE is not set -# CONFIG_TOUCHSCREEN_ELO is not set -# CONFIG_TOUCHSCREEN_MTOUCH is not set -# CONFIG_TOUCHSCREEN_MK712 is not set -# CONFIG_TOUCHSCREEN_PENMOUNT is not set -# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set -# CONFIG_TOUCHSCREEN_TOUCHWIN is not set -# CONFIG_TOUCHSCREEN_UCB1400 is not set -# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set -CONFIG_TOUCHSCREEN_PCAP=y -CONFIG_INPUT_MISC=y -# CONFIG_INPUT_ATI_REMOTE is not set -# CONFIG_INPUT_ATI_REMOTE2 is not set -# CONFIG_INPUT_KEYSPAN_REMOTE is not set -# CONFIG_INPUT_POWERMATE is not set -# CONFIG_INPUT_YEALINK is not set -CONFIG_INPUT_UINPUT=y - -# -# Hardware I/O ports -# -# CONFIG_SERIO is not set -# CONFIG_GAMEPORT is not set - -# -# Character devices -# -CONFIG_VT=y -CONFIG_VT_CONSOLE=y -CONFIG_HW_CONSOLE=y -# CONFIG_VT_HW_CONSOLE_BINDING is not set -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_8250 is not set - -# -# Non-8250 serial port support -# -CONFIG_SERIAL_PXA=y -CONFIG_SERIAL_PXA_CONSOLE=y -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_LEGACY_PTYS=y -CONFIG_LEGACY_PTY_COUNT=8 -# CONFIG_IPMI_HANDLER is not set -# CONFIG_WATCHDOG is not set -CONFIG_HW_RANDOM=y -# CONFIG_NVRAM is not set -# CONFIG_R3964 is not set -# CONFIG_RAW_DRIVER is not set -# CONFIG_TCG_TPM is not set -CONFIG_I2C=y -CONFIG_I2C_BOARDINFO=y -CONFIG_I2C_CHARDEV=y - -# -# I2C Algorithms -# -# CONFIG_I2C_ALGOBIT is not set -# CONFIG_I2C_ALGOPCF is not set -# CONFIG_I2C_ALGOPCA is not set - -# -# I2C Hardware Bus support -# -# CONFIG_I2C_GPIO is not set -CONFIG_I2C_PXA=y -# CONFIG_I2C_PXA_SLAVE is not set -# CONFIG_I2C_OCORES is not set -# CONFIG_I2C_PARPORT_LIGHT is not set -# CONFIG_I2C_SIMTEC is not set -# CONFIG_I2C_TAOS_EVM is not set -# CONFIG_I2C_STUB is not set -# CONFIG_I2C_TINY_USB is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_DS1337 is not set -# CONFIG_SENSORS_DS1374 is not set -# CONFIG_DS1682 is not set -# CONFIG_SENSORS_EEPROM is not set -# CONFIG_SENSORS_PCF8574 is not set -# CONFIG_SENSORS_PCA9539 is not set -# CONFIG_SENSORS_PCF8591 is not set -# CONFIG_SENSORS_MAX6875 is not set -# CONFIG_SENSORS_TSL2550 is not set -# CONFIG_I2C_DEBUG_CORE is not set -# CONFIG_I2C_DEBUG_ALGO is not set -# CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set - -# -# SPI support -# -CONFIG_SPI=y -CONFIG_SPI_MASTER=y - -# -# SPI Master Controller Drivers -# -# CONFIG_SPI_BITBANG is not set -CONFIG_SPI_PXA2XX=m - -# -# SPI Protocol Masters -# -# CONFIG_SPI_AT25 is not set -# CONFIG_SPI_SPIDEV is not set -# CONFIG_SPI_TLE62X0 is not set -# CONFIG_W1 is not set -# CONFIG_HWMON is not set -CONFIG_MISC_DEVICES=y -# CONFIG_EEPROM_93CX6 is not set - -# -# Multifunction device drivers -# -# CONFIG_MFD_SM501 is not set -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y - -# -# LED drivers -# -# CONFIG_LEDS_GPIO is not set - -# -# LED Triggers -# -CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_TIMER=y -CONFIG_LEDS_TRIGGER_HEARTBEAT=y - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_DAB is not set - -# -# Graphics support -# -CONFIG_BACKLIGHT_LCD_SUPPORT=y -# CONFIG_LCD_CLASS_DEVICE is not set -CONFIG_BACKLIGHT_CLASS_DEVICE=y -# CONFIG_BACKLIGHT_EZX is not set - -# -# Display device support -# -# CONFIG_DISPLAY_SUPPORT is not set -# CONFIG_VGASTATE is not set -# CONFIG_VIDEO_OUTPUT_CONTROL is not set -CONFIG_FB=y -# CONFIG_FIRMWARE_EDID is not set -# CONFIG_FB_DDC is not set -CONFIG_FB_CFB_FILLRECT=y -CONFIG_FB_CFB_COPYAREA=y -CONFIG_FB_CFB_IMAGEBLIT=y -# CONFIG_FB_SYS_FILLRECT is not set -# CONFIG_FB_SYS_COPYAREA is not set -# CONFIG_FB_SYS_IMAGEBLIT is not set -# CONFIG_FB_SYS_FOPS is not set -CONFIG_FB_DEFERRED_IO=y -# CONFIG_FB_SVGALIB is not set -# CONFIG_FB_MACMODES is not set -# CONFIG_FB_BACKLIGHT is not set -# CONFIG_FB_MODE_HELPERS is not set -# CONFIG_FB_TILEBLITTING is not set - -# -# Frame buffer hardware drivers -# -# CONFIG_FB_S1D13XXX is not set -CONFIG_FB_PXA=y -CONFIG_FB_PXA_LCD_QVGA=y -# CONFIG_FB_PXA_LCD_VGA is not set -CONFIG_FB_PXA_OVERLAY=y -CONFIG_FB_PXA_PARAMETERS=y -# CONFIG_FB_MBX is not set -# CONFIG_FB_VIRTUAL is not set - -# -# Console display driver support -# -# CONFIG_VGA_CONSOLE is not set -CONFIG_DUMMY_CONSOLE=y -CONFIG_FRAMEBUFFER_CONSOLE=y -# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set -# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set -CONFIG_FONTS=y -# CONFIG_FONT_8x8 is not set -# CONFIG_FONT_8x16 is not set -# CONFIG_FONT_6x11 is not set -# CONFIG_FONT_7x14 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set -CONFIG_FONT_MINI_4x6=y -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_SUN12x22 is not set -# CONFIG_FONT_10x18 is not set -# CONFIG_LOGO is not set - -# -# Sound -# -CONFIG_SOUND=y - -# -# Advanced Linux Sound Architecture -# -CONFIG_SND=y -CONFIG_SND_TIMER=y -CONFIG_SND_PCM=y -# CONFIG_SND_SEQUENCER is not set -CONFIG_SND_OSSEMUL=y -CONFIG_SND_MIXER_OSS=y -CONFIG_SND_PCM_OSS=y -CONFIG_SND_PCM_OSS_PLUGINS=y -# CONFIG_SND_DYNAMIC_MINORS is not set -CONFIG_SND_SUPPORT_OLD_API=y -CONFIG_SND_VERBOSE_PROCFS=y -# CONFIG_SND_VERBOSE_PRINTK is not set -# CONFIG_SND_DEBUG is not set - -# -# Generic devices -# -# CONFIG_SND_DUMMY is not set -# CONFIG_SND_MTPAV is not set -# CONFIG_SND_SERIAL_U16550 is not set -# CONFIG_SND_MPU401 is not set - -# -# ALSA ARM devices -# -# CONFIG_SND_PXA2XX_AC97 is not set - -# -# USB devices -# -# CONFIG_SND_USB_AUDIO is not set -# CONFIG_SND_USB_CAIAQ is not set - -# -# System on Chip audio support -# -CONFIG_SND_SOC=y -CONFIG_SND_PXA2XX_SOC=y -CONFIG_SND_PXA2XX_SOC_SSP=y -CONFIG_SND_PXA2XX_SOC_EZX=y - -# -# SoC Audio support for SuperH -# -CONFIG_SND_SOC_PCAP2=y - -# -# Open Sound System -# -# CONFIG_SOUND_PRIME is not set -CONFIG_HID_SUPPORT=y -CONFIG_HID=y -# CONFIG_HID_DEBUG is not set - -# -# USB Input Devices -# -# CONFIG_USB_HID is not set - -# -# USB HID Boot Protocol drivers -# -# CONFIG_USB_KBD is not set -# CONFIG_USB_MOUSE is not set -CONFIG_USB_SUPPORT=y -CONFIG_USB_ARCH_HAS_HCD=y -CONFIG_USB_ARCH_HAS_OHCI=y -# CONFIG_USB_ARCH_HAS_EHCI is not set -CONFIG_USB=y -# CONFIG_USB_DEBUG is not set - -# -# Miscellaneous USB options -# -# CONFIG_USB_DEVICEFS is not set -# CONFIG_USB_DEVICE_CLASS is not set -# CONFIG_USB_DYNAMIC_MINORS is not set -# CONFIG_USB_SUSPEND is not set -# CONFIG_USB_PERSIST is not set -# CONFIG_USB_OTG is not set - -# -# USB Host Controller Drivers -# -# CONFIG_USB_ISP116X_HCD is not set -CONFIG_USB_OHCI_HCD=y -# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set -# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set -CONFIG_USB_OHCI_LITTLE_ENDIAN=y -# CONFIG_USB_SL811_HCD is not set -# CONFIG_USB_R8A66597_HCD is not set - -# -# USB Device Class drivers -# -# CONFIG_USB_ACM is not set -# CONFIG_USB_PRINTER is not set - -# -# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' -# - -# -# may also be needed; see USB_STORAGE Help for more information -# -# CONFIG_USB_LIBUSUAL is not set - -# -# USB Imaging devices -# -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_MON is not set - -# -# USB port drivers -# - -# -# USB Serial Converter support -# -# CONFIG_USB_SERIAL is not set - -# -# USB Miscellaneous drivers -# -# CONFIG_USB_EMI62 is not set -# CONFIG_USB_EMI26 is not set -# CONFIG_USB_ADUTUX is not set -# CONFIG_USB_AUERSWALD is not set -# CONFIG_USB_RIO500 is not set -# CONFIG_USB_LEGOTOWER is not set -# CONFIG_USB_LCD is not set -# CONFIG_USB_BERRY_CHARGE is not set -# CONFIG_USB_LED is not set -# CONFIG_USB_CYPRESS_CY7C63 is not set -# CONFIG_USB_CYTHERM is not set -# CONFIG_USB_PHIDGET is not set -# CONFIG_USB_IDMOUSE is not set -# CONFIG_USB_FTDI_ELAN is not set -# CONFIG_USB_APPLEDISPLAY is not set -# CONFIG_USB_LD is not set -# CONFIG_USB_TRANCEVIBRATOR is not set -# CONFIG_USB_IOWARRIOR is not set - -# -# USB DSL modem support -# - -# -# USB Gadget Support -# -CONFIG_USB_GADGET=y -# CONFIG_USB_GADGET_DEBUG_FILES is not set -CONFIG_USB_GADGET_SELECTED=y -# CONFIG_USB_GADGET_AMD5536UDC is not set -# CONFIG_USB_GADGET_FSL_USB2 is not set -# CONFIG_USB_GADGET_NET2280 is not set -# CONFIG_USB_GADGET_PXA2XX is not set -CONFIG_USB_GADGET_PXA27X=y -CONFIG_USB_PXA27X=y -# CONFIG_USB_PXA2XX_SMALL is not set -# CONFIG_USB_GADGET_M66592 is not set -# CONFIG_USB_GADGET_GOKU is not set -# CONFIG_USB_GADGET_LH7A40X is not set -# CONFIG_USB_GADGET_OMAP is not set -# CONFIG_USB_GADGET_S3C2410 is not set -# CONFIG_USB_GADGET_AT91 is not set -# CONFIG_USB_GADGET_DUMMY_HCD is not set -# CONFIG_USB_GADGET_DUALSPEED is not set -# CONFIG_USB_ZERO is not set -CONFIG_USB_ETH=y -# CONFIG_USB_ETH_RNDIS is not set -# CONFIG_USB_GADGETFS is not set -# CONFIG_USB_FILE_STORAGE is not set -# CONFIG_USB_G_SERIAL is not set -# CONFIG_USB_MIDI_GADGET is not set -CONFIG_MMC=y -# CONFIG_MMC_DEBUG is not set -# CONFIG_MMC_UNSAFE_RESUME is not set - -# -# MMC/SD Card Drivers -# -CONFIG_MMC_BLOCK=y -CONFIG_MMC_BLOCK_BOUNCE=y - -# -# MMC/SD Host Controller Drivers -# -CONFIG_MMC_PXA=y -CONFIG_RTC_LIB=y -# CONFIG_RTC_CLASS is not set - -# -# DMA Engine support -# -# CONFIG_DMA_ENGINE is not set - -# -# DMA Clients -# - -# -# DMA Devices -# - -# -# File systems -# -CONFIG_EXT2_FS=y -# CONFIG_EXT2_FS_XATTR is not set -# CONFIG_EXT2_FS_XIP is not set -CONFIG_EXT3_FS=m -CONFIG_EXT3_FS_XATTR=y -# CONFIG_EXT3_FS_POSIX_ACL is not set -# CONFIG_EXT3_FS_SECURITY is not set -# CONFIG_EXT4DEV_FS is not set -CONFIG_JBD=m -# CONFIG_JBD_DEBUG is not set -CONFIG_FS_MBCACHE=y -CONFIG_REISERFS_FS=m -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -CONFIG_REISERFS_FS_XATTR=y -CONFIG_REISERFS_FS_POSIX_ACL=y -CONFIG_REISERFS_FS_SECURITY=y -# CONFIG_JFS_FS is not set -CONFIG_FS_POSIX_ACL=y -# CONFIG_XFS_FS is not set -# CONFIG_GFS2_FS is not set -# CONFIG_OCFS2_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_ROMFS_FS is not set -CONFIG_INOTIFY=y -CONFIG_INOTIFY_USER=y -# CONFIG_QUOTA is not set -CONFIG_DNOTIFY=y -CONFIG_AUTOFS_FS=y -CONFIG_AUTOFS4_FS=y -# CONFIG_FUSE_FS is not set - -# -# CD-ROM/DVD Filesystems -# -CONFIG_ISO9660_FS=m -CONFIG_JOLIET=y -CONFIG_ZISOFS=y -# CONFIG_UDF_FS is not set - -# -# DOS/FAT/NT Filesystems -# -CONFIG_FAT_FS=m -CONFIG_MSDOS_FS=m -CONFIG_VFAT_FS=m -CONFIG_FAT_DEFAULT_CODEPAGE=437 -CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" -# CONFIG_NTFS_FS is not set - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -CONFIG_PROC_SYSCTL=y -CONFIG_SYSFS=y -CONFIG_TMPFS=y -# CONFIG_TMPFS_POSIX_ACL is not set -# CONFIG_HUGETLB_PAGE is not set -CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set - -# -# Miscellaneous filesystems -# -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_HFSPLUS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS2_FS is not set -CONFIG_CRAMFS=m -# CONFIG_VXFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set - -# -# Network File Systems -# -CONFIG_NFS_FS=m -CONFIG_NFS_V3=y -CONFIG_NFS_V3_ACL=y -# CONFIG_NFS_V4 is not set -CONFIG_NFS_DIRECTIO=y -CONFIG_NFSD=m -CONFIG_NFSD_V2_ACL=y -CONFIG_NFSD_V3=y -CONFIG_NFSD_V3_ACL=y -# CONFIG_NFSD_V4 is not set -CONFIG_NFSD_TCP=y -CONFIG_LOCKD=m -CONFIG_LOCKD_V4=y -CONFIG_EXPORTFS=m -CONFIG_NFS_ACL_SUPPORT=m -CONFIG_NFS_COMMON=y -CONFIG_SUNRPC=m -# CONFIG_SUNRPC_BIND34 is not set -# CONFIG_RPCSEC_GSS_KRB5 is not set -# CONFIG_RPCSEC_GSS_SPKM3 is not set -CONFIG_SMB_FS=m -# CONFIG_SMB_NLS_DEFAULT is not set -CONFIG_CIFS=m -CONFIG_CIFS_STATS=y -# CONFIG_CIFS_STATS2 is not set -CONFIG_CIFS_WEAK_PW_HASH=y -CONFIG_CIFS_XATTR=y -CONFIG_CIFS_POSIX=y -# CONFIG_CIFS_DEBUG2 is not set -# CONFIG_CIFS_EXPERIMENTAL is not set -# CONFIG_NCP_FS is not set -# CONFIG_CODA_FS is not set -# CONFIG_AFS_FS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y - -# -# Native Language Support -# -CONFIG_NLS=y -CONFIG_NLS_DEFAULT="iso8859-1" -CONFIG_NLS_CODEPAGE_437=m -CONFIG_NLS_CODEPAGE_737=m -CONFIG_NLS_CODEPAGE_775=m -CONFIG_NLS_CODEPAGE_850=m -CONFIG_NLS_CODEPAGE_852=m -CONFIG_NLS_CODEPAGE_855=m -CONFIG_NLS_CODEPAGE_857=m -CONFIG_NLS_CODEPAGE_860=m -CONFIG_NLS_CODEPAGE_861=m -CONFIG_NLS_CODEPAGE_862=m -CONFIG_NLS_CODEPAGE_863=m -CONFIG_NLS_CODEPAGE_864=m -CONFIG_NLS_CODEPAGE_865=m -CONFIG_NLS_CODEPAGE_866=m -CONFIG_NLS_CODEPAGE_869=m -CONFIG_NLS_CODEPAGE_936=m -CONFIG_NLS_CODEPAGE_950=m -CONFIG_NLS_CODEPAGE_932=m -CONFIG_NLS_CODEPAGE_949=m -CONFIG_NLS_CODEPAGE_874=m -CONFIG_NLS_ISO8859_8=m -CONFIG_NLS_CODEPAGE_1250=m -CONFIG_NLS_CODEPAGE_1251=m -CONFIG_NLS_ASCII=m -CONFIG_NLS_ISO8859_1=m -CONFIG_NLS_ISO8859_2=m -CONFIG_NLS_ISO8859_3=m -CONFIG_NLS_ISO8859_4=m -CONFIG_NLS_ISO8859_5=m -CONFIG_NLS_ISO8859_6=m -CONFIG_NLS_ISO8859_7=m -CONFIG_NLS_ISO8859_9=m -CONFIG_NLS_ISO8859_13=m -CONFIG_NLS_ISO8859_14=m -CONFIG_NLS_ISO8859_15=m -CONFIG_NLS_KOI8_R=m -CONFIG_NLS_KOI8_U=m -CONFIG_NLS_UTF8=m - -# -# Distributed Lock Manager -# -# CONFIG_DLM is not set - -# -# Profiling support -# -# CONFIG_PROFILING is not set - -# -# Kernel hacking -# -# CONFIG_PRINTK_TIME is not set -# CONFIG_ENABLE_MUST_CHECK is not set -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_UNUSED_SYMBOLS is not set -# CONFIG_DEBUG_FS is not set -# CONFIG_HEADERS_CHECK is not set -# CONFIG_DEBUG_KERNEL is not set -# CONFIG_DEBUG_BUGVERBOSE is not set -CONFIG_FRAME_POINTER=y -# CONFIG_DEBUG_USER is not set - -# -# Security options -# -# CONFIG_KEYS is not set -# CONFIG_SECURITY is not set -# CONFIG_CRYPTO is not set - -# -# Library routines -# -CONFIG_BITREVERSE=y -CONFIG_CRC_CCITT=m -CONFIG_CRC16=m -# CONFIG_CRC_ITU_T is not set -CONFIG_CRC32=y -# CONFIG_CRC7 is not set -CONFIG_LIBCRC32C=m -CONFIG_ZLIB_INFLATE=m -CONFIG_ZLIB_DEFLATE=m -CONFIG_PLIST=y -CONFIG_HAS_IOMEM=y -CONFIG_HAS_IOPORT=y -CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-ezx-2.6.23/patches/defconfig-a780 b/packages/linux/linux-ezx-2.6.23/patches/defconfig-a780 deleted file mode 100644 index 921fa94b69..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/defconfig-a780 +++ /dev/null @@ -1,1214 +0,0 @@ -# -# Automatically generated make config: don't edit -# Linux kernel version: 2.6.23.1 -# Wed Oct 24 18:00:57 2007 -# -CONFIG_ARM=y -CONFIG_SYS_SUPPORTS_APM_EMULATION=y -CONFIG_GENERIC_GPIO=y -CONFIG_GENERIC_TIME=y -CONFIG_GENERIC_CLOCKEVENTS=y -CONFIG_MMU=y -# CONFIG_NO_IOPORT is not set -CONFIG_GENERIC_HARDIRQS=y -CONFIG_STACKTRACE_SUPPORT=y -CONFIG_LOCKDEP_SUPPORT=y -CONFIG_TRACE_IRQFLAGS_SUPPORT=y -CONFIG_HARDIRQS_SW_RESEND=y -CONFIG_GENERIC_IRQ_PROBE=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_ARCH_HAS_ILOG2_U32 is not set -# CONFIG_ARCH_HAS_ILOG2_U64 is not set -CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y -CONFIG_ZONE_DMA=y -CONFIG_ARCH_MTD_XIP=y -CONFIG_VECTORS_BASE=0xffff0000 -CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" - -# -# General setup -# -CONFIG_EXPERIMENTAL=y -CONFIG_BROKEN_ON_SMP=y -CONFIG_LOCK_KERNEL=y -CONFIG_INIT_ENV_ARG_LIMIT=32 -CONFIG_LOCALVERSION="-ezxdev" -# CONFIG_LOCALVERSION_AUTO is not set -# CONFIG_SWAP is not set -CONFIG_SYSVIPC=y -CONFIG_SYSVIPC_SYSCTL=y -# CONFIG_POSIX_MQUEUE is not set -# CONFIG_BSD_PROCESS_ACCT is not set -# CONFIG_TASKSTATS is not set -# CONFIG_USER_NS is not set -# CONFIG_AUDIT is not set -# CONFIG_IKCONFIG is not set -CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_SYSFS_DEPRECATED is not set -# CONFIG_RELAY is not set -# CONFIG_BLK_DEV_INITRD is not set -CONFIG_CC_OPTIMIZE_FOR_SIZE=y -CONFIG_SYSCTL=y -CONFIG_EMBEDDED=y -CONFIG_UID16=y -# CONFIG_SYSCTL_SYSCALL is not set -CONFIG_KALLSYMS=y -# CONFIG_KALLSYMS_EXTRA_PASS is not set -CONFIG_HOTPLUG=y -CONFIG_PRINTK=y -CONFIG_BUG=y -CONFIG_ELF_CORE=y -CONFIG_BASE_FULL=y -CONFIG_FUTEX=y -CONFIG_ANON_INODES=y -CONFIG_EPOLL=y -CONFIG_SIGNALFD=y -CONFIG_EVENTFD=y -CONFIG_SHMEM=y -CONFIG_VM_EVENT_COUNTERS=y -CONFIG_SLAB=y -# CONFIG_SLUB is not set -# CONFIG_SLOB is not set -CONFIG_RT_MUTEXES=y -# CONFIG_TINY_SHMEM is not set -CONFIG_BASE_SMALL=0 -CONFIG_MODULES=y -CONFIG_MODULE_UNLOAD=y -CONFIG_MODULE_FORCE_UNLOAD=y -CONFIG_MODVERSIONS=y -# CONFIG_MODULE_SRCVERSION_ALL is not set -CONFIG_KMOD=y -CONFIG_BLOCK=y -# CONFIG_LBD is not set -# CONFIG_BLK_DEV_IO_TRACE is not set -# CONFIG_LSF is not set -# CONFIG_BLK_DEV_BSG is not set - -# -# IO Schedulers -# -CONFIG_IOSCHED_NOOP=y -# CONFIG_IOSCHED_AS is not set -CONFIG_IOSCHED_DEADLINE=y -# CONFIG_IOSCHED_CFQ is not set -# CONFIG_DEFAULT_AS is not set -CONFIG_DEFAULT_DEADLINE=y -# CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="deadline" - -# -# System Type -# -# CONFIG_ARCH_AAEC2000 is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_REALVIEW is not set -# CONFIG_ARCH_VERSATILE is not set -# CONFIG_ARCH_AT91 is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_EP93XX is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_NETX is not set -# CONFIG_ARCH_H720X is not set -# CONFIG_ARCH_IMX is not set -# CONFIG_ARCH_IOP13XX is not set -# CONFIG_ARCH_IOP32X is not set -# CONFIG_ARCH_IOP33X is not set -# CONFIG_ARCH_IXP23XX is not set -# CONFIG_ARCH_IXP2000 is not set -# CONFIG_ARCH_IXP4XX is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_KS8695 is not set -# CONFIG_ARCH_NS9XXX is not set -# CONFIG_ARCH_MXC is not set -# CONFIG_ARCH_PNX4008 is not set -CONFIG_ARCH_PXA=y -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_S3C2410 is not set -# CONFIG_ARCH_SHARK is not set -# CONFIG_ARCH_LH7A40X is not set -# CONFIG_ARCH_DAVINCI is not set -# CONFIG_ARCH_OMAP is not set - -# -# Intel PXA2xx Implementations -# -# CONFIG_ARCH_LUBBOCK is not set -# CONFIG_MACH_LOGICPD_PXA270 is not set -# CONFIG_MACH_MAINSTONE is not set -# CONFIG_ARCH_PXA_IDP is not set -# CONFIG_PXA_SHARPSL is not set -# CONFIG_MACH_TRIZEPS4 is not set -# CONFIG_MACH_EM_X270 is not set -CONFIG_PXA_EZX=y -# CONFIG_PXA_EZX_E680 is not set -CONFIG_PXA_EZX_A780=y -# CONFIG_PXA_EZX_E2 is not set -# CONFIG_PXA_EZX_A1200 is not set -# CONFIG_PXA_EZX_E6 is not set -CONFIG_EZX_BP=y -CONFIG_EZX_PCAP=y -# CONFIG_EZX_EOC is not set -CONFIG_EZX_EMU=y -CONFIG_EZX_EMU_USB=y -# CONFIG_EZX_EMU_UART is not set -# CONFIG_EZX_EMU_NOTHING is not set -CONFIG_PXA27x=y -CONFIG_PXA_SSP=y - -# -# Boot options -# - -# -# Power management -# - -# -# Processor Type -# -CONFIG_CPU_32=y -CONFIG_CPU_XSCALE=y -CONFIG_CPU_32v5=y -CONFIG_CPU_ABRT_EV5T=y -CONFIG_CPU_CACHE_VIVT=y -CONFIG_CPU_TLB_V4WBI=y -CONFIG_CPU_CP15=y -CONFIG_CPU_CP15_MMU=y - -# -# Processor Features -# -CONFIG_ARM_THUMB=y -# CONFIG_CPU_DCACHE_DISABLE is not set -# CONFIG_OUTER_CACHE is not set -CONFIG_IWMMXT=y -CONFIG_XSCALE_PMU=y - -# -# Bus support -# -# CONFIG_PCI_SYSCALL is not set -# CONFIG_ARCH_SUPPORTS_MSI is not set - -# -# PCCARD (PCMCIA/CardBus) support -# -# CONFIG_PCCARD is not set - -# -# Kernel Features -# -# CONFIG_TICK_ONESHOT is not set -# CONFIG_NO_HZ is not set -# CONFIG_HIGH_RES_TIMERS is not set -CONFIG_PREEMPT=y -CONFIG_HZ=100 -CONFIG_AEABI=y -# CONFIG_OABI_COMPAT is not set -# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set -CONFIG_SELECT_MEMORY_MODEL=y -CONFIG_FLATMEM_MANUAL=y -# CONFIG_DISCONTIGMEM_MANUAL is not set -# CONFIG_SPARSEMEM_MANUAL is not set -CONFIG_FLATMEM=y -CONFIG_FLAT_NODE_MEM_MAP=y -# CONFIG_SPARSEMEM_STATIC is not set -CONFIG_SPLIT_PTLOCK_CPUS=4096 -# CONFIG_RESOURCES_64BIT is not set -CONFIG_ZONE_DMA_FLAG=1 -CONFIG_BOUNCE=y -CONFIG_VIRT_TO_BUS=y -CONFIG_ALIGNMENT_TRAP=y - -# -# Boot options -# -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000 mem=16M@0xAC000000" -# CONFIG_XIP_KERNEL is not set -# CONFIG_KEXEC is not set - -# -# Floating point emulation -# - -# -# At least one emulation must be selected -# - -# -# Userspace binary formats -# -CONFIG_BINFMT_ELF=y -CONFIG_BINFMT_AOUT=m -CONFIG_BINFMT_MISC=m - -# -# Power management options -# -CONFIG_PM=y -# CONFIG_PM_LEGACY is not set -# CONFIG_PM_DEBUG is not set -CONFIG_SUSPEND_UP_POSSIBLE=y -# CONFIG_SUSPEND is not set -CONFIG_APM_EMULATION=y - -# -# Networking -# -CONFIG_NET=y - -# -# Networking options -# -CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set -CONFIG_UNIX=y -# CONFIG_NET_KEY is not set -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_FIB_HASH=y -CONFIG_IP_PNP=y -CONFIG_IP_PNP_DHCP=y -# CONFIG_IP_PNP_BOOTP is not set -# CONFIG_IP_PNP_RARP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_ARPD is not set -CONFIG_SYN_COOKIES=y -# CONFIG_INET_AH is not set -# CONFIG_INET_ESP is not set -# CONFIG_INET_IPCOMP is not set -# CONFIG_INET_XFRM_TUNNEL is not set -# CONFIG_INET_TUNNEL is not set -# CONFIG_INET_XFRM_MODE_TRANSPORT is not set -# CONFIG_INET_XFRM_MODE_TUNNEL is not set -# CONFIG_INET_XFRM_MODE_BEET is not set -# CONFIG_INET_DIAG is not set -# CONFIG_TCP_CONG_ADVANCED is not set -CONFIG_TCP_CONG_CUBIC=y -CONFIG_DEFAULT_TCP_CONG="cubic" -# CONFIG_TCP_MD5SIG is not set -# CONFIG_IPV6 is not set -# CONFIG_INET6_XFRM_TUNNEL is not set -# CONFIG_INET6_TUNNEL is not set -# CONFIG_NETWORK_SECMARK is not set -# CONFIG_NETFILTER is not set -# CONFIG_IP_DCCP is not set -# CONFIG_IP_SCTP is not set -# CONFIG_TIPC is not set -# CONFIG_ATM is not set -# CONFIG_BRIDGE is not set -# CONFIG_VLAN_8021Q is not set -# CONFIG_DECNET is not set -# CONFIG_LLC2 is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network testing -# -# CONFIG_NET_PKTGEN is not set -# CONFIG_HAMRADIO is not set -# CONFIG_IRDA is not set -CONFIG_BT=y -CONFIG_BT_L2CAP=y -CONFIG_BT_SCO=y -CONFIG_BT_RFCOMM=y -CONFIG_BT_RFCOMM_TTY=y -CONFIG_BT_BNEP=y -CONFIG_BT_BNEP_MC_FILTER=y -CONFIG_BT_BNEP_PROTO_FILTER=y -CONFIG_BT_HIDP=y - -# -# Bluetooth device drivers -# -# CONFIG_BT_HCIUSB is not set -CONFIG_BT_HCIUART=y -CONFIG_BT_HCIUART_H4=y -# CONFIG_BT_HCIUART_BCSP is not set -# CONFIG_BT_HCIBCM203X is not set -# CONFIG_BT_HCIBPA10X is not set -# CONFIG_BT_HCIBFUSB is not set -# CONFIG_BT_HCIVHCI is not set -# CONFIG_AF_RXRPC is not set - -# -# Wireless -# -# CONFIG_CFG80211 is not set -# CONFIG_WIRELESS_EXT is not set -# CONFIG_MAC80211 is not set -# CONFIG_IEEE80211 is not set -# CONFIG_RFKILL is not set -# CONFIG_NET_9P is not set - -# -# Device Drivers -# - -# -# Generic Driver Options -# -CONFIG_STANDALONE=y -CONFIG_PREVENT_FIRMWARE_BUILD=y -CONFIG_FW_LOADER=m -# CONFIG_SYS_HYPERVISOR is not set -CONFIG_CONNECTOR=m -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -# CONFIG_MTD_CONCAT is not set -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_REDBOOT_PARTS is not set -# CONFIG_MTD_CMDLINE_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -# CONFIG_MTD_BLKDEVS is not set -# CONFIG_MTD_BLOCK is not set -# CONFIG_MTD_BLOCK_RO is not set -# CONFIG_FTL is not set -# CONFIG_NFTL is not set -# CONFIG_INFTL is not set -# CONFIG_RFD_FTL is not set -# CONFIG_SSFDC is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -CONFIG_MTD_CFI_ADV_OPTIONS=y -CONFIG_MTD_CFI_NOSWAP=y -# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set -# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set -CONFIG_MTD_CFI_GEOMETRY=y -# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set -CONFIG_MTD_MAP_BANK_WIDTH_2=y -# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set -CONFIG_MTD_CFI_I1=y -# CONFIG_MTD_CFI_I2 is not set -# CONFIG_MTD_CFI_I4 is not set -# CONFIG_MTD_CFI_I8 is not set -# CONFIG_MTD_OTP is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_CFI_STAA is not set -CONFIG_MTD_CFI_UTIL=y -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -CONFIG_MTD_XIP=y - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_COMPLEX_MAPPINGS is not set -CONFIG_MTD_PHYSMAP=y -CONFIG_MTD_PHYSMAP_START=0x0 -CONFIG_MTD_PHYSMAP_LEN=0x0 -CONFIG_MTD_PHYSMAP_BANKWIDTH=2 -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_SHARP_SL is not set -CONFIG_MTD_EZX=y -CONFIG_MTD_EZX_A780=y -# CONFIG_MTD_EZX_A780_ALTERNATE is not set -# CONFIG_MTD_EZX_A1200 is not set -# CONFIG_MTD_EZX_E2 is not set -# CONFIG_MTD_EZX_E6 is not set -# CONFIG_MTD_PLATRAM is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_DATAFLASH is not set -# CONFIG_MTD_M25P80 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_PHRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLOCK2MTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOC2001PLUS is not set -# CONFIG_MTD_NAND is not set -# CONFIG_MTD_ONENAND is not set - -# -# UBI - Unsorted block images -# -# CONFIG_MTD_UBI is not set -# CONFIG_PARPORT is not set -CONFIG_BLK_DEV=y -# CONFIG_BLK_DEV_COW_COMMON is not set -CONFIG_BLK_DEV_LOOP=m -# CONFIG_BLK_DEV_CRYPTOLOOP is not set -# CONFIG_BLK_DEV_NBD is not set -# CONFIG_BLK_DEV_UB is not set -# CONFIG_BLK_DEV_RAM is not set -# CONFIG_CDROM_PKTCDVD is not set -# CONFIG_ATA_OVER_ETH is not set -# CONFIG_IDE is not set - -# -# SCSI device support -# -# CONFIG_RAID_ATTRS is not set -# CONFIG_SCSI is not set -# CONFIG_SCSI_DMA is not set -# CONFIG_SCSI_NETLINK is not set -# CONFIG_ATA is not set -# CONFIG_MD is not set -CONFIG_NETDEVICES=y -# CONFIG_NETDEVICES_MULTIQUEUE is not set -CONFIG_DUMMY=y -# CONFIG_BONDING is not set -# CONFIG_MACVLAN is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_NET_ETHERNET is not set -# CONFIG_NETDEV_1000 is not set -# CONFIG_NETDEV_10000 is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set - -# -# USB Network Adapters -# -# CONFIG_USB_CATC is not set -# CONFIG_USB_KAWETH is not set -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_RTL8150 is not set -# CONFIG_USB_USBNET_MII is not set -# CONFIG_USB_USBNET is not set -# CONFIG_WAN is not set -CONFIG_PPP=m -CONFIG_PPP_MULTILINK=y -CONFIG_PPP_FILTER=y -CONFIG_PPP_ASYNC=m -CONFIG_PPP_SYNC_TTY=m -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -# CONFIG_PPP_MPPE is not set -# CONFIG_PPPOE is not set -# CONFIG_PPPOL2TP is not set -# CONFIG_SLIP is not set -CONFIG_SLHC=m -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set -# CONFIG_ISDN is not set - -# -# Input device support -# -CONFIG_INPUT=y -# CONFIG_INPUT_FF_MEMLESS is not set -# CONFIG_INPUT_POLLDEV is not set - -# -# Userland interfaces -# -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -CONFIG_INPUT_TSDEV=y -CONFIG_INPUT_TSDEV_SCREEN_X=240 -CONFIG_INPUT_TSDEV_SCREEN_Y=320 -CONFIG_INPUT_EVDEV=y -# CONFIG_INPUT_EVBUG is not set - -# -# Input Device Drivers -# -CONFIG_INPUT_KEYBOARD=y -# CONFIG_KEYBOARD_ATKBD is not set -# CONFIG_KEYBOARD_SUNKBD is not set -# CONFIG_KEYBOARD_LKKBD is not set -# CONFIG_KEYBOARD_XTKBD is not set -# CONFIG_KEYBOARD_NEWTON is not set -# CONFIG_KEYBOARD_STOWAWAY is not set -# CONFIG_KEYBOARD_PXA27x is not set -CONFIG_KEYBOARD_GPIO=y -CONFIG_KEYBOARD_PXA=y -# CONFIG_INPUT_MOUSE is not set -# CONFIG_INPUT_JOYSTICK is not set -# CONFIG_INPUT_TABLET is not set -CONFIG_INPUT_TOUCHSCREEN=y -# CONFIG_TOUCHSCREEN_ADS7846 is not set -# CONFIG_TOUCHSCREEN_FUJITSU is not set -# CONFIG_TOUCHSCREEN_GUNZE is not set -# CONFIG_TOUCHSCREEN_ELO is not set -# CONFIG_TOUCHSCREEN_MTOUCH is not set -# CONFIG_TOUCHSCREEN_MK712 is not set -# CONFIG_TOUCHSCREEN_PENMOUNT is not set -# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set -# CONFIG_TOUCHSCREEN_TOUCHWIN is not set -# CONFIG_TOUCHSCREEN_UCB1400 is not set -# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set -CONFIG_TOUCHSCREEN_PCAP=y -CONFIG_INPUT_MISC=y -# CONFIG_INPUT_ATI_REMOTE is not set -# CONFIG_INPUT_ATI_REMOTE2 is not set -# CONFIG_INPUT_KEYSPAN_REMOTE is not set -# CONFIG_INPUT_POWERMATE is not set -# CONFIG_INPUT_YEALINK is not set -CONFIG_INPUT_UINPUT=y - -# -# Hardware I/O ports -# -# CONFIG_SERIO is not set -# CONFIG_GAMEPORT is not set - -# -# Character devices -# -CONFIG_VT=y -CONFIG_VT_CONSOLE=y -CONFIG_HW_CONSOLE=y -# CONFIG_VT_HW_CONSOLE_BINDING is not set -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_8250 is not set - -# -# Non-8250 serial port support -# -CONFIG_SERIAL_PXA=y -CONFIG_SERIAL_PXA_CONSOLE=y -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_LEGACY_PTYS=y -CONFIG_LEGACY_PTY_COUNT=8 -# CONFIG_IPMI_HANDLER is not set -# CONFIG_WATCHDOG is not set -CONFIG_HW_RANDOM=y -# CONFIG_NVRAM is not set -# CONFIG_R3964 is not set -# CONFIG_RAW_DRIVER is not set -# CONFIG_TCG_TPM is not set -CONFIG_TS0710_MUX=y -CONFIG_TS0710_MUX_USB=y -CONFIG_I2C=y -CONFIG_I2C_BOARDINFO=y -CONFIG_I2C_CHARDEV=y - -# -# I2C Algorithms -# -# CONFIG_I2C_ALGOBIT is not set -# CONFIG_I2C_ALGOPCF is not set -# CONFIG_I2C_ALGOPCA is not set - -# -# I2C Hardware Bus support -# -# CONFIG_I2C_GPIO is not set -CONFIG_I2C_PXA=y -# CONFIG_I2C_PXA_SLAVE is not set -# CONFIG_I2C_OCORES is not set -# CONFIG_I2C_PARPORT_LIGHT is not set -# CONFIG_I2C_SIMTEC is not set -# CONFIG_I2C_TAOS_EVM is not set -# CONFIG_I2C_STUB is not set -# CONFIG_I2C_TINY_USB is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_DS1337 is not set -# CONFIG_SENSORS_DS1374 is not set -# CONFIG_DS1682 is not set -# CONFIG_SENSORS_EEPROM is not set -# CONFIG_SENSORS_PCF8574 is not set -# CONFIG_SENSORS_PCA9539 is not set -# CONFIG_SENSORS_PCF8591 is not set -# CONFIG_SENSORS_MAX6875 is not set -# CONFIG_SENSORS_TSL2550 is not set -# CONFIG_I2C_DEBUG_CORE is not set -# CONFIG_I2C_DEBUG_ALGO is not set -# CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set - -# -# SPI support -# -CONFIG_SPI=y -CONFIG_SPI_MASTER=y - -# -# SPI Master Controller Drivers -# -# CONFIG_SPI_BITBANG is not set -CONFIG_SPI_PXA2XX=m - -# -# SPI Protocol Masters -# -# CONFIG_SPI_AT25 is not set -# CONFIG_SPI_SPIDEV is not set -# CONFIG_SPI_TLE62X0 is not set -# CONFIG_W1 is not set -# CONFIG_HWMON is not set -CONFIG_MISC_DEVICES=y -# CONFIG_EEPROM_93CX6 is not set - -# -# Multifunction device drivers -# -# CONFIG_MFD_SM501 is not set -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y - -# -# LED drivers -# -# CONFIG_LEDS_GPIO is not set - -# -# LED Triggers -# -CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_A780=y -CONFIG_LEDS_TRIGGER_TIMER=y -CONFIG_LEDS_TRIGGER_HEARTBEAT=y - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_DAB is not set - -# -# Graphics support -# -CONFIG_BACKLIGHT_LCD_SUPPORT=y -# CONFIG_LCD_CLASS_DEVICE is not set -CONFIG_BACKLIGHT_CLASS_DEVICE=y -CONFIG_BACKLIGHT_EZX=y - -# -# Display device support -# -# CONFIG_DISPLAY_SUPPORT is not set -# CONFIG_VGASTATE is not set -# CONFIG_VIDEO_OUTPUT_CONTROL is not set -CONFIG_FB=y -# CONFIG_FIRMWARE_EDID is not set -# CONFIG_FB_DDC is not set -CONFIG_FB_CFB_FILLRECT=y -CONFIG_FB_CFB_COPYAREA=y -CONFIG_FB_CFB_IMAGEBLIT=y -# CONFIG_FB_SYS_FILLRECT is not set -# CONFIG_FB_SYS_COPYAREA is not set -# CONFIG_FB_SYS_IMAGEBLIT is not set -# CONFIG_FB_SYS_FOPS is not set -CONFIG_FB_DEFERRED_IO=y -# CONFIG_FB_SVGALIB is not set -# CONFIG_FB_MACMODES is not set -# CONFIG_FB_BACKLIGHT is not set -# CONFIG_FB_MODE_HELPERS is not set -# CONFIG_FB_TILEBLITTING is not set - -# -# Frame buffer hardware drivers -# -# CONFIG_FB_S1D13XXX is not set -CONFIG_FB_PXA=y -CONFIG_FB_PXA_LCD_QVGA=y -# CONFIG_FB_PXA_LCD_VGA is not set -CONFIG_FB_PXA_OVERLAY=y -CONFIG_FB_PXA_PARAMETERS=y -# CONFIG_FB_MBX is not set -# CONFIG_FB_VIRTUAL is not set - -# -# Console display driver support -# -# CONFIG_VGA_CONSOLE is not set -CONFIG_DUMMY_CONSOLE=y -CONFIG_FRAMEBUFFER_CONSOLE=y -# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set -# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set -CONFIG_FONTS=y -# CONFIG_FONT_8x8 is not set -# CONFIG_FONT_8x16 is not set -# CONFIG_FONT_6x11 is not set -# CONFIG_FONT_7x14 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set -CONFIG_FONT_MINI_4x6=y -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_SUN12x22 is not set -# CONFIG_FONT_10x18 is not set -# CONFIG_LOGO is not set - -# -# Sound -# -CONFIG_SOUND=y - -# -# Advanced Linux Sound Architecture -# -CONFIG_SND=y -CONFIG_SND_TIMER=y -CONFIG_SND_PCM=y -# CONFIG_SND_SEQUENCER is not set -CONFIG_SND_OSSEMUL=y -CONFIG_SND_MIXER_OSS=y -CONFIG_SND_PCM_OSS=y -CONFIG_SND_PCM_OSS_PLUGINS=y -# CONFIG_SND_DYNAMIC_MINORS is not set -CONFIG_SND_SUPPORT_OLD_API=y -CONFIG_SND_VERBOSE_PROCFS=y -# CONFIG_SND_VERBOSE_PRINTK is not set -# CONFIG_SND_DEBUG is not set - -# -# Generic devices -# -# CONFIG_SND_DUMMY is not set -# CONFIG_SND_MTPAV is not set -# CONFIG_SND_SERIAL_U16550 is not set -# CONFIG_SND_MPU401 is not set - -# -# ALSA ARM devices -# -# CONFIG_SND_PXA2XX_AC97 is not set - -# -# USB devices -# -# CONFIG_SND_USB_AUDIO is not set -# CONFIG_SND_USB_CAIAQ is not set - -# -# System on Chip audio support -# -CONFIG_SND_SOC=y -CONFIG_SND_PXA2XX_SOC=y -CONFIG_SND_PXA2XX_SOC_SSP=y -CONFIG_SND_PXA2XX_SOC_EZX=y - -# -# SoC Audio support for SuperH -# -CONFIG_SND_SOC_PCAP2=y - -# -# Open Sound System -# -# CONFIG_SOUND_PRIME is not set -CONFIG_HID_SUPPORT=y -CONFIG_HID=y -# CONFIG_HID_DEBUG is not set - -# -# USB Input Devices -# -# CONFIG_USB_HID is not set - -# -# USB HID Boot Protocol drivers -# -# CONFIG_USB_KBD is not set -# CONFIG_USB_MOUSE is not set -CONFIG_USB_SUPPORT=y -CONFIG_USB_ARCH_HAS_HCD=y -CONFIG_USB_ARCH_HAS_OHCI=y -# CONFIG_USB_ARCH_HAS_EHCI is not set -CONFIG_USB=y -# CONFIG_USB_DEBUG is not set - -# -# Miscellaneous USB options -# -# CONFIG_USB_DEVICEFS is not set -# CONFIG_USB_DEVICE_CLASS is not set -# CONFIG_USB_DYNAMIC_MINORS is not set -# CONFIG_USB_SUSPEND is not set -# CONFIG_USB_PERSIST is not set -# CONFIG_USB_OTG is not set - -# -# USB Host Controller Drivers -# -# CONFIG_USB_ISP116X_HCD is not set -CONFIG_USB_OHCI_HCD=y -# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set -# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set -CONFIG_USB_OHCI_LITTLE_ENDIAN=y -# CONFIG_USB_SL811_HCD is not set -# CONFIG_USB_R8A66597_HCD is not set - -# -# USB Device Class drivers -# -# CONFIG_USB_ACM is not set -# CONFIG_USB_PRINTER is not set - -# -# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' -# - -# -# may also be needed; see USB_STORAGE Help for more information -# -# CONFIG_USB_LIBUSUAL is not set - -# -# USB Imaging devices -# -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_MON is not set - -# -# USB port drivers -# - -# -# USB Serial Converter support -# -# CONFIG_USB_SERIAL is not set - -# -# USB Miscellaneous drivers -# -# CONFIG_USB_EMI62 is not set -# CONFIG_USB_EMI26 is not set -# CONFIG_USB_ADUTUX is not set -# CONFIG_USB_AUERSWALD is not set -# CONFIG_USB_RIO500 is not set -# CONFIG_USB_LEGOTOWER is not set -# CONFIG_USB_LCD is not set -# CONFIG_USB_BERRY_CHARGE is not set -# CONFIG_USB_LED is not set -# CONFIG_USB_CYPRESS_CY7C63 is not set -# CONFIG_USB_CYTHERM is not set -# CONFIG_USB_PHIDGET is not set -# CONFIG_USB_IDMOUSE is not set -# CONFIG_USB_FTDI_ELAN is not set -# CONFIG_USB_APPLEDISPLAY is not set -# CONFIG_USB_LD is not set -# CONFIG_USB_TRANCEVIBRATOR is not set -# CONFIG_USB_IOWARRIOR is not set - -# -# USB DSL modem support -# - -# -# USB Gadget Support -# -CONFIG_USB_GADGET=y -# CONFIG_USB_GADGET_DEBUG_FILES is not set -CONFIG_USB_GADGET_SELECTED=y -# CONFIG_USB_GADGET_AMD5536UDC is not set -# CONFIG_USB_GADGET_FSL_USB2 is not set -# CONFIG_USB_GADGET_NET2280 is not set -# CONFIG_USB_GADGET_PXA2XX is not set -CONFIG_USB_GADGET_PXA27X=y -CONFIG_USB_PXA27X=y -# CONFIG_USB_PXA2XX_SMALL is not set -# CONFIG_USB_GADGET_M66592 is not set -# CONFIG_USB_GADGET_GOKU is not set -# CONFIG_USB_GADGET_LH7A40X is not set -# CONFIG_USB_GADGET_OMAP is not set -# CONFIG_USB_GADGET_S3C2410 is not set -# CONFIG_USB_GADGET_AT91 is not set -# CONFIG_USB_GADGET_DUMMY_HCD is not set -# CONFIG_USB_GADGET_DUALSPEED is not set -# CONFIG_USB_ZERO is not set -CONFIG_USB_ETH=y -# CONFIG_USB_ETH_RNDIS is not set -# CONFIG_USB_GADGETFS is not set -# CONFIG_USB_FILE_STORAGE is not set -# CONFIG_USB_G_SERIAL is not set -# CONFIG_USB_MIDI_GADGET is not set -CONFIG_MMC=y -# CONFIG_MMC_DEBUG is not set -# CONFIG_MMC_UNSAFE_RESUME is not set - -# -# MMC/SD Card Drivers -# -CONFIG_MMC_BLOCK=y -CONFIG_MMC_BLOCK_BOUNCE=y - -# -# MMC/SD Host Controller Drivers -# -CONFIG_MMC_PXA=y -CONFIG_RTC_LIB=y -# CONFIG_RTC_CLASS is not set - -# -# DMA Engine support -# -# CONFIG_DMA_ENGINE is not set - -# -# DMA Clients -# - -# -# DMA Devices -# - -# -# File systems -# -CONFIG_EXT2_FS=y -# CONFIG_EXT2_FS_XATTR is not set -# CONFIG_EXT2_FS_XIP is not set -CONFIG_EXT3_FS=m -CONFIG_EXT3_FS_XATTR=y -# CONFIG_EXT3_FS_POSIX_ACL is not set -# CONFIG_EXT3_FS_SECURITY is not set -# CONFIG_EXT4DEV_FS is not set -CONFIG_JBD=m -# CONFIG_JBD_DEBUG is not set -CONFIG_FS_MBCACHE=y -CONFIG_REISERFS_FS=m -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -CONFIG_REISERFS_FS_XATTR=y -CONFIG_REISERFS_FS_POSIX_ACL=y -CONFIG_REISERFS_FS_SECURITY=y -# CONFIG_JFS_FS is not set -CONFIG_FS_POSIX_ACL=y -# CONFIG_XFS_FS is not set -# CONFIG_GFS2_FS is not set -# CONFIG_OCFS2_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_ROMFS_FS is not set -CONFIG_INOTIFY=y -CONFIG_INOTIFY_USER=y -# CONFIG_QUOTA is not set -CONFIG_DNOTIFY=y -CONFIG_AUTOFS_FS=y -CONFIG_AUTOFS4_FS=y -# CONFIG_FUSE_FS is not set - -# -# CD-ROM/DVD Filesystems -# -CONFIG_ISO9660_FS=m -CONFIG_JOLIET=y -CONFIG_ZISOFS=y -# CONFIG_UDF_FS is not set - -# -# DOS/FAT/NT Filesystems -# -CONFIG_FAT_FS=m -CONFIG_MSDOS_FS=m -CONFIG_VFAT_FS=m -CONFIG_FAT_DEFAULT_CODEPAGE=437 -CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" -# CONFIG_NTFS_FS is not set - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -CONFIG_PROC_SYSCTL=y -CONFIG_SYSFS=y -CONFIG_TMPFS=y -# CONFIG_TMPFS_POSIX_ACL is not set -# CONFIG_HUGETLB_PAGE is not set -CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set - -# -# Miscellaneous filesystems -# -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_HFSPLUS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS2_FS is not set -CONFIG_CRAMFS=m -# CONFIG_VXFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set - -# -# Network File Systems -# -CONFIG_NFS_FS=m -CONFIG_NFS_V3=y -CONFIG_NFS_V3_ACL=y -# CONFIG_NFS_V4 is not set -CONFIG_NFS_DIRECTIO=y -CONFIG_NFSD=m -CONFIG_NFSD_V2_ACL=y -CONFIG_NFSD_V3=y -CONFIG_NFSD_V3_ACL=y -# CONFIG_NFSD_V4 is not set -CONFIG_NFSD_TCP=y -CONFIG_LOCKD=m -CONFIG_LOCKD_V4=y -CONFIG_EXPORTFS=m -CONFIG_NFS_ACL_SUPPORT=m -CONFIG_NFS_COMMON=y -CONFIG_SUNRPC=m -# CONFIG_SUNRPC_BIND34 is not set -# CONFIG_RPCSEC_GSS_KRB5 is not set -# CONFIG_RPCSEC_GSS_SPKM3 is not set -CONFIG_SMB_FS=m -# CONFIG_SMB_NLS_DEFAULT is not set -CONFIG_CIFS=m -CONFIG_CIFS_STATS=y -# CONFIG_CIFS_STATS2 is not set -CONFIG_CIFS_WEAK_PW_HASH=y -CONFIG_CIFS_XATTR=y -CONFIG_CIFS_POSIX=y -# CONFIG_CIFS_DEBUG2 is not set -# CONFIG_CIFS_EXPERIMENTAL is not set -# CONFIG_NCP_FS is not set -# CONFIG_CODA_FS is not set -# CONFIG_AFS_FS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y - -# -# Native Language Support -# -CONFIG_NLS=y -CONFIG_NLS_DEFAULT="iso8859-1" -CONFIG_NLS_CODEPAGE_437=m -CONFIG_NLS_CODEPAGE_737=m -CONFIG_NLS_CODEPAGE_775=m -CONFIG_NLS_CODEPAGE_850=m -CONFIG_NLS_CODEPAGE_852=m -CONFIG_NLS_CODEPAGE_855=m -CONFIG_NLS_CODEPAGE_857=m -CONFIG_NLS_CODEPAGE_860=m -CONFIG_NLS_CODEPAGE_861=m -CONFIG_NLS_CODEPAGE_862=m -CONFIG_NLS_CODEPAGE_863=m -CONFIG_NLS_CODEPAGE_864=m -CONFIG_NLS_CODEPAGE_865=m -CONFIG_NLS_CODEPAGE_866=m -CONFIG_NLS_CODEPAGE_869=m -CONFIG_NLS_CODEPAGE_936=m -CONFIG_NLS_CODEPAGE_950=m -CONFIG_NLS_CODEPAGE_932=m -CONFIG_NLS_CODEPAGE_949=m -CONFIG_NLS_CODEPAGE_874=m -CONFIG_NLS_ISO8859_8=m -CONFIG_NLS_CODEPAGE_1250=m -CONFIG_NLS_CODEPAGE_1251=m -CONFIG_NLS_ASCII=m -CONFIG_NLS_ISO8859_1=m -CONFIG_NLS_ISO8859_2=m -CONFIG_NLS_ISO8859_3=m -CONFIG_NLS_ISO8859_4=m -CONFIG_NLS_ISO8859_5=m -CONFIG_NLS_ISO8859_6=m -CONFIG_NLS_ISO8859_7=m -CONFIG_NLS_ISO8859_9=m -CONFIG_NLS_ISO8859_13=m -CONFIG_NLS_ISO8859_14=m -CONFIG_NLS_ISO8859_15=m -CONFIG_NLS_KOI8_R=m -CONFIG_NLS_KOI8_U=m -CONFIG_NLS_UTF8=m - -# -# Distributed Lock Manager -# -# CONFIG_DLM is not set - -# -# Profiling support -# -# CONFIG_PROFILING is not set - -# -# Kernel hacking -# -# CONFIG_PRINTK_TIME is not set -# CONFIG_ENABLE_MUST_CHECK is not set -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_UNUSED_SYMBOLS is not set -# CONFIG_DEBUG_FS is not set -# CONFIG_HEADERS_CHECK is not set -# CONFIG_DEBUG_KERNEL is not set -# CONFIG_DEBUG_BUGVERBOSE is not set -CONFIG_FRAME_POINTER=y -# CONFIG_DEBUG_USER is not set - -# -# Security options -# -# CONFIG_KEYS is not set -# CONFIG_SECURITY is not set -# CONFIG_CRYPTO is not set - -# -# Library routines -# -CONFIG_BITREVERSE=y -CONFIG_CRC_CCITT=m -CONFIG_CRC16=m -# CONFIG_CRC_ITU_T is not set -CONFIG_CRC32=y -# CONFIG_CRC7 is not set -CONFIG_LIBCRC32C=m -CONFIG_ZLIB_INFLATE=m -CONFIG_ZLIB_DEFLATE=m -CONFIG_PLIST=y -CONFIG_HAS_IOMEM=y -CONFIG_HAS_IOPORT=y -CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-ezx-2.6.23/patches/defconfig-e2 b/packages/linux/linux-ezx-2.6.23/patches/defconfig-e2 deleted file mode 100644 index 206ae45fc7..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/defconfig-e2 +++ /dev/null @@ -1,1189 +0,0 @@ -# -# Automatically generated make config: don't edit -# Linux kernel version: 2.6.23.1 -# Wed Oct 24 18:05:01 2007 -# -CONFIG_ARM=y -CONFIG_SYS_SUPPORTS_APM_EMULATION=y -CONFIG_GENERIC_GPIO=y -CONFIG_GENERIC_TIME=y -CONFIG_GENERIC_CLOCKEVENTS=y -CONFIG_MMU=y -# CONFIG_NO_IOPORT is not set -CONFIG_GENERIC_HARDIRQS=y -CONFIG_STACKTRACE_SUPPORT=y -CONFIG_LOCKDEP_SUPPORT=y -CONFIG_TRACE_IRQFLAGS_SUPPORT=y -CONFIG_HARDIRQS_SW_RESEND=y -CONFIG_GENERIC_IRQ_PROBE=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_ARCH_HAS_ILOG2_U32 is not set -# CONFIG_ARCH_HAS_ILOG2_U64 is not set -CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y -CONFIG_ZONE_DMA=y -CONFIG_ARCH_MTD_XIP=y -CONFIG_VECTORS_BASE=0xffff0000 -CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" - -# -# General setup -# -CONFIG_EXPERIMENTAL=y -CONFIG_BROKEN_ON_SMP=y -CONFIG_LOCK_KERNEL=y -CONFIG_INIT_ENV_ARG_LIMIT=32 -CONFIG_LOCALVERSION="-ezxdev" -# CONFIG_LOCALVERSION_AUTO is not set -# CONFIG_SWAP is not set -CONFIG_SYSVIPC=y -CONFIG_SYSVIPC_SYSCTL=y -# CONFIG_POSIX_MQUEUE is not set -# CONFIG_BSD_PROCESS_ACCT is not set -# CONFIG_TASKSTATS is not set -# CONFIG_USER_NS is not set -# CONFIG_AUDIT is not set -# CONFIG_IKCONFIG is not set -CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_SYSFS_DEPRECATED is not set -# CONFIG_RELAY is not set -# CONFIG_BLK_DEV_INITRD is not set -CONFIG_CC_OPTIMIZE_FOR_SIZE=y -CONFIG_SYSCTL=y -CONFIG_EMBEDDED=y -CONFIG_UID16=y -# CONFIG_SYSCTL_SYSCALL is not set -CONFIG_KALLSYMS=y -# CONFIG_KALLSYMS_EXTRA_PASS is not set -CONFIG_HOTPLUG=y -CONFIG_PRINTK=y -CONFIG_BUG=y -CONFIG_ELF_CORE=y -CONFIG_BASE_FULL=y -CONFIG_FUTEX=y -CONFIG_ANON_INODES=y -CONFIG_EPOLL=y -CONFIG_SIGNALFD=y -CONFIG_EVENTFD=y -CONFIG_SHMEM=y -CONFIG_VM_EVENT_COUNTERS=y -CONFIG_SLAB=y -# CONFIG_SLUB is not set -# CONFIG_SLOB is not set -CONFIG_RT_MUTEXES=y -# CONFIG_TINY_SHMEM is not set -CONFIG_BASE_SMALL=0 -CONFIG_MODULES=y -CONFIG_MODULE_UNLOAD=y -CONFIG_MODULE_FORCE_UNLOAD=y -CONFIG_MODVERSIONS=y -# CONFIG_MODULE_SRCVERSION_ALL is not set -CONFIG_KMOD=y -CONFIG_BLOCK=y -# CONFIG_LBD is not set -# CONFIG_BLK_DEV_IO_TRACE is not set -# CONFIG_LSF is not set -# CONFIG_BLK_DEV_BSG is not set - -# -# IO Schedulers -# -CONFIG_IOSCHED_NOOP=y -# CONFIG_IOSCHED_AS is not set -CONFIG_IOSCHED_DEADLINE=y -# CONFIG_IOSCHED_CFQ is not set -# CONFIG_DEFAULT_AS is not set -CONFIG_DEFAULT_DEADLINE=y -# CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="deadline" - -# -# System Type -# -# CONFIG_ARCH_AAEC2000 is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_REALVIEW is not set -# CONFIG_ARCH_VERSATILE is not set -# CONFIG_ARCH_AT91 is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_EP93XX is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_NETX is not set -# CONFIG_ARCH_H720X is not set -# CONFIG_ARCH_IMX is not set -# CONFIG_ARCH_IOP13XX is not set -# CONFIG_ARCH_IOP32X is not set -# CONFIG_ARCH_IOP33X is not set -# CONFIG_ARCH_IXP23XX is not set -# CONFIG_ARCH_IXP2000 is not set -# CONFIG_ARCH_IXP4XX is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_KS8695 is not set -# CONFIG_ARCH_NS9XXX is not set -# CONFIG_ARCH_MXC is not set -# CONFIG_ARCH_PNX4008 is not set -CONFIG_ARCH_PXA=y -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_S3C2410 is not set -# CONFIG_ARCH_SHARK is not set -# CONFIG_ARCH_LH7A40X is not set -# CONFIG_ARCH_DAVINCI is not set -# CONFIG_ARCH_OMAP is not set - -# -# Intel PXA2xx Implementations -# -# CONFIG_ARCH_LUBBOCK is not set -# CONFIG_MACH_LOGICPD_PXA270 is not set -# CONFIG_MACH_MAINSTONE is not set -# CONFIG_ARCH_PXA_IDP is not set -# CONFIG_PXA_SHARPSL is not set -# CONFIG_MACH_TRIZEPS4 is not set -# CONFIG_MACH_EM_X270 is not set -CONFIG_PXA_EZX=y -# CONFIG_PXA_EZX_E680 is not set -# CONFIG_PXA_EZX_A780 is not set -# CONFIG_PXA_EZX_E2 is not set -CONFIG_PXA_EZX_A1200=y -# CONFIG_PXA_EZX_E6 is not set -# CONFIG_EZX_BP is not set -CONFIG_EZX_PCAP=y -CONFIG_EZX_EOC=y -# CONFIG_EZX_EMU is not set -CONFIG_PXA27x=y -CONFIG_PXA_SSP=y - -# -# Boot options -# - -# -# Power management -# - -# -# Processor Type -# -CONFIG_CPU_32=y -CONFIG_CPU_XSCALE=y -CONFIG_CPU_32v5=y -CONFIG_CPU_ABRT_EV5T=y -CONFIG_CPU_CACHE_VIVT=y -CONFIG_CPU_TLB_V4WBI=y -CONFIG_CPU_CP15=y -CONFIG_CPU_CP15_MMU=y - -# -# Processor Features -# -CONFIG_ARM_THUMB=y -# CONFIG_CPU_DCACHE_DISABLE is not set -# CONFIG_OUTER_CACHE is not set -CONFIG_IWMMXT=y -CONFIG_XSCALE_PMU=y - -# -# Bus support -# -# CONFIG_PCI_SYSCALL is not set -# CONFIG_ARCH_SUPPORTS_MSI is not set - -# -# PCCARD (PCMCIA/CardBus) support -# -# CONFIG_PCCARD is not set - -# -# Kernel Features -# -# CONFIG_TICK_ONESHOT is not set -# CONFIG_NO_HZ is not set -# CONFIG_HIGH_RES_TIMERS is not set -CONFIG_PREEMPT=y -CONFIG_HZ=100 -CONFIG_AEABI=y -# CONFIG_OABI_COMPAT is not set -# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set -CONFIG_SELECT_MEMORY_MODEL=y -CONFIG_FLATMEM_MANUAL=y -# CONFIG_DISCONTIGMEM_MANUAL is not set -# CONFIG_SPARSEMEM_MANUAL is not set -CONFIG_FLATMEM=y -CONFIG_FLAT_NODE_MEM_MAP=y -# CONFIG_SPARSEMEM_STATIC is not set -CONFIG_SPLIT_PTLOCK_CPUS=4096 -# CONFIG_RESOURCES_64BIT is not set -CONFIG_ZONE_DMA_FLAG=1 -CONFIG_BOUNCE=y -CONFIG_VIRT_TO_BUS=y -CONFIG_ALIGNMENT_TRAP=y - -# -# Boot options -# -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000" -# CONFIG_XIP_KERNEL is not set -# CONFIG_KEXEC is not set - -# -# Floating point emulation -# - -# -# At least one emulation must be selected -# - -# -# Userspace binary formats -# -CONFIG_BINFMT_ELF=y -CONFIG_BINFMT_AOUT=m -CONFIG_BINFMT_MISC=m - -# -# Power management options -# -CONFIG_PM=y -# CONFIG_PM_LEGACY is not set -# CONFIG_PM_DEBUG is not set -CONFIG_SUSPEND_UP_POSSIBLE=y -# CONFIG_SUSPEND is not set -CONFIG_APM_EMULATION=y - -# -# Networking -# -CONFIG_NET=y - -# -# Networking options -# -CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set -CONFIG_UNIX=y -# CONFIG_NET_KEY is not set -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_FIB_HASH=y -CONFIG_IP_PNP=y -CONFIG_IP_PNP_DHCP=y -# CONFIG_IP_PNP_BOOTP is not set -# CONFIG_IP_PNP_RARP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_ARPD is not set -CONFIG_SYN_COOKIES=y -# CONFIG_INET_AH is not set -# CONFIG_INET_ESP is not set -# CONFIG_INET_IPCOMP is not set -# CONFIG_INET_XFRM_TUNNEL is not set -# CONFIG_INET_TUNNEL is not set -# CONFIG_INET_XFRM_MODE_TRANSPORT is not set -# CONFIG_INET_XFRM_MODE_TUNNEL is not set -# CONFIG_INET_XFRM_MODE_BEET is not set -# CONFIG_INET_DIAG is not set -# CONFIG_TCP_CONG_ADVANCED is not set -CONFIG_TCP_CONG_CUBIC=y -CONFIG_DEFAULT_TCP_CONG="cubic" -# CONFIG_TCP_MD5SIG is not set -# CONFIG_IPV6 is not set -# CONFIG_INET6_XFRM_TUNNEL is not set -# CONFIG_INET6_TUNNEL is not set -# CONFIG_NETWORK_SECMARK is not set -# CONFIG_NETFILTER is not set -# CONFIG_IP_DCCP is not set -# CONFIG_IP_SCTP is not set -# CONFIG_TIPC is not set -# CONFIG_ATM is not set -# CONFIG_BRIDGE is not set -# CONFIG_VLAN_8021Q is not set -# CONFIG_DECNET is not set -# CONFIG_LLC2 is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network testing -# -# CONFIG_NET_PKTGEN is not set -# CONFIG_HAMRADIO is not set -# CONFIG_IRDA is not set -CONFIG_BT=y -CONFIG_BT_L2CAP=y -CONFIG_BT_SCO=y -CONFIG_BT_RFCOMM=y -CONFIG_BT_RFCOMM_TTY=y -CONFIG_BT_BNEP=y -CONFIG_BT_BNEP_MC_FILTER=y -CONFIG_BT_BNEP_PROTO_FILTER=y -CONFIG_BT_HIDP=y - -# -# Bluetooth device drivers -# -# CONFIG_BT_HCIUSB is not set -CONFIG_BT_HCIUART=y -CONFIG_BT_HCIUART_H4=y -# CONFIG_BT_HCIUART_BCSP is not set -# CONFIG_BT_HCIBCM203X is not set -# CONFIG_BT_HCIBPA10X is not set -# CONFIG_BT_HCIBFUSB is not set -# CONFIG_BT_HCIVHCI is not set -# CONFIG_AF_RXRPC is not set - -# -# Wireless -# -# CONFIG_CFG80211 is not set -# CONFIG_WIRELESS_EXT is not set -# CONFIG_MAC80211 is not set -# CONFIG_IEEE80211 is not set -# CONFIG_RFKILL is not set -# CONFIG_NET_9P is not set - -# -# Device Drivers -# - -# -# Generic Driver Options -# -CONFIG_STANDALONE=y -CONFIG_PREVENT_FIRMWARE_BUILD=y -CONFIG_FW_LOADER=m -# CONFIG_SYS_HYPERVISOR is not set -CONFIG_CONNECTOR=m -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -# CONFIG_MTD_CONCAT is not set -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_REDBOOT_PARTS is not set -# CONFIG_MTD_CMDLINE_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -# CONFIG_MTD_BLKDEVS is not set -# CONFIG_MTD_BLOCK is not set -# CONFIG_MTD_BLOCK_RO is not set -# CONFIG_FTL is not set -# CONFIG_NFTL is not set -# CONFIG_INFTL is not set -# CONFIG_RFD_FTL is not set -# CONFIG_SSFDC is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -CONFIG_MTD_CFI_ADV_OPTIONS=y -CONFIG_MTD_CFI_NOSWAP=y -# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set -# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set -CONFIG_MTD_CFI_GEOMETRY=y -# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set -CONFIG_MTD_MAP_BANK_WIDTH_2=y -# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set -CONFIG_MTD_CFI_I1=y -# CONFIG_MTD_CFI_I2 is not set -# CONFIG_MTD_CFI_I4 is not set -# CONFIG_MTD_CFI_I8 is not set -# CONFIG_MTD_OTP is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_CFI_STAA is not set -CONFIG_MTD_CFI_UTIL=y -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -CONFIG_MTD_XIP=y - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_COMPLEX_MAPPINGS is not set -CONFIG_MTD_PHYSMAP=y -CONFIG_MTD_PHYSMAP_START=0x0 -CONFIG_MTD_PHYSMAP_LEN=0x0 -CONFIG_MTD_PHYSMAP_BANKWIDTH=2 -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_SHARP_SL is not set -# CONFIG_MTD_EZX is not set -# CONFIG_MTD_PLATRAM is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_DATAFLASH is not set -# CONFIG_MTD_M25P80 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_PHRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLOCK2MTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOC2001PLUS is not set -# CONFIG_MTD_NAND is not set -# CONFIG_MTD_ONENAND is not set - -# -# UBI - Unsorted block images -# -# CONFIG_MTD_UBI is not set -# CONFIG_PARPORT is not set -CONFIG_BLK_DEV=y -# CONFIG_BLK_DEV_COW_COMMON is not set -CONFIG_BLK_DEV_LOOP=m -# CONFIG_BLK_DEV_CRYPTOLOOP is not set -# CONFIG_BLK_DEV_NBD is not set -# CONFIG_BLK_DEV_UB is not set -# CONFIG_BLK_DEV_RAM is not set -# CONFIG_CDROM_PKTCDVD is not set -# CONFIG_ATA_OVER_ETH is not set -# CONFIG_IDE is not set - -# -# SCSI device support -# -# CONFIG_RAID_ATTRS is not set -# CONFIG_SCSI is not set -# CONFIG_SCSI_DMA is not set -# CONFIG_SCSI_NETLINK is not set -# CONFIG_ATA is not set -# CONFIG_MD is not set -CONFIG_NETDEVICES=y -# CONFIG_NETDEVICES_MULTIQUEUE is not set -CONFIG_DUMMY=y -# CONFIG_BONDING is not set -# CONFIG_MACVLAN is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_NET_ETHERNET is not set -# CONFIG_NETDEV_1000 is not set -# CONFIG_NETDEV_10000 is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set - -# -# USB Network Adapters -# -# CONFIG_USB_CATC is not set -# CONFIG_USB_KAWETH is not set -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_RTL8150 is not set -# CONFIG_USB_USBNET_MII is not set -# CONFIG_USB_USBNET is not set -# CONFIG_WAN is not set -CONFIG_PPP=m -CONFIG_PPP_MULTILINK=y -CONFIG_PPP_FILTER=y -CONFIG_PPP_ASYNC=m -CONFIG_PPP_SYNC_TTY=m -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -# CONFIG_PPP_MPPE is not set -# CONFIG_PPPOE is not set -# CONFIG_PPPOL2TP is not set -# CONFIG_SLIP is not set -CONFIG_SLHC=m -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set -# CONFIG_ISDN is not set - -# -# Input device support -# -CONFIG_INPUT=y -# CONFIG_INPUT_FF_MEMLESS is not set -# CONFIG_INPUT_POLLDEV is not set - -# -# Userland interfaces -# -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_TSDEV is not set -CONFIG_INPUT_EVDEV=y -# CONFIG_INPUT_EVBUG is not set - -# -# Input Device Drivers -# -CONFIG_INPUT_KEYBOARD=y -# CONFIG_KEYBOARD_ATKBD is not set -# CONFIG_KEYBOARD_SUNKBD is not set -# CONFIG_KEYBOARD_LKKBD is not set -# CONFIG_KEYBOARD_XTKBD is not set -# CONFIG_KEYBOARD_NEWTON is not set -# CONFIG_KEYBOARD_STOWAWAY is not set -# CONFIG_KEYBOARD_PXA27x is not set -CONFIG_KEYBOARD_GPIO=y -CONFIG_KEYBOARD_PXA=y -# CONFIG_INPUT_MOUSE is not set -# CONFIG_INPUT_JOYSTICK is not set -# CONFIG_INPUT_TABLET is not set -# CONFIG_INPUT_TOUCHSCREEN is not set -CONFIG_INPUT_MISC=y -# CONFIG_INPUT_ATI_REMOTE is not set -# CONFIG_INPUT_ATI_REMOTE2 is not set -# CONFIG_INPUT_KEYSPAN_REMOTE is not set -# CONFIG_INPUT_POWERMATE is not set -# CONFIG_INPUT_YEALINK is not set -CONFIG_INPUT_UINPUT=y - -# -# Hardware I/O ports -# -# CONFIG_SERIO is not set -# CONFIG_GAMEPORT is not set - -# -# Character devices -# -CONFIG_VT=y -CONFIG_VT_CONSOLE=y -CONFIG_HW_CONSOLE=y -# CONFIG_VT_HW_CONSOLE_BINDING is not set -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_8250 is not set - -# -# Non-8250 serial port support -# -CONFIG_SERIAL_PXA=y -CONFIG_SERIAL_PXA_CONSOLE=y -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_LEGACY_PTYS=y -CONFIG_LEGACY_PTY_COUNT=8 -# CONFIG_IPMI_HANDLER is not set -# CONFIG_WATCHDOG is not set -CONFIG_HW_RANDOM=y -# CONFIG_NVRAM is not set -# CONFIG_R3964 is not set -# CONFIG_RAW_DRIVER is not set -# CONFIG_TCG_TPM is not set -CONFIG_I2C=y -CONFIG_I2C_BOARDINFO=y -CONFIG_I2C_CHARDEV=y - -# -# I2C Algorithms -# -# CONFIG_I2C_ALGOBIT is not set -# CONFIG_I2C_ALGOPCF is not set -# CONFIG_I2C_ALGOPCA is not set - -# -# I2C Hardware Bus support -# -# CONFIG_I2C_GPIO is not set -CONFIG_I2C_PXA=y -# CONFIG_I2C_PXA_SLAVE is not set -# CONFIG_I2C_OCORES is not set -# CONFIG_I2C_PARPORT_LIGHT is not set -# CONFIG_I2C_SIMTEC is not set -# CONFIG_I2C_TAOS_EVM is not set -# CONFIG_I2C_STUB is not set -# CONFIG_I2C_TINY_USB is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_DS1337 is not set -# CONFIG_SENSORS_DS1374 is not set -# CONFIG_DS1682 is not set -# CONFIG_SENSORS_EEPROM is not set -# CONFIG_SENSORS_PCF8574 is not set -# CONFIG_SENSORS_PCA9539 is not set -# CONFIG_SENSORS_PCF8591 is not set -# CONFIG_SENSORS_MAX6875 is not set -# CONFIG_SENSORS_TSL2550 is not set -# CONFIG_I2C_DEBUG_CORE is not set -# CONFIG_I2C_DEBUG_ALGO is not set -# CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set - -# -# SPI support -# -CONFIG_SPI=y -CONFIG_SPI_MASTER=y - -# -# SPI Master Controller Drivers -# -# CONFIG_SPI_BITBANG is not set -CONFIG_SPI_PXA2XX=m - -# -# SPI Protocol Masters -# -# CONFIG_SPI_AT25 is not set -# CONFIG_SPI_SPIDEV is not set -# CONFIG_SPI_TLE62X0 is not set -# CONFIG_W1 is not set -# CONFIG_HWMON is not set -CONFIG_MISC_DEVICES=y -# CONFIG_EEPROM_93CX6 is not set - -# -# Multifunction device drivers -# -# CONFIG_MFD_SM501 is not set -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y - -# -# LED drivers -# -# CONFIG_LEDS_GPIO is not set - -# -# LED Triggers -# -CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_TIMER=y -CONFIG_LEDS_TRIGGER_HEARTBEAT=y - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_DAB is not set - -# -# Graphics support -# -CONFIG_BACKLIGHT_LCD_SUPPORT=y -# CONFIG_LCD_CLASS_DEVICE is not set -CONFIG_BACKLIGHT_CLASS_DEVICE=y -# CONFIG_BACKLIGHT_EZX is not set - -# -# Display device support -# -# CONFIG_DISPLAY_SUPPORT is not set -# CONFIG_VGASTATE is not set -# CONFIG_VIDEO_OUTPUT_CONTROL is not set -CONFIG_FB=y -# CONFIG_FIRMWARE_EDID is not set -# CONFIG_FB_DDC is not set -CONFIG_FB_CFB_FILLRECT=y -CONFIG_FB_CFB_COPYAREA=y -CONFIG_FB_CFB_IMAGEBLIT=y -# CONFIG_FB_SYS_FILLRECT is not set -# CONFIG_FB_SYS_COPYAREA is not set -# CONFIG_FB_SYS_IMAGEBLIT is not set -# CONFIG_FB_SYS_FOPS is not set -CONFIG_FB_DEFERRED_IO=y -# CONFIG_FB_SVGALIB is not set -# CONFIG_FB_MACMODES is not set -# CONFIG_FB_BACKLIGHT is not set -# CONFIG_FB_MODE_HELPERS is not set -# CONFIG_FB_TILEBLITTING is not set - -# -# Frame buffer hardware drivers -# -# CONFIG_FB_S1D13XXX is not set -CONFIG_FB_PXA=y -CONFIG_FB_PXA_LCD_QVGA=y -# CONFIG_FB_PXA_LCD_VGA is not set -CONFIG_FB_PXA_OVERLAY=y -CONFIG_FB_PXA_PARAMETERS=y -# CONFIG_FB_MBX is not set -# CONFIG_FB_VIRTUAL is not set - -# -# Console display driver support -# -# CONFIG_VGA_CONSOLE is not set -CONFIG_DUMMY_CONSOLE=y -CONFIG_FRAMEBUFFER_CONSOLE=y -# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set -# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set -CONFIG_FONTS=y -# CONFIG_FONT_8x8 is not set -# CONFIG_FONT_8x16 is not set -# CONFIG_FONT_6x11 is not set -# CONFIG_FONT_7x14 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set -CONFIG_FONT_MINI_4x6=y -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_SUN12x22 is not set -# CONFIG_FONT_10x18 is not set -# CONFIG_LOGO is not set - -# -# Sound -# -CONFIG_SOUND=y - -# -# Advanced Linux Sound Architecture -# -CONFIG_SND=y -CONFIG_SND_TIMER=y -CONFIG_SND_PCM=y -# CONFIG_SND_SEQUENCER is not set -CONFIG_SND_OSSEMUL=y -CONFIG_SND_MIXER_OSS=y -CONFIG_SND_PCM_OSS=y -CONFIG_SND_PCM_OSS_PLUGINS=y -# CONFIG_SND_DYNAMIC_MINORS is not set -CONFIG_SND_SUPPORT_OLD_API=y -CONFIG_SND_VERBOSE_PROCFS=y -# CONFIG_SND_VERBOSE_PRINTK is not set -# CONFIG_SND_DEBUG is not set - -# -# Generic devices -# -# CONFIG_SND_DUMMY is not set -# CONFIG_SND_MTPAV is not set -# CONFIG_SND_SERIAL_U16550 is not set -# CONFIG_SND_MPU401 is not set - -# -# ALSA ARM devices -# -# CONFIG_SND_PXA2XX_AC97 is not set - -# -# USB devices -# -# CONFIG_SND_USB_AUDIO is not set -# CONFIG_SND_USB_CAIAQ is not set - -# -# System on Chip audio support -# -CONFIG_SND_SOC=y -CONFIG_SND_PXA2XX_SOC=y -CONFIG_SND_PXA2XX_SOC_SSP=y -CONFIG_SND_PXA2XX_SOC_EZX=y - -# -# SoC Audio support for SuperH -# -CONFIG_SND_SOC_PCAP2=y - -# -# Open Sound System -# -# CONFIG_SOUND_PRIME is not set -CONFIG_HID_SUPPORT=y -CONFIG_HID=y -# CONFIG_HID_DEBUG is not set - -# -# USB Input Devices -# -# CONFIG_USB_HID is not set - -# -# USB HID Boot Protocol drivers -# -# CONFIG_USB_KBD is not set -# CONFIG_USB_MOUSE is not set -CONFIG_USB_SUPPORT=y -CONFIG_USB_ARCH_HAS_HCD=y -CONFIG_USB_ARCH_HAS_OHCI=y -# CONFIG_USB_ARCH_HAS_EHCI is not set -CONFIG_USB=y -# CONFIG_USB_DEBUG is not set - -# -# Miscellaneous USB options -# -# CONFIG_USB_DEVICEFS is not set -# CONFIG_USB_DEVICE_CLASS is not set -# CONFIG_USB_DYNAMIC_MINORS is not set -# CONFIG_USB_SUSPEND is not set -# CONFIG_USB_PERSIST is not set -# CONFIG_USB_OTG is not set - -# -# USB Host Controller Drivers -# -# CONFIG_USB_ISP116X_HCD is not set -CONFIG_USB_OHCI_HCD=y -# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set -# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set -CONFIG_USB_OHCI_LITTLE_ENDIAN=y -# CONFIG_USB_SL811_HCD is not set -# CONFIG_USB_R8A66597_HCD is not set - -# -# USB Device Class drivers -# -# CONFIG_USB_ACM is not set -# CONFIG_USB_PRINTER is not set - -# -# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' -# - -# -# may also be needed; see USB_STORAGE Help for more information -# -# CONFIG_USB_LIBUSUAL is not set - -# -# USB Imaging devices -# -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_MON is not set - -# -# USB port drivers -# - -# -# USB Serial Converter support -# -# CONFIG_USB_SERIAL is not set - -# -# USB Miscellaneous drivers -# -# CONFIG_USB_EMI62 is not set -# CONFIG_USB_EMI26 is not set -# CONFIG_USB_ADUTUX is not set -# CONFIG_USB_AUERSWALD is not set -# CONFIG_USB_RIO500 is not set -# CONFIG_USB_LEGOTOWER is not set -# CONFIG_USB_LCD is not set -# CONFIG_USB_BERRY_CHARGE is not set -# CONFIG_USB_LED is not set -# CONFIG_USB_CYPRESS_CY7C63 is not set -# CONFIG_USB_CYTHERM is not set -# CONFIG_USB_PHIDGET is not set -# CONFIG_USB_IDMOUSE is not set -# CONFIG_USB_FTDI_ELAN is not set -# CONFIG_USB_APPLEDISPLAY is not set -# CONFIG_USB_LD is not set -# CONFIG_USB_TRANCEVIBRATOR is not set -# CONFIG_USB_IOWARRIOR is not set - -# -# USB DSL modem support -# - -# -# USB Gadget Support -# -CONFIG_USB_GADGET=y -# CONFIG_USB_GADGET_DEBUG_FILES is not set -CONFIG_USB_GADGET_SELECTED=y -# CONFIG_USB_GADGET_AMD5536UDC is not set -# CONFIG_USB_GADGET_FSL_USB2 is not set -# CONFIG_USB_GADGET_NET2280 is not set -# CONFIG_USB_GADGET_PXA2XX is not set -CONFIG_USB_GADGET_PXA27X=y -CONFIG_USB_PXA27X=y -# CONFIG_USB_PXA2XX_SMALL is not set -# CONFIG_USB_GADGET_M66592 is not set -# CONFIG_USB_GADGET_GOKU is not set -# CONFIG_USB_GADGET_LH7A40X is not set -# CONFIG_USB_GADGET_OMAP is not set -# CONFIG_USB_GADGET_S3C2410 is not set -# CONFIG_USB_GADGET_AT91 is not set -# CONFIG_USB_GADGET_DUMMY_HCD is not set -# CONFIG_USB_GADGET_DUALSPEED is not set -# CONFIG_USB_ZERO is not set -CONFIG_USB_ETH=y -# CONFIG_USB_ETH_RNDIS is not set -# CONFIG_USB_GADGETFS is not set -# CONFIG_USB_FILE_STORAGE is not set -# CONFIG_USB_G_SERIAL is not set -# CONFIG_USB_MIDI_GADGET is not set -CONFIG_MMC=y -# CONFIG_MMC_DEBUG is not set -# CONFIG_MMC_UNSAFE_RESUME is not set - -# -# MMC/SD Card Drivers -# -CONFIG_MMC_BLOCK=y -CONFIG_MMC_BLOCK_BOUNCE=y - -# -# MMC/SD Host Controller Drivers -# -CONFIG_MMC_PXA=y -CONFIG_RTC_LIB=y -# CONFIG_RTC_CLASS is not set - -# -# DMA Engine support -# -# CONFIG_DMA_ENGINE is not set - -# -# DMA Clients -# - -# -# DMA Devices -# - -# -# File systems -# -CONFIG_EXT2_FS=y -# CONFIG_EXT2_FS_XATTR is not set -# CONFIG_EXT2_FS_XIP is not set -CONFIG_EXT3_FS=m -CONFIG_EXT3_FS_XATTR=y -# CONFIG_EXT3_FS_POSIX_ACL is not set -# CONFIG_EXT3_FS_SECURITY is not set -# CONFIG_EXT4DEV_FS is not set -CONFIG_JBD=m -# CONFIG_JBD_DEBUG is not set -CONFIG_FS_MBCACHE=y -CONFIG_REISERFS_FS=m -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -CONFIG_REISERFS_FS_XATTR=y -CONFIG_REISERFS_FS_POSIX_ACL=y -CONFIG_REISERFS_FS_SECURITY=y -# CONFIG_JFS_FS is not set -CONFIG_FS_POSIX_ACL=y -# CONFIG_XFS_FS is not set -# CONFIG_GFS2_FS is not set -# CONFIG_OCFS2_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_ROMFS_FS is not set -CONFIG_INOTIFY=y -CONFIG_INOTIFY_USER=y -# CONFIG_QUOTA is not set -CONFIG_DNOTIFY=y -CONFIG_AUTOFS_FS=y -CONFIG_AUTOFS4_FS=y -# CONFIG_FUSE_FS is not set - -# -# CD-ROM/DVD Filesystems -# -CONFIG_ISO9660_FS=m -CONFIG_JOLIET=y -CONFIG_ZISOFS=y -# CONFIG_UDF_FS is not set - -# -# DOS/FAT/NT Filesystems -# -CONFIG_FAT_FS=m -CONFIG_MSDOS_FS=m -CONFIG_VFAT_FS=m -CONFIG_FAT_DEFAULT_CODEPAGE=437 -CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" -# CONFIG_NTFS_FS is not set - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -CONFIG_PROC_SYSCTL=y -CONFIG_SYSFS=y -CONFIG_TMPFS=y -# CONFIG_TMPFS_POSIX_ACL is not set -# CONFIG_HUGETLB_PAGE is not set -CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set - -# -# Miscellaneous filesystems -# -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_HFSPLUS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS2_FS is not set -CONFIG_CRAMFS=m -# CONFIG_VXFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set - -# -# Network File Systems -# -CONFIG_NFS_FS=m -CONFIG_NFS_V3=y -CONFIG_NFS_V3_ACL=y -# CONFIG_NFS_V4 is not set -CONFIG_NFS_DIRECTIO=y -CONFIG_NFSD=m -CONFIG_NFSD_V2_ACL=y -CONFIG_NFSD_V3=y -CONFIG_NFSD_V3_ACL=y -# CONFIG_NFSD_V4 is not set -CONFIG_NFSD_TCP=y -CONFIG_LOCKD=m -CONFIG_LOCKD_V4=y -CONFIG_EXPORTFS=m -CONFIG_NFS_ACL_SUPPORT=m -CONFIG_NFS_COMMON=y -CONFIG_SUNRPC=m -# CONFIG_SUNRPC_BIND34 is not set -# CONFIG_RPCSEC_GSS_KRB5 is not set -# CONFIG_RPCSEC_GSS_SPKM3 is not set -CONFIG_SMB_FS=m -# CONFIG_SMB_NLS_DEFAULT is not set -CONFIG_CIFS=m -CONFIG_CIFS_STATS=y -# CONFIG_CIFS_STATS2 is not set -CONFIG_CIFS_WEAK_PW_HASH=y -CONFIG_CIFS_XATTR=y -CONFIG_CIFS_POSIX=y -# CONFIG_CIFS_DEBUG2 is not set -# CONFIG_CIFS_EXPERIMENTAL is not set -# CONFIG_NCP_FS is not set -# CONFIG_CODA_FS is not set -# CONFIG_AFS_FS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y - -# -# Native Language Support -# -CONFIG_NLS=y -CONFIG_NLS_DEFAULT="iso8859-1" -CONFIG_NLS_CODEPAGE_437=m -CONFIG_NLS_CODEPAGE_737=m -CONFIG_NLS_CODEPAGE_775=m -CONFIG_NLS_CODEPAGE_850=m -CONFIG_NLS_CODEPAGE_852=m -CONFIG_NLS_CODEPAGE_855=m -CONFIG_NLS_CODEPAGE_857=m -CONFIG_NLS_CODEPAGE_860=m -CONFIG_NLS_CODEPAGE_861=m -CONFIG_NLS_CODEPAGE_862=m -CONFIG_NLS_CODEPAGE_863=m -CONFIG_NLS_CODEPAGE_864=m -CONFIG_NLS_CODEPAGE_865=m -CONFIG_NLS_CODEPAGE_866=m -CONFIG_NLS_CODEPAGE_869=m -CONFIG_NLS_CODEPAGE_936=m -CONFIG_NLS_CODEPAGE_950=m -CONFIG_NLS_CODEPAGE_932=m -CONFIG_NLS_CODEPAGE_949=m -CONFIG_NLS_CODEPAGE_874=m -CONFIG_NLS_ISO8859_8=m -CONFIG_NLS_CODEPAGE_1250=m -CONFIG_NLS_CODEPAGE_1251=m -CONFIG_NLS_ASCII=m -CONFIG_NLS_ISO8859_1=m -CONFIG_NLS_ISO8859_2=m -CONFIG_NLS_ISO8859_3=m -CONFIG_NLS_ISO8859_4=m -CONFIG_NLS_ISO8859_5=m -CONFIG_NLS_ISO8859_6=m -CONFIG_NLS_ISO8859_7=m -CONFIG_NLS_ISO8859_9=m -CONFIG_NLS_ISO8859_13=m -CONFIG_NLS_ISO8859_14=m -CONFIG_NLS_ISO8859_15=m -CONFIG_NLS_KOI8_R=m -CONFIG_NLS_KOI8_U=m -CONFIG_NLS_UTF8=m - -# -# Distributed Lock Manager -# -# CONFIG_DLM is not set - -# -# Profiling support -# -# CONFIG_PROFILING is not set - -# -# Kernel hacking -# -# CONFIG_PRINTK_TIME is not set -# CONFIG_ENABLE_MUST_CHECK is not set -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_UNUSED_SYMBOLS is not set -# CONFIG_DEBUG_FS is not set -# CONFIG_HEADERS_CHECK is not set -# CONFIG_DEBUG_KERNEL is not set -# CONFIG_DEBUG_BUGVERBOSE is not set -CONFIG_FRAME_POINTER=y -# CONFIG_DEBUG_USER is not set - -# -# Security options -# -# CONFIG_KEYS is not set -# CONFIG_SECURITY is not set -# CONFIG_CRYPTO is not set - -# -# Library routines -# -CONFIG_BITREVERSE=y -CONFIG_CRC_CCITT=m -CONFIG_CRC16=m -# CONFIG_CRC_ITU_T is not set -CONFIG_CRC32=y -# CONFIG_CRC7 is not set -CONFIG_LIBCRC32C=m -CONFIG_ZLIB_INFLATE=m -CONFIG_ZLIB_DEFLATE=m -CONFIG_PLIST=y -CONFIG_HAS_IOMEM=y -CONFIG_HAS_IOPORT=y -CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-ezx-2.6.23/patches/defconfig-e6 b/packages/linux/linux-ezx-2.6.23/patches/defconfig-e6 deleted file mode 100644 index 733566adc6..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/defconfig-e6 +++ /dev/null @@ -1,1203 +0,0 @@ -# -# Automatically generated make config: don't edit -# Linux kernel version: 2.6.23.1 -# Wed Oct 24 18:07:51 2007 -# -CONFIG_ARM=y -CONFIG_SYS_SUPPORTS_APM_EMULATION=y -CONFIG_GENERIC_GPIO=y -CONFIG_GENERIC_TIME=y -CONFIG_GENERIC_CLOCKEVENTS=y -CONFIG_MMU=y -# CONFIG_NO_IOPORT is not set -CONFIG_GENERIC_HARDIRQS=y -CONFIG_STACKTRACE_SUPPORT=y -CONFIG_LOCKDEP_SUPPORT=y -CONFIG_TRACE_IRQFLAGS_SUPPORT=y -CONFIG_HARDIRQS_SW_RESEND=y -CONFIG_GENERIC_IRQ_PROBE=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_ARCH_HAS_ILOG2_U32 is not set -# CONFIG_ARCH_HAS_ILOG2_U64 is not set -CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y -CONFIG_ZONE_DMA=y -CONFIG_ARCH_MTD_XIP=y -CONFIG_VECTORS_BASE=0xffff0000 -CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" - -# -# General setup -# -CONFIG_EXPERIMENTAL=y -CONFIG_BROKEN_ON_SMP=y -CONFIG_LOCK_KERNEL=y -CONFIG_INIT_ENV_ARG_LIMIT=32 -CONFIG_LOCALVERSION="-ezxdev" -# CONFIG_LOCALVERSION_AUTO is not set -# CONFIG_SWAP is not set -CONFIG_SYSVIPC=y -CONFIG_SYSVIPC_SYSCTL=y -# CONFIG_POSIX_MQUEUE is not set -# CONFIG_BSD_PROCESS_ACCT is not set -# CONFIG_TASKSTATS is not set -# CONFIG_USER_NS is not set -# CONFIG_AUDIT is not set -# CONFIG_IKCONFIG is not set -CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_SYSFS_DEPRECATED is not set -# CONFIG_RELAY is not set -# CONFIG_BLK_DEV_INITRD is not set -CONFIG_CC_OPTIMIZE_FOR_SIZE=y -CONFIG_SYSCTL=y -CONFIG_EMBEDDED=y -CONFIG_UID16=y -# CONFIG_SYSCTL_SYSCALL is not set -CONFIG_KALLSYMS=y -# CONFIG_KALLSYMS_EXTRA_PASS is not set -CONFIG_HOTPLUG=y -CONFIG_PRINTK=y -CONFIG_BUG=y -CONFIG_ELF_CORE=y -CONFIG_BASE_FULL=y -CONFIG_FUTEX=y -CONFIG_ANON_INODES=y -CONFIG_EPOLL=y -CONFIG_SIGNALFD=y -CONFIG_EVENTFD=y -CONFIG_SHMEM=y -CONFIG_VM_EVENT_COUNTERS=y -CONFIG_SLAB=y -# CONFIG_SLUB is not set -# CONFIG_SLOB is not set -CONFIG_RT_MUTEXES=y -# CONFIG_TINY_SHMEM is not set -CONFIG_BASE_SMALL=0 -CONFIG_MODULES=y -CONFIG_MODULE_UNLOAD=y -CONFIG_MODULE_FORCE_UNLOAD=y -CONFIG_MODVERSIONS=y -# CONFIG_MODULE_SRCVERSION_ALL is not set -CONFIG_KMOD=y -CONFIG_BLOCK=y -# CONFIG_LBD is not set -# CONFIG_BLK_DEV_IO_TRACE is not set -# CONFIG_LSF is not set -# CONFIG_BLK_DEV_BSG is not set - -# -# IO Schedulers -# -CONFIG_IOSCHED_NOOP=y -# CONFIG_IOSCHED_AS is not set -CONFIG_IOSCHED_DEADLINE=y -# CONFIG_IOSCHED_CFQ is not set -# CONFIG_DEFAULT_AS is not set -CONFIG_DEFAULT_DEADLINE=y -# CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="deadline" - -# -# System Type -# -# CONFIG_ARCH_AAEC2000 is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_REALVIEW is not set -# CONFIG_ARCH_VERSATILE is not set -# CONFIG_ARCH_AT91 is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_EP93XX is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_NETX is not set -# CONFIG_ARCH_H720X is not set -# CONFIG_ARCH_IMX is not set -# CONFIG_ARCH_IOP13XX is not set -# CONFIG_ARCH_IOP32X is not set -# CONFIG_ARCH_IOP33X is not set -# CONFIG_ARCH_IXP23XX is not set -# CONFIG_ARCH_IXP2000 is not set -# CONFIG_ARCH_IXP4XX is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_KS8695 is not set -# CONFIG_ARCH_NS9XXX is not set -# CONFIG_ARCH_MXC is not set -# CONFIG_ARCH_PNX4008 is not set -CONFIG_ARCH_PXA=y -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_S3C2410 is not set -# CONFIG_ARCH_SHARK is not set -# CONFIG_ARCH_LH7A40X is not set -# CONFIG_ARCH_DAVINCI is not set -# CONFIG_ARCH_OMAP is not set - -# -# Intel PXA2xx Implementations -# -# CONFIG_ARCH_LUBBOCK is not set -# CONFIG_MACH_LOGICPD_PXA270 is not set -# CONFIG_MACH_MAINSTONE is not set -# CONFIG_ARCH_PXA_IDP is not set -# CONFIG_PXA_SHARPSL is not set -# CONFIG_MACH_TRIZEPS4 is not set -# CONFIG_MACH_EM_X270 is not set -CONFIG_PXA_EZX=y -# CONFIG_PXA_EZX_E680 is not set -# CONFIG_PXA_EZX_A780 is not set -# CONFIG_PXA_EZX_E2 is not set -# CONFIG_PXA_EZX_A1200 is not set -CONFIG_PXA_EZX_E6=y -# CONFIG_EZX_BP is not set -CONFIG_EZX_PCAP=y -CONFIG_EZX_EOC=y -# CONFIG_EZX_EMU is not set -CONFIG_PXA27x=y -CONFIG_PXA_SSP=y - -# -# Boot options -# - -# -# Power management -# - -# -# Processor Type -# -CONFIG_CPU_32=y -CONFIG_CPU_XSCALE=y -CONFIG_CPU_32v5=y -CONFIG_CPU_ABRT_EV5T=y -CONFIG_CPU_CACHE_VIVT=y -CONFIG_CPU_TLB_V4WBI=y -CONFIG_CPU_CP15=y -CONFIG_CPU_CP15_MMU=y - -# -# Processor Features -# -CONFIG_ARM_THUMB=y -# CONFIG_CPU_DCACHE_DISABLE is not set -# CONFIG_OUTER_CACHE is not set -CONFIG_IWMMXT=y -CONFIG_XSCALE_PMU=y - -# -# Bus support -# -# CONFIG_PCI_SYSCALL is not set -# CONFIG_ARCH_SUPPORTS_MSI is not set - -# -# PCCARD (PCMCIA/CardBus) support -# -# CONFIG_PCCARD is not set - -# -# Kernel Features -# -# CONFIG_TICK_ONESHOT is not set -# CONFIG_NO_HZ is not set -# CONFIG_HIGH_RES_TIMERS is not set -CONFIG_PREEMPT=y -CONFIG_HZ=100 -CONFIG_AEABI=y -# CONFIG_OABI_COMPAT is not set -# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set -CONFIG_SELECT_MEMORY_MODEL=y -CONFIG_FLATMEM_MANUAL=y -# CONFIG_DISCONTIGMEM_MANUAL is not set -# CONFIG_SPARSEMEM_MANUAL is not set -CONFIG_FLATMEM=y -CONFIG_FLAT_NODE_MEM_MAP=y -# CONFIG_SPARSEMEM_STATIC is not set -CONFIG_SPLIT_PTLOCK_CPUS=4096 -# CONFIG_RESOURCES_64BIT is not set -CONFIG_ZONE_DMA_FLAG=1 -CONFIG_BOUNCE=y -CONFIG_VIRT_TO_BUS=y -CONFIG_ALIGNMENT_TRAP=y - -# -# Boot options -# -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000" -# CONFIG_XIP_KERNEL is not set -# CONFIG_KEXEC is not set - -# -# Floating point emulation -# - -# -# At least one emulation must be selected -# - -# -# Userspace binary formats -# -CONFIG_BINFMT_ELF=y -CONFIG_BINFMT_AOUT=m -CONFIG_BINFMT_MISC=m - -# -# Power management options -# -CONFIG_PM=y -# CONFIG_PM_LEGACY is not set -# CONFIG_PM_DEBUG is not set -CONFIG_SUSPEND_UP_POSSIBLE=y -# CONFIG_SUSPEND is not set -CONFIG_APM_EMULATION=y - -# -# Networking -# -CONFIG_NET=y - -# -# Networking options -# -CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set -CONFIG_UNIX=y -# CONFIG_NET_KEY is not set -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_FIB_HASH=y -CONFIG_IP_PNP=y -CONFIG_IP_PNP_DHCP=y -# CONFIG_IP_PNP_BOOTP is not set -# CONFIG_IP_PNP_RARP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_ARPD is not set -CONFIG_SYN_COOKIES=y -# CONFIG_INET_AH is not set -# CONFIG_INET_ESP is not set -# CONFIG_INET_IPCOMP is not set -# CONFIG_INET_XFRM_TUNNEL is not set -# CONFIG_INET_TUNNEL is not set -# CONFIG_INET_XFRM_MODE_TRANSPORT is not set -# CONFIG_INET_XFRM_MODE_TUNNEL is not set -# CONFIG_INET_XFRM_MODE_BEET is not set -# CONFIG_INET_DIAG is not set -# CONFIG_TCP_CONG_ADVANCED is not set -CONFIG_TCP_CONG_CUBIC=y -CONFIG_DEFAULT_TCP_CONG="cubic" -# CONFIG_TCP_MD5SIG is not set -# CONFIG_IPV6 is not set -# CONFIG_INET6_XFRM_TUNNEL is not set -# CONFIG_INET6_TUNNEL is not set -# CONFIG_NETWORK_SECMARK is not set -# CONFIG_NETFILTER is not set -# CONFIG_IP_DCCP is not set -# CONFIG_IP_SCTP is not set -# CONFIG_TIPC is not set -# CONFIG_ATM is not set -# CONFIG_BRIDGE is not set -# CONFIG_VLAN_8021Q is not set -# CONFIG_DECNET is not set -# CONFIG_LLC2 is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network testing -# -# CONFIG_NET_PKTGEN is not set -# CONFIG_HAMRADIO is not set -# CONFIG_IRDA is not set -CONFIG_BT=y -CONFIG_BT_L2CAP=y -CONFIG_BT_SCO=y -CONFIG_BT_RFCOMM=y -CONFIG_BT_RFCOMM_TTY=y -CONFIG_BT_BNEP=y -CONFIG_BT_BNEP_MC_FILTER=y -CONFIG_BT_BNEP_PROTO_FILTER=y -CONFIG_BT_HIDP=y - -# -# Bluetooth device drivers -# -# CONFIG_BT_HCIUSB is not set -CONFIG_BT_HCIUART=y -CONFIG_BT_HCIUART_H4=y -# CONFIG_BT_HCIUART_BCSP is not set -# CONFIG_BT_HCIBCM203X is not set -# CONFIG_BT_HCIBPA10X is not set -# CONFIG_BT_HCIBFUSB is not set -# CONFIG_BT_HCIVHCI is not set -# CONFIG_AF_RXRPC is not set - -# -# Wireless -# -# CONFIG_CFG80211 is not set -# CONFIG_WIRELESS_EXT is not set -# CONFIG_MAC80211 is not set -# CONFIG_IEEE80211 is not set -# CONFIG_RFKILL is not set -# CONFIG_NET_9P is not set - -# -# Device Drivers -# - -# -# Generic Driver Options -# -CONFIG_STANDALONE=y -CONFIG_PREVENT_FIRMWARE_BUILD=y -CONFIG_FW_LOADER=m -# CONFIG_SYS_HYPERVISOR is not set -CONFIG_CONNECTOR=m -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -# CONFIG_MTD_CONCAT is not set -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_REDBOOT_PARTS is not set -# CONFIG_MTD_CMDLINE_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -# CONFIG_MTD_BLKDEVS is not set -# CONFIG_MTD_BLOCK is not set -# CONFIG_MTD_BLOCK_RO is not set -# CONFIG_FTL is not set -# CONFIG_NFTL is not set -# CONFIG_INFTL is not set -# CONFIG_RFD_FTL is not set -# CONFIG_SSFDC is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -CONFIG_MTD_CFI_ADV_OPTIONS=y -CONFIG_MTD_CFI_NOSWAP=y -# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set -# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set -CONFIG_MTD_CFI_GEOMETRY=y -# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set -CONFIG_MTD_MAP_BANK_WIDTH_2=y -# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set -CONFIG_MTD_CFI_I1=y -# CONFIG_MTD_CFI_I2 is not set -# CONFIG_MTD_CFI_I4 is not set -# CONFIG_MTD_CFI_I8 is not set -# CONFIG_MTD_OTP is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_CFI_STAA is not set -CONFIG_MTD_CFI_UTIL=y -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -CONFIG_MTD_XIP=y - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_COMPLEX_MAPPINGS is not set -CONFIG_MTD_PHYSMAP=y -CONFIG_MTD_PHYSMAP_START=0x0 -CONFIG_MTD_PHYSMAP_LEN=0x0 -CONFIG_MTD_PHYSMAP_BANKWIDTH=2 -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_SHARP_SL is not set -# CONFIG_MTD_EZX is not set -# CONFIG_MTD_PLATRAM is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_DATAFLASH is not set -# CONFIG_MTD_M25P80 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_PHRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLOCK2MTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOC2001PLUS is not set -# CONFIG_MTD_NAND is not set -# CONFIG_MTD_ONENAND is not set - -# -# UBI - Unsorted block images -# -# CONFIG_MTD_UBI is not set -# CONFIG_PARPORT is not set -CONFIG_BLK_DEV=y -# CONFIG_BLK_DEV_COW_COMMON is not set -CONFIG_BLK_DEV_LOOP=m -# CONFIG_BLK_DEV_CRYPTOLOOP is not set -# CONFIG_BLK_DEV_NBD is not set -# CONFIG_BLK_DEV_UB is not set -# CONFIG_BLK_DEV_RAM is not set -# CONFIG_CDROM_PKTCDVD is not set -# CONFIG_ATA_OVER_ETH is not set -# CONFIG_IDE is not set - -# -# SCSI device support -# -# CONFIG_RAID_ATTRS is not set -# CONFIG_SCSI is not set -# CONFIG_SCSI_DMA is not set -# CONFIG_SCSI_NETLINK is not set -# CONFIG_ATA is not set -# CONFIG_MD is not set -CONFIG_NETDEVICES=y -# CONFIG_NETDEVICES_MULTIQUEUE is not set -CONFIG_DUMMY=y -# CONFIG_BONDING is not set -# CONFIG_MACVLAN is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_NET_ETHERNET is not set -# CONFIG_NETDEV_1000 is not set -# CONFIG_NETDEV_10000 is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set - -# -# USB Network Adapters -# -# CONFIG_USB_CATC is not set -# CONFIG_USB_KAWETH is not set -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_RTL8150 is not set -# CONFIG_USB_USBNET_MII is not set -# CONFIG_USB_USBNET is not set -# CONFIG_WAN is not set -CONFIG_PPP=m -CONFIG_PPP_MULTILINK=y -CONFIG_PPP_FILTER=y -CONFIG_PPP_ASYNC=m -CONFIG_PPP_SYNC_TTY=m -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -# CONFIG_PPP_MPPE is not set -# CONFIG_PPPOE is not set -# CONFIG_PPPOL2TP is not set -# CONFIG_SLIP is not set -CONFIG_SLHC=m -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set -# CONFIG_ISDN is not set - -# -# Input device support -# -CONFIG_INPUT=y -# CONFIG_INPUT_FF_MEMLESS is not set -# CONFIG_INPUT_POLLDEV is not set - -# -# Userland interfaces -# -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -CONFIG_INPUT_TSDEV=y -CONFIG_INPUT_TSDEV_SCREEN_X=240 -CONFIG_INPUT_TSDEV_SCREEN_Y=320 -CONFIG_INPUT_EVDEV=y -# CONFIG_INPUT_EVBUG is not set - -# -# Input Device Drivers -# -CONFIG_INPUT_KEYBOARD=y -# CONFIG_KEYBOARD_ATKBD is not set -# CONFIG_KEYBOARD_SUNKBD is not set -# CONFIG_KEYBOARD_LKKBD is not set -# CONFIG_KEYBOARD_XTKBD is not set -# CONFIG_KEYBOARD_NEWTON is not set -# CONFIG_KEYBOARD_STOWAWAY is not set -# CONFIG_KEYBOARD_PXA27x is not set -CONFIG_KEYBOARD_GPIO=y -CONFIG_KEYBOARD_PXA=y -# CONFIG_INPUT_MOUSE is not set -# CONFIG_INPUT_JOYSTICK is not set -# CONFIG_INPUT_TABLET is not set -CONFIG_INPUT_TOUCHSCREEN=y -# CONFIG_TOUCHSCREEN_ADS7846 is not set -# CONFIG_TOUCHSCREEN_FUJITSU is not set -# CONFIG_TOUCHSCREEN_GUNZE is not set -# CONFIG_TOUCHSCREEN_ELO is not set -# CONFIG_TOUCHSCREEN_MTOUCH is not set -# CONFIG_TOUCHSCREEN_MK712 is not set -# CONFIG_TOUCHSCREEN_PENMOUNT is not set -# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set -# CONFIG_TOUCHSCREEN_TOUCHWIN is not set -# CONFIG_TOUCHSCREEN_UCB1400 is not set -# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set -CONFIG_TOUCHSCREEN_PCAP=y -CONFIG_INPUT_MISC=y -# CONFIG_INPUT_ATI_REMOTE is not set -# CONFIG_INPUT_ATI_REMOTE2 is not set -# CONFIG_INPUT_KEYSPAN_REMOTE is not set -# CONFIG_INPUT_POWERMATE is not set -# CONFIG_INPUT_YEALINK is not set -CONFIG_INPUT_UINPUT=y - -# -# Hardware I/O ports -# -# CONFIG_SERIO is not set -# CONFIG_GAMEPORT is not set - -# -# Character devices -# -CONFIG_VT=y -CONFIG_VT_CONSOLE=y -CONFIG_HW_CONSOLE=y -# CONFIG_VT_HW_CONSOLE_BINDING is not set -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_8250 is not set - -# -# Non-8250 serial port support -# -CONFIG_SERIAL_PXA=y -CONFIG_SERIAL_PXA_CONSOLE=y -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_LEGACY_PTYS=y -CONFIG_LEGACY_PTY_COUNT=8 -# CONFIG_IPMI_HANDLER is not set -# CONFIG_WATCHDOG is not set -CONFIG_HW_RANDOM=y -# CONFIG_NVRAM is not set -# CONFIG_R3964 is not set -# CONFIG_RAW_DRIVER is not set -# CONFIG_TCG_TPM is not set -CONFIG_I2C=y -CONFIG_I2C_BOARDINFO=y -CONFIG_I2C_CHARDEV=y - -# -# I2C Algorithms -# -# CONFIG_I2C_ALGOBIT is not set -# CONFIG_I2C_ALGOPCF is not set -# CONFIG_I2C_ALGOPCA is not set - -# -# I2C Hardware Bus support -# -# CONFIG_I2C_GPIO is not set -CONFIG_I2C_PXA=y -# CONFIG_I2C_PXA_SLAVE is not set -# CONFIG_I2C_OCORES is not set -# CONFIG_I2C_PARPORT_LIGHT is not set -# CONFIG_I2C_SIMTEC is not set -# CONFIG_I2C_TAOS_EVM is not set -# CONFIG_I2C_STUB is not set -# CONFIG_I2C_TINY_USB is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_DS1337 is not set -# CONFIG_SENSORS_DS1374 is not set -# CONFIG_DS1682 is not set -# CONFIG_SENSORS_EEPROM is not set -# CONFIG_SENSORS_PCF8574 is not set -# CONFIG_SENSORS_PCA9539 is not set -# CONFIG_SENSORS_PCF8591 is not set -# CONFIG_SENSORS_MAX6875 is not set -# CONFIG_SENSORS_TSL2550 is not set -# CONFIG_I2C_DEBUG_CORE is not set -# CONFIG_I2C_DEBUG_ALGO is not set -# CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set - -# -# SPI support -# -CONFIG_SPI=y -CONFIG_SPI_MASTER=y - -# -# SPI Master Controller Drivers -# -# CONFIG_SPI_BITBANG is not set -CONFIG_SPI_PXA2XX=m - -# -# SPI Protocol Masters -# -# CONFIG_SPI_AT25 is not set -# CONFIG_SPI_SPIDEV is not set -# CONFIG_SPI_TLE62X0 is not set -# CONFIG_W1 is not set -# CONFIG_HWMON is not set -CONFIG_MISC_DEVICES=y -# CONFIG_EEPROM_93CX6 is not set - -# -# Multifunction device drivers -# -# CONFIG_MFD_SM501 is not set -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y - -# -# LED drivers -# -# CONFIG_LEDS_GPIO is not set - -# -# LED Triggers -# -CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_TIMER=y -CONFIG_LEDS_TRIGGER_HEARTBEAT=y - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_DAB is not set - -# -# Graphics support -# -CONFIG_BACKLIGHT_LCD_SUPPORT=y -# CONFIG_LCD_CLASS_DEVICE is not set -CONFIG_BACKLIGHT_CLASS_DEVICE=y -# CONFIG_BACKLIGHT_EZX is not set - -# -# Display device support -# -# CONFIG_DISPLAY_SUPPORT is not set -# CONFIG_VGASTATE is not set -# CONFIG_VIDEO_OUTPUT_CONTROL is not set -CONFIG_FB=y -# CONFIG_FIRMWARE_EDID is not set -# CONFIG_FB_DDC is not set -CONFIG_FB_CFB_FILLRECT=y -CONFIG_FB_CFB_COPYAREA=y -CONFIG_FB_CFB_IMAGEBLIT=y -# CONFIG_FB_SYS_FILLRECT is not set -# CONFIG_FB_SYS_COPYAREA is not set -# CONFIG_FB_SYS_IMAGEBLIT is not set -# CONFIG_FB_SYS_FOPS is not set -CONFIG_FB_DEFERRED_IO=y -# CONFIG_FB_SVGALIB is not set -# CONFIG_FB_MACMODES is not set -# CONFIG_FB_BACKLIGHT is not set -# CONFIG_FB_MODE_HELPERS is not set -# CONFIG_FB_TILEBLITTING is not set - -# -# Frame buffer hardware drivers -# -# CONFIG_FB_S1D13XXX is not set -CONFIG_FB_PXA=y -CONFIG_FB_PXA_LCD_QVGA=y -# CONFIG_FB_PXA_LCD_VGA is not set -CONFIG_FB_PXA_OVERLAY=y -CONFIG_FB_PXA_PARAMETERS=y -# CONFIG_FB_MBX is not set -# CONFIG_FB_VIRTUAL is not set - -# -# Console display driver support -# -# CONFIG_VGA_CONSOLE is not set -CONFIG_DUMMY_CONSOLE=y -CONFIG_FRAMEBUFFER_CONSOLE=y -# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set -# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set -CONFIG_FONTS=y -# CONFIG_FONT_8x8 is not set -# CONFIG_FONT_8x16 is not set -# CONFIG_FONT_6x11 is not set -# CONFIG_FONT_7x14 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set -CONFIG_FONT_MINI_4x6=y -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_SUN12x22 is not set -# CONFIG_FONT_10x18 is not set -# CONFIG_LOGO is not set - -# -# Sound -# -CONFIG_SOUND=y - -# -# Advanced Linux Sound Architecture -# -CONFIG_SND=y -CONFIG_SND_TIMER=y -CONFIG_SND_PCM=y -# CONFIG_SND_SEQUENCER is not set -CONFIG_SND_OSSEMUL=y -CONFIG_SND_MIXER_OSS=y -CONFIG_SND_PCM_OSS=y -CONFIG_SND_PCM_OSS_PLUGINS=y -# CONFIG_SND_DYNAMIC_MINORS is not set -CONFIG_SND_SUPPORT_OLD_API=y -CONFIG_SND_VERBOSE_PROCFS=y -# CONFIG_SND_VERBOSE_PRINTK is not set -# CONFIG_SND_DEBUG is not set - -# -# Generic devices -# -# CONFIG_SND_DUMMY is not set -# CONFIG_SND_MTPAV is not set -# CONFIG_SND_SERIAL_U16550 is not set -# CONFIG_SND_MPU401 is not set - -# -# ALSA ARM devices -# -# CONFIG_SND_PXA2XX_AC97 is not set - -# -# USB devices -# -# CONFIG_SND_USB_AUDIO is not set -# CONFIG_SND_USB_CAIAQ is not set - -# -# System on Chip audio support -# -CONFIG_SND_SOC=y -CONFIG_SND_PXA2XX_SOC=y -CONFIG_SND_PXA2XX_SOC_SSP=y -CONFIG_SND_PXA2XX_SOC_EZX=y - -# -# SoC Audio support for SuperH -# -CONFIG_SND_SOC_PCAP2=y - -# -# Open Sound System -# -# CONFIG_SOUND_PRIME is not set -CONFIG_HID_SUPPORT=y -CONFIG_HID=y -# CONFIG_HID_DEBUG is not set - -# -# USB Input Devices -# -# CONFIG_USB_HID is not set - -# -# USB HID Boot Protocol drivers -# -# CONFIG_USB_KBD is not set -# CONFIG_USB_MOUSE is not set -CONFIG_USB_SUPPORT=y -CONFIG_USB_ARCH_HAS_HCD=y -CONFIG_USB_ARCH_HAS_OHCI=y -# CONFIG_USB_ARCH_HAS_EHCI is not set -CONFIG_USB=y -# CONFIG_USB_DEBUG is not set - -# -# Miscellaneous USB options -# -# CONFIG_USB_DEVICEFS is not set -# CONFIG_USB_DEVICE_CLASS is not set -# CONFIG_USB_DYNAMIC_MINORS is not set -# CONFIG_USB_SUSPEND is not set -# CONFIG_USB_PERSIST is not set -# CONFIG_USB_OTG is not set - -# -# USB Host Controller Drivers -# -# CONFIG_USB_ISP116X_HCD is not set -CONFIG_USB_OHCI_HCD=y -# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set -# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set -CONFIG_USB_OHCI_LITTLE_ENDIAN=y -# CONFIG_USB_SL811_HCD is not set -# CONFIG_USB_R8A66597_HCD is not set - -# -# USB Device Class drivers -# -# CONFIG_USB_ACM is not set -# CONFIG_USB_PRINTER is not set - -# -# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' -# - -# -# may also be needed; see USB_STORAGE Help for more information -# -# CONFIG_USB_LIBUSUAL is not set - -# -# USB Imaging devices -# -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_MON is not set - -# -# USB port drivers -# - -# -# USB Serial Converter support -# -# CONFIG_USB_SERIAL is not set - -# -# USB Miscellaneous drivers -# -# CONFIG_USB_EMI62 is not set -# CONFIG_USB_EMI26 is not set -# CONFIG_USB_ADUTUX is not set -# CONFIG_USB_AUERSWALD is not set -# CONFIG_USB_RIO500 is not set -# CONFIG_USB_LEGOTOWER is not set -# CONFIG_USB_LCD is not set -# CONFIG_USB_BERRY_CHARGE is not set -# CONFIG_USB_LED is not set -# CONFIG_USB_CYPRESS_CY7C63 is not set -# CONFIG_USB_CYTHERM is not set -# CONFIG_USB_PHIDGET is not set -# CONFIG_USB_IDMOUSE is not set -# CONFIG_USB_FTDI_ELAN is not set -# CONFIG_USB_APPLEDISPLAY is not set -# CONFIG_USB_LD is not set -# CONFIG_USB_TRANCEVIBRATOR is not set -# CONFIG_USB_IOWARRIOR is not set - -# -# USB DSL modem support -# - -# -# USB Gadget Support -# -CONFIG_USB_GADGET=y -# CONFIG_USB_GADGET_DEBUG_FILES is not set -CONFIG_USB_GADGET_SELECTED=y -# CONFIG_USB_GADGET_AMD5536UDC is not set -# CONFIG_USB_GADGET_FSL_USB2 is not set -# CONFIG_USB_GADGET_NET2280 is not set -# CONFIG_USB_GADGET_PXA2XX is not set -CONFIG_USB_GADGET_PXA27X=y -CONFIG_USB_PXA27X=y -# CONFIG_USB_PXA2XX_SMALL is not set -# CONFIG_USB_GADGET_M66592 is not set -# CONFIG_USB_GADGET_GOKU is not set -# CONFIG_USB_GADGET_LH7A40X is not set -# CONFIG_USB_GADGET_OMAP is not set -# CONFIG_USB_GADGET_S3C2410 is not set -# CONFIG_USB_GADGET_AT91 is not set -# CONFIG_USB_GADGET_DUMMY_HCD is not set -# CONFIG_USB_GADGET_DUALSPEED is not set -# CONFIG_USB_ZERO is not set -CONFIG_USB_ETH=y -# CONFIG_USB_ETH_RNDIS is not set -# CONFIG_USB_GADGETFS is not set -# CONFIG_USB_FILE_STORAGE is not set -# CONFIG_USB_G_SERIAL is not set -# CONFIG_USB_MIDI_GADGET is not set -CONFIG_MMC=y -# CONFIG_MMC_DEBUG is not set -# CONFIG_MMC_UNSAFE_RESUME is not set - -# -# MMC/SD Card Drivers -# -CONFIG_MMC_BLOCK=y -CONFIG_MMC_BLOCK_BOUNCE=y - -# -# MMC/SD Host Controller Drivers -# -CONFIG_MMC_PXA=y -CONFIG_RTC_LIB=y -# CONFIG_RTC_CLASS is not set - -# -# DMA Engine support -# -# CONFIG_DMA_ENGINE is not set - -# -# DMA Clients -# - -# -# DMA Devices -# - -# -# File systems -# -CONFIG_EXT2_FS=y -# CONFIG_EXT2_FS_XATTR is not set -# CONFIG_EXT2_FS_XIP is not set -CONFIG_EXT3_FS=m -CONFIG_EXT3_FS_XATTR=y -# CONFIG_EXT3_FS_POSIX_ACL is not set -# CONFIG_EXT3_FS_SECURITY is not set -# CONFIG_EXT4DEV_FS is not set -CONFIG_JBD=m -# CONFIG_JBD_DEBUG is not set -CONFIG_FS_MBCACHE=y -CONFIG_REISERFS_FS=m -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -CONFIG_REISERFS_FS_XATTR=y -CONFIG_REISERFS_FS_POSIX_ACL=y -CONFIG_REISERFS_FS_SECURITY=y -# CONFIG_JFS_FS is not set -CONFIG_FS_POSIX_ACL=y -# CONFIG_XFS_FS is not set -# CONFIG_GFS2_FS is not set -# CONFIG_OCFS2_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_ROMFS_FS is not set -CONFIG_INOTIFY=y -CONFIG_INOTIFY_USER=y -# CONFIG_QUOTA is not set -CONFIG_DNOTIFY=y -CONFIG_AUTOFS_FS=y -CONFIG_AUTOFS4_FS=y -# CONFIG_FUSE_FS is not set - -# -# CD-ROM/DVD Filesystems -# -CONFIG_ISO9660_FS=m -CONFIG_JOLIET=y -CONFIG_ZISOFS=y -# CONFIG_UDF_FS is not set - -# -# DOS/FAT/NT Filesystems -# -CONFIG_FAT_FS=m -CONFIG_MSDOS_FS=m -CONFIG_VFAT_FS=m -CONFIG_FAT_DEFAULT_CODEPAGE=437 -CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" -# CONFIG_NTFS_FS is not set - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -CONFIG_PROC_SYSCTL=y -CONFIG_SYSFS=y -CONFIG_TMPFS=y -# CONFIG_TMPFS_POSIX_ACL is not set -# CONFIG_HUGETLB_PAGE is not set -CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set - -# -# Miscellaneous filesystems -# -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_HFSPLUS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS2_FS is not set -CONFIG_CRAMFS=m -# CONFIG_VXFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set - -# -# Network File Systems -# -CONFIG_NFS_FS=m -CONFIG_NFS_V3=y -CONFIG_NFS_V3_ACL=y -# CONFIG_NFS_V4 is not set -CONFIG_NFS_DIRECTIO=y -CONFIG_NFSD=m -CONFIG_NFSD_V2_ACL=y -CONFIG_NFSD_V3=y -CONFIG_NFSD_V3_ACL=y -# CONFIG_NFSD_V4 is not set -CONFIG_NFSD_TCP=y -CONFIG_LOCKD=m -CONFIG_LOCKD_V4=y -CONFIG_EXPORTFS=m -CONFIG_NFS_ACL_SUPPORT=m -CONFIG_NFS_COMMON=y -CONFIG_SUNRPC=m -# CONFIG_SUNRPC_BIND34 is not set -# CONFIG_RPCSEC_GSS_KRB5 is not set -# CONFIG_RPCSEC_GSS_SPKM3 is not set -CONFIG_SMB_FS=m -# CONFIG_SMB_NLS_DEFAULT is not set -CONFIG_CIFS=m -CONFIG_CIFS_STATS=y -# CONFIG_CIFS_STATS2 is not set -CONFIG_CIFS_WEAK_PW_HASH=y -CONFIG_CIFS_XATTR=y -CONFIG_CIFS_POSIX=y -# CONFIG_CIFS_DEBUG2 is not set -# CONFIG_CIFS_EXPERIMENTAL is not set -# CONFIG_NCP_FS is not set -# CONFIG_CODA_FS is not set -# CONFIG_AFS_FS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y - -# -# Native Language Support -# -CONFIG_NLS=y -CONFIG_NLS_DEFAULT="iso8859-1" -CONFIG_NLS_CODEPAGE_437=m -CONFIG_NLS_CODEPAGE_737=m -CONFIG_NLS_CODEPAGE_775=m -CONFIG_NLS_CODEPAGE_850=m -CONFIG_NLS_CODEPAGE_852=m -CONFIG_NLS_CODEPAGE_855=m -CONFIG_NLS_CODEPAGE_857=m -CONFIG_NLS_CODEPAGE_860=m -CONFIG_NLS_CODEPAGE_861=m -CONFIG_NLS_CODEPAGE_862=m -CONFIG_NLS_CODEPAGE_863=m -CONFIG_NLS_CODEPAGE_864=m -CONFIG_NLS_CODEPAGE_865=m -CONFIG_NLS_CODEPAGE_866=m -CONFIG_NLS_CODEPAGE_869=m -CONFIG_NLS_CODEPAGE_936=m -CONFIG_NLS_CODEPAGE_950=m -CONFIG_NLS_CODEPAGE_932=m -CONFIG_NLS_CODEPAGE_949=m -CONFIG_NLS_CODEPAGE_874=m -CONFIG_NLS_ISO8859_8=m -CONFIG_NLS_CODEPAGE_1250=m -CONFIG_NLS_CODEPAGE_1251=m -CONFIG_NLS_ASCII=m -CONFIG_NLS_ISO8859_1=m -CONFIG_NLS_ISO8859_2=m -CONFIG_NLS_ISO8859_3=m -CONFIG_NLS_ISO8859_4=m -CONFIG_NLS_ISO8859_5=m -CONFIG_NLS_ISO8859_6=m -CONFIG_NLS_ISO8859_7=m -CONFIG_NLS_ISO8859_9=m -CONFIG_NLS_ISO8859_13=m -CONFIG_NLS_ISO8859_14=m -CONFIG_NLS_ISO8859_15=m -CONFIG_NLS_KOI8_R=m -CONFIG_NLS_KOI8_U=m -CONFIG_NLS_UTF8=m - -# -# Distributed Lock Manager -# -# CONFIG_DLM is not set - -# -# Profiling support -# -# CONFIG_PROFILING is not set - -# -# Kernel hacking -# -# CONFIG_PRINTK_TIME is not set -# CONFIG_ENABLE_MUST_CHECK is not set -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_UNUSED_SYMBOLS is not set -# CONFIG_DEBUG_FS is not set -# CONFIG_HEADERS_CHECK is not set -# CONFIG_DEBUG_KERNEL is not set -# CONFIG_DEBUG_BUGVERBOSE is not set -CONFIG_FRAME_POINTER=y -# CONFIG_DEBUG_USER is not set - -# -# Security options -# -# CONFIG_KEYS is not set -# CONFIG_SECURITY is not set -# CONFIG_CRYPTO is not set - -# -# Library routines -# -CONFIG_BITREVERSE=y -CONFIG_CRC_CCITT=m -CONFIG_CRC16=m -# CONFIG_CRC_ITU_T is not set -CONFIG_CRC32=y -# CONFIG_CRC7 is not set -CONFIG_LIBCRC32C=m -CONFIG_ZLIB_INFLATE=m -CONFIG_ZLIB_DEFLATE=m -CONFIG_PLIST=y -CONFIG_HAS_IOMEM=y -CONFIG_HAS_IOPORT=y -CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-ezx-2.6.23/patches/defconfig-e680 b/packages/linux/linux-ezx-2.6.23/patches/defconfig-e680 deleted file mode 100644 index 738e10324c..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/defconfig-e680 +++ /dev/null @@ -1,1214 +0,0 @@ -# -# Automatically generated make config: don't edit -# Linux kernel version: 2.6.23.1 -# Wed Oct 24 17:55:27 2007 -# -CONFIG_ARM=y -CONFIG_SYS_SUPPORTS_APM_EMULATION=y -CONFIG_GENERIC_GPIO=y -CONFIG_GENERIC_TIME=y -CONFIG_GENERIC_CLOCKEVENTS=y -CONFIG_MMU=y -# CONFIG_NO_IOPORT is not set -CONFIG_GENERIC_HARDIRQS=y -CONFIG_STACKTRACE_SUPPORT=y -CONFIG_LOCKDEP_SUPPORT=y -CONFIG_TRACE_IRQFLAGS_SUPPORT=y -CONFIG_HARDIRQS_SW_RESEND=y -CONFIG_GENERIC_IRQ_PROBE=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_ARCH_HAS_ILOG2_U32 is not set -# CONFIG_ARCH_HAS_ILOG2_U64 is not set -CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y -CONFIG_ZONE_DMA=y -CONFIG_ARCH_MTD_XIP=y -CONFIG_VECTORS_BASE=0xffff0000 -CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" - -# -# General setup -# -CONFIG_EXPERIMENTAL=y -CONFIG_BROKEN_ON_SMP=y -CONFIG_LOCK_KERNEL=y -CONFIG_INIT_ENV_ARG_LIMIT=32 -CONFIG_LOCALVERSION="-ezxdev" -# CONFIG_LOCALVERSION_AUTO is not set -# CONFIG_SWAP is not set -CONFIG_SYSVIPC=y -CONFIG_SYSVIPC_SYSCTL=y -# CONFIG_POSIX_MQUEUE is not set -# CONFIG_BSD_PROCESS_ACCT is not set -# CONFIG_TASKSTATS is not set -# CONFIG_USER_NS is not set -# CONFIG_AUDIT is not set -# CONFIG_IKCONFIG is not set -CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_SYSFS_DEPRECATED is not set -# CONFIG_RELAY is not set -# CONFIG_BLK_DEV_INITRD is not set -CONFIG_CC_OPTIMIZE_FOR_SIZE=y -CONFIG_SYSCTL=y -CONFIG_EMBEDDED=y -CONFIG_UID16=y -# CONFIG_SYSCTL_SYSCALL is not set -CONFIG_KALLSYMS=y -# CONFIG_KALLSYMS_EXTRA_PASS is not set -CONFIG_HOTPLUG=y -CONFIG_PRINTK=y -CONFIG_BUG=y -CONFIG_ELF_CORE=y -CONFIG_BASE_FULL=y -CONFIG_FUTEX=y -CONFIG_ANON_INODES=y -CONFIG_EPOLL=y -CONFIG_SIGNALFD=y -CONFIG_EVENTFD=y -CONFIG_SHMEM=y -CONFIG_VM_EVENT_COUNTERS=y -CONFIG_SLAB=y -# CONFIG_SLUB is not set -# CONFIG_SLOB is not set -CONFIG_RT_MUTEXES=y -# CONFIG_TINY_SHMEM is not set -CONFIG_BASE_SMALL=0 -CONFIG_MODULES=y -CONFIG_MODULE_UNLOAD=y -CONFIG_MODULE_FORCE_UNLOAD=y -CONFIG_MODVERSIONS=y -# CONFIG_MODULE_SRCVERSION_ALL is not set -CONFIG_KMOD=y -CONFIG_BLOCK=y -# CONFIG_LBD is not set -# CONFIG_BLK_DEV_IO_TRACE is not set -# CONFIG_LSF is not set -# CONFIG_BLK_DEV_BSG is not set - -# -# IO Schedulers -# -CONFIG_IOSCHED_NOOP=y -# CONFIG_IOSCHED_AS is not set -CONFIG_IOSCHED_DEADLINE=y -# CONFIG_IOSCHED_CFQ is not set -# CONFIG_DEFAULT_AS is not set -CONFIG_DEFAULT_DEADLINE=y -# CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="deadline" - -# -# System Type -# -# CONFIG_ARCH_AAEC2000 is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_REALVIEW is not set -# CONFIG_ARCH_VERSATILE is not set -# CONFIG_ARCH_AT91 is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_EP93XX is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_NETX is not set -# CONFIG_ARCH_H720X is not set -# CONFIG_ARCH_IMX is not set -# CONFIG_ARCH_IOP13XX is not set -# CONFIG_ARCH_IOP32X is not set -# CONFIG_ARCH_IOP33X is not set -# CONFIG_ARCH_IXP23XX is not set -# CONFIG_ARCH_IXP2000 is not set -# CONFIG_ARCH_IXP4XX is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_KS8695 is not set -# CONFIG_ARCH_NS9XXX is not set -# CONFIG_ARCH_MXC is not set -# CONFIG_ARCH_PNX4008 is not set -CONFIG_ARCH_PXA=y -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_S3C2410 is not set -# CONFIG_ARCH_SHARK is not set -# CONFIG_ARCH_LH7A40X is not set -# CONFIG_ARCH_DAVINCI is not set -# CONFIG_ARCH_OMAP is not set - -# -# Intel PXA2xx Implementations -# -# CONFIG_ARCH_LUBBOCK is not set -# CONFIG_MACH_LOGICPD_PXA270 is not set -# CONFIG_MACH_MAINSTONE is not set -# CONFIG_ARCH_PXA_IDP is not set -# CONFIG_PXA_SHARPSL is not set -# CONFIG_MACH_TRIZEPS4 is not set -# CONFIG_MACH_EM_X270 is not set -CONFIG_PXA_EZX=y -CONFIG_PXA_EZX_E680=y -# CONFIG_PXA_EZX_A780 is not set -# CONFIG_PXA_EZX_E2 is not set -# CONFIG_PXA_EZX_A1200 is not set -# CONFIG_PXA_EZX_E6 is not set -CONFIG_EZX_BP=y -CONFIG_EZX_PCAP=y -# CONFIG_EZX_EOC is not set -CONFIG_EZX_EMU=y -CONFIG_EZX_EMU_USB=y -# CONFIG_EZX_EMU_UART is not set -# CONFIG_EZX_EMU_NOTHING is not set -CONFIG_PXA27x=y -CONFIG_PXA_SSP=y - -# -# Boot options -# - -# -# Power management -# - -# -# Processor Type -# -CONFIG_CPU_32=y -CONFIG_CPU_XSCALE=y -CONFIG_CPU_32v5=y -CONFIG_CPU_ABRT_EV5T=y -CONFIG_CPU_CACHE_VIVT=y -CONFIG_CPU_TLB_V4WBI=y -CONFIG_CPU_CP15=y -CONFIG_CPU_CP15_MMU=y - -# -# Processor Features -# -CONFIG_ARM_THUMB=y -# CONFIG_CPU_DCACHE_DISABLE is not set -# CONFIG_OUTER_CACHE is not set -CONFIG_IWMMXT=y -CONFIG_XSCALE_PMU=y - -# -# Bus support -# -# CONFIG_PCI_SYSCALL is not set -# CONFIG_ARCH_SUPPORTS_MSI is not set - -# -# PCCARD (PCMCIA/CardBus) support -# -# CONFIG_PCCARD is not set - -# -# Kernel Features -# -# CONFIG_TICK_ONESHOT is not set -# CONFIG_NO_HZ is not set -# CONFIG_HIGH_RES_TIMERS is not set -CONFIG_PREEMPT=y -CONFIG_HZ=100 -CONFIG_AEABI=y -# CONFIG_OABI_COMPAT is not set -# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set -CONFIG_SELECT_MEMORY_MODEL=y -CONFIG_FLATMEM_MANUAL=y -# CONFIG_DISCONTIGMEM_MANUAL is not set -# CONFIG_SPARSEMEM_MANUAL is not set -CONFIG_FLATMEM=y -CONFIG_FLAT_NODE_MEM_MAP=y -# CONFIG_SPARSEMEM_STATIC is not set -CONFIG_SPLIT_PTLOCK_CPUS=4096 -# CONFIG_RESOURCES_64BIT is not set -CONFIG_ZONE_DMA_FLAG=1 -CONFIG_BOUNCE=y -CONFIG_VIRT_TO_BUS=y -CONFIG_ALIGNMENT_TRAP=y - -# -# Boot options -# -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000 mem=16M@0xAC000000" -# CONFIG_XIP_KERNEL is not set -# CONFIG_KEXEC is not set - -# -# Floating point emulation -# - -# -# At least one emulation must be selected -# - -# -# Userspace binary formats -# -CONFIG_BINFMT_ELF=y -CONFIG_BINFMT_AOUT=m -CONFIG_BINFMT_MISC=m - -# -# Power management options -# -CONFIG_PM=y -# CONFIG_PM_LEGACY is not set -# CONFIG_PM_DEBUG is not set -CONFIG_SUSPEND_UP_POSSIBLE=y -# CONFIG_SUSPEND is not set -CONFIG_APM_EMULATION=y - -# -# Networking -# -CONFIG_NET=y - -# -# Networking options -# -CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set -CONFIG_UNIX=y -# CONFIG_NET_KEY is not set -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_FIB_HASH=y -CONFIG_IP_PNP=y -CONFIG_IP_PNP_DHCP=y -# CONFIG_IP_PNP_BOOTP is not set -# CONFIG_IP_PNP_RARP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_ARPD is not set -CONFIG_SYN_COOKIES=y -# CONFIG_INET_AH is not set -# CONFIG_INET_ESP is not set -# CONFIG_INET_IPCOMP is not set -# CONFIG_INET_XFRM_TUNNEL is not set -# CONFIG_INET_TUNNEL is not set -# CONFIG_INET_XFRM_MODE_TRANSPORT is not set -# CONFIG_INET_XFRM_MODE_TUNNEL is not set -# CONFIG_INET_XFRM_MODE_BEET is not set -# CONFIG_INET_DIAG is not set -# CONFIG_TCP_CONG_ADVANCED is not set -CONFIG_TCP_CONG_CUBIC=y -CONFIG_DEFAULT_TCP_CONG="cubic" -# CONFIG_TCP_MD5SIG is not set -# CONFIG_IPV6 is not set -# CONFIG_INET6_XFRM_TUNNEL is not set -# CONFIG_INET6_TUNNEL is not set -# CONFIG_NETWORK_SECMARK is not set -# CONFIG_NETFILTER is not set -# CONFIG_IP_DCCP is not set -# CONFIG_IP_SCTP is not set -# CONFIG_TIPC is not set -# CONFIG_ATM is not set -# CONFIG_BRIDGE is not set -# CONFIG_VLAN_8021Q is not set -# CONFIG_DECNET is not set -# CONFIG_LLC2 is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network testing -# -# CONFIG_NET_PKTGEN is not set -# CONFIG_HAMRADIO is not set -# CONFIG_IRDA is not set -CONFIG_BT=y -CONFIG_BT_L2CAP=y -CONFIG_BT_SCO=y -CONFIG_BT_RFCOMM=y -CONFIG_BT_RFCOMM_TTY=y -CONFIG_BT_BNEP=y -CONFIG_BT_BNEP_MC_FILTER=y -CONFIG_BT_BNEP_PROTO_FILTER=y -CONFIG_BT_HIDP=y - -# -# Bluetooth device drivers -# -# CONFIG_BT_HCIUSB is not set -CONFIG_BT_HCIUART=y -CONFIG_BT_HCIUART_H4=y -# CONFIG_BT_HCIUART_BCSP is not set -# CONFIG_BT_HCIBCM203X is not set -# CONFIG_BT_HCIBPA10X is not set -# CONFIG_BT_HCIBFUSB is not set -# CONFIG_BT_HCIVHCI is not set -# CONFIG_AF_RXRPC is not set - -# -# Wireless -# -# CONFIG_CFG80211 is not set -# CONFIG_WIRELESS_EXT is not set -# CONFIG_MAC80211 is not set -# CONFIG_IEEE80211 is not set -# CONFIG_RFKILL is not set -# CONFIG_NET_9P is not set - -# -# Device Drivers -# - -# -# Generic Driver Options -# -CONFIG_STANDALONE=y -CONFIG_PREVENT_FIRMWARE_BUILD=y -CONFIG_FW_LOADER=m -# CONFIG_SYS_HYPERVISOR is not set -CONFIG_CONNECTOR=m -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -# CONFIG_MTD_CONCAT is not set -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_REDBOOT_PARTS is not set -# CONFIG_MTD_CMDLINE_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -# CONFIG_MTD_BLKDEVS is not set -# CONFIG_MTD_BLOCK is not set -# CONFIG_MTD_BLOCK_RO is not set -# CONFIG_FTL is not set -# CONFIG_NFTL is not set -# CONFIG_INFTL is not set -# CONFIG_RFD_FTL is not set -# CONFIG_SSFDC is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -CONFIG_MTD_CFI_ADV_OPTIONS=y -CONFIG_MTD_CFI_NOSWAP=y -# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set -# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set -CONFIG_MTD_CFI_GEOMETRY=y -# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set -CONFIG_MTD_MAP_BANK_WIDTH_2=y -# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set -CONFIG_MTD_CFI_I1=y -# CONFIG_MTD_CFI_I2 is not set -# CONFIG_MTD_CFI_I4 is not set -# CONFIG_MTD_CFI_I8 is not set -# CONFIG_MTD_OTP is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_CFI_STAA is not set -CONFIG_MTD_CFI_UTIL=y -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -CONFIG_MTD_XIP=y - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_COMPLEX_MAPPINGS is not set -CONFIG_MTD_PHYSMAP=y -CONFIG_MTD_PHYSMAP_START=0x0 -CONFIG_MTD_PHYSMAP_LEN=0x0 -CONFIG_MTD_PHYSMAP_BANKWIDTH=2 -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_SHARP_SL is not set -CONFIG_MTD_EZX=y -CONFIG_MTD_EZX_A780=y -# CONFIG_MTD_EZX_A780_ALTERNATE is not set -# CONFIG_MTD_EZX_A1200 is not set -# CONFIG_MTD_EZX_E2 is not set -# CONFIG_MTD_EZX_E6 is not set -# CONFIG_MTD_PLATRAM is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_DATAFLASH is not set -# CONFIG_MTD_M25P80 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_PHRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLOCK2MTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOC2001PLUS is not set -# CONFIG_MTD_NAND is not set -# CONFIG_MTD_ONENAND is not set - -# -# UBI - Unsorted block images -# -# CONFIG_MTD_UBI is not set -# CONFIG_PARPORT is not set -CONFIG_BLK_DEV=y -# CONFIG_BLK_DEV_COW_COMMON is not set -CONFIG_BLK_DEV_LOOP=m -# CONFIG_BLK_DEV_CRYPTOLOOP is not set -# CONFIG_BLK_DEV_NBD is not set -# CONFIG_BLK_DEV_UB is not set -# CONFIG_BLK_DEV_RAM is not set -# CONFIG_CDROM_PKTCDVD is not set -# CONFIG_ATA_OVER_ETH is not set -# CONFIG_IDE is not set - -# -# SCSI device support -# -# CONFIG_RAID_ATTRS is not set -# CONFIG_SCSI is not set -# CONFIG_SCSI_DMA is not set -# CONFIG_SCSI_NETLINK is not set -# CONFIG_ATA is not set -# CONFIG_MD is not set -CONFIG_NETDEVICES=y -# CONFIG_NETDEVICES_MULTIQUEUE is not set -CONFIG_DUMMY=y -# CONFIG_BONDING is not set -# CONFIG_MACVLAN is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_NET_ETHERNET is not set -# CONFIG_NETDEV_1000 is not set -# CONFIG_NETDEV_10000 is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set - -# -# USB Network Adapters -# -# CONFIG_USB_CATC is not set -# CONFIG_USB_KAWETH is not set -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_RTL8150 is not set -# CONFIG_USB_USBNET_MII is not set -# CONFIG_USB_USBNET is not set -# CONFIG_WAN is not set -CONFIG_PPP=m -CONFIG_PPP_MULTILINK=y -CONFIG_PPP_FILTER=y -CONFIG_PPP_ASYNC=m -CONFIG_PPP_SYNC_TTY=m -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -# CONFIG_PPP_MPPE is not set -# CONFIG_PPPOE is not set -# CONFIG_PPPOL2TP is not set -# CONFIG_SLIP is not set -CONFIG_SLHC=m -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set -# CONFIG_ISDN is not set - -# -# Input device support -# -CONFIG_INPUT=y -# CONFIG_INPUT_FF_MEMLESS is not set -# CONFIG_INPUT_POLLDEV is not set - -# -# Userland interfaces -# -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -CONFIG_INPUT_TSDEV=y -CONFIG_INPUT_TSDEV_SCREEN_X=240 -CONFIG_INPUT_TSDEV_SCREEN_Y=320 -CONFIG_INPUT_EVDEV=y -# CONFIG_INPUT_EVBUG is not set - -# -# Input Device Drivers -# -CONFIG_INPUT_KEYBOARD=y -# CONFIG_KEYBOARD_ATKBD is not set -# CONFIG_KEYBOARD_SUNKBD is not set -# CONFIG_KEYBOARD_LKKBD is not set -# CONFIG_KEYBOARD_XTKBD is not set -# CONFIG_KEYBOARD_NEWTON is not set -# CONFIG_KEYBOARD_STOWAWAY is not set -# CONFIG_KEYBOARD_PXA27x is not set -CONFIG_KEYBOARD_GPIO=y -CONFIG_KEYBOARD_PXA=y -# CONFIG_INPUT_MOUSE is not set -# CONFIG_INPUT_JOYSTICK is not set -# CONFIG_INPUT_TABLET is not set -CONFIG_INPUT_TOUCHSCREEN=y -# CONFIG_TOUCHSCREEN_ADS7846 is not set -# CONFIG_TOUCHSCREEN_FUJITSU is not set -# CONFIG_TOUCHSCREEN_GUNZE is not set -# CONFIG_TOUCHSCREEN_ELO is not set -# CONFIG_TOUCHSCREEN_MTOUCH is not set -# CONFIG_TOUCHSCREEN_MK712 is not set -# CONFIG_TOUCHSCREEN_PENMOUNT is not set -# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set -# CONFIG_TOUCHSCREEN_TOUCHWIN is not set -# CONFIG_TOUCHSCREEN_UCB1400 is not set -# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set -CONFIG_TOUCHSCREEN_PCAP=y -CONFIG_INPUT_MISC=y -# CONFIG_INPUT_ATI_REMOTE is not set -# CONFIG_INPUT_ATI_REMOTE2 is not set -# CONFIG_INPUT_KEYSPAN_REMOTE is not set -# CONFIG_INPUT_POWERMATE is not set -# CONFIG_INPUT_YEALINK is not set -CONFIG_INPUT_UINPUT=y - -# -# Hardware I/O ports -# -# CONFIG_SERIO is not set -# CONFIG_GAMEPORT is not set - -# -# Character devices -# -CONFIG_VT=y -CONFIG_VT_CONSOLE=y -CONFIG_HW_CONSOLE=y -# CONFIG_VT_HW_CONSOLE_BINDING is not set -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_8250 is not set - -# -# Non-8250 serial port support -# -CONFIG_SERIAL_PXA=y -CONFIG_SERIAL_PXA_CONSOLE=y -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_LEGACY_PTYS=y -CONFIG_LEGACY_PTY_COUNT=8 -# CONFIG_IPMI_HANDLER is not set -# CONFIG_WATCHDOG is not set -CONFIG_HW_RANDOM=y -# CONFIG_NVRAM is not set -# CONFIG_R3964 is not set -# CONFIG_RAW_DRIVER is not set -# CONFIG_TCG_TPM is not set -CONFIG_TS0710_MUX=y -CONFIG_TS0710_MUX_USB=y -CONFIG_I2C=y -CONFIG_I2C_BOARDINFO=y -CONFIG_I2C_CHARDEV=y - -# -# I2C Algorithms -# -# CONFIG_I2C_ALGOBIT is not set -# CONFIG_I2C_ALGOPCF is not set -# CONFIG_I2C_ALGOPCA is not set - -# -# I2C Hardware Bus support -# -# CONFIG_I2C_GPIO is not set -CONFIG_I2C_PXA=y -# CONFIG_I2C_PXA_SLAVE is not set -# CONFIG_I2C_OCORES is not set -# CONFIG_I2C_PARPORT_LIGHT is not set -# CONFIG_I2C_SIMTEC is not set -# CONFIG_I2C_TAOS_EVM is not set -# CONFIG_I2C_STUB is not set -# CONFIG_I2C_TINY_USB is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_DS1337 is not set -# CONFIG_SENSORS_DS1374 is not set -# CONFIG_DS1682 is not set -# CONFIG_SENSORS_EEPROM is not set -# CONFIG_SENSORS_PCF8574 is not set -# CONFIG_SENSORS_PCA9539 is not set -# CONFIG_SENSORS_PCF8591 is not set -# CONFIG_SENSORS_MAX6875 is not set -# CONFIG_SENSORS_TSL2550 is not set -# CONFIG_I2C_DEBUG_CORE is not set -# CONFIG_I2C_DEBUG_ALGO is not set -# CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set - -# -# SPI support -# -CONFIG_SPI=y -CONFIG_SPI_MASTER=y - -# -# SPI Master Controller Drivers -# -# CONFIG_SPI_BITBANG is not set -CONFIG_SPI_PXA2XX=m - -# -# SPI Protocol Masters -# -# CONFIG_SPI_AT25 is not set -# CONFIG_SPI_SPIDEV is not set -# CONFIG_SPI_TLE62X0 is not set -# CONFIG_W1 is not set -# CONFIG_HWMON is not set -CONFIG_MISC_DEVICES=y -# CONFIG_EEPROM_93CX6 is not set - -# -# Multifunction device drivers -# -# CONFIG_MFD_SM501 is not set -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y - -# -# LED drivers -# -# CONFIG_LEDS_GPIO is not set - -# -# LED Triggers -# -CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_E680=y -CONFIG_LEDS_TRIGGER_TIMER=y -CONFIG_LEDS_TRIGGER_HEARTBEAT=y - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_DAB is not set - -# -# Graphics support -# -CONFIG_BACKLIGHT_LCD_SUPPORT=y -# CONFIG_LCD_CLASS_DEVICE is not set -CONFIG_BACKLIGHT_CLASS_DEVICE=y -CONFIG_BACKLIGHT_EZX=y - -# -# Display device support -# -# CONFIG_DISPLAY_SUPPORT is not set -# CONFIG_VGASTATE is not set -# CONFIG_VIDEO_OUTPUT_CONTROL is not set -CONFIG_FB=y -# CONFIG_FIRMWARE_EDID is not set -# CONFIG_FB_DDC is not set -CONFIG_FB_CFB_FILLRECT=y -CONFIG_FB_CFB_COPYAREA=y -CONFIG_FB_CFB_IMAGEBLIT=y -# CONFIG_FB_SYS_FILLRECT is not set -# CONFIG_FB_SYS_COPYAREA is not set -# CONFIG_FB_SYS_IMAGEBLIT is not set -# CONFIG_FB_SYS_FOPS is not set -CONFIG_FB_DEFERRED_IO=y -# CONFIG_FB_SVGALIB is not set -# CONFIG_FB_MACMODES is not set -# CONFIG_FB_BACKLIGHT is not set -# CONFIG_FB_MODE_HELPERS is not set -# CONFIG_FB_TILEBLITTING is not set - -# -# Frame buffer hardware drivers -# -# CONFIG_FB_S1D13XXX is not set -CONFIG_FB_PXA=y -CONFIG_FB_PXA_LCD_QVGA=y -# CONFIG_FB_PXA_LCD_VGA is not set -CONFIG_FB_PXA_OVERLAY=y -CONFIG_FB_PXA_PARAMETERS=y -# CONFIG_FB_MBX is not set -# CONFIG_FB_VIRTUAL is not set - -# -# Console display driver support -# -# CONFIG_VGA_CONSOLE is not set -CONFIG_DUMMY_CONSOLE=y -CONFIG_FRAMEBUFFER_CONSOLE=y -# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set -# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set -CONFIG_FONTS=y -# CONFIG_FONT_8x8 is not set -# CONFIG_FONT_8x16 is not set -# CONFIG_FONT_6x11 is not set -# CONFIG_FONT_7x14 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set -CONFIG_FONT_MINI_4x6=y -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_SUN12x22 is not set -# CONFIG_FONT_10x18 is not set -# CONFIG_LOGO is not set - -# -# Sound -# -CONFIG_SOUND=y - -# -# Advanced Linux Sound Architecture -# -CONFIG_SND=y -CONFIG_SND_TIMER=y -CONFIG_SND_PCM=y -# CONFIG_SND_SEQUENCER is not set -CONFIG_SND_OSSEMUL=y -CONFIG_SND_MIXER_OSS=y -CONFIG_SND_PCM_OSS=y -CONFIG_SND_PCM_OSS_PLUGINS=y -# CONFIG_SND_DYNAMIC_MINORS is not set -CONFIG_SND_SUPPORT_OLD_API=y -CONFIG_SND_VERBOSE_PROCFS=y -# CONFIG_SND_VERBOSE_PRINTK is not set -# CONFIG_SND_DEBUG is not set - -# -# Generic devices -# -# CONFIG_SND_DUMMY is not set -# CONFIG_SND_MTPAV is not set -# CONFIG_SND_SERIAL_U16550 is not set -# CONFIG_SND_MPU401 is not set - -# -# ALSA ARM devices -# -# CONFIG_SND_PXA2XX_AC97 is not set - -# -# USB devices -# -# CONFIG_SND_USB_AUDIO is not set -# CONFIG_SND_USB_CAIAQ is not set - -# -# System on Chip audio support -# -CONFIG_SND_SOC=y -CONFIG_SND_PXA2XX_SOC=y -CONFIG_SND_PXA2XX_SOC_SSP=y -CONFIG_SND_PXA2XX_SOC_EZX=y - -# -# SoC Audio support for SuperH -# -CONFIG_SND_SOC_PCAP2=y - -# -# Open Sound System -# -# CONFIG_SOUND_PRIME is not set -CONFIG_HID_SUPPORT=y -CONFIG_HID=y -# CONFIG_HID_DEBUG is not set - -# -# USB Input Devices -# -# CONFIG_USB_HID is not set - -# -# USB HID Boot Protocol drivers -# -# CONFIG_USB_KBD is not set -# CONFIG_USB_MOUSE is not set -CONFIG_USB_SUPPORT=y -CONFIG_USB_ARCH_HAS_HCD=y -CONFIG_USB_ARCH_HAS_OHCI=y -# CONFIG_USB_ARCH_HAS_EHCI is not set -CONFIG_USB=y -# CONFIG_USB_DEBUG is not set - -# -# Miscellaneous USB options -# -# CONFIG_USB_DEVICEFS is not set -# CONFIG_USB_DEVICE_CLASS is not set -# CONFIG_USB_DYNAMIC_MINORS is not set -# CONFIG_USB_SUSPEND is not set -# CONFIG_USB_PERSIST is not set -# CONFIG_USB_OTG is not set - -# -# USB Host Controller Drivers -# -# CONFIG_USB_ISP116X_HCD is not set -CONFIG_USB_OHCI_HCD=y -# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set -# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set -CONFIG_USB_OHCI_LITTLE_ENDIAN=y -# CONFIG_USB_SL811_HCD is not set -# CONFIG_USB_R8A66597_HCD is not set - -# -# USB Device Class drivers -# -# CONFIG_USB_ACM is not set -# CONFIG_USB_PRINTER is not set - -# -# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' -# - -# -# may also be needed; see USB_STORAGE Help for more information -# -# CONFIG_USB_LIBUSUAL is not set - -# -# USB Imaging devices -# -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_MON is not set - -# -# USB port drivers -# - -# -# USB Serial Converter support -# -# CONFIG_USB_SERIAL is not set - -# -# USB Miscellaneous drivers -# -# CONFIG_USB_EMI62 is not set -# CONFIG_USB_EMI26 is not set -# CONFIG_USB_ADUTUX is not set -# CONFIG_USB_AUERSWALD is not set -# CONFIG_USB_RIO500 is not set -# CONFIG_USB_LEGOTOWER is not set -# CONFIG_USB_LCD is not set -# CONFIG_USB_BERRY_CHARGE is not set -# CONFIG_USB_LED is not set -# CONFIG_USB_CYPRESS_CY7C63 is not set -# CONFIG_USB_CYTHERM is not set -# CONFIG_USB_PHIDGET is not set -# CONFIG_USB_IDMOUSE is not set -# CONFIG_USB_FTDI_ELAN is not set -# CONFIG_USB_APPLEDISPLAY is not set -# CONFIG_USB_LD is not set -# CONFIG_USB_TRANCEVIBRATOR is not set -# CONFIG_USB_IOWARRIOR is not set - -# -# USB DSL modem support -# - -# -# USB Gadget Support -# -CONFIG_USB_GADGET=y -# CONFIG_USB_GADGET_DEBUG_FILES is not set -CONFIG_USB_GADGET_SELECTED=y -# CONFIG_USB_GADGET_AMD5536UDC is not set -# CONFIG_USB_GADGET_FSL_USB2 is not set -# CONFIG_USB_GADGET_NET2280 is not set -# CONFIG_USB_GADGET_PXA2XX is not set -CONFIG_USB_GADGET_PXA27X=y -CONFIG_USB_PXA27X=y -# CONFIG_USB_PXA2XX_SMALL is not set -# CONFIG_USB_GADGET_M66592 is not set -# CONFIG_USB_GADGET_GOKU is not set -# CONFIG_USB_GADGET_LH7A40X is not set -# CONFIG_USB_GADGET_OMAP is not set -# CONFIG_USB_GADGET_S3C2410 is not set -# CONFIG_USB_GADGET_AT91 is not set -# CONFIG_USB_GADGET_DUMMY_HCD is not set -# CONFIG_USB_GADGET_DUALSPEED is not set -# CONFIG_USB_ZERO is not set -CONFIG_USB_ETH=y -# CONFIG_USB_ETH_RNDIS is not set -# CONFIG_USB_GADGETFS is not set -# CONFIG_USB_FILE_STORAGE is not set -# CONFIG_USB_G_SERIAL is not set -# CONFIG_USB_MIDI_GADGET is not set -CONFIG_MMC=y -# CONFIG_MMC_DEBUG is not set -# CONFIG_MMC_UNSAFE_RESUME is not set - -# -# MMC/SD Card Drivers -# -CONFIG_MMC_BLOCK=y -CONFIG_MMC_BLOCK_BOUNCE=y - -# -# MMC/SD Host Controller Drivers -# -CONFIG_MMC_PXA=y -CONFIG_RTC_LIB=y -# CONFIG_RTC_CLASS is not set - -# -# DMA Engine support -# -# CONFIG_DMA_ENGINE is not set - -# -# DMA Clients -# - -# -# DMA Devices -# - -# -# File systems -# -CONFIG_EXT2_FS=y -# CONFIG_EXT2_FS_XATTR is not set -# CONFIG_EXT2_FS_XIP is not set -CONFIG_EXT3_FS=m -CONFIG_EXT3_FS_XATTR=y -# CONFIG_EXT3_FS_POSIX_ACL is not set -# CONFIG_EXT3_FS_SECURITY is not set -# CONFIG_EXT4DEV_FS is not set -CONFIG_JBD=m -# CONFIG_JBD_DEBUG is not set -CONFIG_FS_MBCACHE=y -CONFIG_REISERFS_FS=m -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -CONFIG_REISERFS_FS_XATTR=y -CONFIG_REISERFS_FS_POSIX_ACL=y -CONFIG_REISERFS_FS_SECURITY=y -# CONFIG_JFS_FS is not set -CONFIG_FS_POSIX_ACL=y -# CONFIG_XFS_FS is not set -# CONFIG_GFS2_FS is not set -# CONFIG_OCFS2_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_ROMFS_FS is not set -CONFIG_INOTIFY=y -CONFIG_INOTIFY_USER=y -# CONFIG_QUOTA is not set -CONFIG_DNOTIFY=y -CONFIG_AUTOFS_FS=y -CONFIG_AUTOFS4_FS=y -# CONFIG_FUSE_FS is not set - -# -# CD-ROM/DVD Filesystems -# -CONFIG_ISO9660_FS=m -CONFIG_JOLIET=y -CONFIG_ZISOFS=y -# CONFIG_UDF_FS is not set - -# -# DOS/FAT/NT Filesystems -# -CONFIG_FAT_FS=m -CONFIG_MSDOS_FS=m -CONFIG_VFAT_FS=m -CONFIG_FAT_DEFAULT_CODEPAGE=437 -CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" -# CONFIG_NTFS_FS is not set - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -CONFIG_PROC_SYSCTL=y -CONFIG_SYSFS=y -CONFIG_TMPFS=y -# CONFIG_TMPFS_POSIX_ACL is not set -# CONFIG_HUGETLB_PAGE is not set -CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set - -# -# Miscellaneous filesystems -# -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_HFSPLUS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS2_FS is not set -CONFIG_CRAMFS=m -# CONFIG_VXFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set - -# -# Network File Systems -# -CONFIG_NFS_FS=m -CONFIG_NFS_V3=y -CONFIG_NFS_V3_ACL=y -# CONFIG_NFS_V4 is not set -CONFIG_NFS_DIRECTIO=y -CONFIG_NFSD=m -CONFIG_NFSD_V2_ACL=y -CONFIG_NFSD_V3=y -CONFIG_NFSD_V3_ACL=y -# CONFIG_NFSD_V4 is not set -CONFIG_NFSD_TCP=y -CONFIG_LOCKD=m -CONFIG_LOCKD_V4=y -CONFIG_EXPORTFS=m -CONFIG_NFS_ACL_SUPPORT=m -CONFIG_NFS_COMMON=y -CONFIG_SUNRPC=m -# CONFIG_SUNRPC_BIND34 is not set -# CONFIG_RPCSEC_GSS_KRB5 is not set -# CONFIG_RPCSEC_GSS_SPKM3 is not set -CONFIG_SMB_FS=m -# CONFIG_SMB_NLS_DEFAULT is not set -CONFIG_CIFS=m -CONFIG_CIFS_STATS=y -# CONFIG_CIFS_STATS2 is not set -CONFIG_CIFS_WEAK_PW_HASH=y -CONFIG_CIFS_XATTR=y -CONFIG_CIFS_POSIX=y -# CONFIG_CIFS_DEBUG2 is not set -# CONFIG_CIFS_EXPERIMENTAL is not set -# CONFIG_NCP_FS is not set -# CONFIG_CODA_FS is not set -# CONFIG_AFS_FS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y - -# -# Native Language Support -# -CONFIG_NLS=y -CONFIG_NLS_DEFAULT="iso8859-1" -CONFIG_NLS_CODEPAGE_437=m -CONFIG_NLS_CODEPAGE_737=m -CONFIG_NLS_CODEPAGE_775=m -CONFIG_NLS_CODEPAGE_850=m -CONFIG_NLS_CODEPAGE_852=m -CONFIG_NLS_CODEPAGE_855=m -CONFIG_NLS_CODEPAGE_857=m -CONFIG_NLS_CODEPAGE_860=m -CONFIG_NLS_CODEPAGE_861=m -CONFIG_NLS_CODEPAGE_862=m -CONFIG_NLS_CODEPAGE_863=m -CONFIG_NLS_CODEPAGE_864=m -CONFIG_NLS_CODEPAGE_865=m -CONFIG_NLS_CODEPAGE_866=m -CONFIG_NLS_CODEPAGE_869=m -CONFIG_NLS_CODEPAGE_936=m -CONFIG_NLS_CODEPAGE_950=m -CONFIG_NLS_CODEPAGE_932=m -CONFIG_NLS_CODEPAGE_949=m -CONFIG_NLS_CODEPAGE_874=m -CONFIG_NLS_ISO8859_8=m -CONFIG_NLS_CODEPAGE_1250=m -CONFIG_NLS_CODEPAGE_1251=m -CONFIG_NLS_ASCII=m -CONFIG_NLS_ISO8859_1=m -CONFIG_NLS_ISO8859_2=m -CONFIG_NLS_ISO8859_3=m -CONFIG_NLS_ISO8859_4=m -CONFIG_NLS_ISO8859_5=m -CONFIG_NLS_ISO8859_6=m -CONFIG_NLS_ISO8859_7=m -CONFIG_NLS_ISO8859_9=m -CONFIG_NLS_ISO8859_13=m -CONFIG_NLS_ISO8859_14=m -CONFIG_NLS_ISO8859_15=m -CONFIG_NLS_KOI8_R=m -CONFIG_NLS_KOI8_U=m -CONFIG_NLS_UTF8=m - -# -# Distributed Lock Manager -# -# CONFIG_DLM is not set - -# -# Profiling support -# -# CONFIG_PROFILING is not set - -# -# Kernel hacking -# -# CONFIG_PRINTK_TIME is not set -# CONFIG_ENABLE_MUST_CHECK is not set -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_UNUSED_SYMBOLS is not set -# CONFIG_DEBUG_FS is not set -# CONFIG_HEADERS_CHECK is not set -# CONFIG_DEBUG_KERNEL is not set -# CONFIG_DEBUG_BUGVERBOSE is not set -CONFIG_FRAME_POINTER=y -# CONFIG_DEBUG_USER is not set - -# -# Security options -# -# CONFIG_KEYS is not set -# CONFIG_SECURITY is not set -# CONFIG_CRYPTO is not set - -# -# Library routines -# -CONFIG_BITREVERSE=y -CONFIG_CRC_CCITT=m -CONFIG_CRC16=m -# CONFIG_CRC_ITU_T is not set -CONFIG_CRC32=y -# CONFIG_CRC7 is not set -CONFIG_LIBCRC32C=m -CONFIG_ZLIB_INFLATE=m -CONFIG_ZLIB_DEFLATE=m -CONFIG_PLIST=y -CONFIG_HAS_IOMEM=y -CONFIG_HAS_IOPORT=y -CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-ezx-2.6.23/patches/dmesg-a780.log b/packages/linux/linux-ezx-2.6.23/patches/dmesg-a780.log deleted file mode 100644 index 6b15077676..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/dmesg-a780.log +++ /dev/null @@ -1,299 +0,0 @@ -<5>Linux version 2.6.21-ezxdev (wyrm@vault) (gcc version 4.1.1) #222 PREEMPT Tue May 8 15:19:34 BRT 2007 -<4>CPU: XScale-PXA270 [69054117] revision 7 (ARMv5TE), cr=0000397f -<4>Machine: Motorola Ezx Platform -<4>Memory policy: ECC disabled, Data cache writeback -<7>On node 0 totalpages: 12288 -<7> DMA zone: 416 pages used for memmap -<7> DMA zone: 0 pages reserved -<7> DMA zone: 11872 pages, LIFO batch:1 -<7> Normal zone: 0 pages used for memmap -<6>Run Mode clock: 195.00MHz (*15) -<6>Turbo Mode clock: 292.50MHz (*1.5, active) -<6>Memory clock: 195.00MHz (/2) -<6>System bus clock: 195.00MHz -<4>CPU0: D VIVT undefined 5 cache -<4>CPU0: I cache: 32768 bytes, associativity 32, 32 byte lines, 32 sets -<4>CPU0: D cache: 32768 bytes, associativity 32, 32 byte lines, 32 sets -<4>Built 1 zonelists. Total pages: 11872 -<5>Kernel command line: console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext3 ip=169.254.1.11:169.254.1.10:169.254.1.10:255.255.255.254:ezx:usb0:off debug mem=32M@0xA0000000 mem=16M@0xAC000000 -<4>PID hash table entries: 256 (order: 8, 1024 bytes) -<4>Console: colour dummy device 80x30 -<4>Dentry cache hash table entries: 8192 (order: 3, 32768 bytes) -<4>Inode-cache hash table entries: 4096 (order: 2, 16384 bytes) -<6>Memory: 32MB 16MB = 48MB total -<5>Memory: 46084KB available (2264K code, 217K data, 84K init) -<7>Calibrating delay loop... 291.63 BogoMIPS (lpj=1458176) -<4>Mount-cache hash table entries: 512 -<6>CPU: Testing write buffer coherency: ok -<6>NET: Registered protocol family 16 -<6>usbcore: registered new interface driver usbfs -<6>usbcore: registered new interface driver hub -<6>usbcore: registered new device driver usb -<6>Time: pxa_timer clocksource has been installed. -<6>NET: Registered protocol family 2 -<4>IP route cache hash table entries: 1024 (order: 0, 4096 bytes) -<4>TCP established hash table entries: 2048 (order: 2, 16384 bytes) -<4>TCP bind hash table entries: 2048 (order: 1, 8192 bytes) -<6>TCP: Hash tables configured (established 2048 bind 2048) -<6>TCP reno registered -<4>bp handshake entered! -<4>ezx-bp: handshake step 2 -<4>BP rdy irq -<4>bp handshake entered! -<5>ezx-bp: handshake passed -<4>ezx-pcap: ssp driver registered -<6>io scheduler noop registered -<6>io scheduler deadline registered (default) -<4>pxa2xx-fb pxa2xx-fb: machine LCCR0 setting contains illegal bits: 00200878 -<4>pxa2xx-fb pxa2xx-fb: machine LCCR3 setting contains illegal bits: 00300008 -<4>Console: switching to colour frame buffer device 60x53 -<6>usbcore: registered new interface driver usb ipc -<6>drivers/char/ts0710_mux_usb.c: USB Host(Bulverde) IPC driver registered. -<6>drivers/char/ts0710_mux_usb.c: 1.0alpha1:USB IPC Driver (TS07.10 lowlevel) -<6>pxa2xx-uart.0: ttyS0 at MMIO 0x40100000 (irq = 22) is a FFUART -<6>pxa2xx-uart.1: ttyS1 at MMIO 0x40200000 (irq = 21) is a BTUART -<6>pxa2xx-uart.2: ttyS2 at MMIO 0x40700000 (irq = 20) is a STUART -<7>ohci_hcd: 2006 August 04 USB 1.1 'Open' Host Controller (OHCI) Driver -<6>pxa27x-ohci pxa27x-ohci: PXA27x OHCI -<6>pxa27x-ohci pxa27x-ohci: new USB bus registered, assigned bus number 1 -<6>pxa27x-ohci pxa27x-ohci: irq 3, io mem 0x4c000000 -<6>usb usb1: configuration #1 chosen from 1 choice -<6>hub 1-0:1.0: USB hub found -<6>hub 1-0:1.0: 3 ports detected -<6>pxa27x_udc: version 08-Feb-2007 -<5>USB cmd disconnect -<5>USB cmd disconnect -<4>ether gadget: using random self ethernet address -<4>ether gadget: using random host ethernet address -<6>usb0: Ethernet Gadget, version: May Day 2005 -<6>usb0: using pxa27x_udc, OUT Bulk-out-2 IN Bulk-in-1 -<6>usb0: MAC 46:86:e0:79:e7:fb -<5>USB cmd connect -<5>USB cmd connect -<6>input: gpio-keys as /class/input/input0 -<6>input: pxa-keyboard as /class/input/input1 -<6>input: pcap-touchscreen as /class/input/input2 -<6>sa1100-rtc sa1100-rtc: rtc core: registered sa1100-rtc as rtc0 -<6>Registered led device: a780:main -<6>Registered led device: a780:aux -<6>Registered led device: a780:vibrator -<6>TCP cubic registered -<6>NET: Registered protocol family 1 -<6>NET: Registered protocol family 17 -<6>XScale iWMMXt coprocessor detected. -<6>sa1100-rtc sa1100-rtc: setting the system clock to 1970-01-01 00:00:16 (16) -<6>mmcblk0: mmc0:bffc SU02G 1985024KiB -<6>udc: USB reset -<6> mmcblk0:<6>usb 1-3: new full speed USB device using pxa27x-ohci and address 2 -<4> p1 p2 p3 < p5 p6 p7 > -<6>udc: USB reset -<3>usb 1-3: device descriptor read/64, error -62 -<6>usb0: full speed config #1: 100 mA, Ethernet Gadget, using CDC Ethernet Subset -<3>usb 1-3: device descriptor read/64, error -62 -<6>usb 1-3: new full speed USB device using pxa27x-ohci and address 3 -<3>usb 1-3: device descriptor read/64, error -62 -<4>IP-Config: Complete: -<4> device=usb0, addr=169.254.1.11, mask=255.255.255.254, gw=169.254.1.10, -<4> host=ezx, domain=, nis-domain=(none), -<4> bootserver=169.254.1.10, rootserver=169.254.1.10, rootpath= -<6>kjournald starting. Commit interval 5 seconds -<4>EXT3-fs warning: maximal mount count reached, running e2fsck is recommended -<6>EXT3 FS on mmcblk0p2, internal journal -<6>EXT3-fs: recovery complete. -<6>EXT3-fs: mounted filesystem with ordered data mode. -<4>VFS: Mounted root (ext3 filesystem). -<6>Freeing init memory: 84K -<3>usb 1-3: device descriptor read/64, error -110 -<6>usb 1-3: new full speed USB device using pxa27x-ohci and address 4 -<3>usb 1-3: device descriptor read/8, error -62 -<4>usb 1-3: config 1 has an invalid interface number: 13 but max is 2 -<4>usb 1-3: config 1 has an invalid interface number: 6 but max is 2 -<4>usb 1-3: config 1 has an invalid interface number: 7 but max is 2 -<4>usb 1-3: config 1 has no interface number 0 -<4>usb 1-3: config 1 has no interface number 1 -<4>usb 1-3: config 1 has no interface number 2 -<6>usb 1-3: configuration #1 chosen from 1 choice -<4>usb_ipc_probe: completed probe! -<6>drivers/char/ts0710_mux_usb.c: usb_ipc_probe: Only two endpoints supported. -<4>usb ipc: probe of 1-3:1.6 failed with error -1 -<6>drivers/char/ts0710_mux_usb.c: usb_ipc_probe: Only two endpoints supported. -<4>usb ipc: probe of 1-3:1.7 failed with error -1 -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Read 7 bytes. -<4>Reading max 2041 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Read 17 bytes. -<4>Reading max 2031 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Read 7 bytes. -<4>Reading max 2041 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 2009 bytes from ts0710_mux_usb inbuf. -<4>Read 21 bytes. -<4>Reading max 1988 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Read 17 bytes. -<4>Reading max 2031 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Read 7 bytes. -<4>Reading max 2041 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 2009 bytes from ts0710_mux_usb inbuf. -<4>Read 21 bytes. -<4>Reading max 1988 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Read 17 bytes. -<4>Reading max 2031 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Read 7 bytes. -<4>Reading max 2041 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 2009 bytes from ts0710_mux_usb inbuf. -<4>Read 21 bytes. -<4>Reading max 1988 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Read 17 bytes. -<4>Reading max 2031 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Read 7 bytes. -<4>Reading max 2041 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 2009 bytes from ts0710_mux_usb inbuf. -<4>Read 21 bytes. -<4>Reading max 1988 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Read 17 bytes. -<4>Reading max 2031 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Read 7 bytes. -<4>Reading max 2041 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 2009 bytes from ts0710_mux_usb inbuf. -<4>Read 21 bytes. -<4>Reading max 1988 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Read 17 bytes. -<4>Reading max 2031 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Read 7 bytes. -<4>Reading max 2041 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Read 17 bytes. -<4>Reading max 2031 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Read 11 bytes. -<4>Reading max 2037 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Read 7 bytes. -<4>Reading max 2041 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Read 17 bytes. -<4>Reading max 2031 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Read 11 bytes. -<4>Reading max 2037 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Read 7 bytes. -<4>Reading max 2041 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Read 11 bytes. -<4>Reading max 2037 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 2016 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1984 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1952 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1920 bytes from ts0710_mux_usb inbuf. -<4>Read 6 bytes. -<4>Reading max 1914 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1882 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1850 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1818 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1786 bytes from ts0710_mux_usb inbuf. -<4>Read 6 bytes. -<4>Reading max 1780 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1748 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1716 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1684 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1652 bytes from ts0710_mux_usb inbuf. -<4>Read 6 bytes. -<4>Reading max 1646 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 2016 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1984 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1952 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1920 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1888 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1856 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1824 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1792 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1760 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1728 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1696 bytes from ts0710_mux_usb inbuf. -<4>Read 16 bytes. -<4>Reading max 1680 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 2016 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1984 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1952 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1920 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1888 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1856 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1824 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1792 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1760 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1728 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 1696 bytes from ts0710_mux_usb inbuf. -<4>Read 13 bytes. -<4>Reading max 1683 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Read 14 bytes. -<4>Reading max 2034 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>Read 32 bytes. -<4>Reading max 2016 bytes from ts0710_mux_usb inbuf. -<4>Read 2 bytes. -<4>Reading max 2014 bytes from ts0710_mux_usb inbuf. -<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. -<4>nonzero read bulk status received: -104 diff --git a/packages/linux/linux-ezx-2.6.23/patches/e6-eoc.patch b/packages/linux/linux-ezx-2.6.23/patches/e6-eoc.patch deleted file mode 100644 index 3824079c15..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/e6-eoc.patch +++ /dev/null @@ -1,20 +0,0 @@ -Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e6.c -=================================================================== ---- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-e6.c 2007-09-24 20:14:54.000000000 -0300 -+++ linux-2.6.21/arch/arm/mach-pxa/ezx-e6.c 2007-09-24 20:15:18.000000000 -0300 -@@ -203,8 +203,15 @@ - }, - }; - -+ -+struct platform_device e6_eoc_device = { -+ .name = "ezx-eoc", -+ .id = -1, -+}; -+ - static struct platform_device *devices[] __initdata = { - &e6_pcap_device, -+ &e6_eoc_device, - }; - - static void __init e6_init(void) diff --git a/packages/linux/linux-ezx-2.6.23/patches/e6-mci.patch b/packages/linux/linux-ezx-2.6.23/patches/e6-mci.patch deleted file mode 100644 index 09886f42d4..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/e6-mci.patch +++ /dev/null @@ -1,124 +0,0 @@ -Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e6.c 2007-10-24 19:35:51.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c 2007-10-24 19:58:02.000000000 +0200 -@@ -13,6 +13,8 @@ - #include <linux/init.h> - #include <linux/platform_device.h> - #include <linux/fb.h> -+#include <linux/mmc/host.h> -+#include <linux/irq.h> - - #include <asm/mach-types.h> - #include <asm/mach/arch.h> -@@ -20,12 +22,102 @@ - #include <asm/arch/pxafb.h> - #include <asm/arch/ezx.h> - #include <asm/arch/ezx-pcap.h> -+#include <asm/arch/mmc.h> - - #include "generic.h" - - extern void ezx_lcd_power(int, struct fb_var_screeninfo *); - extern void ezx_backlight_power(int); - -+#ifdef CONFIG_EZX_PCAP -+extern int ezx_pcap_mmcsd_power(int); -+extern void ezx_pcap_mmcsd_voltage(u_int32_t); -+#else -+#define ezx_pcap_mmcsd_voltage(x) {} -+#define ezx_pcap_mmcsd_power(x) {} -+#endif -+ -+static struct pxamci_platform_data e6_mci_platform_data; -+ -+static u_int8_t mmc_voltage[] = { -+ [ilog2(MMC_VDD_165_195)] = 6, -+ [ilog2(MMC_VDD_20_21)] = 7, -+ [ilog2(MMC_VDD_21_22)] = 8, -+ [ilog2(MMC_VDD_22_23)] = 8, -+ [ilog2(MMC_VDD_23_24)] = 9, -+ [ilog2(MMC_VDD_24_25)] = 9, -+ [ilog2(MMC_VDD_25_26)] = 10, -+ [ilog2(MMC_VDD_26_27)] = 10, -+ [ilog2(MMC_VDD_27_28)] = 11, -+ [ilog2(MMC_VDD_28_29)] = 11, -+ [ilog2(MMC_VDD_29_30)] = 12, -+ [ilog2(MMC_VDD_30_31)] = 12, -+ [ilog2(MMC_VDD_31_32)] = 13, -+ [ilog2(MMC_VDD_32_33)] = 13, -+ [ilog2(MMC_VDD_33_34)] = 14, -+ [ilog2(MMC_VDD_34_35)] = 14, -+ [ilog2(MMC_VDD_35_36)] = 15, -+}; -+ -+static int e6_mci_init(struct device *dev, -+ irqreturn_t (*ezx_detect_int)(int, void *), -+ void *data) -+{ -+ int err; -+ -+ /* Setup GPIO for PXA27x MMC/SD controller */ -+ pxa_gpio_mode(GPIO32_MMCCLK_MD); -+ pxa_gpio_mode(GPIO112_MMCCMD_MD); -+ pxa_gpio_mode(GPIO92_MMCDAT0_MD); -+ pxa_gpio_mode(GPIO109_MMCDAT1_MD); -+ pxa_gpio_mode(GPIO110_MMCDAT2_MD); -+ pxa_gpio_mode(GPIO111_MMCDAT3_MD); -+ -+ ezx_pcap_mmcsd_power(1); -+ -+ e6_mci_platform_data.detect_delay = msecs_to_jiffies(250); -+ -+ err = request_irq(0x49, ezx_detect_int, IRQF_DISABLED, -+ "MMC card detect", data); -+ if (err) { -+ printk(KERN_ERR "ezx_mci_detect: MMC/SD: can't request " -+ "MMC card detect IRQ\n"); -+ return -1; -+ } -+ -+ set_irq_type(0x0b, IRQT_BOTHEDGE); -+ -+ return 0; -+} -+ -+static void e6_mci_setpower(struct device *dev, unsigned int vdd) -+{ -+ struct pxamci_platform_data* p_d = dev->platform_data; -+ -+ if (( 1 << vdd) & p_d->ocr_mask) -+ ezx_pcap_mmcsd_voltage(mmc_voltage[vdd]); -+ -+ ezx_pcap_mmcsd_power(1); -+} -+ -+static void e6_mci_exit(struct device *dev, void *data) -+{ -+ ezx_pcap_mmcsd_power(0); -+ free_irq(0x49, data); -+} -+ -+static struct pxamci_platform_data e6_mci_platform_data = { -+ .ocr_mask = MMC_VDD_165_195|MMC_VDD_20_21|MMC_VDD_21_22 -+ |MMC_VDD_22_23|MMC_VDD_23_24|MMC_VDD_24_25 -+ |MMC_VDD_25_26|MMC_VDD_26_27|MMC_VDD_27_28 -+ |MMC_VDD_28_29|MMC_VDD_29_30|MMC_VDD_30_31 -+ |MMC_VDD_31_32|MMC_VDD_32_33|MMC_VDD_33_34 -+ |MMC_VDD_34_35|MMC_VDD_35_36, -+ .init = e6_mci_init, -+ .setpower = e6_mci_setpower, -+ .exit = e6_mci_exit, -+}; -+ - static struct pxafb_mode_info mode_e6 = { - .pixclock = 192308, - .xres = 240, -@@ -118,6 +210,7 @@ - static void __init e6_init(void) - { - set_pxa_fb_info(&e6_fb_info); -+ pxa_set_mci_info(&e6_mci_platform_data); - - platform_add_devices(devices, ARRAY_SIZE(devices)); - } diff --git a/packages/linux/linux-ezx-2.6.23/patches/e6-pcap.patch b/packages/linux/linux-ezx-2.6.23/patches/e6-pcap.patch deleted file mode 100644 index a11adbc02e..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/e6-pcap.patch +++ /dev/null @@ -1,83 +0,0 @@ -Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e6.c -=================================================================== ---- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-e6.c 2007-09-07 11:32:32.000000000 -0300 -+++ linux-2.6.21/arch/arm/mach-pxa/ezx-e6.c 2007-09-07 11:51:55.000000000 -0300 -@@ -19,6 +19,7 @@ - #include <asm/arch/pxa-regs.h> - #include <asm/arch/pxafb.h> - #include <asm/arch/ezx.h> -+#include <asm/arch/ezx-pcap.h> - - #include "generic.h" - -@@ -48,7 +49,70 @@ - .pxafb_lcd_power = &ezx_lcd_power, - }; - -+/* PCAP */ -+static int __init e6_pcap_init(void) -+{ -+ /* -+ * FIXME: this is the PCAP INITIAL STATE. -+ * most of these writes should NOT be done here -+ * * voltage regulators, voltage enablers should be set by the -+ * driver which uses the connected hardware. Otherwise you -+ * drain power unnecessarily. -+ * * interrupt related registers should be set by the irq functions -+ * only. I think that the INT_SEL register selects on which irq -+ * pin the (ap/bp) the irq goes. This should go on ezx-pcap.c, but -+ * only if it actually makes any difference. -+ * * Only power state automatic changes should be done here. -+ * (*LOWPWR, *STBY, LOWPWR*) -+ * * I removed some writes which i consider extremelly wrong. And -+ * which i think will not break anything (they were overwritten -+ * later anyway). -+ * -+ * --WM -+ */ -+ ezx_pcap_write(PCAP_REG_INT_SEL, 0x0); /* wrong */ -+ ezx_pcap_write(PCAP_REG_SWCTRL, 0x2ee6); /* partially wrong */ -+ ezx_pcap_write(PCAP_REG_VREG1, 0x15778e3); /* wrong */ -+ ezx_pcap_write(PCAP_REG_VREG2, 0x810234); /* partially wrong */ -+ ezx_pcap_write(PCAP_REG_AUXVREG, 0x1024bec); /* wrong */ -+ ezx_pcap_write(PCAP_REG_PWR, 0x94108); /* partially wrong */ -+ ezx_pcap_write(PCAP_REG_AUXVREG_MASK, 0x214d48); /* wrong */ -+ ezx_pcap_write(PCAP_REG_BUSCTRL, 0x2a0); /* wrong */ -+ ezx_pcap_write(PCAP_REG_LOWPWR, 0x1d9610c); -+ ezx_pcap_write(PCAP_REG_PERIPH, 0x0); /* wrong */ -+ ezx_pcap_write(PCAP_REG_GP, 0x107); /* probably unnecessary */ -+ -+ return 0; -+} -+ -+static struct pcap_platform_data e6_pcap_platform_data = { -+ .port = 1, -+ .cs = GPIO_SPI_CE, -+ .flags = PCAP_CS_AH | PCAP_MCI_SD, -+ .clk = 1, -+ .init = e6_pcap_init, -+}; -+ -+static struct resource e6_pcap_resources[] = { -+ [0] = { -+ .start = IRQ_GPIO1, -+ .end = IRQ_GPIO1, -+ .flags = IORESOURCE_IRQ, -+ }, -+}; -+ -+struct platform_device e6_pcap_device = { -+ .name = "ezx-pcap", -+ .id = -1, -+ .num_resources = ARRAY_SIZE(e6_pcap_resources), -+ .resource = e6_pcap_resources, -+ .dev = { -+ .platform_data = &e6_pcap_platform_data, -+ }, -+}; -+ - static struct platform_device *devices[] __initdata = { -+ &e6_pcap_device, - }; - - static void __init e6_init(void) diff --git a/packages/linux/linux-ezx-2.6.23/patches/e6-ts.patch b/packages/linux/linux-ezx-2.6.23/patches/e6-ts.patch deleted file mode 100644 index ad4a52eeec..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/e6-ts.patch +++ /dev/null @@ -1,39 +0,0 @@ -Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e6.c -=================================================================== ---- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-e6.c 2007-09-25 00:03:01.000000000 -0300 -+++ linux-2.6.21/arch/arm/mach-pxa/ezx-e6.c 2007-09-25 02:00:58.000000000 -0300 -@@ -209,9 +209,34 @@ - .id = -1, - }; - -+/* PCAP_TS */ -+struct resource pcap_ts_resources[] = { -+ [0] = { -+ .start = EZX_IRQ_ADCDONE, -+ .end = EZX_IRQ_ADCDONE, -+ .flags = IORESOURCE_IRQ, -+ }, -+ [1] = { -+ .start = EZX_IRQ_TS, -+ .end = EZX_IRQ_TS, -+ .flags = IORESOURCE_IRQ, -+ } -+}; -+ -+struct platform_device pcap_ts_device = { -+ .name = "pcap-ts", -+ .id = -1, -+ .dev = { -+ .parent = &e6_pcap_device.dev, -+ }, -+ .num_resources = ARRAY_SIZE(pcap_ts_resources), -+ .resource = pcap_ts_resources, -+}; -+ - static struct platform_device *devices[] __initdata = { - &e6_pcap_device, - &e6_eoc_device, -+ &pcap_ts_device, - }; - - static void __init e6_init(void) diff --git a/packages/linux/linux-ezx-2.6.23/patches/e680-emu.patch b/packages/linux/linux-ezx-2.6.23/patches/e680-emu.patch deleted file mode 100644 index 6302bba8c7..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/e680-emu.patch +++ /dev/null @@ -1,38 +0,0 @@ -Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:01:32.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:01:37.000000000 +0200 -@@ -212,8 +212,33 @@ - }, - }; - -+/* EMU */ -+static struct resource e680_emu_resources[] = { -+ [0] = { -+ .start = EZX_IRQ_USB4V, -+ .end = EZX_IRQ_USB4V, -+ .flags = IORESOURCE_IRQ, -+ }, -+ [1] = { -+ .start = EZX_IRQ_USB1V, -+ .end = EZX_IRQ_USB1V, -+ .flags = IORESOURCE_IRQ, -+ }, -+}; -+ -+struct platform_device e680_emu_device = { -+ .name = "ezx-emu", -+ .id = -1, -+ .dev = { -+ .parent = &e680_pcap_device.dev, -+ }, -+ .num_resources = ARRAY_SIZE(e680_emu_resources), -+ .resource = e680_emu_resources, -+}; -+ - static struct platform_device *devices[] __initdata = { - &e680_pcap_device, -+ &e680_emu_device, - }; - - static void __init e680_init(void) diff --git a/packages/linux/linux-ezx-2.6.23/patches/e680-kbd.patch b/packages/linux/linux-ezx-2.6.23/patches/e680-kbd.patch deleted file mode 100644 index 27e33a0641..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/e680-kbd.patch +++ /dev/null @@ -1,93 +0,0 @@ -Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:01:37.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:01:49.000000000 +0200 -@@ -15,6 +15,7 @@ - #include <linux/fb.h> - #include <linux/mmc/host.h> - #include <linux/irq.h> -+#include <linux/input.h> - - #include <asm/mach-types.h> - #include <asm/mach/arch.h> -@@ -23,11 +24,13 @@ - #include <asm/arch/ezx.h> - #include <asm/arch/ezx-pcap.h> - #include <asm/arch/mmc.h> -+#include <asm/arch/kbd.h> - - #include "generic.h" - - extern void ezx_lcd_power(int, struct fb_var_screeninfo *); - extern void ezx_backlight_power(int); -+extern void __init pxa_set_kbd_info(struct pxakbd_platform_data *); - - #ifdef CONFIG_EZX_PCAP - extern int ezx_pcap_mmcsd_power(int); -@@ -236,6 +239,58 @@ - .resource = e680_emu_resources, - }; - -+static unsigned char e680_keycode[] = { -+ /* row 0 */ -+ KEY_UP, KEY_RIGHT, KEY_RESERVED, KEY_PHONE, -+ /* row 1 */ -+ KEY_DOWN, KEY_LEFT, KEY_VOLUMEUP, KEY_VOLUMEDOWN, -+ /* row 2 */ -+ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_KPENTER, -+}; -+ -+static unsigned char e680_direct_keycode[] = { -+ KEY_CAMERA, -+ KEY_RESERVED, -+ KEY_RESERVED, -+ KEY_HOME, -+ KEY_POWER, -+ KEY_MENU, -+}; -+ -+static int e680_kbd_init(void) -+{ -+ pxa_gpio_mode(93 | GPIO_ALT_FN_1_IN); /* KP_DKIN<0>, VR Key */ -+ pxa_gpio_mode(96 | GPIO_ALT_FN_1_IN); /* KP_DKIN<3>, GAME_A */ -+ pxa_gpio_mode(97 | GPIO_ALT_FN_1_IN); /* KP_DKIN<4>, power key */ -+ pxa_gpio_mode(98 | GPIO_ALT_FN_1_IN); /* KP_DKIN<5>, GAME_B */ -+ pxa_gpio_mode(100 | GPIO_ALT_FN_1_IN); /* KP_MKIN<0> */ -+ pxa_gpio_mode(101 | GPIO_ALT_FN_1_IN); /* KP_MKIN<1> */ -+ pxa_gpio_mode(102 | GPIO_ALT_FN_1_IN); /* KP_MKIN<2> */ -+ pxa_gpio_mode(103 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<0> */ -+ pxa_gpio_mode(104 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<1> */ -+ pxa_gpio_mode(105 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<2> */ -+ pxa_gpio_mode(106 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<3> */ -+ pxa_gpio_mode(GPIO_TC_MM_EN); -+ GPDR(GPIO_TC_MM_EN) |= GPIO_bit(GPIO_TC_MM_EN); -+ GPSR(GPIO_TC_MM_EN) = GPIO_bit(GPIO_TC_MM_EN); -+ PGSR3 |= GPIO_bit(GPIO_TC_MM_EN); -+ return 0; -+} -+ -+static struct pxakbd_platform_data e680_kbd_platform_data = { -+ .init = &e680_kbd_init, -+ .scan_interval = HZ/40, -+ .matrix = { -+ .keycode = e680_keycode, -+ .cols = 4, -+ .rows = 3, -+ }, -+ .direct = { -+ .keycode = e680_direct_keycode, -+ .num = 6, -+ }, -+}; -+ - static struct platform_device *devices[] __initdata = { - &e680_pcap_device, - &e680_emu_device, -@@ -256,6 +311,7 @@ - - set_pxa_fb_info(&e680_fb_info); - pxa_set_mci_info(&e680_mci_platform_data); -+ pxa_set_kbd_info(&e680_kbd_platform_data); - - /* clear EMU MUX1/MUX2 (low) to close the audio path to EMU */ - pxa_gpio_mode(GPIO_EMU_MUX1|GPIO_OUT); diff --git a/packages/linux/linux-ezx-2.6.23/patches/e680-leds.patch b/packages/linux/linux-ezx-2.6.23/patches/e680-leds.patch deleted file mode 100644 index 871f99be95..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/e680-leds.patch +++ /dev/null @@ -1,300 +0,0 @@ - -# -# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher -# - -Index: linux-2.6.23/drivers/leds/Kconfig -=================================================================== ---- linux-2.6.23.orig/drivers/leds/Kconfig 2007-10-24 20:02:07.000000000 +0200 -+++ linux-2.6.23/drivers/leds/Kconfig 2007-10-24 20:02:07.000000000 +0200 -@@ -117,6 +117,13 @@ - This option enables support for the LEDs on the - Motorola A780 GSM Phone. - -+config LEDS_E680 -+ tristate "LED Support for the Motorola E680(i) GSM Phone" -+ depends LEDS_CLASS && PXA_EZX_E680 -+ help -+ This options enables support for the LEDs on the -+ Motorola E680(i) GSM Phone. -+ - config LEDS_TRIGGER_TIMER - tristate "LED Timer Trigger" - depends on LEDS_TRIGGERS -Index: linux-2.6.23/drivers/leds/Makefile -=================================================================== ---- linux-2.6.23.orig/drivers/leds/Makefile 2007-10-24 20:02:07.000000000 +0200 -+++ linux-2.6.23/drivers/leds/Makefile 2007-10-24 20:02:07.000000000 +0200 -@@ -18,6 +18,7 @@ - obj-$(CONFIG_LEDS_COBALT) += leds-cobalt.o - obj-$(CONFIG_LEDS_GPIO) += leds-gpio.o - obj-$(CONFIG_LEDS_A780) += leds-a780.o -+obj-$(CONFIG_LEDS_E680) += leds-e680.o - - # LED Triggers - obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o -Index: linux-2.6.23/drivers/leds/leds-e680.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/drivers/leds/leds-e680.c 2007-10-24 20:02:07.000000000 +0200 -@@ -0,0 +1,235 @@ -+/* -+ * EZX Platform LED Driver for the Motorola E680(i) GSM Phone -+ * -+ * Copyright 2006 Vanille-Media -+ * -+ * Author: Michael Lauer <mickey@Vanille.de> -+ * -+ * Based on the Motorola 2.4 leds-e680.c and leds-corgi.c by Richard Purdie -+ * -+ * 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/delay.h> -+#include <linux/kernel.h> -+#include <linux/init.h> -+#include <linux/platform_device.h> -+#include <linux/leds.h> -+#include <asm/mach-types.h> -+#include <asm/arch/hardware.h> -+#include <asm/arch/pxa-regs.h> -+#include <asm/arch/ezx-pcap.h> -+ -+//FIXME move defines to a common header file -+#define IND_CNTL_R_BUL 46 -+#define IND_CNTL_G_BUL 47 -+#define SSP_PCAP_LED_MASK 0x000fffe0 -+#define SSP_PCAP_LED_SHIFT 5 -+#define GPIO_TC_MM_EN 99 -+ -+extern int ezx_pcap_read(u_int8_t, u_int32_t *); -+extern int ezx_pcap_write(u_int8_t, u_int32_t); -+ -+typedef struct { -+ u_int8_t ind_GPIO_red; /*Indicator Red control GPIO 46: 0 active, 1 inactive */ -+ u_int8_t ind_GPIO_green; /*Indicator Green control GPIO 47: 0 inactive, 1 active */ -+ u_int8_t pcap_LEDR_en; /*pcap LEDR_EN bit value: 1 =Red LED(&Green) sink circuit enabled*/ -+ u_int8_t pcap_LEDG_en; /*pcap LEDG_EN bit value:1 =Green(->Blue)LED sink circuit enabled*/ -+ u_int8_t pcap_LEDR_CTRL; /* 4bits Sets the timing for the red(&Green) LED sink circuit*/ -+ u_int8_t pcap_LEDG_CTRL; /* 4bits Sets the timing for the GREEN (->Blue) LED sink circuit*/ -+ u_int8_t pcap_LEDR_I; /* 2 bits 00 3mA,01 4mA, 10 5mA, 11 9mA, sets the pulsed current level for LEDR*/ -+ u_int8_t pcap_LEDG_I; /* 2 bits 00 3mA,01 4mA, 10 5mA, 11 9mA, sets the pulsed current level for LEDG*/ -+// u_int8_t pcap_SKIP_on; /*1=The ON timing sequence defined by LEDx_CTRL is executed on every other cycle*/ -+} PCAP2_LED_REGISTER_VALUE; -+ -+const PCAP2_LED_REGISTER_VALUE led_register_value[]= -+{ -+ {0x1,0x0, 0x0,0x0, 0x0,0x0, 0x1,0x0}, /* 0 OFF */ -+ -+ {0x0,0x0, 0x1,0x0, 0xf,0x0, 0x1,0x0}, /* 1 RED */ -+ {0x1,0x1, 0x1,0x0, 0xf,0x0, 0x1,0x0}, /* 2 GREEN */ -+ {0x0,0x1, 0x1,0x0, 0xf,0x0, 0x1,0x0}, /* 3 ORANGE */ -+ {0x1,0x0, 0x0,0x1, 0x0,0xf, 0x0,0x0}, /* 4 BLUE */ -+ {0x0,0x0, 0x1,0x1, 0xf,0xf, 0x1,0x0}, /* 5 MAGENTA */ -+ {0x1,0x1, 0x1,0x1, 0xf,0xf, 0x1,0x0}, /* 6 CYAN */ -+ {0x0,0x1, 0x1,0x1, 0xf,0xf, 0x1,0x0}, /* 7 WHITE */ -+}; -+ -+static void e680led_set(struct led_classdev *led_cdev, enum led_brightness value) -+{ -+ unsigned int tempValue; -+ unsigned char gpio_red, gpio_green, ledr_en, ledg_en, ledr_ctrl, -+ ledg_ctrl, ledr_i, ledg_i, skip, t, color; -+ unsigned char t_mask[2] = { 0xc, 0xc }; -+ -+ skip = 0; -+ if (value & 128) { -+ value &= (~128); -+ skip = 1; -+ } -+ -+ /* 7 colors - simple on */ -+ if (value <= 7) -+ color = value; -+ /* 4 colors - 11 timed on */ -+ else if (value <= 51) { -+ value -= 7; -+ color = ((value-1)%4)+1; -+ t = ((value-1)/4)+1; -+ t_mask[0] = t; -+ t_mask[1] = t; -+ } -+ /* 3 colors - 22 change color */ -+ else if (value <= 84) { -+ value -= 51; -+ color = ((value-1)%3)+5; -+ t = ((value-1)/3)+1; -+ t_mask[1] = t; -+ } -+ else if (value <= 117) { -+ value -= 84; -+ color = ((value-1)%3)+5; -+ t = ((value-1)/3)+1; -+ t_mask[0] = t; -+ } -+ /* 3 colors - alternate with blue */ -+ else if (value <= 120) { -+ color = value-113; -+ t_mask[0] = 0xa; -+ t_mask[1] = 0xb; -+ } -+ /* invalid value */ -+ else -+ color = 1; -+ -+ gpio_red = led_register_value[color].ind_GPIO_red; -+ gpio_green = led_register_value[color].ind_GPIO_green; -+ ledr_en = led_register_value[color].pcap_LEDR_en; -+ ledg_en = led_register_value[color].pcap_LEDG_en; -+ ledr_ctrl = led_register_value[color].pcap_LEDR_CTRL & t_mask[0]; -+ ledg_ctrl = led_register_value[color].pcap_LEDG_CTRL & t_mask[1]; -+ ledr_i = led_register_value[color].pcap_LEDR_I; -+ ledg_i = led_register_value[color].pcap_LEDG_I; -+ -+ ezx_pcap_read(PCAP_REG_PERIPH,&tempValue); -+ -+ tempValue &= (~SSP_PCAP_LED_MASK); -+ -+ pxa_gpio_set_value(IND_CNTL_R_BUL, gpio_red); -+ pxa_gpio_set_value(IND_CNTL_G_BUL, gpio_green); -+ -+ /* Write PCAP LED Peripheral Control Register*/ -+ tempValue = ((ledr_en | (ledg_en << 1) | (ledr_ctrl << 2) | -+ (ledg_ctrl << 6) | (ledr_i << 10) | (ledg_i << 12) | -+ (skip << 14)) & 0x7fff) << SSP_PCAP_LED_SHIFT; -+ -+ ezx_pcap_write(PCAP_REG_PERIPH,tempValue); -+} -+ -+static void e680led_keypad_set(struct led_classdev *led_cdev, enum led_brightness value) -+{ -+ /* this is not working yet, as there is something else missing */ -+#if 0 -+ printk( KERN_DEBUG "e680led_keypad_set: %d\n", value ); -+ -+ pxa_gpio_mode(GPIO_TC_MM_EN); -+ GPDR(GPIO_TC_MM_EN) |= GPIO_bit(GPIO_TC_MM_EN); -+ GPSR(GPIO_TC_MM_EN) = GPIO_bit(GPIO_TC_MM_EN); -+ -+ udelay( 100 ); -+ -+ if ( value ) { -+ GPCR(GPIO_TC_MM_EN) = GPIO_bit(GPIO_TC_MM_EN); -+ PGSR3 &= ~GPIO_bit(GPIO_TC_MM_EN); -+ } else { -+ GPSR(GPIO_TC_MM_EN) = GPIO_bit(GPIO_TC_MM_EN); -+ PGSR3 |= GPIO_bit(GPIO_TC_MM_EN); -+ } -+#endif -+} -+ -+static struct led_classdev e680_led = { -+ .name = "e680:led", -+ .default_trigger = "none", -+ .brightness_set = e680led_set, -+}; -+ -+static struct led_classdev e680_keypad = { -+ .name = "e680:keypad", -+ .default_trigger = "none", -+ .brightness_set = e680led_keypad_set, -+}; -+ -+#ifdef CONFIG_PM -+static int e680led_suspend(struct platform_device *dev, pm_message_t state) -+{ -+ led_classdev_suspend(&e680_led); -+ led_classdev_suspend(&e680_keypad); -+ return 0; -+} -+ -+static int e680led_resume(struct platform_device *dev) -+{ -+ led_classdev_resume(&e680_led); -+ led_classdev_resume(&e680_keypad); -+ return 0; -+} -+#endif -+ -+static int e680led_probe(struct platform_device *pdev) -+{ -+ int ret; -+ -+ /* configure GPIOs as output */ -+ pxa_gpio_mode(IND_CNTL_R_BUL | GPIO_OUT); -+ pxa_gpio_mode(IND_CNTL_G_BUL | GPIO_OUT); -+ -+ ret = led_classdev_register(&pdev->dev, &e680_led); -+ if (ret < 0) -+ return ret; -+ -+ ret = led_classdev_register(&pdev->dev, &e680_keypad); -+ if (ret < 0) { -+ led_classdev_unregister(&e680_led); -+ } -+ return ret; -+} -+ -+static int e680led_remove(struct platform_device *pdev) -+{ -+ led_classdev_unregister(&e680_led); -+ led_classdev_unregister(&e680_keypad); -+ return 0; -+} -+ -+static struct platform_driver e680led_driver = { -+ .probe = e680led_probe, -+ .remove = e680led_remove, -+#ifdef CONFIG_PM -+ .suspend = e680led_suspend, -+ .resume = e680led_resume, -+#endif -+ .driver = { -+ .name = "e680-led", -+ }, -+}; -+ -+static int __init e680led_init(void) -+{ -+ return platform_driver_register(&e680led_driver); -+} -+ -+static void __exit e680led_exit(void) -+{ -+ platform_driver_unregister(&e680led_driver); -+} -+ -+module_init(e680led_init); -+module_exit(e680led_exit); -+ -+MODULE_AUTHOR("Michael Lauer <mickey@Vanille.de>"); -+MODULE_DESCRIPTION("Motorola E680 LED driver"); -+MODULE_LICENSE("GPL"); -Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:02:05.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:02:07.000000000 +0200 -@@ -337,11 +337,20 @@ - }, - }; - -+static struct platform_device e680led_device = { -+ .name = "e680-led", -+ .id = -1, -+ .dev = { -+ .parent = &e680_pcap_device.dev, -+ }, -+}; -+ - static struct platform_device *devices[] __initdata = { - &e680_pcap_device, - &e680_emu_device, - &pcap_ts_device, - &e680locksw_device, -+ &e680led_device, - }; - - static void __init e680_init(void) diff --git a/packages/linux/linux-ezx-2.6.23/patches/e680-locksw.patch b/packages/linux/linux-ezx-2.6.23/patches/e680-locksw.patch deleted file mode 100644 index 6bb6687400..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/e680-locksw.patch +++ /dev/null @@ -1,45 +0,0 @@ -Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 18:58:55.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 18:59:23.000000000 +0200 -@@ -16,6 +16,7 @@ - #include <linux/mmc/host.h> - #include <linux/irq.h> - #include <linux/input.h> -+#include <linux/gpio_keys.h> - - #include <asm/mach-types.h> - #include <asm/mach/arch.h> -@@ -315,10 +316,32 @@ - .resource = pcap_ts_resources, - }; - -+static struct gpio_keys_button e680locksw_buttons[] = { -+ [0] = { -+ .code = KEY_SLEEP, -+ .gpio = GPIO_LOCK_SCREEN_PIN, -+ .desc = "E680 lockscreen sw", -+ }, -+}; -+ -+static struct gpio_keys_platform_data e680locksw_platform_data = { -+ .buttons = e680locksw_buttons, -+ .nbuttons = 1, -+}; -+ -+static struct platform_device e680locksw_device = { -+ .name = "gpio-keys", -+ .id = -1, -+ .dev = { -+ .platform_data = &e680locksw_platform_data, -+ }, -+}; -+ - static struct platform_device *devices[] __initdata = { - &e680_pcap_device, - &e680_emu_device, - &pcap_ts_device, -+ &e680locksw_device, - }; - - static void __init e680_init(void) diff --git a/packages/linux/linux-ezx-2.6.23/patches/e680-mci.patch b/packages/linux/linux-ezx-2.6.23/patches/e680-mci.patch deleted file mode 100644 index 73981823cf..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/e680-mci.patch +++ /dev/null @@ -1,126 +0,0 @@ -Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 13:03:06.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 18:54:35.000000000 +0200 -@@ -13,6 +13,8 @@ - #include <linux/init.h> - #include <linux/platform_device.h> - #include <linux/fb.h> -+#include <linux/mmc/host.h> -+#include <linux/irq.h> - - #include <asm/mach-types.h> - #include <asm/mach/arch.h> -@@ -20,12 +22,104 @@ - #include <asm/arch/pxafb.h> - #include <asm/arch/ezx.h> - #include <asm/arch/ezx-pcap.h> -+#include <asm/arch/mmc.h> - - #include "generic.h" - - extern void ezx_lcd_power(int, struct fb_var_screeninfo *); - extern void ezx_backlight_power(int); - -+#ifdef CONFIG_EZX_PCAP -+extern int ezx_pcap_mmcsd_power(int); -+extern void ezx_pcap_mmcsd_voltage(u_int32_t); -+#else -+#define ezx_pcap_mmcsd_voltage(x) {} -+#define ezx_pcap_mmcsd_power(x) {} -+#endif -+ -+static struct pxamci_platform_data e680_mci_platform_data; -+ -+static u_int8_t mmc_voltage[] = { -+ [ilog2(MMC_VDD_165_195)] = 3, -+ [ilog2(MMC_VDD_20_21)] = 3, -+ [ilog2(MMC_VDD_21_22)] = 3, -+ [ilog2(MMC_VDD_22_23)] = 3, -+ [ilog2(MMC_VDD_23_24)] = 3, -+ [ilog2(MMC_VDD_24_25)] = 3, -+ [ilog2(MMC_VDD_25_26)] = 3, -+ [ilog2(MMC_VDD_26_27)] = 3, -+ [ilog2(MMC_VDD_27_28)] = 3, -+ [ilog2(MMC_VDD_28_29)] = 3, -+ [ilog2(MMC_VDD_29_30)] = 3, -+ [ilog2(MMC_VDD_30_31)] = 3, -+ [ilog2(MMC_VDD_31_32)] = 3, -+ [ilog2(MMC_VDD_32_33)] = 3, -+ [ilog2(MMC_VDD_33_34)] = 3, -+ [ilog2(MMC_VDD_34_35)] = 3, -+ [ilog2(MMC_VDD_35_36)] = 3, -+}; -+ -+static int e680_mci_init(struct device *dev, -+ irqreturn_t (*ezx_detect_int)(int, void *), -+ void *data) -+{ -+ int err; -+ -+ /* Setup GPIO for PXA27x MMC/SD controller */ -+ pxa_gpio_mode(GPIO32_MMCCLK_MD); -+ pxa_gpio_mode(GPIO112_MMCCMD_MD); -+ pxa_gpio_mode(GPIO92_MMCDAT0_MD); -+ pxa_gpio_mode(GPIO109_MMCDAT1_MD); -+ pxa_gpio_mode(GPIO110_MMCDAT2_MD); -+ pxa_gpio_mode(GPIO111_MMCDAT3_MD); -+ -+ ezx_pcap_mmcsd_power(1); -+ -+ e680_mci_platform_data.detect_delay = msecs_to_jiffies(250); -+ -+ err = request_irq(0x49, ezx_detect_int, IRQF_DISABLED, -+ "MMC card detect", data); -+ if (err) { -+ printk(KERN_ERR "ezx_mci_detect: MMC/SD: can't request " -+ "MMC card detect IRQ\n"); -+ return -1; -+ } -+ -+ set_irq_type(0x0b, IRQT_BOTHEDGE); -+ -+ return 0; -+} -+ -+ -+static inline int e680_mci_get_ro(struct device *dev) -+{ -+ return (GPLR3 & 0x800); -+} -+ -+static void e680_mci_setpower(struct device *dev, unsigned int vdd) -+{ -+ struct pxamci_platform_data* p_d = dev->platform_data; -+ -+ if (( 1 << vdd) & p_d->ocr_mask) -+ ezx_pcap_mmcsd_voltage(mmc_voltage[vdd]); -+ -+ ezx_pcap_mmcsd_power(1); -+} -+ -+static void e680_mci_exit(struct device *dev, void *data) -+{ -+ ezx_pcap_mmcsd_power(0); -+ free_irq(0x49, data); -+} -+ -+static struct pxamci_platform_data e680_mci_platform_data = { -+ .ocr_mask = MMC_VDD_27_28, -+ .init = e680_mci_init, -+ .get_ro = e680_mci_get_ro, -+ .setpower = e680_mci_setpower, -+ .exit = e680_mci_exit, -+}; -+ - static struct pxafb_mode_info mode_e680 = { - .pixclock = 150000, - .xres = 240, -@@ -136,6 +230,7 @@ - PSLR = 0x05800f00; - - set_pxa_fb_info(&e680_fb_info); -+ pxa_set_mci_info(&e680_mci_platform_data); - - /* clear EMU MUX1/MUX2 (low) to close the audio path to EMU */ - pxa_gpio_mode(GPIO_EMU_MUX1|GPIO_OUT); diff --git a/packages/linux/linux-ezx-2.6.23/patches/e680-pcap.patch b/packages/linux/linux-ezx-2.6.23/patches/e680-pcap.patch deleted file mode 100644 index 12ce023749..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/e680-pcap.patch +++ /dev/null @@ -1,90 +0,0 @@ -Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c -=================================================================== ---- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-e680.c 2007-09-06 00:41:38.000000000 -0300 -+++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c 2007-09-06 00:44:56.000000000 -0300 -@@ -19,6 +19,7 @@ - #include <asm/arch/pxa-regs.h> - #include <asm/arch/pxafb.h> - #include <asm/arch/ezx.h> -+#include <asm/arch/ezx-pcap.h> - - #include "generic.h" - -@@ -48,7 +49,77 @@ - .pxafb_lcd_power = &ezx_lcd_power, - }; - -+/* PCAP */ -+static int __init e680_pcap_init(void) -+{ -+ /* initialize PCAP registers */ -+ /* set SW1 sleep to keep SW1 1.3v in sync mode */ -+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE10, 0); -+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE11, 0); -+ -+ /* SW1 active in sync mode */ -+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE00, 1); -+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE01, 0); -+ -+ /* at SW1 -core voltage to 1.30V */ -+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW10_DVS, 1); -+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW11_DVS, 1); -+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW12_DVS, 1); -+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW13_DVS, 0); -+ -+ /* when STANDY2 PIN ACTIVE (high) set V3-- sram V8 -- pll off */ -+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V3_STBY, 1); -+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V3_LOWPWR, 0); -+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V8_STBY, 1); -+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V8_LOWPWR, 0); -+ -+ /* -+ * when STANDY2 PIN ACTIVE (high) set V4-- lcd only for e680 V6 --- -+ * camera for e680 -+ */ -+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V4_STBY, 1); -+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V4_LOWPWR, 1); -+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V6_STBY, 1); -+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V6_LOWPWR, 0); -+ -+ /* set Vc to low power mode when AP sleep */ -+// SSP_PCAP_bit_set( PCAP_BIT_LOWPWR_CTRL_VC_STBY); -+ -+ /* set VAUX2 to low power mode when AP sleep */ -+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_VAUX2_STBY, 1); -+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_VAUX2_LOWPWR, 1); -+ -+ return 0; -+} -+ -+static struct pcap_platform_data e680_pcap_platform_data = { -+ .port = 1, -+ .cs = GPIO_SPI_CE, -+ .flags = PCAP_MCI_SD, -+ .clk = 1, -+ .init = e680_pcap_init, -+}; -+ -+static struct resource e680_pcap_resources[] = { -+ [0] = { -+ .start = IRQ_GPIO1, -+ .end = IRQ_GPIO1, -+ .flags = IORESOURCE_IRQ, -+ }, -+}; -+ -+struct platform_device e680_pcap_device = { -+ .name = "ezx-pcap", -+ .id = -1, -+ .num_resources = ARRAY_SIZE(e680_pcap_resources), -+ .resource = e680_pcap_resources, -+ .dev = { -+ .platform_data = &e680_pcap_platform_data, -+ }, -+}; -+ - static struct platform_device *devices[] __initdata = { -+ &e680_pcap_device, - }; - - static void __init e680_init(void) diff --git a/packages/linux/linux-ezx-2.6.23/patches/e680-ts.patch b/packages/linux/linux-ezx-2.6.23/patches/e680-ts.patch deleted file mode 100644 index 2350b2de82..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/e680-ts.patch +++ /dev/null @@ -1,39 +0,0 @@ -Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:01:49.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:01:58.000000000 +0200 -@@ -291,9 +291,34 @@ - }, - }; - -+/* PCAP_TS */ -+struct resource pcap_ts_resources[] = { -+ [0] = { -+ .start = EZX_IRQ_ADCDONE2, -+ .end = EZX_IRQ_ADCDONE2, -+ .flags = IORESOURCE_IRQ, -+ }, -+ [1] = { -+ .start = EZX_IRQ_TS, -+ .end = EZX_IRQ_TS, -+ .flags = IORESOURCE_IRQ, -+ } -+}; -+ -+struct platform_device pcap_ts_device = { -+ .name = "pcap-ts", -+ .id = -1, -+ .dev = { -+ .parent = &e680_pcap_device.dev, -+ }, -+ .num_resources = ARRAY_SIZE(pcap_ts_resources), -+ .resource = pcap_ts_resources, -+}; -+ - static struct platform_device *devices[] __initdata = { - &e680_pcap_device, - &e680_emu_device, -+ &pcap_ts_device, - }; - - static void __init e680_init(void) diff --git a/packages/linux/linux-ezx-2.6.23/patches/ezx-asoc.patch b/packages/linux/linux-ezx-2.6.23/patches/ezx-asoc.patch deleted file mode 100644 index 2226022a2c..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/ezx-asoc.patch +++ /dev/null @@ -1,1302 +0,0 @@ -Index: linux-2.6.23/sound/soc/codecs/pcap2.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/sound/soc/codecs/pcap2.c 2007-10-22 22:28:06.000000000 +0200 -@@ -0,0 +1,796 @@ -+/* -+ * pcap2.c - PCAP2 ASIC Audio driver -+ * -+ * Copyright (C) 2007 Daniel Ribeiro <drwyrm@gmail.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/delay.h> -+#include <linux/moduleparam.h> -+#include <linux/init.h> -+#include <linux/delay.h> -+#include <linux/pm.h> -+#include <linux/platform_device.h> -+#include <sound/driver.h> -+#include <sound/core.h> -+#include <sound/pcm.h> -+#include <sound/pcm_params.h> -+#include <sound/soc.h> -+#include <sound/soc-dapm.h> -+#include <sound/initval.h> -+#include <asm/arch/pxa-regs.h> -+#include <asm/arch/ezx-pcap.h> -+#include <asm/arch/ezx.h> -+#include <asm/arch/hardware.h> -+ -+#include "pcap2.h" -+ -+#define AUDIO_NAME "pcap2-codec" -+#define PCAP2_VERSION "0.1" -+ -+extern int ezx_pcap_write(u_int8_t, u_int32_t); -+extern int ezx_pcap_read(u_int8_t, u_int32_t *); -+static struct snd_soc_device *pcap2_codec_socdev; -+ -+/* -+ * Debug -+ */ -+ -+//#define PCAP2_DEBUG -+ -+#ifdef PCAP2_DEBUG -+#define dbg(format, arg...) \ -+ printk(KERN_DEBUG AUDIO_NAME ": " format "\n" , ## arg) -+#else -+#define dbg(format, arg...) -+#endif -+ -+#define err(format, arg...) \ -+ printk(KERN_ERR AUDIO_NAME ": " format "\n" , ## arg) -+#define info(format, arg...) \ -+ printk(KERN_INFO AUDIO_NAME ": " format "\n" , ## arg) -+#define warn(format, arg...) \ -+ printk(KERN_WARNING AUDIO_NAME ": " format "\n" , ## arg) -+ -+#define dump_registers() pcap2_codec_read(NULL, 13); \ -+ pcap2_codec_read(NULL, 12); \ -+ pcap2_codec_read(NULL, 11); \ -+ pcap2_codec_read(NULL, 26); -+ -+ -+ -+ -+/* -+ * ASoC limits register value to 16 bits and pcap uses 32 bit registers -+ * to work around this, we get 16 bits from low, mid or high positions. -+ * ASoC limits register number to 8 bits we use 0x1f for register -+ * number and 0xe0 for register offset. -WM -+ */ -+static int pcap2_codec_write(struct snd_soc_codec *codec, unsigned int reg, -+ unsigned int value) -+{ -+ unsigned int tmp; -+ -+ ezx_pcap_read((reg & 0x1f), &tmp); -+ -+ if (reg & SL) { -+ tmp &= 0xffff0000; -+ tmp |= (value & 0xffff); -+ } -+ else if (reg & SM) { -+ tmp &= 0xff0000ff; -+ tmp |= ((value << 8) & 0x00ffff00); -+ } -+ else if (reg & SH) { -+ tmp &= 0xffff; -+ tmp |= ((value << 16) & 0xffff0000); -+ } -+ else -+ tmp = value; -+ -+ dbg("codec_write reg=%x, rval=%08x, fval=%08x", reg, tmp, value); -+ ezx_pcap_write((reg & 0x1f), tmp); -+ return 0; -+ -+} -+ -+static unsigned int pcap2_codec_read(struct snd_soc_codec *codec, unsigned int reg) -+{ -+ unsigned int tmp, ret; -+ -+ ezx_pcap_read((reg & 0x1f), &tmp); -+ ret = tmp; -+ if (reg & SL) -+ ret = (tmp & 0xffff); -+ else if (reg & SM) -+ ret = ((tmp >> 8) & 0xffff); -+ else if (reg & SH) -+ ret = ((tmp >> 16) & 0xffff); -+ -+ dbg("codec_read reg=%x, rval=%08x, fval=%08x", reg, tmp, ret); -+ return(ret); -+ -+} -+ -+static const char *pcap2_output_select[] = {"2ch", "2->1ch", "2->1ch -3db", "2->1ch -6db"}; -+ -+static const struct soc_enum pcap2_enum[] = { -+SOC_ENUM_SINGLE((PCAP2_OUTPUT_AMP|SH), 3, 4, pcap2_output_select), -+}; -+ -+static const struct snd_kcontrol_new pcap2_input_mixer_controls[] = { -+SOC_DAPM_SINGLE("A3 Switch", (PCAP2_INPUT_AMP|SL), 6, 1, 0), -+SOC_DAPM_SINGLE("A5 Switch", (PCAP2_INPUT_AMP|SL), 8, 1, 0), -+}; -+ -+static const struct snd_kcontrol_new pcap2_output_mixer_controls[] = { -+SOC_DAPM_SINGLE("A1 Switch", (PCAP2_OUTPUT_AMP|SL), 0, 1, 0), -+SOC_DAPM_SINGLE("A2 Switch", (PCAP2_OUTPUT_AMP|SL), 1, 1, 0), -+SOC_DAPM_SINGLE("AR Switch", (PCAP2_OUTPUT_AMP|SL), 5, 1, 0), -+SOC_DAPM_SINGLE("AL Switch", (PCAP2_OUTPUT_AMP|SL), 6, 1, 0), -+}; -+ -+/* pcap2 codec non DAPM controls */ -+static const struct snd_kcontrol_new pcap2_codec_snd_controls[] = { -+SOC_SINGLE("Output gain", (PCAP2_OUTPUT_AMP|SM), 5, 15, 0), -+SOC_SINGLE("Input gain", (PCAP2_INPUT_AMP|SL), 0, 31, 0), -+}; -+ -+static const struct snd_kcontrol_new pcap2_codec_dm_mux_control[] = { -+ SOC_DAPM_ENUM("Output Mode", pcap2_enum[0]), -+}; -+ -+/* add non dapm controls */ -+static int pcap2_codec_add_controls(struct snd_soc_codec *codec) -+{ -+ int err, i; -+ -+ for (i = 0; i < ARRAY_SIZE(pcap2_codec_snd_controls); i++) { -+ if ((err = snd_ctl_add(codec->card, -+ snd_soc_cnew(&pcap2_codec_snd_controls[i],codec, NULL))) < 0) -+ return err; -+ } -+ -+ return 0; -+} -+ -+/* pcap2 codec DAPM controls */ -+static const struct snd_soc_dapm_widget pcap2_codec_dapm_widgets[] = { -+ SND_SOC_DAPM_DAC("ST_DAC", "ST_DAC playback", SND_SOC_NOPM, 0, 0), -+ SND_SOC_DAPM_DAC("CDC_DAC", "CDC_DAC playback", SND_SOC_NOPM, 0, 0), -+ SND_SOC_DAPM_ADC("CDC_ADC", "CDC_DAC capture", SND_SOC_NOPM, 0, 0), -+ SND_SOC_DAPM_PGA("PGA_ST", (PCAP2_OUTPUT_AMP|SL), 9, 0, NULL, 0), -+ SND_SOC_DAPM_PGA("PGA_CDC", (PCAP2_OUTPUT_AMP|SL), 8, 0, NULL, 0), -+ SND_SOC_DAPM_PGA("PGA_R", (PCAP2_OUTPUT_AMP|SL), 11, 0, NULL, 0), -+ SND_SOC_DAPM_PGA("PGA_L", (PCAP2_OUTPUT_AMP|SL), 12, 0, NULL, 0), -+ SND_SOC_DAPM_MUX("Downmixer", SND_SOC_NOPM, 0, 0, pcap2_codec_dm_mux_control), -+ SND_SOC_DAPM_PGA("PGA_A1CTRL", (PCAP2_OUTPUT_AMP|SH), 1, 1, NULL, 0), -+ SND_SOC_DAPM_MIXER("Output Mixer", SND_SOC_NOPM, 0, 0, &pcap2_output_mixer_controls[0], ARRAY_SIZE(pcap2_output_mixer_controls)), -+ SND_SOC_DAPM_OUTPUT("A1"), /* Earpiece */ -+ SND_SOC_DAPM_OUTPUT("A2"), /* LoudSpeaker */ -+ SND_SOC_DAPM_OUTPUT("AR"), /* headset right */ -+ SND_SOC_DAPM_OUTPUT("AL"), /* headset left */ -+ -+ SND_SOC_DAPM_MICBIAS("BIAS1", (PCAP2_INPUT_AMP|SL), 10, 0), -+ SND_SOC_DAPM_MICBIAS("BIAS2", (PCAP2_INPUT_AMP|SL), 11, 0), -+ SND_SOC_DAPM_MIXER("Input Mixer", SND_SOC_NOPM, 0, 0, &pcap2_input_mixer_controls[0], ARRAY_SIZE(pcap2_input_mixer_controls)), -+ SND_SOC_DAPM_INPUT("A3"), /* Headset Mic */ -+ SND_SOC_DAPM_INPUT("A5"), /* Builtin Mic */ -+}; -+ -+static const char *audio_map[][3] = { -+ { "A1", NULL, "Output Mixer" }, -+ { "A2", NULL, "Output Mixer" }, -+ { "AR", NULL, "Output Mixer" }, -+ { "AL", NULL, "Output Mixer" }, -+ -+ { "Output Mixer", "A1 Switch", "PGA_A1CTRL" }, -+ { "Output Mixer", "A2 Switch", "Downmixer" }, -+ { "Output Mixer", "AR Switch", "PGA_R" }, -+ { "Output Mixer", "AL Switch", "PGA_L" }, -+ -+ { "PGA_A1CTRL", NULL, "Downmixer" }, -+ -+ { "Downmixer", "2->1ch", "PGA_L" }, -+ { "Downmixer", "2->1ch", "PGA_R" }, -+ { "Downmixer", "2->1ch -3db", "PGA_L" }, -+ { "Downmixer", "2->1ch -3db", "PGA_R" }, -+ { "Downmixer", "2->1ch -6db", "PGA_L" }, -+ { "Downmixer", "2->1ch -6db", "PGA_R" }, -+ { "Downmixer", "2ch", "PGA_R" }, -+ -+ { "PGA_R", NULL, "PGA_ST" }, -+ { "PGA_L", NULL, "PGA_ST" }, -+ { "PGA_R", NULL, "PGA_CDC" }, -+ -+ { "PGA_ST", NULL, "ST_DAC" }, -+ { "PGA_CDC", NULL, "CDC_DAC" }, -+ -+ /* input path */ -+ { "BIAS1", NULL, "A3" }, -+ { "BIAS2", NULL, "A5" }, -+ -+ { "Input Mixer", "A3 Switch", "BIAS1" }, -+ { "Input Mixer", "A5 Switch", "BIAS2" }, -+ -+ { "PGA_R", NULL, "Input Mixer" }, -+ -+ { "PGA_CDC", NULL, "PGA_R" }, -+ { "CDC_ADC", NULL, "PGA_CDC" }, -+ -+ /* terminator */ -+ {NULL, NULL, NULL}, -+}; -+ -+static int pcap2_codec_add_widgets(struct snd_soc_codec *codec) -+{ -+ int i; -+ -+ for(i = 0; i < ARRAY_SIZE(pcap2_codec_dapm_widgets); i++) { -+ snd_soc_dapm_new_control(codec, &pcap2_codec_dapm_widgets[i]); -+ } -+ -+ /* set up audio path interconnects */ -+ for(i = 0; audio_map[i][0] != NULL; i++) { -+ snd_soc_dapm_connect_input(codec, audio_map[i][0], -+ audio_map[i][1], audio_map[i][2]); -+ } -+ -+ snd_soc_dapm_new_widgets(codec); -+ return 0; -+} -+ -+static int pcap2_codec_dapm_event(struct snd_soc_codec *codec, int event) -+{ -+ unsigned int input = pcap2_codec_read(codec, PCAP2_INPUT_AMP); -+ -+ input &= ~PCAP2_INPUT_AMP_LOWPWR; -+ -+ switch (event) { -+ case SNDRV_CTL_POWER_D0: -+ case SNDRV_CTL_POWER_D1: -+ case SNDRV_CTL_POWER_D2: -+ case SNDRV_CTL_POWER_D3hot: /* Off, with power */ -+ dbg("dapm: ON\n"); -+ break; -+ case SNDRV_CTL_POWER_D3cold: /* Off, without power */ -+ input |= PCAP2_INPUT_AMP_LOWPWR; -+ dbg("dapm: OFF\n"); -+ break; -+ } -+ codec->dapm_state = event; -+ pcap2_codec_write(codec, PCAP2_INPUT_AMP, input); -+ return 0; -+} -+ -+static int pcap2_hw_params(struct snd_pcm_substream *substream, -+ struct snd_pcm_hw_params *params) -+{ -+ struct snd_soc_pcm_runtime *rtd = substream->private_data; -+ struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai; -+ struct snd_soc_codec *codec = codec_dai->codec; -+ unsigned int tmp; -+ -+ if (codec_dai->id == PCAP2_STEREO_DAI) { -+ tmp = pcap2_codec_read(codec, PCAP2_ST_DAC); -+ -+ tmp &= ~PCAP2_ST_DAC_RATE_MASK; -+ switch(params_rate(params)) { -+ case 8000: -+ break; -+ case 11025: -+ tmp |= PCAP2_ST_DAC_RATE_11025; -+ break; -+ case 12000: -+ tmp |= PCAP2_ST_DAC_RATE_12000; -+ break; -+ case 16000: -+ tmp |= PCAP2_ST_DAC_RATE_16000; -+ break; -+ case 22050: -+ tmp |= PCAP2_ST_DAC_RATE_22050; -+ break; -+ case 24000: -+ tmp |= PCAP2_ST_DAC_RATE_24000; -+ break; -+ case 32000: -+ tmp |= PCAP2_ST_DAC_RATE_32000; -+ break; -+ case 44100: -+ tmp |= PCAP2_ST_DAC_RATE_44100; -+ break; -+ case 48000: -+ tmp |= PCAP2_ST_DAC_RATE_48000; -+ break; -+ default: -+ return -EINVAL; -+ } -+ tmp |= PCAP2_ST_DAC_RESET_DF; -+ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp); -+ } -+ else { -+ tmp = pcap2_codec_read(codec, PCAP2_CODEC); -+ -+ tmp &= ~PCAP2_CODEC_RATE_MASK; -+ switch(params_rate(params)) { -+ case 8000: -+ break; -+ case 16000: -+ tmp |= PCAP2_CODEC_RATE_16000; -+ break; -+ default: -+ return -EINVAL; -+ } -+ tmp |= PCAP2_CODEC_RESET_DF; -+ pcap2_codec_write(codec, PCAP2_CODEC, tmp); -+ } -+ -+ return 0; -+} -+ -+static int pcap2_hw_free(struct snd_pcm_substream *substream) -+{ -+ struct snd_soc_pcm_runtime *rtd = substream->private_data; -+ struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai; -+ struct snd_soc_codec *codec = codec_dai->codec; -+ struct snd_soc_dapm_widget *w; -+ unsigned int tmp; -+ -+ if (codec_dai->id == PCAP2_STEREO_DAI) { -+ snd_soc_dapm_set_endpoint(codec, "ST_DAC", 0); -+ tmp = pcap2_codec_read(codec, PCAP2_ST_DAC); -+ tmp &= ~(PCAP2_ST_DAC_EN | PCAP2_ST_DAC_CLK_EN); -+ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp); -+ } -+ else { -+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) -+ snd_soc_dapm_set_endpoint(codec, "CDC_DAC", 0); -+ else -+ snd_soc_dapm_set_endpoint(codec, "CDC_ADC", 0); -+ list_for_each_entry(w, &codec->dapm_widgets, list) { -+ if ((!strcmp(w->name, "CDC_DAC") || !strcmp(w->name, "CDC_ADC")) && w->connected) -+ goto in_use; -+ } -+ tmp = pcap2_codec_read(codec, PCAP2_CODEC); -+ tmp &= ~(PCAP2_CODEC_EN | PCAP2_CODEC_CLK_EN); -+ pcap2_codec_write(codec, PCAP2_CODEC, tmp); -+ } -+in_use: -+ snd_soc_dapm_sync_endpoints(codec); -+ -+ return 0; -+} -+ -+static int pcap2_set_dai_sysclk(struct snd_soc_codec_dai *codec_dai, -+ int clk_id, unsigned int freq, int dir) -+{ -+ struct snd_soc_codec *codec = codec_dai->codec; -+ -+ unsigned int tmp; -+ if (codec_dai->id == PCAP2_STEREO_DAI) { -+ /* ST_DAC */ -+ -+ tmp = pcap2_codec_read(codec, PCAP2_ST_DAC); -+ -+ tmp &= ~PCAP2_ST_DAC_CLKSEL_MASK; -+ switch (clk_id) { -+ case PCAP2_CLK_AP: -+ tmp |= PCAP2_ST_DAC_CLKSEL_AP; -+ break; -+ case PCAP2_CLK_BP: -+ break; -+ default: -+ return -ENODEV; -+ } -+ -+ tmp &= ~PCAP2_ST_DAC_CLK_MASK; -+ switch (freq) { -+ case 13000000: -+ break; -+/* case 15M36: -+ tmp |= PCAP2_ST_DAC_CLK_15M36; -+ break; -+ case 16M8: -+ tmp |= PCAP2_ST_DAC_CLK_16M8; -+ break; -+ case 19M44: -+ tmp |= PCAP2_ST_DAC_CLK_19M44; -+ break; -+*/ case 26000000: -+ tmp |= PCAP2_ST_DAC_CLK_26M; -+ break; -+/* case EXT_MCLK: -+ tmp |= PCAP2_ST_DAC_CLK_MCLK; -+ break; -+ case FSYNC: -+ tmp |= PCAP2_ST_DAC_CLK_FSYNC; -+ break; -+ case BITCLK: -+ tmp |= PCAP2_ST_DAC_CLK_BITCLK; -+ break; -+*/ default: -+ return -EINVAL; -+ } -+ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp); -+ } -+ else { -+ /* MONO_DAC */ -+ tmp = pcap2_codec_read(codec, PCAP2_CODEC); -+ -+ tmp &= ~PCAP2_CODEC_CLKSEL_MASK; -+ switch (clk_id) { -+ case PCAP2_CLK_AP: -+ tmp |= PCAP2_CODEC_CLKSEL_AP; -+ break; -+ case PCAP2_CLK_BP: -+ break; -+ default: -+ return -ENODEV; -+ } -+ -+ tmp &= ~PCAP2_CODEC_CLK_MASK; -+ switch (freq) { -+ case 13000000: -+ break; -+/* case 15M36: -+ tmp |= PCAP2_CODEC_CLK_15M36; -+ break; -+ case 16M8: -+ tmp |= PCAP2_CODEC_CLK_16M8; -+ break; -+ case 19M44: -+ tmp |= PCAP2_CODEC_CLK_19M44; -+ break; -+*/ case 26000000: -+ tmp |= PCAP2_CODEC_CLK_26M; -+ break; -+ default: -+ return -EINVAL; -+ } -+ pcap2_codec_write(codec, PCAP2_CODEC, tmp); -+ } -+ return 0; -+} -+ -+static int pcap2_set_dai_fmt(struct snd_soc_codec_dai *codec_dai, -+ unsigned int fmt) -+{ -+ struct snd_soc_codec *codec = codec_dai->codec; -+ unsigned int tmp = 0; -+ -+ if (codec_dai->id == PCAP2_STEREO_DAI) { -+ /* ST_DAC */ -+ -+ /* disable CODEC */ -+ pcap2_codec_write(codec, PCAP2_CODEC, 0); -+ -+ switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { -+ case SND_SOC_DAIFMT_CBM_CFM: -+ break; -+ case SND_SOC_DAIFMT_CBS_CFS: -+ tmp |= 0x1; -+ break; -+ default: -+ return -EINVAL; -+ } -+ -+ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { -+ case SND_SOC_DAIFMT_I2S: -+ tmp |= 0x4000; -+ break; -+/* case SND_SOC_NET: -+ tmp |= 0x2000; -+ break; -+*/ case SND_SOC_DAIFMT_DSP_B: -+ break; -+ default: -+ return -EINVAL; -+ } -+ -+ switch (fmt & SND_SOC_DAIFMT_INV_MASK) { -+ case SND_SOC_DAIFMT_IB_IF: -+ break; -+ case SND_SOC_DAIFMT_NB_NF: -+ tmp |= 0x60000; -+ break; -+ case SND_SOC_DAIFMT_IB_NF: -+ tmp |= 0x40000; -+ break; -+ case SND_SOC_DAIFMT_NB_IF: -+ tmp |= 0x20000; -+ break; -+ } -+ /* set dai to AP */ -+ tmp |= 0x1000; -+ -+ /* set BCLK */ -+ tmp |= 0x18000; -+ -+ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp); -+ } -+ else { -+ /* MONO_DAC */ -+ -+ /* disable ST_DAC */ -+ pcap2_codec_write(codec, PCAP2_ST_DAC, 0); -+ -+ switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { -+ case SND_SOC_DAIFMT_CBM_CFM: -+ break; -+ case SND_SOC_DAIFMT_CBS_CFS: -+ tmp |= 0x2; -+ break; -+ default: -+ return -EINVAL; -+ } -+ -+ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { -+ case SND_SOC_DAIFMT_DSP_B: -+ break; -+ default: -+ return -EINVAL; -+ } -+ -+ switch (fmt & SND_SOC_DAIFMT_INV_MASK) { -+ case SND_SOC_DAIFMT_IB_IF: -+ break; -+ case SND_SOC_DAIFMT_NB_NF: -+ tmp |= 0x600; -+ break; -+ case SND_SOC_DAIFMT_IB_NF: -+ tmp |= 0x400; -+ break; -+ case SND_SOC_DAIFMT_NB_IF: -+ tmp |= 0x200; -+ break; -+ } -+ if (codec_dai->id == PCAP2_MONO_DAI) -+ /* set dai to AP */ -+ tmp |= 0x8000; -+ -+ tmp |= 0x5; /* IHF / OHF */ -+ -+ pcap2_codec_write(codec, PCAP2_CODEC, tmp); -+ } -+ return 0; -+} -+ -+static int pcap2_prepare(struct snd_pcm_substream *substream) -+{ -+ -+ struct snd_soc_pcm_runtime *rtd = substream->private_data; -+ struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai; -+ struct snd_soc_codec *codec = codec_dai->codec; -+ unsigned int tmp; -+ /* FIXME enable clock only if codec is master */ -+ if (codec_dai->id == PCAP2_STEREO_DAI) { -+ snd_soc_dapm_set_endpoint(codec, "ST_DAC", 1); -+ snd_soc_dapm_set_endpoint(codec, "CDC_DAC", 0); -+ snd_soc_dapm_set_endpoint(codec, "CDC_ADC", 0); -+ tmp = pcap2_codec_read(codec, PCAP2_ST_DAC); -+ tmp |= (PCAP2_ST_DAC_EN | PCAP2_ST_DAC_CLK_EN); -+ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp); -+ } -+ else { -+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) -+ snd_soc_dapm_set_endpoint(codec, "CDC_DAC", 1); -+ else -+ snd_soc_dapm_set_endpoint(codec, "CDC_ADC", 1); -+ snd_soc_dapm_set_endpoint(codec, "ST_DAC", 0); -+ tmp = pcap2_codec_read(codec, PCAP2_CODEC); -+ tmp |= (PCAP2_CODEC_EN | PCAP2_CODEC_CLK_EN); -+ pcap2_codec_write(codec, PCAP2_CODEC, tmp); -+ } -+ snd_soc_dapm_sync_endpoints(codec); -+ mdelay(1); -+#ifdef PCAP2_DEBUG -+ dump_registers(); -+#endif -+ return 0; -+} -+ -+/* -+ * Define codec DAI. -+ */ -+struct snd_soc_codec_dai pcap2_dai[] = { -+{ -+ .name = "PCAP2 MONO", -+ .id = 0, -+ .playback = { -+ .stream_name = "CDC_DAC playback", -+ .channels_min = 1, -+ .channels_max = 1, -+ .rates = (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000), -+ .formats = SNDRV_PCM_FMTBIT_S16_LE, -+ }, -+ .capture = { -+ .stream_name = "CDC_DAC capture", -+ .channels_min = 1, -+ .channels_max = 1, -+ .rates = (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000), -+ .formats = SNDRV_PCM_FMTBIT_S16_LE, -+ }, -+ .ops = { -+ .prepare = pcap2_prepare, -+ .hw_params = pcap2_hw_params, -+ .hw_free = pcap2_hw_free, -+ }, -+ .dai_ops = { -+// .digital_mute = pcap2_mute, -+ .set_fmt = pcap2_set_dai_fmt, -+ .set_sysclk = pcap2_set_dai_sysclk, -+ }, -+}, -+{ -+ .name = "PCAP2 STEREO", -+ .id = 1, -+ .playback = { -+ .stream_name = "ST_DAC playback", -+ .channels_min = 1, -+ .channels_max = 2, -+ .rates = (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | -+ SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | -+ SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | -+ SNDRV_PCM_RATE_48000), -+ .formats = SNDRV_PCM_FMTBIT_S16_LE, -+ }, -+ .capture = { /* FIXME: PCAP support this?? */ -+ .stream_name = "ST_DAC capture", -+ .channels_min = 1, -+ .channels_max = 1, -+ .rates = (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | -+ SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | -+ SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | -+ SNDRV_PCM_RATE_48000), -+ .formats = SNDRV_PCM_FMTBIT_S16_LE, -+ }, -+ .ops = { -+ .prepare = pcap2_prepare, -+ .hw_params = pcap2_hw_params, -+ .hw_free = pcap2_hw_free, -+ }, -+ .dai_ops = { -+// .digital_mute = pcap2_mute, -+ .set_fmt = pcap2_set_dai_fmt, -+ .set_sysclk = pcap2_set_dai_sysclk, -+ }, -+}, -+{ -+ .name = "PCAP2 BP", -+ .id = 2, -+ .playback = { -+ .stream_name = "BP playback", -+ .channels_min = 1, -+ .channels_max = 1, -+ .rates = SNDRV_PCM_RATE_8000, -+ .formats = SNDRV_PCM_FMTBIT_S16_LE, -+ }, -+ .ops = { -+ .prepare = pcap2_prepare, -+ .hw_params = pcap2_hw_params, -+ .hw_free = pcap2_hw_free, -+ }, -+ .dai_ops = { -+// .digital_mute = pcap2_mute, -+ .set_fmt = pcap2_set_dai_fmt, -+ .set_sysclk = pcap2_set_dai_sysclk, -+ }, -+}, -+}; -+EXPORT_SYMBOL_GPL(pcap2_dai); -+ -+static int pcap2_codec_suspend(struct platform_device *pdev, pm_message_t state) -+{ -+ struct snd_soc_device *socdev = platform_get_drvdata(pdev); -+ struct snd_soc_codec *codec = socdev->codec; -+ -+ dbg("pcap2_codec_suspend"); -+ pcap2_codec_dapm_event(codec, SNDRV_CTL_POWER_D3cold); -+ return 0; -+} -+ -+static int pcap2_codec_resume(struct platform_device *pdev) -+{ -+ struct snd_soc_device *socdev = platform_get_drvdata(pdev); -+ struct snd_soc_codec *codec = socdev->codec; -+ -+ dbg("pcap2_codec_resume"); -+ pcap2_codec_dapm_event(codec, SNDRV_CTL_POWER_D3hot); -+ pcap2_codec_dapm_event(codec, codec->suspend_dapm_state); -+ return 0; -+} -+ -+/* -+ * initialise the PCAP2 driver -+ * register the mixer and dsp interfaces with the kernel -+ */ -+static int pcap2_codec_init(struct snd_soc_device *socdev) -+{ -+ struct snd_soc_codec *codec = socdev->codec; -+ int ret = 0; -+ -+ dbg("pcap2_codec_init"); -+ codec->name = "PCAP2 Audio"; -+ codec->owner = THIS_MODULE; -+ codec->read = pcap2_codec_read; -+ codec->write = pcap2_codec_write; -+ codec->dapm_event = pcap2_codec_dapm_event; -+ codec->dai = pcap2_dai; -+ codec->num_dai = ARRAY_SIZE(pcap2_dai); -+ -+ /* register pcms */ -+ ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1); -+ if (ret < 0) { -+ return ret; -+ } -+ /* power on device */ -+ pcap2_codec_dapm_event(codec, SNDRV_CTL_POWER_D3hot); -+ /* set the update bits */ -+ -+ pcap2_codec_add_controls(codec); -+ pcap2_codec_add_widgets(codec); -+ ret = snd_soc_register_card(socdev); -+ if (ret < 0) { -+ snd_soc_free_pcms(socdev); -+ snd_soc_dapm_free(socdev); -+ } -+ -+ return ret; -+} -+ -+static int pcap2_codec_probe(struct platform_device *pdev) -+{ -+ struct snd_soc_device *socdev = platform_get_drvdata(pdev); -+ struct pcap2_codec_setup_data *setup; -+ struct snd_soc_codec *codec; -+ int ret = 0; -+ info("PCAP2 Audio Codec %s", PCAP2_VERSION); -+ -+ setup = socdev->codec_data; -+ codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL); -+ if (codec == NULL) -+ return -ENOMEM; -+ -+ socdev->codec = codec; -+ mutex_init(&codec->mutex); -+ INIT_LIST_HEAD(&codec->dapm_widgets); -+ INIT_LIST_HEAD(&codec->dapm_paths); -+ -+ pcap2_codec_socdev = socdev; -+ -+ ret = pcap2_codec_init(socdev); -+ return ret; -+} -+ -+/* power down chip and remove */ -+static int pcap2_codec_remove(struct platform_device *pdev) -+{ -+ struct snd_soc_device *socdev = platform_get_drvdata(pdev); -+ struct snd_soc_codec *codec = socdev->codec; -+ if (codec->control_data) -+ pcap2_codec_dapm_event(codec, SNDRV_CTL_POWER_D3cold); -+ snd_soc_free_pcms(socdev); -+ snd_soc_dapm_free(socdev); -+ -+ kfree(codec); -+ -+ return 0; -+} -+ -+/* codec device ops */ -+struct snd_soc_codec_device soc_codec_dev_pcap2 = { -+ .probe = pcap2_codec_probe, -+ .remove = pcap2_codec_remove, -+ .suspend = pcap2_codec_suspend, -+ .resume = pcap2_codec_resume, -+}; -+ -+EXPORT_SYMBOL_GPL(soc_codec_dev_pcap2); -+ -+MODULE_DESCRIPTION("ASoC PCAP2 codec"); -+MODULE_AUTHOR("Daniel Ribeiro"); -+MODULE_LICENSE("GPL"); -Index: linux-2.6.23/sound/soc/codecs/pcap2.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/sound/soc/codecs/pcap2.h 2007-10-22 22:28:06.000000000 +0200 -@@ -0,0 +1,81 @@ -+/* -+ * 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. -+ */ -+ -+#ifndef _PCAP2_H -+#define _PCAP2_H -+ -+/* 16 bit reads/writes on pcap registers (ugly workaround) */ -+#define SL (1 << 5) /* lower 16 bits */ -+#define SM (1 << 6) /* mid 16 bits */ -+#define SH (1 << 7) /* higher 16 bits */ -+ -+/* PCAP2 register space */ -+#define PCAP2_CODEC 0x0b -+#define PCAP2_OUTPUT_AMP 0x0c -+#define PCAP2_ST_DAC 0x0d -+#define PCAP2_INPUT_AMP 0x1a -+ -+#define PCAP2_MONO_DAI 0 -+#define PCAP2_STEREO_DAI 1 -+#define PCAP2_BP_DAI 2 -+ -+#define PCAP2_CLK_BP 0 -+#define PCAP2_CLK_AP 1 -+ -+#define PCAP2_CODEC_EN 0x2000 -+#define PCAP2_CODEC_CLK_EN 0x1000 -+#define PCAP2_CODEC_RESET_DF 0x800 -+#define PCAP2_CODEC_RATE_MASK 0x4000 -+#define PCAP2_CODEC_RATE_8000 0x0 -+#define PCAP2_CODEC_RATE_16000 0x4000 -+#define PCAP2_CODEC_CLKSEL_MASK 0x10000 -+#define PCAP2_CODEC_CLKSEL_AP 0x10000 -+#define PCAP2_CODEC_CLKSEL_BP 0x0 -+#define PCAP2_CODEC_CLK_MASK 0x1c0 -+#define PCAP2_CODEC_CLK_13M 0x0 -+#define PCAP2_CODEC_CLK_15M36 0x40 -+#define PCAP2_CODEC_CLK_16M8 0x80 -+#define PCAP2_CODEC_CLK_19M44 0xc0 -+#define PCAP2_CODEC_CLK_26M 0x100 -+ -+#define PCAP2_ST_DAC_EN 0x80 -+#define PCAP2_ST_DAC_CLK_EN 0x20 -+#define PCAP2_ST_DAC_RESET_DF 0x40 -+#define PCAP2_ST_DAC_RATE_MASK 0xf00 -+#define PCAP2_ST_DAC_RATE_8000 0x0 -+#define PCAP2_ST_DAC_RATE_11025 0x100 -+#define PCAP2_ST_DAC_RATE_12000 0x200 -+#define PCAP2_ST_DAC_RATE_16000 0x300 -+#define PCAP2_ST_DAC_RATE_22050 0x400 -+#define PCAP2_ST_DAC_RATE_24000 0x500 -+#define PCAP2_ST_DAC_RATE_32000 0x600 -+#define PCAP2_ST_DAC_RATE_44100 0x700 -+#define PCAP2_ST_DAC_RATE_48000 0x800 -+#define PCAP2_ST_DAC_CLKSEL_MASK 0x80000 -+#define PCAP2_ST_DAC_CLKSEL_AP 0x80000 -+#define PCAP2_ST_DAC_CLKSEL_BP 0x0 -+#define PCAP2_ST_DAC_CLK_MASK 0x1c -+#define PCAP2_ST_DAC_CLK_13M 0x0 -+#define PCAP2_ST_DAC_CLK_15M36 0x4 -+#define PCAP2_ST_DAC_CLK_16M8 0x8 -+#define PCAP2_ST_DAC_CLK_19M44 0xc -+#define PCAP2_ST_DAC_CLK_26M 0x10 -+#define PCAP2_ST_DAC_CLK_MCLK 0x14 -+#define PCAP2_ST_DAC_CLK_FSYNC 0x18 -+#define PCAP2_ST_DAC_CLK_BITCLK 0x1c -+ -+#define PCAP2_INPUT_AMP_LOWPWR 0x80000 -+#define PCAP2_INPUT_AMP_V2EN2 0x200000 -+ -+#define PCAP2_OUTPUT_AMP_PGAR_EN 0x800 -+#define PCAP2_OUTPUT_AMP_PGAL_EN 0x1000 -+#define PCAP2_OUTPUT_AMP_CDC_SW 0x100 -+#define PCAP2_OUTPUT_AMP_ST_DAC_SW 0x200 -+ -+extern struct snd_soc_codec_dai pcap2_dai[]; -+extern struct snd_soc_codec_device soc_codec_dev_pcap2; -+ -+#endif -Index: linux-2.6.23/sound/soc/pxa/Kconfig -=================================================================== ---- linux-2.6.23.orig/sound/soc/pxa/Kconfig 2007-10-22 22:27:11.000000000 +0200 -+++ linux-2.6.23/sound/soc/pxa/Kconfig 2007-10-22 22:29:23.000000000 +0200 -@@ -57,3 +57,12 @@ - help - Say Y if you want to add support for SoC audio on Sharp - Zaurus SL-C6000x models (Tosa). -+ -+config SND_PXA2XX_SOC_EZX -+ tristate "SoC Audio support for EZX" -+ depends on SND_PXA2XX_SOC && PXA_EZX -+ select SND_PXA2XX_SOC_SSP -+ select SND_SOC_PCAP2 -+ help -+ Say Y if you want to add support for SoC audio on -+ Motorola EZX Phones (a780/e680). -Index: linux-2.6.23/sound/soc/pxa/ezx.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/sound/soc/pxa/ezx.c 2007-10-22 22:28:06.000000000 +0200 -@@ -0,0 +1,349 @@ -+/* -+ * ezx.c - Machine specific code for EZX phones -+ * -+ * Copyright (C) 2007 Daniel Ribeiro <drwyrm@gmail.com> -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License as published by the -+ * Free Software Foundation; either version 2 of the License, or (at your -+ * option) any later version. -+ * -+ */ -+ -+#include <linux/module.h> -+#include <linux/moduleparam.h> -+#include <linux/timer.h> -+#include <linux/interrupt.h> -+#include <linux/platform_device.h> -+#include <sound/driver.h> -+#include <sound/core.h> -+#include <sound/pcm.h> -+#include <sound/soc.h> -+#include <sound/soc-dapm.h> -+ -+#include <asm/mach-types.h> -+#include <asm/arch/pxa-regs.h> -+#include <asm/arch/hardware.h> -+ -+#include <asm/arch/ezx-pcap.h> -+ -+#include "../codecs/pcap2.h" -+#include "pxa2xx-pcm.h" -+#include "pxa2xx-ssp.h" -+ -+#define GPIO_HW_ATTENUATE_A780 96 -+ -+static struct snd_soc_codec *control_codec; -+ -+static void ezx_ext_control(struct snd_soc_codec *codec) -+{ -+ if (ezx_pcap_read_bit(pbit(PCAP_REG_PSTAT, PCAP_IRQ_A1))) -+ snd_soc_dapm_set_endpoint(codec, "Headset", 1); -+ else -+ snd_soc_dapm_set_endpoint(codec, "Headset", 0); -+ if (ezx_pcap_read_bit(pbit(PCAP_REG_PSTAT, PCAP_IRQ_MB2))) -+ snd_soc_dapm_set_endpoint(codec, "External Mic", 1); -+ else -+ snd_soc_dapm_set_endpoint(codec, "External Mic", 0); -+ -+ snd_soc_dapm_sync_endpoints(codec); -+} -+ -+static irqreturn_t jack_irq(int irq, void *data) -+{ -+ ezx_ext_control(control_codec); -+ return IRQ_HANDLED; -+} -+ -+ -+/* -+ * Alsa operations -+ * Only implement the required operations for your platform. -+ * These operations are specific to the machine only. -+ */ -+ -+ /* -+ * Called by ALSA when a PCM substream is opened, private data can be allocated. -+ */ -+static int ezx_machine_startup(struct snd_pcm_substream *substream) -+{ -+ struct snd_soc_pcm_runtime *rtd = substream->private_data; -+ struct snd_soc_codec *codec = rtd->socdev->codec; -+ -+ /* check the jack status at stream startup */ -+ ezx_ext_control(codec); -+ return 0; -+} -+ -+/* -+ * Called by ALSA when the hardware params are set by application. This -+ * function can also be called multiple times and can allocate buffers -+ * (using snd_pcm_lib_* ). It's non-atomic. -+ */ -+static int ezx_machine_hw_params(struct snd_pcm_substream *substream, -+ struct snd_pcm_hw_params *params) -+{ -+ struct snd_soc_pcm_runtime *rtd = substream->private_data; -+ struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai; -+ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai; -+ int ret; -+ -+ /* set codec DAI configuration */ -+ if (codec_dai->id == PCAP2_STEREO_DAI) -+ ret = codec_dai->dai_ops.set_fmt(codec_dai, SND_SOC_DAIFMT_DSP_B | -+ SND_SOC_DAIFMT_IB_NF | SND_SOC_DAIFMT_CBM_CFM); -+ else -+ ret = codec_dai->dai_ops.set_fmt(codec_dai, SND_SOC_DAIFMT_DSP_B | -+ SND_SOC_DAIFMT_IB_IF | SND_SOC_DAIFMT_CBM_CFM); -+ if(ret < 0) -+ return ret; -+ -+ /* Turn on clock output on CLK_PIO */ -+ OSCC |= 0x8; -+ -+ /* set clock source */ -+ ret = codec_dai->dai_ops.set_sysclk(codec_dai, PCAP2_CLK_AP, -+ 13000000, SND_SOC_CLOCK_IN); -+ if(ret < 0) -+ return ret; -+ -+ /* set cpu DAI configuration */ -+ ret = cpu_dai->dai_ops.set_fmt(cpu_dai, SND_SOC_DAIFMT_DSP_B | -+ SND_SOC_DAIFMT_IB_IF | SND_SOC_DAIFMT_CBM_CFM); -+ if (ret < 0) -+ return ret; -+ -+ ret = cpu_dai->dai_ops.set_tristate(cpu_dai, 0); -+ if (ret < 0) -+ return ret; -+ -+ ret = cpu_dai->dai_ops.set_sysclk(cpu_dai,PXA2XX_SSP_CLK_EXT, -+ 0, SND_SOC_CLOCK_IN); -+ if (ret < 0) -+ return ret; -+ -+ return 0; -+} -+ -+/* -+ * Free's resources allocated by hw_params, can be called multiple times -+ */ -+static int ezx_machine_hw_free(struct snd_pcm_substream *substream) -+{ -+ OSCC &= ~0x8; /* turn off clock output on CLK_PIO */ -+ -+ return 0; -+} -+ -+static int ezx_machine_prepare(struct snd_pcm_substream *substream) -+{ -+ struct snd_soc_pcm_runtime *rtd = substream->private_data; -+ struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai; -+ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai; -+ -+ if (codec_dai->id == PCAP2_STEREO_DAI) { -+ /* override pxa2xx-ssp sample size for stereo/network mode */ -+ SSCR0_P(cpu_dai->id+1) &= ~(SSCR0_DSS | SSCR0_EDSS); -+ SSCR0_P(cpu_dai->id+1) |= (SSCR0_EDSS | SSCR0_DataSize(16)); -+ } -+ return 0; -+} -+ -+/* machine Alsa PCM operations */ -+static struct snd_soc_ops ezx_ops = { -+ .startup = ezx_machine_startup, -+ .prepare = ezx_machine_prepare, -+ .hw_free = ezx_machine_hw_free, -+ .hw_params = ezx_machine_hw_params, -+}; -+ -+static int bp_hw_params(struct snd_pcm_substream *substream, -+ struct snd_pcm_hw_params *params) -+{ -+ struct snd_soc_pcm_runtime *rtd = substream->private_data; -+ struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai; -+// struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai; -+ int ret = 0; -+ /* set codec DAI configuration */ -+ ret = codec_dai->dai_ops.set_fmt(codec_dai, SND_SOC_DAIFMT_DSP_B | -+ SND_SOC_DAIFMT_IB_IF | SND_SOC_DAIFMT_CBM_CFM); -+ if(ret < 0) -+ return ret; -+ -+ /* set clock source */ -+ ret = codec_dai->dai_ops.set_sysclk(codec_dai, PCAP2_CLK_BP, -+ 13000000, SND_SOC_CLOCK_IN); -+ -+ return ret; -+} -+ -+ -+ -+/* machine dapm widgets */ -+static const struct snd_soc_dapm_widget ezx_dapm_widgets[] = { -+ SND_SOC_DAPM_HP("Headset", NULL), -+ SND_SOC_DAPM_SPK("Earpiece", NULL), -+ SND_SOC_DAPM_SPK("Loudspeaker", NULL), -+ SND_SOC_DAPM_MIC("Built-in Mic", NULL), -+ SND_SOC_DAPM_MIC("External Mic", NULL), -+}; -+ -+/* machine audio map (connections to the codec pins) */ -+static const char *audio_map[][3] = { -+ { "Headset", NULL, "AR" }, -+ { "Headset", NULL, "AL" }, -+ { "Earpiece", NULL, "A1" }, -+ { "Loudspeaker", NULL, "A2" }, -+ -+ { "Built-in Mic", NULL, "A5" }, -+ { "External Mic", NULL, "A3" }, -+ -+ {NULL, NULL, NULL}, -+}; -+ -+/* -+ * Initialise the machine audio subsystem. -+ */ -+static int ezx_machine_init(struct snd_soc_codec *codec) -+{ -+ int i; -+ /* mark unused codec pins as NC */ -+// snd_soc_dapm_set_endpoint(codec, "FIXME", 0); -+ control_codec = codec; -+ -+ /* Add ezx specific controls */ -+// for (i = 0; i < ARRAY_SIZE(ezx_controls); i++) { -+// if ((err = snd_ctl_add(codec->card, snd_soc_cnew(&ezx_controls[i], codec, NULL))) < 0) -+// return err; -+// } -+ -+ /* Add ezx specific widgets */ -+ for(i = 0; i < ARRAY_SIZE(ezx_dapm_widgets); i++) { -+ snd_soc_dapm_new_control(codec, &ezx_dapm_widgets[i]); -+ } -+ /* Set up ezx specific audio path interconnects */ -+ for(i = 0; audio_map[i][0] != NULL; i++) { -+ snd_soc_dapm_connect_input(codec, audio_map[i][0], audio_map[i][1], audio_map[i][2]); -+ } -+ -+ /* synchronise subsystem */ -+ snd_soc_dapm_sync_endpoints(codec); -+ return 0; -+} -+ -+static struct snd_soc_cpu_dai bp_dai = -+{ -+ .name = "Baseband", -+ .id = 0, -+ .type = SND_SOC_DAI_PCM, -+ .playback = { -+ .channels_min = 1, -+ .channels_max = 1, -+ .rates = SNDRV_PCM_RATE_8000, -+ .formats = SNDRV_PCM_FMTBIT_S16_LE, -+ }, -+ .capture = { -+ .channels_min = 1, -+ .channels_max = 1, -+ .rates = SNDRV_PCM_RATE_8000, -+ .formats = SNDRV_PCM_FMTBIT_S16_LE, -+ }, -+ .ops = { -+// .startup = bp_startup, -+// .shutdown = bp_shutdown, -+ .hw_params = bp_hw_params, -+// .hw_free = bp_hw_free, -+ }, -+}; -+ -+/* template digital audio interface glue - connects codec <--> CPU */ -+static struct snd_soc_dai_link ezx_dai[] = { -+{ -+ .name = "PCAP2 STEREO", -+ .stream_name = "stereo playback", -+ .cpu_dai = &pxa_ssp_dai[PXA2XX_DAI_SSP3], -+ .codec_dai = &pcap2_dai[PCAP2_STEREO_DAI], -+ .init = ezx_machine_init, -+ .ops = &ezx_ops, -+}, -+{ -+ .name = "PCAP2 MONO", -+ .stream_name = "mono playback", -+ .cpu_dai = &pxa_ssp_dai[PXA2XX_DAI_SSP3], -+ .codec_dai = &pcap2_dai[PCAP2_MONO_DAI], -+// .init = ezx_machine_init, /* the stereo call already registered our controls */ -+ .ops = &ezx_ops, -+}, -+{ -+ .name = "PCAP2 BP", -+ .stream_name = "BP Audio", -+ .cpu_dai = &bp_dai, -+ .codec_dai = &pcap2_dai[PCAP2_BP_DAI], -+}, -+}; -+ -+/* template audio machine driver */ -+static struct snd_soc_machine snd_soc_machine_ezx = { -+ .name = "Motorola EZX", -+// .probe -+// .remove -+// .suspend_pre -+// .resume_post -+ .dai_link = ezx_dai, -+ .num_links = ARRAY_SIZE(ezx_dai), -+}; -+ -+/* template audio subsystem */ -+static struct snd_soc_device ezx_snd_devdata = { -+ .machine = &snd_soc_machine_ezx, -+ .platform = &pxa2xx_soc_platform, -+ .codec_dev = &soc_codec_dev_pcap2, -+}; -+ -+static struct platform_device *ezx_snd_device; -+ -+static int __init ezx_init(void) -+{ -+ int ret; -+ ezx_snd_device = platform_device_alloc("soc-audio", -1); -+ if (!ezx_snd_device) -+ return -ENOMEM; -+ -+ platform_set_drvdata(ezx_snd_device, &ezx_snd_devdata); -+ ezx_snd_devdata.dev = &ezx_snd_device->dev; -+ ret = platform_device_add(ezx_snd_device); -+ -+ if (ret) -+ platform_device_put(ezx_snd_device); -+ /* configure gpio for ssp3 */ -+ pxa_gpio_mode(GPIO83_SFRM3_MD); /* SFRM */ -+ pxa_gpio_mode(GPIO81_STXD3_MD); /* TXD */ -+ pxa_gpio_mode(GPIO52_SCLK3_MD); /* SCLK */ -+ pxa_gpio_mode(GPIO89_SRXD3_MD); /* RXD */ -+ -+ /* configure gpio for ssp2 */ -+ pxa_gpio_mode(37 | GPIO_IN); /* SFRM */ -+ pxa_gpio_mode(38 | GPIO_IN); /* TXD */ -+ pxa_gpio_mode(22 | GPIO_IN); /* SCLK */ -+ pxa_gpio_mode(88 | GPIO_IN); /* RXD */ -+ -+ pxa_gpio_mode(GPIO_HW_ATTENUATE_A780 | GPIO_OUT); -+ pxa_gpio_set_value(GPIO_HW_ATTENUATE_A780, 1); -+ -+ /* request jack irq */ -+ request_irq(EZX_IRQ_HEADJACK, &jack_irq, IRQF_DISABLED, "headphone jack", NULL); -+ request_irq(EZX_IRQ_MIC, &jack_irq, IRQF_DISABLED, "mic jack", NULL); -+ -+ return ret; -+} -+ -+static void __exit ezx_exit(void) -+{ -+ free_irq(EZX_IRQ_HEADJACK, NULL); -+ free_irq(EZX_IRQ_MIC, NULL); -+ platform_device_unregister(ezx_snd_device); -+} -+ -+module_init(ezx_init); -+module_exit(ezx_exit); -+ -Index: linux-2.6.23/sound/soc/codecs/Makefile -=================================================================== ---- linux-2.6.23.orig/sound/soc/codecs/Makefile 2007-10-10 09:38:42.000000000 +0200 -+++ linux-2.6.23/sound/soc/codecs/Makefile 2007-10-22 22:30:09.000000000 +0200 -@@ -3,9 +3,11 @@ - snd-soc-wm8750-objs := wm8750.o - snd-soc-wm8753-objs := wm8753.o - snd-soc-wm9712-objs := wm9712.o -+snd-soc-pcap2-objs := pcap2.o - - obj-$(CONFIG_SND_SOC_AC97_CODEC) += snd-soc-ac97.o - obj-$(CONFIG_SND_SOC_WM8731) += snd-soc-wm8731.o - obj-$(CONFIG_SND_SOC_WM8750) += snd-soc-wm8750.o - obj-$(CONFIG_SND_SOC_WM8753) += snd-soc-wm8753.o - obj-$(CONFIG_SND_SOC_WM9712) += snd-soc-wm9712.o -+obj-$(CONFIG_SND_SOC_PCAP2) += snd-soc-pcap2.o -Index: linux-2.6.23/sound/soc/codecs/Kconfig -=================================================================== ---- linux-2.6.23.orig/sound/soc/codecs/Kconfig 2007-10-10 09:38:42.000000000 +0200 -+++ linux-2.6.23/sound/soc/codecs/Kconfig 2007-10-22 22:28:06.000000000 +0200 -@@ -17,3 +17,7 @@ - config SND_SOC_WM9712 - tristate - depends on SND_SOC -+ -+config SND_SOC_PCAP2 -+ tristate -+ depends on SND_SOC && EZX_PCAP -Index: linux-2.6.23/sound/soc/pxa/Makefile -=================================================================== ---- linux-2.6.23.orig/sound/soc/pxa/Makefile 2007-10-22 22:27:11.000000000 +0200 -+++ linux-2.6.23/sound/soc/pxa/Makefile 2007-10-22 22:28:06.000000000 +0200 -@@ -14,9 +14,10 @@ - snd-soc-poodle-objs := poodle.o - snd-soc-tosa-objs := tosa.o - snd-soc-spitz-objs := spitz.o -+snd-soc-ezx-objs := ezx.o - - obj-$(CONFIG_SND_PXA2XX_SOC_CORGI) += snd-soc-corgi.o - obj-$(CONFIG_SND_PXA2XX_SOC_POODLE) += snd-soc-poodle.o - obj-$(CONFIG_SND_PXA2XX_SOC_TOSA) += snd-soc-tosa.o - obj-$(CONFIG_SND_PXA2XX_SOC_SPITZ) += snd-soc-spitz.o -- -+obj-$(CONFIG_SND_PXA2XX_SOC_EZX) += snd-soc-ezx.o diff --git a/packages/linux/linux-ezx-2.6.23/patches/ezx-backlight.patch b/packages/linux/linux-ezx-2.6.23/patches/ezx-backlight.patch deleted file mode 100644 index b6bd9ff4f0..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/ezx-backlight.patch +++ /dev/null @@ -1,203 +0,0 @@ - -# -# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher -# - -Index: linux-2.6.23/drivers/video/backlight/Kconfig -=================================================================== ---- linux-2.6.23.orig/drivers/video/backlight/Kconfig 2007-10-10 09:38:43.000000000 +0200 -+++ linux-2.6.23/drivers/video/backlight/Kconfig 2007-10-22 22:25:23.000000000 +0200 -@@ -77,3 +77,12 @@ - help - If you have a Intel LE80578 (Carillo Ranch) say Y to enable the - backlight driver. -+ -+config BACKLIGHT_EZX -+ tristate "Motorola EXZ Backlight Driver (A780/E680/E680i)" -+ depends on BACKLIGHT_CLASS_DEVICE && PXA_EZX -+ default y -+ help -+ If you have a Motorola A780 or E680(i), say y to enable the -+ backlight driver. -+ -Index: linux-2.6.23/drivers/video/backlight/Makefile -=================================================================== ---- linux-2.6.23.orig/drivers/video/backlight/Makefile 2007-10-10 09:38:43.000000000 +0200 -+++ linux-2.6.23/drivers/video/backlight/Makefile 2007-10-22 22:25:50.000000000 +0200 -@@ -7,3 +7,4 @@ - obj-$(CONFIG_BACKLIGHT_LOCOMO) += locomolcd.o - obj-$(CONFIG_BACKLIGHT_PROGEAR) += progear_bl.o - obj-$(CONFIG_BACKLIGHT_CARILLO_RANCH) += cr_bllcd.o -+obj-$(CONFIG_BACKLIGHT_EZX) += ezx_bl.o -Index: linux-2.6.23/drivers/video/backlight/ezx_bl.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/drivers/video/backlight/ezx_bl.c 2007-10-22 22:25:23.000000000 +0200 -@@ -0,0 +1,142 @@ -+/* -+ * Backlight Driver for Motorola A780 and E680(i) GSM Phones. -+ * -+ * Copyright 2006 Vanille Media -+ * -+ * Author: Michael Lauer <mickey@Vanille.de> -+ * -+ * 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/kernel.h> -+#include <linux/init.h> -+#include <linux/platform_device.h> -+#include <linux/fb.h> -+#include <linux/backlight.h> -+ -+#include <asm/arch/pxa-regs.h> -+#include <asm/arch/ezx.h> -+ -+#define EZX_MIN_INTENSITY 0 -+#define EZX_MAX_INTENSITY 50 -+#define EZX_DEFAULT_INTENSITY 30 -+ -+static struct backlight_device *ezx_backlight_device; -+static int last_intensity; -+static int suspended; -+ -+static int ezxbl_send_intensity(struct backlight_device *bd) -+{ -+ int intensity = bd->props.brightness; -+ -+ if (suspended || bd->props.power != FB_BLANK_UNBLANK || -+ bd->props.fb_blank != FB_BLANK_UNBLANK) -+ intensity = 0; -+ -+ if ( !last_intensity && intensity ) { -+ PWM_CTRL0 = 2; /* pre-scaler */ -+ PWM_PWDUTY0 = intensity; /* duty cycle */ -+ PWM_PERVAL0 = 49; /* period */ -+ pxa_gpio_mode(GPIO16_PWM0_MD); /* set GPIO16 as alternate function + output */ -+ pxa_set_cken(CKEN_PWM0, 1); /* clock enable */ -+ } -+ else if ( last_intensity && !intensity ) { -+ PWM_PWDUTY0 = 0; -+ GAFR0_U &= 0xFFFFFFFC; /* ??? */ -+ pxa_set_cken(CKEN_PWM0, 0); /* clock disable */ -+ pxa_gpio_mode(GPIO16_PWM0); /* set GPIO16 as input */ -+ } else if ( last_intensity && intensity ) { -+ PWM_PWDUTY0 = intensity; /* duty cycle */ -+ } -+ last_intensity = intensity; -+ return 0; -+} -+ -+static int ezxbl_get_intensity(struct backlight_device *bd) -+{ -+ return last_intensity; -+} -+ -+static int ezxbl_set_intensity(struct backlight_device *bd) -+{ -+ return ezxbl_send_intensity(ezx_backlight_device); -+} -+ -+#ifdef CONFIG_PM -+static int ezxbl_suspend(struct platform_device *pdev, pm_message_t state) -+{ -+ suspended = 1; -+ ezxbl_set_intensity(ezx_backlight_device); -+ return 0; -+} -+ -+static int ezxbl_resume(struct platform_device *pdev) -+{ -+ suspended = 0; -+ ezxbl_set_intensity(ezx_backlight_device); -+ return 0; -+} -+#else -+#define ezxbl_suspend NULL -+#define ezxbl_resume NULL -+#endif -+ -+static struct backlight_ops ezxbl_ops = { -+ .get_brightness = ezxbl_get_intensity, -+ .update_status = ezxbl_set_intensity, -+}; -+ -+static int __init ezxbl_probe(struct platform_device *pdev) -+{ -+ ezx_backlight_device = backlight_device_register ("ezx-bl", -+ &pdev->dev, NULL, &ezxbl_ops); -+ if (IS_ERR (ezx_backlight_device)) -+ return PTR_ERR (ezx_backlight_device); -+ -+ platform_set_drvdata(pdev, ezx_backlight_device); -+ -+ ezx_backlight_device->props.power = FB_BLANK_UNBLANK; -+ ezx_backlight_device->props.max_brightness = EZX_MAX_INTENSITY; -+ ezx_backlight_device->props.brightness = EZX_DEFAULT_INTENSITY; -+ ezxbl_set_intensity(ezx_backlight_device); -+ backlight_update_status(ezx_backlight_device); -+ -+ return 0; -+} -+ -+static int ezxbl_remove(struct platform_device *pdev) -+{ -+ backlight_device_unregister(ezx_backlight_device); -+ return 0; -+} -+ -+static struct platform_driver ezxbl_driver = { -+ .probe = ezxbl_probe, -+ .remove = ezxbl_remove, -+ .suspend = ezxbl_suspend, -+ .resume = ezxbl_resume, -+ .driver = { -+ .name = "ezx-bl", -+ }, -+}; -+ -+static int __init ezxbl_init(void) -+{ -+ return platform_driver_register(&ezxbl_driver); -+} -+ -+static void __exit ezxbl_exit(void) -+{ -+ platform_driver_unregister(&ezxbl_driver); -+} -+ -+module_init(ezxbl_init); -+module_exit(ezxbl_exit); -+ -+MODULE_AUTHOR("Michael Lauer <mickey@Vanille.de>"); -+MODULE_DESCRIPTION("Backlight Driver for Motorola A780|E680(i)"); -+MODULE_LICENSE("GPL"); -Index: linux-2.6.23/arch/arm/mach-pxa/ezx.c -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx.c 2007-10-22 22:03:08.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx.c 2007-10-22 22:25:23.000000000 +0200 -@@ -65,6 +65,12 @@ - #endif - EXPORT_SYMBOL(ezx_backlight_power); - -+/* EZX LCD Backlight */ -+static struct platform_device ezxbacklight_device = { -+ .name = "ezx-bl", -+ .id = -1, -+}; -+ - /* OHCI Controller */ - static int ezx_ohci_init(struct device *dev) - { -@@ -121,6 +127,7 @@ - - static struct platform_device *devices[] __initdata = { - &ezxbp_device, -+ &ezxbacklight_device, - }; - - /* PM */ diff --git a/packages/linux/linux-ezx-2.6.23/patches/ezx-bp.patch b/packages/linux/linux-ezx-2.6.23/patches/ezx-bp.patch deleted file mode 100644 index a20adc464c..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/ezx-bp.patch +++ /dev/null @@ -1,340 +0,0 @@ -Index: linux-2.6.23/arch/arm/mach-pxa/ezx.c -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx.c 2007-10-23 12:03:55.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx.c 2007-10-23 13:21:24.000000000 +0200 -@@ -86,8 +86,40 @@ - .init = ezx_ohci_init, - }; - -+/* BP */ -+static struct resource ezxbp_resources[] = { -+ [0] = { -+ .start = IRQ_GPIO(GPIO_BP_RDY), -+ .end = IRQ_GPIO(GPIO_BP_RDY), -+ .flags = IORESOURCE_IRQ, -+ }, -+ [1] = { -+ .start = IRQ_GPIO(GPIO_BB_WDI2), -+ .end = IRQ_GPIO(GPIO_BB_WDI2), -+ .flags = IORESOURCE_IRQ, -+ }, -+ [2] = { -+ .start = IRQ_GPIO(GPIO_BB_WDI), -+ .end = IRQ_GPIO(GPIO_BB_WDI), -+ .flags = IORESOURCE_IRQ, -+ }, -+}; -+ -+static struct platform_device ezxbp_device = { -+ .name = "ezx-bp", -+ .dev = { -+ //.parent = -+ //.platform_data = -+ }, -+ .id = -1, -+ .num_resources = ARRAY_SIZE(ezxbp_resources), -+ .resource = ezxbp_resources, -+}; -+ -+ - - static struct platform_device *devices[] __initdata = { -+ &ezxbp_device, - }; - - static int __init ezx_init(void) -Index: linux-2.6.23/arch/arm/mach-pxa/Kconfig -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/Kconfig 2007-10-23 12:03:55.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/Kconfig 2007-10-23 13:21:23.000000000 +0200 -@@ -106,6 +106,9 @@ - - endchoice - -+config EZX_BP -+ bool "BP Control code for EZX Platform" -+ - endif - - endmenu -Index: linux-2.6.23/arch/arm/mach-pxa/ezx-bp.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx-bp.c 2007-10-23 13:22:01.000000000 +0200 -@@ -0,0 +1,264 @@ -+/* -+ * BP handshake code for Motorola EZX phones -+ * -+ * Copyright (c) 2007 Daniel Ribeiro <drwyrm@gmail.com> -+ * -+ * Based on Motorola's a780.c Copyright (c) 2003-2005 Motorola -+ * -+ * 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/kernel.h> -+#include <linux/interrupt.h> -+#include <linux/module.h> -+#include <linux/platform_device.h> -+ -+#include <asm/mach/irq.h> -+#include <asm/arch/hardware.h> -+#include <asm/arch/pxa-regs.h> -+ -+#include <asm/arch/ezx.h> -+ -+/* BP Handshake */ -+#define FIRST_STEP 2 -+#define LAST_STEP 3 -+#define BP_RDY_TIMEOUT 0x000c0000 -+ -+#if 1 -+#define DEBUGP(x, args ...) printk(x, ##args) -+#else -+#define DEBUGP(x, args ...) -+#endif -+ -+extern void usb_send_readurb(void); -+ -+struct bp { -+ int irq_wdi; -+ int irq_wdi2; -+ int irq_rdy; -+}; -+ -+/* check power down condition */ -+static inline void check_power_off(void) -+{ -+ if (pxa_gpio_get_value(GPIO_BB_WDI2) == 0) { -+ DEBUGP("BP request poweroff!\n"); -+ /* -+ * It is correct to power off here, the following line is -+ * commented out because e680 lowers WDI2 when BP is in -+ * flash mode, otherwise WDI2 is used to detect low -+ * battery. You can safely uncomment this line if you are -+ * using this kernel with BP in normal mode. -+ */ -+#ifndef CONFIG_PXA_EZX_E680 -+ pm_power_off(); -+#endif -+ } -+} -+ -+static int step = FIRST_STEP; -+ -+inline int bp_handshake_passed(void) -+{ -+ return (step > LAST_STEP); -+} -+EXPORT_SYMBOL(bp_handshake_passed); -+ -+void handshake(void) -+{ -+ /* step 1: check MCU_INT_SW or BP_RDY is low (now it is checked in apboot) */ -+ DEBUGP("bp handshake entered!\n"); -+ if (step == 1) { -+ int timeout = BP_RDY_TIMEOUT; -+ -+ /* config MCU_INT_SW, BP_RDY as input */ -+ pxa_gpio_mode(GPIO_MCU_INT_SW | GPIO_IN); -+ pxa_gpio_mode(GPIO_BP_RDY | GPIO_IN); -+ -+ while (timeout--) { -+ if (pxa_gpio_get_value(GPIO_MCU_INT_SW) == 0 -+ || pxa_gpio_get_value(GPIO_BP_RDY) == 0) { -+ step ++; -+ break; -+ } -+ -+ check_power_off(); -+ } -+ DEBUGP("ezx-bp: handshake step 1\n"); -+ } -+ -+ /* step 2: wait BP_RDY is low */ -+ if (step == 2) { -+ if (pxa_gpio_get_value(GPIO_BP_RDY) == 0) { -+ /* config MCU_INT_SW as output */ -+ pxa_gpio_mode(GPIO_MCU_INT_SW | GPIO_OUT); -+ pxa_gpio_set_value(GPIO_MCU_INT_SW, 0); -+ -+ step ++; -+ DEBUGP("ezx-bp: handshake step 2\n"); -+ } -+ } -+ -+ /* step 3: wait BP_RDY is high */ -+ else if (step == 3) { -+ if (pxa_gpio_get_value(GPIO_BP_RDY)) { -+ step ++; -+ //FIXME delay_bklight(); -+ pxa_gpio_set_value(GPIO_MCU_INT_SW, 1); -+ printk(KERN_NOTICE "ezx-bp: handshake passed\n"); -+ } -+ } -+} -+ -+irqreturn_t bp_wdi_handler(int irq, void *dev_id) -+{ -+ DEBUGP("BP Lowered WDI line. This is not good :(\n"); -+ /* -+ * this means that BP is not responsive. -+ * we could try to reset BP and then handshake again -+ * but i doubt its possible to bring it up again. -+ */ -+ return IRQ_HANDLED; -+} -+ -+static irqreturn_t bp_rdy_handler(int irq, void *dev_id) -+{ -+ struct bp *bp = dev_id; -+ DEBUGP("BP rdy irq\n"); -+ if (!bp_handshake_passed()) { -+ handshake(); -+ if (bp_handshake_passed()) { -+ /* FIXME: (test) try to not disable irq_wdi2 and drain battery */ -+ disable_irq(bp->irq_wdi2); -+ -+ /* set bp_rdy handle for usb ipc */ -+ set_irq_type(bp->irq_rdy, IRQT_FALLING); -+ } -+ } -+#ifdef CONFIG_TS0710_MUX_USB -+ else usb_send_readurb(); -+#endif -+ return IRQ_HANDLED; -+} -+ -+/* BP request for poweroff */ -+static irqreturn_t bp_wdi2_handler(int irq, void *dev_id) -+{ -+ DEBUGP("BP request poweroff!\n"); -+ /* same case as check_power_off() */ -+#ifndef CONFIG_PXA_EZX_E680 -+ pm_power_off(); -+#endif -+ return IRQ_HANDLED; -+} -+ -+static int __init ezxbp_probe(struct platform_device *dev) -+{ -+ int ret; -+ struct bp *bp; -+ -+ bp = kzalloc(sizeof(*bp), GFP_KERNEL); -+ if (!bp) -+ return -ENOMEM; -+ -+ bp->irq_rdy = platform_get_irq(dev, 0); -+ if(bp->irq_rdy < 0) { -+ ret = bp->irq_rdy; -+ goto fail; -+ } -+ -+ bp->irq_wdi2 = platform_get_irq(dev, 1); -+ if(bp->irq_wdi2 < 0) { -+ ret = bp->irq_wdi2; -+ goto fail; -+ } -+ -+ bp->irq_wdi = platform_get_irq(dev, 2); -+ if(bp->irq_wdi < 0) { -+ ret = bp->irq_wdi; -+ goto fail; -+ } -+ -+ set_irq_type(bp->irq_wdi, IRQT_FALLING); -+ request_irq(bp->irq_wdi, bp_wdi_handler, IRQF_DISABLED, -+ "bp wdi", bp); -+ -+ set_irq_type(bp->irq_rdy, IRQT_BOTHEDGE); -+ request_irq(bp->irq_rdy, bp_rdy_handler, IRQF_DISABLED, -+ "bp rdy", bp); -+ -+ set_irq_type(bp->irq_wdi2, IRQT_FALLING); -+ request_irq(bp->irq_wdi2, bp_wdi2_handler, IRQF_DISABLED, -+ "bp wdi2", bp); -+ -+ /* turn on BP */ -+ pxa_gpio_mode(GPIO_BB_RESET|GPIO_OUT); -+ pxa_gpio_set_value(GPIO_BB_RESET, 1); -+ -+ check_power_off(); -+ handshake(); -+ -+ return 0; -+fail: -+ kfree(bp); -+ return ret; -+} -+ -+static int ezxbp_remove(struct platform_device *dev) -+{ -+ struct bp *bp = platform_get_drvdata(dev); -+ -+ free_irq(bp->irq_wdi, bp); -+ free_irq(bp->irq_wdi2, bp); -+ free_irq(bp->irq_rdy, bp); -+ kfree(bp); -+ -+ return 0; -+} -+ -+static int ezxbp_suspend(struct platform_device *dev, pm_message_t state) -+{ -+ DEBUGP("bp suspend!\n"); -+// pxa_gpio_set_value(GPIO_MCU_INT_SW, 0); -+ return 0; -+} -+ -+static int ezxbp_resume(struct platform_device *dev) -+{ -+ DEBUGP("bp resume!\n"); -+// pxa_gpio_set_value(GPIO_MCU_INT_SW, 1); -+ return 0; -+} -+static struct platform_driver ezxbp_driver = { -+ .probe = ezxbp_probe, -+ .remove = ezxbp_remove, -+#warning FIXME: missing suspend/resume support -+ .suspend = ezxbp_suspend, -+ .resume = ezxbp_resume, -+ .driver = { -+ .name = "ezx-bp", -+ .owner = THIS_MODULE, -+ }, -+}; -+ -+int __init ezxbp_init(void) -+{ -+ return platform_driver_register(&ezxbp_driver); -+} -+ -+void ezxbp_fini(void) -+{ -+ return platform_driver_unregister(&ezxbp_driver); -+} -+ -+module_init(ezxbp_init); -+module_exit(ezxbp_fini); -+ -+MODULE_DESCRIPTION("Motorola BP Control driver"); -+MODULE_AUTHOR("Daniel Ribeiro <drwyrm@gmail.com>"); -+MODULE_LICENSE("GPL"); -+ -Index: linux-2.6.23/arch/arm/mach-pxa/Makefile -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/Makefile 2007-10-23 12:03:55.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/Makefile 2007-10-23 13:21:23.000000000 +0200 -@@ -25,6 +25,7 @@ - obj-$(CONFIG_PXA_EZX_E2) += ezx-e2.o - obj-$(CONFIG_PXA_EZX_A1200) += ezx-a1200.o - obj-$(CONFIG_PXA_EZX_E6) += ezx-e6.o -+obj-$(CONFIG_EZX_BP) += ezx-bp.o - - # Support for blinky lights - led-y := leds.o diff --git a/packages/linux/linux-ezx-2.6.23/patches/ezx-core.patch b/packages/linux/linux-ezx-2.6.23/patches/ezx-core.patch deleted file mode 100644 index af31bc5620..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/ezx-core.patch +++ /dev/null @@ -1,1016 +0,0 @@ -Index: linux-2.6.23/arch/arm/boot/compressed/head-xscale.S -=================================================================== ---- linux-2.6.23.orig/arch/arm/boot/compressed/head-xscale.S 2007-10-09 22:31:38.000000000 +0200 -+++ linux-2.6.23/arch/arm/boot/compressed/head-xscale.S 2007-10-24 13:03:04.000000000 +0200 -@@ -48,3 +48,6 @@ - str r1, [r0, #0x18] - #endif - -+#ifdef CONFIG_ARCH_EZX -+ mov r7, #MACH_TYPE_EZX -+#endif -Index: linux-2.6.23/arch/arm/mach-pxa/Kconfig -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/Kconfig 2007-10-09 22:31:38.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/Kconfig 2007-10-24 18:56:36.000000000 +0200 -@@ -41,6 +41,10 @@ - bool "CompuLab EM-x270 platform" - select PXA27x - -+config PXA_EZX -+ bool "Motorola EZX Platform" -+ select PXA_SSP -+ - endchoice - - if PXA_SHARPSL -@@ -75,6 +79,35 @@ - - endif - -+if PXA_EZX -+ -+choice -+ prompt "Select target EZX device" -+ -+config PXA_EZX_E680 -+ bool "Motorola E680 GSM Phone" -+ select PXA27x -+ -+config PXA_EZX_A780 -+ bool "Motorola A780 GSM Phone" -+ select PXA27x -+ -+config PXA_EZX_E2 -+ bool "Motorola E2 GSM Phone" -+ select PXA27x -+ -+config PXA_EZX_A1200 -+ bool "Motorola A1200 GSM Phone" -+ select PXA27x -+ -+config PXA_EZX_E6 -+ bool "Motorola E6 GSM Phone" -+ select PXA27x -+ -+endchoice -+ -+endif -+ - endmenu - - config MACH_POODLE -@@ -148,4 +181,5 @@ - tristate - help - Enable support for PXA2xx SSP ports -+ - endif -Index: linux-2.6.23/arch/arm/mach-pxa/Makefile -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/Makefile 2007-10-09 22:31:38.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/Makefile 2007-10-24 18:56:36.000000000 +0200 -@@ -19,6 +19,12 @@ - obj-$(CONFIG_MACH_POODLE) += poodle.o corgi_ssp.o - obj-$(CONFIG_MACH_TOSA) += tosa.o - obj-$(CONFIG_MACH_EM_X270) += em-x270.o -+obj-$(CONFIG_PXA_EZX) += ezx.o -+obj-$(CONFIG_PXA_EZX_A780) += ezx-a780.o -+obj-$(CONFIG_PXA_EZX_E680) += ezx-e680.o -+obj-$(CONFIG_PXA_EZX_E2) += ezx-e2.o -+obj-$(CONFIG_PXA_EZX_A1200) += ezx-a1200.o -+obj-$(CONFIG_PXA_EZX_E6) += ezx-e6.o - - # Support for blinky lights - led-y := leds.o -Index: linux-2.6.23/arch/arm/mach-pxa/ezx.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx.c 2007-10-24 18:56:36.000000000 +0200 -@@ -0,0 +1,118 @@ -+/* -+ * ezx.c - Common code for EZX platform. -+ * -+ * Copyright (c) 2005-2007 OpenEZX Team (www.openezx.org) -+ * -+ * 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/kernel.h> -+#include <linux/init.h> -+#include <linux/platform_device.h> -+#include <linux/fb.h> -+#include <linux/delay.h> -+ -+#include <asm/arch/pxafb.h> -+#include <asm/arch/pxa-regs.h> -+#include <asm/arch/ohci.h> -+#include <asm/arch/ezx.h> -+ -+#include "generic.h" -+ -+/* EZX PXA Framebuffer */ -+void ezx_lcd_power(int on, struct fb_var_screeninfo *var) -+{ -+ if (on) { -+ mdelay(1); -+ GPSR3 = 0x00100000; -+ mdelay(10); -+ GPCR3 = 0x00100000; -+ GPDR3 |= 0x00100000; -+ } else { -+ GPSR3 = 0x00100000; -+ PGSR3 |= 0x00100000; -+ mdelay(41); -+ LCCR0 &= ~LCCR0_LDM; /* disable lcd disable done interrupt */ -+ LCCR0 |= LCCR0_DIS; /* normal disable lcd */ -+ mdelay(18); -+ } -+} -+EXPORT_SYMBOL(ezx_lcd_power); -+ -+/* failsafe if we are not using the backlight platform driver */ -+#ifndef CONFIG_BACKLIGHT_EZX -+void ezx_backlight_power(int on) -+{ -+ if (on) { -+ pxa_gpio_mode(GPIO16_PWM0_MD); -+ pxa_set_cken(CKEN_PWM0, 1); -+ PWM_CTRL0 = 0; -+ PWM_PWDUTY0 = 0x3ff; -+ PWM_PERVAL0 = 0x3ff; -+ } else { -+ PWM_CTRL0 = 0; -+ PWM_PWDUTY0 = 0x0; -+ PWM_PERVAL0 = 0x3FF; -+ pxa_set_cken(CKEN_PWM0, 0); -+ } -+} -+#else -+void ezx_backlight_power(int on){} -+#endif -+EXPORT_SYMBOL(ezx_backlight_power); -+ -+/* OHCI Controller */ -+static int ezx_ohci_init(struct device *dev) -+{ -+ /* for A780 support (connected with Neptune) */ -+ pxa_gpio_mode(GPIO30_USB_P3_2); /* GPIO30 - USB_P3_2/ICL_TXENB */ -+ pxa_gpio_mode(GPIO31_USB_P3_6); /* GPIO31 - USB_P3_6/ICL_VPOUT */ -+ pxa_gpio_mode(GPIO90_USB_P3_5); /* GPIO90 - USB_P3_5/ICL_VPIN */ -+ pxa_gpio_mode(GPIO91_USB_P3_1); /* GPIO91 - USB_P3_1/ICL_XRXD */ -+ pxa_gpio_mode(GPIO56_USB_P3_4); /* GPIO56 - USB_P3_4/ICL_VMOUT */ -+ pxa_gpio_mode(GPIO113_USB_P3_3);/* GPIO113 - USB_P3_3/ICL_VMIN */ -+ UP3OCR = 0x00000002; -+ -+ UHCHR = UHCHR & ~(UHCHR_SSEP2 | UHCHR_SSEP3 | UHCHR_SSE); -+ -+ return 0; -+} -+ -+static struct pxaohci_platform_data ezx_ohci_platform_data = { -+ .port_mode = PMM_NPS_MODE, -+ .init = ezx_ohci_init, -+}; -+ -+ -+static struct platform_device *devices[] __initdata = { -+}; -+ -+static int __init ezx_init(void) -+{ -+ CKEN = (1 << CKEN_OSTIMER) | (1 << CKEN_MEMC); -+ -+ pxa_gpio_mode(GPIO_ICL_FFRXD_MD); -+ pxa_gpio_mode(GPIO_ICL_FFTXD_MD); -+ pxa_gpio_mode(GPIO_ICL_FFCTS_MD); -+ pxa_gpio_mode(GPIO_ICL_FFRTS_MD); -+ -+ pxa_gpio_mode(GPIO42_BTRXD_MD); -+ pxa_gpio_mode(GPIO43_BTTXD_MD); -+ pxa_gpio_mode(GPIO44_BTCTS_MD); -+ pxa_gpio_mode(GPIO45_BTRTS_MD); -+ -+ /* Standard UART */ -+ pxa_gpio_mode(GPIO46_STRXD_MD); -+ pxa_gpio_mode(GPIO47_STTXD_MD); -+ -+ pxa_set_ohci_info(&ezx_ohci_platform_data); -+ -+ platform_add_devices(devices, ARRAY_SIZE(devices)); -+ -+ return 0; -+} -+ -+subsys_initcall(ezx_init); -Index: linux-2.6.23/include/asm-arm/arch-pxa/ezx.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/include/asm-arm/arch-pxa/ezx.h 2007-10-24 13:03:05.000000000 +0200 -@@ -0,0 +1,225 @@ -+/* -+ * linux/include/asm-arm/arch-pxa/ezx.h -+ * -+ * Specific macro defines for Motorola Ezx Development Platform -+ * -+ * Author: Zhuang Xiaofan -+ * Created: Nov 25, 2003 -+ * Copyright: Motorola Inc. -+ * -+ * 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. -+ */ -+ -+/* support E680 p3 and ealier PCB */ -+//#define E680_P3_AND_EARLY -+ -+#define GPIO_is_high(x) (GPLR(x) & GPIO_bit(x)) -+#define set_GPIO(x) (GPSR(x) = GPIO_bit(x)) -+#define clr_GPIO(x) (GPCR(x) = GPIO_bit(x)) -+ -+/* -+ * Flags in memory for sleep use -+ */ -+#define FLAG_ADDR PHYS_OFFSET -+#define RESUME_ADDR (PHYS_OFFSET + 4) -+#define BPSIG_ADDR (PHYS_OFFSET + 8) -+ -+#define USER_OFF_FLAG 0x5a5a5a5a -+#define SLEEP_FLAG 0x6b6b6b6b -+#define OFF_FLAG 0x7c7c7c7c -+#define REFLASH_FLAG 0x0C1D2E3F -+#define PASS_THRU_FLAG 0x12345678 -+ -+#define WDI_FLAG 0xbb00dead -+#define NO_FLAG 0xaa00dead -+ -+/* -+ * GPIO control pin, have to change when hardware lock down -+ */ -+ -+#ifdef E680_P3_AND_EARLY -+ -+/* shakehand with BP's PIN */ -+#define GPIO_BP_RDY 0 /* BP_RDY */ -+#define GPIO_BB_WDI 13 /* BB_WDI */ -+#define GPIO_BB_WDI2 3 /* BB_WDI2 */ -+#define GPIO_BB_RESET 57 /* BB_RESET */ -+#define GPIO_MCU_INT_SW 115 /* MCU_INT_SW */ -+#define GPIO_TC_MM_EN 89 /* TC_MM_EN */ -+ -+/* control PCAP direct PIN */ -+#define GPIO_WDI_AP 4 /* WDI_AP */ -+#define GPIO_SYS_RESTART 55 /* restart PCAP power */ -+#define GPIO_AP_STANDBY 28 /* make pcap enter standby mode */ -+ -+/* communicate with PCAP's PIN */ -+#define GPIO_PCAP_SEC_INT 1 /* PCAP interrupt PIN to AP */ -+#define GPIO_SPI_CLK 23 /* PCAP SPI port clock */ -+#define GPIO_SPI_CE 24 /* PCAP SPI port SSPFRM */ -+#define GPIO_SPI_MOSI 25 /* PCAP SPI port SSPTXD */ -+#define GPIO_SPI_MISO 26 /* PCAP SPI port SSPRXD */ -+ -+/* blue tooth control PIN */ -+#define GPIO_BT_WAKEUP 2 /* AP wake up bluetooth module */ -+#define GPIO_BT_HOSTWAKE 14 /* bluetooth module wake up Ap module */ -+#define GPIO_BT_RESET 56 /* AP reset bluetooth module */ -+ -+/* control LCD high - OFF low -- ON */ -+#define GPIO_LCD_OFF 116 /* control LCD */ -+ -+/* FFUART PIN */ -+#define GPIO_ICL_FFRXD_MD (34 | GPIO_ALT_FN_1_IN) -+#define GPIO_ICL_FFCTS_MD (35 | GPIO_ALT_FN_1_IN) -+#define GPIO_ICL_FFTXD_MD (39 | GPIO_ALT_FN_2_OUT) -+#define GPIO_ICL_FFRTS_MD (41 | GPIO_ALT_FN_2_OUT) -+ -+#elif defined(A780_P1_AND_EARLY) -+ -+/* shakehand with BP's PIN */ -+#define GPIO_BP_RDY 0 /* BP_RDY */ -+#define GPIO_BB_WDI 13 /* BB_WDI */ -+#define GPIO_BB_WDI2 3 /* BB_WDI2 */ -+#define GPIO_BB_RESET 82 /* BB_RESET */ -+#define GPIO_MCU_INT_SW 57 /* MCU_INT_SW */ -+#define GPIO_TC_MM_EN 89 /* TC_MM_EN */ -+ -+/* control PCAP direct PIN */ -+#define GPIO_WDI_AP 4 /* WDI_AP */ -+#define GPIO_SYS_RESTART 55 /* restart PCAP power */ -+#define GPIO_AP_STANDBY 28 /* make pcap enter standby mode */ -+ -+/* communicate with PCAP's PIN */ -+#define GPIO_PCAP_SEC_INT 1 /* PCAP interrupt PIN to AP */ -+#define GPIO_SPI_CLK 29 /* PCAP SPI port clock */ -+#define GPIO_SPI_CE 24 /* PCAP SPI port SSPFRM */ -+#define GPIO_SPI_MOSI 25 /* PCAP SPI port SSPTXD */ -+#define GPIO_SPI_MISO 26 /* PCAP SPI port SSPRXD */ -+ -+/* blue tooth control PIN */ -+#define GPIO_BT_WAKEUP 2 /* AP wake up bluetooth module */ -+#define GPIO_BT_HOSTWAKE 14 /* bluetooth module wake up Ap module */ -+#define GPIO_BT_RESET 56 /* AP reset bluetooth module */ -+ -+/* control LCD high - OFF low -- ON */ -+#define GPIO_LCD_OFF 116 /* control LCD */ -+ -+/* FFUART PIN */ -+#define GPIO_ICL_FFRXD_MD (53 | GPIO_ALT_FN_1_IN) -+#define GPIO_ICL_FFCTS_MD (35 | GPIO_ALT_FN_1_IN) -+#define GPIO_ICL_FFTXD_MD (39 | GPIO_ALT_FN_2_OUT) -+#define GPIO_ICL_FFRTS_MD (41 | GPIO_ALT_FN_2_OUT) -+ -+#else -+ -+/* shakehand with BP's PIN */ -+#define GPIO_BP_RDY 0 /* BP_RDY */ -+#define GPIO_BB_WDI 13 /* BB_WDI */ -+#define GPIO_BB_WDI2 3 /* BB_WDI2 */ -+#define GPIO_BB_RESET 82 /* BB_RESET */ -+#define GPIO_MCU_INT_SW 57 /* MCU_INT_SW */ -+#define GPIO_TC_MM_EN 99 /* TC_MM_EN */ -+ -+/* control PCAP direct PIN */ -+#define GPIO_WDI_AP 4 /* WDI_AP */ -+#define GPIO_SYS_RESTART 55 /* restart PCAP power */ -+//#define GPIO_AP_STANDBY 28 /* make pcap enter standby mode */ -+ -+/* communicate with PCAP's PIN */ -+#define GPIO_PCAP_SEC_INT 1 /* PCAP interrupt PIN to AP */ -+#define GPIO_SPI_CLK 29 /* PCAP SPI port clock */ -+#define GPIO_SPI_CE 24 /* PCAP SPI port SSPFRM */ -+#define GPIO_SPI_MOSI 25 /* PCAP SPI port SSPTXD */ -+#define GPIO_SPI_MISO 26 /* PCAP SPI port SSPRXD */ -+ -+/* blue tooth control PIN */ -+#define GPIO_BT_WAKEUP 28 /* AP wake up bluetooth module */ -+#define GPIO_BT_HOSTWAKE 14 /* AP wake up bluetooth module */ -+#define GPIO_BT_RESET 48 /* AP reset bluetooth module */ -+ -+/* control LCD high - OFF low -- ON */ -+#define GPIO_LCD_OFF 116 /* control LCD */ -+ -+/* FFUART PIN */ -+#define GPIO_ICL_FFRXD_MD (53 | GPIO_ALT_FN_1_IN) -+#define GPIO_ICL_FFCTS_MD (35 | GPIO_ALT_FN_1_IN) -+#define GPIO_ICL_FFTXD_MD (39 | GPIO_ALT_FN_2_OUT) -+#define GPIO_ICL_FFRTS_MD (41 | GPIO_ALT_FN_2_OUT) -+ -+#endif -+/* -+ * ezx platform, wake up source edge detect bit -+ */ -+#define PEDR_INT_SEC 1 -+ -+#define GPIO_FLIP_PIN 12 -+/*E680 screen lock button*/ -+ -+#define GPIO_LOCK_SCREEN_PIN GPIO_FLIP_PIN -+ -+/* MMC interface */ -+#define GPIO_MMC_DETECT 11 -+#define GPIO_MMC_CLK 32 -+#define GPIO_MMC_DATA0 92 -+#define GPIO_MMC_WP 107 -+#define GPIO_MMC_DATA1 109 -+#define GPIO_MMC_DATA2 110 -+#define GPIO_MMC_DATA3 111 -+#define GPIO_MMC_CMD 112 -+ -+/* interface function */ -+#define GPIO_MMC_CLK_MD (GPIO_MMC_CLK | GPIO_ALT_FN_2_OUT) -+#define GPIO_MMC_DATA0_MD (GPIO_MMC_DATA0 | GPIO_ALT_FN_1_IN | GPIO_ALT_FN_1_OUT) -+#define GPIO_MMC_DATA1_MD (GPIO_MMC_DATA1 | GPIO_ALT_FN_1_IN | GPIO_ALT_FN_1_OUT) -+#define GPIO_MMC_DATA2_MD (GPIO_MMC_DATA2 | GPIO_ALT_FN_1_IN | GPIO_ALT_FN_1_OUT) -+#define GPIO_MMC_DATA3_MD (GPIO_MMC_DATA3 | GPIO_ALT_FN_1_IN | GPIO_ALT_FN_1_OUT) -+ -+#define GPIO_MMC_CMD_MD (GPIO_MMC_CMD | GPIO_ALT_FN_1_IN | GPIO_ALT_FN_1_OUT) -+ -+/* EMU GPIO 119 ---MUX2 120 --- MUX1 */ -+#define GPIO_EMU_MUX1 120 -+#define GPIO_EMU_MUX2 119 -+#define GPIO_SNP_INT_CTL 86 -+#define GPIO_SNP_INT_IN 87 -+ -+ -+/* audio related pins */ -+#define AP_13MHZ_OUTPUT_PIN 9 -+ -+#ifdef CONFIG_ARCH_EZX_E680 -+#define GPIO_VA_SEL_BUL 79 -+#define GPIO_FLT_SEL_BUL 80 /* out filter select pin */ -+#define GPIO_MIDI_RESET 78 /* GPIO used by MIDI chipset */ -+#define GPIO_MIDI_CS 33 -+#define GPIO_MIDI_IRQ 15 -+#define GPIO_MIDI_NPWE 49 -+#define GPIO_MIDI_RDY 18 -+#endif -+ -+#ifdef CONFIG_ARCH_EZX_A780 -+#define GPIO_HW_ATTENUATE_A780 96 /* hw noise attenuation be used or bypassed, for receiver or louderspeaker mode */ -+#endif -+ -+ -+/* bp status pin */ -+#define GPIO_BP_STATE 41 -+ -+/* define usb related pin */ -+#define GPIO34_TXENB 34 -+#define GPIO35_XRXD 35 -+#define GPIO36_VMOUT 36 -+#define GPIO39_VPOUT 39 -+#define GPIO40_VPIN 40 -+#define GPIO53_VMIN 53 -+ -+/* USB client 6 pin defination */ -+#define GPIO34_TXENB_MD (GPIO34_TXENB | GPIO_ALT_FN_1_OUT) -+#define GPIO35_XRXD_MD (GPIO35_XRXD | GPIO_ALT_FN_2_IN ) -+#define GPIO36_VMOUT_MD (GPIO36_VMOUT | GPIO_ALT_FN_1_OUT) -+#define GPIO39_VPOUT_MD (GPIO39_VPOUT | GPIO_ALT_FN_1_OUT) -+#define GPIO40_VPIN_MD (GPIO40_VPIN | GPIO_ALT_FN_3_IN ) -+#define GPIO53_VMIN_MD (GPIO53_VMIN | GPIO_ALT_FN_2_IN ) -+ -+#define GPIO53_FFRXD_MD (53 | GPIO_ALT_FN_1_IN) -+ -Index: linux-2.6.23/include/asm-arm/arch-pxa/pxa-regs.h -=================================================================== ---- linux-2.6.23.orig/include/asm-arm/arch-pxa/pxa-regs.h 2007-10-24 13:03:04.000000000 +0200 -+++ linux-2.6.23/include/asm-arm/arch-pxa/pxa-regs.h 2007-10-24 18:56:34.000000000 +0200 -@@ -856,6 +856,8 @@ - #define UP2OCR_HXOE (1 << 17) /* Host Port 2 Transceiver Output Enable */ - #define UP2OCR_SEOS (1 << 24) /* Single-Ended Output Select */ - -+#define UP3OCR __REG(0x40600024) /* USB Port 3 Output Control register */ -+ - #define UDCCSN(x) __REG2(0x40600100, (x) << 2) - #define UDCCSR0 __REG(0x40600100) /* UDC Control/Status register - Endpoint 0 */ - #define UDCCSR0_SA (1 << 7) /* Setup Active */ -@@ -1259,6 +1261,7 @@ - #define GPIO33_nCS_5 33 /* chip select 5 */ - #define GPIO34_FFRXD 34 /* FFUART receive */ - #define GPIO34_MMCCS0 34 /* MMC Chip Select 0 */ -+#define GPIO34_USB_P2_2 34 /* USB Port2 Pin 2 */ - #define GPIO35_FFCTS 35 /* FFUART Clear to send */ - #define GPIO36_FFDCD 36 /* FFUART Data carrier detect */ - #define GPIO37_FFDSR 37 /* FFUART data set ready */ -@@ -1372,6 +1375,7 @@ - #define GPIO18_RDY_MD (18 | GPIO_ALT_FN_1_IN) - #define GPIO19_DREQ1_MD (19 | GPIO_ALT_FN_1_IN) - #define GPIO20_DREQ0_MD (20 | GPIO_ALT_FN_1_IN) -+#define GPIO22_SCLK2_MD (22 | GPIO_ALT_FN_3_IN) - #define GPIO23_SCLK_MD (23 | GPIO_ALT_FN_2_OUT) - #define GPIO24_SFRM_MD (24 | GPIO_ALT_FN_2_OUT) - #define GPIO25_STXD_MD (25 | GPIO_ALT_FN_2_OUT) -@@ -1382,23 +1386,33 @@ - #define GPIO28_BITCLK_OUT_I2S_MD (28 | GPIO_ALT_FN_1_OUT) - #define GPIO29_SDATA_IN_AC97_MD (29 | GPIO_ALT_FN_1_IN) - #define GPIO29_SDATA_IN_I2S_MD (29 | GPIO_ALT_FN_2_IN) -+#define GPIO29_SCLK_MD (29 | GPIO_ALT_FN_3_IN) - #define GPIO30_SDATA_OUT_AC97_MD (30 | GPIO_ALT_FN_2_OUT) - #define GPIO30_SDATA_OUT_I2S_MD (30 | GPIO_ALT_FN_1_OUT) -+#define GPIO30_USB_P3_2 (30 | GPIO_ALT_FN_3_OUT) - #define GPIO31_SYNC_I2S_MD (31 | GPIO_ALT_FN_1_OUT) - #define GPIO31_SYNC_AC97_MD (31 | GPIO_ALT_FN_2_OUT) -+#define GPIO31_USB_P3_6 (31 | GPIO_ALT_FN_3_OUT) - #define GPIO32_SDATA_IN1_AC97_MD (32 | GPIO_ALT_FN_1_IN) - #define GPIO32_SYSCLK_I2S_MD (32 | GPIO_ALT_FN_1_OUT) - #define GPIO32_MMCCLK_MD ( 32 | GPIO_ALT_FN_2_OUT) - #define GPIO33_nCS_5_MD (33 | GPIO_ALT_FN_2_OUT) - #define GPIO34_FFRXD_MD (34 | GPIO_ALT_FN_1_IN) - #define GPIO34_MMCCS0_MD (34 | GPIO_ALT_FN_2_OUT) -+#define GPIO34_USB_P2_2_MD (34 | GPIO_ALT_FN_1_OUT) - #define GPIO35_FFCTS_MD (35 | GPIO_ALT_FN_1_IN) -+#define GPIO35_USB_P2_1_MD (35 | GPIO_ALT_FN_2_IN) - #define GPIO36_FFDCD_MD (36 | GPIO_ALT_FN_1_IN) -+#define GPIO36_USB_P2_4_MD (36 | GPIO_ALT_FN_1_OUT) - #define GPIO37_FFDSR_MD (37 | GPIO_ALT_FN_1_IN) -+#define GPIO37_SFRM2_MD (37 | GPIO_ALT_FN_2_IN) - #define GPIO38_FFRI_MD (38 | GPIO_ALT_FN_1_IN) -+#define GPIO38_STXD2_MD (38 | GPIO_ALT_FN_2_OUT) - #define GPIO39_MMCCS1_MD (39 | GPIO_ALT_FN_1_OUT) - #define GPIO39_FFTXD_MD (39 | GPIO_ALT_FN_2_OUT) -+#define GPIO39_USB_P2_6_MD (39 | GPIO_ALT_FN_1_OUT) - #define GPIO40_FFDTR_MD (40 | GPIO_ALT_FN_2_OUT) -+#define GPIO40_USB_P2_5_MD (40 | GPIO_ALT_FN_3_IN) - #define GPIO41_FFRTS_MD (41 | GPIO_ALT_FN_2_OUT) - #define GPIO42_BTRXD_MD (42 | GPIO_ALT_FN_1_IN) - #define GPIO42_HWRXD_MD (42 | GPIO_ALT_FN_3_IN) -@@ -1423,13 +1437,17 @@ - #define GPIO51_HWRTS_MD (51 | GPIO_ALT_FN_1_OUT) - #define GPIO51_nPIOW_MD (51 | GPIO_ALT_FN_2_OUT) - #define GPIO52_nPCE_1_MD (52 | GPIO_ALT_FN_2_OUT) -+#define GPIO52_SCLK3_MD (52 | GPIO_ALT_FN_2_OUT) - #define GPIO53_nPCE_2_MD (53 | GPIO_ALT_FN_2_OUT) - #define GPIO53_MMCCLK_MD (53 | GPIO_ALT_FN_1_OUT) -+#define GPIO53_FFRXD_MD (53 | GPIO_ALT_FN_1_IN) -+#define GPIO53_USB_P2_3_MD (53 | GPIO_ALT_FN_2_IN) - #define GPIO54_MMCCLK_MD (54 | GPIO_ALT_FN_1_OUT) - #define GPIO54_nPCE_2_MD (54 | GPIO_ALT_FN_2_OUT) - #define GPIO54_pSKTSEL_MD (54 | GPIO_ALT_FN_2_OUT) - #define GPIO55_nPREG_MD (55 | GPIO_ALT_FN_2_OUT) - #define GPIO56_nPWAIT_MD (56 | GPIO_ALT_FN_1_IN) -+#define GPIO56_USB_P3_4 (56 | GPIO_ALT_FN_1_OUT) - #define GPIO57_nIOIS16_MD (57 | GPIO_ALT_FN_1_IN) - #define GPIO58_LDD_0_MD (58 | GPIO_ALT_FN_2_OUT) - #define GPIO59_LDD_1_MD (59 | GPIO_ALT_FN_2_OUT) -@@ -1465,13 +1483,19 @@ - #define GPIO80_nCS_4_MD (80 | GPIO_ALT_FN_2_OUT) - #define GPIO81_NSSP_CLK_OUT (81 | GPIO_ALT_FN_1_OUT) - #define GPIO81_NSSP_CLK_IN (81 | GPIO_ALT_FN_1_IN) -+#define GPIO81_STXD3_MD (81 | GPIO_ALT_FN_1_OUT) - #define GPIO82_NSSP_FRM_OUT (82 | GPIO_ALT_FN_1_OUT) - #define GPIO82_NSSP_FRM_IN (82 | GPIO_ALT_FN_1_IN) - #define GPIO83_NSSP_TX (83 | GPIO_ALT_FN_1_OUT) - #define GPIO83_NSSP_RX (83 | GPIO_ALT_FN_2_IN) -+#define GPIO83_SFRM3_MD (83 | GPIO_ALT_FN_1_IN) - #define GPIO84_NSSP_TX (84 | GPIO_ALT_FN_1_OUT) - #define GPIO84_NSSP_RX (84 | GPIO_ALT_FN_2_IN) - #define GPIO85_nPCE_1_MD (85 | GPIO_ALT_FN_1_OUT) -+#define GPIO88_SRXD2_MD (88 | GPIO_ALT_FN_2_IN) -+#define GPIO89_SRXD3_MD (89 | GPIO_ALT_FN_1_IN) -+#define GPIO90_USB_P3_5 (90 | GPIO_ALT_FN_2_IN) -+#define GPIO91_USB_P3_1 (91 | GPIO_ALT_FN_2_IN) - #define GPIO92_MMCDAT0_MD (92 | GPIO_ALT_FN_1_OUT) - #define GPIO102_nPCE_1_MD (102 | GPIO_ALT_FN_1_OUT) - #define GPIO104_pSKTSEL_MD (104 | GPIO_ALT_FN_1_OUT) -@@ -1483,6 +1507,7 @@ - #define GPIO112_MMCCMD_MD (112 | GPIO_ALT_FN_1_OUT) - #define GPIO113_I2S_SYSCLK_MD (113 | GPIO_ALT_FN_1_OUT) - #define GPIO113_AC97_RESET_N_MD (113 | GPIO_ALT_FN_2_OUT) -+#define GPIO113_USB_P3_3 (113 | GPIO_ALT_FN_3_IN) - #define GPIO117_I2CSCL_MD (117 | GPIO_ALT_FN_1_IN) - #define GPIO118_I2CSDA_MD (118 | GPIO_ALT_FN_1_IN) - -@@ -1498,6 +1523,7 @@ - #define PFER __REG(0x40F00014) /* Power Manager GPIO Falling-Edge Detect Enable Register */ - #define PEDR __REG(0x40F00018) /* Power Manager GPIO Edge Detect Status Register */ - #define PCFR __REG(0x40F0001C) /* Power Manager General Configuration Register */ -+#define PGSR(x) (__REG(0x40F00020 + ((unsigned long)(x)/32*4))) - #define PGSR0 __REG(0x40F00020) /* Power Manager GPIO Sleep State Register for GP[31-0] */ - #define PGSR1 __REG(0x40F00024) /* Power Manager GPIO Sleep State Register for GP[63-32] */ - #define PGSR2 __REG(0x40F00028) /* Power Manager GPIO Sleep State Register for GP[84-64] */ -Index: linux-2.6.23/arch/arm/boot/compressed/head.S -=================================================================== ---- linux-2.6.23.orig/arch/arm/boot/compressed/head.S 2007-10-09 22:31:38.000000000 +0200 -+++ linux-2.6.23/arch/arm/boot/compressed/head.S 2007-10-24 13:03:05.000000000 +0200 -@@ -117,6 +117,9 @@ - mov r0, r0 - .endr - -+ mov r1, #0x300 @ mach_id 0x363 is official EZX -+ orr r1, r1, #0x63 @ bootloader JUMP doesn't set r1 -+ - b 1f - .word 0x016f2818 @ Magic numbers to help the loader - .word start @ absolute load/run zImage address -Index: linux-2.6.23/include/asm-arm/arch-pxa/uncompress.h -=================================================================== ---- linux-2.6.23.orig/include/asm-arm/arch-pxa/uncompress.h 2007-10-09 22:31:38.000000000 +0200 -+++ linux-2.6.23/include/asm-arm/arch-pxa/uncompress.h 2007-10-24 13:03:05.000000000 +0200 -@@ -14,14 +14,14 @@ - #define STUART ((volatile unsigned long *)0x40700000) - #define HWUART ((volatile unsigned long *)0x41600000) - --#define UART FFUART -+#define UART STUART - - - static inline void putc(char c) - { -- while (!(UART[5] & 0x20)) -+/* while (!(UART[5] & 0x40)) - barrier(); -- UART[0] = c; -+ UART[0] = c;*/ - } - - /* -Index: linux-2.6.23/arch/arm/mm/init.c -=================================================================== ---- linux-2.6.23.orig/arch/arm/mm/init.c 2007-10-09 22:31:38.000000000 +0200 -+++ linux-2.6.23/arch/arm/mm/init.c 2007-10-24 13:03:05.000000000 +0200 -@@ -240,6 +240,10 @@ - */ - reserve_bootmem_node(pgdat, boot_pfn << PAGE_SHIFT, - boot_pages << PAGE_SHIFT); -+#ifdef CONFIG_PXA_EZX -+ /* reserve the first page memory for exiting sleep and user off */ -+ reserve_bootmem_node(pgdat, PHYS_OFFSET, PAGE_SIZE); -+#endif - - #ifdef CONFIG_BLK_DEV_INITRD - /* -Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c 2007-10-24 18:56:36.000000000 +0200 -@@ -0,0 +1,88 @@ -+/* -+ * ezx-a780.c - Code specific to A780 GSM Phone. -+ * -+ * Copyright (c) 2007 OpenEZX Team (www.openezx.org) -+ * -+ * 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/kernel.h> -+#include <linux/init.h> -+#include <linux/platform_device.h> -+#include <linux/fb.h> -+ -+#include <asm/mach-types.h> -+#include <asm/mach/arch.h> -+#include <asm/arch/pxa-regs.h> -+#include <asm/arch/pxafb.h> -+#include <asm/arch/ezx.h> -+ -+#include "generic.h" -+ -+extern void ezx_lcd_power(int, struct fb_var_screeninfo *); -+extern void ezx_backlight_power(int); -+ -+static struct pxafb_mode_info mode_a780 = { -+ .pixclock = 150000, -+ .xres = 240, -+ .yres = 320, -+ .bpp = 16, -+ .hsync_len = 10, -+ .left_margin = 20, -+ .right_margin = 10, -+ .vsync_len = 2, -+ .upper_margin = 3, -+ .lower_margin = 2, -+ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, -+}; -+ -+static struct pxafb_mach_info a780_fb_info = { -+ .modes = &mode_a780, -+ .num_modes = 1, -+ .lccr0 = 0x002008F8, -+ .lccr3 = 0x0430FF09, -+ .pxafb_backlight_power = &ezx_backlight_power, -+ .pxafb_lcd_power = &ezx_lcd_power, -+}; -+ -+static struct platform_device *devices[] __initdata = { -+}; -+ -+static void __init a780_init(void) -+{ -+ /* setup sleep mode values */ -+ PWER = 0xc0007803; // disable usb, GPIO15 NC -+ PFER = 0x00007803; -+ PRER = 0x00001802; -+ PGSR0 = 0x00000010; -+ PGSR1 = 0x02800000; -+ PGSR2 = 0x00040000; -+ PGSR3 = 0x00000008; -+ PCFR = PCFR_DC_EN | PCFR_FS | PCFR_FP | PCFR_OPDE; -+ PSLR = 0x05800f00; -+ -+ set_pxa_fb_info(&a780_fb_info); -+ -+ /* clear EMU MUX1/MUX2 (low) to close the audio path to EMU */ -+ pxa_gpio_mode(GPIO_EMU_MUX1|GPIO_OUT); -+ clr_GPIO(GPIO_EMU_MUX1); -+ pxa_gpio_mode(GPIO_EMU_MUX2|GPIO_OUT); -+ clr_GPIO(GPIO_EMU_MUX2); -+ -+ platform_add_devices(devices, ARRAY_SIZE(devices)); -+} -+ -+MACHINE_START(EZX, "Motorola Ezx Platform") -+ /* Maintainer: OpenEZX Team (www.openezx.org) */ -+ .phys_io = 0x40000000, -+ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, -+ .boot_params = 0xa0000100, -+ .map_io = pxa_map_io, -+ .init_irq = pxa27x_init_irq, -+ .timer = &pxa_timer, -+ .init_machine = a780_init, -+MACHINE_END -Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e2.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e2.c 2007-10-24 18:57:44.000000000 +0200 -@@ -0,0 +1,70 @@ -+/* -+ * ezx-e2.c - Code specific to E2 GSM Phone. -+ * -+ * Copyright (c) 2007 OpenEZX Team (www.openezx.org) -+ * -+ * 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/kernel.h> -+#include <linux/init.h> -+#include <linux/platform_device.h> -+#include <linux/fb.h> -+ -+#include <asm/mach-types.h> -+#include <asm/mach/arch.h> -+#include <asm/arch/pxa-regs.h> -+#include <asm/arch/pxafb.h> -+#include <asm/arch/ezx.h> -+ -+#include "generic.h" -+ -+extern void ezx_lcd_power(int, struct fb_var_screeninfo *); -+extern void ezx_backlight_power(int); -+ -+static struct pxafb_mode_info mode_e2 = { -+ .pixclock = 192308, -+ .xres = 240, -+ .yres = 320, -+ .bpp = 8, -+ .hsync_len = 10, -+ .left_margin = 20, -+ .right_margin = 10, -+ .vsync_len = 2, -+ .upper_margin = 3, -+ .lower_margin = 2, -+ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, -+}; -+ -+static struct pxafb_mach_info e2_fb_info = { -+ .modes = &mode_e2, -+ .num_modes = 1, -+ .lccr0 = 0x022008B8, -+ .lccr3 = 0xC130FF13, -+ .pxafb_backlight_power = &ezx_backlight_power, -+ .pxafb_lcd_power = &ezx_lcd_power, -+}; -+ -+static struct platform_device *devices[] __initdata = { -+}; -+ -+static void __init e2_init(void) -+{ -+ set_pxa_fb_info(&e2_fb_info); -+ -+ platform_add_devices(devices, ARRAY_SIZE(devices)); -+} -+ -+MACHINE_START(EZX, "Motorola Ezx Platform") -+ /* Maintainer: OpenEZX Team (www.openezx.org) */ -+ .phys_io = 0x40000000, -+ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, -+ .boot_params = 0xa0000200, -+ .map_io = pxa_map_io, -+ .init_irq = pxa27x_init_irq, -+ .timer = &pxa_timer, -+ .init_machine = e2_init, -+MACHINE_END -Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 18:57:19.000000000 +0200 -@@ -0,0 +1,87 @@ -+/* -+ * ezx-e680.c - Code specific to E680 GSM Phone. -+ * -+ * Copyright (c) 2007 OpenEZX Team (www.openezx.org) -+ * -+ * 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/kernel.h> -+#include <linux/init.h> -+#include <linux/platform_device.h> -+#include <linux/fb.h> -+ -+#include <asm/mach-types.h> -+#include <asm/mach/arch.h> -+#include <asm/arch/pxa-regs.h> -+#include <asm/arch/pxafb.h> -+#include <asm/arch/ezx.h> -+ -+#include "generic.h" -+ -+extern void ezx_lcd_power(int, struct fb_var_screeninfo *); -+extern void ezx_backlight_power(int); -+ -+static struct pxafb_mode_info mode_e680 = { -+ .pixclock = 150000, -+ .xres = 240, -+ .yres = 320, -+ .bpp = 16, -+ .hsync_len = 10, -+ .left_margin = 20, -+ .right_margin = 10, -+ .vsync_len = 2, -+ .upper_margin = 3, -+ .lower_margin = 2, -+ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, -+}; -+ -+static struct pxafb_mach_info e680_fb_info = { -+ .modes = &mode_e680, -+ .num_modes = 1, -+ .lccr0 = 0x002008F8, -+ .lccr3 = 0x0430FF09, -+ .pxafb_backlight_power = &ezx_backlight_power, -+ .pxafb_lcd_power = &ezx_lcd_power, -+}; -+ -+static struct platform_device *devices[] __initdata = { -+}; -+ -+static void __init e680_init(void) -+{ -+ /* setup sleep mode values */ -+ PWER = 0xc000f803; // disable usb 0xdc00f803; -+ PFER = 0x0000f803; -+ PRER = 0x00001802; -+ PGSR0 = 0x00000010; -+ PGSR1 = 0x02800000; -+ PGSR2 = 0x00040000; -+ PGSR3 = 0x00000000; -+ PCFR = PCFR_DC_EN | PCFR_FS | PCFR_FP | PCFR_OPDE; -+ PSLR = 0x05800f00; -+ -+ set_pxa_fb_info(&e680_fb_info); -+ -+ /* clear EMU MUX1/MUX2 (low) to close the audio path to EMU */ -+ pxa_gpio_mode(GPIO_EMU_MUX1|GPIO_OUT); -+ clr_GPIO(GPIO_EMU_MUX1); -+ pxa_gpio_mode(GPIO_EMU_MUX2|GPIO_OUT); -+ clr_GPIO(GPIO_EMU_MUX2); -+ -+ platform_add_devices(devices, ARRAY_SIZE(devices)); -+} -+ -+MACHINE_START(EZX, "Motorola Ezx Platform") -+ /* Maintainer: OpenEZX Team (www.openezx.org) */ -+ .phys_io = 0x40000000, -+ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, -+ .boot_params = 0xa0000100, -+ .map_io = pxa_map_io, -+ .init_irq = pxa27x_init_irq, -+ .timer = &pxa_timer, -+ .init_machine = e680_init, -+MACHINE_END -Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c 2007-10-24 18:58:15.000000000 +0200 -@@ -0,0 +1,70 @@ -+/* -+ * ezx-a1200.c - Code specific to A1200 GSM Phone. -+ * -+ * Copyright (c) 2007 OpenEZX Team (www.openezx.org) -+ * -+ * 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/kernel.h> -+#include <linux/init.h> -+#include <linux/platform_device.h> -+#include <linux/fb.h> -+ -+#include <asm/mach-types.h> -+#include <asm/mach/arch.h> -+#include <asm/arch/pxa-regs.h> -+#include <asm/arch/pxafb.h> -+#include <asm/arch/ezx.h> -+ -+#include "generic.h" -+ -+extern void ezx_lcd_power(int, struct fb_var_screeninfo *); -+extern void ezx_backlight_power(int); -+ -+static struct pxafb_mode_info mode_a1200 = { -+ .pixclock = 192308, -+ .xres = 240, -+ .yres = 320, -+ .bpp = 8, -+ .hsync_len = 10, -+ .left_margin = 20, -+ .right_margin = 10, -+ .vsync_len = 2, -+ .upper_margin = 3, -+ .lower_margin = 2, -+ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, -+}; -+ -+static struct pxafb_mach_info a1200_fb_info = { -+ .modes = &mode_a1200, -+ .num_modes = 1, -+ .lccr0 = 0x022008B8, -+ .lccr3 = 0xC130FF13, -+ .pxafb_backlight_power = &ezx_backlight_power, -+ .pxafb_lcd_power = &ezx_lcd_power, -+}; -+ -+static struct platform_device *devices[] __initdata = { -+}; -+ -+static void __init a1200_init(void) -+{ -+ set_pxa_fb_info(&a1200_fb_info); -+ -+ platform_add_devices(devices, ARRAY_SIZE(devices)); -+} -+ -+MACHINE_START(EZX, "Motorola Ezx Platform") -+ /* Maintainer: OpenEZX Team (www.openezx.org) */ -+ .phys_io = 0x40000000, -+ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, -+ .boot_params = 0xa0000200, -+ .map_io = pxa_map_io, -+ .init_irq = pxa27x_init_irq, -+ .timer = &pxa_timer, -+ .init_machine = a1200_init, -+MACHINE_END -Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c 2007-10-24 18:57:58.000000000 +0200 -@@ -0,0 +1,70 @@ -+/* -+ * ezx-e6.c - Code specific to E6 GSM Phone. -+ * -+ * Copyright (c) 2007 OpenEZX Team (www.openezx.org) -+ * -+ * 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/kernel.h> -+#include <linux/init.h> -+#include <linux/platform_device.h> -+#include <linux/fb.h> -+ -+#include <asm/mach-types.h> -+#include <asm/mach/arch.h> -+#include <asm/arch/pxa-regs.h> -+#include <asm/arch/pxafb.h> -+#include <asm/arch/ezx.h> -+ -+#include "generic.h" -+ -+extern void ezx_lcd_power(int, struct fb_var_screeninfo *); -+extern void ezx_backlight_power(int); -+ -+static struct pxafb_mode_info mode_e6 = { -+ .pixclock = 192308, -+ .xres = 240, -+ .yres = 320, -+ .bpp = 8, -+ .hsync_len = 10, -+ .left_margin = 20, -+ .right_margin = 10, -+ .vsync_len = 2, -+ .upper_margin = 3, -+ .lower_margin = 2, -+ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, -+}; -+ -+static struct pxafb_mach_info e6_fb_info = { -+ .modes = &mode_e6, -+ .num_modes = 1, -+ .lccr0 = 0x022008B8, -+ .lccr3 = 0xC130FF13, -+ .pxafb_backlight_power = &ezx_backlight_power, -+ .pxafb_lcd_power = &ezx_lcd_power, -+}; -+ -+static struct platform_device *devices[] __initdata = { -+}; -+ -+static void __init e6_init(void) -+{ -+ set_pxa_fb_info(&e6_fb_info); -+ -+ platform_add_devices(devices, ARRAY_SIZE(devices)); -+} -+ -+MACHINE_START(EZX, "Motorola Ezx Platform") -+ /* Maintainer: OpenEZX Team (www.openezx.org) */ -+ .phys_io = 0x40000000, -+ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, -+ .boot_params = 0xa0000200, -+ .map_io = pxa_map_io, -+ .init_irq = pxa27x_init_irq, -+ .timer = &pxa_timer, -+ .init_machine = e6_init, -+MACHINE_END diff --git a/packages/linux/linux-ezx-2.6.23/patches/ezx-emu.patch b/packages/linux/linux-ezx-2.6.23/patches/ezx-emu.patch deleted file mode 100644 index 67075ec1fc..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/ezx-emu.patch +++ /dev/null @@ -1,269 +0,0 @@ -Index: linux-2.6.23/arch/arm/mach-pxa/ezx-emu.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx-emu.c 2007-10-23 15:57:50.000000000 +0200 -@@ -0,0 +1,219 @@ -+/* -+ * EMU Driver for Motorola EZX phones -+ * -+ * Copyright (c) 2007 Daniel Ribeiro <drwyrm@gmail.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/kernel.h> -+#include <linux/interrupt.h> -+#include <linux/module.h> -+#include <linux/platform_device.h> -+ -+#include <asm/arch/hardware.h> -+#include <asm/arch/pxa-regs.h> -+#include <asm/arch/ezx.h> -+#include <asm/arch/ezx-pcap.h> -+#include <asm/arch/udc.h> -+ -+static struct pxa2xx_udc_mach_info ezx_udc_info; -+extern int ezx_pcap_bit_set(u_int32_t, u_int8_t); -+extern int ezx_pcap_read_bit(u_int32_t); -+static int emu_irq_usb4v; -+static int emu_irq_usb1v; -+ -+ -+#if defined CONFIG_EZX_EMU_USB -+#define emu_switch_to_default() emu_switch_to_usb() -+#elif defined CONFIG_EZX_EMU_UART -+#define emu_switch_to_default() emu_switch_to_uart() -+#else -+#define emu_switch_to_default() emu_switch_to_nothing() -+#endif -+ -+void emu_switch_to_usb(void) -+{ -+ printk(KERN_NOTICE "EMU: Switching to USB\n"); -+ pxa_gpio_mode(GPIO34_USB_P2_2_MD); -+ pxa_gpio_mode(GPIO35_USB_P2_1_MD); -+ pxa_gpio_mode(GPIO36_USB_P2_4_MD); -+ pxa_gpio_mode(GPIO39_USB_P2_6_MD); -+ pxa_gpio_mode(GPIO40_USB_P2_5_MD); -+ pxa_gpio_mode(GPIO53_USB_P2_3_MD); -+ UP2OCR = 0x02000000; -+ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_RS232ENB, 1); -+ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_FSENB, 0); -+ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_VUSB_EN, 1); -+ clr_GPIO(GPIO_EMU_MUX1); -+ clr_GPIO(GPIO_EMU_MUX2); -+} -+ -+void emu_switch_to_uart(void) -+{ -+ printk(KERN_NOTICE "EMU: Switching to UART\n"); -+ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_VUSB_EN,0); -+ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_RS232ENB, 0); -+ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_RS232_DIR, 1); -+ set_GPIO(GPIO39_FFTXD); -+ pxa_gpio_mode(GPIO34_TXENB | GPIO_OUT); -+ set_GPIO(GPIO34_TXENB); -+ pxa_gpio_mode(GPIO35_XRXD | GPIO_IN); -+ pxa_gpio_mode(GPIO36_VMOUT | GPIO_IN); -+ pxa_gpio_mode(GPIO40_VPIN | GPIO_IN); -+ pxa_gpio_mode(GPIO39_FFTXD_MD); -+ pxa_gpio_mode(GPIO53_FFRXD_MD); -+ pxa_set_cken(CKEN_FFUART, 1); -+ clr_GPIO(GPIO_EMU_MUX1); -+ clr_GPIO(GPIO_EMU_MUX2); -+ -+} -+ -+void emu_switch_to_audio(int stereo) -+{ -+ printk(KERN_NOTICE "EMU: Switching to audio(%s)\n", (stereo ? "stereo" : "mono")); -+ clr_GPIO(GPIO39_VPOUT); -+ if (stereo) { -+ pxa_gpio_mode(GPIO34_TXENB | GPIO_IN); -+ clr_GPIO(GPIO39_VPOUT); -+ } else { -+ pxa_gpio_mode(GPIO34_TXENB | GPIO_OUT); -+ set_GPIO(GPIO34_TXENB); -+ } -+ -+ pxa_gpio_mode(GPIO35_XRXD | GPIO_IN); -+ pxa_gpio_mode(GPIO36_VMOUT | GPIO_IN); -+ pxa_gpio_mode(GPIO39_VPOUT | GPIO_IN); -+ pxa_gpio_mode(GPIO40_VPIN | GPIO_IN); -+ pxa_gpio_mode(GPIO53_VMIN | GPIO_IN); -+ set_GPIO(GPIO_EMU_MUX1); -+ if (stereo) -+ set_GPIO(GPIO_EMU_MUX2); -+ else -+ clr_GPIO(GPIO_EMU_MUX2); -+} -+ -+void emu_switch_to_nothing(void) -+{ -+ printk(KERN_NOTICE "EMU: Switching to disconnected\n"); -+ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_VUSB_EN, 0); -+ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_RS232ENB, 1); -+ pxa_gpio_mode(GPIO34_TXENB | GPIO_OUT); -+ set_GPIO(GPIO34_TXENB); -+ pxa_gpio_mode(GPIO35_XRXD | GPIO_IN); -+ pxa_gpio_mode(GPIO36_VMOUT | GPIO_IN); -+ pxa_gpio_mode(GPIO39_VPOUT | GPIO_IN); -+ pxa_gpio_mode(GPIO40_VPIN | GPIO_IN); -+ pxa_gpio_mode(GPIO53_VMIN | GPIO_IN); -+} -+ -+ -+static irqreturn_t emu_irq(int irq, void *data) -+{ -+ switch (irq) { -+ case EZX_IRQ_USB4V: -+ if(ezx_pcap_read_bit(pbit(PCAP_REG_PSTAT, PCAP_IRQ_USB4V))) -+ emu_switch_to_default(); -+ break; -+ case EZX_IRQ_USB1V: -+ if(!ezx_pcap_read_bit(pbit(PCAP_REG_PSTAT, PCAP_IRQ_USB1V))) -+ emu_switch_to_nothing(); -+ break; -+ } -+ -+ return IRQ_HANDLED; -+} -+ -+static int __init ezx_emu_probe(struct platform_device *dev) -+{ -+ pxa_gpio_mode(GPIO_SNP_INT_IN | GPIO_IN); -+ pxa_gpio_mode(GPIO_EMU_MUX1 | GPIO_OUT); -+ pxa_gpio_mode(GPIO_EMU_MUX2 | GPIO_OUT); -+ -+ emu_irq_usb4v = platform_get_irq(dev, 0); -+ if(emu_irq_usb4v < 0) { -+ printk(KERN_ERR "Unable to get IRQ for USB4V!\n"); -+ return emu_irq_usb4v; -+ } -+ emu_irq_usb1v = platform_get_irq(dev, 1); -+ if(emu_irq_usb1v < 0) { -+ printk(KERN_ERR "Unable to get IRQ for USB1V!\n"); -+ return emu_irq_usb1v; -+ } -+ -+ request_irq(emu_irq_usb4v, &emu_irq, IRQF_DISABLED, "usb 4v", NULL); -+ request_irq(emu_irq_usb1v, &emu_irq, IRQF_DISABLED, "usb 1v", NULL); -+ -+ pxa_set_udc_info(&ezx_udc_info); -+ -+ if(ezx_pcap_read_bit(pbit(PCAP_REG_PSTAT, PCAP_IRQ_USB4V))) -+ emu_switch_to_default(); -+ else -+ emu_switch_to_nothing(); -+ -+ return 0; -+} -+ -+static int ezx_emu_remove(struct platform_device *dev) -+{ -+ free_irq(emu_irq_usb4v, NULL); -+ free_irq(emu_irq_usb1v, NULL); -+ -+ return 0; -+} -+ -+/* USB Device Controller */ -+static int udc_connected_status; -+static void ezx_udc_command(int cmd) -+{ -+ switch (cmd) { -+ case PXA2XX_UDC_CMD_DISCONNECT: -+ printk(KERN_NOTICE "USB cmd disconnect\n"); -+ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_USB_PU,0); -+ udc_connected_status = 0; -+ break; -+ case PXA2XX_UDC_CMD_CONNECT: -+ printk(KERN_NOTICE "USB cmd connect\n"); -+ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_USB_PU,1); -+ udc_connected_status = 1; -+ break; -+ } -+} -+ -+static int ezx_udc_is_connected(void) -+{ -+ return udc_connected_status; -+} -+ -+static struct pxa2xx_udc_mach_info ezx_udc_info __initdata = { -+ .udc_is_connected = ezx_udc_is_connected, -+ .udc_command = ezx_udc_command, -+}; -+ -+static struct platform_driver ezxemu_driver = { -+ .probe = ezx_emu_probe, -+ .remove = ezx_emu_remove, -+ .driver = { -+ .name = "ezx-emu", -+ .owner = THIS_MODULE, -+ }, -+}; -+ -+int __init ezx_emu_init(void) -+{ -+ return platform_driver_register(&ezxemu_driver); -+} -+ -+void ezx_emu_fini(void) -+{ -+ return platform_driver_unregister(&ezxemu_driver); -+} -+ -+module_init(ezx_emu_init); -+module_exit(ezx_emu_fini); -+ -+MODULE_DESCRIPTION("Motorola Enchanced Mini Usb driver"); -+MODULE_AUTHOR("Daniel Ribeiro <drwyrm@gmail.com>"); -+MODULE_LICENSE("GPL"); -Index: linux-2.6.23/arch/arm/mach-pxa/Kconfig -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/Kconfig 2007-10-23 15:38:53.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/Kconfig 2007-10-23 18:00:57.000000000 +0200 -@@ -112,6 +112,28 @@ - config EZX_PCAP - bool "PCAP Support" - -+config EZX_EMU -+ bool "Motorola Enchanced Mini Usb" -+ depends on EZX_PCAP -+ -+if EZX_EMU -+ -+choice -+ prompt "Select default EMU mode" -+ -+config EZX_EMU_USB -+ bool "USB" -+ -+config EZX_EMU_UART -+ bool "UART" -+ -+config EZX_EMU_NOTHING -+ bool "nothing" -+ -+endchoice -+ -+endif -+ - endif - - endmenu -Index: linux-2.6.23/arch/arm/mach-pxa/Makefile -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/Makefile 2007-10-23 15:38:53.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/Makefile 2007-10-23 18:00:57.000000000 +0200 -@@ -27,6 +27,7 @@ - obj-$(CONFIG_PXA_EZX_E6) += ezx-e6.o - obj-$(CONFIG_EZX_BP) += ezx-bp.o - obj-$(CONFIG_EZX_PCAP) += ezx-pcap.o -+obj-$(CONFIG_EZX_EMU) += ezx-emu.o - - # Support for blinky lights - led-y := leds.o diff --git a/packages/linux/linux-ezx-2.6.23/patches/ezx-enable-stuart.patch b/packages/linux/linux-ezx-2.6.23/patches/ezx-enable-stuart.patch deleted file mode 100644 index 6f1a2c1ba4..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/ezx-enable-stuart.patch +++ /dev/null @@ -1,99 +0,0 @@ -Index: linux-2.6.21/arch/arm/boot/compressed/head.S -=================================================================== ---- linux-2.6.21.orig/arch/arm/boot/compressed/head.S 2007-05-19 11:22:56.000000000 -0300 -+++ linux-2.6.21/arch/arm/boot/compressed/head.S 2007-05-19 11:50:29.000000000 -0300 -@@ -10,6 +10,7 @@ - */ - #include <linux/linkage.h> - -+#define DEBUG - /* - * Debugging stuff - * -@@ -117,6 +118,8 @@ - mov r0, r0 - .endr - -+ inituart r10, r11 -+ - mov r1, #0x300 @ mach_id 0x363 is official EZX - orr r1, r1, #0x63 @ bootloader JUMP doesn't set r1 - -Index: linux-2.6.21/include/asm-arm/arch-pxa/uncompress.h -=================================================================== ---- linux-2.6.21.orig/include/asm-arm/arch-pxa/uncompress.h 2007-05-19 11:22:56.000000000 -0300 -+++ linux-2.6.21/include/asm-arm/arch-pxa/uncompress.h 2007-05-19 11:30:38.000000000 -0300 -@@ -19,9 +19,9 @@ - - static inline void putc(char c) - { --/* while (!(UART[5] & 0x40)) -+ while (!(UART[5] & 0x40)) - barrier(); -- UART[0] = c;*/ -+ UART[0] = c; - } - - /* -Index: linux-2.6.21/include/asm-arm/arch-pxa/debug-macro.S -=================================================================== ---- linux-2.6.21.orig/include/asm-arm/arch-pxa/debug-macro.S 2007-05-19 11:30:54.000000000 -0300 -+++ linux-2.6.21/include/asm-arm/arch-pxa/debug-macro.S 2007-05-19 11:49:35.000000000 -0300 -@@ -14,11 +14,52 @@ - #include "hardware.h" - - .macro addruart,rx -- mrc p15, 0, \rx, c1, c0 -- tst \rx, #1 @ MMU enabled? -- moveq \rx, #0x40000000 @ physical -- movne \rx, #io_p2v(0x40000000) @ virtual -- orr \rx, \rx, #0x00100000 -+@ mrc p15, 0, \rx, c1, c0 -+@ tst \rx, #1 @ MMU enabled? -+ mov \rx, #0x40000000 -+@ moveq \rx, #0x40000000 @ physical -+@ movne \rx, #io_p2v(0x40000000) @ virtual -+ orr \rx, \rx, #0x00700000 -+ .endm -+ -+ .macro inituart,rd,rx -+ ldr \rd, =0x41300004 @ CKEN -+ ldr \rx, [\rd] -+ orr \rx, \rx, #0x20 -+ str \rx, [\rd] -+ -+ ldr \rd, =0x40E0005C -+ ldr \rx, [\rd] -+ bic \rx, \rx, #0xF0000000 @ clear GPIO46/47 config -+ orr \rx, \rx, #0x60000000 @ set GPIO46: AF2, GPIO47: AF1 -+ str \rx, [\rd] -+ ldr \rd, =0x40E00010 -+ ldr \rx, [\rd] -+ bic \rx, \rx, #0x0000c000 @ clear GPIO46/47 direction -+ orr \rx, \rx, #0x00008000 @ set GPIO 47 out, 46 in -+ str \rx, [\rd] -+ -+ addruart \rd -+ mov \rx, #0x83 @ DLAB = 1 -+ strb \rx, [\rd, #0x0c] -+ -+ mov \rx, #0x08 @ Divisor 8 => 115200 bps -+ strb \rx, [\rd, #0x00] -+ -+ mov \rx, #0x00 -+ strb \rx, [\rd, #0x04] @ Divisor high = 0 -+ -+ mov \rx, #0x03 -+ strb \rx, [\rd, #0x0c] @ DLAB = 0, n81 -+ -+ mov \rx, #0x00 -+ strb \rx, [\rd, #0x10] @ MCR = 0 -+ -+ mov \rx, #0x00 -+ strb \rx, [\rd, #0x28] @ disable autobaud -+ -+ mov \rx, #0x40 -+ strb \rx, [\rd, #0x04] @ IER UUE (UART Enable) - .endm - - #define UART_SHIFT 2 diff --git a/packages/linux/linux-ezx-2.6.23/patches/ezx-eoc.patch b/packages/linux/linux-ezx-2.6.23/patches/ezx-eoc.patch deleted file mode 100644 index c5597728c7..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/ezx-eoc.patch +++ /dev/null @@ -1,295 +0,0 @@ -Index: linux-2.6.23/arch/arm/mach-pxa/ezx-eoc.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx-eoc.c 2007-10-24 19:49:32.000000000 +0200 -@@ -0,0 +1,261 @@ -+/* -+ * EZX EOC Driver for Motorola EZX phones -+ * -+ * Copyright (C) 2007 Alex Zhang <celeber2@gmail.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/kernel.h> -+#include <linux/init.h> -+#include <linux/i2c.h> -+#include <linux/platform_device.h> -+ -+#include <asm/arch/hardware.h> -+#include <asm/arch/pxa-regs.h> -+#include <asm/arch/ezx.h> -+#include <asm/arch/udc.h> -+ -+#if 1 -+#define EOC_DBG printk -+#else -+#define EOC_DBG(x, args...) -+#endif -+ -+#define REG_INT_STATUS 32 -+#define REG_INT_MASK 33 -+#define REG_INT_SENSE 34 -+#define REG_POWER_CONTROL_0 35 -+#define REG_POWER_CONTROL_1 36 -+#define REG_CONN_CONTROL 37 -+ -+#define EOC_REG_ADDR_SIZE 1 -+#define EOC_REG_DATA_SIZE 3 -+#define EOC_FUNC_NOTHING 0 -+#define EOC_FUNC_USB_NET 1 -+ -+static const char eoc_i2c_driver_name[] = "ezx-eoc"; -+static int eoc_func = EOC_FUNC_USB_NET; -+static struct pxa2xx_udc_mach_info ezx_udc_info; -+ -+static int ezx_eoc_attach_adapter(struct i2c_adapter *adapter); -+static int ezx_eoc_detach_client(struct i2c_client *client); -+ -+static struct i2c_client *eoc_i2c_client = NULL; -+ -+static struct i2c_driver eoc_i2c_driver = { -+ .driver = { -+ .name = (char *)eoc_i2c_driver_name, -+ }, -+ .attach_adapter = ezx_eoc_attach_adapter, -+ .detach_client = ezx_eoc_detach_client, -+}; -+ -+int eoc_reg_read(int reg, unsigned int *reg_value) -+{ -+ unsigned char reg_num = reg; -+ unsigned char value[EOC_REG_DATA_SIZE]; -+ int retval; -+ -+ struct i2c_msg msgs[2] = -+ { -+ { eoc_i2c_client->addr, 0, EOC_REG_ADDR_SIZE, ®_num }, -+ { eoc_i2c_client->addr, I2C_M_RD, EOC_REG_DATA_SIZE, value } -+ }; -+ -+ /* transfer message to client */ -+ retval = i2c_transfer(eoc_i2c_client->adapter, msgs, 2); -+ if (retval < 0) -+ return retval; -+ -+ *reg_value = (value[2] << 0); -+ *reg_value |= (value[1] << 8); -+ *reg_value |= (value[0] << 16); -+ return 0; -+} -+ -+int eoc_reg_write(int reg, unsigned int reg_value) -+{ -+ unsigned char value[EOC_REG_ADDR_SIZE + EOC_REG_DATA_SIZE]; -+ int retval; -+ -+ /* Copy the data into a buffer into the correct format */ -+ value[0] = reg; -+ value[1] = (reg_value >> 16) & 0xFF; -+ value[2] = (reg_value >> 8) & 0xFF; -+ value[3] = (reg_value >> 0) & 0xFF; -+ -+ /* Write the data to the EOC */ -+ retval = i2c_master_send (eoc_i2c_client, value, EOC_REG_ADDR_SIZE + EOC_REG_DATA_SIZE); -+ if (retval < 0) -+ return retval; -+ return 0; -+} -+ -+static void eoc_switch_to_usb(void) -+{ -+ EOC_DBG("EOC: Switching to USB\n"); -+ pxa_gpio_mode(GPIO34_USB_P2_2_MD); -+ pxa_gpio_mode(GPIO35_USB_P2_1_MD); -+ pxa_gpio_mode(GPIO36_USB_P2_4_MD); -+ pxa_gpio_mode(GPIO39_USB_P2_6_MD); -+ pxa_gpio_mode(GPIO40_USB_P2_5_MD); -+ pxa_gpio_mode(GPIO53_USB_P2_3_MD); -+ UP2OCR = 0x02000000; -+ /* FIXME change eoc bits to USB */ -+ -+} -+ -+static void eoc_switch_to_nothing(void) -+{ -+ EOC_DBG("EOC: Switching do disconnected\n"); -+ pxa_gpio_mode(GPIO34_TXENB | GPIO_OUT); -+ set_GPIO(GPIO34_TXENB); -+ pxa_gpio_mode(GPIO35_XRXD | GPIO_IN); -+ pxa_gpio_mode(GPIO36_VMOUT | GPIO_IN); -+ pxa_gpio_mode(GPIO39_VPOUT | GPIO_IN); -+ pxa_gpio_mode(GPIO40_VPIN | GPIO_IN); -+ pxa_gpio_mode(GPIO53_VMIN | GPIO_IN); -+ /* FIXME disconnect mini usb port */ -+} -+ -+static void eoc_switch_to_default(void) -+{ -+ switch (eoc_func) { -+ case EOC_FUNC_USB_NET: -+ eoc_switch_to_usb(); -+ break; -+ case EOC_FUNC_NOTHING: -+ eoc_switch_to_nothing(); -+ break; -+ } -+} -+ -+static int ezx_eoc_attach_adapter(struct i2c_adapter *adapter) -+{ -+ int err = 0; -+ EOC_DBG(">>>>attach adapter enter\n"); -+ -+ if (eoc_i2c_client != NULL) { -+ EOC_DBG(">>>>already loaded!!!\n"); -+ return 0; -+ } -+ -+ if (!(eoc_i2c_client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL))) -+ return -ENOMEM; -+ -+ eoc_i2c_client->addr = 0x17; -+ eoc_i2c_client->adapter = adapter; -+ eoc_i2c_client->driver = &eoc_i2c_driver; -+ eoc_i2c_client->flags = 0; -+ strlcpy(eoc_i2c_client->name, eoc_i2c_driver_name, I2C_NAME_SIZE); -+ -+ if ((err = i2c_attach_client(eoc_i2c_client))) { -+ kfree(eoc_i2c_client); -+ eoc_i2c_client = NULL; -+ return err; -+ } -+ eoc_reg_write(REG_INT_MASK, 0x0000FEF); -+ eoc_reg_write(REG_POWER_CONTROL_0, 0x0000C00); -+ eoc_reg_write(REG_POWER_CONTROL_1, 0x000000C); -+ eoc_reg_write(REG_CONN_CONTROL,0x0021044); -+ -+ eoc_switch_to_default(); -+ EOC_DBG(">>>>attach adapter exit\n"); -+ return 0; -+ -+} -+ -+static int ezx_eoc_detach_client(struct i2c_client *client) -+{ -+ return i2c_detach_client(client); -+} -+ -+static int __init ezx_eoc_probe(struct platform_device *dev) -+{ -+ int ret; -+ -+ ret = i2c_add_driver(&eoc_i2c_driver); -+ if (ret != 0) -+ return -EINVAL; -+ -+ pxa_set_udc_info(&ezx_udc_info); -+ -+ return 0; -+} -+ -+static int ezx_eoc_remove(struct platform_device *dev) -+{ -+ i2c_del_driver(&eoc_i2c_driver); -+ return 0; -+} -+ -+static int ezx_eoc_suspend(struct platform_device *dev, pm_message_t state) -+{ -+ eoc_switch_to_nothing(); -+ return 0; -+} -+ -+static int ezx_eoc_resume(struct platform_device *dev) -+{ -+ eoc_switch_to_default(); -+ return 0; -+} -+ -+/* USB Device Controller */ -+static int udc_connected_status; -+static void ezx_udc_command(int cmd) -+{ -+ switch (cmd) { -+ case PXA2XX_UDC_CMD_DISCONNECT: -+ printk(KERN_NOTICE "USB cmd disconnect\n"); -+// ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_USB_PU,0); -+ udc_connected_status = 0; -+ break; -+ case PXA2XX_UDC_CMD_CONNECT: -+ printk(KERN_NOTICE "USB cmd connect\n"); -+// ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_USB_PU,1); -+ udc_connected_status = 1; -+ break; -+ } -+} -+ -+static int ezx_udc_is_connected(void) -+{ -+ return udc_connected_status; -+} -+ -+static struct pxa2xx_udc_mach_info ezx_udc_info __initdata = { -+ .udc_is_connected = ezx_udc_is_connected, -+ .udc_command = ezx_udc_command, -+}; -+ -+static struct platform_driver ezx_eoc_driver = { -+ .probe = ezx_eoc_probe, -+ .remove = ezx_eoc_remove, -+ .suspend = ezx_eoc_suspend, -+ .resume = ezx_eoc_resume, -+ .driver = { -+ .name = "ezx-eoc", -+ .owner = THIS_MODULE, -+ }, -+}; -+ -+int __init ezx_eoc_init(void) -+{ -+ return platform_driver_register(&ezx_eoc_driver); -+} -+ -+void ezx_eoc_exit(void) -+{ -+ return platform_driver_unregister(&ezx_eoc_driver); -+} -+ -+MODULE_AUTHOR("Alex Zhang <celeber2@gmail.com>"); -+MODULE_DESCRIPTION("EZX EOC I2C driver"); -+MODULE_LICENSE("GPL"); -+ -+module_init(ezx_eoc_init); -+module_exit(ezx_eoc_exit); -Index: linux-2.6.23/arch/arm/mach-pxa/Kconfig -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/Kconfig 2007-10-24 19:37:27.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/Kconfig 2007-10-24 19:37:27.000000000 +0200 -@@ -112,6 +112,12 @@ - config EZX_PCAP - bool "PCAP Support" - -+config EZX_EOC -+ tristate "EOC i2c driver of Motorola EZX phones" -+ depends on I2C && EXPERIMENTAL -+ help -+ EOC i2c driver of Motorola EZX phones -+ - config EZX_EMU - bool "Motorola Enchanced Mini Usb" - depends on EZX_PCAP -Index: linux-2.6.23/arch/arm/mach-pxa/Makefile -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/Makefile 2007-10-24 19:37:27.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/Makefile 2007-10-24 19:37:27.000000000 +0200 -@@ -28,6 +28,7 @@ - obj-$(CONFIG_EZX_BP) += ezx-bp.o - obj-$(CONFIG_EZX_PCAP) += ezx-pcap.o - obj-$(CONFIG_EZX_EMU) += ezx-emu.o -+obj-$(CONFIG_EZX_EOC) += ezx-eoc.o - - # Support for blinky lights - led-y := leds.o diff --git a/packages/linux/linux-ezx-2.6.23/patches/ezx-mtd-map.patch b/packages/linux/linux-ezx-2.6.23/patches/ezx-mtd-map.patch deleted file mode 100644 index 2dd45d2a17..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/ezx-mtd-map.patch +++ /dev/null @@ -1,309 +0,0 @@ -Index: linux-2.6.23/drivers/mtd/maps/Kconfig -=================================================================== ---- linux-2.6.23.orig/drivers/mtd/maps/Kconfig 2007-10-10 09:38:44.000000000 +0200 -+++ linux-2.6.23/drivers/mtd/maps/Kconfig 2007-10-22 22:19:57.000000000 +0200 -@@ -605,6 +605,34 @@ - help - This enables access to the flash chip on the Sharp SL Series of PDAs. - -+config MTD_EZX -+ tristate "Map driver for Motorola EZX Platform" -+ depends on MTD && PXA_EZX -+ -+if MTD_EZX -+ -+choice -+ prompt "Select partition mapping for EZX platform" -+ -+config MTD_EZX_A780 -+ bool "A780/E680 Original Mapping" -+ -+config MTD_EZX_A780_ALTERNATE -+ bool "A780/E680 Alternate Mapping for BLOB2" -+ -+config MTD_EZX_A1200 -+ bool "A1200 Original Mapping" -+ -+config MTD_EZX_E2 -+ bool "E2 Original Mapping" -+ -+config MTD_EZX_E6 -+ bool "E6 Original Mapping" -+ -+endchoice -+ -+endif -+ - config MTD_PLATRAM - tristate "Map driver for platform device RAM (mtd-ram)" - select MTD_RAM -Index: linux-2.6.23/drivers/mtd/maps/Makefile -=================================================================== ---- linux-2.6.23.orig/drivers/mtd/maps/Makefile 2007-10-10 09:38:44.000000000 +0200 -+++ linux-2.6.23/drivers/mtd/maps/Makefile 2007-10-22 22:19:57.000000000 +0200 -@@ -71,3 +71,4 @@ - obj-$(CONFIG_MTD_OMAP_NOR) += omap_nor.o - obj-$(CONFIG_MTD_MTX1) += mtx-1_flash.o - obj-$(CONFIG_MTD_TQM834x) += tqm834x.o -+obj-$(CONFIG_MTD_EZX) += ezx-flash.o -Index: linux-2.6.23/drivers/mtd/maps/ezx-flash.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/drivers/mtd/maps/ezx-flash.c 2007-10-22 22:19:57.000000000 +0200 -@@ -0,0 +1,256 @@ -+/* -+ * Map driver for the PXA27x -+ * -+ * Author: Harald Welte -+ * Copyright: (C) 2001 MontaVista Software Inc. -+ * -+ * 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/types.h> -+#include <linux/kernel.h> -+#include <linux/init.h> -+#include <linux/dma-mapping.h> -+#include <linux/slab.h> -+ -+#include <linux/mtd/mtd.h> -+#include <linux/mtd/map.h> -+#include <linux/mtd/partitions.h> -+ -+#include <asm/io.h> -+#include <asm/hardware.h> -+#include <asm/cacheflush.h> -+#include <asm/arch/pxa-regs.h> -+#include <asm/arch/mainstone.h> -+ -+#define WINDOW_ADDR 0x0 -+#define WINDOW_SIZE (32*1024*1024) -+#define WINDOW_CACHE_ADDR 0x0 -+#define WINDOW_CACHE_SIZE 0x1a00000 -+ -+static void pxa27x_map_inval_cache(struct map_info *map, unsigned long from, -+ ssize_t len) -+{ -+ flush_ioremap_region(map->phys, map->cached, from, len); -+} -+ -+ -+struct map_info pxa27x_map = { -+ .name = "PXA27x flash", -+ .size = WINDOW_SIZE, -+ .phys = WINDOW_ADDR, -+ .inval_cache = &pxa27x_map_inval_cache, -+}; -+ -+#if defined CONFIG_MTD_EZX_A780_ALTERNATE -+static struct mtd_partition pxa27x_partitions[] = { -+ { -+ .name = "Bootloader (RO)", -+ .size = 0x00020000, -+ .offset = 0, -+ .mask_flags = MTD_WRITEABLE, -+ }, { -+ .name = "Bootloader 2", -+ .size = 0x00020000, -+ .offset = 0x00020000, -+ } , { -+ .name = "Moto Kernel", -+ .size = 0x000e0000, // 896KB -+ .offset = 0x00040000, -+ } , { -+ .name = "rootfs", -+ .size = 0x01760000, -+ .offset = 0x00120000, -+ } , { -+ .name = "OpenEZX Kernel", -+ .size = 0x00180000, // 1.5MB -+ .offset = 0x01880000, -+ } , { -+ .name = "ezxlocal", -+ .size = 0x005a0000, -+ .offset = 0x01a00000, -+ } , { -+ .name = "setup", -+ .size = 0x00020000, -+ .offset = 0x01fa0000, -+ } , { -+ .name = "Logo", -+ .size = 0x00020000, -+ .offset = 0x01fc0000, -+ }, -+}; -+#elif defined CONFIG_MTD_EZX_A780 -+static struct mtd_partition pxa27x_partitions[] = { -+ { -+ .name = "Bootloader", -+ .size = 0x00020000, -+ .offset = 0, -+ .mask_flags = MTD_WRITEABLE, -+ }, { -+ .name = "Kernel", -+ .size = 0x000e0000, -+ .offset = 0x00020000, -+ } , { -+ .name = "rootfs", -+ .size = 0x018e0000, -+ .offset = 0x00120000, -+ } , { -+ .name = "VFM_Filesystem", -+ .size = 0x00580000, -+ .offset = 0x01a00000, -+ } , { -+ .name = "setup", -+ .size = 0x00020000, -+ .offset = 0x01fa0000, -+ } , { -+ .name = "Logo", -+ .size = 0x00020000, -+ .offset = 0x01fc0000, -+ }, -+}; -+#elif defined CONFIG_MTD_EZX_A1200 -+static struct mtd_partition pxa27x_partitions[] = { -+ { -+ .name = "Caddo 2", -+ .size = 0x00008000, -+ .offset = 0, -+ }, { -+ .name = "Itunes", -+ .size = 0x00008000, -+ .offset = 0x00008000, -+ }, { -+ .name = "Caddo 1", -+ .size = 0x00008000, -+ .offset = 0x00010000, -+ }, { -+ .name = "Fota rev", -+ .size = 0x00008000, -+ .offset = 0x00018000, -+ }, { -+ .name = "MBM", -+ .size = 0x00040000, -+ .offset = 0x00020000, -+ .mask_flags = MTD_WRITEABLE, -+ }, { -+ .name = "Blob", -+ .size = 0x00020000, -+ .offset = 0x00080000, -+ .mask_flags = MTD_WRITEABLE, -+ }, { -+ .name = "Kernel", -+ .size = 0x00100000, -+ .offset = 0x000A0000, -+ } , { -+ .name = "UserFS DB", -+ .size = 0x00600000, -+ .offset = 0x00AA0000, -+ }, { -+ .name = "UserFS", -+ .size = 0x007E0000, -+ .offset = 0x010A0000, -+ }, { -+ .name = "Test cmd", -+ .size = 0x00020000, -+ .offset = 0x018C0000, -+ } , { -+ .name = "Logo", -+ .size = 0x00020000, -+ .offset = 0x018E0000, -+ } , { -+ .name = "Fota", -+ .size = 0x000c0000, -+ .offset = 0x01900000, -+ }, { -+ .name = "Reserve", -+ .size = 0x00020000, -+ .offset = 0x019c0000, -+ } -+}; -+#else -+#error "please define partition for this PXA27x implementation" -+#endif -+ -+ -+static struct mtd_info *mymtd; -+static struct mtd_partition *parsed_parts; -+ -+static const char *probes[] = { "RedBoot", "cmdlinepart", NULL }; -+ -+static int __init init_pxa27x(void) -+{ -+ struct mtd_partition *parts; -+ int nb_parts = 0; -+ int parsed_nr_parts = 0; -+ char *part_type = "static"; -+ -+ pxa27x_map.bankwidth = (BOOT_DEF & 1) ? 2 : 4; -+ -+ printk("Probing PXA27x flash at physical address 0x%08x (%d-bit bankwidth)\n", -+ WINDOW_ADDR, pxa27x_map.bankwidth * 8); -+ pxa27x_map.virt = ioremap(pxa27x_map.phys, pxa27x_map.size); -+ -+ if (!pxa27x_map.virt) { -+ printk("Failed to ioremap\n"); -+ return -EIO; -+ } -+ -+ mymtd = do_map_probe("cfi_probe", &pxa27x_map); -+ if (!mymtd) { -+ iounmap((void *)pxa27x_map.virt); -+ return -ENXIO; -+ } -+ mymtd->owner = THIS_MODULE; -+ -+ simple_map_init(&pxa27x_map); -+ -+ if (parsed_nr_parts == 0) { -+ int ret = parse_mtd_partitions(mymtd, probes, &parsed_parts, 0); -+ -+ if (ret > 0) { -+ part_type = "RedBoot"; -+ parsed_nr_parts = ret; -+ } -+ } -+ -+ if (parsed_nr_parts > 0) { -+ parts = parsed_parts; -+ nb_parts = parsed_nr_parts; -+ } else { -+ parts = pxa27x_partitions; -+ nb_parts = ARRAY_SIZE(pxa27x_partitions); -+ } -+ -+ if (nb_parts) { -+ printk(KERN_NOTICE "Using %s partition definition\n", part_type); -+ add_mtd_partitions(mymtd, parts, nb_parts); -+ } else { -+ add_mtd_device(mymtd); -+ } -+ return 0; -+} -+ -+static void __exit cleanup_pxa27x(void) -+{ -+ if (mymtd) { -+ del_mtd_partitions(mymtd); -+ map_destroy(mymtd); -+ if (parsed_parts) -+ kfree(parsed_parts); -+ } -+ if (pxa27x_map.virt) -+ iounmap((void *)pxa27x_map.virt); -+ if (pxa27x_map.cached) -+ iounmap((void *)pxa27x_map.cached); -+ return; -+} -+ -+module_init(init_pxa27x); -+module_exit(cleanup_pxa27x); -+ -+MODULE_LICENSE("GPL"); -+MODULE_AUTHOR("Harald Welte <laforge@gnumonks.org>"); -+MODULE_DESCRIPTION("MTD map driver for Motorola EZX platform"); diff --git a/packages/linux/linux-ezx-2.6.23/patches/ezx-pcap.patch b/packages/linux/linux-ezx-2.6.23/patches/ezx-pcap.patch deleted file mode 100644 index c917d4aa9e..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/ezx-pcap.patch +++ /dev/null @@ -1,849 +0,0 @@ -Index: linux-2.6.23/arch/arm/mach-pxa/ezx-pcap.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx-pcap.c 2007-10-23 15:41:22.000000000 +0200 -@@ -0,0 +1,513 @@ -+/* Driver for Motorola PCAP2 as present in EZX phones -+ * -+ * This is both a SPI device driver for PCAP itself, as well as -+ * an IRQ demultiplexer for handling PCAP generated events such as -+ * headphone jack sense by downstream drivers. -+ * -+ * Copyright (C) 2006 Harald Welte <laforge@openezx.org> -+ * Copyright (C) 2007 Daniel Ribeiro <drwyrm@gmail.com> -+ * -+ */ -+ -+#include <linux/module.h> -+#include <linux/kernel.h> -+#include <linux/platform_device.h> -+#include <linux/interrupt.h> -+#include <linux/kernel_stat.h> -+#include <linux/proc_fs.h> -+ -+#include <asm/hardware.h> -+#include <asm/mach-types.h> -+ -+#include <asm/arch/ezx.h> -+#include <asm/arch/ssp.h> -+#include <asm/arch/pxa-regs.h> -+#include <asm/arch/ezx-pcap.h> -+#include <asm/arch/irqs.h> -+#include <asm/mach/irq.h> -+ -+#if 0 -+#define DEBUGP(x, args...) printk(x, ## args) -+#else -+#define DEBUGP(x, args...) -+#endif -+ -+static DEFINE_SPINLOCK(ezx_ssp_lock); -+static struct ssp_dev ezx_ssp_dev; -+static struct ssp_state ezx_ssp_state; -+static struct pcap_platform_data *pcap_data; -+static int pcap_irq; -+ -+static unsigned long ezx_ssp_pcap_putget(ulong data) -+{ -+ unsigned long flag; -+ u32 ret = 0; -+ -+ spin_lock_irqsave(&ezx_ssp_lock, flag); -+ if (pcap_data->cs >= 0) { -+ if (pcap_data->flags & PCAP_CS_AH) -+ GPSR(pcap_data->cs) = GPIO_bit(pcap_data->cs); -+ else -+ GPCR(pcap_data->cs) = GPIO_bit(pcap_data->cs); -+ } -+ -+ ssp_write_word(&ezx_ssp_dev,data); -+ ssp_read_word(&ezx_ssp_dev, &ret); -+ -+ if (pcap_data->cs >= 0) { -+ if(pcap_data->flags & PCAP_CS_AH) -+ GPCR(pcap_data->cs) = GPIO_bit(pcap_data->cs); -+ else -+ GPSR(pcap_data->cs) = GPIO_bit(pcap_data->cs); -+ } -+ -+ spin_unlock_irqrestore(&ezx_ssp_lock, flag); -+ -+ return ret; -+} -+ -+int ezx_pcap_write(u_int8_t reg_num, u_int32_t value) -+{ -+ value &= PCAP_REGISTER_VALUE_MASK; -+ value |= PCAP_REGISTER_WRITE_OP_BIT -+ | (reg_num<<PCAP_REGISTER_ADDRESS_SHIFT); -+ -+ ezx_ssp_pcap_putget(value); -+ -+ DEBUGP("pcap write r%x: 0x%08x\n", reg_num, value); -+ return 0; -+} -+EXPORT_SYMBOL_GPL(ezx_pcap_write); -+ -+int ezx_pcap_read(u_int8_t reg_num, u_int32_t *value) -+{ -+ u_int32_t frame = PCAP_REGISTER_READ_OP_BIT -+ | (reg_num<<PCAP_REGISTER_ADDRESS_SHIFT); -+ -+ *value = ezx_ssp_pcap_putget(frame); -+ -+ DEBUGP("pcap read r%x: 0x%08x\n", reg_num, *value); -+ return 0; -+} -+EXPORT_SYMBOL_GPL(ezx_pcap_read); -+ -+int ezx_pcap_bit_set(u_int32_t sspPcapBit, u_int8_t to) -+{ -+ int ret; -+ u_int32_t tmp; -+ u_int32_t bit = (sspPcapBit & PCAP_REGISTER_VALUE_MASK); -+ u_int8_t reg_num = (sspPcapBit & PCAP_REGISTER_ADDRESS_MASK) -+ >> PCAP_REGISTER_ADDRESS_SHIFT; -+ -+ ret = ezx_pcap_read(reg_num, &tmp); -+ if (ret < 0) -+ return ret; -+ -+ if (to == 0) -+ tmp &= ~bit; -+ else -+ tmp |= bit; -+ -+ return ezx_pcap_write(reg_num, tmp); -+} -+EXPORT_SYMBOL_GPL(ezx_pcap_bit_set); -+ -+int ezx_pcap_read_bit(u_int32_t bit) -+{ -+ int ret; -+ u_int32_t tmp; -+ u_int8_t reg_num = (bit & PCAP_REGISTER_ADDRESS_MASK) -+ >> PCAP_REGISTER_ADDRESS_SHIFT; -+ -+ ret = ezx_pcap_read(reg_num, &tmp); -+ if (ret < 0) -+ return ret; -+ -+ return tmp & (bit & PCAP_REGISTER_VALUE_MASK); -+} -+EXPORT_SYMBOL_GPL(ezx_pcap_read_bit); -+ -+/* /proc/pcap support */ -+#ifdef CONFIG_PROC_FS -+ -+static struct proc_dir_entry *proc_pcap; -+ -+char *pcap_registers[] = { -+ "ISR\t", "MSR\t", "PSTAT\t", "INT_SEL\t", "SWCTRL\t", "VREG1\t", -+ "VREG2\t", "VREG\t", "BATT_DAC", "ADC1\t", "ADC2\t", "AUD_CODEC", -+ "RX_AUD_AMPS", "ST_DAC\t", "RTC_TOD\t", "RTC_TODA", "RTC_DAY\t", -+ "RTC_DAYA", "MTRTMR\t", "PWRCTRL\t", "BUSCTRL\t", "PERIPH\t", -+ "AUXVREG_MASK", "VENDOR_REV", "LOWPWR_CTRL", "PERIPH_MASK", -+ "TX_AUD_AMPS", "GP\t", -+ NULL, NULL, NULL, NULL -+}; -+ -+static int pcap_read_proc(char *page, char **start, off_t off, int count, -+ int *eof, void *data_unused) -+{ -+ int len = 0; -+ u_int8_t r; -+ u_int32_t v; -+ off_t begin = 0; -+ -+ for(r=0;r<32;r++) { -+ if (pcap_registers[r] == NULL) -+ continue; -+ ezx_pcap_read(r, &v); -+ len += sprintf(page+len, "%s\t%08X\n", pcap_registers[r], v); -+ if(len + begin > off + count) -+ goto done; -+ if(len + begin < off) { -+ begin += len; -+ len = 0; -+ } -+ } -+ *eof = 1; -+done: -+ if (off >= len+begin) -+ return 0; -+ *start = page + (off-begin); -+ return ((count < begin+len-off) ? count : begin+len-off); -+} -+#endif -+ -+void ezx_pcap_vibrator_level(u_int32_t value) -+{ -+ u_int32_t tmp; -+ -+ ezx_pcap_read(PCAP_REG_AUXVREG, &tmp); -+ -+ tmp &= ~PCAP_AUXVREG_V_VIB_MASK; -+ tmp |= ((value << PCAP_AUXVREG_V_VIB_SHIFT) & PCAP_AUXVREG_V_VIB_MASK); -+ -+ ezx_pcap_write(PCAP_REG_AUXVREG, tmp); -+} -+EXPORT_SYMBOL_GPL(ezx_pcap_vibrator_level); -+ -+/* MMC/SD specific functions */ -+ -+void ezx_pcap_mmcsd_voltage(u_int32_t bits) -+{ -+ unsigned int tmp; -+ ezx_pcap_read(PCAP_REG_AUXVREG, &tmp); -+ if (pcap_data->flags & PCAP_MCI_SD) { -+ tmp &= ~PCAP_AUXVREG_VAUX2_MASK; -+ tmp |= ((bits << PCAP_AUXVREG_VAUX2_SHIFT) & -+ PCAP_AUXVREG_VAUX2_MASK); -+ } -+ else if (pcap_data->flags & PCAP_MCI_TF) { -+ tmp &= ~PCAP_AUXVREG_VAUX3_MASK; -+ tmp |= ((bits << PCAP_AUXVREG_VAUX3_SHIFT) & -+ PCAP_AUXVREG_VAUX3_MASK); -+ } -+ ezx_pcap_write(PCAP_REG_AUXVREG, tmp); -+} -+EXPORT_SYMBOL(ezx_pcap_mmcsd_voltage); -+ -+int ezx_pcap_mmcsd_power(int on) -+{ -+ if (on > 0) on = 1; -+ else on = 0; -+ -+ if (pcap_data->flags & PCAP_MCI_SD) -+ return ezx_pcap_bit_set(PCAP_BIT_AUXVREG_VAUX2_EN, on); -+ else if (pcap_data->flags & PCAP_MCI_TF) -+ return ezx_pcap_bit_set(PCAP_BIT_AUXVREG_VAUX3_EN, on); -+ else -+ return -ENODEV; -+} -+EXPORT_SYMBOL_GPL(ezx_pcap_mmcsd_power); -+ -+/* IRQ Handling */ -+ -+/* Array indexed by BIT POSITION of PCAP register, returns IRQ number */ -+static unsigned int pcap2irq[] = { -+ [0] = EZX_IRQ_ADCDONE, -+ [1] = EZX_IRQ_TS, -+ [2] = EZX_IRQ_1HZ, /* 1HZ */ -+ [3] = EZX_IRQ_WH, /* WH */ -+ [4] = EZX_IRQ_WL, /* WL */ -+ [5] = EZX_IRQ_TODA, /* TODA */ -+ [6] = EZX_IRQ_USB4V, -+ [7] = EZX_IRQ_ONOFF, /* ONOFF */ -+ [8] = EZX_IRQ_ONOFF2, /* ONOFF2 */ -+ [9] = EZX_IRQ_USB1V, -+ [10] = EZX_IRQ_MOBPORT, /* MOBPORT */ -+ [11] = EZX_IRQ_MIC, -+ [12] = EZX_IRQ_HEADJACK, -+ [13] = EZX_IRQ_ST, /* ST */ -+ [14] = EZX_IRQ_PC, /* PC */ -+ [15] = EZX_IRQ_WARM, /* WARM */ -+ [16] = EZX_IRQ_EOL, /* EOL */ -+ [17] = EZX_IRQ_CLK, /* CLK */ -+ [18] = EZX_IRQ_SYSRST, /* SYSRST */ -+ [19] = 0, -+ [20] = EZX_IRQ_ADCDONE2, -+ [21] = EZX_IRQ_SOFTRESET, /* SOFTRESET */ -+ [22] = EZX_IRQ_MNEXB, /* MNEXB */ -+}; -+ -+/* Array indexed by IRQ NUMBER, returns PCAP absolute value */ -+static unsigned int irq2pcap[] = { -+ [EZX_IRQ_MNEXB] = PCAP_IRQ_MNEXB, -+ [EZX_IRQ_SOFTRESET] = PCAP_IRQ_SOFTRESET, -+ [EZX_IRQ_SYSRST] = PCAP_IRQ_SYSRST, -+ [EZX_IRQ_CLK] = PCAP_IRQ_CLK, -+ [EZX_IRQ_EOL] = PCAP_IRQ_EOL, -+ [EZX_IRQ_WARM] = PCAP_IRQ_WARM, -+ [EZX_IRQ_PC] = PCAP_IRQ_PC, -+ [EZX_IRQ_ST] = PCAP_IRQ_ST, -+ [EZX_IRQ_MOBPORT] = PCAP_IRQ_MOBPORT, -+ [EZX_IRQ_ONOFF2] = PCAP_IRQ_ONOFF2, -+ [EZX_IRQ_ONOFF] = PCAP_IRQ_ONOFF, -+ [EZX_IRQ_TODA] = PCAP_IRQ_TODA, -+ [EZX_IRQ_WL] = PCAP_IRQ_WL, -+ [EZX_IRQ_WH] = PCAP_IRQ_WH, -+ [EZX_IRQ_1HZ] = PCAP_IRQ_1HZ, -+ [EZX_IRQ_USB4V] = PCAP_IRQ_USB4V, -+ [EZX_IRQ_USB1V] = PCAP_IRQ_USB1V, -+ [EZX_IRQ_HEADJACK] = PCAP_IRQ_A1, -+ [EZX_IRQ_MIC] = PCAP_IRQ_MB2, -+ [EZX_IRQ_TS] = PCAP_IRQ_TS, -+ [EZX_IRQ_ADCDONE] = PCAP_IRQ_ADCDONE, -+ [EZX_IRQ_ADCDONE2] = PCAP_IRQ_ADCDONE2, -+}; -+ -+static void pcap_ack_irq(unsigned int irq) -+{ -+ DEBUGP("pcap_ack_irq: %u\n", irq); -+ ezx_pcap_write(PCAP_REG_ISR, irq2pcap[irq]); -+} -+ -+static void pcap_mask_irq(unsigned int irq) -+{ -+ u_int32_t reg; -+ unsigned long flag; -+ -+ spin_lock_irqsave(&ezx_ssp_lock, flag); -+ DEBUGP("pcap_mask_irq: %u\n", irq); -+ ezx_pcap_read(PCAP_REG_MSR, ®); -+ reg |= irq2pcap[irq]; -+ ezx_pcap_write(PCAP_REG_MSR, reg); -+ spin_unlock_irqrestore(&ezx_ssp_lock, flag); -+} -+ -+static void pcap_unmask_irq(unsigned int irq) -+{ -+ u_int32_t tmp; -+ unsigned long flag; -+ -+ spin_lock_irqsave(&ezx_ssp_lock, flag); -+ DEBUGP("pcap_unmask_irq: %u\n", irq); -+ ezx_pcap_read(PCAP_REG_MSR, &tmp); -+ tmp &= ~irq2pcap[irq]; -+ ezx_pcap_write(PCAP_REG_MSR, tmp); -+ spin_unlock_irqrestore(&ezx_ssp_lock, flag); -+} -+ -+static struct irq_chip pcap_chip = { -+ .ack = pcap_ack_irq, -+ .mask = pcap_mask_irq, -+ .unmask = pcap_unmask_irq, -+}; -+ -+/* handler for interrupt received from PCAP via GPIO */ -+static void pcap_irq_demux_handler(unsigned int irq, struct irq_desc *desc) -+{ -+ const unsigned int cpu = smp_processor_id(); -+ int i; -+ u_int32_t isr, msr; -+ -+ spin_lock(&desc->lock); -+ desc->status &= ~(IRQ_REPLAY | IRQ_WAITING); -+ if (unlikely(desc->status & (IRQ_INPROGRESS | IRQ_DISABLED))) { -+ desc->status |= (IRQ_PENDING | IRQ_MASKED); -+ desc->chip->mask(irq); -+ desc->chip->ack(irq); -+ goto out_unlock; -+ } -+ kstat_cpu(cpu).irqs[irq]++; -+ desc->chip->ack(irq); -+ desc->status |= IRQ_INPROGRESS; -+ do { -+ if (unlikely((desc->status & -+ (IRQ_PENDING | IRQ_MASKED | IRQ_DISABLED)) == -+ (IRQ_PENDING | IRQ_MASKED))) { -+ desc->chip->unmask(irq); -+ desc->status &= ~IRQ_MASKED; -+ } -+ desc->status &= ~IRQ_PENDING; -+ -+ ezx_pcap_read(PCAP_REG_ISR, &isr); -+ ezx_pcap_read(PCAP_REG_MSR, &msr); -+ for (i = ARRAY_SIZE(pcap2irq)-1; i >= 0; i--) { -+ unsigned int pirq = pcap2irq[i]; -+ struct irq_desc *subdesc; -+ if (pirq == 0 || !(isr & irq2pcap[pirq])) -+ continue; -+ subdesc = irq_desc + pirq; -+ if (msr & irq2pcap[pirq]) -+ continue; -+ DEBUGP("found irq %u\n", pirq); -+ spin_unlock(&desc->lock); -+ desc_handle_irq(pirq, subdesc); -+ spin_lock(&desc->lock); -+ } -+ -+ } while ((desc->status & (IRQ_PENDING | IRQ_DISABLED)) == IRQ_PENDING); -+ -+ desc->status &= ~IRQ_INPROGRESS; -+out_unlock: -+ spin_unlock(&desc->lock); -+} -+ -+static int ezx_pcap_remove(struct platform_device *pdev) -+{ -+ int irq; -+ DEBUGP("exz_pcap_remove entered\n"); -+ -+ set_irq_chained_handler(pcap_irq, NULL); -+ -+ for (irq = EZX_IRQ(0); irq <= EZX_IRQ(21); irq++) { -+ set_irq_chip(irq, NULL); -+ set_irq_handler(irq, NULL); -+ set_irq_flags(irq, 0); -+ } -+ -+ ssp_exit(&ezx_ssp_dev); -+ -+ return 0; -+} -+ -+static int __init ezx_pcap_probe(struct platform_device *pdev) -+{ -+ unsigned int ret, irq; -+ DEBUGP("ezx_pcap_probe entered\n"); -+ -+ pcap_data = pdev->dev.platform_data; -+ -+ /* configure ssp port */ -+ pxa_gpio_mode(29|GPIO_ALT_FN_3_OUT); -+ pxa_gpio_mode(GPIO24_SFRM_MD); -+ pxa_gpio_mode(GPIO25_STXD_MD); -+ pxa_gpio_mode(GPIO26_SRXD_MD); -+ -+ if (pcap_data->cs >= 0) { -+ if (pcap_data->flags & PCAP_CS_AH) -+ pxa_gpio_mode(pcap_data->cs | GPIO_OUT); -+ else -+ pxa_gpio_mode(pcap_data->cs | GPIO_OUT -+ | GPIO_DFLT_HIGH); -+ } -+ pcap_irq = platform_get_irq(pdev, 0); -+ if(pcap_irq < 0) { -+ printk(KERN_ERR "Unable to get IRQ for pcap!\n"); -+ return pcap_irq; -+ } -+ -+ ret = ssp_init(&ezx_ssp_dev, pcap_data->port, 0); -+ if (ret) { -+ printk(KERN_ERR "Unable to register SSP handler!\n"); -+ return ret; -+ } -+ -+ ssp_disable(&ezx_ssp_dev); -+ ssp_config(&ezx_ssp_dev, -+ (SSCR0_Motorola | SSCR0_DataSize(16) | SSCR0_EDSS), -+ (SSCR1_TxTresh(1) | SSCR1_RxTresh(1)), -+ 0, SSCR0_SerClkDiv(pcap_data->clk)); -+ ssp_enable(&ezx_ssp_dev); -+ -+ /* mask/ack all PCAP interrupts */ -+ ezx_pcap_write(PCAP_REG_MSR, PCAP_MASK_ALL_INTERRUPT); -+ ezx_pcap_write(PCAP_REG_ISR, PCAP_CLEAR_INTERRUPT_REGISTER); -+ -+ if (pcap_data->init) -+ pcap_data->init(); -+ -+ /* set up interrupt demultiplexing code for PCAP2 irqs */ -+ set_irq_type(pcap_irq, IRQT_RISING); -+ for (irq = EZX_IRQ(0); irq <= EZX_IRQ(21); irq++) { -+ set_irq_chip(irq, &pcap_chip); -+ set_irq_handler(irq, handle_level_irq); -+ set_irq_flags(irq, IRQF_VALID); -+ } -+ set_irq_chained_handler(pcap_irq, pcap_irq_demux_handler); -+ set_irq_wake(pcap_irq, 1); -+ -+ printk("ezx-pcap: ssp driver registered\n"); -+ return ret; -+} -+ -+static int ezx_pcap_suspend(struct platform_device *dev, pm_message_t state) -+{ -+ DEBUGP("pcap suspend!\n"); -+ ssp_flush(&ezx_ssp_dev); -+ ssp_save_state(&ezx_ssp_dev, &ezx_ssp_state); -+ if (pcap_data->cs >= 0) -+ pxa_gpio_mode(pcap_data->cs | GPIO_IN); -+ return 0; -+} -+ -+static int ezx_pcap_resume(struct platform_device *dev) -+{ -+ DEBUGP("pcap resume!\n"); -+ -+ if (pcap_data->cs >= 0) { -+ if (pcap_data->flags & PCAP_CS_AH) { -+ pxa_gpio_mode(pcap_data->cs | GPIO_OUT); -+ GPCR(pcap_data->cs) = GPIO_bit(pcap_data->cs); -+ } -+ else { -+ pxa_gpio_mode(pcap_data->cs | GPIO_OUT | GPIO_DFLT_HIGH); -+ GPSR(pcap_data->cs) = GPIO_bit(pcap_data->cs); -+ } -+ } -+ ssp_restore_state(&ezx_ssp_dev,&ezx_ssp_state); -+ ssp_enable(&ezx_ssp_dev); -+ -+ ezx_pcap_write(PCAP_REG_ISR, PCAP_CLEAR_INTERRUPT_REGISTER); -+ -+ return 0; -+} -+ -+static struct platform_driver ezxpcap_driver = { -+ .probe = ezx_pcap_probe, -+ .remove = ezx_pcap_remove, -+ .suspend = ezx_pcap_suspend, -+ .resume = ezx_pcap_resume, -+ .driver = { -+ .name = "ezx-pcap", -+ .owner = THIS_MODULE, -+ }, -+}; -+ -+static int __init ezx_pcap_init(void) -+{ -+ DEBUGP("ezx_pcap_init entered\n"); -+ -+#ifdef CONFIG_PROC_FS -+ if((proc_pcap = create_proc_entry("pcap", 0, NULL))) -+ proc_pcap->read_proc = pcap_read_proc; -+#endif -+ -+ return platform_driver_register(&ezxpcap_driver); -+} -+ -+static void __exit ezx_pcap_exit(void) -+{ -+#ifdef CONFIG_PROC_FS -+ if (proc_pcap) -+ remove_proc_entry("pcap", NULL); -+#endif -+ -+ return platform_driver_unregister(&ezxpcap_driver); -+} -+ -+module_init(ezx_pcap_init); -+module_exit(ezx_pcap_exit); -+ -+MODULE_LICENSE("GPL"); -+MODULE_AUTHOR("Harald Welte"); -+MODULE_DESCRIPTION("SPI Driver for Motorola PCAP2"); -+ -Index: linux-2.6.23/include/asm-arm/arch-pxa/ezx-pcap.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/include/asm-arm/arch-pxa/ezx-pcap.h 2007-10-23 15:41:20.000000000 +0200 -@@ -0,0 +1,248 @@ -+/* -+ * Copyright 2007 Daniel Ribeiro <drwyrm@gmail.com> -+ */ -+ -+#ifndef EZX_PCAP_H -+#define EZX_PCAP_H -+ -+struct pcap_platform_data { -+ int port; /* SSP port */ -+ int cs; /* CS gpio */ -+ int clk; -+ int flags; /* driver flags */ -+ int (*init)(void); /* board specific driver init */ -+}; -+ -+/* driver configuration */ -+#define PCAP_CS_AH (1 << 0) /* CS pin is active high */ -+#define PCAP_MCI_SD (1 << 1) /* SD card slot */ -+#define PCAP_MCI_TF (1 << 2) /* TF card slot */ -+ -+#define PCAP_REGISTER_WRITE_OP_BIT 0x80000000 -+#define PCAP_REGISTER_READ_OP_BIT 0x00000000 -+ -+#define PCAP_REGISTER_VALUE_MASK 0x01ffffff -+#define PCAP_REGISTER_ADDRESS_MASK 0x7c000000 -+#define PCAP_REGISTER_ADDRESS_SHIFT 26 -+#define PCAP_REGISTER_NUMBER 32 -+#define PCAP_CLEAR_INTERRUPT_REGISTER 0x01ffffff -+#define PCAP_MASK_ALL_INTERRUPT 0x01ffffff -+ -+ -+#define pbit(reg, bit) ((reg << PCAP_REGISTER_ADDRESS_SHIFT) | bit) -+ -+/* registers acessible by both pcap ports */ -+#define PCAP_REG_ISR 0x0 /* Interrupt Status */ -+#define PCAP_REG_MSR 0x1 /* Interrupt Mask */ -+#define PCAP_REG_PSTAT 0x2 /* Processor Status */ -+#define PCAP_REG_VREG2 0x6 /* Regulator Bank 2 Control */ -+#define PCAP_REG_AUXVREG 0x7 /* Auxiliary Regulator Control */ -+#define PCAP_REG_BATT 0x8 /* Battery Control */ -+#define PCAP_REG_ADC1 0x9 /* AD Control */ -+#define PCAP_REG_ADC2 0xa /* AD Result */ -+#define PCAP_REG_CODEC 0xb /* Audio Codec Control */ -+#define PCAP_REG_RX_AMPS 0xc /* RX Audio Amplifiers Control */ -+#define PCAP_REG_ST_DAC 0xd /* Stereo DAC Control */ -+#define PCAP_REG_BUSCTRL 0x14 /* Connectivity Control */ -+#define PCAP_REG_PERIPH 0x15 /* Peripheral Control */ -+#define PCAP_REG_LOWPWR 0x18 /* Regulator Low Power Control */ -+#define PCAP_REG_TX_AMPS 0x1a /* TX Audio Amplifiers Control */ -+#define PCAP_REG_GP 0x1b /* General Purpose */ -+ -+/* registers acessible by pcap port 1 only (a1200, e2 & e6) */ -+#define PCAP_REG_INT_SEL 0x3 /* Interrupt Select */ -+#define PCAP_REG_SWCTRL 0x4 /* Switching Regulator Control */ -+#define PCAP_REG_VREG1 0x5 /* Regulator Bank 1 Control */ -+#define PCAP_REG_RTC_TOD 0xe /* RTC Time of Day */ -+#define PCAP_REG_RTC_TODA 0xf /* RTC Time of Day Alarm */ -+#define PCAP_REG_RTC_DAY 0x10 /* RTC Day */ -+#define PCAP_REG_RTC_DAYA 0x11 /* RTC Day Alarm */ -+#define PCAP_REG_MTRTMR 0x12 /* AD Monitor Timer */ -+#define PCAP_REG_PWR 0x13 /* Power Control */ -+#define PCAP_REG_AUXVREG_MASK 0x16 /* Auxiliary Regulator Mask */ -+#define PCAP_REG_VENDOR_REV 0x17 -+#define PCAP_REG_PERIPH_MASK 0x19 /* Peripheral Mask */ -+ -+/* interrupts - registers 0, 1, 2, 3 */ -+#define PCAP_IRQ_ADCDONE (1 << 0) /* AD Conversion Done Port 1 */ -+#define PCAP_IRQ_TS (1 << 1) /* Touch Screen */ -+#define PCAP_IRQ_1HZ (1 << 2) /* 1HZ Timer */ -+#define PCAP_IRQ_WH (1 << 3) -+#define PCAP_IRQ_WL (1 << 4) -+#define PCAP_IRQ_TODA (1 << 5) -+#define PCAP_IRQ_USB4V (1 << 6) -+#define PCAP_IRQ_ONOFF (1 << 7) -+#define PCAP_IRQ_ONOFF2 (1 << 8) -+#define PCAP_IRQ_USB1V (1 << 9) -+#define PCAP_IRQ_MOBPORT (1 << 10) -+#define PCAP_IRQ_MB2 (1 << 11) /* Mic */ -+#define PCAP_IRQ_A1 (1 << 12) /* Audio jack */ -+#define PCAP_IRQ_ST (1 << 13) -+#define PCAP_IRQ_PC (1 << 14) -+#define PCAP_IRQ_WARM (1 << 15) -+#define PCAP_IRQ_EOL (1 << 16) -+#define PCAP_IRQ_CLK (1 << 17) -+#define PCAP_IRQ_SYSRST (1 << 18) -+#define PCAP_IRQ_ADCDONE2 (1 << 20) /* AD Conversion Done Port 2 */ -+#define PCAP_IRQ_SOFTRESET (1 << 21) -+#define PCAP_IRQ_MNEXB (1 << 22) -+ -+#define PCAP_BIT_VREG2_V1_STBY pbit(PCAP_REG_VREG2, (1 << 0)) -+#define PCAP_BIT_VREG2_V2_STBY pbit(PCAP_REG_VREG2, (1 << 1)) -+#define PCAP_BIT_VREG2_V3_STBY pbit(PCAP_REG_VREG2, (1 << 2)) -+#define PCAP_BIT_VREG2_V4_STBY pbit(PCAP_REG_VREG2, (1 << 3)) -+#define PCAP_BIT_VREG2_V5_STBY pbit(PCAP_REG_VREG2, (1 << 4)) -+#define PCAP_BIT_VREG2_V6_STBY pbit(PCAP_REG_VREG2, (1 << 5)) -+#define PCAP_BIT_VREG2_V7_STBY pbit(PCAP_REG_VREG2, (1 << 6)) -+#define PCAP_BIT_VREG2_V8_STBY pbit(PCAP_REG_VREG2, (1 << 7)) -+#define PCAP_BIT_VREG2_V9_STBY pbit(PCAP_REG_VREG2, (1 << 8)) -+#define PCAP_BIT_VREG2_V10_STBY pbit(PCAP_REG_VREG2, (1 << 9)) -+#define PCAP_BIT_VREG2_V1_LOWPWR pbit(PCAP_REG_VREG2, (1 << 10)) -+#define PCAP_BIT_VREG2_V2_LOWPWR pbit(PCAP_REG_VREG2, (1 << 11)) -+#define PCAP_BIT_VREG2_V3_LOWPWR pbit(PCAP_REG_VREG2, (1 << 12)) -+#define PCAP_BIT_VREG2_V4_LOWPWR pbit(PCAP_REG_VREG2, (1 << 13)) -+#define PCAP_BIT_VREG2_V5_LOWPWR pbit(PCAP_REG_VREG2, (1 << 14)) -+#define PCAP_BIT_VREG2_V6_LOWPWR pbit(PCAP_REG_VREG2, (1 << 15)) -+#define PCAP_BIT_VREG2_V7_LOWPWR pbit(PCAP_REG_VREG2, (1 << 16)) -+#define PCAP_BIT_VREG2_V8_LOWPWR pbit(PCAP_REG_VREG2, (1 << 17)) -+#define PCAP_BIT_VREG2_V9_LOWPWR pbit(PCAP_REG_VREG2, (1 << 18)) -+#define PCAP_BIT_VREG2_V10_LOWPWR pbit(PCAP_REG_VREG2, (1 << 19)) -+ -+#define PCAP_BIT_AUXVREG_VAUX1_EN pbit(PCAP_REG_AUXVREG, (1 << 1)) -+#define PCAP_AUXVREG_VAUX1_MASK 0x0000000c -+#define PCAP_AUXVREG_VAUX1_SHIFT 2 -+#define PCAP_BIT_AUXVREG_VAUX2_EN pbit(PCAP_REG_AUXVREG, (1 << 4)) -+#define PCAP_AUXVREG_VAUX2_MASK 0x00000060 -+#define PCAP_AUXVREG_VAUX2_SHIFT 5 -+#define PCAP_BIT_AUXVREG_VAUX3_EN pbit(PCAP_REG_AUXVREG, (1 << 7)) -+#define PCAP_AUXVREG_VAUX3_MASK 0x00000f00 -+#define PCAP_AUXVREG_VAUX3_SHIFT 8 -+#define PCAP_BIT_AUXVREG_VAUX4_EN pbit(PCAP_REG_AUXVREG, (1 << 12)) -+#define PCAP_AUXVREG_VAUX4_MASK 0x00006000 -+#define PCAP_AUXVREG_VAUX4_SHIFT 13 -+#define PCAP_BIT_AUXVREG_VSIM2_EN pbit(PCAP_REG_AUXVREG, (1 << 16)) -+#define PCAP_BIT_AUXVREG_VSIM_EN pbit(PCAP_REG_AUXVREG, (1 << 17)) -+#define PCAP_BIT_AUXVREG_VSIM_0 pbit(PCAP_REG_AUXVREG, (1 << 18)) -+#define PCAP_BIT_AUXVREG_V_VIB_EN pbit(PCAP_REG_AUXVREG, (1 << 19)) -+#define PCAP_AUXVREG_V_VIB_MASK 0x00300000 -+#define PCAP_AUXVREG_V_VIB_SHIFT 20 -+#define PCAP_BIT_AUXVREG_VAUX1_STBY pbit(PCAP_REG_AUXVREG, (1 << 22)) -+#define PCAP_BIT_AUXVREG_VAUX1_LOWPWR pbit(PCAP_REG_AUXVREG, (1 << 23)) -+#define PCAP_BIT_AUXVREG_SW3_STBY pbit(PCAP_REG_AUXVREG, (1 << 24)) -+ -+#define PCAP_BATT_DAC_MASK 0x000000ff -+#define PCAP_BATT_DAC_SHIFT 0 -+#define PCAP_BIT_BATT_B_FDBK pbit(PCAP_REG_BATT, (1 << 8)) -+#define PCAP_BIT_BATT_EXT_ISENSE pbit(PCAP_REG_BATT, (1 << 9)) -+#define PCAP_BATT_V_COIN_MASK 0x00003c00 -+#define PCAP_BATT_V_COIN_SHIFT 10 -+#define PCAP_BIT_BATT_I_COIN pbit(PCAP_REG_BATT, (1 << 14)) -+#define PCAP_BIT_BATT_COIN_CH_EN pbit(PCAP_REG_BATT, (1 << 15)) -+#define PCAP_BATT_EOL_SEL_MASK 0x000e0000 -+#define PCAP_BATT_EOL_SEL_SHIFT 17 -+#define PCAP_BIT_BATT_EOL_CMP_EN pbit(PCAP_REG_BATT, (1 << 20)) -+#define PCAP_BIT_BATT_BATT_DET_EN pbit(PCAP_REG_BATT, (1 << 21)) -+#define PCAP_BIT_BATT_THERMBIAS_CTRL pbit(PCAP_REG_BATT, (1 << 22)) -+ -+#define PCAP_BIT_ADC1_ADEN pbit(PCAP_REG_ADC1, (1 << 0)) -+#define PCAP_BIT_ADC1_RAND pbit(PCAP_REG_ADC1, (1 << 1)) -+#define PCAP_BIT_ADC1_AD_SEL1 pbit(PCAP_REG_ADC1, (1 << 2)) -+#define PCAP_BIT_ADC1_AD_SEL2 pbit(PCAP_REG_ADC1, (1 << 3)) -+#define PCAP_ADC1_ADA1_MASK 0x00000070 -+#define PCAP_ADC1_ADA1_SHIFT 4 -+#define PCAP_ADC1_ADA2_MASK 0x00000380 -+#define PCAP_ADC1_ADA2_SHIFT 7 -+#define PCAP_ADC1_ATO_MASK 0x00003c00 -+#define PCAP_ADC1_ATO_SHIFT 10 -+#define PCAP_BIT_ADC1_ATOX pbit(PCAP_REG_ADC1, (1 << 14)) -+#define PCAP_BIT_ADC1_MTR1 pbit(PCAP_REG_ADC1, (1 << 15)) -+#define PCAP_BIT_ADC1_MTR2 pbit(PCAP_REG_ADC1, (1 << 16)) -+#define PCAP_ADC1_TS_M_MASK 0x000e0000 -+#define PCAP_ADC1_TS_M_SHIFT 17 -+#define PCAP_BIT_ADC1_TS_REF_LOWPWR pbit(PCAP_REG_ADC1, (1 << 20)) -+#define PCAP_BIT_ADC1_TS_REFENB pbit(PCAP_REG_ADC1, (1 << 21)) -+#define PCAP_BIT_ADC1_BATT_I_POLARITY pbit(PCAP_REG_ADC1, (1 << 22)) -+#define PCAP_BIT_ADC1_BATT_I_ADC pbit(PCAP_REG_ADC1, (1 << 23)) -+ -+#define PCAP_ADC2_ADD1_MASK 0x000003ff -+#define PCAP_ADC2_ADD1_SHIFT 0 -+#define PCAP_ADC2_ADD2_MASK 0x000ffc00 -+#define PCAP_ADC2_ADD2_SHIFT 10 -+#define PCAP_BIT_ADC2_ADINC1 pbit(PCAP_REG_ADC2, (1 << 20)) -+#define PCAP_BIT_ADC2_ADINC2 pbit(PCAP_REG_ADC2, (1 << 21)) -+#define PCAP_BIT_ADC2_ASC pbit(PCAP_REG_ADC2, (1 << 22)) -+ -+#define PCAP_BIT_BUSCTRL_FSENB 0x50000001 -+#define PCAP_BIT_BUSCTRL_USB_SUSPEND 0x50000002 -+#define PCAP_BIT_BUSCTRL_USB_PU 0x50000004 -+#define PCAP_BIT_BUSCTRL_USB_PD 0x50000008 -+#define PCAP_BIT_BUSCTRL_VUSB_EN 0x50000010 -+#define PCAP_BIT_BUSCTRL_USB_PS 0x50000020 -+#define PCAP_BIT_BUSCTRL_VUSB_MSTR_EN 0x50000040 -+#define PCAP_BIT_BUSCTRL_VBUS_PD_ENB 0x50000080 -+#define PCAP_BIT_BUSCTRL_CURRLIM 0x50000100 -+#define PCAP_BIT_BUSCTRL_RS232ENB 0x50000200 -+#define PCAP_BIT_BUSCTRL_RS232_DIR 0x50000400 -+#define PCAP_BIT_BUSCTRL_SE0_CONN 0x50000800 -+#define PCAP_BIT_BUSCTRL_USB_PDM 0x50001000 -+#define PCAP_BIT_BUSCTRL_BUS_PRI_ADJ 0x51000000 -+ -+#define PCAP_BIT_PERIPH_BL_CTRL0 0x54000001 -+#define PCAP_BIT_PERIPH_BL_CTRL1 0x54000002 -+#define PCAP_BIT_PERIPH_BL_CTRL2 0x54000004 -+#define PCAP_BIT_PERIPH_BL_CTRL3 0x54000008 -+#define PCAP_BIT_PERIPH_BL_CTRL4 0x54000010 -+#define PCAP_BIT_PERIPH_LEDR_EN 0x54000020 -+#define PCAP_BIT_PERIPH_LEDG_EN 0x54000040 -+#define PCAP_BIT_PERIPH_LEDR_CTRL0 0x54000080 -+#define PCAP_BIT_PERIPH_LEDR_CTRL1 0x54000100 -+#define PCAP_BIT_PERIPH_LEDR_CTRL2 0x54000200 -+#define PCAP_BIT_PERIPH_LEDR_CTRL3 0x54000400 -+#define PCAP_BIT_PERIPH_LEDG_CTRL0 0x54000800 -+#define PCAP_BIT_PERIPH_LEDG_CTRL1 0x54001000 -+#define PCAP_BIT_PERIPH_LEDG_CTRL2 0x54002000 -+#define PCAP_BIT_PERIPH_LEDG_CTRL3 0x54004000 -+#define PCAP_BIT_PERIPH_LEDR_I0 0x54008000 -+#define PCAP_BIT_PERIPH_LEDR_I1 0x54010000 -+#define PCAP_BIT_PERIPH_LEDG_I0 0x54020000 -+#define PCAP_BIT_PERIPH_LEDG_I1 0x54040000 -+#define PCAP_BIT_PERIPH_SKIP 0x54080000 -+#define PCAP_BIT_PERIPH_BL2_CTRL0 0x54100000 -+#define PCAP_BIT_PERIPH_BL2_CTRL1 0x54200000 -+#define PCAP_BIT_PERIPH_BL2_CTRL2 0x54400000 -+#define PCAP_BIT_PERIPH_BL2_CTRL3 0x54800000 -+#define PCAP_BIT_PERIPH_BL2_CTRL4 0x55000000 -+ -+#define PCAP_BIT_LOWPWR_VAUX2_STBY 0x60000001 -+#define PCAP_BIT_LOWPWR_VAUX2_LOWPWR 0x60000002 -+#define PCAP_BIT_LOWPWR_VAUX3_STBY 0x60000004 -+#define PCAP_BIT_LOWPWR_VAUX3_LOWPWR 0x60000008 -+#define PCAP_BIT_LOWPWR_VAUX4_STBY 0x60000010 -+#define PCAP_BIT_LOWPWR_VAUX4_LOWPWR 0x60000020 -+#define PCAP_BIT_LOWPWR_VSIM_LOWPWR 0x60000040 -+#define PCAP_BIT_LOWPWR_VSIM2_LOWPWR 0x60000080 -+#define PCAP_BIT_LOWPWR_SW1_MODE00 0x60000100 -+#define PCAP_BIT_LOWPWR_SW1_MODE01 0x60000200 -+#define PCAP_BIT_LOWPWR_SW1_MODE10 0x60000400 -+#define PCAP_BIT_LOWPWR_SW1_MODE11 0x60000800 -+#define PCAP_BIT_LOWPWR_SW10_DVS 0x60001000 -+#define PCAP_BIT_LOWPWR_SW11_DVS 0x60002000 -+#define PCAP_BIT_LOWPWR_SW12_DVS 0x60004000 -+#define PCAP_BIT_LOWPWR_SW13_DVS 0x60008000 -+#define PCAP_BIT_LOWPWR_SW2_MODE00 0x60010000 -+#define PCAP_BIT_LOWPWR_SW2_MODE01 0x60020000 -+#define PCAP_BIT_LOWPWR_SW2_MODE10 0x60040000 -+#define PCAP_BIT_LOWPWR_SW2_MODE11 0x60080000 -+#define PCAP_BIT_LOWPWR_SW20_DVS 0x60100000 -+#define PCAP_BIT_LOWPWR_SW21_DVS 0x60200000 -+#define PCAP_BIT_LOWPWR_SW22_DVS 0x60400000 -+#define PCAP_BIT_LOWPWR_SW23_DVS 0x60800000 -+#define PCAP_BIT_LOWPWR_VC_STBY 0x61000000 -+ -+extern int ezx_pcap_write(u_int8_t, u_int32_t); -+extern int ezx_pcap_read(u_int8_t, u_int32_t *); -+extern int ezx_pcap_bit_set(u_int32_t, u_int8_t); -+extern int ezx_pcap_bit_get(u_int32_t); -+extern int ezx_pcap_read_bit(u_int32_t); -+extern void ezx_pcap_vibrator_level(u_int32_t); -+#endif -Index: linux-2.6.23/include/asm-arm/arch-pxa/irqs.h -=================================================================== ---- linux-2.6.23.orig/include/asm-arm/arch-pxa/irqs.h 2007-10-09 22:31:38.000000000 +0200 -+++ linux-2.6.23/include/asm-arm/arch-pxa/irqs.h 2007-10-23 15:18:28.000000000 +0200 -@@ -79,7 +79,7 @@ - * within sensible limits. - */ - #define IRQ_BOARD_START (PXA_GPIO_IRQ_BASE + PXA_GPIO_IRQ_NUM) --#define IRQ_BOARD_END (IRQ_BOARD_START + 16) -+#define IRQ_BOARD_END (IRQ_BOARD_START + 22) - - #define IRQ_SA1111_START (IRQ_BOARD_END) - #define IRQ_GPAIN0 (IRQ_BOARD_END + 0) -@@ -170,7 +170,8 @@ - #define NR_IRQS (IRQ_LOCOMO_SPI_TEND + 1) - #elif defined(CONFIG_ARCH_LUBBOCK) || \ - defined(CONFIG_MACH_LOGICPD_PXA270) || \ -- defined(CONFIG_MACH_MAINSTONE) -+ defined(CONFIG_MACH_MAINSTONE) || \ -+ defined(CONFIG_PXA_EZX) - #define NR_IRQS (IRQ_BOARD_END) - #else - #define NR_IRQS (IRQ_BOARD_START) -@@ -216,3 +217,28 @@ - #define IRQ_LOCOMO_GPIO_BASE (IRQ_BOARD_START + 1) - #define IRQ_LOCOMO_LT_BASE (IRQ_BOARD_START + 2) - #define IRQ_LOCOMO_SPI_BASE (IRQ_BOARD_START + 3) -+ -+/* EZX Interrupts (CONFIG_EZX) */ -+#define EZX_IRQ(x) (IRQ_BOARD_START + (x)) -+#define EZX_IRQ_USB4V EZX_IRQ(0) /* EMU */ -+#define EZX_IRQ_USB1V EZX_IRQ(1) /* EMU */ -+#define EZX_IRQ_HEADJACK EZX_IRQ(2) /* Audio connector */ -+#define EZX_IRQ_MIC EZX_IRQ(3) /* Audio connector */ -+#define EZX_IRQ_ADCDONE EZX_IRQ(4) -+#define EZX_IRQ_TS EZX_IRQ(5) /* TS touch */ -+#define EZX_IRQ_ADCDONE2 EZX_IRQ(6) /* TS x/y ADC ready */ -+#define EZX_IRQ_WH EZX_IRQ(7) -+#define EZX_IRQ_WL EZX_IRQ(8) -+#define EZX_IRQ_ONOFF EZX_IRQ(9) -+#define EZX_IRQ_ONOFF2 EZX_IRQ(10) -+#define EZX_IRQ_MOBPORT EZX_IRQ(11) -+#define EZX_IRQ_TODA EZX_IRQ(12) -+#define EZX_IRQ_1HZ EZX_IRQ(13) -+#define EZX_IRQ_MNEXB EZX_IRQ(14) -+#define EZX_IRQ_ST EZX_IRQ(15) -+#define EZX_IRQ_PC EZX_IRQ(16) -+#define EZX_IRQ_SYSRST EZX_IRQ(17) -+#define EZX_IRQ_SOFTRESET EZX_IRQ(18) -+#define EZX_IRQ_EOL EZX_IRQ(19) -+#define EZX_IRQ_CLK EZX_IRQ(20) -+#define EZX_IRQ_WARM EZX_IRQ(21) -Index: linux-2.6.23/arch/arm/mach-pxa/Kconfig -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/Kconfig 2007-10-23 15:18:28.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/Kconfig 2007-10-23 15:38:53.000000000 +0200 -@@ -109,6 +109,9 @@ - config EZX_BP - bool "BP Control code for EZX Platform" - -+config EZX_PCAP -+ bool "PCAP Support" -+ - endif - - endmenu -Index: linux-2.6.23/arch/arm/mach-pxa/Makefile -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/Makefile 2007-10-23 15:18:28.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/Makefile 2007-10-23 15:38:53.000000000 +0200 -@@ -26,6 +26,7 @@ - obj-$(CONFIG_PXA_EZX_A1200) += ezx-a1200.o - obj-$(CONFIG_PXA_EZX_E6) += ezx-e6.o - obj-$(CONFIG_EZX_BP) += ezx-bp.o -+obj-$(CONFIG_EZX_PCAP) += ezx-pcap.o - - # Support for blinky lights - led-y := leds.o diff --git a/packages/linux/linux-ezx-2.6.23/patches/ezx-pm.patch b/packages/linux/linux-ezx-2.6.23/patches/ezx-pm.patch deleted file mode 100644 index aa2d83b24e..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/ezx-pm.patch +++ /dev/null @@ -1,108 +0,0 @@ -Index: linux-2.6.23/arch/arm/mach-pxa/pxa27x.c -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/pxa27x.c 2007-10-09 22:31:38.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/pxa27x.c 2007-10-23 12:25:34.000000000 +0200 -@@ -25,6 +25,10 @@ - #include <asm/arch/pm.h> - #include <asm/arch/dma.h> - -+#ifdef CONFIG_PXA_EZX -+#include <asm/arch/ezx.h> -+#endif -+ - #include "generic.h" - #include "devices.h" - -@@ -192,7 +196,12 @@ - void pxa27x_cpu_pm_restore(unsigned long *sleep_save) - { - /* ensure not to come back here if it wasn't intended */ -+#ifdef CONFIG_PXA_EZX -+ *(unsigned long *)(phys_to_virt(RESUME_ADDR)) = 0; -+ *(unsigned long *)(phys_to_virt(FLAG_ADDR)) = OFF_FLAG; -+#else - PSPR = 0; -+#endif - - /* restore registers */ - RESTORE_GPLEVEL(0); RESTORE_GPLEVEL(1); -@@ -242,7 +251,13 @@ - break; - case PM_SUSPEND_MEM: - /* set resume return address */ -+#ifdef CONFIG_PXA_EZX -+ /* set EZX flags for blob - WM */ -+ *(unsigned long *)(phys_to_virt(RESUME_ADDR)) = virt_to_phys(pxa_cpu_resume); -+ *(unsigned long *)(phys_to_virt(FLAG_ADDR)) = SLEEP_FLAG; -+#else - PSPR = virt_to_phys(pxa_cpu_resume); -+#endif - pxa27x_cpu_suspend(PWRMODE_SLEEP); - break; - } -Index: linux-2.6.23/arch/arm/mach-pxa/ezx.c -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx.c 2007-10-23 12:23:34.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/ezx.c 2007-10-23 12:27:30.000000000 +0200 -@@ -19,6 +19,7 @@ - #include <asm/arch/pxa-regs.h> - #include <asm/arch/ohci.h> - #include <asm/arch/ezx.h> -+#include <asm/arch/system.h> - - #include "generic.h" - -@@ -122,8 +123,53 @@ - &ezxbp_device, - }; - -+/* PM */ -+extern int bp_handshake_passed(void); -+ -+static void ezx_reboot_poweroff(char mode) -+{ -+ *(unsigned long *)(phys_to_virt(BPSIG_ADDR)) = NO_FLAG; -+ cpu_proc_fin(); -+ -+#ifdef CONFIG_EZX_BP -+ if (pxa_gpio_get_value(GPIO_BB_WDI) == 0) { -+ *(unsigned long *)(phys_to_virt(BPSIG_ADDR)) = WDI_FLAG; -+ -+ /* reset BP */ -+ pxa_gpio_set_value(GPIO_BB_RESET, 0); -+ mdelay(1); -+ pxa_gpio_set_value(GPIO_BB_RESET, 1); -+ -+ if (mode == 'z') { -+ arch_reset('h'); -+ while(1); -+ } -+ } -+#endif -+ if (mode == 'z') -+ /* Panic! Ask PCAP to turn both processors off */ -+ pxa_gpio_set_value(GPIO_WDI_AP, 0); -+ else -+ arm_machine_restart(mode); -+ -+ while(1); -+} -+ -+static inline void ezx_poweroff(void) -+{ -+ ezx_reboot_poweroff('z'); -+} -+ -+static inline void ezx_restart(char mode) -+{ -+ ezx_reboot_poweroff(mode); -+} -+ - static int __init ezx_init(void) - { -+ pm_power_off = ezx_poweroff; -+ arm_pm_restart = ezx_restart; -+ - CKEN = (1 << CKEN_OSTIMER) | (1 << CKEN_MEMC); - - pxa_gpio_mode(GPIO_ICL_FFRXD_MD); diff --git a/packages/linux/linux-ezx-2.6.23/patches/ezx-serial-bug-workaround.patch b/packages/linux/linux-ezx-2.6.23/patches/ezx-serial-bug-workaround.patch deleted file mode 100644 index 9f30cc35fe..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/ezx-serial-bug-workaround.patch +++ /dev/null @@ -1,45 +0,0 @@ -Work around some errata in the pxa serial code (copied from motorolas 2.4.x tree) - -Index: linux-2.6.20.7/drivers/serial/pxa.c -=================================================================== ---- linux-2.6.20.7.orig/drivers/serial/pxa.c 2007-04-21 13:57:46.000000000 -0300 -+++ linux-2.6.20.7/drivers/serial/pxa.c 2007-04-21 14:05:03.000000000 -0300 -@@ -29,6 +29,10 @@ - #define SUPPORT_SYSRQ - #endif - -+#define pxa_buggy_port(x) ({ \ -+ int cpu_ver; asm("mrc%? p15, 0, %0, c0, c0" : "=r" (cpu_ver)); \ -+ ((x) == PORT_PXA && (cpu_ver & ~1) == 0x69052100); }) -+ - #include <linux/module.h> - #include <linux/ioport.h> - #include <linux/init.h> -@@ -195,7 +199,7 @@ - if (uart_circ_empty(xmit)) - serial_pxa_stop_tx(&up->port); - } -- -+static inline irqreturn_t serial_pxa_irq(int, void *); - static void serial_pxa_start_tx(struct uart_port *port) - { - struct uart_pxa_port *up = (struct uart_pxa_port *)port; -@@ -203,6 +207,8 @@ - if (!(up->ier & UART_IER_THRI)) { - up->ier |= UART_IER_THRI; - serial_out(up, UART_IER, up->ier); -+ if (pxa_buggy_port(up->port.type)) -+ serial_pxa_irq(up->port.irq, NULL); - } - } - -@@ -298,6 +304,9 @@ - - mcr |= up->mcr; - -+ if (pxa_buggy_port(up->port.type) && up->port.irq != 0) -+ mcr ^= UART_MCR_OUT2; -+ - serial_out(up, UART_MCR, mcr); - } - diff --git a/packages/linux/linux-ezx-2.6.23/patches/mux-fix-init-errorpath.patch b/packages/linux/linux-ezx-2.6.23/patches/mux-fix-init-errorpath.patch deleted file mode 100644 index 716ef86fd1..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/mux-fix-init-errorpath.patch +++ /dev/null @@ -1,20 +0,0 @@ -Index: linux-2.6.16/drivers/char/ts0710_mux_usb.c -=================================================================== ---- linux-2.6.16.orig/drivers/char/ts0710_mux_usb.c 2007-01-17 00:10:32.000000000 +0100 -+++ linux-2.6.16/drivers/char/ts0710_mux_usb.c 2007-01-17 00:42:23.000000000 +0100 -@@ -811,7 +811,6 @@ - /*init the related mux interface*/ - if (!(bvd_ipc = kzalloc(sizeof(struct ipc_usb_data), GFP_KERNEL))) { - err("usb_ipc_init: Out of memory."); -- usb_deregister(&usb_ipc_driver); - return -ENOMEM; - } - bvd_dbg("usb_ipc_init: Address of bvd_ipc:%p", bvd_ipc); -@@ -819,7 +818,6 @@ - if (!(bvd_ipc->xmit.buf = kmalloc(IPC_USB_XMIT_SIZE, GFP_KERNEL))) { - err("usb_ipc_init: Not enough memory for the input buffer."); - kfree(bvd_ipc); -- usb_deregister(&usb_ipc_driver); - return -ENOMEM; - } - bvd_dbg("usb_ipc_init: bvd_ipc->xmit.buf address:%p", diff --git a/packages/linux/linux-ezx-2.6.23/patches/mux-fix-makefile.patch b/packages/linux/linux-ezx-2.6.23/patches/mux-fix-makefile.patch deleted file mode 100644 index 9e5ae18263..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/mux-fix-makefile.patch +++ /dev/null @@ -1,14 +0,0 @@ -Index: linux-2.6.23/drivers/char/Makefile -=================================================================== ---- linux-2.6.23.orig/drivers/char/Makefile 2007-10-22 22:26:50.000000000 +0200 -+++ linux-2.6.23/drivers/char/Makefile 2007-10-22 22:26:59.000000000 +0200 -@@ -111,7 +111,8 @@ - obj-$(CONFIG_JS_RTC) += js-rtc.o - js-rtc-y = rtc.o - --obj-$(CONFIG_TS0710_MUX) += ts0710_mux.o ts0710_mux_usb.o -+obj-$(CONFIG_TS0710_MUX_USB) += ts0710_mux_usb.o -+obj-$(CONFIG_TS0710_MUX) += ts0710_mux.o - - - # Files generated that shall be removed upon make clean diff --git a/packages/linux/linux-ezx-2.6.23/patches/mux-fix-tty-driver.patch b/packages/linux/linux-ezx-2.6.23/patches/mux-fix-tty-driver.patch deleted file mode 100644 index 2e1aabd952..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/mux-fix-tty-driver.patch +++ /dev/null @@ -1,125 +0,0 @@ -Index: linux-2.6.20.7/drivers/char/ts0710_mux.c -=================================================================== ---- linux-2.6.20.7.orig/drivers/char/ts0710_mux.c 2007-04-22 10:51:31.000000000 +0200 -+++ linux-2.6.20.7/drivers/char/ts0710_mux.c 2007-04-22 10:53:05.000000000 +0200 -@@ -241,7 +241,8 @@ - static volatile __u8 mux_recv_info_flags[NR_MUXS]; - static mux_recv_struct *mux_recv_queue = NULL; - --static struct tty_driver mux_driver; -+// Local for 2.6? -+static struct tty_driver *mux_driver; - - #ifdef USB_FOR_MUX - #define COMM_FOR_MUX_DRIVER usb_for_mux_driver -@@ -3007,6 +3008,7 @@ - #else - mux_tty[line]++; - dlci = tty2dlci[line]; -+ mux_table[line] = tty; - - /* if( dlci == 1 ) { */ - /* Open server channel 0 first */ -@@ -3087,6 +3089,7 @@ - } - } - -+ - retval = 0; - #endif - out: -@@ -3894,43 +3897,50 @@ - INIT_WORK(&receive_tqueue, receive_worker, NULL); - INIT_WORK(&post_recv_tqueue, post_recv_worker, NULL); - -- memset(&mux_driver, 0, sizeof(struct tty_driver)); -- memset(&mux_tty, 0, sizeof(mux_tty)); -- mux_driver.magic = TTY_DRIVER_MAGIC; -- mux_driver.driver_name = "ts0710mux"; -- mux_driver.name = "ts0710mux"; -- mux_driver.major = TS0710MUX_MAJOR; -- mux_driver.minor_start = TS0710MUX_MINOR_START; -- mux_driver.num = NR_MUXS; -- mux_driver.type = TTY_DRIVER_TYPE_SERIAL; -- mux_driver.subtype = SERIAL_TYPE_NORMAL; -- mux_driver.init_termios = tty_std_termios; -- mux_driver.init_termios.c_iflag = 0; -- mux_driver.init_termios.c_oflag = 0; -- mux_driver.init_termios.c_cflag = B38400 | CS8 | CREAD; -- mux_driver.init_termios.c_lflag = 0; -- mux_driver.flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW; -- -- mux_driver.ttys = mux_table; -- mux_driver.termios = mux_termios; -- mux_driver.termios_locked = mux_termios_locked; -+ mux_driver = alloc_tty_driver(NR_MUXS); -+ if (!mux_driver) -+ return -ENOMEM; -+ -+ mux_driver->owner = THIS_MODULE; -+ mux_driver->driver_name = "ts0710mux"; -+ mux_driver->name = "mux"; -+ mux_driver->devfs_name = "mux"; -+ mux_driver->major = TS0710MUX_MAJOR; -+ mux_driver->minor_start = TS0710MUX_MINOR_START; -+ mux_driver->type = TTY_DRIVER_TYPE_SERIAL; -+ mux_driver->subtype = SERIAL_TYPE_NORMAL; -+ mux_driver->flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW; -+ -+ mux_driver->init_termios = tty_std_termios; -+ mux_driver->init_termios.c_iflag = 0; -+ mux_driver->init_termios.c_oflag = 0; -+ mux_driver->init_termios.c_cflag = B38400 | CS8 | CREAD; -+ mux_driver->init_termios.c_lflag = 0; -+ -+// mux_driver.ttys = mux_table; -+ mux_driver->termios = mux_termios; -+ mux_driver->termios_locked = mux_termios_locked; - // mux_driver.driver_state = mux_state; -- mux_driver.other = NULL; -+ mux_driver->other = NULL; - -- mux_driver.open = mux_open; -- mux_driver.close = mux_close; -- mux_driver.write = mux_write; -- mux_driver.write_room = mux_write_room; -- mux_driver.flush_buffer = mux_flush_buffer; -- mux_driver.chars_in_buffer = mux_chars_in_buffer; -- mux_driver.throttle = mux_throttle; -- mux_driver.unthrottle = mux_unthrottle; -- mux_driver.ioctl = mux_ioctl; -- mux_driver.owner = THIS_MODULE; -+ mux_driver->open = mux_open; -+ mux_driver->close = mux_close; -+ mux_driver->write = mux_write; -+ mux_driver->write_room = mux_write_room; -+ mux_driver->flush_buffer = mux_flush_buffer; -+ mux_driver->chars_in_buffer = mux_chars_in_buffer; -+ mux_driver->throttle = mux_throttle; -+ mux_driver->unthrottle = mux_unthrottle; -+ mux_driver->ioctl = mux_ioctl; - -- if (tty_register_driver(&mux_driver)) -+ // FIXME: No panic() here -+ if (tty_register_driver(mux_driver)) - panic("Couldn't register mux driver"); - -+ for (j=0; j<NR_MUXS; j++) -+ tty_register_device(mux_driver, j, NULL); -+ -+ - COMM_MUX_DISPATCHER = mux_dispatcher; - COMM_MUX_SENDER = mux_sender; - -@@ -3964,7 +3974,10 @@ - mux_recv_info[j] = 0; - } - -- if (tty_unregister_driver(&mux_driver)) -+ for (j=0; j<NR_MUXS; j++) -+ tty_unregister_device(mux_driver, j); -+ -+ if (tty_unregister_driver(mux_driver)) - panic("Couldn't unregister mux driver"); - } - diff --git a/packages/linux/linux-ezx-2.6.23/patches/mux-fix.patch b/packages/linux/linux-ezx-2.6.23/patches/mux-fix.patch deleted file mode 100644 index b820762f41..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/mux-fix.patch +++ /dev/null @@ -1,164 +0,0 @@ -Index: linux-2.6.20.7/drivers/char/ts0710_mux_usb.c -=================================================================== ---- linux-2.6.20.7.orig/drivers/char/ts0710_mux_usb.c 2007-04-21 18:07:45.000000000 +0200 -+++ linux-2.6.20.7/drivers/char/ts0710_mux_usb.c 2007-04-21 20:55:13.000000000 +0200 -@@ -626,7 +626,6 @@ - } - - interface = &intf->cur_altsetting->desc; -- endpoint = &intf->cur_altsetting->endpoint[0].desc; - /* Start checking for two bulk endpoints or ... FIXME: This is a future - * enhancement...*/ - bvd_dbg("usb_ipc_probe: Number of Endpoints:%d", -@@ -638,30 +637,26 @@ - - ep_cnt = have_bulk_in_mux = have_bulk_out_mux = 0; - -- bvd_dbg("usb_ipc_probe: endpoint[0] is:%x", -- (&endpoint[0])->bEndpointAddress); -- bvd_dbg("usb_ipc_probe: endpoint[1] is:%x ", -- (&endpoint[1])->bEndpointAddress); -- - while (ep_cnt < interface->bNumEndpoints) { -- -- if (!have_bulk_in_mux && IS_EP_BULK_IN(endpoint[ep_cnt])) { -- bvd_dbg("usb_ipc_probe: bEndpointAddress(IN) is:%x ", -- (&endpoint[ep_cnt])->bEndpointAddress); -- have_bulk_in_mux = -- (&endpoint[ep_cnt])->bEndpointAddress; -- readsize = (&endpoint[ep_cnt])->wMaxPacketSize; -+ endpoint = &intf->cur_altsetting->endpoint[ep_cnt].desc; -+ bvd_dbg("usb_ipc_probe: endpoint[%i] is: %x", ep_cnt, -+ endpoint->bEndpointAddress); -+ -+ if (!have_bulk_in_mux && IS_EP_BULK_IN(*endpoint)) { -+ bvd_dbg("usb_ipc_probe: bEndpointAddress(IN) is: %x ", -+ endpoint->bEndpointAddress); -+ have_bulk_in_mux = endpoint->bEndpointAddress; -+ readsize = endpoint->wMaxPacketSize; - bvd_dbg("usb_ipc_probe: readsize=%d", readsize); - ep_cnt++; - continue; - } - -- if (!have_bulk_out_mux && IS_EP_BULK_OUT(endpoint[ep_cnt])) { -- bvd_dbg("usb_ipc_probe: bEndpointAddress(OUT) is:%x ", -- (&endpoint[ep_cnt])->bEndpointAddress); -- have_bulk_out_mux = -- (&endpoint[ep_cnt])->bEndpointAddress; -- writesize = (&endpoint[ep_cnt])->wMaxPacketSize; -+ if (!have_bulk_out_mux && IS_EP_BULK_OUT(*endpoint)) { -+ bvd_dbg("usb_ipc_probe: bEndpointAddress(OUT) is: %x ", -+ endpoint->bEndpointAddress); -+ have_bulk_out_mux = endpoint->bEndpointAddress; -+ writesize = endpoint->wMaxPacketSize; - bvd_dbg("usb_ipc_probe: writesize=%d", writesize); - ep_cnt++; - continue; -@@ -718,21 +713,27 @@ - bvd_ipc->bh_bp.func = usbipc_bh_bp_func; - bvd_ipc->bh_bp.data = (unsigned long) bvd_ipc; - -+ bvd_dbg("after assignements"); - /*Build a write urb*/ -+ usb_init_urb(&bvd_ipc->writeurb_mux); - usb_fill_bulk_urb(&bvd_ipc->writeurb_mux, usbdev, - usb_sndbulkpipe(bvd_ipc->ipc_dev, - bvd_ipc->bulk_out_ep_mux), - bvd_ipc->obuf, writesize, usb_ipc_write_bulk, - bvd_ipc); - //bvd_ipc->writeurb_mux.transfer_flags |= USB_ASYNC_UNLINK; -+ bvd_dbg("after write urb"); - - /*Build a read urb and send a IN token first time*/ -+ usb_init_urb(&bvd_ipc->readurb_mux); - usb_fill_bulk_urb(&bvd_ipc->readurb_mux, usbdev, - usb_rcvbulkpipe(usbdev, bvd_ipc->bulk_in_ep_mux), - bvd_ipc->ibuf, readsize, usb_ipc_read_bulk, bvd_ipc); - //bvd_ipc->readurb_mux.transfer_flags |= USB_ASYNC_UNLINK; -+ bvd_dbg("after read urb"); - -- usb_driver_claim_interface(&usb_ipc_driver, intf, bvd_ipc); -+ //usb_driver_claim_interface(&usb_ipc_driver, intf, bvd_ipc); -+ bvd_dbg("after claim interface"); - //usb_driver_claim_interface(&usb_ipc_driver, &ipccfg->interface[1], bvd_ipc); - - // a2590c: dsplog is not supported by this driver -@@ -740,6 +741,8 @@ - // &ipccfg->interface[2], bvd_ipc); - /*send a IN token first time*/ - bvd_ipc->readurb_mux.dev = bvd_ipc->ipc_dev; -+ bvd_dbg("after assignement"); -+ - if (usb_submit_urb(&bvd_ipc->readurb_mux, GFP_ATOMIC)) - printk("usb_ipc_prob: usb_submit_urb(read mux bulk) failed!\n"); - -@@ -750,7 +753,7 @@ - tasklet_schedule(&bvd_ipc->bh); - } - -- printk("usb_ipc_probe: completed probe!"); -+ printk("usb_ipc_probe: completed probe!\n"); - usb_set_intfdata(intf, &bvd_ipc); - return 0; - } -@@ -760,21 +763,23 @@ - //struct usb_device *usbdev = interface_to_usbdev(intf); - struct ipc_usb_data *bvd_ipc_disconnect = usb_get_intfdata(intf); - -- printk("usb_ipc_disconnect:*** \n"); - -+ printk("usb_ipc_disconnect. bvd_ipc_disconnect address: %p\n", bvd_ipc_disconnect); -+ -+ //FIXME: Memory leak? - if ((UHCRHPS3 & 0x4) == 0) -- usb_unlink_urb(&bvd_ipc_disconnect->readurb_mux); -+ // usb_unlink_urb(&bvd_ipc_disconnect->readurb_mux); - -- usb_unlink_urb(&bvd_ipc_disconnect->writeurb_mux); -+ //usb_unlink_urb(&bvd_ipc_disconnect->writeurb_mux); - - bvd_ipc_disconnect->ipc_flag = IPC_USB_PROBE_NOT_READY; - kfree(bvd_ipc_disconnect->ibuf); - kfree(bvd_ipc_disconnect->obuf); - -- usb_driver_release_interface(&usb_ipc_driver, -- bvd_ipc_disconnect->ipc_dev->actconfig->interface[0]); -- usb_driver_release_interface(&usb_ipc_driver, -- bvd_ipc_disconnect->ipc_dev->actconfig->interface[1]); -+ //usb_driver_release_interface(&usb_ipc_driver, -+ // bvd_ipc_disconnect->ipc_dev->actconfig->interface[0]); -+ //usb_driver_release_interface(&usb_ipc_driver, -+ // bvd_ipc_disconnect->ipc_dev->actconfig->interface[1]); - - //a2590c: dsplog interface is not supported by this driver - //usb_driver_release_interface(&usb_ipc_driver, &bvd_ipc_disconnect->ipc_dev->actconfig->interface[2]); -@@ -803,13 +808,6 @@ - int result; - - bvd_dbg("init usb_ipc"); -- /* register driver at the USB subsystem */ -- result = usb_register(&usb_ipc_driver); -- if (result < 0) { -- err ("usb ipc driver could not be registered"); -- return result; -- } -- - /*init the related mux interface*/ - if (!(bvd_ipc = kzalloc(sizeof(struct ipc_usb_data), GFP_KERNEL))) { - err("usb_ipc_init: Out of memory."); -@@ -836,6 +834,14 @@ - usb_for_mux_driver = &ipcusb_tty_driver; - usb_for_mux_tty = &ipcusb_tty; - -+ /* register driver at the USB subsystem */ -+ // this was called before bvd_ipc was allocated -+ result = usb_register(&usb_ipc_driver); -+ if (result < 0) { -+ err ("usb ipc driver could not be registered"); -+ return result; -+ } -+ - /* init timers for ipcusb read process and usb suspend */ - init_timer(&ipcusb_timer); - ipcusb_timer.function = ipcusb_timeout; diff --git a/packages/linux/linux-ezx-2.6.23/patches/mux-ifdef-ezx-features.patch b/packages/linux/linux-ezx-2.6.23/patches/mux-ifdef-ezx-features.patch deleted file mode 100644 index a3a6a8249a..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/mux-ifdef-ezx-features.patch +++ /dev/null @@ -1,99 +0,0 @@ -Index: linux-2.6.21/drivers/char/ts0710_mux_usb.c -=================================================================== ---- linux-2.6.21.orig/drivers/char/ts0710_mux_usb.c 2007-09-28 23:37:33.000000000 +0200 -+++ linux-2.6.21/drivers/char/ts0710_mux_usb.c 2007-09-28 23:37:45.000000000 +0200 -@@ -35,10 +35,14 @@ - #include <linux/list.h> - #include <linux/errno.h> - #include <asm/uaccess.h> -+ -+#ifdef CONFIG_PXA_EZX - #include <asm/hardware.h> - #include <asm/arch/hardware.h> - #include <asm/arch-pxa/pxa-regs.h> - #include <asm/arch-pxa/ezx.h> -+#endif -+ - #include <linux/slab.h> - #include <linux/miscdevice.h> - #include <linux/init.h> -@@ -341,8 +345,10 @@ - - static void wakeup_timeout(unsigned long data) - { -+#ifdef CONFIG_PXA_EZX - GPSR(GPIO_MCU_INT_SW) = GPIO_bit(GPIO_MCU_INT_SW); - bvd_dbg("wakup_timeout: send GPIO_MCU_INT_SW signal!"); -+#endif - } - - static void suspend_timeout(unsigned long data) -@@ -353,10 +359,12 @@ - bvd_dbg("suspend_timeout: add the suspend timer again"); - } else { - unlink_urbs(&bvd_ipc->readurb_mux); -+#ifdef CONFIG_PXA_EZX - UHCRHPS3 = 0x4; - mdelay(40); - bvd_dbg("suspend_timeout: send SUSPEND signal! UHCRHPS3=0x%x", - UHCRHPS3); -+#endif - } - } - -@@ -404,6 +412,7 @@ - bvd_ipc->writeurb_mux.transfer_buffer_length = buf_num; - bvd_dbg("ipcusb_xmit_data: copy data to write urb finished! "); - -+#ifdef CONFIG_PXA_EZX - if ((UHCRHPS3 & 0x4) == 0x4) { - static int ret; - int time = 0; -@@ -442,6 +451,7 @@ - "failed! status=%d\n", ret); - bvd_dbg("ipcusb_xmit_data: Send a IN token successfully!"); - } -+#endif - - sumbit_times++; - bvd_ipc->write_finished_flag = 0; -@@ -464,12 +474,16 @@ - - static void usbipc_bh_bp_func(unsigned long param) - { -+#ifdef CONFIG_PXA_EZX - if ((UHCRHPS3 & 0x4) == 0x4) { - UHCRHPS3 = 0x8; -+#endif - mdelay(40); -+#ifdef CONFIG_PXA_EZX - bvd_dbg("ipcusb_softint_send_readurb: Send RESUME signal! " - "UHCRHPS3=0x%x", UHCRHPS3); - } -+#endif - if (bvd_ipc->ipc_flag == IPC_USB_PROBE_READY) { - //get_halted_bit(); - -@@ -735,7 +749,9 @@ - printk("usb_ipc_disconnect. bvd_ipc_disconnect address: %p\n", bvd_ipc_disconnect); - - //FIXME: Memory leak? -+#ifdef CONFIG_PXA_EZX - if ((UHCRHPS3 & 0x4) == 0) -+#endif - // usb_unlink_urb(&bvd_ipc_disconnect->readurb_mux); - - //usb_unlink_urb(&bvd_ipc_disconnect->writeurb_mux); -Index: linux-2.6.21/drivers/char/Kconfig -=================================================================== ---- linux-2.6.21.orig/drivers/char/Kconfig 2007-09-29 10:52:18.000000000 +0200 -+++ linux-2.6.21/drivers/char/Kconfig 2007-09-29 10:52:30.000000000 +0200 -@@ -1073,7 +1073,7 @@ - - config TS0710_MUX - tristate "GSM TS 07.10 Multiplex driver" -- depends on EZX_BP -+ depends on EZX_BP || X86 - help - This implements the GSM 07.10 multiplex. - diff --git a/packages/linux/linux-ezx-2.6.23/patches/mux-linux-2.6.21-fix.patch b/packages/linux/linux-ezx-2.6.23/patches/mux-linux-2.6.21-fix.patch deleted file mode 100644 index 8d5299e3bd..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/mux-linux-2.6.21-fix.patch +++ /dev/null @@ -1,297 +0,0 @@ -Index: linux-2.6.21/drivers/char/ts0710.h -=================================================================== ---- linux-2.6.21.orig/drivers/char/ts0710.h 2007-04-27 20:35:44.000000000 -0300 -+++ linux-2.6.21/drivers/char/ts0710.h 2007-04-27 20:36:03.000000000 -0300 -@@ -45,7 +45,6 @@ - * 11/18/2002 Modified - */ - --#include <linux/config.h> - #include <linux/module.h> - - #include <linux/errno.h> -@@ -58,7 +57,6 @@ - #include <linux/major.h> - #include <linux/mm.h> - #include <linux/init.h> --#include <linux/devfs_fs_kernel.h> - - #include <asm/uaccess.h> - #include <asm/system.h> -Index: linux-2.6.21/drivers/char/ts0710_mux.c -=================================================================== ---- linux-2.6.21.orig/drivers/char/ts0710_mux.c 2007-04-27 20:35:44.000000000 -0300 -+++ linux-2.6.21/drivers/char/ts0710_mux.c 2007-04-27 20:36:03.000000000 -0300 -@@ -46,7 +46,6 @@ - * 11/18/2002 Second version - * 04/21/2004 Add GPRS PROC - */ --#include <linux/config.h> - #include <linux/module.h> - #include <linux/types.h> - -@@ -70,15 +69,12 @@ - #include <linux/mm.h> - #include <linux/slab.h> - #include <linux/init.h> --#include <linux/devfs_fs_kernel.h> --//#include <syslog.h> - - #include <asm/uaccess.h> - #include <asm/system.h> - #include <asm/bitops.h> - - #ifdef USB_FOR_MUX --//#include <linux/usb.h> - #include "ts0710_mux_usb.h" - #endif - -@@ -268,8 +264,8 @@ - static struct work_struct post_recv_tqueue; - - static struct tty_struct *mux_table[NR_MUXS]; --static struct termios *mux_termios[NR_MUXS]; --static struct termios *mux_termios_locked[NR_MUXS]; -+static struct ktermios *mux_termios[NR_MUXS]; -+static struct ktermios *mux_termios_locked[NR_MUXS]; - static volatile short int mux_tty[NR_MUXS]; - - #ifdef min -@@ -1894,11 +1890,7 @@ - if (test_bit(TTY_THROTTLED, &tty->flags)) { - queue_data = 1; - } else { -- if (test_bit -- (TTY_DONT_FLIP, &tty->flags)) { -- queue_data = 1; -- post_recv = 1; -- } else if (recv_info->total) { -+ if (recv_info->total) { - queue_data = 1; - post_recv = 1; - } else if (recv_room < uih_len) { -@@ -3149,10 +3141,10 @@ - - /*For BP UART problem End*/ - --static void receive_worker(void *private_) -+static void receive_worker(struct work_struct *work) - { - struct tty_struct *tty = COMM_FOR_MUX_TTY; -- int i, count, tbuf_free, tbuf_read; -+ int count, tbuf_free, tbuf_read; - static unsigned char tbuf[TS0710MUX_MAX_BUF_SIZE]; - static unsigned char *tbuf_ptr = &tbuf[0]; - static unsigned char *start_flag = 0; -@@ -3168,7 +3160,7 @@ - __u32 uih_len; - /*For BP UART problem End */ - -- UNUSED_PARAM(private_); -+ UNUSED_PARAM(work); - - if (!tty) - return; -@@ -3440,7 +3432,7 @@ - clear_bit(RECV_RUNNING, &mux_recv_flags); - } - --static void post_recv_worker(void *private_) -+static void post_recv_worker(struct work_struct *work) - { - ts0710_con *ts0710 = &ts0710_connection; - int tty_idx; -@@ -3453,7 +3445,7 @@ - mux_recv_packet *recv_packet, *recv_packet2; - __u8 j; - -- UNUSED_PARAM(private_); -+ UNUSED_PARAM(work); - - if (test_and_set_bit(RECV_RUNNING, &mux_recv_flags)) { - schedule_work(&post_recv_tqueue); -@@ -3499,10 +3491,6 @@ - if (test_bit(TTY_THROTTLED, &tty->flags)) { - add_post_recv_queue(&post_recv_q, recv_info); - continue; -- } else if (test_bit(TTY_DONT_FLIP, &tty->flags)) { -- post_recv = 1; -- add_post_recv_queue(&post_recv_q, recv_info); -- continue; - } - - flow_control = 0; -@@ -3635,7 +3623,7 @@ - } - } - --static void send_worker(void *private_) -+static void send_worker(struct work_struct *work) - { - ts0710_con *ts0710 = &ts0710_connection; - __u8 j; -@@ -3644,7 +3632,7 @@ - struct tty_struct *tty; - __u8 dlci; - -- UNUSED_PARAM(private_); -+ UNUSED_PARAM(work); - - TS0710_DEBUG("Enter into send_worker"); - -@@ -3819,7 +3807,8 @@ - gprsData[TS0710MUX_GPRS_SESSION_MAX - 1].sentBytes = - get_count(TS0710MUX_GPRS2_SEND_COUNT_IDX); - -- copy_to_user(buf, gprsData, bufLen); -+ if(copy_to_user(buf, gprsData, bufLen)) -+ return -EFAULT; - - return bufLen; - } -@@ -3836,7 +3825,8 @@ - - memset(gprsData, 0, bufLen); - -- copy_from_user(gprsData, buf, bufLen); -+ if(copy_from_user(gprsData, buf, bufLen)) -+ return -EFAULT; - - set_count(TS0710MUX_GPRS1_RECV_COUNT_IDX, gprsData[0].recvBytes); - set_count(TS0710MUX_GPRS1_SEND_COUNT_IDX, gprsData[0].sentBytes); -@@ -3893,9 +3883,9 @@ - } - post_recv_count_flag = 0; - -- INIT_WORK(&send_tqueue, send_worker, NULL); -- INIT_WORK(&receive_tqueue, receive_worker, NULL); -- INIT_WORK(&post_recv_tqueue, post_recv_worker, NULL); -+ INIT_WORK(&send_tqueue, send_worker); -+ INIT_WORK(&receive_tqueue, receive_worker); -+ INIT_WORK(&post_recv_tqueue, post_recv_worker); - - mux_driver = alloc_tty_driver(NR_MUXS); - if (!mux_driver) -@@ -3904,12 +3894,11 @@ - mux_driver->owner = THIS_MODULE; - mux_driver->driver_name = "ts0710mux"; - mux_driver->name = "mux"; -- mux_driver->devfs_name = "mux"; - mux_driver->major = TS0710MUX_MAJOR; - mux_driver->minor_start = TS0710MUX_MINOR_START; - mux_driver->type = TTY_DRIVER_TYPE_SERIAL; - mux_driver->subtype = SERIAL_TYPE_NORMAL; -- mux_driver->flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW; -+ mux_driver->flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV; - - mux_driver->init_termios = tty_std_termios; - mux_driver->init_termios.c_iflag = 0; -@@ -3917,10 +3906,10 @@ - mux_driver->init_termios.c_cflag = B38400 | CS8 | CREAD; - mux_driver->init_termios.c_lflag = 0; - --// mux_driver.ttys = mux_table; -+ //mux_driver.ttys = mux_table; - mux_driver->termios = mux_termios; - mux_driver->termios_locked = mux_termios_locked; --// mux_driver.driver_state = mux_state; -+ //mux_driver.driver_state = mux_state; - mux_driver->other = NULL; - - mux_driver->open = mux_open; -Index: linux-2.6.21/drivers/char/ts0710_mux_usb.c -=================================================================== ---- linux-2.6.21.orig/drivers/char/ts0710_mux_usb.c 2007-04-27 20:35:44.000000000 -0300 -+++ linux-2.6.21/drivers/char/ts0710_mux_usb.c 2007-04-27 22:34:31.000000000 -0300 -@@ -188,7 +188,8 @@ - buf_list_t *inbuf; - int count = urb->actual_length; - -- inbuf = kmalloc(sizeof(buf_list_t), GFP_KERNEL); -+ // we are called from interrupt context. -+ inbuf = kmalloc(sizeof(buf_list_t), GFP_ATOMIC); - if (!inbuf) { - printk("append_to_inbuf_list: (%d) out of memory!\n", - sizeof(buf_list_t)); -@@ -196,7 +197,7 @@ - } - - inbuf->size = count; -- inbuf->body = kmalloc(sizeof(char)*count, GFP_KERNEL); -+ inbuf->body = kmalloc(sizeof(char)*count, GFP_ATOMIC); - if (!inbuf->body) { - kfree(inbuf); - printk("append_to_inbuf_list: (%d) out of memory!\n", -@@ -222,7 +223,7 @@ - inbuf = list_entry(ptr, buf_list_t, list); - src_count = inbuf->size; - if (dst_count >= src_count) { -- memcpy(buf, inbuf->body, src_count); -+ memcpy((unsigned char *)buf, inbuf->body, src_count); - ret = src_count; - list_del(ptr); - kfree(inbuf->body); -@@ -282,9 +283,8 @@ - spin_unlock(&bvd_ipc->in_buf_lock); - } - --static void usb_ipc_read_bulk(struct urb *urb, struct pt_regs *regs) -+static void usb_ipc_read_bulk(struct urb *urb) - { -- buf_list_t *inbuf; - int count = urb->actual_length; - struct tty_struct *tty = &ipcusb_tty; - -@@ -319,7 +319,7 @@ - bvd_dbg("usb_ipc_read_bulk: completed!!!"); - } - --static void usb_ipc_write_bulk(struct urb *urb, struct pt_regs *regs) -+static void usb_ipc_write_bulk(struct urb *urb) - { - callback_times++; - bvd_ipc->write_finished_flag = 1; -@@ -437,7 +437,7 @@ - /*send IN token*/ - bvd_ipc->readurb_mux.actual_length = 0; - bvd_ipc->readurb_mux.dev = bvd_ipc->ipc_dev; -- if (ret = usb_submit_urb(&bvd_ipc->readurb_mux, GFP_ATOMIC)) -+ if ((ret = usb_submit_urb(&bvd_ipc->readurb_mux, GFP_ATOMIC))) - printk("ipcusb_xmit_data: usb_submit_urb(read mux bulk)" - "failed! status=%d\n", ret); - bvd_dbg("ipcusb_xmit_data: Send a IN token successfully!"); -@@ -447,7 +447,7 @@ - bvd_ipc->write_finished_flag = 0; - //printk("%s: clear write_finished_flag:%d\n", __FUNCTION__, bvd_ipc->write_finished_flag); - bvd_ipc->writeurb_mux.dev = bvd_ipc->ipc_dev; -- if (result = usb_submit_urb(&bvd_ipc->writeurb_mux, GFP_ATOMIC)) -+ if ((result = usb_submit_urb(&bvd_ipc->writeurb_mux, GFP_ATOMIC))) - warn("ipcusb_xmit_data: funky result! result=%d\n", result); - - bvd_dbg("ipcusb_xmit_data: usb_submit_urb finished! result:%d", result); -@@ -498,7 +498,7 @@ - return 0; - - if (*ipcusb_ap_to_bp != NULL) -- (*ipcusb_ap_to_bp)(buf, count); -+ (*ipcusb_ap_to_bp)((unsigned char *)buf, count); - - bvd_ipc->suspend_flag = 1; - -@@ -602,6 +602,7 @@ - } - - ep_cnt = have_bulk_in_mux = have_bulk_out_mux = 0; -+ readsize = writesize = 0; - - while (ep_cnt < interface->bNumEndpoints) { - endpoint = &intf->cur_altsetting->endpoint[ep_cnt].desc; -@@ -792,6 +793,8 @@ - bvd_ipc->ipc_dev = NULL; - bvd_ipc->xmit.head = bvd_ipc->xmit.tail = 0; - bvd_ipc->write_flag = IPC_USB_WRITE_INIT; -+ spin_lock_init(&bvd_ipc->lock); -+ spin_lock_init(&bvd_ipc->in_buf_lock); - - ipcusb_tty_driver.write = usb_ipc_write; - ipcusb_tty_driver.chars_in_buffer = usb_ipc_chars_in_buffer; diff --git a/packages/linux/linux-ezx-2.6.23/patches/mux-remove-flipbuffers.patch b/packages/linux/linux-ezx-2.6.23/patches/mux-remove-flipbuffers.patch deleted file mode 100644 index d4781f9fc7..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/mux-remove-flipbuffers.patch +++ /dev/null @@ -1,269 +0,0 @@ -Index: linux-2.6.16/drivers/char/ts0710_mux_usb.c -=================================================================== ---- linux-2.6.16.orig/drivers/char/ts0710_mux_usb.c 2007-01-17 00:52:25.000000000 +0100 -+++ linux-2.6.16/drivers/char/ts0710_mux_usb.c 2007-01-17 00:52:26.000000000 +0100 -@@ -133,6 +133,7 @@ - - struct circ_buf xmit; /* write cric bufffer */ - struct list_head in_buf_list; -+ spinlock_t in_buf_lock; - char bulk_in_ep_mux, - bulk_out_ep_mux, - bulk_in_ep_dsplog; -@@ -204,9 +205,39 @@ - return; - } - memcpy(inbuf->body, (unsigned char*)urb->transfer_buffer, count); -+ spin_lock(&bvd_ipc->in_buf_lock); - list_add_tail(&inbuf->list, &bvd_ipc->in_buf_list); -+ spin_unlock(&bvd_ipc->in_buf_lock); - } - -+int get_from_inbuf_list(const unsigned char *buf, int dst_count) -+{ -+ int ret = 0; -+ spin_lock(&bvd_ipc->in_buf_lock); -+ if (!(list_empty(&bvd_ipc->in_buf_list))) { -+ int src_count; -+ buf_list_t *inbuf; -+ struct list_head *ptr; -+ -+ ptr = bvd_ipc->in_buf_list.next; -+ inbuf = list_entry(ptr, buf_list_t, list); -+ src_count = inbuf->size; -+ if (dst_count >= src_count) { -+ memcpy(buf, inbuf->body, src_count); -+ ret = src_count; -+ list_del(ptr); -+ kfree(inbuf->body); -+ kfree(inbuf); -+ } else { -+ bvd_dbg("get_from_inbuf_list: not enough space in destination buffer"); -+ } -+ } -+ spin_unlock(&bvd_ipc->in_buf_lock); -+ -+ return ret; -+} -+EXPORT_SYMBOL(get_from_inbuf_list); -+ - static void ipcusb_timeout(unsigned long data) - { - struct tty_struct *tty = &ipcusb_tty; -@@ -214,13 +245,14 @@ - - bvd_dbg("ipcusb_timeout***"); - -+ spin_lock(&bvd_ipc->in_buf_lock); - while (!(list_empty(&bvd_ipc->in_buf_list))) { - int count; - buf_list_t *inbuf; - struct list_head *ptr = NULL; - - ptr = bvd_ipc->in_buf_list.next; -- inbuf = list_entry (ptr, buf_list_t, list); -+ inbuf = list_entry(ptr, buf_list_t, list); - count = inbuf->size; - if (tty_insert_flip_string(tty, inbuf->body, count) >= count) { - list_del(ptr); -@@ -232,10 +264,12 @@ - break; - } - } -+ spin_unlock(&bvd_ipc->in_buf_lock); - - if (usb_mux_dispatcher) - usb_mux_dispatcher(tty); /**call Liu changhui's func.**/ - -+ spin_lock(&bvd_ipc->in_buf_lock); - if (list_empty(&bvd_ipc->in_buf_list)) { - urb->actual_length = 0; - urb->dev = bvd_ipc->ipc_dev; -@@ -246,6 +280,7 @@ - ipcusb_timer.data = (unsigned long)urb; - mod_timer(&ipcusb_timer, jiffies+(10*HZ/1000)); - } -+ spin_unlock(&bvd_ipc->in_buf_lock); - } - - static void usb_ipc_read_bulk(struct urb *urb, struct pt_regs *regs) -@@ -266,69 +301,11 @@ - if (count > 0 && ((*ipcusb_bp_to_ap) != NULL)) - (*ipcusb_bp_to_ap)(urb->transfer_buffer, urb->actual_length); - -- if (!(list_empty(&bvd_ipc->in_buf_list))) { -- int need_mux = 0; -- -- bvd_dbg("usb_ipc_read_bulk: some urbs in_buf_list"); -- if (count > 0) { -- bvd_ipc->suspend_flag = 1; -- append_to_inbuf_list(urb); /* append the current received urb */ --#if 0 -- if(jiffies - last_jiff > ICL_EVENT_INTERVAL) -- { -- last_jiff = jiffies; -- queue_apm_event(KRNL_ICL, NULL); -- } --#endif -- } -- -- while (!(list_empty(&bvd_ipc->in_buf_list))) { -- struct list_head* ptr = NULL; -- ptr = bvd_ipc->in_buf_list.next; -- inbuf = list_entry(ptr, buf_list_t, list); -- count = inbuf->size; -- need_mux = 1; -- -- tty_insert_flip_string(tty, inbuf->body, count); -- -- list_del(ptr); -- kfree(inbuf->body); -- inbuf->body = NULL; -- kfree(inbuf); -- } -- -- if (usb_mux_dispatcher && need_mux) -- usb_mux_dispatcher(tty); /* call Liu changhui's func. */ -- -- if (list_empty(&bvd_ipc->in_buf_list)) { -- urb->actual_length = 0; -- urb->dev = bvd_ipc->ipc_dev; -- if (usb_submit_urb(urb, GFP_ATOMIC)) -- bvd_dbg("usb_ipc_read_bulk: " -- "failed resubmitting read urb"); -- bvd_dbg("usb_ipc_read_bulk: resubmited read urb"); -- } else { -- ipcusb_timer.data = (unsigned long)urb; -- mod_timer(&ipcusb_timer, jiffies+(10*HZ/1000)); -- } -- } else if (count > 0) { -- bvd_dbg("usb_ipc_read_bulk: no urbs in_buf_list"); -+ if (count > 0) { -+ bvd_dbg("usb_ipc_read_bulk: inserting buffer into in_buf_list"); - bvd_ipc->suspend_flag = 1; - -- if (tty_insert_flip_string(tty, urb->transfer_buffer, -- count) < count) { -- bvd_ipc->suspend_flag = 1; -- append_to_inbuf_list(urb); -- ipcusb_timer.data = (unsigned long)urb; -- mod_timer(&ipcusb_timer, jiffies+(10*HZ/1000)); --#if 0 -- if(jiffies - last_jiff > ICL_EVENT_INTERVAL) -- { -- last_jiff = jiffies; -- queue_apm_event(KRNL_ICL, NULL); -- } --#endif -- } -+ append_to_inbuf_list(urb); - - if (usb_mux_dispatcher) - usb_mux_dispatcher(tty); /* call Liu changhui's func. */ -@@ -337,13 +314,6 @@ - urb->dev = bvd_ipc->ipc_dev; - if (usb_submit_urb(urb, GFP_ATOMIC)) - bvd_dbg("failed resubmitting read urb"); --#if 0 -- if(jiffies - last_jiff > ICL_EVENT_INTERVAL) -- { -- last_jiff = jiffies; -- queue_apm_event(KRNL_ICL, NULL); -- } --#endif - bvd_dbg("usb_ipc_read_bulk: resubmited read urb"); - } - -@@ -705,7 +675,8 @@ - bvd_ipc->bulk_out_ep_mux= have_bulk_out_mux; - bvd_ipc->ipc_dev = usbdev; - bvd_ipc->writesize = writesize; -- INIT_LIST_HEAD (&bvd_ipc->in_buf_list); -+ INIT_LIST_HEAD(&bvd_ipc->in_buf_list); -+ bvd_ipc->in_buf_lock = SPIN_LOCK_UNLOCKED; - - bvd_ipc->bh.func = usbipc_bh_func; - bvd_ipc->bh.data = (unsigned long) bvd_ipc; -Index: linux-2.6.16/drivers/char/ts0710_mux.c -=================================================================== ---- linux-2.6.16.orig/drivers/char/ts0710_mux.c 2007-01-17 00:52:23.000000000 +0100 -+++ linux-2.6.16/drivers/char/ts0710_mux.c 2007-01-17 00:52:26.000000000 +0100 -@@ -3149,7 +3149,7 @@ - static void receive_worker(void *private_) - { - struct tty_struct *tty = COMM_FOR_MUX_TTY; -- int i, count; -+ int i, count, tbuf_free, tbuf_read; - static unsigned char tbuf[TS0710MUX_MAX_BUF_SIZE]; - static unsigned char *tbuf_ptr = &tbuf[0]; - static unsigned char *start_flag = 0; -@@ -3167,29 +3167,39 @@ - - UNUSED_PARAM(private_); - -- if (!tty) -- return; -+ if (!tty) -+ return; -+ -+ while (1) { -+ tbuf_free = TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf); -+ TS0710_PRINTK("Reading max %i bytes from ts0710_mux_usb inbuf.\n", tbuf_free); -+ tbuf_read = get_from_inbuf_list(tbuf_ptr, tbuf_free); -+ if (tbuf_read == 0) { -+ break; -+ } else { -+ TS0710_PRINTK("Read %i bytes.\n", tbuf_read); -+ }; -+ tbuf_ptr += tbuf_read; -+ }; -+ -+ count = (tbuf_ptr - tbuf); -+ -+ // Should be impossible? -+ //if (count > (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf))) { -+ // TS0710_PRINTK -+ // ("MUX receive_worker: !!!!! Exceed buffer boundary !!!!!\n"); -+ // count = (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf)); -+ //} - - #ifdef USB_FOR_MUX -- TS0710_DEBUG("Receive following bytes from IPC-USB"); -+ TS0710_DEBUG("Received following bytes from IPC-USB"); - #else -- TS0710_DEBUG("Receive following bytes from UART"); -+ TS0710_DEBUG("Received following bytes from UART"); - #endif -- -- TS0710_DEBUGHEX(cp, count); -- -- if (count > (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf))) { -- TS0710_PRINTK -- ("MUX receive_worker: !!!!! Exceed buffer boundary !!!!!\n"); -- count = (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf)); -- } -- -- count = tty_buffer_request_room(tty, count); -- -- for (i = 0; i < count; i++) -- tty_insert_flip_char(tty, tbuf_ptr[i], TTY_NORMAL); -- -- tbuf_ptr += count; -+ TS0710_DEBUGHEX(tbuf, count); -+ -+ //gets updated above -+ //tbuf_ptr += count; - search = &tbuf[0]; - - if (test_and_set_bit(RECV_RUNNING, &mux_recv_flags)) { -Index: linux-2.6.16/drivers/char/ts0710_mux_usb.h -=================================================================== ---- linux-2.6.16.orig/drivers/char/ts0710_mux_usb.h 2007-01-17 00:52:23.000000000 +0100 -+++ linux-2.6.16/drivers/char/ts0710_mux_usb.h 2007-01-17 00:52:26.000000000 +0100 -@@ -27,3 +27,6 @@ - extern struct tty_struct *usb_for_mux_tty; - extern void (*usb_mux_dispatcher)(struct tty_struct *tty); - extern void (*usb_mux_sender)(void); -+ -+extern int get_from_inbuf_list(const unsigned char *buf, int dst_count); -+ diff --git a/packages/linux/linux-ezx-2.6.23/patches/mux-remove-get_halted_bit.patch b/packages/linux/linux-ezx-2.6.23/patches/mux-remove-get_halted_bit.patch deleted file mode 100644 index 0ebe27d03b..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/mux-remove-get_halted_bit.patch +++ /dev/null @@ -1,22 +0,0 @@ -Index: linux-2.6.16/drivers/char/ts0710_mux_usb.c -=================================================================== ---- linux-2.6.16.orig/drivers/char/ts0710_mux_usb.c 2007-01-17 01:06:21.000000000 +0100 -+++ linux-2.6.16/drivers/char/ts0710_mux_usb.c 2007-01-17 01:06:31.000000000 +0100 -@@ -461,7 +461,7 @@ - ipcusb_xmit_data(); - } - --extern void get_halted_bit(void); -+//extern void get_halted_bit(void); - - static void usbipc_bh_bp_func(unsigned long param) - { -@@ -472,7 +472,7 @@ - "UHCRHPS3=0x%x", UHCRHPS3); - } - if (bvd_ipc->ipc_flag == IPC_USB_PROBE_READY) { -- get_halted_bit(); -+ //get_halted_bit(); - - /*send a IN token*/ - bvd_ipc->readurb_mux.dev = bvd_ipc->ipc_dev; diff --git a/packages/linux/linux-ezx-2.6.23/patches/mux-remove-usbh_finished_resume.patch b/packages/linux/linux-ezx-2.6.23/patches/mux-remove-usbh_finished_resume.patch deleted file mode 100644 index c415ded428..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/mux-remove-usbh_finished_resume.patch +++ /dev/null @@ -1,22 +0,0 @@ -Index: linux-2.6.16/drivers/char/ts0710_mux_usb.c -=================================================================== ---- linux-2.6.16.orig/drivers/char/ts0710_mux_usb.c 2007-01-17 01:12:23.000000000 +0100 -+++ linux-2.6.16/drivers/char/ts0710_mux_usb.c 2007-01-17 01:12:37.000000000 +0100 -@@ -97,7 +97,6 @@ - static int sumbit_times = 0; - static int callback_times = 0; - //static unsigned long last_jiff = 0; --extern int usbh_finished_resume; - /*end global values defined*/ - - MODULE_AUTHOR(DRIVER_AUTHOR); -@@ -546,9 +545,6 @@ - void usb_send_readurb(void) - { - //printk("usb_send_readurb: begining!UHCRHPS3=0x%x, usbh_finished_resume=%d\n", UHCRHPS3, usbh_finished_resume); -- -- if (usbh_finished_resume == 0) -- return; - - tasklet_schedule(&bvd_ipc->bh_bp); - } diff --git a/packages/linux/linux-ezx-2.6.23/patches/mux_cli.patch b/packages/linux/linux-ezx-2.6.23/patches/mux_cli.patch deleted file mode 100644 index 4938371d51..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/mux_cli.patch +++ /dev/null @@ -1,5396 +0,0 @@ -Index: linux-2.6.23/drivers/char/Kconfig -=================================================================== ---- linux-2.6.23.orig/drivers/char/Kconfig 2007-10-10 09:38:43.000000000 +0200 -+++ linux-2.6.23/drivers/char/Kconfig 2007-10-22 22:26:50.000000000 +0200 -@@ -1064,5 +1064,18 @@ - - source "drivers/s390/char/Kconfig" - -+config TS0710_MUX -+ tristate "GSM TS 07.10 Multiplex driver" -+ depends on EZX_BP -+ help -+ This implements the GSM 07.10 multiplex. -+ -+config TS0710_MUX_USB -+ tristate "Motorola USB support for TS 07.10 Multiplex driver" -+ depends on TS0710_MUX -+ help -+ This ads support for TS 07.10 over USB, as found in motorola -+ Smartphones. -+ - endmenu - -Index: linux-2.6.23/drivers/char/Makefile -=================================================================== ---- linux-2.6.23.orig/drivers/char/Makefile 2007-10-10 09:38:43.000000000 +0200 -+++ linux-2.6.23/drivers/char/Makefile 2007-10-22 22:26:50.000000000 +0200 -@@ -111,6 +111,9 @@ - obj-$(CONFIG_JS_RTC) += js-rtc.o - js-rtc-y = rtc.o - -+obj-$(CONFIG_TS0710_MUX) += ts0710_mux.o ts0710_mux_usb.o -+ -+ - # Files generated that shall be removed upon make clean - clean-files := consolemap_deftbl.c defkeymap.c - -Index: linux-2.6.23/drivers/char/ts0710.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/drivers/char/ts0710.h 2007-10-22 22:26:50.000000000 +0200 -@@ -0,0 +1,368 @@ -+/* -+ * File: ts0710.h -+ * -+ * Portions derived from rfcomm.c, original header as follows: -+ * -+ * Copyright (C) 2000, 2001 Axis Communications AB -+ * -+ * Author: Mats Friden <mats.friden@axis.com> -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * as published by the Free Software Foundation; either version 2 -+ * of the License, or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * Exceptionally, Axis Communications AB grants discretionary and -+ * conditional permissions for additional use of the text contained -+ * in the company's release of the AXIS OpenBT Stack under the -+ * provisions set forth hereunder. -+ * -+ * Provided that, if you use the AXIS OpenBT Stack with other files, -+ * that do not implement functionality as specified in the Bluetooth -+ * System specification, to produce an executable, this does not by -+ * itself cause the resulting executable to be covered by the GNU -+ * General Public License. Your use of that executable is in no way -+ * restricted on account of using the AXIS OpenBT Stack code with it. -+ * -+ * This exception does not however invalidate any other reasons why -+ * the executable file might be covered by the provisions of the GNU -+ * General Public License. -+ * -+ */ -+/* -+ * Copyright (C) 2002 Motorola -+ * -+ * 07/28/2002 Initial version based on rfcomm.c -+ * 11/18/2002 Modified -+ */ -+ -+#include <linux/config.h> -+#include <linux/module.h> -+ -+#include <linux/errno.h> -+#include <linux/sched.h> -+#include <linux/interrupt.h> -+#include <linux/tty.h> -+#include <linux/tty_flip.h> -+#include <linux/fcntl.h> -+#include <linux/string.h> -+#include <linux/major.h> -+#include <linux/mm.h> -+#include <linux/init.h> -+#include <linux/devfs_fs_kernel.h> -+ -+#include <asm/uaccess.h> -+#include <asm/system.h> -+#include <asm/bitops.h> -+ -+#include <asm/byteorder.h> -+#include <asm/types.h> -+ -+#define TS0710_MAX_CHN 14 -+ -+#define SET_PF(ctr) ((ctr) | (1 << 4)) -+#define CLR_PF(ctr) ((ctr) & 0xef) -+#define GET_PF(ctr) (((ctr) >> 4) & 0x1) -+ -+#define GET_PN_MSG_FRAME_SIZE(pn) ( ((pn)->frame_sizeh << 8) | ((pn)->frame_sizel)) -+#define SET_PN_MSG_FRAME_SIZE(pn, size) ({ (pn)->frame_sizel = (size) & 0xff; \ -+ (pn)->frame_sizeh = (size) >> 8; }) -+ -+#define GET_LONG_LENGTH(a) ( ((a).h_len << 7) | ((a).l_len) ) -+#define SET_LONG_LENGTH(a, length) ({ (a).ea = 0; \ -+ (a).l_len = length & 0x7F; \ -+ (a).h_len = (length >> 7) & 0xFF; }) -+ -+#define SHORT_CRC_CHECK 3 -+#define LONG_CRC_CHECK 4 -+ -+/* FIXME: Should thsi one be define here? */ -+#define SHORT_PAYLOAD_SIZE 127 -+ -+#define EA 1 -+#define FCS_SIZE 1 -+#define FLAG_SIZE 2 -+ -+#define TS0710_MAX_HDR_SIZE 5 -+#define DEF_TS0710_MTU 256 -+ -+#define TS0710_BASIC_FLAG 0xF9 -+/* the control field */ -+#define SABM 0x2f -+#define SABM_SIZE 4 -+#define UA 0x63 -+#define UA_SIZE 4 -+#define DM 0x0f -+#define DISC 0x43 -+#define UIH 0xef -+ -+/* the type field in a multiplexer command packet */ -+#define TEST 0x8 -+#define FCON 0x28 -+#define FCOFF 0x18 -+#define MSC 0x38 -+#define RPN 0x24 -+#define RLS 0x14 -+#define PN 0x20 -+#define NSC 0x4 -+ -+/* V.24 modem control signals */ -+#define FC 0x2 -+#define RTC 0x4 -+#define RTR 0x8 -+#define IC 0x40 -+#define DV 0x80 -+ -+#define CTRL_CHAN 0 /* The control channel is defined as DLCI 0 */ -+#define MCC_CMD 1 /* Multiplexer command cr */ -+#define MCC_RSP 0 /* Multiplexer response cr */ -+ -+#ifdef __LITTLE_ENDIAN_BITFIELD -+ -+typedef struct { -+ __u8 ea:1; -+ __u8 cr:1; -+ __u8 d:1; -+ __u8 server_chn:5; -+} __attribute__ ((packed)) address_field; -+ -+typedef struct { -+ __u8 ea:1; -+ __u8 len:7; -+} __attribute__ ((packed)) short_length; -+ -+typedef struct { -+ __u8 ea:1; -+ __u8 l_len:7; -+ __u8 h_len; -+} __attribute__ ((packed)) long_length; -+ -+typedef struct { -+ address_field addr; -+ __u8 control; -+ short_length length; -+} __attribute__ ((packed)) short_frame_head; -+ -+typedef struct { -+ short_frame_head h; -+ __u8 data[0]; -+} __attribute__ ((packed)) short_frame; -+ -+typedef struct { -+ address_field addr; -+ __u8 control; -+ long_length length; -+ __u8 data[0]; -+} __attribute__ ((packed)) long_frame_head; -+ -+typedef struct { -+ long_frame_head h; -+ __u8 data[0]; -+} __attribute__ ((packed)) long_frame; -+ -+/* Typedefinitions for structures used for the multiplexer commands */ -+typedef struct { -+ __u8 ea:1; -+ __u8 cr:1; -+ __u8 type:6; -+} __attribute__ ((packed)) mcc_type; -+ -+typedef struct { -+ mcc_type type; -+ short_length length; -+ __u8 value[0]; -+} __attribute__ ((packed)) mcc_short_frame_head; -+ -+typedef struct { -+ mcc_short_frame_head h; -+ __u8 value[0]; -+} __attribute__ ((packed)) mcc_short_frame; -+ -+typedef struct { -+ mcc_type type; -+ long_length length; -+ __u8 value[0]; -+} __attribute__ ((packed)) mcc_long_frame_head; -+ -+typedef struct { -+ mcc_long_frame_head h; -+ __u8 value[0]; -+} __attribute__ ((packed)) mcc_long_frame; -+ -+/* MSC-command */ -+typedef struct { -+ __u8 ea:1; -+ __u8 fc:1; -+ __u8 rtc:1; -+ __u8 rtr:1; -+ __u8 reserved:2; -+ __u8 ic:1; -+ __u8 dv:1; -+} __attribute__ ((packed)) v24_sigs; -+ -+typedef struct { -+ __u8 ea:1; -+ __u8 b1:1; -+ __u8 b2:1; -+ __u8 b3:1; -+ __u8 len:4; -+} __attribute__ ((packed)) brk_sigs; -+ -+typedef struct { -+ short_frame_head s_head; -+ mcc_short_frame_head mcc_s_head; -+ address_field dlci; -+ __u8 v24_sigs; -+ //brk_sigs break_signals; -+ __u8 fcs; -+} __attribute__ ((packed)) msc_msg; -+ -+#if 0 -+/* conflict with termios.h */ -+/* RPN command */ -+#define B2400 0 -+#define B4800 1 -+#define B7200 2 -+#define B9600 3 -+#define B19200 4 -+#define B38400 5 -+#define B57600 6 -+#define B115200 7 -+#define D230400 8 -+#endif -+ -+/* -+typedef struct{ -+ __u8 bit_rate:1; -+ __u8 data_bits:1; -+ __u8 stop_bit:1; -+ __u8 parity:1; -+ __u8 parity_type:1; -+ __u8 xon_u8:1; -+ __u8 xoff_u8:1; -+ __u8 res1:1; -+ __u8 xon_input:1; -+ __u8 xon_output:1; -+ __u8 rtr_input:1; -+ __u8 rtr_output:1; -+ __u8 rtc_input:1; -+ __u8 rtc_output:1; -+ __u8 res2:2; -+} __attribute__((packed)) parameter_mask; -+ -+typedef struct{ -+ __u8 bit_rate; -+ __u8 data_bits:2; -+ __u8 stop_bit:1; -+ __u8 parity:1; -+ __u8 parity_type:2; -+ __u8 res1:2; -+ __u8 xon_input:1; -+ __u8 xon_output:1; -+ __u8 rtr_input:1; -+ __u8 rtr_output:1; -+ __u8 rtc_input:1; -+ __u8 rtc_output:1; -+ __u8 res2:2; -+ __u8 xon_u8; -+ __u8 xoff_u8; -+ parameter_mask pm; -+} __attribute__((packed)) rpn_values; -+ -+typedef struct{ -+ short_frame_head s_head; -+ mcc_short_frame_head mcc_s_head; -+ address_field dlci; -+ rpn_values rpn_val; -+ __u8 fcs; -+} __attribute__((packed)) rpn_msg; -+*/ -+ -+/* RLS-command */ -+/* -+typedef struct{ -+ short_frame_head s_head; -+ mcc_short_frame_head mcc_s_head; -+ address_field dlci; -+ __u8 error:4; -+ __u8 res:4; -+ __u8 fcs; -+} __attribute__((packed)) rls_msg; -+*/ -+ -+/* PN-command */ -+typedef struct { -+ short_frame_head s_head; -+ mcc_short_frame_head mcc_s_head; -+ __u8 dlci:6; -+ __u8 res1:2; -+ __u8 frame_type:4; -+ __u8 credit_flow:4; -+ __u8 prior:6; -+ __u8 res2:2; -+ __u8 ack_timer; -+ __u8 frame_sizel; -+ __u8 frame_sizeh; -+ __u8 max_nbrof_retrans; -+ __u8 credits; -+ __u8 fcs; -+} __attribute__ ((packed)) pn_msg; -+ -+/* NSC-command */ -+typedef struct { -+ short_frame_head s_head; -+ mcc_short_frame_head mcc_s_head; -+ mcc_type command_type; -+ __u8 fcs; -+} __attribute__ ((packed)) nsc_msg; -+ -+#else -+#error Only littel-endianess supported now! -+#endif -+ -+enum { -+ REJECTED = 0, -+ DISCONNECTED, -+ CONNECTING, -+ NEGOTIATING, -+ CONNECTED, -+ DISCONNECTING, -+ FLOW_STOPPED -+}; -+ -+enum ts0710_events { -+ CONNECT_IND, -+ CONNECT_CFM, -+ DISCONN_CFM -+}; -+ -+typedef struct { -+ volatile __u8 state; -+ volatile __u8 flow_control; -+ volatile __u8 initiated; -+ volatile __u8 initiator; -+ volatile __u16 mtu; -+ wait_queue_head_t open_wait; -+ wait_queue_head_t close_wait; -+} dlci_struct; -+ -+/* user space interfaces */ -+typedef struct { -+ volatile __u8 initiator; -+ volatile __u8 c_dlci; -+ volatile __u16 mtu; -+ volatile __u8 be_testing; -+ volatile __u32 test_errs; -+ wait_queue_head_t test_wait; -+ -+ dlci_struct dlci[TS0710_MAX_CHN]; -+} ts0710_con; -Index: linux-2.6.23/drivers/char/ts0710_mux.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/drivers/char/ts0710_mux.c 2007-10-22 22:26:50.000000000 +0200 -@@ -0,0 +1,3966 @@ -+/* -+ * File: mux_driver.c -+ * -+ * Portions derived from rfcomm.c, original header as follows: -+ * -+ * Copyright (C) 2000, 2001 Axis Communications AB -+ * -+ * Author: Mats Friden <mats.friden@axis.com> -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * as published by the Free Software Foundation; either version 2 -+ * of the License, or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * Exceptionally, Axis Communications AB grants discretionary and -+ * conditional permissions for additional use of the text contained -+ * in the company's release of the AXIS OpenBT Stack under the -+ * provisions set forth hereunder. -+ * -+ * Provided that, if you use the AXIS OpenBT Stack with other files, -+ * that do not implement functionality as specified in the Bluetooth -+ * System specification, to produce an executable, this does not by -+ * itself cause the resulting executable to be covered by the GNU -+ * General Public License. Your use of that executable is in no way -+ * restricted on account of using the AXIS OpenBT Stack code with it. -+ * -+ * This exception does not however invalidate any other reasons why -+ * the executable file might be covered by the provisions of the GNU -+ * General Public License. -+ * -+ */ -+/* -+ * Copyright (C) 2002-2004 Motorola -+ * Copyright (C) 2006 Harald Welte <laforge@openezx.org> -+ * -+ * 07/28/2002 Initial version -+ * 11/18/2002 Second version -+ * 04/21/2004 Add GPRS PROC -+ */ -+#include <linux/config.h> -+#include <linux/module.h> -+#include <linux/types.h> -+ -+#include <linux/kernel.h> -+#include <linux/proc_fs.h> -+ -+#define USB_FOR_MUX -+ -+#ifndef USB_FOR_MUX -+#include <linux/serial.h> -+#endif -+ -+#include <linux/errno.h> -+#include <linux/sched.h> -+#include <linux/interrupt.h> -+#include <linux/tty.h> -+#include <linux/tty_flip.h> -+#include <linux/fcntl.h> -+#include <linux/string.h> -+#include <linux/major.h> -+#include <linux/mm.h> -+#include <linux/slab.h> -+#include <linux/init.h> -+#include <linux/devfs_fs_kernel.h> -+//#include <syslog.h> -+ -+#include <asm/uaccess.h> -+#include <asm/system.h> -+#include <asm/bitops.h> -+ -+#ifdef USB_FOR_MUX -+//#include <linux/usb.h> -+#include "ts0710_mux_usb.h" -+#endif -+ -+#include "ts0710.h" -+#include "ts0710_mux.h" -+ -+#define TS0710MUX_GPRS_SESSION_MAX 2 -+#define TS0710MUX_MAJOR 250 -+#define TS0710MUX_MINOR_START 0 -+#define NR_MUXS 16 -+ -+ /*#define TS0710MUX_TIME_OUT 30 *//* 300ms */ -+#define TS0710MUX_TIME_OUT 250 /* 2500ms, for BP UART hardware flow control AP UART */ -+ -+#define TS0710MUX_IO_DLCI_FC_ON 0x54F2 -+#define TS0710MUX_IO_DLCI_FC_OFF 0x54F3 -+#define TS0710MUX_IO_FC_ON 0x54F4 -+#define TS0710MUX_IO_FC_OFF 0x54F5 -+ -+#define TS0710MUX_MAX_BUF_SIZE 2048 -+ -+#define TS0710MUX_SEND_BUF_OFFSET 10 -+#define TS0710MUX_SEND_BUF_SIZE (DEF_TS0710_MTU + TS0710MUX_SEND_BUF_OFFSET + 34) -+#define TS0710MUX_RECV_BUF_SIZE TS0710MUX_SEND_BUF_SIZE -+ -+/*For BP UART problem Begin*/ -+#ifdef TS0710SEQ2 -+#define ACK_SPACE 66 /* 6 * 11(ACK frame size) */ -+#else -+#define ACK_SPACE 42 /* 6 * 7(ACK frame size) */ -+#endif -+/*For BP UART problem End*/ -+ -+ /*#define TS0710MUX_SERIAL_BUF_SIZE (DEF_TS0710_MTU + TS0710_MAX_HDR_SIZE)*//* For BP UART problem */ -+#define TS0710MUX_SERIAL_BUF_SIZE (DEF_TS0710_MTU + TS0710_MAX_HDR_SIZE + ACK_SPACE) /* For BP UART problem: ACK_SPACE */ -+ -+#define TS0710MUX_MAX_TOTAL_FRAME_SIZE (DEF_TS0710_MTU + TS0710_MAX_HDR_SIZE + FLAG_SIZE) -+#define TS0710MUX_MAX_CHARS_IN_BUF 65535 -+#define TS0710MUX_THROTTLE_THRESHOLD DEF_TS0710_MTU -+ -+#define TEST_PATTERN_SIZE 250 -+ -+#define CMDTAG 0x55 -+#define DATATAG 0xAA -+ -+#define ACK 0x4F /*For BP UART problem */ -+ -+/*For BP UART problem Begin*/ -+#ifdef TS0710SEQ2 -+#define FIRST_BP_SEQ_OFFSET 1 /*offset from start flag */ -+#define SECOND_BP_SEQ_OFFSET 2 /*offset from start flag */ -+#define FIRST_AP_SEQ_OFFSET 3 /*offset from start flag */ -+#define SECOND_AP_SEQ_OFFSET 4 /*offset from start flag */ -+#define SLIDE_BP_SEQ_OFFSET 5 /*offset from start flag */ -+#define SEQ_FIELD_SIZE 5 -+#else -+#define SLIDE_BP_SEQ_OFFSET 1 /*offset from start flag */ -+#define SEQ_FIELD_SIZE 1 -+#endif -+ -+#define ADDRESS_FIELD_OFFSET (1 + SEQ_FIELD_SIZE) /*offset from start flag */ -+/*For BP UART problem End*/ -+ -+#ifndef UNUSED_PARAM -+#define UNUSED_PARAM(v) (void)(v) -+#endif -+ -+#define TS0710MUX_GPRS1_DLCI 7 -+#define TS0710MUX_GPRS2_DLCI 8 -+ -+#define TS0710MUX_GPRS1_RECV_COUNT_IDX 0 -+#define TS0710MUX_GPRS1_SEND_COUNT_IDX 1 -+#define TS0710MUX_GPRS2_RECV_COUNT_IDX 2 -+#define TS0710MUX_GPRS2_SEND_COUNT_IDX 3 -+#define TS0710MUX_COUNT_MAX_IDX 3 -+#define TS0710MUX_COUNT_IDX_NUM (TS0710MUX_COUNT_MAX_IDX + 1) -+ -+static volatile int mux_data_count[TS0710MUX_COUNT_IDX_NUM] = { 0, 0, 0, 0 }; -+static volatile int mux_data_count2[TS0710MUX_COUNT_IDX_NUM] = { 0, 0, 0, 0 }; -+static struct semaphore mux_data_count_mutex[TS0710MUX_COUNT_IDX_NUM]; -+static volatile __u8 post_recv_count_flag = 0; -+ -+/*PROC file*/ -+struct proc_dir_entry *gprs_proc_file = NULL; -+ssize_t file_proc_read(struct file *file, char *buf, size_t size, -+ loff_t * ppos); -+ssize_t file_proc_write(struct file *file, const char *buf, size_t count, -+ loff_t * ppos); -+struct file_operations file_proc_operations = { -+ read:file_proc_read, -+ write:file_proc_write, -+}; -+typedef struct { -+ int recvBytes; -+ int sentBytes; -+} gprs_bytes; -+ -+static __u8 tty2dlci[NR_MUXS] = -+ { 1, 2, 3, 4, 5, 6, 7, 8, 6, 7, 8, 9, 10, 11, 12, 13 }; -+static __u8 iscmdtty[NR_MUXS] = -+ { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }; -+typedef struct { -+ __u8 cmdtty; -+ __u8 datatty; -+} dlci_tty; -+static dlci_tty dlci2tty[] = { {0, 0}, /* DLCI 0 */ -+{0, 0}, /* DLCI 1 */ -+{1, 1}, /* DLCI 2 */ -+{2, 2}, /* DLCI 3 */ -+{3, 3}, /* DLCI 4 */ -+{4, 4}, /* DLCI 5 */ -+{5, 8}, /* DLCI 6 */ -+{6, 9}, /* DLCI 7 */ -+{7, 10}, /* DLCI 8 */ -+{11, 11}, /* DLCI 9 */ -+{12, 12}, /* DLCI 10 */ -+{13, 13}, /* DLCI 11 */ -+{14, 14}, /* DLCI 12 */ -+{15, 15} -+}; /* DLCI 13 */ -+ -+typedef struct { -+ volatile __u8 buf[TS0710MUX_SEND_BUF_SIZE]; -+ volatile __u8 *frame; -+ unsigned long flags; -+ volatile __u16 length; -+ volatile __u8 filled; -+ volatile __u8 dummy; /* Allignment to 4*n bytes */ -+} mux_send_struct; -+ -+/* Bit number in flags of mux_send_struct */ -+#define BUF_BUSY 0 -+ -+struct mux_recv_packet_tag { -+ __u8 *data; -+ __u32 length; -+ struct mux_recv_packet_tag *next; -+}; -+typedef struct mux_recv_packet_tag mux_recv_packet; -+ -+struct mux_recv_struct_tag { -+ __u8 data[TS0710MUX_RECV_BUF_SIZE]; -+ __u32 length; -+ __u32 total; -+ mux_recv_packet *mux_packet; -+ struct mux_recv_struct_tag *next; -+ int no_tty; -+ volatile __u8 post_unthrottle; -+}; -+typedef struct mux_recv_struct_tag mux_recv_struct; -+ -+#define RECV_RUNNING 0 -+static unsigned long mux_recv_flags = 0; -+ -+static mux_send_struct *mux_send_info[NR_MUXS]; -+static volatile __u8 mux_send_info_flags[NR_MUXS]; -+static volatile __u8 mux_send_info_idx = NR_MUXS; -+ -+static mux_recv_struct *mux_recv_info[NR_MUXS]; -+static volatile __u8 mux_recv_info_flags[NR_MUXS]; -+static mux_recv_struct *mux_recv_queue = NULL; -+ -+static struct tty_driver mux_driver; -+ -+#ifdef USB_FOR_MUX -+#define COMM_FOR_MUX_DRIVER usb_for_mux_driver -+#define COMM_FOR_MUX_TTY usb_for_mux_tty -+#define COMM_MUX_DISPATCHER usb_mux_dispatcher -+#define COMM_MUX_SENDER usb_mux_sender -+#else -+#define COMM_FOR_MUX_DRIVER serial_for_mux_driver -+#define COMM_FOR_MUX_TTY serial_for_mux_tty -+#define COMM_MUX_DISPATCHER serial_mux_dispatcher -+#define COMM_MUX_SENDER serial_mux_sender -+ -+extern struct list_head *tq_serial_for_mux; -+#endif -+ -+extern struct tty_driver *COMM_FOR_MUX_DRIVER; -+extern struct tty_struct *COMM_FOR_MUX_TTY; -+extern void (*COMM_MUX_DISPATCHER) (struct tty_struct * tty); -+extern void (*COMM_MUX_SENDER) (void); -+ -+static struct work_struct send_tqueue; -+static struct work_struct receive_tqueue; -+static struct work_struct post_recv_tqueue; -+ -+static struct tty_struct *mux_table[NR_MUXS]; -+static struct termios *mux_termios[NR_MUXS]; -+static struct termios *mux_termios_locked[NR_MUXS]; -+static volatile short int mux_tty[NR_MUXS]; -+ -+#ifdef min -+#undef min -+#define min(a,b) ( (a)<(b) ? (a):(b) ) -+#endif -+ -+static int get_count(__u8 idx); -+static int set_count(__u8 idx, int count); -+static int add_count(__u8 idx, int count); -+ -+static int send_ua(ts0710_con * ts0710, __u8 dlci); -+static int send_dm(ts0710_con * ts0710, __u8 dlci); -+static int send_sabm(ts0710_con * ts0710, __u8 dlci); -+static int send_disc(ts0710_con * ts0710, __u8 dlci); -+static void queue_uih(mux_send_struct * send_info, __u16 len, -+ ts0710_con * ts0710, __u8 dlci); -+static int send_pn_msg(ts0710_con * ts0710, __u8 prior, __u32 frame_size, -+ __u8 credit_flow, __u8 credits, __u8 dlci, __u8 cr); -+static int send_nsc_msg(ts0710_con * ts0710, mcc_type cmd, __u8 cr); -+static void set_uih_hdr(short_frame * uih_pkt, __u8 dlci, __u32 len, __u8 cr); -+ -+static __u32 crc_check(__u8 * data, __u32 length, __u8 check_sum); -+static __u8 crc_calc(__u8 * data, __u32 length); -+static void create_crctable(__u8 table[]); -+ -+static void mux_sched_send(void); -+ -+static __u8 crctable[256]; -+ -+static ts0710_con ts0710_connection; -+/* -+static rpn_values rpn_val; -+*/ -+ -+static int valid_dlci(__u8 dlci) -+{ -+ if ((dlci < TS0710_MAX_CHN) && (dlci > 0)) -+ return 1; -+ else -+ return 0; -+} -+ -+#ifdef TS0710DEBUG -+ -+#ifdef PRINT_OUTPUT_PRINTK -+#define TS0710_DEBUG(fmt, arg...) printk(KERN_INFO "MUX " __FUNCTION__ ": " fmt "\n" , ## arg) -+#else -+#include "ezxlog.h" -+static __u8 strDebug[256]; -+#define TS0710_DEBUG(fmt, arg...) ({ snprintf(strDebug, sizeof(strDebug), "MUX " __FUNCTION__ ": " fmt "\n" , ## arg); \ -+ /*printk("%s", strDebug)*/ezxlogk("MX", strDebug, strlen(strDebug)); }) -+#endif /* End #ifdef PRINT_OUTPUT_PRINTK */ -+ -+#else -+#define TS0710_DEBUG(fmt...) -+#endif /* End #ifdef TS0710DEBUG */ -+ -+#ifdef TS0710LOG -+static unsigned char g_tbuf[TS0710MUX_MAX_BUF_SIZE]; -+#ifdef PRINT_OUTPUT_PRINTK -+#define TS0710_LOG(fmt, arg...) printk(fmt, ## arg) -+#define TS0710_PRINTK(fmt, arg...) printk(fmt, ## arg) -+#else -+#include "ezxlog.h" -+static __u8 strLog[256]; -+#define TS0710_LOG(fmt, arg...) ({ snprintf(strLog, sizeof(strLog), fmt, ## arg); \ -+ /*printk("%s", strLog)*/ezxlogk("MX", strLog, strlen(strLog)); }) -+#define TS0710_PRINTK(fmt, arg...) ({ printk(fmt, ## arg); \ -+ TS0710_LOG(fmt, ## arg); }) -+#endif /* End #ifdef PRINT_OUTPUT_PRINTK */ -+ -+#else -+#define TS0710_LOG(fmt...) -+#define TS0710_PRINTK(fmt, arg...) printk(fmt, ## arg) -+#endif /* End #ifdef TS0710LOG */ -+ -+#ifdef TS0710DEBUG -+static void TS0710_DEBUGHEX(__u8 * buf, int len) -+{ -+ static unsigned char tbuf[TS0710MUX_MAX_BUF_SIZE]; -+ -+ int i; -+ int c; -+ -+ if (len <= 0) { -+ return; -+ } -+ -+ c = 0; -+ for (i = 0; (i < len) && (c < (TS0710MUX_MAX_BUF_SIZE - 3)); i++) { -+ sprintf(&tbuf[c], "%02x ", buf[i]); -+ c += 3; -+ } -+ tbuf[c] = 0; -+ -+#ifdef PRINT_OUTPUT_PRINTK -+ TS0710_DEBUG("%s", tbuf); -+#else -+ /*printk("%s\n", tbuf) */ ezxlogk("MX", tbuf, c); -+#endif -+} -+static void TS0710_DEBUGSTR(__u8 * buf, int len) -+{ -+ static unsigned char tbuf[TS0710MUX_MAX_BUF_SIZE]; -+ -+ if (len <= 0) { -+ return; -+ } -+ -+ if (len > (TS0710MUX_MAX_BUF_SIZE - 1)) { -+ len = (TS0710MUX_MAX_BUF_SIZE - 1); -+ } -+ -+ memcpy(tbuf, buf, len); -+ tbuf[len] = 0; -+ -+#ifdef PRINT_OUTPUT_PRINTK -+ /* 0x00 byte in the string pointed by tbuf may truncate the print result */ -+ TS0710_DEBUG("%s", tbuf); -+#else -+ /*printk("%s\n", tbuf) */ ezxlogk("MX", tbuf, len); -+#endif -+} -+#else -+#define TS0710_DEBUGHEX(buf, len) -+#define TS0710_DEBUGSTR(buf, len) -+#endif /* End #ifdef TS0710DEBUG */ -+ -+#ifdef TS0710LOG -+static void TS0710_LOGSTR_FRAME(__u8 send, __u8 * data, int len) -+{ -+ short_frame *short_pkt; -+ long_frame *long_pkt; -+ __u8 *uih_data_start; -+ __u32 uih_len; -+ __u8 dlci; -+ int pos; -+ -+ if (len <= 0) { -+ return; -+ } -+ -+ pos = 0; -+ if (send) { -+ pos += sprintf(&g_tbuf[pos], "<"); -+ short_pkt = (short_frame *) (data + 1); /*For BP UART problem */ -+ } else { -+ /*For BP UART problem */ -+ /*pos += sprintf(&g_tbuf[pos], ">"); */ -+ pos += sprintf(&g_tbuf[pos], ">%d ", *(data + SLIDE_BP_SEQ_OFFSET)); /*For BP UART problem */ -+ -+#ifdef TS0710SEQ2 -+ pos += sprintf(&g_tbuf[pos], "%02x %02x %02x %02x ", *(data + FIRST_BP_SEQ_OFFSET), *(data + SECOND_BP_SEQ_OFFSET), *(data + FIRST_AP_SEQ_OFFSET), *(data + SECOND_AP_SEQ_OFFSET)); /*For BP UART problem */ -+#endif -+ -+ short_pkt = (short_frame *) (data + ADDRESS_FIELD_OFFSET); /*For BP UART problem */ -+ } -+ -+ /*For BP UART problem */ -+ /*short_pkt = (short_frame *)(data + 1); */ -+ -+ dlci = short_pkt->h.addr.server_chn << 1 | short_pkt->h.addr.d; -+ switch (CLR_PF(short_pkt->h.control)) { -+ case SABM: -+ pos += sprintf(&g_tbuf[pos], "C SABM %d ::", dlci); -+ break; -+ case UA: -+ pos += sprintf(&g_tbuf[pos], "C UA %d ::", dlci); -+ break; -+ case DM: -+ pos += sprintf(&g_tbuf[pos], "C DM %d ::", dlci); -+ break; -+ case DISC: -+ pos += sprintf(&g_tbuf[pos], "C DISC %d ::", dlci); -+ break; -+ -+ /*For BP UART problem Begin */ -+ case ACK: -+ pos += sprintf(&g_tbuf[pos], "C ACK %d ", short_pkt->data[0]); -+ -+#ifdef TS0710SEQ2 -+ pos += sprintf(&g_tbuf[pos], "%02x %02x %02x %02x ", short_pkt->data[1], short_pkt->data[2], short_pkt->data[3], short_pkt->data[4]); /*For BP UART problem */ -+#endif -+ -+ pos += sprintf(&g_tbuf[pos], "::"); -+ break; -+ /*For BP UART problem End */ -+ -+ case UIH: -+ if (!dlci) { -+ pos += sprintf(&g_tbuf[pos], "C MCC %d ::", dlci); -+ } else { -+ -+ if ((short_pkt->h.length.ea) == 0) { -+ long_pkt = (long_frame *) short_pkt; -+ uih_len = GET_LONG_LENGTH(long_pkt->h.length); -+ uih_data_start = long_pkt->h.data; -+ } else { -+ uih_len = short_pkt->h.length.len; -+ uih_data_start = short_pkt->data; -+ } -+ switch (*uih_data_start) { -+ case CMDTAG: -+ pos += -+ sprintf(&g_tbuf[pos], "I %d A %d ::", dlci, -+ uih_len); -+ break; -+ case DATATAG: -+ default: -+ pos += -+ sprintf(&g_tbuf[pos], "I %d D %d ::", dlci, -+ uih_len); -+ break; -+ } -+ -+ } -+ break; -+ default: -+ pos += sprintf(&g_tbuf[pos], "N!!! %d ::", dlci); -+ break; -+ } -+ -+ if (len > (sizeof(g_tbuf) - pos - 1)) { -+ len = (sizeof(g_tbuf) - pos - 1); -+ } -+ -+ memcpy(&g_tbuf[pos], data, len); -+ pos += len; -+ g_tbuf[pos] = 0; -+ -+#ifdef PRINT_OUTPUT_PRINTK -+ /* 0x00 byte in the string pointed by g_tbuf may truncate the print result */ -+ TS0710_LOG("%s\n", g_tbuf); -+#else -+ /*printk("%s\n", g_tbuf) */ ezxlogk("MX", g_tbuf, pos); -+#endif -+} -+#else -+#define TS0710_LOGSTR_FRAME(send, data, len) -+#endif -+ -+#ifdef TS0710SIG -+#define my_for_each_task(p) \ -+ for ((p) = current; ((p) = (p)->next_task) != current; ) -+ -+static void TS0710_SIG2APLOGD(void) -+{ -+ struct task_struct *p; -+ static __u8 sig = 0; -+ -+ if (sig) { -+ return; -+ } -+ -+ read_lock(&tasklist_lock); -+ my_for_each_task(p) { -+ if (strncmp(p->comm, "aplogd", 6) == 0) { -+ sig = 1; -+ if (send_sig(SIGUSR2, p, 1) == 0) { -+ TS0710_PRINTK -+ ("MUX: success to send SIGUSR2 to aplogd!\n"); -+ } else { -+ TS0710_PRINTK -+ ("MUX: failure to send SIGUSR2 to aplogd!\n"); -+ } -+ break; -+ } -+ } -+ read_unlock(&tasklist_lock); -+ -+ if (!sig) { -+ TS0710_PRINTK("MUX: not found aplogd!\n"); -+ } -+} -+#else -+#define TS0710_SIG2APLOGD() -+#endif -+ -+static int basic_write(ts0710_con * ts0710, __u8 * buf, int len) -+{ -+ int res; -+ -+ UNUSED_PARAM(ts0710); -+ -+ buf[0] = TS0710_BASIC_FLAG; -+ buf[len + 1] = TS0710_BASIC_FLAG; -+ -+ if ((COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)) { -+ TS0710_PRINTK -+ ("MUX basic_write: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n"); -+ -+#ifndef USB_FOR_MUX -+ TS0710_PRINTK -+ ("MUX basic_write: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n"); -+ TS0710_SIG2APLOGD(); -+#endif -+ -+ return -1; -+ } -+ -+ TS0710_LOGSTR_FRAME(1, buf, len + 2); -+ TS0710_DEBUGHEX(buf, len + 2); -+ -+ res = COMM_FOR_MUX_DRIVER->write(COMM_FOR_MUX_TTY, buf, len + 2); -+ -+ if (res != len + 2) { -+ TS0710_PRINTK("MUX basic_write: Write Error!\n"); -+ return -1; -+ } -+ -+ return len + 2; -+} -+ -+/* Functions for the crc-check and calculation */ -+ -+#define CRC_VALID 0xcf -+ -+static __u32 crc_check(__u8 * data, __u32 length, __u8 check_sum) -+{ -+ __u8 fcs = 0xff; -+ -+ while (length--) { -+ fcs = crctable[fcs ^ *data++]; -+ } -+ fcs = crctable[fcs ^ check_sum]; -+ TS0710_DEBUG("fcs : %d\n", fcs); -+ if (fcs == (uint) 0xcf) { /*CRC_VALID) */ -+ TS0710_DEBUG("crc_check: CRC check OK\n"); -+ return 0; -+ } else { -+ TS0710_PRINTK("MUX crc_check: CRC check failed\n"); -+ return 1; -+ } -+} -+ -+/* Calculates the checksum according to the ts0710 specification */ -+ -+static __u8 crc_calc(__u8 * data, __u32 length) -+{ -+ __u8 fcs = 0xff; -+ -+ while (length--) { -+ fcs = crctable[fcs ^ *data++]; -+ } -+ -+ return 0xff - fcs; -+} -+ -+/* Calulates a reversed CRC table for the FCS check */ -+ -+static void create_crctable(__u8 table[]) -+{ -+ int i, j; -+ -+ __u8 data; -+ __u8 code_word = (__u8) 0xe0; -+ __u8 sr = (__u8) 0; -+ -+ for (j = 0; j < 256; j++) { -+ data = (__u8) j; -+ -+ for (i = 0; i < 8; i++) { -+ if ((data & 0x1) ^ (sr & 0x1)) { -+ sr >>= 1; -+ sr ^= code_word; -+ } else { -+ sr >>= 1; -+ } -+ -+ data >>= 1; -+ sr &= 0xff; -+ } -+ -+ table[j] = sr; -+ sr = 0; -+ } -+} -+ -+static void ts0710_reset_dlci(__u8 j) -+{ -+ if (j >= TS0710_MAX_CHN) -+ return; -+ -+ ts0710_connection.dlci[j].state = DISCONNECTED; -+ ts0710_connection.dlci[j].flow_control = 0; -+ ts0710_connection.dlci[j].mtu = DEF_TS0710_MTU; -+ ts0710_connection.dlci[j].initiated = 0; -+ ts0710_connection.dlci[j].initiator = 0; -+ init_waitqueue_head(&ts0710_connection.dlci[j].open_wait); -+ init_waitqueue_head(&ts0710_connection.dlci[j].close_wait); -+} -+ -+static void ts0710_reset_con(void) -+{ -+ __u8 j; -+ -+ ts0710_connection.initiator = 0; -+ ts0710_connection.mtu = DEF_TS0710_MTU + TS0710_MAX_HDR_SIZE; -+ ts0710_connection.be_testing = 0; -+ ts0710_connection.test_errs = 0; -+ init_waitqueue_head(&ts0710_connection.test_wait); -+ -+ for (j = 0; j < TS0710_MAX_CHN; j++) { -+ ts0710_reset_dlci(j); -+ } -+} -+ -+static void ts0710_init(void) -+{ -+ create_crctable(crctable); -+ -+ ts0710_reset_con(); -+ -+ /* Set the values in the rpn octets */ -+/* -+ rpn_val.bit_rate = 7; -+ rpn_val.data_bits = 3; -+ rpn_val.stop_bit = 0; -+ rpn_val.parity = 0; -+ rpn_val.parity_type = 0; -+ rpn_val.res1 = 0; -+ rpn_val.xon_input = 0; -+ rpn_val.xon_output = 0; -+ rpn_val.rtr_input = 0; -+ rpn_val.rtr_output = 0; -+ rpn_val.rtc_input = 0; -+ rpn_val.rtc_output = 0; -+ rpn_val.res2 = 0; -+ rpn_val.xon_u8 = 0x11; -+ rpn_val.xoff_u8 = 0x13; -+ memset(&rpn_val.pm, 0 , 2); *//* Set the mask to zero */ -+} -+ -+static void ts0710_upon_disconnect(void) -+{ -+ ts0710_con *ts0710 = &ts0710_connection; -+ __u8 j; -+ -+ for (j = 0; j < TS0710_MAX_CHN; j++) { -+ ts0710->dlci[j].state = DISCONNECTED; -+ wake_up_interruptible(&ts0710->dlci[j].open_wait); -+ wake_up_interruptible(&ts0710->dlci[j].close_wait); -+ } -+ ts0710->be_testing = 0; -+ wake_up_interruptible(&ts0710->test_wait); -+ ts0710_reset_con(); -+} -+ -+/* Sending packet functions */ -+ -+/* Creates a UA packet and puts it at the beginning of the pkt pointer */ -+ -+static int send_ua(ts0710_con * ts0710, __u8 dlci) -+{ -+ __u8 buf[sizeof(short_frame) + FCS_SIZE + FLAG_SIZE]; -+ short_frame *ua; -+ -+ TS0710_DEBUG("send_ua: Creating UA packet to DLCI %d\n", dlci); -+ -+ ua = (short_frame *) (buf + 1); -+ ua->h.addr.ea = 1; -+ ua->h.addr.cr = ((~(ts0710->initiator)) & 0x1); -+ ua->h.addr.d = (dlci) & 0x1; -+ ua->h.addr.server_chn = (dlci) >> 0x1; -+ ua->h.control = SET_PF(UA); -+ ua->h.length.ea = 1; -+ ua->h.length.len = 0; -+ ua->data[0] = crc_calc((__u8 *) ua, SHORT_CRC_CHECK); -+ -+ return basic_write(ts0710, buf, sizeof(short_frame) + FCS_SIZE); -+} -+ -+/* Creates a DM packet and puts it at the beginning of the pkt pointer */ -+ -+static int send_dm(ts0710_con * ts0710, __u8 dlci) -+{ -+ __u8 buf[sizeof(short_frame) + FCS_SIZE + FLAG_SIZE]; -+ short_frame *dm; -+ -+ TS0710_DEBUG("send_dm: Creating DM packet to DLCI %d\n", dlci); -+ -+ dm = (short_frame *) (buf + 1); -+ dm->h.addr.ea = 1; -+ dm->h.addr.cr = ((~(ts0710->initiator)) & 0x1); -+ dm->h.addr.d = dlci & 0x1; -+ dm->h.addr.server_chn = dlci >> 0x1; -+ dm->h.control = SET_PF(DM); -+ dm->h.length.ea = 1; -+ dm->h.length.len = 0; -+ dm->data[0] = crc_calc((__u8 *) dm, SHORT_CRC_CHECK); -+ -+ return basic_write(ts0710, buf, sizeof(short_frame) + FCS_SIZE); -+} -+ -+static int send_sabm(ts0710_con * ts0710, __u8 dlci) -+{ -+ __u8 buf[sizeof(short_frame) + FCS_SIZE + FLAG_SIZE]; -+ short_frame *sabm; -+ -+ TS0710_DEBUG("send_sabm: Creating SABM packet to DLCI %d\n", dlci); -+ -+ sabm = (short_frame *) (buf + 1); -+ sabm->h.addr.ea = 1; -+ sabm->h.addr.cr = ((ts0710->initiator) & 0x1); -+ sabm->h.addr.d = dlci & 0x1; -+ sabm->h.addr.server_chn = dlci >> 0x1; -+ sabm->h.control = SET_PF(SABM); -+ sabm->h.length.ea = 1; -+ sabm->h.length.len = 0; -+ sabm->data[0] = crc_calc((__u8 *) sabm, SHORT_CRC_CHECK); -+ -+ return basic_write(ts0710, buf, sizeof(short_frame) + FCS_SIZE); -+} -+ -+static int send_disc(ts0710_con * ts0710, __u8 dlci) -+{ -+ __u8 buf[sizeof(short_frame) + FCS_SIZE + FLAG_SIZE]; -+ short_frame *disc; -+ -+ TS0710_DEBUG("send_disc: Creating DISC packet to DLCI %d\n", dlci); -+ -+ disc = (short_frame *) (buf + 1); -+ disc->h.addr.ea = 1; -+ disc->h.addr.cr = ((ts0710->initiator) & 0x1); -+ disc->h.addr.d = dlci & 0x1; -+ disc->h.addr.server_chn = dlci >> 0x1; -+ disc->h.control = SET_PF(DISC); -+ disc->h.length.ea = 1; -+ disc->h.length.len = 0; -+ disc->data[0] = crc_calc((__u8 *) disc, SHORT_CRC_CHECK); -+ -+ return basic_write(ts0710, buf, sizeof(short_frame) + FCS_SIZE); -+} -+ -+static void queue_uih(mux_send_struct * send_info, __u16 len, -+ ts0710_con * ts0710, __u8 dlci) -+{ -+ __u32 size; -+ -+ TS0710_DEBUG -+ ("queue_uih: Creating UIH packet with %d bytes data to DLCI %d\n", -+ len, dlci); -+ -+ if (len > SHORT_PAYLOAD_SIZE) { -+ long_frame *l_pkt; -+ -+ size = sizeof(long_frame) + len + FCS_SIZE; -+ l_pkt = (long_frame *) (send_info->frame - sizeof(long_frame)); -+ set_uih_hdr((void *)l_pkt, dlci, len, ts0710->initiator); -+ l_pkt->data[len] = crc_calc((__u8 *) l_pkt, LONG_CRC_CHECK); -+ send_info->frame = ((__u8 *) l_pkt) - 1; -+ } else { -+ short_frame *s_pkt; -+ -+ size = sizeof(short_frame) + len + FCS_SIZE; -+ s_pkt = -+ (short_frame *) (send_info->frame - sizeof(short_frame)); -+ set_uih_hdr((void *)s_pkt, dlci, len, ts0710->initiator); -+ s_pkt->data[len] = crc_calc((__u8 *) s_pkt, SHORT_CRC_CHECK); -+ send_info->frame = ((__u8 *) s_pkt) - 1; -+ } -+ send_info->length = size; -+} -+ -+/* Multiplexer command packets functions */ -+ -+/* Turns on the ts0710 flow control */ -+ -+static int ts0710_fcon_msg(ts0710_con * ts0710, __u8 cr) -+{ -+ __u8 buf[30]; -+ mcc_short_frame *mcc_pkt; -+ short_frame *uih_pkt; -+ __u32 size; -+ -+ size = sizeof(short_frame) + sizeof(mcc_short_frame) + FCS_SIZE; -+ uih_pkt = (short_frame *) (buf + 1); -+ set_uih_hdr(uih_pkt, CTRL_CHAN, sizeof(mcc_short_frame), -+ ts0710->initiator); -+ uih_pkt->data[sizeof(mcc_short_frame)] = -+ crc_calc((__u8 *) uih_pkt, SHORT_CRC_CHECK); -+ mcc_pkt = (mcc_short_frame *) (uih_pkt->data); -+ -+ mcc_pkt->h.type.ea = EA; -+ mcc_pkt->h.type.cr = cr; -+ mcc_pkt->h.type.type = FCON; -+ mcc_pkt->h.length.ea = EA; -+ mcc_pkt->h.length.len = 0; -+ -+ return basic_write(ts0710, buf, size); -+} -+ -+/* Turns off the ts0710 flow control */ -+ -+static int ts0710_fcoff_msg(ts0710_con * ts0710, __u8 cr) -+{ -+ __u8 buf[30]; -+ mcc_short_frame *mcc_pkt; -+ short_frame *uih_pkt; -+ __u32 size; -+ -+ size = (sizeof(short_frame) + sizeof(mcc_short_frame) + FCS_SIZE); -+ uih_pkt = (short_frame *) (buf + 1); -+ set_uih_hdr(uih_pkt, CTRL_CHAN, sizeof(mcc_short_frame), -+ ts0710->initiator); -+ uih_pkt->data[sizeof(mcc_short_frame)] = -+ crc_calc((__u8 *) uih_pkt, SHORT_CRC_CHECK); -+ mcc_pkt = (mcc_short_frame *) (uih_pkt->data); -+ -+ mcc_pkt->h.type.ea = 1; -+ mcc_pkt->h.type.cr = cr; -+ mcc_pkt->h.type.type = FCOFF; -+ mcc_pkt->h.length.ea = 1; -+ mcc_pkt->h.length.len = 0; -+ -+ return basic_write(ts0710, buf, size); -+} -+ -+/* -+static int ts0710_rpn_msg(ts0710_con *ts0710, __u8 cr, __u8 dlci, __u8 req) -+{ -+ char buf[100]; -+ rpn_msg* rpn_pkt; -+ __u32 fsize; -+ __u32 psize; -+ -+ fsize = sizeof(rpn_msg); -+ -+ if (req) { -+ fsize -= sizeof(rpn_values); -+ } -+ -+ psize = (fsize - sizeof(short_frame) - FCS_SIZE); -+ -+ rpn_pkt = (rpn_msg *) buf; -+ -+ set_uih_hdr((short_frame *) rpn_pkt, CTRL_CHAN, psize, ts0710->initiator); -+ -+ rpn_pkt->fcs = crc_calc((__u8*) rpn_pkt, SHORT_CRC_CHECK); -+ -+ rpn_pkt->mcc_s_head.type.ea = EA; -+ rpn_pkt->mcc_s_head.type.cr = cr; -+ rpn_pkt->mcc_s_head.type.type = RPN; -+ rpn_pkt->mcc_s_head.length.ea = EA; -+ -+ rpn_pkt->dlci.ea = EA; -+ rpn_pkt->dlci.cr = 1; -+ rpn_pkt->dlci.d = dlci & 1; -+ rpn_pkt->dlci.server_chn = (dlci >> 1); -+ -+ if (req) { -+ rpn_pkt->mcc_s_head.length.len = 1; -+ rpn_pkt->rpn_val.bit_rate = rpn_pkt->fcs; -+ } else { -+ rpn_pkt->mcc_s_head.length.len = 8; -+ memcpy(&(rpn_pkt->rpn_val), &rpn_val, sizeof(rpn_values)); -+ } -+ return basic_write(ts0710, buf, fsize); -+} -+*/ -+/* -+static int ts0710_rls_msg(ts0710_con *ts0710, __u8 cr, __u8 dlci, __u8 err_code) -+{ -+ char buf[100]; -+ rls_msg *rls_pkt; -+ __u32 fsize; -+ __u32 psize; -+ -+ fsize = sizeof(rls_msg); -+ psize = fsize - sizeof(short_frame) - FCS_SIZE; -+ rls_pkt = (rls_msg *) buf; -+ -+ set_uih_hdr((short_frame *) rls_pkt, CTRL_CHAN, psize, ts0710->initiator); -+ rls_pkt->fcs = crc_calc((__u8*) rls_pkt, SHORT_CRC_CHECK); -+ -+ rls_pkt->mcc_s_head.type.ea = EA; -+ rls_pkt->mcc_s_head.type.cr = cr; -+ rls_pkt->mcc_s_head.type.type = RLS; -+ rls_pkt->mcc_s_head.length.ea = EA; -+ rls_pkt->mcc_s_head.length.len = 2; -+ -+ rls_pkt->dlci.ea = EA; -+ rls_pkt->dlci.cr = 1; -+ rls_pkt->dlci.d = dlci & 1; -+ rls_pkt->dlci.server_chn = dlci >> 1; -+ rls_pkt->error = err_code; -+ rls_pkt->res = 0; -+ -+ return basic_write(ts0710, buf, fsize); -+} -+*/ -+ -+/* Sends an PN-messages and sets the not negotiable parameters to their -+ default values in ts0710 */ -+ -+static int send_pn_msg(ts0710_con * ts0710, __u8 prior, __u32 frame_size, -+ __u8 credit_flow, __u8 credits, __u8 dlci, __u8 cr) -+{ -+ __u8 buf[30]; -+ pn_msg *pn_pkt; -+ __u32 size; -+ TS0710_DEBUG -+ ("send_pn_msg: DLCI 0x%02x, prior:0x%02x, frame_size:%d, credit_flow:%x, credits:%d, cr:%x\n", -+ dlci, prior, frame_size, credit_flow, credits, cr); -+ -+ size = sizeof(pn_msg); -+ pn_pkt = (pn_msg *) (buf + 1); -+ -+ set_uih_hdr((void *)pn_pkt, CTRL_CHAN, -+ size - (sizeof(short_frame) + FCS_SIZE), ts0710->initiator); -+ pn_pkt->fcs = crc_calc((__u8 *) pn_pkt, SHORT_CRC_CHECK); -+ -+ pn_pkt->mcc_s_head.type.ea = 1; -+ pn_pkt->mcc_s_head.type.cr = cr; -+ pn_pkt->mcc_s_head.type.type = PN; -+ pn_pkt->mcc_s_head.length.ea = 1; -+ pn_pkt->mcc_s_head.length.len = 8; -+ -+ pn_pkt->res1 = 0; -+ pn_pkt->res2 = 0; -+ pn_pkt->dlci = dlci; -+ pn_pkt->frame_type = 0; -+ pn_pkt->credit_flow = credit_flow; -+ pn_pkt->prior = prior; -+ pn_pkt->ack_timer = 0; -+ SET_PN_MSG_FRAME_SIZE(pn_pkt, frame_size); -+ pn_pkt->credits = credits; -+ pn_pkt->max_nbrof_retrans = 0; -+ -+ return basic_write(ts0710, buf, size); -+} -+ -+/* Send a Not supported command - command, which needs 3 bytes */ -+ -+static int send_nsc_msg(ts0710_con * ts0710, mcc_type cmd, __u8 cr) -+{ -+ __u8 buf[30]; -+ nsc_msg *nsc_pkt; -+ __u32 size; -+ -+ size = sizeof(nsc_msg); -+ nsc_pkt = (nsc_msg *) (buf + 1); -+ -+ set_uih_hdr((void *)nsc_pkt, CTRL_CHAN, -+ sizeof(nsc_msg) - sizeof(short_frame) - FCS_SIZE, -+ ts0710->initiator); -+ -+ nsc_pkt->fcs = crc_calc((__u8 *) nsc_pkt, SHORT_CRC_CHECK); -+ -+ nsc_pkt->mcc_s_head.type.ea = 1; -+ nsc_pkt->mcc_s_head.type.cr = cr; -+ nsc_pkt->mcc_s_head.type.type = NSC; -+ nsc_pkt->mcc_s_head.length.ea = 1; -+ nsc_pkt->mcc_s_head.length.len = 1; -+ -+ nsc_pkt->command_type.ea = 1; -+ nsc_pkt->command_type.cr = cmd.cr; -+ nsc_pkt->command_type.type = cmd.type; -+ -+ return basic_write(ts0710, buf, size); -+} -+ -+static int ts0710_msc_msg(ts0710_con * ts0710, __u8 value, __u8 cr, __u8 dlci) -+{ -+ __u8 buf[30]; -+ msc_msg *msc_pkt; -+ __u32 size; -+ -+ size = sizeof(msc_msg); -+ msc_pkt = (msc_msg *) (buf + 1); -+ -+ set_uih_hdr((void *)msc_pkt, CTRL_CHAN, -+ sizeof(msc_msg) - sizeof(short_frame) - FCS_SIZE, -+ ts0710->initiator); -+ -+ msc_pkt->fcs = crc_calc((__u8 *) msc_pkt, SHORT_CRC_CHECK); -+ -+ msc_pkt->mcc_s_head.type.ea = 1; -+ msc_pkt->mcc_s_head.type.cr = cr; -+ msc_pkt->mcc_s_head.type.type = MSC; -+ msc_pkt->mcc_s_head.length.ea = 1; -+ msc_pkt->mcc_s_head.length.len = 2; -+ -+ msc_pkt->dlci.ea = 1; -+ msc_pkt->dlci.cr = 1; -+ msc_pkt->dlci.d = dlci & 1; -+ msc_pkt->dlci.server_chn = (dlci >> 1) & 0x1f; -+ -+ msc_pkt->v24_sigs = value; -+ -+ return basic_write(ts0710, buf, size); -+} -+ -+static int ts0710_test_msg(ts0710_con * ts0710, __u8 * test_pattern, __u32 len, -+ __u8 cr, __u8 * f_buf /*Frame buf */ ) -+{ -+ __u32 size; -+ -+ if (len > SHORT_PAYLOAD_SIZE) { -+ long_frame *uih_pkt; -+ mcc_long_frame *mcc_pkt; -+ -+ size = -+ (sizeof(long_frame) + sizeof(mcc_long_frame) + len + -+ FCS_SIZE); -+ uih_pkt = (long_frame *) (f_buf + 1); -+ -+ set_uih_hdr((short_frame *) uih_pkt, CTRL_CHAN, len + -+ sizeof(mcc_long_frame), ts0710->initiator); -+ uih_pkt->data[GET_LONG_LENGTH(uih_pkt->h.length)] = -+ crc_calc((__u8 *) uih_pkt, LONG_CRC_CHECK); -+ mcc_pkt = (mcc_long_frame *) uih_pkt->data; -+ -+ mcc_pkt->h.type.ea = EA; -+ /* cr tells whether it is a commmand (1) or a response (0) */ -+ mcc_pkt->h.type.cr = cr; -+ mcc_pkt->h.type.type = TEST; -+ SET_LONG_LENGTH(mcc_pkt->h.length, len); -+ memcpy(mcc_pkt->value, test_pattern, len); -+ } else if (len > (SHORT_PAYLOAD_SIZE - sizeof(mcc_short_frame))) { -+ long_frame *uih_pkt; -+ mcc_short_frame *mcc_pkt; -+ -+ /* Create long uih packet and short mcc packet */ -+ size = -+ (sizeof(long_frame) + sizeof(mcc_short_frame) + len + -+ FCS_SIZE); -+ uih_pkt = (long_frame *) (f_buf + 1); -+ -+ set_uih_hdr((short_frame *) uih_pkt, CTRL_CHAN, -+ len + sizeof(mcc_short_frame), ts0710->initiator); -+ uih_pkt->data[GET_LONG_LENGTH(uih_pkt->h.length)] = -+ crc_calc((__u8 *) uih_pkt, LONG_CRC_CHECK); -+ mcc_pkt = (mcc_short_frame *) uih_pkt->data; -+ -+ mcc_pkt->h.type.ea = EA; -+ mcc_pkt->h.type.cr = cr; -+ mcc_pkt->h.type.type = TEST; -+ mcc_pkt->h.length.ea = EA; -+ mcc_pkt->h.length.len = len; -+ memcpy(mcc_pkt->value, test_pattern, len); -+ } else { -+ short_frame *uih_pkt; -+ mcc_short_frame *mcc_pkt; -+ -+ size = -+ (sizeof(short_frame) + sizeof(mcc_short_frame) + len + -+ FCS_SIZE); -+ uih_pkt = (short_frame *) (f_buf + 1); -+ -+ set_uih_hdr((void *)uih_pkt, CTRL_CHAN, len -+ + sizeof(mcc_short_frame), ts0710->initiator); -+ uih_pkt->data[uih_pkt->h.length.len] = -+ crc_calc((__u8 *) uih_pkt, SHORT_CRC_CHECK); -+ mcc_pkt = (mcc_short_frame *) uih_pkt->data; -+ -+ mcc_pkt->h.type.ea = EA; -+ mcc_pkt->h.type.cr = cr; -+ mcc_pkt->h.type.type = TEST; -+ mcc_pkt->h.length.ea = EA; -+ mcc_pkt->h.length.len = len; -+ memcpy(mcc_pkt->value, test_pattern, len); -+ -+ } -+ return basic_write(ts0710, f_buf, size); -+} -+ -+static void set_uih_hdr(short_frame * uih_pkt, __u8 dlci, __u32 len, __u8 cr) -+{ -+ uih_pkt->h.addr.ea = 1; -+ uih_pkt->h.addr.cr = cr; -+ uih_pkt->h.addr.d = dlci & 0x1; -+ uih_pkt->h.addr.server_chn = dlci >> 1; -+ uih_pkt->h.control = CLR_PF(UIH); -+ -+ if (len > SHORT_PAYLOAD_SIZE) { -+ SET_LONG_LENGTH(((long_frame *) uih_pkt)->h.length, len); -+ } else { -+ uih_pkt->h.length.ea = 1; -+ uih_pkt->h.length.len = len; -+ } -+} -+ -+/* Parses a multiplexer control channel packet */ -+ -+void process_mcc(__u8 * data, __u32 len, ts0710_con * ts0710, int longpkt) -+{ -+ __u8 *tbuf = NULL; -+ mcc_short_frame *mcc_short_pkt; -+ int j; -+ -+ if (longpkt) { -+ mcc_short_pkt = -+ (mcc_short_frame *) (((long_frame *) data)->data); -+ } else { -+ mcc_short_pkt = -+ (mcc_short_frame *) (((short_frame *) data)->data); -+ } -+ -+ switch (mcc_short_pkt->h.type.type) { -+ case TEST: -+ if (mcc_short_pkt->h.type.cr == MCC_RSP) { -+ TS0710_DEBUG("Received test command response\n"); -+ -+ if (ts0710->be_testing) { -+ if ((mcc_short_pkt->h.length.ea) == 0) { -+ mcc_long_frame *mcc_long_pkt; -+ mcc_long_pkt = -+ (mcc_long_frame *) mcc_short_pkt; -+ if (GET_LONG_LENGTH -+ (mcc_long_pkt->h.length) != -+ TEST_PATTERN_SIZE) { -+ ts0710->test_errs = -+ TEST_PATTERN_SIZE; -+ TS0710_DEBUG -+ ("Err: received test pattern is %d bytes long, not expected %d\n", -+ GET_LONG_LENGTH -+ (mcc_long_pkt->h.length), -+ TEST_PATTERN_SIZE); -+ } else { -+ ts0710->test_errs = 0; -+ for (j = 0; -+ j < TEST_PATTERN_SIZE; -+ j++) { -+ if (mcc_long_pkt-> -+ value[j] != -+ (j & 0xFF)) { -+ (ts0710-> -+ test_errs)++; -+ } -+ } -+ } -+ -+ } else { -+ -+#if TEST_PATTERN_SIZE < 128 -+ if (mcc_short_pkt->h.length.len != -+ TEST_PATTERN_SIZE) { -+#endif -+ -+ ts0710->test_errs = -+ TEST_PATTERN_SIZE; -+ TS0710_DEBUG -+ ("Err: received test pattern is %d bytes long, not expected %d\n", -+ mcc_short_pkt->h.length. -+ len, TEST_PATTERN_SIZE); -+ -+#if TEST_PATTERN_SIZE < 128 -+ } else { -+ ts0710->test_errs = 0; -+ for (j = 0; -+ j < TEST_PATTERN_SIZE; -+ j++) { -+ if (mcc_short_pkt-> -+ value[j] != -+ (j & 0xFF)) { -+ (ts0710-> -+ test_errs)++; -+ } -+ } -+ } -+#endif -+ -+ } -+ -+ ts0710->be_testing = 0; /* Clear the flag */ -+ wake_up_interruptible(&ts0710->test_wait); -+ } else { -+ TS0710_DEBUG -+ ("Err: shouldn't or late to get test cmd response\n"); -+ } -+ } else { -+ tbuf = (__u8 *) kmalloc(len + 32, GFP_ATOMIC); -+ if (!tbuf) { -+ break; -+ } -+ -+ if ((mcc_short_pkt->h.length.ea) == 0) { -+ mcc_long_frame *mcc_long_pkt; -+ mcc_long_pkt = (mcc_long_frame *) mcc_short_pkt; -+ ts0710_test_msg(ts0710, mcc_long_pkt->value, -+ GET_LONG_LENGTH(mcc_long_pkt->h. -+ length), -+ MCC_RSP, tbuf); -+ } else { -+ ts0710_test_msg(ts0710, mcc_short_pkt->value, -+ mcc_short_pkt->h.length.len, -+ MCC_RSP, tbuf); -+ } -+ -+ kfree(tbuf); -+ } -+ break; -+ -+ case FCON: /*Flow control on command */ -+ TS0710_PRINTK -+ ("MUX Received Flow control(all channels) on command\n"); -+ if (mcc_short_pkt->h.type.cr == MCC_CMD) { -+ ts0710->dlci[0].state = CONNECTED; -+ ts0710_fcon_msg(ts0710, MCC_RSP); -+ mux_sched_send(); -+ } -+ break; -+ -+ case FCOFF: /*Flow control off command */ -+ TS0710_PRINTK -+ ("MUX Received Flow control(all channels) off command\n"); -+ if (mcc_short_pkt->h.type.cr == MCC_CMD) { -+ for (j = 0; j < TS0710_MAX_CHN; j++) { -+ ts0710->dlci[j].state = FLOW_STOPPED; -+ } -+ ts0710_fcoff_msg(ts0710, MCC_RSP); -+ } -+ break; -+ -+ case MSC: /*Modem status command */ -+ { -+ __u8 dlci; -+ __u8 v24_sigs; -+ -+ dlci = (mcc_short_pkt->value[0]) >> 2; -+ v24_sigs = mcc_short_pkt->value[1]; -+ -+ if ((ts0710->dlci[dlci].state != CONNECTED) -+ && (ts0710->dlci[dlci].state != FLOW_STOPPED)) { -+ send_dm(ts0710, dlci); -+ break; -+ } -+ if (mcc_short_pkt->h.type.cr == MCC_CMD) { -+ TS0710_DEBUG("Received Modem status command\n"); -+ if (v24_sigs & 2) { -+ if (ts0710->dlci[dlci].state == -+ CONNECTED) { -+ TS0710_LOG -+ ("MUX Received Flow off on dlci %d\n", -+ dlci); -+ ts0710->dlci[dlci].state = -+ FLOW_STOPPED; -+ } -+ } else { -+ if (ts0710->dlci[dlci].state == -+ FLOW_STOPPED) { -+ ts0710->dlci[dlci].state = -+ CONNECTED; -+ TS0710_LOG -+ ("MUX Received Flow on on dlci %d\n", -+ dlci); -+ mux_sched_send(); -+ } -+ } -+ -+ ts0710_msc_msg(ts0710, v24_sigs, MCC_RSP, dlci); -+/* -+ if (!(ts0710->dlci[dlci].initiated) && !(ts0710->dlci[dlci].initiator)) { -+ ts0710_msc_msg(ts0710, EA | RTR | RTC | DV, MCC_CMD, dlci); -+ ts0710->dlci[dlci].initiated = 1; -+ } -+*/ -+ } else { -+ TS0710_DEBUG -+ ("Received Modem status response\n"); -+ -+ if (v24_sigs & 2) { -+ TS0710_DEBUG("Flow stop accepted\n"); -+ } -+ } -+ break; -+ } -+ -+ /* case RPN: *//*Remote port negotiation command */ -+ -+/* { -+ __u8 dlci; -+ -+ dlci = (mcc_short_pkt->value[0]) >> 2; -+ -+ if (mcc_short_pkt->h.type.cr == MCC_CMD) { -+ if (mcc_short_pkt->h.length.len == 1) { -+ TS0710_DEBUG("Received Remote port negotiation command\n"); -+ ts0710_rpn_msg(ts0710, MCC_RSP, dlci, 0); -+ } else { -+*/ -+ /* Accept the other sides settings (accept all for now) */ -+/* TS0710_DEBUG("Received Remote port negotiation respons\n"); -+ memcpy(&rpn_val, &mcc_short_pkt->value[1], 8); -+ ts0710_rpn_msg(ts0710, MCC_RSP, dlci, 0); -+*/ -+ /* Zero the parametermask after response */ -+/* memset(&rpn_val.pm, 0, 2); -+ } -+ } -+ break; -+ } -+*/ -+/* -+ case RLS: *//*Remote line status */ -+/* { -+ __u8 dlci; -+ __u8 err_code; -+ -+ TS0710_DEBUG("Received Remote line status\n"); -+ if (mcc_short_pkt->h.type.cr == MCC_CMD) { -+ dlci = mcc_short_pkt->value[0] >> 2; -+ err_code = mcc_short_pkt->value[1]; -+ -+ ts0710_rls_msg(ts0710, MCC_RSP, dlci, err_code); -+ } -+ break; -+ } -+*/ -+ case PN: /*DLC parameter negotiation */ -+ { -+ __u8 dlci; -+ __u16 frame_size; -+ pn_msg *pn_pkt; -+ -+ pn_pkt = (pn_msg *) data; -+ dlci = pn_pkt->dlci; -+ frame_size = GET_PN_MSG_FRAME_SIZE(pn_pkt); -+ TS0710_DEBUG -+ ("Received DLC parameter negotiation, PN\n"); -+ if (pn_pkt->mcc_s_head.type.cr == MCC_CMD) { -+ TS0710_DEBUG("received PN command with:\n"); -+ TS0710_DEBUG("Frame size:%d\n", frame_size); -+ -+ frame_size = -+ min(frame_size, ts0710->dlci[dlci].mtu); -+ send_pn_msg(ts0710, pn_pkt->prior, frame_size, -+ 0, 0, dlci, MCC_RSP); -+ ts0710->dlci[dlci].mtu = frame_size; -+ TS0710_DEBUG("process_mcc : mtu set to %d\n", -+ ts0710->dlci[dlci].mtu); -+ } else { -+ TS0710_DEBUG("received PN response with:\n"); -+ TS0710_DEBUG("Frame size:%d\n", frame_size); -+ -+ frame_size = -+ min(frame_size, ts0710->dlci[dlci].mtu); -+ ts0710->dlci[dlci].mtu = frame_size; -+ -+ TS0710_DEBUG -+ ("process_mcc : mtu set on dlci:%d to %d\n", -+ dlci, ts0710->dlci[dlci].mtu); -+ -+ if (ts0710->dlci[dlci].state == NEGOTIATING) { -+ ts0710->dlci[dlci].state = CONNECTING; -+ wake_up_interruptible(&ts0710-> -+ dlci[dlci]. -+ open_wait); -+ } -+ } -+ break; -+ } -+ -+ case NSC: /*Non supported command resonse */ -+ TS0710_LOG("MUX Received Non supported command response\n"); -+ break; -+ -+ default: /*Non supported command received */ -+ TS0710_LOG("MUX Received a non supported command\n"); -+ send_nsc_msg(ts0710, mcc_short_pkt->h.type, MCC_RSP); -+ break; -+ } -+} -+ -+static mux_recv_packet *get_mux_recv_packet(__u32 size) -+{ -+ mux_recv_packet *recv_packet; -+ -+ TS0710_DEBUG("Enter into get_mux_recv_packet"); -+ -+ recv_packet = -+ (mux_recv_packet *) kmalloc(sizeof(mux_recv_packet), GFP_ATOMIC); -+ if (!recv_packet) { -+ return 0; -+ } -+ -+ recv_packet->data = (__u8 *) kmalloc(size, GFP_ATOMIC); -+ if (!(recv_packet->data)) { -+ kfree(recv_packet); -+ return 0; -+ } -+ recv_packet->length = 0; -+ recv_packet->next = 0; -+ return recv_packet; -+} -+ -+static void free_mux_recv_packet(mux_recv_packet * recv_packet) -+{ -+ TS0710_DEBUG("Enter into free_mux_recv_packet"); -+ -+ if (!recv_packet) { -+ return; -+ } -+ -+ if (recv_packet->data) { -+ kfree(recv_packet->data); -+ } -+ kfree(recv_packet); -+} -+ -+static void free_mux_recv_struct(mux_recv_struct * recv_info) -+{ -+ mux_recv_packet *recv_packet1, *recv_packet2; -+ -+ if (!recv_info) { -+ return; -+ } -+ -+ recv_packet1 = recv_info->mux_packet; -+ while (recv_packet1) { -+ recv_packet2 = recv_packet1->next; -+ free_mux_recv_packet(recv_packet1); -+ recv_packet1 = recv_packet2; -+ } -+ -+ kfree(recv_info); -+} -+ -+static inline void add_post_recv_queue(mux_recv_struct ** head, -+ mux_recv_struct * new_item) -+{ -+ new_item->next = *head; -+ *head = new_item; -+} -+ -+static void ts0710_flow_on(__u8 dlci, ts0710_con * ts0710) -+{ -+ int i; -+ __u8 cmdtty; -+ __u8 datatty; -+ struct tty_struct *tty; -+ mux_recv_struct *recv_info; -+ -+ if ((ts0710->dlci[0].state != CONNECTED) -+ && (ts0710->dlci[0].state != FLOW_STOPPED)) { -+ return; -+ } else if ((ts0710->dlci[dlci].state != CONNECTED) -+ && (ts0710->dlci[dlci].state != FLOW_STOPPED)) { -+ return; -+ } -+ -+ if (!(ts0710->dlci[dlci].flow_control)) { -+ return; -+ } -+ -+ cmdtty = dlci2tty[dlci].cmdtty; -+ datatty = dlci2tty[dlci].datatty; -+ -+ if (cmdtty != datatty) { -+ /* Check AT cmd tty */ -+ tty = mux_table[cmdtty]; -+ if (mux_tty[cmdtty] && tty) { -+ if (test_bit(TTY_THROTTLED, &tty->flags)) { -+ return; -+ } -+ } -+ recv_info = mux_recv_info[cmdtty]; -+ if (mux_recv_info_flags[cmdtty] && recv_info) { -+ if (recv_info->total) { -+ return; -+ } -+ } -+ -+ /* Check data tty */ -+ tty = mux_table[datatty]; -+ if (mux_tty[datatty] && tty) { -+ if (test_bit(TTY_THROTTLED, &tty->flags)) { -+ return; -+ } -+ } -+ recv_info = mux_recv_info[datatty]; -+ if (mux_recv_info_flags[datatty] && recv_info) { -+ if (recv_info->total) { -+ return; -+ } -+ } -+ } -+ -+ for (i = 0; i < 3; i++) { -+ if (ts0710_msc_msg(ts0710, EA | RTC | RTR | DV, MCC_CMD, dlci) < -+ 0) { -+ continue; -+ } else { -+ TS0710_LOG("MUX send Flow on on dlci %d\n", dlci); -+ ts0710->dlci[dlci].flow_control = 0; -+ break; -+ } -+ } -+} -+ -+static void ts0710_flow_off(struct tty_struct *tty, __u8 dlci, -+ ts0710_con * ts0710) -+{ -+ int i; -+ -+ if (test_and_set_bit(TTY_THROTTLED, &tty->flags)) { -+ return; -+ } -+ -+ if ((ts0710->dlci[0].state != CONNECTED) -+ && (ts0710->dlci[0].state != FLOW_STOPPED)) { -+ return; -+ } else if ((ts0710->dlci[dlci].state != CONNECTED) -+ && (ts0710->dlci[dlci].state != FLOW_STOPPED)) { -+ return; -+ } -+ -+ if (ts0710->dlci[dlci].flow_control) { -+ return; -+ } -+ -+ for (i = 0; i < 3; i++) { -+ if (ts0710_msc_msg -+ (ts0710, EA | FC | RTC | RTR | DV, MCC_CMD, dlci) < 0) { -+ continue; -+ } else { -+ TS0710_LOG("MUX send Flow off on dlci %d\n", dlci); -+ ts0710->dlci[dlci].flow_control = 1; -+ break; -+ } -+ } -+} -+ -+int ts0710_recv_data(ts0710_con * ts0710, char *data, int len) -+{ -+ short_frame *short_pkt; -+ long_frame *long_pkt; -+ __u8 *uih_data_start; -+ __u32 uih_len; -+ __u8 dlci; -+ __u8 be_connecting; -+#ifdef TS0710DEBUG -+ unsigned long t; -+#endif -+ -+ short_pkt = (short_frame *) data; -+ -+ dlci = short_pkt->h.addr.server_chn << 1 | short_pkt->h.addr.d; -+ switch (CLR_PF(short_pkt->h.control)) { -+ case SABM: -+ TS0710_DEBUG("SABM-packet received\n"); -+ -+/*For BP UART problem -+ if( crc_check((__u8*) short_pkt, SHORT_CRC_CHECK, short_pkt->data[0]) ) -+ break; -+*/ -+ -+ if (!dlci) { -+ TS0710_DEBUG("server channel == 0\n"); -+ ts0710->dlci[0].state = CONNECTED; -+ -+ TS0710_DEBUG("sending back UA - control channel\n"); -+ send_ua(ts0710, dlci); -+ wake_up_interruptible(&ts0710->dlci[0].open_wait); -+ -+ } else if (valid_dlci(dlci)) { -+ -+ TS0710_DEBUG("Incomming connect on channel %d\n", dlci); -+ -+ TS0710_DEBUG("sending UA, dlci %d\n", dlci); -+ send_ua(ts0710, dlci); -+ -+ ts0710->dlci[dlci].state = CONNECTED; -+ wake_up_interruptible(&ts0710->dlci[dlci].open_wait); -+ -+ } else { -+ TS0710_DEBUG("invalid dlci %d, sending DM\n", dlci); -+ send_dm(ts0710, dlci); -+ } -+ -+ break; -+ -+ case UA: -+ TS0710_DEBUG("UA packet received\n"); -+ -+/*For BP UART problem -+ if( crc_check((__u8*) short_pkt, SHORT_CRC_CHECK, short_pkt->data[0]) ) -+ break; -+*/ -+ -+ if (!dlci) { -+ TS0710_DEBUG("server channel == 0\n"); -+ -+ if (ts0710->dlci[0].state == CONNECTING) { -+ ts0710->dlci[0].state = CONNECTED; -+ wake_up_interruptible(&ts0710->dlci[0]. -+ open_wait); -+ } else if (ts0710->dlci[0].state == DISCONNECTING) { -+ ts0710_upon_disconnect(); -+ } else { -+ TS0710_DEBUG -+ (" Something wrong receiving UA packet\n"); -+ } -+ } else if (valid_dlci(dlci)) { -+ TS0710_DEBUG("Incomming UA on channel %d\n", dlci); -+ -+ if (ts0710->dlci[dlci].state == CONNECTING) { -+ ts0710->dlci[dlci].state = CONNECTED; -+ wake_up_interruptible(&ts0710->dlci[dlci]. -+ open_wait); -+ } else if (ts0710->dlci[dlci].state == DISCONNECTING) { -+ ts0710->dlci[dlci].state = DISCONNECTED; -+ wake_up_interruptible(&ts0710->dlci[dlci]. -+ open_wait); -+ wake_up_interruptible(&ts0710->dlci[dlci]. -+ close_wait); -+ ts0710_reset_dlci(dlci); -+ } else { -+ TS0710_DEBUG -+ (" Something wrong receiving UA packet\n"); -+ } -+ } else { -+ TS0710_DEBUG("invalid dlci %d\n", dlci); -+ } -+ -+ break; -+ -+ case DM: -+ TS0710_DEBUG("DM packet received\n"); -+ -+/*For BP UART problem -+ if( crc_check((__u8*) short_pkt, SHORT_CRC_CHECK, short_pkt->data[0]) ) -+ break; -+*/ -+ -+ if (!dlci) { -+ TS0710_DEBUG("server channel == 0\n"); -+ -+ if (ts0710->dlci[0].state == CONNECTING) { -+ be_connecting = 1; -+ } else { -+ be_connecting = 0; -+ } -+ ts0710_upon_disconnect(); -+ if (be_connecting) { -+ ts0710->dlci[0].state = REJECTED; -+ } -+ } else if (valid_dlci(dlci)) { -+ TS0710_DEBUG("Incomming DM on channel %d\n", dlci); -+ -+ if (ts0710->dlci[dlci].state == CONNECTING) { -+ ts0710->dlci[dlci].state = REJECTED; -+ } else { -+ ts0710->dlci[dlci].state = DISCONNECTED; -+ } -+ wake_up_interruptible(&ts0710->dlci[dlci].open_wait); -+ wake_up_interruptible(&ts0710->dlci[dlci].close_wait); -+ ts0710_reset_dlci(dlci); -+ } else { -+ TS0710_DEBUG("invalid dlci %d\n", dlci); -+ } -+ -+ break; -+ -+ case DISC: -+ TS0710_DEBUG("DISC packet received\n"); -+ -+/*For BP UART problem -+ if( crc_check((__u8*) short_pkt, SHORT_CRC_CHECK, short_pkt->data[0]) ) -+ break; -+*/ -+ -+ if (!dlci) { -+ TS0710_DEBUG("server channel == 0\n"); -+ -+ send_ua(ts0710, dlci); -+ TS0710_DEBUG("DISC, sending back UA\n"); -+ -+ ts0710_upon_disconnect(); -+ } else if (valid_dlci(dlci)) { -+ TS0710_DEBUG("Incomming DISC on channel %d\n", dlci); -+ -+ send_ua(ts0710, dlci); -+ TS0710_DEBUG("DISC, sending back UA\n"); -+ -+ ts0710->dlci[dlci].state = DISCONNECTED; -+ wake_up_interruptible(&ts0710->dlci[dlci].open_wait); -+ wake_up_interruptible(&ts0710->dlci[dlci].close_wait); -+ ts0710_reset_dlci(dlci); -+ } else { -+ TS0710_DEBUG("invalid dlci %d\n", dlci); -+ } -+ -+ break; -+ -+ case UIH: -+ TS0710_DEBUG("UIH packet received\n"); -+ -+ if ((dlci >= TS0710_MAX_CHN)) { -+ TS0710_DEBUG("invalid dlci %d\n", dlci); -+ send_dm(ts0710, dlci); -+ break; -+ } -+ -+ if (GET_PF(short_pkt->h.control)) { -+ TS0710_LOG -+ ("MUX Error %s: UIH packet with P/F set, discard it!\n", -+ __FUNCTION__); -+ break; -+ } -+ -+ if ((ts0710->dlci[dlci].state != CONNECTED) -+ && (ts0710->dlci[dlci].state != FLOW_STOPPED)) { -+ TS0710_LOG -+ ("MUX Error %s: DLCI %d not connected, discard it!\n", -+ __FUNCTION__, dlci); -+ send_dm(ts0710, dlci); -+ break; -+ } -+ -+ if ((short_pkt->h.length.ea) == 0) { -+ TS0710_DEBUG("Long UIH packet received\n"); -+ long_pkt = (long_frame *) data; -+ uih_len = GET_LONG_LENGTH(long_pkt->h.length); -+ uih_data_start = long_pkt->h.data; -+ TS0710_DEBUG("long packet length %d\n", uih_len); -+ -+/*For BP UART problem -+ if (crc_check(data, LONG_CRC_CHECK, *(uih_data_start + uih_len))) -+ break; -+*/ -+ } else { -+ TS0710_DEBUG("Short UIH pkt received\n"); -+ uih_len = short_pkt->h.length.len; -+ uih_data_start = short_pkt->data; -+ -+/*For BP UART problem -+ if (crc_check(data, SHORT_CRC_CHECK, *(uih_data_start + uih_len))) -+ break; -+*/ -+ } -+ -+ if (dlci == 0) { -+ TS0710_DEBUG("UIH on serv_channel 0\n"); -+ process_mcc(data, len, ts0710, -+ !(short_pkt->h.length.ea)); -+ } else if (valid_dlci(dlci)) { -+ /* do tty dispatch */ -+ __u8 tag; -+ __u8 tty_idx; -+ struct tty_struct *tty; -+ __u8 queue_data; -+ __u8 post_recv; -+ __u8 flow_control; -+ mux_recv_struct *recv_info; -+ int recv_room; -+ mux_recv_packet *recv_packet, *recv_packet2; -+ -+ TS0710_DEBUG("UIH on channel %d\n", dlci); -+ -+ if (uih_len > ts0710->dlci[dlci].mtu) { -+ TS0710_PRINTK -+ ("MUX Error: DLCI:%d, uih_len:%d is bigger than mtu:%d, discard data!\n", -+ dlci, uih_len, ts0710->dlci[dlci].mtu); -+ break; -+ } -+ -+ tag = *uih_data_start; -+ uih_data_start++; -+ uih_len--; -+ -+ if (!uih_len) { -+ break; -+ } -+ -+ switch (tag) { -+ case CMDTAG: -+ tty_idx = dlci2tty[dlci].cmdtty; -+ TS0710_DEBUG("CMDTAG on DLCI:%d, /dev/mux%d\n", -+ dlci, tty_idx); -+ TS0710_DEBUGSTR(uih_data_start, uih_len); -+ if (!(iscmdtty[tty_idx])) { -+ TS0710_PRINTK -+ ("MUX Error: %s: Wrong CMDTAG on DLCI:%d, /dev/mux%d\n", -+ __FUNCTION__, dlci, tty_idx); -+ } -+ break; -+ case DATATAG: -+ default: -+ tty_idx = dlci2tty[dlci].datatty; -+ TS0710_DEBUG -+ ("NON-CMDTAG on DLCI:%d, /dev/mux%d\n", -+ dlci, tty_idx); -+ if (iscmdtty[tty_idx]) { -+ TS0710_PRINTK -+ ("MUX Error: %s: Wrong NON-CMDTAG on DLCI:%d, /dev/mux%d\n", -+ __FUNCTION__, dlci, tty_idx); -+ } -+ break; -+ } -+ tty = mux_table[tty_idx]; -+ if ((!mux_tty[tty_idx]) || (!tty)) { -+ TS0710_PRINTK -+ ("MUX: No application waiting for, discard it! /dev/mux%d\n", -+ tty_idx); -+ } else { /* Begin processing received data */ -+ if ((!mux_recv_info_flags[tty_idx]) -+ || (!mux_recv_info[tty_idx])) { -+ TS0710_PRINTK -+ ("MUX Error: No mux_recv_info, discard it! /dev/mux%d\n", -+ tty_idx); -+ break; -+ } -+ -+ recv_info = mux_recv_info[tty_idx]; -+ if (recv_info->total > 8192) { -+ TS0710_PRINTK -+ ("MUX : discard data for tty_idx:%d, recv_info->total > 8192 \n", -+ tty_idx); -+ break; -+ } -+ -+ queue_data = 0; -+ post_recv = 0; -+ flow_control = 0; -+ recv_room = 65535; -+ if (tty->receive_room) -+ recv_room = tty->receive_room; -+ -+ if (test_bit(TTY_THROTTLED, &tty->flags)) { -+ queue_data = 1; -+ } else { -+ if (test_bit -+ (TTY_DONT_FLIP, &tty->flags)) { -+ queue_data = 1; -+ post_recv = 1; -+ } else if (recv_info->total) { -+ queue_data = 1; -+ post_recv = 1; -+ } else if (recv_room < uih_len) { -+ queue_data = 1; -+ flow_control = 1; -+ } -+ -+ if ((recv_room - -+ (uih_len + recv_info->total)) < -+ ts0710->dlci[dlci].mtu) { -+ flow_control = 1; -+ } -+ } -+ -+ if (!queue_data) { -+ /* Put received data into read buffer of tty */ -+ TS0710_DEBUG -+ ("Put received data into read buffer of /dev/mux%d", -+ tty_idx); -+ -+#ifdef TS0710DEBUG -+ t = jiffies; -+#endif -+ -+ (tty->ldisc.receive_buf) (tty, -+ uih_data_start, -+ NULL, -+ uih_len); -+ -+#ifdef TS0710DEBUG -+ TS0710_DEBUG -+ ("tty->ldisc.receive_buf take ticks: %lu", -+ (jiffies - t)); -+#endif -+ -+ } else { /* Queue data */ -+ -+ TS0710_DEBUG -+ ("Put received data into recv queue of /dev/mux%d", -+ tty_idx); -+ if (recv_info->total) { -+ /* recv_info is already linked into mux_recv_queue */ -+ -+ recv_packet = -+ get_mux_recv_packet -+ (uih_len); -+ if (!recv_packet) { -+ TS0710_PRINTK -+ ("MUX %s: no memory\n", -+ __FUNCTION__); -+ break; -+ } -+ -+ memcpy(recv_packet->data, -+ uih_data_start, uih_len); -+ recv_packet->length = uih_len; -+ recv_info->total += uih_len; -+ recv_packet->next = NULL; -+ -+ if (!(recv_info->mux_packet)) { -+ recv_info->mux_packet = -+ recv_packet; -+ } else { -+ recv_packet2 = -+ recv_info-> -+ mux_packet; -+ while (recv_packet2-> -+ next) { -+ recv_packet2 = -+ recv_packet2-> -+ next; -+ } -+ recv_packet2->next = -+ recv_packet; -+ } /* End if( !(recv_info->mux_packet) ) */ -+ } else { /* recv_info->total == 0 */ -+ if (uih_len > -+ TS0710MUX_RECV_BUF_SIZE) { -+ TS0710_PRINTK -+ ("MUX Error: tty_idx:%d, uih_len == %d is too big\n", -+ tty_idx, uih_len); -+ uih_len = -+ TS0710MUX_RECV_BUF_SIZE; -+ } -+ memcpy(recv_info->data, -+ uih_data_start, uih_len); -+ recv_info->length = uih_len; -+ recv_info->total = uih_len; -+ -+ add_post_recv_queue -+ (&mux_recv_queue, -+ recv_info); -+ } /* End recv_info->total == 0 */ -+ } /* End Queue data */ -+ -+ if (flow_control) { -+ /* Do something for flow control */ -+ ts0710_flow_off(tty, dlci, ts0710); -+ } -+ -+ if (tty_idx == -+ dlci2tty[TS0710MUX_GPRS1_DLCI].datatty) { -+ if (add_count -+ (TS0710MUX_GPRS1_RECV_COUNT_IDX, -+ uih_len) < 0) { -+ post_recv_count_flag = 1; -+ post_recv = 1; -+ mux_data_count2 -+ [TS0710MUX_GPRS1_RECV_COUNT_IDX] -+ += uih_len; -+ } -+ } else if (tty_idx == -+ dlci2tty[TS0710MUX_GPRS2_DLCI]. -+ datatty) { -+ if (add_count -+ (TS0710MUX_GPRS2_RECV_COUNT_IDX, -+ uih_len) < 0) { -+ post_recv_count_flag = 1; -+ post_recv = 1; -+ mux_data_count2 -+ [TS0710MUX_GPRS2_RECV_COUNT_IDX] -+ += uih_len; -+ } -+ } -+ -+ if (post_recv) -+ schedule_work(&post_recv_tqueue); -+ } /* End processing received data */ -+ } else { -+ TS0710_DEBUG("invalid dlci %d\n", dlci); -+ } -+ -+ break; -+ -+ default: -+ TS0710_DEBUG("illegal packet\n"); -+ break; -+ } -+ return 0; -+} -+ -+/* -+int ts0710_send_data(ts0710_con *ts0710, __u8 dlci, __u8 *data, __u32 count) -+{ -+ __u32 c, total = 0; -+ __u8 tag, first; -+ -+ if( ts0710->dlci[0].state == FLOW_STOPPED ){ -+ TS0710_DEBUG("Flow stopped on all channels, returning zero\n"); -+*/ -+/* -+ return -EFLOWSTOPPED; -+ } else if( ts0710->dlci[dlci].state == FLOW_STOPPED ){ -+ TS0710_DEBUG("Flow stopped, returning zero\n"); -+*/ -+/* -+ return -EFLOWSTOPPED; -+ } else if( ts0710->dlci[dlci].state == CONNECTED ){ -+ -+ TS0710_DEBUG("trying to send %d bytes\n", count); -+ tag = *data; -+ first = 1; -+*/ -+ /* The first byte is always a Cmd/Data tag */ -+/* -+ while( count > 1 ){ -+ -+ c = min(count, ts0710->dlci[dlci].mtu); -+ if( queue_uih(data, c, ts0710, dlci) <= 0 ) { -+ break; -+ } -+ -+ total += (c - 1); -+ data += (c - 1); -+ *data = tag; -+ count -= (c - 1); -+ -+ if( first ) { -+ first = 0; -+ total++; -+ } -+ } -+ TS0710_DEBUG("sent %d bytes\n", total); -+ return total; -+ } else { -+ TS0710_DEBUG("DLCI %d not connected\n", dlci); -+ return -EDISCONNECTED; -+ } -+} -+*/ -+ -+/* Close ts0710 channel */ -+static void ts0710_close_channel(__u8 dlci) -+{ -+ ts0710_con *ts0710 = &ts0710_connection; -+ int try; -+ unsigned long t; -+ -+ TS0710_DEBUG("ts0710_disc_command on channel %d\n", dlci); -+ -+ if ((ts0710->dlci[dlci].state == DISCONNECTED) -+ || (ts0710->dlci[dlci].state == REJECTED)) { -+ return; -+ } else if (ts0710->dlci[dlci].state == DISCONNECTING) { -+ /* Reentry */ -+ return; -+ } else { -+ ts0710->dlci[dlci].state = DISCONNECTING; -+ try = 3; -+ while (try--) { -+ t = jiffies; -+ send_disc(ts0710, dlci); -+ interruptible_sleep_on_timeout(&ts0710->dlci[dlci]. -+ close_wait, -+ TS0710MUX_TIME_OUT); -+ if (ts0710->dlci[dlci].state == DISCONNECTED) { -+ break; -+ } else if (signal_pending(current)) { -+ TS0710_PRINTK -+ ("MUX DLCI %d Send DISC got signal!\n", -+ dlci); -+ break; -+ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) { -+ TS0710_PRINTK -+ ("MUX DLCI %d Send DISC timeout!\n", dlci); -+ continue; -+ } -+ } -+ -+ if (ts0710->dlci[dlci].state != DISCONNECTED) { -+ if (dlci == 0) { /* Control Channel */ -+ ts0710_upon_disconnect(); -+ } else { /* Other Channel */ -+ ts0710->dlci[dlci].state = DISCONNECTED; -+ wake_up_interruptible(&ts0710->dlci[dlci]. -+ close_wait); -+ ts0710_reset_dlci(dlci); -+ } -+ } -+ } -+} -+ -+int ts0710_open_channel(__u8 dlci) -+{ -+ ts0710_con *ts0710 = &ts0710_connection; -+ int try; -+ int retval; -+ unsigned long t; -+ -+ retval = -ENODEV; -+ if (dlci == 0) { // control channel -+ if ((ts0710->dlci[0].state == CONNECTED) -+ || (ts0710->dlci[0].state == FLOW_STOPPED)) { -+ return 0; -+ } else if (ts0710->dlci[0].state == CONNECTING) { -+ /* Reentry */ -+ TS0710_PRINTK -+ ("MUX DLCI: 0, reentry to open DLCI 0, pid: %d, %s !\n", -+ current->pid, current->comm); -+ try = 11; -+ while (try--) { -+ t = jiffies; -+ interruptible_sleep_on_timeout(&ts0710->dlci[0]. -+ open_wait, -+ TS0710MUX_TIME_OUT); -+ if ((ts0710->dlci[0].state == CONNECTED) -+ || (ts0710->dlci[0].state == -+ FLOW_STOPPED)) { -+ retval = 0; -+ break; -+ } else if (ts0710->dlci[0].state == REJECTED) { -+ retval = -EREJECTED; -+ break; -+ } else if (ts0710->dlci[0].state == -+ DISCONNECTED) { -+ break; -+ } else if (signal_pending(current)) { -+ TS0710_PRINTK -+ ("MUX DLCI:%d Wait for connecting got signal!\n", -+ dlci); -+ retval = -EAGAIN; -+ break; -+ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) { -+ TS0710_PRINTK -+ ("MUX DLCI:%d Wait for connecting timeout!\n", -+ dlci); -+ continue; -+ } else if (ts0710->dlci[0].state == CONNECTING) { -+ continue; -+ } -+ } -+ -+ if (ts0710->dlci[0].state == CONNECTING) { -+ ts0710->dlci[0].state = DISCONNECTED; -+ } -+ } else if ((ts0710->dlci[0].state != DISCONNECTED) -+ && (ts0710->dlci[0].state != REJECTED)) { -+ TS0710_PRINTK("MUX DLCI:%d state is invalid!\n", dlci); -+ return retval; -+ } else { -+ ts0710->initiator = 1; -+ ts0710->dlci[0].state = CONNECTING; -+ ts0710->dlci[0].initiator = 1; -+ try = 10; -+ while (try--) { -+ t = jiffies; -+ send_sabm(ts0710, 0); -+ interruptible_sleep_on_timeout(&ts0710->dlci[0]. -+ open_wait, -+ TS0710MUX_TIME_OUT); -+ if ((ts0710->dlci[0].state == CONNECTED) -+ || (ts0710->dlci[0].state == -+ FLOW_STOPPED)) { -+ retval = 0; -+ break; -+ } else if (ts0710->dlci[0].state == REJECTED) { -+ TS0710_PRINTK -+ ("MUX DLCI:%d Send SABM got rejected!\n", -+ dlci); -+ retval = -EREJECTED; -+ break; -+ } else if (signal_pending(current)) { -+ TS0710_PRINTK -+ ("MUX DLCI:%d Send SABM got signal!\n", -+ dlci); -+ retval = -EAGAIN; -+ break; -+ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) { -+ TS0710_PRINTK -+ ("MUX DLCI:%d Send SABM timeout!\n", -+ dlci); -+ continue; -+ } -+ } -+ -+ if (ts0710->dlci[0].state == CONNECTING) { -+ ts0710->dlci[0].state = DISCONNECTED; -+ } -+ wake_up_interruptible(&ts0710->dlci[0].open_wait); -+ } -+ } else { // other channel -+ if ((ts0710->dlci[0].state != CONNECTED) -+ && (ts0710->dlci[0].state != FLOW_STOPPED)) { -+ return retval; -+ } else if ((ts0710->dlci[dlci].state == CONNECTED) -+ || (ts0710->dlci[dlci].state == FLOW_STOPPED)) { -+ return 0; -+ } else if ((ts0710->dlci[dlci].state == NEGOTIATING) -+ || (ts0710->dlci[dlci].state == CONNECTING)) { -+ /* Reentry */ -+ try = 8; -+ while (try--) { -+ t = jiffies; -+ interruptible_sleep_on_timeout(&ts0710-> -+ dlci[dlci]. -+ open_wait, -+ TS0710MUX_TIME_OUT); -+ if ((ts0710->dlci[dlci].state == CONNECTED) -+ || (ts0710->dlci[dlci].state == -+ FLOW_STOPPED)) { -+ retval = 0; -+ break; -+ } else if (ts0710->dlci[dlci].state == REJECTED) { -+ retval = -EREJECTED; -+ break; -+ } else if (ts0710->dlci[dlci].state == -+ DISCONNECTED) { -+ break; -+ } else if (signal_pending(current)) { -+ TS0710_PRINTK -+ ("MUX DLCI:%d Wait for connecting got signal!\n", -+ dlci); -+ retval = -EAGAIN; -+ break; -+ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) { -+ TS0710_PRINTK -+ ("MUX DLCI:%d Wait for connecting timeout!\n", -+ dlci); -+ continue; -+ } else -+ if ((ts0710->dlci[dlci].state == -+ NEGOTIATING) -+ || (ts0710->dlci[dlci].state == -+ CONNECTING)) { -+ continue; -+ } -+ } -+ -+ if ((ts0710->dlci[dlci].state == NEGOTIATING) -+ || (ts0710->dlci[dlci].state == CONNECTING)) { -+ ts0710->dlci[dlci].state = DISCONNECTED; -+ } -+ } else if ((ts0710->dlci[dlci].state != DISCONNECTED) -+ && (ts0710->dlci[dlci].state != REJECTED)) { -+ TS0710_PRINTK("MUX DLCI:%d state is invalid!\n", dlci); -+ return retval; -+ } else { -+ ts0710->dlci[dlci].state = NEGOTIATING; -+ ts0710->dlci[dlci].initiator = 1; -+ try = 3; -+ while (try--) { -+ t = jiffies; -+ send_pn_msg(ts0710, 7, ts0710->dlci[dlci].mtu, -+ 0, 0, dlci, 1); -+ interruptible_sleep_on_timeout(&ts0710-> -+ dlci[dlci]. -+ open_wait, -+ TS0710MUX_TIME_OUT); -+ if (ts0710->dlci[dlci].state == CONNECTING) { -+ break; -+ } else if (signal_pending(current)) { -+ TS0710_PRINTK -+ ("MUX DLCI:%d Send pn_msg got signal!\n", -+ dlci); -+ retval = -EAGAIN; -+ break; -+ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) { -+ TS0710_PRINTK -+ ("MUX DLCI:%d Send pn_msg timeout!\n", -+ dlci); -+ continue; -+ } -+ } -+ -+ if (ts0710->dlci[dlci].state == CONNECTING) { -+ try = 3; -+ while (try--) { -+ t = jiffies; -+ send_sabm(ts0710, dlci); -+ interruptible_sleep_on_timeout(&ts0710-> -+ dlci -+ [dlci]. -+ open_wait, -+ TS0710MUX_TIME_OUT); -+ if ((ts0710->dlci[dlci].state == -+ CONNECTED) -+ || (ts0710->dlci[dlci].state == -+ FLOW_STOPPED)) { -+ retval = 0; -+ break; -+ } else if (ts0710->dlci[dlci].state == -+ REJECTED) { -+ TS0710_PRINTK -+ ("MUX DLCI:%d Send SABM got rejected!\n", -+ dlci); -+ retval = -EREJECTED; -+ break; -+ } else if (signal_pending(current)) { -+ TS0710_PRINTK -+ ("MUX DLCI:%d Send SABM got signal!\n", -+ dlci); -+ retval = -EAGAIN; -+ break; -+ } else if ((jiffies - t) >= -+ TS0710MUX_TIME_OUT) { -+ TS0710_PRINTK -+ ("MUX DLCI:%d Send SABM timeout!\n", -+ dlci); -+ continue; -+ } -+ } -+ } -+ -+ if ((ts0710->dlci[dlci].state == NEGOTIATING) -+ || (ts0710->dlci[dlci].state == CONNECTING)) { -+ ts0710->dlci[dlci].state = DISCONNECTED; -+ } -+ wake_up_interruptible(&ts0710->dlci[dlci].open_wait); -+ } -+ } -+ return retval; -+} -+ -+static int ts0710_exec_test_cmd(void) -+{ -+ ts0710_con *ts0710 = &ts0710_connection; -+ __u8 *f_buf; /* Frame buffer */ -+ __u8 *d_buf; /* Data buffer */ -+ int retval = -EFAULT; -+ int j; -+ unsigned long t; -+ -+ if (ts0710->be_testing) { -+ /* Reentry */ -+ t = jiffies; -+ interruptible_sleep_on_timeout(&ts0710->test_wait, -+ 3 * TS0710MUX_TIME_OUT); -+ if (ts0710->be_testing == 0) { -+ if (ts0710->test_errs == 0) { -+ retval = 0; -+ } else { -+ retval = -EFAULT; -+ } -+ } else if (signal_pending(current)) { -+ TS0710_DEBUG -+ ("Wait for Test_cmd response got signal!\n"); -+ retval = -EAGAIN; -+ } else if ((jiffies - t) >= 3 * TS0710MUX_TIME_OUT) { -+ TS0710_DEBUG("Wait for Test_cmd response timeout!\n"); -+ retval = -EFAULT; -+ } -+ } else { -+ ts0710->be_testing = 1; /* Set the flag */ -+ -+ f_buf = (__u8 *) kmalloc(TEST_PATTERN_SIZE + 32, GFP_KERNEL); -+ d_buf = (__u8 *) kmalloc(TEST_PATTERN_SIZE + 32, GFP_KERNEL); -+ if ((!f_buf) || (!d_buf)) { -+ if (f_buf) { -+ kfree(f_buf); -+ } -+ if (d_buf) { -+ kfree(d_buf); -+ } -+ -+ ts0710->be_testing = 0; /* Clear the flag */ -+ ts0710->test_errs = TEST_PATTERN_SIZE; -+ wake_up_interruptible(&ts0710->test_wait); -+ return -ENOMEM; -+ } -+ -+ for (j = 0; j < TEST_PATTERN_SIZE; j++) { -+ d_buf[j] = j & 0xFF; -+ } -+ -+ t = jiffies; -+ ts0710_test_msg(ts0710, d_buf, TEST_PATTERN_SIZE, MCC_CMD, -+ f_buf); -+ interruptible_sleep_on_timeout(&ts0710->test_wait, -+ 2 * TS0710MUX_TIME_OUT); -+ if (ts0710->be_testing == 0) { -+ if (ts0710->test_errs == 0) { -+ retval = 0; -+ } else { -+ retval = -EFAULT; -+ } -+ } else if (signal_pending(current)) { -+ TS0710_DEBUG("Send Test_cmd got signal!\n"); -+ retval = -EAGAIN; -+ } else if ((jiffies - t) >= 2 * TS0710MUX_TIME_OUT) { -+ TS0710_DEBUG("Send Test_cmd timeout!\n"); -+ ts0710->test_errs = TEST_PATTERN_SIZE; -+ retval = -EFAULT; -+ } -+ -+ ts0710->be_testing = 0; /* Clear the flag */ -+ wake_up_interruptible(&ts0710->test_wait); -+ -+ /* Release buffer */ -+ if (f_buf) { -+ kfree(f_buf); -+ } -+ if (d_buf) { -+ kfree(d_buf); -+ } -+ } -+ -+ return retval; -+} -+ -+static void mux_sched_send(void) -+{ -+ -+#ifdef USB_FOR_MUX -+ schedule_work(&send_tqueue); -+#else -+ if (!tq_serial_for_mux) { -+ TS0710_PRINTK("MUX Error: %s: tq_serial_for_mux == 0\n", -+ __FUNCTION__); -+ return; -+ } -+ schedule_work(&send_tqueue); -+ mark_bh(SERIAL_BH); -+#endif -+ -+} -+ -+/**************************** -+ * TTY driver routines -+*****************************/ -+ -+static void mux_close(struct tty_struct *tty, struct file *filp) -+{ -+ ts0710_con *ts0710 = &ts0710_connection; -+ int line; -+ __u8 dlci; -+ __u8 cmdtty; -+ __u8 datatty; -+ -+ UNUSED_PARAM(filp); -+ -+ if (!tty) { -+ return; -+ } -+ line = tty->index; -+ if ((line < 0) || (line >= NR_MUXS)) { -+ return; -+ } -+ if (mux_tty[line] > 0) -+ mux_tty[line]--; -+ -+ dlci = tty2dlci[line]; -+ cmdtty = dlci2tty[dlci].cmdtty; -+ datatty = dlci2tty[dlci].datatty; -+ if ((mux_tty[cmdtty] == 0) && (mux_tty[datatty] == 0)) { -+ if (dlci == 1) { -+ ts0710_close_channel(0); -+ TS0710_PRINTK -+ ("MUX mux_close: tapisrv might be down!!! Close DLCI 1\n"); -+ TS0710_SIG2APLOGD(); -+ } -+ ts0710_close_channel(dlci); -+ } -+ -+ if (mux_tty[line] == 0) { -+ if ((mux_send_info_flags[line]) -+ && (mux_send_info[line]) -+ /*&& (mux_send_info[line]->filled == 0) */ -+ ) { -+ mux_send_info_flags[line] = 0; -+ kfree(mux_send_info[line]); -+ mux_send_info[line] = 0; -+ TS0710_DEBUG("Free mux_send_info for /dev/mux%d", line); -+ } -+ -+ if ((mux_recv_info_flags[line]) -+ && (mux_recv_info[line]) -+ && (mux_recv_info[line]->total == 0)) { -+ mux_recv_info_flags[line] = 0; -+ free_mux_recv_struct(mux_recv_info[line]); -+ mux_recv_info[line] = 0; -+ TS0710_DEBUG("Free mux_recv_info for /dev/mux%d", line); -+ } -+ -+ ts0710_flow_on(dlci, ts0710); -+ schedule_work(&post_recv_tqueue); -+ -+ wake_up_interruptible(&tty->read_wait); -+ wake_up_interruptible(&tty->write_wait); -+ tty->packet = 0; -+ } -+} -+ -+static void mux_throttle(struct tty_struct *tty) -+{ -+ ts0710_con *ts0710 = &ts0710_connection; -+ int line; -+ int i; -+ __u8 dlci; -+ -+ if (!tty) { -+ return; -+ } -+ -+ line = tty->index; -+ if ((line < 0) || (line >= NR_MUXS)) { -+ return; -+ } -+ -+ TS0710_DEBUG("Enter into %s, minor number is: %d\n", __FUNCTION__, -+ line); -+ -+ dlci = tty2dlci[line]; -+ if ((ts0710->dlci[0].state != CONNECTED) -+ && (ts0710->dlci[0].state != FLOW_STOPPED)) { -+ return; -+ } else if ((ts0710->dlci[dlci].state != CONNECTED) -+ && (ts0710->dlci[dlci].state != FLOW_STOPPED)) { -+ return; -+ } -+ -+ if (ts0710->dlci[dlci].flow_control) { -+ return; -+ } -+ -+ for (i = 0; i < 3; i++) { -+ if (ts0710_msc_msg -+ (ts0710, EA | FC | RTC | RTR | DV, MCC_CMD, dlci) < 0) { -+ continue; -+ } else { -+ TS0710_LOG("MUX Send Flow off on dlci %d\n", dlci); -+ ts0710->dlci[dlci].flow_control = 1; -+ break; -+ } -+ } -+} -+ -+static void mux_unthrottle(struct tty_struct *tty) -+{ -+ ts0710_con *ts0710 = &ts0710_connection; -+ int line; -+ __u8 dlci; -+ mux_recv_struct *recv_info; -+ -+ if (!tty) { -+ return; -+ } -+ line = tty->index; -+ if ((line < 0) || (line >= NR_MUXS)) { -+ return; -+ } -+ -+ if ((!mux_recv_info_flags[line]) || (!mux_recv_info[line])) { -+ return; -+ } -+ -+ TS0710_DEBUG("Enter into %s, minor number is: %d\n", __FUNCTION__, -+ line); -+ -+ recv_info = mux_recv_info[line]; -+ dlci = tty2dlci[line]; -+ -+ if (recv_info->total) { -+ recv_info->post_unthrottle = 1; -+ schedule_work(&post_recv_tqueue); -+ } else { -+ ts0710_flow_on(dlci, ts0710); -+ } -+} -+ -+static int mux_chars_in_buffer(struct tty_struct *tty) -+{ -+ ts0710_con *ts0710 = &ts0710_connection; -+ int retval; -+ int line; -+ __u8 dlci; -+ mux_send_struct *send_info; -+ -+ retval = TS0710MUX_MAX_CHARS_IN_BUF; -+ if (!tty) { -+ goto out; -+ } -+ line = tty->index; -+ if ((line < 0) || (line >= NR_MUXS)) { -+ goto out; -+ } -+ -+ dlci = tty2dlci[line]; -+ if (ts0710->dlci[0].state == FLOW_STOPPED) { -+ TS0710_DEBUG -+ ("Flow stopped on all channels, returning MAX chars in buffer\n"); -+ goto out; -+ } else if (ts0710->dlci[dlci].state == FLOW_STOPPED) { -+ TS0710_DEBUG("Flow stopped, returning MAX chars in buffer\n"); -+ goto out; -+ } else if (ts0710->dlci[dlci].state != CONNECTED) { -+ TS0710_DEBUG("DLCI %d not connected\n", dlci); -+ goto out; -+ } -+ -+ if (!(mux_send_info_flags[line])) { -+ goto out; -+ } -+ send_info = mux_send_info[line]; -+ if (!send_info) { -+ goto out; -+ } -+ if (send_info->filled) { -+ goto out; -+ } -+ -+ retval = 0; -+ -+ out: -+ return retval; -+} -+ -+static int mux_chars_in_serial_buffer(struct tty_struct *tty) -+{ -+ UNUSED_PARAM(tty); -+ -+ if ((COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)) { -+ TS0710_PRINTK -+ ("MUX %s: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n", -+ __FUNCTION__); -+ -+#ifndef USB_FOR_MUX -+ TS0710_PRINTK -+ ("MUX %s: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n", -+ __FUNCTION__); -+ TS0710_SIG2APLOGD(); -+#endif -+ -+ return 0; -+ } -+ return COMM_FOR_MUX_DRIVER->chars_in_buffer(COMM_FOR_MUX_TTY); -+} -+ -+static int mux_write(struct tty_struct *tty, -+ const unsigned char *buf, int count) -+{ -+ ts0710_con *ts0710 = &ts0710_connection; -+ int line; -+ __u8 dlci; -+ mux_send_struct *send_info; -+ __u8 *d_buf; -+ __u16 c; -+ __u8 post_recv; -+ -+ if (count <= 0) { -+ return 0; -+ } -+ -+ if (!tty) { -+ return 0; -+ } -+ -+ line = tty->index; -+ if ((line < 0) || (line >= NR_MUXS)) -+ return -ENODEV; -+ -+ dlci = tty2dlci[line]; -+ if (ts0710->dlci[0].state == FLOW_STOPPED) { -+ TS0710_DEBUG -+ ("Flow stopped on all channels, returning zero /dev/mux%d\n", -+ line); -+ return 0; -+ } else if (ts0710->dlci[dlci].state == FLOW_STOPPED) { -+ TS0710_DEBUG("Flow stopped, returning zero /dev/mux%d\n", line); -+ return 0; -+ } else if (ts0710->dlci[dlci].state == CONNECTED) { -+ -+ if (!(mux_send_info_flags[line])) { -+ TS0710_PRINTK -+ ("MUX Error: mux_write: mux_send_info_flags[%d] == 0\n", -+ line); -+ return -ENODEV; -+ } -+ send_info = mux_send_info[line]; -+ if (!send_info) { -+ TS0710_PRINTK -+ ("MUX Error: mux_write: mux_send_info[%d] == 0\n", -+ line); -+ return -ENODEV; -+ } -+ -+ c = min(count, (ts0710->dlci[dlci].mtu - 1)); -+ if (c <= 0) { -+ return 0; -+ } -+ -+ if (test_and_set_bit(BUF_BUSY, &send_info->flags)) -+ return 0; -+ -+ if (send_info->filled) { -+ clear_bit(BUF_BUSY, &send_info->flags); -+ return 0; -+ } -+ -+ d_buf = ((__u8 *) send_info->buf) + TS0710MUX_SEND_BUF_OFFSET; -+ memcpy(&d_buf[1], buf, c); -+ -+ TS0710_DEBUG("Prepare to send %d bytes from /dev/mux%d", c, -+ line); -+ if (iscmdtty[line]) { -+ TS0710_DEBUGSTR(&d_buf[1], c); -+ TS0710_DEBUG("CMDTAG"); -+ d_buf[0] = CMDTAG; -+ } else { -+ TS0710_DEBUG("DATATAG"); -+ d_buf[0] = DATATAG; -+ } -+ -+ TS0710_DEBUGHEX(d_buf, c + 1); -+ -+ send_info->frame = d_buf; -+ queue_uih(send_info, c + 1, ts0710, dlci); -+ send_info->filled = 1; -+ clear_bit(BUF_BUSY, &send_info->flags); -+ -+ post_recv = 0; -+ if (dlci == TS0710MUX_GPRS1_DLCI) { -+ if (add_count -+ (TS0710MUX_GPRS1_SEND_COUNT_IDX, c) < 0) { -+ post_recv_count_flag = 1; -+ post_recv = 1; -+ mux_data_count2[TS0710MUX_GPRS1_SEND_COUNT_IDX] -+ += c; -+ } -+ } else if (dlci == TS0710MUX_GPRS2_DLCI) { -+ if (add_count -+ (TS0710MUX_GPRS2_SEND_COUNT_IDX, c) < 0) { -+ post_recv_count_flag = 1; -+ post_recv = 1; -+ mux_data_count2[TS0710MUX_GPRS2_SEND_COUNT_IDX] -+ += c; -+ } -+ } -+ -+ if (post_recv) -+ schedule_work(&post_recv_tqueue); -+ -+ if (mux_chars_in_serial_buffer(COMM_FOR_MUX_TTY) == 0) { -+ /* Sending bottom half should be -+ run after return from this function */ -+ mux_sched_send(); -+ } -+ return c; -+ } else { -+ TS0710_PRINTK("MUX mux_write: DLCI %d not connected\n", dlci); -+ return -EDISCONNECTED; -+ } -+} -+ -+static int mux_write_room(struct tty_struct *tty) -+{ -+ ts0710_con *ts0710 = &ts0710_connection; -+ int retval; -+ int line; -+ __u8 dlci; -+ mux_send_struct *send_info; -+ -+ retval = 0; -+ if (!tty) { -+ goto out; -+ } -+ line = tty->index; -+ if ((line < 0) || (line >= NR_MUXS)) { -+ goto out; -+ } -+ -+ dlci = tty2dlci[line]; -+ if (ts0710->dlci[0].state == FLOW_STOPPED) { -+ TS0710_DEBUG("Flow stopped on all channels, returning ZERO\n"); -+ goto out; -+ } else if (ts0710->dlci[dlci].state == FLOW_STOPPED) { -+ TS0710_DEBUG("Flow stopped, returning ZERO\n"); -+ goto out; -+ } else if (ts0710->dlci[dlci].state != CONNECTED) { -+ TS0710_DEBUG("DLCI %d not connected\n", dlci); -+ goto out; -+ } -+ -+ if (!(mux_send_info_flags[line])) { -+ goto out; -+ } -+ send_info = mux_send_info[line]; -+ if (!send_info) { -+ goto out; -+ } -+ if (send_info->filled) { -+ goto out; -+ } -+ -+ retval = ts0710->dlci[dlci].mtu - 1; -+ -+ out: -+ return retval; -+} -+ -+static int mux_ioctl(struct tty_struct *tty, struct file *file, -+ unsigned int cmd, unsigned long arg) -+{ -+ ts0710_con *ts0710 = &ts0710_connection; -+ int line; -+ __u8 dlci; -+ -+ UNUSED_PARAM(file); -+ UNUSED_PARAM(arg); -+ -+ if (!tty) { -+ return -EIO; -+ } -+ line = tty->index; -+ if ((line < 0) || (line >= NR_MUXS)) { -+ return -ENODEV; -+ } -+ -+ dlci = tty2dlci[line]; -+ switch (cmd) { -+ case TS0710MUX_IO_MSC_HANGUP: -+ if (ts0710_msc_msg(ts0710, EA | RTR | DV, MCC_CMD, dlci) < 0) { -+ return -EAGAIN; -+ } else { -+ return 0; -+ } -+ -+ case TS0710MUX_IO_TEST_CMD: -+ return ts0710_exec_test_cmd(); -+/* -+ case TS0710MUX_IO_DLCI_FC_ON: -+ if( line == 0 ) { -+ break; -+ } -+ if( ts0710_msc_msg(ts0710, EA | RTC | RTR | DV, MCC_CMD, (__u8)line) < 0) { -+ return -EAGAIN; -+ } else { -+ return 0; -+ } -+ -+ case TS0710MUX_IO_DLCI_FC_OFF: -+ if( line == 0 ) { -+ break; -+ } -+ if( ts0710_msc_msg(ts0710, EA | FC | RTC | RTR | DV, MCC_CMD, (__u8)line) < 0) { -+ return -EAGAIN; -+ } else { -+ return 0; -+ } -+ -+ case TS0710MUX_IO_FC_ON: -+ if( line != 0 ) { -+ break; -+ } -+ if( ts0710_fcon_msg(ts0710, MCC_CMD) < 0) { -+ return -EAGAIN; -+ } else { -+ return 0; -+ } -+ -+ case TS0710MUX_IO_FC_OFF: -+ if( line != 0 ) { -+ break; -+ } -+ if( ts0710_fcoff_msg(ts0710, MCC_CMD) < 0) { -+ return -EAGAIN; -+ } else { -+ return 0; -+ } -+*/ -+ default: -+ break; -+ } -+ return -ENOIOCTLCMD; -+} -+ -+static void mux_flush_buffer(struct tty_struct *tty) -+{ -+ int line; -+ -+ if (!tty) { -+ return; -+ } -+ -+ line = tty->index; -+ if ((line < 0) || (line >= NR_MUXS)) { -+ return; -+ } -+ -+ TS0710_PRINTK("MUX %s: line is:%d\n", __FUNCTION__, line); -+ -+ if ((mux_send_info_flags[line]) -+ && (mux_send_info[line]) -+ && (mux_send_info[line]->filled)) { -+ -+ mux_send_info[line]->filled = 0; -+ } -+ -+ wake_up_interruptible(&tty->write_wait); -+#ifdef SERIAL_HAVE_POLL_WAIT -+ wake_up_interruptible(&tty->poll_wait); -+#endif -+ if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) && -+ tty->ldisc.write_wakeup) { -+ (tty->ldisc.write_wakeup) (tty); -+ } -+ -+/* -+ if( (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0) ) { -+ TS0710_PRINTK("MUX %s: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n", __FUNCTION__); -+ -+#ifndef USB_FOR_MUX -+ TS0710_PRINTK("MUX %s: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n", __FUNCTION__); -+ TS0710_SIG2APLOGD(); -+#endif -+ -+ return; -+ } -+ return COMM_FOR_MUX_DRIVER->flush_buffer(COMM_FOR_MUX_TTY); -+*/ -+} -+ -+static int mux_open(struct tty_struct *tty, struct file *filp) -+{ -+ int retval; -+ int line; -+ __u8 dlci; -+ __u8 cmdtty; -+ __u8 datatty; -+ mux_send_struct *send_info; -+ mux_recv_struct *recv_info; -+ -+ UNUSED_PARAM(filp); -+ -+ retval = -ENODEV; -+ if ((COMM_FOR_MUX_DRIVER == NULL) || (COMM_FOR_MUX_TTY == NULL)) { -+ -+#ifdef USB_FOR_MUX -+ TS0710_PRINTK("MUX: please install and open IPC-USB first\n"); -+#else -+ TS0710_PRINTK("MUX: please install and open ttyS0 first\n"); -+#endif -+ -+ goto out; -+ } -+ -+ if (!tty) { -+ goto out; -+ } -+ line = tty->index; -+ if ((line < 0) || (line >= NR_MUXS)) { -+ goto out; -+ } -+#ifdef TS0710SERVER -+ /* do nothing as a server */ -+ mux_tty[line]++; -+ retval = 0; -+#else -+ mux_tty[line]++; -+ dlci = tty2dlci[line]; -+ -+/* if( dlci == 1 ) { */ -+ /* Open server channel 0 first */ -+ if ((retval = ts0710_open_channel(0)) != 0) { -+ TS0710_PRINTK("MUX: Can't connect server channel 0!\n"); -+ ts0710_init(); -+ -+ mux_tty[line]--; -+ goto out; -+ } -+/* } */ -+ -+ /* Allocate memory first. As soon as connection has been established, MUX may receive */ -+ if (mux_send_info_flags[line] == 0) { -+ send_info = -+ (mux_send_struct *) kmalloc(sizeof(mux_send_struct), -+ GFP_KERNEL); -+ if (!send_info) { -+ retval = -ENOMEM; -+ -+ mux_tty[line]--; -+ goto out; -+ } -+ send_info->length = 0; -+ send_info->flags = 0; -+ send_info->filled = 0; -+ mux_send_info[line] = send_info; -+ mux_send_info_flags[line] = 1; -+ TS0710_DEBUG("Allocate mux_send_info for /dev/mux%d", line); -+ } -+ -+ if (mux_recv_info_flags[line] == 0) { -+ recv_info = -+ (mux_recv_struct *) kmalloc(sizeof(mux_recv_struct), -+ GFP_KERNEL); -+ if (!recv_info) { -+ mux_send_info_flags[line] = 0; -+ kfree(mux_send_info[line]); -+ mux_send_info[line] = 0; -+ TS0710_DEBUG("Free mux_send_info for /dev/mux%d", line); -+ retval = -ENOMEM; -+ -+ mux_tty[line]--; -+ goto out; -+ } -+ recv_info->length = 0; -+ recv_info->total = 0; -+ recv_info->mux_packet = 0; -+ recv_info->next = 0; -+ recv_info->no_tty = line; -+ recv_info->post_unthrottle = 0; -+ mux_recv_info[line] = recv_info; -+ mux_recv_info_flags[line] = 1; -+ TS0710_DEBUG("Allocate mux_recv_info for /dev/mux%d", line); -+ } -+ -+ /* Now establish DLCI connection */ -+ cmdtty = dlci2tty[dlci].cmdtty; -+ datatty = dlci2tty[dlci].datatty; -+ if ((mux_tty[cmdtty] > 0) || (mux_tty[datatty] > 0)) { -+ if ((retval = ts0710_open_channel(dlci)) != 0) { -+ TS0710_PRINTK("MUX: Can't connected channel %d!\n", -+ dlci); -+ ts0710_reset_dlci(dlci); -+ -+ mux_send_info_flags[line] = 0; -+ kfree(mux_send_info[line]); -+ mux_send_info[line] = 0; -+ TS0710_DEBUG("Free mux_send_info for /dev/mux%d", line); -+ -+ mux_recv_info_flags[line] = 0; -+ free_mux_recv_struct(mux_recv_info[line]); -+ mux_recv_info[line] = 0; -+ TS0710_DEBUG("Free mux_recv_info for /dev/mux%d", line); -+ -+ mux_tty[line]--; -+ goto out; -+ } -+ } -+ -+ retval = 0; -+#endif -+ out: -+ return retval; -+} -+ -+/* mux dispatcher, call from serial.c receiver_chars() */ -+void mux_dispatcher(struct tty_struct *tty) -+{ -+ UNUSED_PARAM(tty); -+ -+ schedule_work(&receive_tqueue); -+} -+ -+/*For BP UART problem Begin*/ -+#ifdef TS0710SEQ2 -+static int send_ack(ts0710_con * ts0710, __u8 seq_num, __u8 bp_seq1, -+ __u8 bp_seq2) -+#else -+static int send_ack(ts0710_con * ts0710, __u8 seq_num) -+#endif -+{ -+ __u8 buf[20]; -+ short_frame *ack; -+ -+#ifdef TS0710SEQ2 -+ static __u16 ack_seq = 0; -+#endif -+ -+ ack = (short_frame *) (buf + 1); -+ ack->h.addr.ea = 1; -+ ack->h.addr.cr = ((ts0710->initiator) & 0x1); -+ ack->h.addr.d = 0; -+ ack->h.addr.server_chn = 0; -+ ack->h.control = ACK; -+ ack->h.length.ea = 1; -+ -+#ifdef TS0710SEQ2 -+ ack->h.length.len = 5; -+ ack->data[0] = seq_num; -+ ack->data[1] = bp_seq1; -+ ack->data[2] = bp_seq2; -+ ack->data[3] = (ack_seq & 0xFF); -+ ack->data[4] = (ack_seq >> 8) & 0xFF; -+ ack_seq++; -+ ack->data[5] = crc_calc((__u8 *) ack, SHORT_CRC_CHECK); -+#else -+ ack->h.length.len = 1; -+ ack->data[0] = seq_num; -+ ack->data[1] = crc_calc((__u8 *) ack, SHORT_CRC_CHECK); -+#endif -+ -+ return basic_write(ts0710, buf, -+ (sizeof(short_frame) + FCS_SIZE + -+ ack->h.length.len)); -+} -+ -+/*For BP UART problem End*/ -+ -+static void receive_worker(void *private_) -+{ -+ struct tty_struct *tty = COMM_FOR_MUX_TTY; -+ int i, count; -+ static unsigned char tbuf[TS0710MUX_MAX_BUF_SIZE]; -+ static unsigned char *tbuf_ptr = &tbuf[0]; -+ static unsigned char *start_flag = 0; -+ unsigned char *search, *to, *from; -+ short_frame *short_pkt; -+ long_frame *long_pkt; -+ static int framelen = -1; -+ -+ /*For BP UART problem Begin */ -+ static __u8 expect_seq = 0; -+ __u32 crc_error; -+ __u8 *uih_data_start; -+ __u32 uih_len; -+ /*For BP UART problem End */ -+ -+ UNUSED_PARAM(private_); -+ -+ if (!tty) -+ return; -+ -+#ifdef USB_FOR_MUX -+ TS0710_DEBUG("Receive following bytes from IPC-USB"); -+#else -+ TS0710_DEBUG("Receive following bytes from UART"); -+#endif -+ -+ TS0710_DEBUGHEX(cp, count); -+ -+ if (count > (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf))) { -+ TS0710_PRINTK -+ ("MUX receive_worker: !!!!! Exceed buffer boundary !!!!!\n"); -+ count = (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf)); -+ } -+ -+ count = tty_buffer_request_room(tty, count); -+ -+ for (i = 0; i < count; i++) -+ tty_insert_flip_char(tty, tbuf_ptr[i], TTY_NORMAL); -+ -+ tbuf_ptr += count; -+ search = &tbuf[0]; -+ -+ if (test_and_set_bit(RECV_RUNNING, &mux_recv_flags)) { -+ schedule_work(&receive_tqueue); -+ return; -+ } -+ -+ if ((start_flag != 0) && (framelen != -1)) { -+ if ((tbuf_ptr - start_flag) < framelen) { -+ clear_bit(RECV_RUNNING, &mux_recv_flags); -+ return; -+ } -+ } -+ -+ while (1) { -+ if (start_flag == 0) { /* Frame Start Flag not found */ -+ framelen = -1; -+ while (search < tbuf_ptr) { -+ if (*search == TS0710_BASIC_FLAG) { -+ start_flag = search; -+ break; -+ } -+#ifdef TS0710LOG -+ else { -+ TS0710_LOG(">S %02x %c\n", *search, -+ *search); -+ } -+#endif -+ -+ search++; -+ } -+ -+ if (start_flag == 0) { -+ tbuf_ptr = &tbuf[0]; -+ break; -+ } -+ } else { /* Frame Start Flag found */ -+ /* 1 start flag + 1 address + 1 control + 1 or 2 length + lengths data + 1 FCS + 1 end flag */ -+ /* For BP UART problem 1 start flag + 1 seq_num + 1 address + ...... */ -+ /*if( (framelen == -1) && ((tbuf_ptr - start_flag) > TS0710_MAX_HDR_SIZE) ) */ -+ if ((framelen == -1) && ((tbuf_ptr - start_flag) > (TS0710_MAX_HDR_SIZE + SEQ_FIELD_SIZE))) { /*For BP UART problem */ -+ /*short_pkt = (short_frame *) (start_flag + 1); */ -+ short_pkt = (short_frame *) (start_flag + ADDRESS_FIELD_OFFSET); /*For BP UART problem */ -+ if (short_pkt->h.length.ea == 1) { /* short frame */ -+ /*framelen = TS0710_MAX_HDR_SIZE + short_pkt->h.length.len + 1; */ -+ framelen = TS0710_MAX_HDR_SIZE + short_pkt->h.length.len + 1 + SEQ_FIELD_SIZE; /*For BP UART problem */ -+ } else { /* long frame */ -+ /*long_pkt = (long_frame *) (start_flag + 1); */ -+ long_pkt = (long_frame *) (start_flag + ADDRESS_FIELD_OFFSET); /*For BP UART problem */ -+ /*framelen = TS0710_MAX_HDR_SIZE + GET_LONG_LENGTH( long_pkt->h.length ) + 2; */ -+ framelen = TS0710_MAX_HDR_SIZE + GET_LONG_LENGTH(long_pkt->h.length) + 2 + SEQ_FIELD_SIZE; /*For BP UART problem */ -+ } -+ -+ /*if( framelen > TS0710MUX_MAX_TOTAL_FRAME_SIZE ) { */ -+ if (framelen > (TS0710MUX_MAX_TOTAL_FRAME_SIZE + SEQ_FIELD_SIZE)) { /*For BP UART problem */ -+ TS0710_LOGSTR_FRAME(0, start_flag, -+ (tbuf_ptr - -+ start_flag)); -+ TS0710_PRINTK -+ ("MUX Error: %s: frame length:%d is bigger than Max total frame size:%d\n", -+ /*__FUNCTION__, framelen, TS0710MUX_MAX_TOTAL_FRAME_SIZE);*/ -+ __FUNCTION__, framelen, (TS0710MUX_MAX_TOTAL_FRAME_SIZE + SEQ_FIELD_SIZE)); /*For BP UART problem */ -+ search = start_flag + 1; -+ start_flag = 0; -+ framelen = -1; -+ continue; -+ } -+ } -+ -+ if ((framelen != -1) -+ && ((tbuf_ptr - start_flag) >= framelen)) { -+ if (*(start_flag + framelen - 1) == TS0710_BASIC_FLAG) { /* OK, We got one frame */ -+ -+ /*For BP UART problem Begin */ -+ TS0710_LOGSTR_FRAME(0, start_flag, -+ framelen); -+ TS0710_DEBUGHEX(start_flag, framelen); -+ -+ short_pkt = -+ (short_frame *) (start_flag + -+ ADDRESS_FIELD_OFFSET); -+ if ((short_pkt->h.length.ea) == 0) { -+ long_pkt = -+ (long_frame *) (start_flag + -+ ADDRESS_FIELD_OFFSET); -+ uih_len = -+ GET_LONG_LENGTH(long_pkt->h. -+ length); -+ uih_data_start = -+ long_pkt->h.data; -+ -+ crc_error = -+ crc_check((__u8 -+ *) (start_flag + -+ SLIDE_BP_SEQ_OFFSET), -+ LONG_CRC_CHECK + -+ 1, -+ *(uih_data_start + -+ uih_len)); -+ } else { -+ uih_len = -+ short_pkt->h.length.len; -+ uih_data_start = -+ short_pkt->data; -+ -+ crc_error = -+ crc_check((__u8 -+ *) (start_flag + -+ SLIDE_BP_SEQ_OFFSET), -+ SHORT_CRC_CHECK + -+ 1, -+ *(uih_data_start + -+ uih_len)); -+ } -+ -+ if (!crc_error) { -+ if (expect_seq == -+ *(start_flag + -+ SLIDE_BP_SEQ_OFFSET)) { -+ expect_seq++; -+ if (expect_seq >= 4) { -+ expect_seq = 0; -+ } -+#ifdef TS0710SEQ2 -+ send_ack -+ (&ts0710_connection, -+ expect_seq, -+ *(start_flag + -+ FIRST_BP_SEQ_OFFSET), -+ *(start_flag + -+ SECOND_BP_SEQ_OFFSET)); -+#else -+ send_ack -+ (&ts0710_connection, -+ expect_seq); -+#endif -+ -+ ts0710_recv_data -+ (&ts0710_connection, -+ start_flag + -+ ADDRESS_FIELD_OFFSET, -+ framelen - 2 - -+ SEQ_FIELD_SIZE); -+ } else { -+ -+#ifdef TS0710DEBUG -+ if (* -+ (start_flag + -+ SLIDE_BP_SEQ_OFFSET) -+ != 0x9F) { -+#endif -+ -+ TS0710_LOG -+ ("MUX sequence number %d is not expected %d, discard data!\n", -+ * -+ (start_flag -+ + -+ SLIDE_BP_SEQ_OFFSET), -+ expect_seq); -+ -+#ifdef TS0710SEQ2 -+ send_ack -+ (&ts0710_connection, -+ expect_seq, -+ * -+ (start_flag -+ + -+ FIRST_BP_SEQ_OFFSET), -+ * -+ (start_flag -+ + -+ SECOND_BP_SEQ_OFFSET)); -+#else -+ send_ack -+ (&ts0710_connection, -+ expect_seq); -+#endif -+ -+#ifdef TS0710DEBUG -+ } else { -+ *(uih_data_start -+ + uih_len) = -+ 0; -+ TS0710_PRINTK -+ ("MUX bp log: %s\n", -+ uih_data_start); -+ } -+#endif -+ -+ } -+ } else { /* crc_error */ -+ search = start_flag + 1; -+ start_flag = 0; -+ framelen = -1; -+ continue; -+ } /*End if(!crc_error) */ -+ -+ /*For BP UART problem End */ -+ -+/*For BP UART problem -+ TS0710_LOGSTR_FRAME(0, start_flag, framelen); -+ TS0710_DEBUGHEX(start_flag, framelen); -+ ts0710_recv_data(&ts0710_connection, start_flag + 1, framelen - 2); -+*/ -+ search = start_flag + framelen; -+ } else { -+ TS0710_LOGSTR_FRAME(0, start_flag, -+ framelen); -+ TS0710_DEBUGHEX(start_flag, framelen); -+ TS0710_PRINTK -+ ("MUX: Lost synchronization!\n"); -+ search = start_flag + 1; -+ } -+ -+ start_flag = 0; -+ framelen = -1; -+ continue; -+ } -+ -+ if (start_flag != &tbuf[0]) { -+ to = tbuf; -+ from = start_flag; -+ count = tbuf_ptr - start_flag; -+ while (count--) { -+ *to++ = *from++; -+ } -+ -+ tbuf_ptr -= (start_flag - tbuf); -+ start_flag = tbuf; -+ } -+ break; -+ } /* End Frame Start Flag found */ -+ } /* End while(1) */ -+ -+ clear_bit(RECV_RUNNING, &mux_recv_flags); -+} -+ -+static void post_recv_worker(void *private_) -+{ -+ ts0710_con *ts0710 = &ts0710_connection; -+ int tty_idx; -+ struct tty_struct *tty; -+ __u8 post_recv; -+ __u8 flow_control; -+ __u8 dlci; -+ mux_recv_struct *recv_info, *recv_info2, *post_recv_q; -+ int recv_room; -+ mux_recv_packet *recv_packet, *recv_packet2; -+ __u8 j; -+ -+ UNUSED_PARAM(private_); -+ -+ if (test_and_set_bit(RECV_RUNNING, &mux_recv_flags)) { -+ schedule_work(&post_recv_tqueue); -+ return; -+ } -+ -+ TS0710_DEBUG("Enter into post_recv_worker"); -+ -+ post_recv = 0; -+ if (!mux_recv_queue) { -+ goto out; -+ } -+ -+ post_recv_q = NULL; -+ recv_info2 = mux_recv_queue; -+ while ((recv_info = recv_info2)) { -+ recv_info2 = recv_info->next; -+ -+ if (!(recv_info->total)) { -+ TS0710_PRINTK -+ ("MUX Error: %s: Should not get here, recv_info->total == 0 \n", -+ __FUNCTION__); -+ continue; -+ } -+ -+ tty_idx = recv_info->no_tty; -+ dlci = tty2dlci[tty_idx]; -+ tty = mux_table[tty_idx]; -+ if ((!mux_tty[tty_idx]) || (!tty)) { -+ TS0710_PRINTK -+ ("MUX: No application waiting for, free recv_info! tty_idx:%d\n", -+ tty_idx); -+ mux_recv_info_flags[tty_idx] = 0; -+ free_mux_recv_struct(mux_recv_info[tty_idx]); -+ mux_recv_info[tty_idx] = 0; -+ ts0710_flow_on(dlci, ts0710); -+ continue; -+ } -+ -+ TS0710_DEBUG("/dev/mux%d recv_info->total is: %d", tty_idx, -+ recv_info->total); -+ -+ if (test_bit(TTY_THROTTLED, &tty->flags)) { -+ add_post_recv_queue(&post_recv_q, recv_info); -+ continue; -+ } else if (test_bit(TTY_DONT_FLIP, &tty->flags)) { -+ post_recv = 1; -+ add_post_recv_queue(&post_recv_q, recv_info); -+ continue; -+ } -+ -+ flow_control = 0; -+ recv_packet2 = recv_info->mux_packet; -+ while (recv_info->total) { -+ recv_room = 65535; -+ if (tty->receive_room) -+ recv_room = tty->receive_room; -+ -+ if (recv_info->length) { -+ if (recv_room < recv_info->length) { -+ flow_control = 1; -+ break; -+ } -+ -+ /* Put queued data into read buffer of tty */ -+ TS0710_DEBUG -+ ("Put queued recv data into read buffer of /dev/mux%d", -+ tty_idx); -+ TS0710_DEBUGHEX(recv_info->data, -+ recv_info->length); -+ (tty->ldisc.receive_buf) (tty, recv_info->data, -+ NULL, -+ recv_info->length); -+ recv_info->total -= recv_info->length; -+ recv_info->length = 0; -+ } else { /* recv_info->length == 0 */ -+ if ((recv_packet = recv_packet2)) { -+ recv_packet2 = recv_packet->next; -+ -+ if (recv_room < recv_packet->length) { -+ flow_control = 1; -+ recv_info->mux_packet = -+ recv_packet; -+ break; -+ } -+ -+ /* Put queued data into read buffer of tty */ -+ TS0710_DEBUG -+ ("Put queued recv data into read buffer of /dev/mux%d", -+ tty_idx); -+ TS0710_DEBUGHEX(recv_packet->data, -+ recv_packet->length); -+ (tty->ldisc.receive_buf) (tty, -+ recv_packet-> -+ data, NULL, -+ recv_packet-> -+ length); -+ recv_info->total -= recv_packet->length; -+ free_mux_recv_packet(recv_packet); -+ } else { -+ TS0710_PRINTK -+ ("MUX Error: %s: Should not get here, recv_info->total is:%u \n", -+ __FUNCTION__, recv_info->total); -+ } -+ } /* End recv_info->length == 0 */ -+ } /* End while( recv_info->total ) */ -+ -+ if (!(recv_info->total)) { -+ /* Important clear */ -+ recv_info->mux_packet = 0; -+ -+ if (recv_info->post_unthrottle) { -+ /* Do something for post_unthrottle */ -+ ts0710_flow_on(dlci, ts0710); -+ recv_info->post_unthrottle = 0; -+ } -+ } else { -+ add_post_recv_queue(&post_recv_q, recv_info); -+ -+ if (flow_control) { -+ /* Do something for flow control */ -+ if (recv_info->post_unthrottle) { -+ set_bit(TTY_THROTTLED, &tty->flags); -+ recv_info->post_unthrottle = 0; -+ } else { -+ ts0710_flow_off(tty, dlci, ts0710); -+ } -+ } /* End if( flow_control ) */ -+ } -+ } /* End while( (recv_info = recv_info2) ) */ -+ -+ mux_recv_queue = post_recv_q; -+ -+ out: -+ if (post_recv_count_flag) { -+ post_recv_count_flag = 0; -+ for (j = 0; j < TS0710MUX_COUNT_IDX_NUM; j++) { -+ if (mux_data_count2[j] > 0) { -+ if (add_count(j, mux_data_count2[j]) == 0) { -+ mux_data_count2[j] = 0; -+ } else { -+ post_recv_count_flag = 1; -+ post_recv = 1; -+ } -+ } -+ } /* End for (j = 0; j < TS0710MUX_COUNT_IDX_NUM; j++) */ -+ } -+ /* End if( post_recv_count_flag ) */ -+ if (post_recv) -+ schedule_work(&post_recv_tqueue); -+ clear_bit(RECV_RUNNING, &mux_recv_flags); -+} -+ -+/* mux sender, call from serial.c transmit_chars() */ -+void mux_sender(void) -+{ -+ mux_send_struct *send_info; -+ int chars; -+ __u8 idx; -+ -+ chars = mux_chars_in_serial_buffer(COMM_FOR_MUX_TTY); -+ if (!chars) { -+ /* chars == 0 */ -+ TS0710_LOG("<[]\n"); -+ mux_sched_send(); -+ return; -+ } -+ -+ idx = mux_send_info_idx; -+ if ((idx < NR_MUXS) && (mux_send_info_flags[idx])) { -+ send_info = mux_send_info[idx]; -+ if ((send_info) -+ && (send_info->filled) -+ && (send_info->length <= -+ (TS0710MUX_SERIAL_BUF_SIZE - chars))) { -+ -+ mux_sched_send(); -+ } -+ } -+} -+ -+static void send_worker(void *private_) -+{ -+ ts0710_con *ts0710 = &ts0710_connection; -+ __u8 j; -+ mux_send_struct *send_info; -+ int chars; -+ struct tty_struct *tty; -+ __u8 dlci; -+ -+ UNUSED_PARAM(private_); -+ -+ TS0710_DEBUG("Enter into send_worker"); -+ -+ mux_send_info_idx = NR_MUXS; -+ -+ if (ts0710->dlci[0].state == FLOW_STOPPED) { -+ TS0710_DEBUG("Flow stopped on all channels\n"); -+ return; -+ } -+ -+ for (j = 0; j < NR_MUXS; j++) { -+ -+ if (!(mux_send_info_flags[j])) { -+ continue; -+ } -+ -+ send_info = mux_send_info[j]; -+ if (!send_info) { -+ continue; -+ } -+ -+ if (!(send_info->filled)) { -+ continue; -+ } -+ -+ dlci = tty2dlci[j]; -+ if (ts0710->dlci[dlci].state == FLOW_STOPPED) { -+ TS0710_DEBUG("Flow stopped on channel DLCI: %d\n", -+ dlci); -+ continue; -+ } else if (ts0710->dlci[dlci].state != CONNECTED) { -+ TS0710_DEBUG("DLCI %d not connected\n", dlci); -+ send_info->filled = 0; -+ continue; -+ } -+ -+ chars = mux_chars_in_serial_buffer(COMM_FOR_MUX_TTY); -+ if (send_info->length <= (TS0710MUX_SERIAL_BUF_SIZE - chars)) { -+ TS0710_DEBUG("Send queued UIH for /dev/mux%d", j); -+ basic_write(ts0710, (__u8 *) send_info->frame, -+ send_info->length); -+ send_info->length = 0; -+ send_info->filled = 0; -+ } else { -+ mux_send_info_idx = j; -+ break; -+ } -+ } /* End for() loop */ -+ -+ /* Queue UIH data to be transmitted */ -+ for (j = 0; j < NR_MUXS; j++) { -+ -+ if (!(mux_send_info_flags[j])) { -+ continue; -+ } -+ -+ send_info = mux_send_info[j]; -+ if (!send_info) { -+ continue; -+ } -+ -+ if (send_info->filled) { -+ continue; -+ } -+ -+ /* Now queue UIH data to send_info->buf */ -+ -+ if (!mux_tty[j]) { -+ continue; -+ } -+ -+ tty = mux_table[j]; -+ if (!tty) { -+ continue; -+ } -+ -+ dlci = tty2dlci[j]; -+ if (ts0710->dlci[dlci].state == FLOW_STOPPED) { -+ TS0710_DEBUG("Flow stopped on channel DLCI: %d\n", -+ dlci); -+ continue; -+ } else if (ts0710->dlci[dlci].state != CONNECTED) { -+ TS0710_DEBUG("DLCI %d not connected\n", dlci); -+ continue; -+ } -+ -+ if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) -+ && tty->ldisc.write_wakeup) { -+ (tty->ldisc.write_wakeup) (tty); -+ } -+ wake_up_interruptible(&tty->write_wait); -+ -+#ifdef SERIAL_HAVE_POLL_WAIT -+ wake_up_interruptible(&tty->poll_wait); -+#endif -+ -+ if (send_info->filled) { -+ if (j < mux_send_info_idx) { -+ mux_send_info_idx = j; -+ } -+ } -+ } /* End for() loop */ -+} -+ -+static int get_count(__u8 idx) -+{ -+ int ret; -+ -+ if (idx > TS0710MUX_COUNT_MAX_IDX) { -+ TS0710_PRINTK("MUX get_count: invalid idx: %d!\n", idx); -+ return -1; -+ } -+ -+ down(&mux_data_count_mutex[idx]); -+ ret = mux_data_count[idx]; -+ up(&mux_data_count_mutex[idx]); -+ -+ return ret; -+} -+ -+static int set_count(__u8 idx, int count) -+{ -+ if (idx > TS0710MUX_COUNT_MAX_IDX) { -+ TS0710_PRINTK("MUX set_count: invalid idx: %d!\n", idx); -+ return -1; -+ } -+ if (count < 0) { -+ TS0710_PRINTK("MUX set_count: invalid count: %d!\n", count); -+ return -1; -+ } -+ -+ down(&mux_data_count_mutex[idx]); -+ mux_data_count[idx] = count; -+ up(&mux_data_count_mutex[idx]); -+ -+ return 0; -+} -+ -+static int add_count(__u8 idx, int count) -+{ -+ if (idx > TS0710MUX_COUNT_MAX_IDX) { -+ TS0710_PRINTK("MUX add_count: invalid idx: %d!\n", idx); -+ return -1; -+ } -+ if (count <= 0) { -+ TS0710_PRINTK("MUX add_count: invalid count: %d!\n", count); -+ return -1; -+ } -+ -+ if (down_trylock(&mux_data_count_mutex[idx])) -+ return -1; -+ mux_data_count[idx] += count; -+ up(&mux_data_count_mutex[idx]); -+ -+ return 0; -+} -+ -+ssize_t file_proc_read(struct file * file, char *buf, size_t size, -+ loff_t * ppos) -+{ -+ gprs_bytes gprsData[TS0710MUX_GPRS_SESSION_MAX]; -+ int bufLen = sizeof(gprs_bytes) * TS0710MUX_GPRS_SESSION_MAX; -+ -+ UNUSED_PARAM(file); -+ UNUSED_PARAM(size); -+ UNUSED_PARAM(ppos); -+ -+ gprsData[0].recvBytes = get_count(TS0710MUX_GPRS1_RECV_COUNT_IDX); -+ gprsData[0].sentBytes = get_count(TS0710MUX_GPRS1_SEND_COUNT_IDX); -+ gprsData[TS0710MUX_GPRS_SESSION_MAX - 1].recvBytes = -+ get_count(TS0710MUX_GPRS2_RECV_COUNT_IDX); -+ gprsData[TS0710MUX_GPRS_SESSION_MAX - 1].sentBytes = -+ get_count(TS0710MUX_GPRS2_SEND_COUNT_IDX); -+ -+ copy_to_user(buf, gprsData, bufLen); -+ -+ return bufLen; -+} -+ -+ssize_t file_proc_write(struct file * file, const char *buf, size_t count, -+ loff_t * ppos) -+{ -+ gprs_bytes gprsData[TS0710MUX_GPRS_SESSION_MAX]; -+ int bufLen = sizeof(gprs_bytes) * TS0710MUX_GPRS_SESSION_MAX; -+ -+ UNUSED_PARAM(file); -+ UNUSED_PARAM(count); -+ UNUSED_PARAM(ppos); -+ -+ memset(gprsData, 0, bufLen); -+ -+ copy_from_user(gprsData, buf, bufLen); -+ -+ set_count(TS0710MUX_GPRS1_RECV_COUNT_IDX, gprsData[0].recvBytes); -+ set_count(TS0710MUX_GPRS1_SEND_COUNT_IDX, gprsData[0].sentBytes); -+ set_count(TS0710MUX_GPRS2_RECV_COUNT_IDX, -+ gprsData[TS0710MUX_GPRS_SESSION_MAX - 1].recvBytes); -+ set_count(TS0710MUX_GPRS2_SEND_COUNT_IDX, -+ gprsData[TS0710MUX_GPRS_SESSION_MAX - 1].sentBytes); -+ -+ return bufLen; -+} -+ -+static void gprs_proc_init(void) -+{ -+ gprs_proc_file = -+ create_proc_entry("gprsbytes", S_IRUSR | S_IWUSR, NULL); -+ gprs_proc_file->proc_fops = &file_proc_operations; -+} -+ -+static void gprs_proc_exit(void) -+{ -+ remove_proc_entry("gprsbytes", gprs_proc_file); -+} -+ -+static int __init mux_init(void) -+{ -+ __u8 j; -+ -+ if (COMM_FOR_MUX_DRIVER == NULL) { -+ -+#ifdef USB_FOR_MUX -+ panic("please install IPC-USB first\n"); -+#else -+ panic("please install ttyS0 first\n"); -+#endif -+ -+ } -+ -+ ts0710_init(); -+ -+ for (j = 0; j < NR_MUXS; j++) { -+ mux_send_info_flags[j] = 0; -+ mux_send_info[j] = 0; -+ mux_recv_info_flags[j] = 0; -+ mux_recv_info[j] = 0; -+ } -+ mux_send_info_idx = NR_MUXS; -+ mux_recv_queue = NULL; -+ mux_recv_flags = 0; -+ -+ for (j = 0; j < TS0710MUX_COUNT_IDX_NUM; j++) { -+ mux_data_count[j] = 0; -+ mux_data_count2[j] = 0; -+ init_MUTEX(&mux_data_count_mutex[j]); -+ } -+ post_recv_count_flag = 0; -+ -+ INIT_WORK(&send_tqueue, send_worker, NULL); -+ INIT_WORK(&receive_tqueue, receive_worker, NULL); -+ INIT_WORK(&post_recv_tqueue, post_recv_worker, NULL); -+ -+ memset(&mux_driver, 0, sizeof(struct tty_driver)); -+ memset(&mux_tty, 0, sizeof(mux_tty)); -+ mux_driver.magic = TTY_DRIVER_MAGIC; -+ mux_driver.driver_name = "ts0710mux"; -+ mux_driver.name = "ts0710mux"; -+ mux_driver.major = TS0710MUX_MAJOR; -+ mux_driver.minor_start = TS0710MUX_MINOR_START; -+ mux_driver.num = NR_MUXS; -+ mux_driver.type = TTY_DRIVER_TYPE_SERIAL; -+ mux_driver.subtype = SERIAL_TYPE_NORMAL; -+ mux_driver.init_termios = tty_std_termios; -+ mux_driver.init_termios.c_iflag = 0; -+ mux_driver.init_termios.c_oflag = 0; -+ mux_driver.init_termios.c_cflag = B38400 | CS8 | CREAD; -+ mux_driver.init_termios.c_lflag = 0; -+ mux_driver.flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW; -+ -+ mux_driver.ttys = mux_table; -+ mux_driver.termios = mux_termios; -+ mux_driver.termios_locked = mux_termios_locked; -+// mux_driver.driver_state = mux_state; -+ mux_driver.other = NULL; -+ -+ mux_driver.open = mux_open; -+ mux_driver.close = mux_close; -+ mux_driver.write = mux_write; -+ mux_driver.write_room = mux_write_room; -+ mux_driver.flush_buffer = mux_flush_buffer; -+ mux_driver.chars_in_buffer = mux_chars_in_buffer; -+ mux_driver.throttle = mux_throttle; -+ mux_driver.unthrottle = mux_unthrottle; -+ mux_driver.ioctl = mux_ioctl; -+ mux_driver.owner = THIS_MODULE; -+ -+ if (tty_register_driver(&mux_driver)) -+ panic("Couldn't register mux driver"); -+ -+ COMM_MUX_DISPATCHER = mux_dispatcher; -+ COMM_MUX_SENDER = mux_sender; -+ -+ gprs_proc_init(); -+ -+ return 0; -+} -+ -+static void __exit mux_exit(void) -+{ -+ __u8 j; -+ -+ COMM_MUX_DISPATCHER = NULL; -+ COMM_MUX_SENDER = NULL; -+ -+ gprs_proc_exit(); -+ -+ mux_send_info_idx = NR_MUXS; -+ mux_recv_queue = NULL; -+ for (j = 0; j < NR_MUXS; j++) { -+ if ((mux_send_info_flags[j]) && (mux_send_info[j])) { -+ kfree(mux_send_info[j]); -+ } -+ mux_send_info_flags[j] = 0; -+ mux_send_info[j] = 0; -+ -+ if ((mux_recv_info_flags[j]) && (mux_recv_info[j])) { -+ free_mux_recv_struct(mux_recv_info[j]); -+ } -+ mux_recv_info_flags[j] = 0; -+ mux_recv_info[j] = 0; -+ } -+ -+ if (tty_unregister_driver(&mux_driver)) -+ panic("Couldn't unregister mux driver"); -+} -+ -+module_init(mux_init); -+module_exit(mux_exit); -+ -+MODULE_LICENSE("GPL"); -+MODULE_AUTHOR("Harald Welte <laforge@openezx.org>"); -+MODULE_DESCRIPTION("TS 07.10 Multiplexer"); -Index: linux-2.6.23/drivers/char/ts0710_mux.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/drivers/char/ts0710_mux.h 2007-10-22 22:26:50.000000000 +0200 -@@ -0,0 +1,103 @@ -+/* -+ * mux_macro.h -+ * -+ * Copyright (C) 2002 2005 Motorola -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ * -+ * 11/18/2002 (Motorola) - Initial version -+ * -+ */ -+ -+/* -+* This header file should be included by both MUX and other applications -+* which access MUX device files. It gives the additional macro definitions -+* shared between MUX and applications. -+*/ -+ -+/* MUX DLCI(Data Link Connection Identifier) Configuration */ -+/* -+* DLCI Service -+* 0 Control Channel -+* 1 Voice Call & Network-related -+* 2 SMS MO -+* 3 SMS MT -+* 4 Phonebook & related -+* 5 MISC -+* 6 CSD/FAX -+* 7 GPRS1 -+* 8 GPRS2 -+* 9 Logger CMD -+* 10 Logger Data -+* 11 Test CMD -+* 12 AGPS -+* 13 Net Monitor -+*/ -+ -+/* Mapping between DLCI and MUX device files */ -+/* -+* File Name Minor DLCI AT Command/Data -+* /dev/mux0 0 1 AT Command -+* /dev/mux1 1 2 AT Command -+* /dev/mux2 2 3 AT Command -+* /dev/mux3 3 4 AT Command -+* /dev/mux4 4 5 AT Command -+* /dev/mux5 5 6 AT Command -+* /dev/mux6 6 7 AT Command -+* /dev/mux7 7 8 AT Command -+* /dev/mux8 8 6 Data -+* /dev/mux9 9 7 Data -+* /dev/mux10 10 8 Data -+* /dev/mux11 11 9 Data -+* /dev/mux12 12 10 Data -+* /dev/mux13 13 11 Data -+* /dev/mux14 14 12 Data -+* /dev/mux15 15 13 Data -+*/ -+ -+#define MUX_CMD_FILE_VOICE_CALL "/dev/mux0" -+#define MUX_CMD_FILE_SMS_MO "/dev/mux1" -+#define MUX_CMD_FILE_SMS_MT "/dev/mux2" -+#define MUX_CMD_FILE_PHONEBOOK "/dev/mux3" -+#define MUX_CMD_FILE_MISC "/dev/mux4" -+#define MUX_CMD_FILE_CSD "/dev/mux5" -+#define MUX_CMD_FILE_GPRS1 "/dev/mux6" -+#define MUX_CMD_FILE_GPRS2 "/dev/mux7" -+ -+#define MUX_DATA_FILE_CSD "/dev/mux8" -+#define MUX_DATA_FILE_GPRS1 "/dev/mux9" -+#define MUX_DATA_FILE_GPRS2 "/dev/mux10" -+#define MUX_DATA_FILE_LOGGER_CMD "/dev/mux11" -+#define MUX_DATA_FILE_LOGGER_DATA "/dev/mux12" -+#define MUX_DATA_FILE_TEST_CMD "/dev/mux13" -+#define MUX_DATA_FILE_AGPS "/dev/mux14" -+#define MUX_DATA_FILE_NET_MONITOR "/dev/mux15" -+ -+#define NUM_MUX_CMD_FILES 8 -+#define NUM_MUX_DATA_FILES 8 -+#define NUM_MUX_FILES ( NUM_MUX_CMD_FILES + NUM_MUX_DATA_FILES ) -+ -+/* Special ioctl() upon a MUX device file for hanging up a call */ -+#define TS0710MUX_IO_MSC_HANGUP 0x54F0 -+ -+/* Special ioctl() upon a MUX device file for MUX loopback test */ -+#define TS0710MUX_IO_TEST_CMD 0x54F1 -+ -+/* Special Error code might be return from write() to a MUX device file */ -+#define EDISCONNECTED 900 /* Logical data link is disconnected */ -+ -+/* Special Error code might be return from open() to a MUX device file */ -+#define EREJECTED 901 /* Logical data link connection request is rejected */ -Index: linux-2.6.23/drivers/char/ts0710_mux_usb.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/drivers/char/ts0710_mux_usb.c 2007-10-22 22:26:50.000000000 +0200 -@@ -0,0 +1,868 @@ -+/* -+ * linux/drivers/usb/ipcusb.c -+ * -+ * Implementation of a ipc driver based Intel's Bulverde USB Host -+ * Controller. -+ * -+ * Copyright (C) 2003-2005 Motorola -+ * Copyright (C) 2006 Harald Welte <laforge@openezx.org> -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -+ * -+ * 2003-Nov-03 - (Motorola) created -+ * 2004-Feb-20 - (Motorola) Add Power Manager codes -+ * 2004-Apr-14 - (Motorola) Update Suspend/Resume codes -+ * 2004-May-10 - (Motorola) Add unlink_urbs codes and do some updates of send -+ * out urb sequence -+ * 2006-Jun-22 - (Harald Welte) port to Linux 2.6.x -+ * -+ */ -+ -+#include <linux/kernel.h> -+#include <linux/module.h> -+#include <linux/list.h> -+#include <linux/errno.h> -+#include <asm/uaccess.h> -+#include <asm/hardware.h> -+#include <asm/arch/hardware.h> -+#include <asm/arch-pxa/pxa-regs.h> -+#include <asm/arch-pxa/ezx.h> -+#include <linux/slab.h> -+#include <linux/miscdevice.h> -+#include <linux/init.h> -+#include <linux/timer.h> -+#include <linux/delay.h> -+#include <linux/sched.h> -+#include <linux/tty.h> -+#include <linux/tty_driver.h> -+#include <linux/tty_flip.h> -+#include <linux/circ_buf.h> -+#include <linux/usb.h> -+ -+#include "ts0710_mux_usb.h" -+ -+/*Macro defined for this driver*/ -+#define DRIVER_VERSION "1.0alpha1" -+#define DRIVER_AUTHOR "Motorola / Harald Welte <laforge@openezx.org>" -+#define DRIVER_DESC "USB IPC Driver (TS07.10 lowlevel)" -+#define MOTO_IPC_VID 0x22b8 -+#define MOTO_IPC_PID 0x3006 -+#define IBUF_SIZE 32 /*urb size*/ -+#define IPC_USB_XMIT_SIZE 1024 -+#define IPC_URB_SIZE 32 -+#define IPC_USB_WRITE_INIT 0 -+#define IPC_USB_WRITE_XMIT 1 -+#define IPC_USB_PROBE_READY 3 -+#define IPC_USB_PROBE_NOT_READY 4 -+#define DBG_MAX_BUF_SIZE 1024 -+#define ICL_EVENT_INTERVAL (HZ) -+#undef BVD_DEBUG -+ -+#define IS_EP_BULK(ep) ((ep).bmAttributes == USB_ENDPOINT_XFER_BULK ? 1 : 0) -+#define IS_EP_BULK_IN(ep) (IS_EP_BULK(ep) && ((ep).bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN) -+#define IS_EP_BULK_OUT(ep) (IS_EP_BULK(ep) && ((ep).bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT) -+/*End defined macro*/ -+ -+/*global values defined*/ -+static struct usb_driver usb_ipc_driver; -+static struct timer_list ipcusb_timer; -+static struct timer_list suspend_timer; -+static struct timer_list wakeup_timer; -+static struct tty_struct ipcusb_tty; /* the coresponding tty struct, we just use flip buffer here. */ -+static struct tty_driver ipcusb_tty_driver; /* the coresponding tty driver, we just use write and chars in buff here*/ -+struct tty_driver *usb_for_mux_driver = NULL; -+struct tty_struct *usb_for_mux_tty = NULL; -+void (*usb_mux_dispatcher)(struct tty_struct *tty) = NULL; -+void (*usb_mux_sender)(void) = NULL; -+void (*ipcusb_ap_to_bp)(unsigned char*, int) = NULL; -+void (*ipcusb_bp_to_ap)(unsigned char*, int) = NULL; -+EXPORT_SYMBOL(usb_for_mux_driver); -+EXPORT_SYMBOL(usb_for_mux_tty); -+EXPORT_SYMBOL(usb_mux_dispatcher); -+EXPORT_SYMBOL(usb_mux_sender); -+EXPORT_SYMBOL(ipcusb_ap_to_bp); -+EXPORT_SYMBOL(ipcusb_bp_to_ap); -+static int sumbit_times = 0; -+static int callback_times = 0; -+//static unsigned long last_jiff = 0; -+extern int usbh_finished_resume; -+/*end global values defined*/ -+ -+MODULE_AUTHOR(DRIVER_AUTHOR); -+MODULE_DESCRIPTION(DRIVER_DESC); -+MODULE_LICENSE("GPL"); -+ -+#ifdef BVD_DEBUG -+#define bvd_dbg(format, arg...) printk(__FILE__ ": " format "\n" , ## arg) -+#else -+#define bvd_dbg(format, arg...) do {} while (0) -+#endif -+ -+/* USB device context */ -+typedef struct { -+ struct list_head list; -+ int size; -+ char *body; -+} buf_list_t; -+ -+struct ipc_usb_data { -+ u_int8_t write_finished_flag; -+ u_int8_t write_flag, -+ ipc_flag, -+ suspend_flag; -+ struct usb_device *ipc_dev; -+ struct urb readurb_mux, -+ writeurb_mux, -+ writeurb_dsplog; -+ char *obuf, *ibuf; -+ int writesize; /* max packet size for the -+ output bulk endpoint * -+ transfer buffers */ -+ -+ struct circ_buf xmit; /* write cric bufffer */ -+ struct list_head in_buf_list; -+ char bulk_in_ep_mux, -+ bulk_out_ep_mux, -+ bulk_in_ep_dsplog; -+ unsigned int ifnum; -+ -+ struct tasklet_struct bh, -+ bh_bp; -+ -+ spinlock_t lock; -+}; -+ -+struct ipc_usb_data *bvd_ipc; -+ -+#ifdef BVD_DEBUG -+static void bvd_dbg_hex(__u8 *buf, int len) -+{ -+ static unsigned char tbuf[DBG_MAX_BUF_SIZE]; -+ int i, c; -+ -+ if (len <= 0) -+ return; -+ -+ c = 0; -+ for (i=0; (i < len) && (c < (DBG_MAX_BUF_SIZE - 3)); i++) { -+ sprintf(&tbuf[c], "%02x ",buf[i]); -+ c += 3; -+ } -+ tbuf[c] = 0; -+ -+ printk("%s: %s\n", __FUNCTION__, tbuf); -+} -+#else -+#define bvd_dbg_hex(buf, len) -+#endif -+ -+static int unlink_urbs(struct urb *urb) -+{ -+ unsigned long flags; -+ int retval; -+ -+ spin_lock_irqsave(&bvd_ipc->lock, flags); -+ -+ retval = usb_unlink_urb(urb); -+ if (retval != -EINPROGRESS && retval != 0) -+ printk("unlink urb err, %d", retval); -+ -+ spin_unlock_irqrestore(&bvd_ipc->lock, flags); -+ return retval; -+} -+ -+static void append_to_inbuf_list(struct urb *urb) -+{ -+ buf_list_t *inbuf; -+ int count = urb->actual_length; -+ -+ inbuf = kmalloc(sizeof(buf_list_t), GFP_KERNEL); -+ if (!inbuf) { -+ printk("append_to_inbuf_list: (%d) out of memory!\n", -+ sizeof(buf_list_t)); -+ return; -+ } -+ -+ inbuf->size = count; -+ inbuf->body = kmalloc(sizeof(char)*count, GFP_KERNEL); -+ if (!inbuf->body) { -+ kfree(inbuf); -+ printk("append_to_inbuf_list: (%d) out of memory!\n", -+ sizeof(char)*count); -+ return; -+ } -+ memcpy(inbuf->body, (unsigned char*)urb->transfer_buffer, count); -+ list_add_tail(&inbuf->list, &bvd_ipc->in_buf_list); -+} -+ -+static void ipcusb_timeout(unsigned long data) -+{ -+ struct tty_struct *tty = &ipcusb_tty; -+ struct urb *urb = (struct urb *)data; -+ -+ bvd_dbg("ipcusb_timeout***"); -+ -+ while (!(list_empty(&bvd_ipc->in_buf_list))) { -+ int count; -+ buf_list_t *inbuf; -+ struct list_head *ptr = NULL; -+ -+ ptr = bvd_ipc->in_buf_list.next; -+ inbuf = list_entry (ptr, buf_list_t, list); -+ count = inbuf->size; -+ if (tty_insert_flip_string(tty, inbuf->body, count) >= count) { -+ list_del(ptr); -+ kfree(inbuf->body); -+ inbuf->body = NULL; -+ kfree(inbuf); -+ } else { -+ bvd_dbg("ipcusb_timeout: bvd_ipc->in_buf_list empty!"); -+ break; -+ } -+ } -+ -+ if (usb_mux_dispatcher) -+ usb_mux_dispatcher(tty); /**call Liu changhui's func.**/ -+ -+ if (list_empty(&bvd_ipc->in_buf_list)) { -+ urb->actual_length = 0; -+ urb->dev = bvd_ipc->ipc_dev; -+ if (usb_submit_urb(urb, GFP_ATOMIC)) -+ bvd_dbg("ipcusb_timeout: failed resubmitting read urb"); -+ bvd_dbg("ipcusb_timeout: resubmited read urb"); -+ } else { -+ ipcusb_timer.data = (unsigned long)urb; -+ mod_timer(&ipcusb_timer, jiffies+(10*HZ/1000)); -+ } -+} -+ -+static void usb_ipc_read_bulk(struct urb *urb, struct pt_regs *regs) -+{ -+ buf_list_t *inbuf; -+ int count = urb->actual_length; -+ struct tty_struct *tty = &ipcusb_tty; -+ -+ bvd_dbg("usb_ipc_read_bulk: begining!"); -+ if (urb->status) -+ printk("nonzero read bulk status received: %d\n", urb->status); -+ -+ bvd_dbg("usb_ipc_read_bulk: urb->actual_length=%d", urb->actual_length); -+ bvd_dbg("usb_ipc_read_bulk: urb->transfer_buffer:"); -+ -+ bvd_dbg_hex((unsigned char*)urb->transfer_buffer, urb->actual_length); -+ -+ if (count > 0 && ((*ipcusb_bp_to_ap) != NULL)) -+ (*ipcusb_bp_to_ap)(urb->transfer_buffer, urb->actual_length); -+ -+ if (!(list_empty(&bvd_ipc->in_buf_list))) { -+ int need_mux = 0; -+ -+ bvd_dbg("usb_ipc_read_bulk: some urbs in_buf_list"); -+ if (count > 0) { -+ bvd_ipc->suspend_flag = 1; -+ append_to_inbuf_list(urb); /* append the current received urb */ -+#if 0 -+ if(jiffies - last_jiff > ICL_EVENT_INTERVAL) -+ { -+ last_jiff = jiffies; -+ queue_apm_event(KRNL_ICL, NULL); -+ } -+#endif -+ } -+ -+ while (!(list_empty(&bvd_ipc->in_buf_list))) { -+ struct list_head* ptr = NULL; -+ ptr = bvd_ipc->in_buf_list.next; -+ inbuf = list_entry(ptr, buf_list_t, list); -+ count = inbuf->size; -+ need_mux = 1; -+ -+ tty_insert_flip_string(tty, inbuf->body, count); -+ -+ list_del(ptr); -+ kfree(inbuf->body); -+ inbuf->body = NULL; -+ kfree(inbuf); -+ } -+ -+ if (usb_mux_dispatcher && need_mux) -+ usb_mux_dispatcher(tty); /* call Liu changhui's func. */ -+ -+ if (list_empty(&bvd_ipc->in_buf_list)) { -+ urb->actual_length = 0; -+ urb->dev = bvd_ipc->ipc_dev; -+ if (usb_submit_urb(urb, GFP_ATOMIC)) -+ bvd_dbg("usb_ipc_read_bulk: " -+ "failed resubmitting read urb"); -+ bvd_dbg("usb_ipc_read_bulk: resubmited read urb"); -+ } else { -+ ipcusb_timer.data = (unsigned long)urb; -+ mod_timer(&ipcusb_timer, jiffies+(10*HZ/1000)); -+ } -+ } else if (count > 0) { -+ bvd_dbg("usb_ipc_read_bulk: no urbs in_buf_list"); -+ bvd_ipc->suspend_flag = 1; -+ -+ if (tty_insert_flip_string(tty, urb->transfer_buffer, -+ count) < count) { -+ bvd_ipc->suspend_flag = 1; -+ append_to_inbuf_list(urb); -+ ipcusb_timer.data = (unsigned long)urb; -+ mod_timer(&ipcusb_timer, jiffies+(10*HZ/1000)); -+#if 0 -+ if(jiffies - last_jiff > ICL_EVENT_INTERVAL) -+ { -+ last_jiff = jiffies; -+ queue_apm_event(KRNL_ICL, NULL); -+ } -+#endif -+ } -+ -+ if (usb_mux_dispatcher) -+ usb_mux_dispatcher(tty); /* call Liu changhui's func. */ -+ -+ urb->actual_length = 0; -+ urb->dev = bvd_ipc->ipc_dev; -+ if (usb_submit_urb(urb, GFP_ATOMIC)) -+ bvd_dbg("failed resubmitting read urb"); -+#if 0 -+ if(jiffies - last_jiff > ICL_EVENT_INTERVAL) -+ { -+ last_jiff = jiffies; -+ queue_apm_event(KRNL_ICL, NULL); -+ } -+#endif -+ bvd_dbg("usb_ipc_read_bulk: resubmited read urb"); -+ } -+ -+ bvd_dbg("usb_ipc_read_bulk: completed!!!"); -+} -+ -+static void usb_ipc_write_bulk(struct urb *urb, struct pt_regs *regs) -+{ -+ callback_times++; -+ bvd_ipc->write_finished_flag = 1; -+ -+ bvd_dbg("usb_ipc_write_bulk: begining!"); -+ //printk("%s: write_finished_flag=%d\n", __FUNCTION__, bvd_ipc->write_finished_flag); -+ -+ if (urb->status) -+ printk("nonzero write bulk status received: %d\n", urb->status); -+ -+ if (usb_mux_sender) -+ usb_mux_sender(); /**call Liu changhui's func**/ -+ -+ //printk("usb_ipc_write_bulk: mark ipcusb_softint!\n"); -+ tasklet_schedule(&bvd_ipc->bh); -+ -+ bvd_dbg("usb_ipc_write_bulk: finished!"); -+} -+ -+static void wakeup_timeout(unsigned long data) -+{ -+ GPSR(GPIO_MCU_INT_SW) = GPIO_bit(GPIO_MCU_INT_SW); -+ bvd_dbg("wakup_timeout: send GPIO_MCU_INT_SW signal!"); -+} -+ -+static void suspend_timeout(unsigned long data) -+{ -+ if (bvd_ipc->suspend_flag == 1) { -+ bvd_ipc->suspend_flag = 0; -+ mod_timer(&suspend_timer, jiffies+(5000*HZ/1000)); -+ bvd_dbg("suspend_timeout: add the suspend timer again"); -+ } else { -+ unlink_urbs(&bvd_ipc->readurb_mux); -+ UHCRHPS3 = 0x4; -+ mdelay(40); -+ bvd_dbg("suspend_timeout: send SUSPEND signal! UHCRHPS3=0x%x", -+ UHCRHPS3); -+ } -+} -+ -+static void ipcusb_xmit_data(void) -+{ -+ int c, count = IPC_URB_SIZE; -+ int result = 0; -+ int buf_flag = 0; -+ int buf_num = 0; -+ -+ //printk("%s: sumbit_times=%d, callback_times=%d\n", __FUNCTION__, sumbit_times, callback_times); -+ if (bvd_ipc->write_finished_flag == 0) -+ return; -+ -+ while (1) { -+ c = CIRC_CNT_TO_END(bvd_ipc->xmit.head, bvd_ipc->xmit.tail, -+ IPC_USB_XMIT_SIZE); -+ if (count < c) -+ c = count; -+ if (c <= 0) -+ break; -+ -+ memcpy(bvd_ipc->obuf+buf_num, -+ bvd_ipc->xmit.buf + bvd_ipc->xmit.tail, c); -+ buf_flag = 1; -+ bvd_ipc->xmit.tail = ((bvd_ipc->xmit.tail + c) -+ & (IPC_USB_XMIT_SIZE-1)); -+ count -= c; -+ buf_num += c; -+ } -+ -+ if (buf_num == 0) { -+ bvd_dbg("ipcusb_xmit_data: buf_num=%d, add suspend_timer", -+ buf_num); -+ bvd_ipc->suspend_flag = 0; -+ mod_timer(&suspend_timer, jiffies+(5000*HZ/1000)); -+ } -+ -+ bvd_dbg("ipcusb_xmit_data: buf_num=%d", buf_num); -+ bvd_dbg("ipcusb_xmit_data: bvd_ipc->obuf: "); -+ -+ bvd_dbg_hex((bvd_ipc->obuf)-buf_num, buf_num); -+ -+ if (buf_flag) { -+ bvd_ipc->writeurb_mux.transfer_buffer_length = buf_num; -+ bvd_dbg("ipcusb_xmit_data: copy data to write urb finished! "); -+ -+ if ((UHCRHPS3 & 0x4) == 0x4) { -+ static int ret; -+ int time = 0; -+ -+ /* if BP sleep, wake up BP first */ -+ pxa_gpio_mode(GPIO_IN | 41); -+ if (GPIO_is_high(41)) { -+ if (GPIO_is_high(GPIO_MCU_INT_SW)) -+ GPCR(GPIO_MCU_INT_SW) = GPIO_bit(GPIO_MCU_INT_SW); -+ else -+ GPSR(GPIO_MCU_INT_SW) = GPIO_bit(GPIO_MCU_INT_SW); -+ -+ time = jiffies; -+ while (GPIO_is_high(41) && (jiffies < (time+HZ))); -+ -+ if (GPIO_is_high(41)) { -+ printk("%s: Wakeup BP timeout! BP state is %d\n", -+ __FUNCTION__, GPIO_is_high(41)); -+ } -+ if (GPIO_is_high(GPIO_MCU_INT_SW)) -+ GPCR(GPIO_MCU_INT_SW) = GPIO_bit(GPIO_MCU_INT_SW); -+ else -+ GPSR(GPIO_MCU_INT_SW) = GPIO_bit(GPIO_MCU_INT_SW); -+ } -+ -+ /* Resume BP */ -+ UHCRHPS3 = 0x8; -+ mdelay(40); -+ bvd_dbg("ipcusb_xmit_data: Send RESUME signal! UHCRHPS3=0x%x", -+ UHCRHPS3); -+ /*send IN token*/ -+ bvd_ipc->readurb_mux.actual_length = 0; -+ bvd_ipc->readurb_mux.dev = bvd_ipc->ipc_dev; -+ if (ret = usb_submit_urb(&bvd_ipc->readurb_mux, GFP_ATOMIC)) -+ printk("ipcusb_xmit_data: usb_submit_urb(read mux bulk)" -+ "failed! status=%d\n", ret); -+ bvd_dbg("ipcusb_xmit_data: Send a IN token successfully!"); -+ } -+ -+ sumbit_times++; -+ bvd_ipc->write_finished_flag = 0; -+ //printk("%s: clear write_finished_flag:%d\n", __FUNCTION__, bvd_ipc->write_finished_flag); -+ bvd_ipc->writeurb_mux.dev = bvd_ipc->ipc_dev; -+ if (result = usb_submit_urb(&bvd_ipc->writeurb_mux, GFP_ATOMIC)) -+ warn("ipcusb_xmit_data: funky result! result=%d\n", result); -+ -+ bvd_dbg("ipcusb_xmit_data: usb_submit_urb finished! result:%d", result); -+ -+ } -+} -+ -+static void usbipc_bh_func(unsigned long param) -+{ -+ ipcusb_xmit_data(); -+} -+ -+extern void get_halted_bit(void); -+ -+static void usbipc_bh_bp_func(unsigned long param) -+{ -+ if ((UHCRHPS3 & 0x4) == 0x4) { -+ UHCRHPS3 = 0x8; -+ mdelay(40); -+ bvd_dbg("ipcusb_softint_send_readurb: Send RESUME signal! " -+ "UHCRHPS3=0x%x", UHCRHPS3); -+ } -+ if (bvd_ipc->ipc_flag == IPC_USB_PROBE_READY) { -+ get_halted_bit(); -+ -+ /*send a IN token*/ -+ bvd_ipc->readurb_mux.dev = bvd_ipc->ipc_dev; -+ if (usb_submit_urb(&bvd_ipc->readurb_mux, GFP_ATOMIC)) { -+ bvd_dbg("ipcusb_softint_send_readurb: " -+ "usb_submit_urb(read mux bulk) failed!"); -+ } -+ bvd_dbg("ipcusb_softint_send_readurb: Send a IN token successfully!"); -+ bvd_ipc->suspend_flag = 0; -+ bvd_dbg("ipcusb_softint_send_readurb: add suspend_timer"); -+ mod_timer(&suspend_timer, jiffies+(5000*HZ/1000)); -+ } -+} -+ -+static int usb_ipc_write(struct tty_struct *tty, -+ const unsigned char *buf, int count) -+{ -+ int c, ret = 0; -+ -+ bvd_dbg("usb_ipc_write: count=%d, buf: ", count); -+ bvd_dbg_hex(buf, count); -+ -+ if (count <= 0) -+ return 0; -+ -+ if (*ipcusb_ap_to_bp != NULL) -+ (*ipcusb_ap_to_bp)(buf, count); -+ -+ bvd_ipc->suspend_flag = 1; -+ -+ if ((bvd_ipc->ipc_flag == IPC_USB_PROBE_READY) && -+ (bvd_ipc->xmit.head == bvd_ipc->xmit.tail)) { -+ bvd_dbg("usb_ipc_write: set write_flag"); -+ bvd_ipc->write_flag = IPC_USB_WRITE_XMIT; -+ } -+ -+ while (1) { -+ c = CIRC_SPACE_TO_END(bvd_ipc->xmit.head, -+ bvd_ipc->xmit.tail, IPC_USB_XMIT_SIZE); -+ if (count < c) -+ c = count; -+ if (c <= 0) -+ break; -+ -+ memcpy(bvd_ipc->xmit.buf + bvd_ipc->xmit.head, buf, c); -+ bvd_ipc->xmit.head = ((bvd_ipc->xmit.head + c) -+ & (IPC_USB_XMIT_SIZE-1)); -+ buf += c; -+ count -= c; -+ ret += c; -+ } -+ bvd_dbg("usb_ipc_write: ret=%d, bvd_ipc->xmit.buf: ", ret); -+ -+ bvd_dbg_hex(bvd_ipc->xmit.buf, ret); -+ -+ if (bvd_ipc->write_flag == IPC_USB_WRITE_XMIT) { -+ bvd_ipc->write_flag = IPC_USB_WRITE_INIT; -+ bvd_dbg("usb_ipc_write: mark ipcusb_softint"); -+ tasklet_schedule(&bvd_ipc->bh); -+ } -+ -+ bvd_dbg("usb_ipc_write: ret=%d\n", ret); -+ return ret; -+} -+ -+static int usb_ipc_chars_in_buffer(struct tty_struct *tty) -+{ -+ return CIRC_CNT(bvd_ipc->xmit.head, bvd_ipc->xmit.tail, IPC_USB_XMIT_SIZE); -+} -+ -+void usb_send_readurb(void) -+{ -+ //printk("usb_send_readurb: begining!UHCRHPS3=0x%x, usbh_finished_resume=%d\n", UHCRHPS3, usbh_finished_resume); -+ -+ if (usbh_finished_resume == 0) -+ return; -+ -+ tasklet_schedule(&bvd_ipc->bh_bp); -+} -+ -+static int usb_ipc_probe(struct usb_interface *intf, -+ const struct usb_device_id *id) -+{ -+ struct usb_device *usbdev = interface_to_usbdev(intf); -+ struct usb_config_descriptor *ipccfg; -+ struct usb_interface_descriptor *interface; -+ struct usb_endpoint_descriptor *endpoint; -+ int ep_cnt, readsize, writesize; -+ char have_bulk_in_mux, have_bulk_out_mux; -+ -+ bvd_dbg("usb_ipc_probe: vendor id 0x%x, device id 0x%x", -+ usbdev->descriptor.idVendor, usbdev->descriptor.idProduct); -+ -+ if ((usbdev->descriptor.idVendor != MOTO_IPC_VID) || -+ (usbdev->descriptor.idProduct != MOTO_IPC_PID)) -+ return -ENODEV; -+ -+ /* a2590c : dsplog interface is not supported by this driver */ -+ if (intf->minor == 2) /* dsplog interface number is 2 */ -+ return -1; -+ -+ bvd_dbg("usb_ipc_probe: USB dev address:%p", usbdev); -+ bvd_dbg("usb_ipc_probe: ifnum:%u", intf->minor); -+ -+ ipccfg = &usbdev->actconfig->desc; -+ bvd_dbg("usb_ipc_prob: config%d", ipccfg->bConfigurationValue); -+ bvd_dbg("usb_ipc_prob: bNumInterfaces = %d", ipccfg->bNumInterfaces); -+ -+ /* After this point we can be a little noisy about what we are trying -+ * to configure, hehe. */ -+ if (usbdev->descriptor.bNumConfigurations != 1) { -+ info("usb_ipc_probe: Only one device configuration " -+ "is supported."); -+ return -1; -+ } -+ -+ if (usbdev->config[0].desc.bNumInterfaces != 3) { -+ info("usb_ipc_probe: Only three device interfaces are " -+ "supported."); -+ return -1; -+ } -+ -+ interface = &intf->cur_altsetting->desc; -+ endpoint = &intf->cur_altsetting->endpoint[0].desc; -+ /* Start checking for two bulk endpoints or ... FIXME: This is a future -+ * enhancement...*/ -+ bvd_dbg("usb_ipc_probe: Number of Endpoints:%d", -+ (int) interface->bNumEndpoints); -+ if (interface->bNumEndpoints != 2) { -+ info("usb_ipc_probe: Only two endpoints supported."); -+ return -1; -+ } -+ -+ ep_cnt = have_bulk_in_mux = have_bulk_out_mux = 0; -+ -+ bvd_dbg("usb_ipc_probe: endpoint[0] is:%x", -+ (&endpoint[0])->bEndpointAddress); -+ bvd_dbg("usb_ipc_probe: endpoint[1] is:%x ", -+ (&endpoint[1])->bEndpointAddress); -+ -+ while (ep_cnt < interface->bNumEndpoints) { -+ -+ if (!have_bulk_in_mux && IS_EP_BULK_IN(endpoint[ep_cnt])) { -+ bvd_dbg("usb_ipc_probe: bEndpointAddress(IN) is:%x ", -+ (&endpoint[ep_cnt])->bEndpointAddress); -+ have_bulk_in_mux = -+ (&endpoint[ep_cnt])->bEndpointAddress; -+ readsize = (&endpoint[ep_cnt])->wMaxPacketSize; -+ bvd_dbg("usb_ipc_probe: readsize=%d", readsize); -+ ep_cnt++; -+ continue; -+ } -+ -+ if (!have_bulk_out_mux && IS_EP_BULK_OUT(endpoint[ep_cnt])) { -+ bvd_dbg("usb_ipc_probe: bEndpointAddress(OUT) is:%x ", -+ (&endpoint[ep_cnt])->bEndpointAddress); -+ have_bulk_out_mux = -+ (&endpoint[ep_cnt])->bEndpointAddress; -+ writesize = (&endpoint[ep_cnt])->wMaxPacketSize; -+ bvd_dbg("usb_ipc_probe: writesize=%d", writesize); -+ ep_cnt++; -+ continue; -+ } -+ -+ info("usb_ipc_probe: Undetected endpoint ^_^ "); -+ /* Shouldn't ever get here unless we have something weird */ -+ return -1; -+ } -+ -+ /* Perform a quick check to make sure that everything worked as it -+ * should have. */ -+ -+ switch (interface->bNumEndpoints) { -+ case 2: -+ if (!have_bulk_in_mux || !have_bulk_out_mux) { -+ info("usb_ipc_probe: Two bulk endpoints required."); -+ return -1; -+ } -+ break; -+ default: -+ info("usb_ipc_probe: Endpoint determination failed ^_^ "); -+ return -1; -+ } -+ -+ /* Ok, now initialize all the relevant values */ -+ if (!(bvd_ipc->obuf = (char *)kmalloc(writesize, GFP_KERNEL))) { -+ err("usb_ipc_probe: Not enough memory for the output buffer."); -+ kfree(bvd_ipc); -+ return -1; -+ } -+ bvd_dbg("usb_ipc_probe: obuf address:%p", bvd_ipc->obuf); -+ -+ if (!(bvd_ipc->ibuf = (char *)kmalloc(readsize, GFP_KERNEL))) { -+ err("usb_ipc_probe: Not enough memory for the input buffer."); -+ kfree(bvd_ipc->obuf); -+ kfree(bvd_ipc); -+ return -1; -+ } -+ bvd_dbg("usb_ipc_probe: ibuf address:%p", bvd_ipc->ibuf); -+ -+ bvd_ipc->ipc_flag = IPC_USB_PROBE_READY; -+ bvd_ipc->write_finished_flag = 1; -+ bvd_ipc->suspend_flag = 1; -+ bvd_ipc->bulk_in_ep_mux= have_bulk_in_mux; -+ bvd_ipc->bulk_out_ep_mux= have_bulk_out_mux; -+ bvd_ipc->ipc_dev = usbdev; -+ bvd_ipc->writesize = writesize; -+ INIT_LIST_HEAD (&bvd_ipc->in_buf_list); -+ -+ bvd_ipc->bh.func = usbipc_bh_func; -+ bvd_ipc->bh.data = (unsigned long) bvd_ipc; -+ -+ bvd_ipc->bh_bp.func = usbipc_bh_bp_func; -+ bvd_ipc->bh_bp.data = (unsigned long) bvd_ipc; -+ -+ /*Build a write urb*/ -+ usb_fill_bulk_urb(&bvd_ipc->writeurb_mux, usbdev, -+ usb_sndbulkpipe(bvd_ipc->ipc_dev, -+ bvd_ipc->bulk_out_ep_mux), -+ bvd_ipc->obuf, writesize, usb_ipc_write_bulk, -+ bvd_ipc); -+ //bvd_ipc->writeurb_mux.transfer_flags |= USB_ASYNC_UNLINK; -+ -+ /*Build a read urb and send a IN token first time*/ -+ usb_fill_bulk_urb(&bvd_ipc->readurb_mux, usbdev, -+ usb_rcvbulkpipe(usbdev, bvd_ipc->bulk_in_ep_mux), -+ bvd_ipc->ibuf, readsize, usb_ipc_read_bulk, bvd_ipc); -+ //bvd_ipc->readurb_mux.transfer_flags |= USB_ASYNC_UNLINK; -+ -+ usb_driver_claim_interface(&usb_ipc_driver, intf, bvd_ipc); -+ //usb_driver_claim_interface(&usb_ipc_driver, &ipccfg->interface[1], bvd_ipc); -+ -+ // a2590c: dsplog is not supported by this driver -+ // usb_driver_claim_interface(&usb_ipc_driver, -+ // &ipccfg->interface[2], bvd_ipc); -+ /*send a IN token first time*/ -+ bvd_ipc->readurb_mux.dev = bvd_ipc->ipc_dev; -+ if (usb_submit_urb(&bvd_ipc->readurb_mux, GFP_ATOMIC)) -+ printk("usb_ipc_prob: usb_submit_urb(read mux bulk) failed!\n"); -+ -+ bvd_dbg("usb_ipc_prob: Send a IN token successfully!"); -+ -+ if (bvd_ipc->xmit.head != bvd_ipc->xmit.tail) { -+ printk("usb_ipc_probe: mark ipcusb_softint!\n"); -+ tasklet_schedule(&bvd_ipc->bh); -+ } -+ -+ printk("usb_ipc_probe: completed probe!"); -+ usb_set_intfdata(intf, &bvd_ipc); -+ return 0; -+} -+ -+static void usb_ipc_disconnect(struct usb_interface *intf) -+{ -+ //struct usb_device *usbdev = interface_to_usbdev(intf); -+ struct ipc_usb_data *bvd_ipc_disconnect = usb_get_intfdata(intf); -+ -+ printk("usb_ipc_disconnect:*** \n"); -+ -+ if ((UHCRHPS3 & 0x4) == 0) -+ usb_unlink_urb(&bvd_ipc_disconnect->readurb_mux); -+ -+ usb_unlink_urb(&bvd_ipc_disconnect->writeurb_mux); -+ -+ bvd_ipc_disconnect->ipc_flag = IPC_USB_PROBE_NOT_READY; -+ kfree(bvd_ipc_disconnect->ibuf); -+ kfree(bvd_ipc_disconnect->obuf); -+ -+ usb_driver_release_interface(&usb_ipc_driver, -+ bvd_ipc_disconnect->ipc_dev->actconfig->interface[0]); -+ usb_driver_release_interface(&usb_ipc_driver, -+ bvd_ipc_disconnect->ipc_dev->actconfig->interface[1]); -+ -+ //a2590c: dsplog interface is not supported by this driver -+ //usb_driver_release_interface(&usb_ipc_driver, &bvd_ipc_disconnect->ipc_dev->actconfig->interface[2]); -+ -+ bvd_ipc_disconnect->ipc_dev = NULL; -+ -+ usb_set_intfdata(intf, NULL); -+ -+ printk("usb_ipc_disconnect completed!\n"); -+} -+ -+static struct usb_device_id usb_ipc_id_table[] = { -+ { USB_DEVICE(MOTO_IPC_VID, MOTO_IPC_PID) }, -+ { } /* Terminating entry */ -+}; -+ -+static struct usb_driver usb_ipc_driver = { -+ .name = "usb ipc", -+ .probe = usb_ipc_probe, -+ .disconnect = usb_ipc_disconnect, -+ .id_table = usb_ipc_id_table, -+}; -+ -+static int __init usb_ipc_init(void) -+{ -+ int result; -+ -+ bvd_dbg("init usb_ipc"); -+ /* register driver at the USB subsystem */ -+ result = usb_register(&usb_ipc_driver); -+ if (result < 0) { -+ err ("usb ipc driver could not be registered"); -+ return result; -+ } -+ -+ /*init the related mux interface*/ -+ if (!(bvd_ipc = kzalloc(sizeof(struct ipc_usb_data), GFP_KERNEL))) { -+ err("usb_ipc_init: Out of memory."); -+ usb_deregister(&usb_ipc_driver); -+ return -ENOMEM; -+ } -+ bvd_dbg("usb_ipc_init: Address of bvd_ipc:%p", bvd_ipc); -+ -+ if (!(bvd_ipc->xmit.buf = kmalloc(IPC_USB_XMIT_SIZE, GFP_KERNEL))) { -+ err("usb_ipc_init: Not enough memory for the input buffer."); -+ kfree(bvd_ipc); -+ usb_deregister(&usb_ipc_driver); -+ return -ENOMEM; -+ } -+ bvd_dbg("usb_ipc_init: bvd_ipc->xmit.buf address:%p", -+ bvd_ipc->xmit.buf); -+ bvd_ipc->ipc_dev = NULL; -+ bvd_ipc->xmit.head = bvd_ipc->xmit.tail = 0; -+ bvd_ipc->write_flag = IPC_USB_WRITE_INIT; -+ -+ ipcusb_tty_driver.write = usb_ipc_write; -+ ipcusb_tty_driver.chars_in_buffer = usb_ipc_chars_in_buffer; -+ -+ usb_for_mux_driver = &ipcusb_tty_driver; -+ usb_for_mux_tty = &ipcusb_tty; -+ -+ /* init timers for ipcusb read process and usb suspend */ -+ init_timer(&ipcusb_timer); -+ ipcusb_timer.function = ipcusb_timeout; -+ -+ init_timer(&suspend_timer); -+ suspend_timer.function = suspend_timeout; -+ -+ init_timer(&wakeup_timer); -+ wakeup_timer.function = wakeup_timeout; -+ -+ info("USB Host(Bulverde) IPC driver registered."); -+ info(DRIVER_VERSION ":" DRIVER_DESC); -+ -+ return 0; -+} -+ -+static void __exit usb_ipc_exit(void) -+{ -+ bvd_dbg("cleanup bvd_ipc"); -+ -+ kfree(bvd_ipc->xmit.buf); -+ kfree(bvd_ipc); -+ usb_deregister(&usb_ipc_driver); -+ -+ info("USB Host(Bulverde) IPC driver deregistered."); -+} -+ -+module_init(usb_ipc_init); -+module_exit(usb_ipc_exit); -+EXPORT_SYMBOL(usb_send_readurb); -Index: linux-2.6.23/drivers/char/ts0710_mux_usb.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/drivers/char/ts0710_mux_usb.h 2007-10-22 22:26:50.000000000 +0200 -@@ -0,0 +1,29 @@ -+/* -+ * linux/drivers/usb/ipcusb.h -+ * -+ * Implementation of a ipc driver based Intel's Bulverde USB Host -+ * Controller. -+ * -+ * Copyright (C) 2003-2005 Motorola -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -+ * -+ * 2003-Nov-18 - (Motorola) created -+ * -+ */ -+extern struct tty_driver *usb_for_mux_driver; -+extern struct tty_struct *usb_for_mux_tty; -+extern void (*usb_mux_dispatcher)(struct tty_struct *tty); -+extern void (*usb_mux_sender)(void); diff --git a/packages/linux/linux-ezx-2.6.23/patches/mux_debug.patch b/packages/linux/linux-ezx-2.6.23/patches/mux_debug.patch deleted file mode 100644 index 58cb25a0b6..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/mux_debug.patch +++ /dev/null @@ -1,551 +0,0 @@ -Index: linux-2.6.20.7/drivers/char/ts0710_mux.c -=================================================================== ---- linux-2.6.20.7.orig/drivers/char/ts0710_mux.c 2007-04-22 12:24:18.000000000 +0200 -+++ linux-2.6.20.7/drivers/char/ts0710_mux.c 2007-04-22 12:26:47.000000000 +0200 -@@ -85,6 +85,9 @@ - #include "ts0710.h" - #include "ts0710_mux.h" - -+#define TS0710DEBUG -+#define PRINT_OUTPUT_PRINTK -+ - #define TS0710MUX_GPRS_SESSION_MAX 2 - #define TS0710MUX_MAJOR 250 - #define TS0710MUX_MINOR_START 0 -@@ -316,7 +319,7 @@ - #ifdef TS0710DEBUG - - #ifdef PRINT_OUTPUT_PRINTK --#define TS0710_DEBUG(fmt, arg...) printk(KERN_INFO "MUX " __FUNCTION__ ": " fmt "\n" , ## arg) -+#define TS0710_DEBUG(fmt, arg...) printk(KERN_INFO "MUX %s: " fmt "\n" , __func__, ## arg) - #else - #include "ezxlog.h" - static __u8 strDebug[256]; -@@ -530,10 +533,10 @@ - if (strncmp(p->comm, "aplogd", 6) == 0) { - sig = 1; - if (send_sig(SIGUSR2, p, 1) == 0) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX: success to send SIGUSR2 to aplogd!\n"); - } else { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX: failure to send SIGUSR2 to aplogd!\n"); - } - break; -@@ -542,7 +545,7 @@ - read_unlock(&tasklist_lock); - - if (!sig) { -- TS0710_PRINTK("MUX: not found aplogd!\n"); -+ TS0710_DEBUG("MUX: not found aplogd!\n"); - } - } - #else -@@ -559,11 +562,11 @@ - buf[len + 1] = TS0710_BASIC_FLAG; - - if ((COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX basic_write: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n"); - - #ifndef USB_FOR_MUX -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX basic_write: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n"); - TS0710_SIG2APLOGD(); - #endif -@@ -577,7 +580,7 @@ - res = COMM_FOR_MUX_DRIVER->write(COMM_FOR_MUX_TTY, buf, len + 2); - - if (res != len + 2) { -- TS0710_PRINTK("MUX basic_write: Write Error!\n"); -+ TS0710_DEBUG("MUX basic_write: Write Error!\n"); - return -1; - } - -@@ -601,7 +604,7 @@ - TS0710_DEBUG("crc_check: CRC check OK\n"); - return 0; - } else { -- TS0710_PRINTK("MUX crc_check: CRC check failed\n"); -+ TS0710_DEBUG("MUX crc_check: CRC check failed\n"); - return 1; - } - } -@@ -1266,7 +1269,7 @@ - break; - - case FCON: /*Flow control on command */ -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX Received Flow control(all channels) on command\n"); - if (mcc_short_pkt->h.type.cr == MCC_CMD) { - ts0710->dlci[0].state = CONNECTED; -@@ -1276,7 +1279,7 @@ - break; - - case FCOFF: /*Flow control off command */ -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX Received Flow control(all channels) off command\n"); - if (mcc_short_pkt->h.type.cr == MCC_CMD) { - for (j = 0; j < TS0710_MAX_CHN; j++) { -@@ -1823,7 +1826,7 @@ - TS0710_DEBUG("UIH on channel %d\n", dlci); - - if (uih_len > ts0710->dlci[dlci].mtu) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX Error: DLCI:%d, uih_len:%d is bigger than mtu:%d, discard data!\n", - dlci, uih_len, ts0710->dlci[dlci].mtu); - break; -@@ -1844,7 +1847,7 @@ - dlci, tty_idx); - TS0710_DEBUGSTR(uih_data_start, uih_len); - if (!(iscmdtty[tty_idx])) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX Error: %s: Wrong CMDTAG on DLCI:%d, /dev/mux%d\n", - __FUNCTION__, dlci, tty_idx); - } -@@ -1856,7 +1859,7 @@ - ("NON-CMDTAG on DLCI:%d, /dev/mux%d\n", - dlci, tty_idx); - if (iscmdtty[tty_idx]) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX Error: %s: Wrong NON-CMDTAG on DLCI:%d, /dev/mux%d\n", - __FUNCTION__, dlci, tty_idx); - } -@@ -1864,13 +1867,14 @@ - } - tty = mux_table[tty_idx]; - if ((!mux_tty[tty_idx]) || (!tty)) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX: No application waiting for, discard it! /dev/mux%d\n", - tty_idx); -+ TS0710_DEBUG("MUX: mux_tty[%d] = %d, tty is at %i", tty_idx, mux_tty[tty_idx], tty); - } else { /* Begin processing received data */ - if ((!mux_recv_info_flags[tty_idx]) - || (!mux_recv_info[tty_idx])) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX Error: No mux_recv_info, discard it! /dev/mux%d\n", - tty_idx); - break; -@@ -1878,7 +1882,7 @@ - - recv_info = mux_recv_info[tty_idx]; - if (recv_info->total > 8192) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX : discard data for tty_idx:%d, recv_info->total > 8192 \n", - tty_idx); - break; -@@ -1949,7 +1953,7 @@ - get_mux_recv_packet - (uih_len); - if (!recv_packet) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX %s: no memory\n", - __FUNCTION__); - break; -@@ -1980,7 +1984,7 @@ - } else { /* recv_info->total == 0 */ - if (uih_len > - TS0710MUX_RECV_BUF_SIZE) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX Error: tty_idx:%d, uih_len == %d is too big\n", - tty_idx, uih_len); - uih_len = -@@ -2120,12 +2124,12 @@ - if (ts0710->dlci[dlci].state == DISCONNECTED) { - break; - } else if (signal_pending(current)) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX DLCI %d Send DISC got signal!\n", - dlci); - break; - } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX DLCI %d Send DISC timeout!\n", dlci); - continue; - } -@@ -2158,7 +2162,7 @@ - return 0; - } else if (ts0710->dlci[0].state == CONNECTING) { - /* Reentry */ -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX DLCI: 0, reentry to open DLCI 0, pid: %d, %s !\n", - current->pid, current->comm); - try = 11; -@@ -2179,13 +2183,13 @@ - DISCONNECTED) { - break; - } else if (signal_pending(current)) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX DLCI:%d Wait for connecting got signal!\n", - dlci); - retval = -EAGAIN; - break; - } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX DLCI:%d Wait for connecting timeout!\n", - dlci); - continue; -@@ -2199,7 +2203,7 @@ - } - } else if ((ts0710->dlci[0].state != DISCONNECTED) - && (ts0710->dlci[0].state != REJECTED)) { -- TS0710_PRINTK("MUX DLCI:%d state is invalid!\n", dlci); -+ TS0710_DEBUG("MUX DLCI:%d state is invalid!\n", dlci); - return retval; - } else { - ts0710->initiator = 1; -@@ -2218,19 +2222,19 @@ - retval = 0; - break; - } else if (ts0710->dlci[0].state == REJECTED) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX DLCI:%d Send SABM got rejected!\n", - dlci); - retval = -EREJECTED; - break; - } else if (signal_pending(current)) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX DLCI:%d Send SABM got signal!\n", - dlci); - retval = -EAGAIN; - break; - } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX DLCI:%d Send SABM timeout!\n", - dlci); - continue; -@@ -2271,13 +2275,13 @@ - DISCONNECTED) { - break; - } else if (signal_pending(current)) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX DLCI:%d Wait for connecting got signal!\n", - dlci); - retval = -EAGAIN; - break; - } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX DLCI:%d Wait for connecting timeout!\n", - dlci); - continue; -@@ -2296,7 +2300,7 @@ - } - } else if ((ts0710->dlci[dlci].state != DISCONNECTED) - && (ts0710->dlci[dlci].state != REJECTED)) { -- TS0710_PRINTK("MUX DLCI:%d state is invalid!\n", dlci); -+ TS0710_DEBUG("MUX DLCI:%d state is invalid!\n", dlci); - return retval; - } else { - ts0710->dlci[dlci].state = NEGOTIATING; -@@ -2313,13 +2317,13 @@ - if (ts0710->dlci[dlci].state == CONNECTING) { - break; - } else if (signal_pending(current)) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX DLCI:%d Send pn_msg got signal!\n", - dlci); - retval = -EAGAIN; - break; - } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX DLCI:%d Send pn_msg timeout!\n", - dlci); - continue; -@@ -2344,20 +2348,20 @@ - break; - } else if (ts0710->dlci[dlci].state == - REJECTED) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX DLCI:%d Send SABM got rejected!\n", - dlci); - retval = -EREJECTED; - break; - } else if (signal_pending(current)) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX DLCI:%d Send SABM got signal!\n", - dlci); - retval = -EAGAIN; - break; - } else if ((jiffies - t) >= - TS0710MUX_TIME_OUT) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX DLCI:%d Send SABM timeout!\n", - dlci); - continue; -@@ -2468,7 +2472,7 @@ - schedule_work(&send_tqueue); - #else - if (!tq_serial_for_mux) { -- TS0710_PRINTK("MUX Error: %s: tq_serial_for_mux == 0\n", -+ TS0710_DEBUG("MUX Error: %s: tq_serial_for_mux == 0\n", - __FUNCTION__); - return; - } -@@ -2508,7 +2512,7 @@ - if ((mux_tty[cmdtty] == 0) && (mux_tty[datatty] == 0)) { - if (dlci == 1) { - ts0710_close_channel(0); -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX mux_close: tapisrv might be down!!! Close DLCI 1\n"); - TS0710_SIG2APLOGD(); - } -@@ -2673,12 +2677,12 @@ - UNUSED_PARAM(tty); - - if ((COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX %s: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n", - __FUNCTION__); - - #ifndef USB_FOR_MUX -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX %s: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n", - __FUNCTION__); - TS0710_SIG2APLOGD(); -@@ -2724,14 +2728,14 @@ - } else if (ts0710->dlci[dlci].state == CONNECTED) { - - if (!(mux_send_info_flags[line])) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX Error: mux_write: mux_send_info_flags[%d] == 0\n", - line); - return -ENODEV; - } - send_info = mux_send_info[line]; - if (!send_info) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX Error: mux_write: mux_send_info[%d] == 0\n", - line); - return -ENODEV; -@@ -2800,7 +2804,7 @@ - } - return c; - } else { -- TS0710_PRINTK("MUX mux_write: DLCI %d not connected\n", dlci); -+ TS0710_DEBUG("MUX mux_write: DLCI %d not connected\n", dlci); - return -EDISCONNECTED; - } - } -@@ -2940,7 +2944,7 @@ - return; - } - -- TS0710_PRINTK("MUX %s: line is:%d\n", __FUNCTION__, line); -+ TS0710_DEBUG("MUX %s: line is:%d\n", __FUNCTION__, line); - - if ((mux_send_info_flags[line]) - && (mux_send_info[line]) -@@ -2960,10 +2964,10 @@ - - /* - if( (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0) ) { -- TS0710_PRINTK("MUX %s: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n", __FUNCTION__); -+ TS0710_DEBUG("MUX %s: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n", __FUNCTION__); - - #ifndef USB_FOR_MUX -- TS0710_PRINTK("MUX %s: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n", __FUNCTION__); -+ TS0710_DEBUG("MUX %s: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n", __FUNCTION__); - TS0710_SIG2APLOGD(); - #endif - -@@ -2989,9 +2993,9 @@ - if ((COMM_FOR_MUX_DRIVER == NULL) || (COMM_FOR_MUX_TTY == NULL)) { - - #ifdef USB_FOR_MUX -- TS0710_PRINTK("MUX: please install and open IPC-USB first\n"); -+ TS0710_DEBUG("MUX: please install and open IPC-USB first\n"); - #else -- TS0710_PRINTK("MUX: please install and open ttyS0 first\n"); -+ TS0710_DEBUG("MUX: please install and open ttyS0 first\n"); - #endif - - goto out; -@@ -3016,7 +3020,7 @@ - /* if( dlci == 1 ) { */ - /* Open server channel 0 first */ - if ((retval = ts0710_open_channel(0)) != 0) { -- TS0710_PRINTK("MUX: Can't connect server channel 0!\n"); -+ TS0710_DEBUG("MUX: Can't connect server channel 0!\n"); - ts0710_init(); - - mux_tty[line]--; -@@ -3073,7 +3077,7 @@ - datatty = dlci2tty[dlci].datatty; - if ((mux_tty[cmdtty] > 0) || (mux_tty[datatty] > 0)) { - if ((retval = ts0710_open_channel(dlci)) != 0) { -- TS0710_PRINTK("MUX: Can't connected channel %d!\n", -+ TS0710_DEBUG("MUX: Can't connected channel %d!\n", - dlci); - ts0710_reset_dlci(dlci); - -@@ -3096,6 +3100,7 @@ - retval = 0; - #endif - out: -+ TS0710_DEBUG("returning %d for open of /dev/mux%d (mux_tty[%d] = %d", retval, line, line, mux_tty[line]); - return retval; - } - -@@ -3178,12 +3183,12 @@ - - while (1) { - tbuf_free = TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf); -- TS0710_PRINTK("Reading max %i bytes from ts0710_mux_usb inbuf.\n", tbuf_free); -+ TS0710_DEBUG("Reading max %i bytes from ts0710_mux_usb inbuf.\n", tbuf_free); - tbuf_read = get_from_inbuf_list(tbuf_ptr, tbuf_free); - if (tbuf_read == 0) { - break; - } else { -- TS0710_PRINTK("Read %i bytes.\n", tbuf_read); -+ TS0710_DEBUG("Read %i bytes.\n", tbuf_read); - }; - tbuf_ptr += tbuf_read; - }; -@@ -3192,7 +3197,7 @@ - - // Should be impossible? - //if (count > (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf))) { -- // TS0710_PRINTK -+ // TS0710_DEBUG - // ("MUX receive_worker: !!!!! Exceed buffer boundary !!!!!\n"); - // count = (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf)); - //} -@@ -3264,7 +3269,7 @@ - TS0710_LOGSTR_FRAME(0, start_flag, - (tbuf_ptr - - start_flag)); -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX Error: %s: frame length:%d is bigger than Max total frame size:%d\n", - /*__FUNCTION__, framelen, TS0710MUX_MAX_TOTAL_FRAME_SIZE);*/ - __FUNCTION__, framelen, (TS0710MUX_MAX_TOTAL_FRAME_SIZE + SEQ_FIELD_SIZE)); /*For BP UART problem */ -@@ -3389,7 +3394,7 @@ - *(uih_data_start - + uih_len) = - 0; -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX bp log: %s\n", - uih_data_start); - } -@@ -3415,7 +3420,7 @@ - TS0710_LOGSTR_FRAME(0, start_flag, - framelen); - TS0710_DEBUGHEX(start_flag, framelen); -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX: Lost synchronization!\n"); - search = start_flag + 1; - } -@@ -3476,7 +3481,7 @@ - recv_info2 = recv_info->next; - - if (!(recv_info->total)) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX Error: %s: Should not get here, recv_info->total == 0 \n", - __FUNCTION__); - continue; -@@ -3486,7 +3491,7 @@ - dlci = tty2dlci[tty_idx]; - tty = mux_table[tty_idx]; - if ((!mux_tty[tty_idx]) || (!tty)) { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX: No application waiting for, free recv_info! tty_idx:%d\n", - tty_idx); - mux_recv_info_flags[tty_idx] = 0; -@@ -3560,7 +3565,7 @@ - recv_info->total -= recv_packet->length; - free_mux_recv_packet(recv_packet); - } else { -- TS0710_PRINTK -+ TS0710_DEBUG - ("MUX Error: %s: Should not get here, recv_info->total is:%u \n", - __FUNCTION__, recv_info->total); - } -@@ -3760,7 +3765,7 @@ - int ret; - - if (idx > TS0710MUX_COUNT_MAX_IDX) { -- TS0710_PRINTK("MUX get_count: invalid idx: %d!\n", idx); -+ TS0710_DEBUG("MUX get_count: invalid idx: %d!\n", idx); - return -1; - } - -@@ -3774,11 +3779,11 @@ - static int set_count(__u8 idx, int count) - { - if (idx > TS0710MUX_COUNT_MAX_IDX) { -- TS0710_PRINTK("MUX set_count: invalid idx: %d!\n", idx); -+ TS0710_DEBUG("MUX set_count: invalid idx: %d!\n", idx); - return -1; - } - if (count < 0) { -- TS0710_PRINTK("MUX set_count: invalid count: %d!\n", count); -+ TS0710_DEBUG("MUX set_count: invalid count: %d!\n", count); - return -1; - } - -@@ -3792,11 +3797,11 @@ - static int add_count(__u8 idx, int count) - { - if (idx > TS0710MUX_COUNT_MAX_IDX) { -- TS0710_PRINTK("MUX add_count: invalid idx: %d!\n", idx); -+ TS0710_DEBUG("MUX add_count: invalid idx: %d!\n", idx); - return -1; - } - if (count <= 0) { -- TS0710_PRINTK("MUX add_count: invalid count: %d!\n", count); -+ TS0710_DEBUG("MUX add_count: invalid count: %d!\n", count); - return -1; - } - -Index: linux-2.6.20.7/drivers/char/ts0710_mux_usb.c -=================================================================== ---- linux-2.6.20.7.orig/drivers/char/ts0710_mux_usb.c 2007-04-22 12:26:47.000000000 +0200 -+++ linux-2.6.20.7/drivers/char/ts0710_mux_usb.c 2007-04-22 12:26:47.000000000 +0200 -@@ -72,7 +72,8 @@ - #define IPC_USB_PROBE_NOT_READY 4 - #define DBG_MAX_BUF_SIZE 1024 - #define ICL_EVENT_INTERVAL (HZ) --#undef BVD_DEBUG -+ -+#define BVD_DEBUG - - #define IS_EP_BULK(ep) ((ep).bmAttributes == USB_ENDPOINT_XFER_BULK ? 1 : 0) - #define IS_EP_BULK_IN(ep) (IS_EP_BULK(ep) && ((ep).bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN) diff --git a/packages/linux/linux-ezx-2.6.23/patches/patch-2.6.23.1 b/packages/linux/linux-ezx-2.6.23/patches/patch-2.6.23.1 deleted file mode 100644 index 5027b85ad4..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/patch-2.6.23.1 +++ /dev/null @@ -1,108 +0,0 @@ -diff --git a/Makefile b/Makefile -index 4635a64..c244a02 100644 ---- a/Makefile -+++ b/Makefile -@@ -1,7 +1,7 @@ - VERSION = 2 - PATCHLEVEL = 6 - SUBLEVEL = 23 --EXTRAVERSION = -+EXTRAVERSION = .1 - NAME = Arr Matey! A Hairy Bilge Rat! - - # *DOCUMENTATION* -diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c -index cb7dec9..d9832e2 100644 ---- a/drivers/ata/sata_mv.c -+++ b/drivers/ata/sata_mv.c -@@ -69,10 +69,11 @@ - #include <linux/device.h> - #include <scsi/scsi_host.h> - #include <scsi/scsi_cmnd.h> -+#include <scsi/scsi_device.h> - #include <linux/libata.h> - - #define DRV_NAME "sata_mv" --#define DRV_VERSION "1.0" -+#define DRV_VERSION "1.01" - - enum { - /* BAR's are enumerated in terms of pci_resource_start() terms */ -@@ -420,6 +421,7 @@ static void mv_error_handler(struct ata_port *ap); - static void mv_post_int_cmd(struct ata_queued_cmd *qc); - static void mv_eh_freeze(struct ata_port *ap); - static void mv_eh_thaw(struct ata_port *ap); -+static int mv_slave_config(struct scsi_device *sdev); - static int mv_init_one(struct pci_dev *pdev, const struct pci_device_id *ent); - - static void mv5_phy_errata(struct mv_host_priv *hpriv, void __iomem *mmio, -@@ -457,7 +459,7 @@ static struct scsi_host_template mv5_sht = { - .use_clustering = 1, - .proc_name = DRV_NAME, - .dma_boundary = MV_DMA_BOUNDARY, -- .slave_configure = ata_scsi_slave_config, -+ .slave_configure = mv_slave_config, - .slave_destroy = ata_scsi_slave_destroy, - .bios_param = ata_std_bios_param, - }; -@@ -475,7 +477,7 @@ static struct scsi_host_template mv6_sht = { - .use_clustering = 1, - .proc_name = DRV_NAME, - .dma_boundary = MV_DMA_BOUNDARY, -- .slave_configure = ata_scsi_slave_config, -+ .slave_configure = mv_slave_config, - .slave_destroy = ata_scsi_slave_destroy, - .bios_param = ata_std_bios_param, - }; -@@ -763,6 +765,17 @@ static void mv_irq_clear(struct ata_port *ap) - { - } - -+static int mv_slave_config(struct scsi_device *sdev) -+{ -+ int rc = ata_scsi_slave_config(sdev); -+ if (rc) -+ return rc; -+ -+ blk_queue_max_phys_segments(sdev->request_queue, MV_MAX_SG_CT / 2); -+ -+ return 0; /* scsi layer doesn't check return value, sigh */ -+} -+ - static void mv_set_edma_ptrs(void __iomem *port_mmio, - struct mv_host_priv *hpriv, - struct mv_port_priv *pp) -@@ -1130,10 +1143,9 @@ static void mv_port_stop(struct ata_port *ap) - * LOCKING: - * Inherited from caller. - */ --static unsigned int mv_fill_sg(struct ata_queued_cmd *qc) -+static void mv_fill_sg(struct ata_queued_cmd *qc) - { - struct mv_port_priv *pp = qc->ap->private_data; -- unsigned int n_sg = 0; - struct scatterlist *sg; - struct mv_sg *mv_sg; - -@@ -1151,7 +1163,7 @@ static unsigned int mv_fill_sg(struct ata_queued_cmd *qc) - - mv_sg->addr = cpu_to_le32(addr & 0xffffffff); - mv_sg->addr_hi = cpu_to_le32((addr >> 16) >> 16); -- mv_sg->flags_size = cpu_to_le32(len); -+ mv_sg->flags_size = cpu_to_le32(len & 0xffff); - - sg_len -= len; - addr += len; -@@ -1160,12 +1172,9 @@ static unsigned int mv_fill_sg(struct ata_queued_cmd *qc) - mv_sg->flags_size |= cpu_to_le32(EPRD_FLAG_END_OF_TBL); - - mv_sg++; -- n_sg++; - } - - } -- -- return n_sg; - } - - static inline void mv_crqb_pack_cmd(__le16 *cmdw, u8 data, u8 addr, unsigned last) diff --git a/packages/linux/linux-ezx-2.6.23/patches/pcap-ts.patch b/packages/linux/linux-ezx-2.6.23/patches/pcap-ts.patch deleted file mode 100644 index 5891ccb837..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/pcap-ts.patch +++ /dev/null @@ -1,363 +0,0 @@ -Index: linux-2.6.23/drivers/input/touchscreen/Kconfig -=================================================================== ---- linux-2.6.23.orig/drivers/input/touchscreen/Kconfig 2007-10-10 09:38:44.000000000 +0200 -+++ linux-2.6.23/drivers/input/touchscreen/Kconfig 2007-10-22 22:25:02.000000000 +0200 -@@ -238,4 +238,13 @@ - bool "IRTOUCHSYSTEMS/UNITOP device support" if EMBEDDED - depends on TOUCHSCREEN_USB_COMPOSITE - -+config TOUCHSCREEN_PCAP -+ tristate "Motorola PCAP touchscreen" -+ depends on EZX_PCAP -+ help -+ Say Y here if you have a Motorola EZX telephone and -+ want to support the built-in touchscreen. -+ -+ If unsure, say N. -+ - endif -Index: linux-2.6.23/drivers/input/touchscreen/pcap_ts.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/drivers/input/touchscreen/pcap_ts.c 2007-10-22 22:25:02.000000000 +0200 -@@ -0,0 +1,331 @@ -+/* -+ * pcap_ts.c - Touchscreen driver for Motorola PCAP2 based touchscreen as found -+ * in the EZX phone platform. -+ * -+ * Copyright (C) 2006 Harald Welte <laforge@openezx.org> -+ * Copyright (C) 2007 Daniel Ribeiro <drwyrm@gmail.com> -+ * -+ * Based on information found in the original Motorola 2.4.x ezx-ts.c driver. -+ * -+ * 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. -+ * -+ * TODO: -+ * split this in a hardirq handler and a tasklet/bh -+ */ -+ -+#include <linux/module.h> -+#include <linux/init.h> -+#include <linux/fs.h> -+#include <linux/string.h> -+#include <linux/pm.h> -+#include <linux/timer.h> -+#include <linux/interrupt.h> -+#include <linux/platform_device.h> -+#include <linux/input.h> -+ -+#include <asm/arch/hardware.h> -+#include <asm/arch/pxa-regs.h> -+#include <asm/arch/ezx-pcap.h> -+ -+#if 0 -+#define DEBUGP(x, args ...) printk(x, ## args) -+#else -+#define DEBUGP(x, args ...) -+#endif -+ -+#define POSITION_X_MEASUREMENT 0 -+#define POSITION_XY_MEASUREMENT 1 -+#define PRESSURE_MEASUREMENT 2 -+#define PLATE_X_MEASUREMENT 3 -+#define PLATE_Y_MEASUREMENT 4 -+#define STANDBY_MODE 5 -+#define NONTS_MODE 6 -+ -+struct pcap_ts { -+ int irq_xy; -+ int irq_touch; -+ struct input_dev *input; -+ struct timer_list timer; -+ u_int16_t x, y; -+ u_int16_t pressure; -+ u_int8_t read_state; -+}; -+ -+#define X_AXIS_MIN 0 -+#define X_AXIS_MAX 1023 -+ -+#define Y_AXIS_MAX X_AXIS_MAX -+#define Y_AXIS_MIN X_AXIS_MIN -+ -+#define PRESSURE_MAX X_AXIS_MAX -+#define PRESSURE_MIN X_AXIS_MIN -+ -+/* if we try to read faster, pressure reading becomes unreliable */ -+#define SAMPLE_INTERVAL (HZ/50) -+ -+ -+static void pcap_ts_mode(struct pcap_ts *pcap_ts, u_int32_t mode) -+{ -+ u_int32_t tmp; -+ -+ pcap_ts->read_state = mode; -+ ezx_pcap_read(PCAP_REG_ADC1, &tmp); -+ tmp &= ~PCAP_ADC1_TS_M_MASK; -+ tmp |= ((mode << PCAP_ADC1_TS_M_SHIFT) & PCAP_ADC1_TS_M_MASK); -+ ezx_pcap_write(PCAP_REG_ADC1, tmp); -+} -+ -+/* issue a XY read command to the ADC of PCAP2. Well get an ADCDONE interrupt -+ * once the result of the conversion is available */ -+static void pcap_ts_start_xy_read(struct pcap_ts *pcap_ts) -+{ -+ u_int32_t tmp; -+ -+ ezx_pcap_read(PCAP_REG_ADC1, &tmp); -+ tmp &= ~(PCAP_BIT_ADC1_RAND | PCAP_ADC1_ADA1_MASK | -+ PCAP_ADC1_ADA2_MASK); -+ tmp |= (PCAP_BIT_ADC1_ADEN | PCAP_BIT_ADC1_AD_SEL1 | -+ PCAP_BIT_ADC1_AD_SEL2 | (5 << PCAP_ADC1_ADA1_SHIFT) | -+ (3 << PCAP_ADC1_ADA2_SHIFT)); -+ ezx_pcap_write(PCAP_REG_ADC1, tmp); -+ ezx_pcap_bit_set(PCAP_BIT_ADC2_ASC, 1); -+} -+ -+/* read the XY result from the ADC of PCAP2 */ -+static void pcap_ts_get_xy_value(struct pcap_ts *pcap_ts) -+{ -+ u_int32_t tmp; -+ -+ ezx_pcap_read(PCAP_REG_ADC2, &tmp); -+ -+ if (pcap_ts->read_state == POSITION_XY_MEASUREMENT) { -+ pcap_ts->x = (tmp & PCAP_ADC2_ADD1_MASK) >> -+ PCAP_ADC2_ADD1_SHIFT; -+ pcap_ts->y = (tmp & PCAP_ADC2_ADD2_MASK) >> -+ PCAP_ADC2_ADD2_SHIFT; -+ } else { -+ pcap_ts->pressure = (tmp & PCAP_ADC2_ADD2_MASK) >> -+ PCAP_ADC2_ADD2_SHIFT; -+ } -+} -+ -+/* PCAP2 interrupts us when ADC conversion result is available */ -+static irqreturn_t pcap_ts_irq_xy(int irq, void *dev_id) -+{ -+ struct pcap_ts *pcap_ts = dev_id; -+ -+ pcap_ts_get_xy_value(pcap_ts); -+ DEBUGP(KERN_DEBUG "%s X=%4d, Y=%4d Z=%4d ", -+ pcap_ts->read_state == POSITION_XY_MEASUREMENT ? "COORD" : -+ "PRESS", pcap_ts->x, pcap_ts->y, pcap_ts->pressure); -+ switch (pcap_ts->read_state) { -+ case PRESSURE_MEASUREMENT: -+ if (pcap_ts->pressure >= PRESSURE_MAX || -+ pcap_ts->pressure <= PRESSURE_MIN ) { -+ /* pen has been released (or cant read pressure - WM)*/ -+ DEBUGP("UP\n"); -+ /* do nothing */ -+ } else { -+ /* pen has been touched down */ -+ DEBUGP("DOWN\n"); -+ input_report_key(pcap_ts->input, BTN_TOUCH, 1); -+ input_report_abs(pcap_ts->input, ABS_PRESSURE, pcap_ts->pressure); -+ } -+ /* switch state machine into coordinate read mode */ -+ pcap_ts_mode(pcap_ts, POSITION_XY_MEASUREMENT); -+ pcap_ts_start_xy_read(pcap_ts); -+ break; -+ case POSITION_XY_MEASUREMENT: -+ if (pcap_ts->x <= X_AXIS_MIN || pcap_ts->x >= X_AXIS_MAX || -+ pcap_ts->y <= Y_AXIS_MIN || pcap_ts->y >= Y_AXIS_MAX) { -+ /* pen has been released */ -+ DEBUGP("UP END\n"); -+ -+ input_report_key(pcap_ts->input, BTN_TOUCH, 0); -+ input_report_abs(pcap_ts->input, ABS_PRESSURE, 0); -+ -+ /* no need for timer, we'll get interrupted with -+ * next touch down event */ -+ del_timer(&pcap_ts->timer); -+ -+ /* ask PCAP2 to interrupt us if touch event happens -+ * again */ -+ pcap_ts_mode(pcap_ts, STANDBY_MODE); -+ enable_irq(pcap_ts->irq_touch); -+ } else { -+ DEBUGP("DOWN\n"); -+ input_report_abs(pcap_ts->input, ABS_X, pcap_ts->x); -+ input_report_abs(pcap_ts->input, ABS_Y, pcap_ts->y); -+ -+ /* switch back to pressure read mode */ -+ pcap_ts_mode(pcap_ts, PRESSURE_MEASUREMENT); -+ mod_timer(&pcap_ts->timer, jiffies + SAMPLE_INTERVAL); -+ } -+ input_sync(pcap_ts->input); -+ break; -+ default: -+ DEBUGP("ERROR\n"); -+ break; -+ } -+ return IRQ_HANDLED; -+} -+ -+/* PCAP2 interrupts us if the pen touches down (interrupts also on pen up - WM)*/ -+static irqreturn_t pcap_ts_irq_touch(int irq, void *dev_id) -+{ -+ struct pcap_ts *pcap_ts = dev_id; -+ /* mask Touchscreen interrupt bit, prevents further touch events -+ * from being reported to us until we're finished with reading -+ * both pressure and x/y from ADC */ -+ disable_irq(pcap_ts->irq_touch); -+ -+ DEBUGP("touched!!\n"); -+ pcap_ts_mode(pcap_ts, PRESSURE_MEASUREMENT); -+ pcap_ts_start_xy_read(pcap_ts); -+ return IRQ_HANDLED; -+} -+ -+static void pcap_ts_timer_fn(unsigned long data) -+{ -+ struct pcap_ts *pcap_ts = (struct pcap_ts *) data; -+ -+ pcap_ts_start_xy_read(pcap_ts); -+} -+ -+static int __init ezxts_probe(struct platform_device *pdev) -+{ -+ struct pcap_ts *pcap_ts; -+ struct input_dev *input_dev; -+ int err = -ENOMEM; -+ -+ pcap_ts = kzalloc(sizeof(*pcap_ts), GFP_KERNEL); -+ input_dev = input_allocate_device(); -+ if (!pcap_ts || !input_dev) -+ goto fail; -+ -+ pcap_ts->irq_xy = platform_get_irq(pdev, 0); -+ if (pcap_ts->irq_xy < 0) { -+ err = pcap_ts->irq_xy; -+ goto fail; -+ } -+ -+ pcap_ts->irq_touch = platform_get_irq(pdev, 1); -+ if (pcap_ts->irq_touch < 0) { -+ err = pcap_ts->irq_touch; -+ goto fail; -+ } -+ -+ ezx_pcap_bit_set(PCAP_BIT_ADC1_TS_REFENB, 0); -+ pcap_ts_mode(pcap_ts, STANDBY_MODE); -+ -+ err = request_irq(pcap_ts->irq_xy, pcap_ts_irq_xy, IRQF_DISABLED, -+ "pcap-ts X/Y", pcap_ts); -+ if (err < 0) { -+ printk(KERN_ERR "pcap_ts: can't grab xy irq %d: %d\n", -+ pcap_ts->irq_xy, err); -+ goto fail; -+ } -+ -+ err = request_irq(pcap_ts->irq_touch, pcap_ts_irq_touch, IRQF_DISABLED, -+ "pcap-ts touch", pcap_ts); -+ if (err < 0) { -+ printk(KERN_ERR "pcap_ts: can't grab touch irq %d: %d\n", -+ pcap_ts->irq_touch, err); -+ goto fail_xy; -+ } -+ -+ pcap_ts->input = input_dev; -+ init_timer(&pcap_ts->timer); -+ pcap_ts->timer.data = (unsigned long) pcap_ts; -+ pcap_ts->timer.function = &pcap_ts_timer_fn; -+ -+ platform_set_drvdata(pdev, pcap_ts); -+ -+ input_dev->name = "pcap-touchscreen"; -+ input_dev->phys = "ezxts/input0"; -+ input_dev->id.bustype = BUS_HOST; -+ input_dev->id.vendor = 0x0001; -+ input_dev->id.product = 0x0002; -+ input_dev->id.version = 0x0100; -+ input_dev->cdev.dev = &pdev->dev; -+ input_dev->private = pcap_ts; -+ -+ input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); -+ input_dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH); -+ input_set_abs_params(input_dev, ABS_X, X_AXIS_MIN, X_AXIS_MAX, 0, 0); -+ input_set_abs_params(input_dev, ABS_Y, Y_AXIS_MIN, Y_AXIS_MAX, 0, 0); -+ input_set_abs_params(input_dev, ABS_PRESSURE, PRESSURE_MIN, -+ PRESSURE_MAX, 0, 0); -+ -+ input_register_device(pcap_ts->input); -+ -+ return 0; -+ -+fail_xy: -+ free_irq(pcap_ts->irq_xy, pcap_ts); -+fail: -+ input_free_device(input_dev); -+ kfree(pcap_ts); -+ -+ return err; -+} -+ -+static int ezxts_remove(struct platform_device *pdev) -+{ -+ struct pcap_ts *pcap_ts = platform_get_drvdata(pdev); -+ -+ del_timer_sync(&pcap_ts->timer); -+ -+ free_irq(pcap_ts->irq_touch, pcap_ts); -+ free_irq(pcap_ts->irq_xy, pcap_ts); -+ -+ input_unregister_device(pcap_ts->input); -+ kfree(pcap_ts); -+ -+ return 0; -+} -+ -+static int ezxts_suspend(struct platform_device *dev, pm_message_t state) -+{ -+ ezx_pcap_bit_set(PCAP_BIT_ADC1_TS_REF_LOWPWR, 1); -+ return 0; -+} -+ -+static int ezxts_resume(struct platform_device *dev) -+{ -+ ezx_pcap_bit_set(PCAP_BIT_ADC1_TS_REF_LOWPWR, 0); -+ /* just in case we suspend with TSI masked. */ -+// ezx_pcap_bit_set(PCAP_BIT_MSR_TSM, 0); -+ return 0; -+} -+ -+ -+static struct platform_driver ezxts_driver = { -+ .probe = ezxts_probe, -+ .remove = ezxts_remove, -+ .suspend = ezxts_suspend, -+ .resume = ezxts_resume, -+ .driver = { -+ .name = "pcap-ts", -+ .owner = THIS_MODULE, -+ }, -+}; -+ -+static int __init ezxts_init(void) -+{ -+ return platform_driver_register(&ezxts_driver); -+} -+ -+static void __exit ezxts_exit(void) -+{ -+ platform_driver_unregister(&ezxts_driver); -+} -+ -+module_init(ezxts_init); -+module_exit(ezxts_exit); -+ -+MODULE_DESCRIPTION("Motorola PCAP2 touchscreen driver"); -+MODULE_AUTHOR("Harald Welte <laforge@openezx.org>"); -+MODULE_LICENSE("GPL"); -Index: linux-2.6.23/drivers/input/touchscreen/Makefile -=================================================================== ---- linux-2.6.23.orig/drivers/input/touchscreen/Makefile 2007-10-10 09:38:44.000000000 +0200 -+++ linux-2.6.23/drivers/input/touchscreen/Makefile 2007-10-22 22:25:02.000000000 +0200 -@@ -18,3 +18,4 @@ - obj-$(CONFIG_TOUCHSCREEN_TOUCHRIGHT) += touchright.o - obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN) += touchwin.o - obj-$(CONFIG_TOUCHSCREEN_UCB1400) += ucb1400_ts.o -+obj-$(CONFIG_TOUCHSCREEN_PCAP) += pcap_ts.o diff --git a/packages/linux/linux-ezx-2.6.23/patches/pxa-kbd.patch b/packages/linux/linux-ezx-2.6.23/patches/pxa-kbd.patch deleted file mode 100644 index a824b87a19..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/pxa-kbd.patch +++ /dev/null @@ -1,545 +0,0 @@ -Index: linux-2.6.23/arch/arm/mach-pxa/generic.c -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/generic.c 2007-10-23 23:04:39.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/generic.c 2007-10-23 23:04:42.000000000 +0200 -@@ -42,6 +42,7 @@ - #include <asm/arch/mmc.h> - #include <asm/arch/irda.h> - #include <asm/arch/i2c.h> -+#include <asm/arch/kbd.h> - - #include "devices.h" - #include "generic.h" -@@ -413,3 +414,28 @@ - .name = "sa1100-rtc", - .id = -1, - }; -+ -+static struct resource pxa_kbd_resources[] = { -+ { -+ .start = IRQ_KEYPAD, -+ .end = IRQ_KEYPAD, -+ .flags = IORESOURCE_IRQ, -+ }, { -+ .start = 0x41500000, -+ .end = 0x4150004c, -+ .flags = IORESOURCE_MEM, -+ }, -+}; -+ -+struct platform_device pxa_device_kbd = { -+ .name = "pxa-keyboard", -+ .id = -1, -+ .resource = pxa_kbd_resources, -+ .num_resources = ARRAY_SIZE(pxa_kbd_resources), -+}; -+ -+void __init pxa_set_kbd_info(struct pxakbd_platform_data *info) -+{ -+ pxa_device_kbd.dev.platform_data = info; -+} -+ -Index: linux-2.6.23/drivers/input/keyboard/Kconfig -=================================================================== ---- linux-2.6.23.orig/drivers/input/keyboard/Kconfig 2007-10-23 23:04:39.000000000 +0200 -+++ linux-2.6.23/drivers/input/keyboard/Kconfig 2007-10-23 23:04:42.000000000 +0200 -@@ -253,4 +253,11 @@ - To compile this driver as a module, choose M here: the - module will be called gpio-keys. - -+config KEYBOARD_PXA -+ tristate "Intel PXA keyboard support" -+ depends on ARCH_PXA -+ help -+ This add support for a driver of the Intel PXA2xx keyboard -+ controller. -+ - endif -Index: linux-2.6.23/drivers/input/keyboard/Makefile -=================================================================== ---- linux-2.6.23.orig/drivers/input/keyboard/Makefile 2007-10-23 23:04:39.000000000 +0200 -+++ linux-2.6.23/drivers/input/keyboard/Makefile 2007-10-23 23:04:42.000000000 +0200 -@@ -21,4 +21,4 @@ - obj-$(CONFIG_KEYBOARD_PXA27x) += pxa27x_keyboard.o - obj-$(CONFIG_KEYBOARD_AAED2000) += aaed2000_kbd.o - obj-$(CONFIG_KEYBOARD_GPIO) += gpio_keys.o -- -+obj-$(CONFIG_KEYBOARD_PXA) += pxakbd.o -Index: linux-2.6.23/include/asm-arm/arch-pxa/kbd.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/include/asm-arm/arch-pxa/kbd.h 2007-10-23 23:04:42.000000000 +0200 -@@ -0,0 +1,28 @@ -+/* -+ * kbd_pxa.h -+ * -+ * Copyright (C) 2006 Harald Welte <laforge@openezx.org> -+ * -+ * 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. -+ * -+ */ -+#ifndef _KBD_PXA_H_ -+#define _KBD_PXA_H_ -+ -+struct pxakbd_platform_data { -+ int (*init)(void); /* init gpio, etc. */ -+ unsigned int scan_interval; -+ struct { -+ unsigned int rows; -+ unsigned int cols; -+ unsigned char *keycode; -+ } matrix; -+ struct { -+ unsigned int num; -+ unsigned char *keycode; -+ } direct; -+}; -+ -+#endif -Index: linux-2.6.23/drivers/input/keyboard/pxakbd.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/drivers/input/keyboard/pxakbd.c 2007-10-23 23:04:42.000000000 +0200 -@@ -0,0 +1,403 @@ -+/* -+ * Driver for Motorola EZX phone "keyboard" -+ * -+ * (C) 2006 by Harald Welte <laforge@openezx.org> -+ * -+ * May, 2007 - Daniel Ribeiro <drwyrm@gmail.com> -+ * pm callbacks -+ */ -+ -+#include <linux/kernel.h> -+#include <linux/module.h> -+#include <linux/interrupt.h> -+#include <linux/input.h> -+#include <linux/spinlock.h> -+#include <linux/platform_device.h> -+ -+#include <asm/hardware.h> -+#include <asm/io.h> -+#include <asm/irq.h> -+ -+#include <asm/arch/kbd.h> -+#include <asm/arch/irqs.h> -+#include <asm/arch/pxa-regs.h> -+ -+#if 0 -+#define DEBUGP(x, args ...) printk(x, ## args) -+#else -+#define DEBUGP(x, args ...) -+#endif -+ -+/* per-keyboard private data structure */ -+struct pxakbd { -+ struct input_dev *input; -+ struct timer_list timer; -+ spinlock_t lock; -+ -+ struct resource *res; -+ unsigned int irq; -+ u_int32_t kpc; -+ u_int32_t kpkdi; -+ -+ struct pxakbd_platform_data *pd; -+}; -+ -+static int pxakbd_scan_direct(struct pxakbd *pxakbd) -+{ -+ u_int32_t kpdk; -+ unsigned int i; -+ int num_pressed = 0; -+ -+ kpdk = KPDK & 0x000000ff; -+ for (i = 0; i < pxakbd->pd->direct.num; i++) { -+ int pressed = 0; -+ -+ if (kpdk & (1 << i)) { -+ pressed = 1; -+ num_pressed++; -+ DEBUGP("pxakbd: pressed: direct %u\n", i); -+ } -+ if (pxakbd->pd->direct.keycode[i] != KEY_RESERVED) { -+ DEBUGP( "pxakbd: sending to input layer: keycode = %d, pressed = %d\n", pxakbd->pd->direct.keycode[i], pressed ); -+ input_report_key(pxakbd->input, pxakbd->pd->direct.keycode[i], -+ pressed); -+ } -+ } -+ return num_pressed; -+} -+ -+/* read the full 8x8 matrix from the PXA27x keypad controller */ -+static inline void __read_matrix(u_int8_t *matrix) -+{ -+ u_int32_t tmp; -+ u_int8_t row; -+ -+ /* Fill the matrix by rows */ -+ -+ tmp = KPASMKP0; -+ for (row=0; row<8; row++) { -+ /* zero the matrix on the first time, then keep ORing */ -+ matrix[row] = ((tmp >> row) & 1); -+ matrix[row] |= ((tmp >> (16 + row)) & 1) << 1; -+ } -+ -+ tmp = KPASMKP1; -+ for (row=0; row<8; row++) { -+ matrix[row] |= ((tmp >> row) & 1) << 2; -+ matrix[row] |= ((tmp >> (16 + row)) & 1) << 3; -+ } -+ -+ tmp = KPASMKP2; -+ for (row=0; row<8; row++) { -+ matrix[row] |= ((tmp >> row) & 1) << 4; -+ matrix[row] |= ((tmp >> (16 + row)) & 1) << 5; -+ } -+ -+ tmp = KPASMKP3; -+ for (row=0; row<8; row++) { -+ matrix[row] |= ((tmp >> row) & 1) << 6; -+ matrix[row] |= ((tmp >> (16 + row)) & 1) << 7; -+ } -+} -+ -+/* compare current matrix with last, generate 'diff' events */ -+static int __cmp_matrix_gen_events(struct pxakbd *pxakbd, u_int8_t *matrix) -+{ -+ unsigned int i; -+ int num_pressed = 0; -+ -+ /* iterate over the matrix */ -+ for (i = 0; i < pxakbd->pd->matrix.rows; i++) { -+ unsigned int j; -+ for (j = 0; j < pxakbd->pd->matrix.cols; j++) { -+ u_int32_t scancode = -+ (i * pxakbd->pd->matrix.cols) + j; -+ int pressed = matrix[i] & (1 << j); -+ -+ if (pressed) { -+ DEBUGP("pxakbd: pressed: %u/%u\n", i, j); -+ num_pressed++; -+ } -+ -+ input_report_key(pxakbd->input, -+ pxakbd->pd->matrix.keycode[scancode], pressed); -+ } -+ } -+ -+ return num_pressed; -+} -+ -+/* scan the matrix keypad */ -+static int pxakbd_scan_matrix(struct pxakbd *pxakbd) -+{ -+ int num_pressed; -+ u_int32_t kpas; -+ u_int8_t matrix[8]; -+ -+ kpas = KPAS; -+ -+ if ((kpas & KPAS_MUKP) == KPAS_MUKP_NONE) { -+ /* no keys pressed */ -+ memset(matrix, 0, sizeof(matrix)); -+ } else if ((kpas & KPAS_MUKP) == KPAS_MUKP_ONE) { -+ /* one key pressed */ -+ u_int8_t row = (kpas & KPAS_RP) >> 4; -+ u_int8_t col = kpas & KPAS_CP; -+ -+ if (row == 0x0f || col == 0x0f) { -+ printk(KERN_WARNING "pxakbd: col or row invalid!\n"); -+ return -1; -+ } -+ -+ /* clear the matrix and set the single pressed key */ -+ memset(matrix, 0, sizeof(matrix)); -+ matrix[row] |= (1 << col); -+ } else { -+ /* multiple keys pressed */ -+ __read_matrix(matrix); -+ } -+ -+ num_pressed = __cmp_matrix_gen_events(pxakbd, matrix); -+ -+ return num_pressed; -+} -+ -+static void pxakbd_timer_callback(unsigned long data) -+{ -+ unsigned long flags; -+ struct pxakbd *pxakbd = (struct pxakbd *) data; -+ unsigned int num_pressed; -+ -+ spin_lock_irqsave(&pxakbd->lock, flags); -+ -+ num_pressed = pxakbd_scan_direct(pxakbd); -+ num_pressed += pxakbd_scan_matrix(pxakbd); -+ -+ spin_unlock_irqrestore(&pxakbd->lock, flags); -+ -+ /* propagate events up the input stack */ -+ input_sync(pxakbd->input); -+} -+ -+static irqreturn_t pxakbd_interrupt(int irq, void *dummy) -+{ -+ struct pxakbd *pxakbd = dummy; -+ u_int32_t kpc; -+ int handled = 0; -+ int num_pressed = 0; -+ -+ /* read and clear interrupt */ -+ kpc = KPC; -+ -+ if (kpc & KPC_DI) { -+ num_pressed += pxakbd_scan_direct(pxakbd); -+ handled = 1; -+ } -+ -+ if (kpc & KPC_MI) { -+ while (KPAS & KPAS_SO) { -+ /* wait for scan to complete beforereading scan regs */ -+ cpu_relax(); -+ } -+ num_pressed += pxakbd_scan_matrix(pxakbd); -+ handled = 1; -+ } -+ -+ /* If any keys are currently pressed, we need to start the timer to detect -+ * key release. */ -+ if (num_pressed) -+ mod_timer(&pxakbd->timer, jiffies + pxakbd->pd->scan_interval); -+ -+ /* propagate events up the input stack */ -+ input_sync(pxakbd->input); -+ -+ return IRQ_RETVAL(handled); -+} -+ -+static int __init pxakbd_probe(struct platform_device *pdev) -+{ -+ struct pxakbd *pxakbd; -+ struct input_dev *input_dev; -+ struct resource *r; -+ int i; -+ int ret = -ENOMEM; -+ -+ int rows, cols, n_direct; -+ -+ if (!pdev->dev.platform_data) { -+ printk(KERN_ERR "pxakbd: platform data not set\n"); -+ ret = -ENODEV; -+ goto out; -+ } -+ -+ pxakbd = kzalloc(sizeof(*pxakbd), GFP_KERNEL); -+ if (!pxakbd) -+ goto out; -+ -+ input_dev = input_allocate_device(); -+ if (!input_dev) -+ goto out_pxa; -+ -+ spin_lock_init(&pxakbd->lock); -+ pxakbd->irq = platform_get_irq(pdev, 0); -+ r = platform_get_resource(pdev, IORESOURCE_MEM, 0); -+ if (!r || pxakbd->irq == NO_IRQ) { -+ printk(KERN_ERR "pxakbd: invalid resources\n"); -+ ret = -EBUSY; -+ goto out_idev; -+ } -+ -+ pxakbd->input = input_dev; -+ init_timer(&pxakbd->timer); -+ pxakbd->timer.function = pxakbd_timer_callback; -+ pxakbd->timer.data = (unsigned long) pxakbd; -+ pxakbd->pd = pdev->dev.platform_data; -+ pxakbd->res = r; -+ -+ rows = pxakbd->pd->matrix.rows; -+ cols = pxakbd->pd->matrix.cols; -+ n_direct = pxakbd->pd->direct.num; -+ -+ input_dev->name = "pxa-keyboard"; -+ input_dev->phys = "pxakbd/input0"; -+ input_dev->id.bustype = BUS_HOST; -+ input_dev->id.vendor = 0x0001; -+ input_dev->id.product = 0x0001; -+ input_dev->id.version = 0x0001; -+ input_dev->cdev.dev = &pdev->dev; -+ input_dev->private = pxakbd; -+ -+ input_dev->evbit[0] = BIT(EV_KEY)|BIT(EV_REP); -+ -+ input_dev->keycodesize = sizeof(unsigned char); -+ input_dev->keycodemax = (rows*cols)+n_direct; -+ input_dev->keycode = kmalloc(input_dev->keycodemax*input_dev->keycodesize, -+ GFP_KERNEL); -+ if (!input_dev->keycode){ -+ ret = -ENOMEM; -+ goto out_idev; -+ } -+ -+ memcpy(input_dev->keycode, pxakbd->pd->matrix.keycode, rows*cols); -+ -+ memcpy(input_dev->keycode+(rows*cols), -+ pxakbd->pd->direct.keycode, -+ n_direct); -+ -+ for (i = 0; i < rows*cols; i++) -+ set_bit(pxakbd->pd->matrix.keycode[i], input_dev->keybit); -+ -+ for (i = 0; i < n_direct; i++) -+ set_bit(pxakbd->pd->direct.keycode[i], input_dev->keybit); -+ -+ clear_bit(0, input_dev->keybit); -+ -+ if (request_irq(pxakbd->irq, pxakbd_interrupt, 0, "pxakbd", pxakbd)) { -+ printk(KERN_ERR "pxakbd: can't request irq %d\n", pxakbd->irq); -+ ret = -EBUSY; -+ goto out_idev; -+ } -+ -+ r = request_mem_region(r->start, 0x4c, "pxakbd"); -+ if (!r) { -+ printk(KERN_ERR "pxakbd: can't request memregion\n"); -+ ret = -EBUSY; -+ goto out_irq; -+ } -+ -+ /* set up gpio */ -+ pxakbd->pd->init(); -+ -+ /* set keypad control register */ -+ KPC = (KPC_ASACT | /* automatic scan on activity */ -+ KPC_ME | KPC_DE | /* matrix and direct keypad enabled */ -+ ((pxakbd->pd->matrix.cols-1)<<23) | /* columns */ -+ ((pxakbd->pd->matrix.rows-1)<<26) | /* rows */ -+ ((pxakbd->pd->direct.num-1)<<6) | /* direct keys */ -+ KPC_MS_ALL); /* scan all columns */ -+ -+ pxa_set_cken(CKEN_KEYPAD, 1); -+ -+ KPC |= (KPC_DIE | KPC_MIE); /* enable matrix and direct keyboard */ -+ -+ KPKDI = 0x40; /* matrix key debounce interval: 0x40 */ -+ -+ platform_set_drvdata(pdev, pxakbd); -+ -+ return input_register_device(pxakbd->input); -+ -+out_drvdata: -+ platform_set_drvdata(pdev, NULL); -+out_mem: -+ release_resource(r); -+out_irq: -+ free_irq(pxakbd->irq, pxakbd); -+out_idev: -+ kfree(input_dev->keycode); -+ input_free_device(input_dev); -+out_pxa: -+ kfree(pxakbd); -+out: -+ return ret; -+} -+ -+static int pxakbd_remove(struct platform_device *pdev) -+{ -+ struct pxakbd *pxakbd = platform_get_drvdata(pdev); -+ -+ kfree(pxakbd->input->keycode); -+ input_unregister_device(pxakbd->input); -+ platform_set_drvdata(pdev, NULL); -+ release_resource(pxakbd->res); -+ free_irq(pxakbd->irq, pxakbd); -+ kfree(pxakbd); -+ -+ return 0; -+} -+ -+static int pxakbd_suspend(struct platform_device *pdev, pm_message_t state) -+{ -+ struct pxakbd *pxakbd = platform_get_drvdata(pdev); -+ -+ pxakbd->kpc = KPC; -+ pxakbd->kpkdi = KPKDI; -+ -+ return 0; -+} -+ -+static int pxakbd_resume(struct platform_device *pdev) -+{ -+ struct pxakbd *pxakbd = platform_get_drvdata(pdev); -+ -+ KPC = pxakbd->kpc; -+ KPKDI = pxakbd->kpkdi; -+ -+ return 0; -+} -+ -+static struct platform_driver pxakbd_driver = { -+ .probe = &pxakbd_probe, -+ .remove = &pxakbd_remove, -+ .suspend = &pxakbd_suspend, -+ .resume = &pxakbd_resume, -+ .driver = { -+ .name = "pxa-keyboard", -+ }, -+}; -+ -+static int __devinit pxakbd_init(void) -+{ -+ return platform_driver_register(&pxakbd_driver); -+} -+ -+static void __exit pxakbd_exit(void) -+{ -+ platform_driver_unregister(&pxakbd_driver); -+} -+ -+module_init(pxakbd_init); -+module_exit(pxakbd_exit); -+ -+MODULE_AUTHOR("Harald Welte <laforge@openezx.org>"); -+MODULE_DESCRIPTION("Driver for Intel PXA27x keypad controller"); -+MODULE_LICENSE("GPL"); -Index: linux-2.6.23/include/asm-arm/arch-pxa/pxa-regs.h -=================================================================== ---- linux-2.6.23.orig/include/asm-arm/arch-pxa/pxa-regs.h 2007-10-23 23:04:39.000000000 +0200 -+++ linux-2.6.23/include/asm-arm/arch-pxa/pxa-regs.h 2007-10-23 23:04:42.000000000 +0200 -@@ -2256,6 +2256,11 @@ - #define KPMK_MKP (0x1 << 31) - #define KPAS_SO (0x1 << 31) - #define KPASMKPx_SO (0x1 << 31) -+#define KPAS_RP (0x000000f0) -+#define KPAS_CP (0x0000000f) -+#define KPAS_MUKP (0x7c000000) -+#define KPAS_MUKP_ONE (0x04000000) -+#define KPAS_MUKP_NONE (0x00000000) - - /* - * UHC: USB Host Controller (OHCI-like) register definitions -Index: linux-2.6.23/arch/arm/mach-pxa/pxa27x.c -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/pxa27x.c 2007-10-23 23:04:39.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/pxa27x.c 2007-10-23 23:04:42.000000000 +0200 -@@ -349,6 +349,7 @@ - &pxa_device_rtc, - &pxa27x_device_i2c_power, - &pxa27x_device_ohci, -+ &pxa_device_kbd, - }; - - void __init pxa27x_init_irq(void) -Index: linux-2.6.23/arch/arm/mach-pxa/devices.h -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/devices.h 2007-10-23 23:04:39.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/devices.h 2007-10-23 23:04:42.000000000 +0200 -@@ -9,3 +9,4 @@ - extern struct platform_device pxa_device_i2s; - extern struct platform_device pxa_device_ficp; - extern struct platform_device pxa_device_rtc; -+extern struct platform_device pxa_device_kbd; diff --git a/packages/linux/linux-ezx-2.6.23/patches/pxa27x-udc-fix-a1200.patch b/packages/linux/linux-ezx-2.6.23/patches/pxa27x-udc-fix-a1200.patch deleted file mode 100644 index 7ea9f18d0a..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/pxa27x-udc-fix-a1200.patch +++ /dev/null @@ -1,45 +0,0 @@ -This hack hardcodes pxa27x-udc to ether_gadget. This is just a temp workaround. -Index: linux-2.6.23/drivers/usb/gadget/ether.c -=================================================================== ---- linux-2.6.23.orig/drivers/usb/gadget/ether.c 2007-10-23 12:58:40.000000000 +0200 -+++ linux-2.6.23/drivers/usb/gadget/ether.c 2007-10-23 12:58:46.000000000 +0200 -@@ -2709,10 +2709,16 @@ - MODULE_LICENSE ("GPL"); - - --static int __init init (void) -+// Alex add FIXME -+int usb_ether_init (void) - { - return usb_gadget_register_driver (ð_driver); - } -+ -+static int __init init (void) -+{ -+// return usb_gadget_register_driver (ð_driver); -+} - module_init (init); - - static void __exit cleanup (void) -Index: linux-2.6.23/drivers/usb/gadget/pxa27x_udc.c -=================================================================== ---- linux-2.6.23.orig/drivers/usb/gadget/pxa27x_udc.c 2007-10-23 12:58:40.000000000 +0200 -+++ linux-2.6.23/drivers/usb/gadget/pxa27x_udc.c 2007-10-23 13:01:47.000000000 +0200 -@@ -65,6 +65,8 @@ - //#include <asm/arch/udc.h> - #include <asm/mach/udc_pxa2xx.h> - -+extern int usb_ether_init(void); -+ - /* - * This driver handles the USB Device Controller (UDC) in Intel's PXA 27x - * series processors. -@@ -2275,6 +2277,8 @@ - udc_init_ep(udc); - udc_reinit(udc); - -+ usb_ether_init(); // Alex add FIXME -+ - /* irq setup after old hardware state is cleaned up */ - retval = request_irq(irq, pxa27x_udc_irq, 0, driver_name, udc); - if (retval != 0) { diff --git a/packages/linux/linux-ezx-2.6.23/patches/pxa27x-udc-support.3.patch b/packages/linux/linux-ezx-2.6.23/patches/pxa27x-udc-support.3.patch deleted file mode 100644 index 21482fdc8f..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/pxa27x-udc-support.3.patch +++ /dev/null @@ -1,3113 +0,0 @@ -Index: linux-2.6.23/arch/arm/mach-pxa/generic.c -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/generic.c 2007-10-09 22:31:38.000000000 +0200 -+++ linux-2.6.23/arch/arm/mach-pxa/generic.c 2007-10-23 12:48:34.000000000 +0200 -@@ -283,7 +283,11 @@ - static u64 udc_dma_mask = ~(u32)0; - - struct platform_device pxa_device_udc = { -+#ifdef CONFIG_PXA27x -+ .name = "pxa27x-udc", -+#else - .name = "pxa2xx-udc", -+#endif - .id = -1, - .resource = pxa2xx_udc_resources, - .num_resources = ARRAY_SIZE(pxa2xx_udc_resources), -Index: linux-2.6.23/drivers/usb/gadget/Kconfig -=================================================================== ---- linux-2.6.23.orig/drivers/usb/gadget/Kconfig 2007-10-23 12:47:11.000000000 +0200 -+++ linux-2.6.23/drivers/usb/gadget/Kconfig 2007-10-23 12:48:34.000000000 +0200 -@@ -167,6 +167,24 @@ - default USB_GADGET - select USB_GADGET_SELECTED - -+config USB_GADGET_PXA27X -+ boolean "PXA 27x" -+ depends on ARCH_PXA && PXA27x -+ help -+ Intel's PXA 27x series XScale processors include an integrated -+ full speed USB 1.1 device controller. -+ -+ Say "y" to link the driver statically, or "m" to build a -+ dynamically linked module called "pxa2xx_udc" and force all -+ gadget drivers to also be dynamically linked. -+ -+ -+config USB_PXA27X -+ tristate -+ depends on USB_GADGET_PXA27X -+ default USB_GADGET -+ select USB_GADGET_SELECTED -+ - # if there's only one gadget driver, using only two bulk endpoints, - # don't waste memory for the other endpoints - config USB_PXA2XX_SMALL -Index: linux-2.6.23/drivers/usb/gadget/Makefile -=================================================================== ---- linux-2.6.23.orig/drivers/usb/gadget/Makefile 2007-10-23 12:47:11.000000000 +0200 -+++ linux-2.6.23/drivers/usb/gadget/Makefile 2007-10-23 12:48:34.000000000 +0200 -@@ -9,6 +9,7 @@ - obj-$(CONFIG_USB_NET2280) += net2280.o - obj-$(CONFIG_USB_AMD5536UDC) += amd5536udc.o - obj-$(CONFIG_USB_PXA2XX) += pxa2xx_udc.o -+obj-$(CONFIG_USB_PXA27X) += pxa27x_udc.o - obj-$(CONFIG_USB_GOKU) += goku_udc.o - obj-$(CONFIG_USB_OMAP) += omap_udc.o - obj-$(CONFIG_USB_LH7A40X) += lh7a40x_udc.o -Index: linux-2.6.23/drivers/usb/gadget/epautoconf.c -=================================================================== ---- linux-2.6.23.orig/drivers/usb/gadget/epautoconf.c 2007-10-23 12:47:11.000000000 +0200 -+++ linux-2.6.23/drivers/usb/gadget/epautoconf.c 2007-10-23 12:48:34.000000000 +0200 -@@ -230,7 +230,8 @@ - */ - struct usb_ep * __devinit usb_ep_autoconfig ( - struct usb_gadget *gadget, -- struct usb_endpoint_descriptor *desc -+ struct usb_endpoint_descriptor *desc, -+ int config, int interface, int alt - ) - { - struct usb_ep *ep; -@@ -238,6 +239,11 @@ - - type = desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK; - -+ /* If have ep_alloc() function use it! */ -+ if (gadget->ops->ep_alloc) -+ return gadget->ops->ep_alloc(gadget, desc, -+ config, interface, alt); -+ - /* First, apply chip-specific "best usage" knowledge. - * This might make a good usb_gadget_ops hook ... - */ -Index: linux-2.6.23/drivers/usb/gadget/ether.c -=================================================================== ---- linux-2.6.23.orig/drivers/usb/gadget/ether.c 2007-10-23 12:47:11.000000000 +0200 -+++ linux-2.6.23/drivers/usb/gadget/ether.c 2007-10-23 12:48:34.000000000 +0200 -@@ -257,10 +257,6 @@ - #define DEV_CONFIG_CDC - #endif - --#ifdef CONFIG_USB_GADGET_PXA27X --#define DEV_CONFIG_CDC --#endif -- - #ifdef CONFIG_USB_GADGET_S3C2410 - #define DEV_CONFIG_CDC - #endif -@@ -292,6 +288,10 @@ - #define DEV_CONFIG_SUBSET - #endif - -+#ifdef CONFIG_USB_GADGET_PXA27X -+#define DEV_CONFIG_SUBSET -+#endif -+ - #ifdef CONFIG_USB_GADGET_SUPERH - #define DEV_CONFIG_SUBSET - #endif -@@ -1042,13 +1042,12 @@ - static int - set_ether_config (struct eth_dev *dev, gfp_t gfp_flags) - { -- int result = 0; -- struct usb_gadget *gadget = dev->gadget; -+ int result = 0; - - #if defined(DEV_CONFIG_CDC) || defined(CONFIG_USB_ETH_RNDIS) - /* status endpoint used for RNDIS and (optionally) CDC */ - if (!subset_active(dev) && dev->status_ep) { -- dev->status = ep_desc (gadget, &hs_status_desc, -+ dev->status = ep_desc (dev->gadget, &hs_status_desc, - &fs_status_desc); - dev->status_ep->driver_data = dev; - -@@ -1061,10 +1060,10 @@ - } - #endif - -- dev->in = ep_desc(gadget, &hs_source_desc, &fs_source_desc); -+ dev->in = ep_desc(dev->gadget, &hs_source_desc, &fs_source_desc); - dev->in_ep->driver_data = dev; - -- dev->out = ep_desc(gadget, &hs_sink_desc, &fs_sink_desc); -+ dev->out = ep_desc(dev->gadget, &hs_sink_desc, &fs_sink_desc); - dev->out_ep->driver_data = dev; - - /* With CDC, the host isn't allowed to use these two data -@@ -2320,6 +2319,9 @@ - * non-CDC to be compatible with ARM Linux-2.4 "usb-eth". - */ - cdc = 0; -+ } else if (gadget_is_pxa27x(gadget)) { -+ /* hardware can't write zlps */ -+ zlp = 0; - } - - gcnum = usb_gadget_controller_number (gadget); -@@ -2386,7 +2388,22 @@ - - /* all we really need is bulk IN/OUT */ - usb_ep_autoconfig_reset (gadget); -- in_ep = usb_ep_autoconfig (gadget, &fs_source_desc); -+#ifdef CONFIG_USB_ETH_RNDIS -+ in_ep = usb_ep_autoconfig (gadget, &fs_source_desc, -+ DEV_RNDIS_CONFIG_VALUE, -+ (int)rndis_data_intf.bInterfaceNumber, -+ (int)rndis_data_intf.bAlternateSetting); -+#elif defined(DEV_CONFIG_CDC) -+ in_ep = usb_ep_autoconfig (gadget, &fs_source_desc, -+ DEV_CONFIG_VALUE, -+ (int)data_intf.bInterfaceNumber, -+ (int)data_intf.bAlternateSetting); -+#elif defined(DEV_CONFIG_SUBSET) -+ in_ep = usb_ep_autoconfig (gadget, &fs_source_desc, -+ DEV_CONFIG_VALUE, -+ (int)subset_data_intf.bInterfaceNumber, -+ (int)subset_data_intf.bAlternateSetting); -+#endif /* CONFIG_USB_ETH_RNDIS */ - if (!in_ep) { - autoconf_fail: - dev_err (&gadget->dev, -@@ -2395,8 +2412,24 @@ - return -ENODEV; - } - in_ep->driver_data = in_ep; /* claim */ -+ -+#ifdef CONFIG_USB_ETH_RNDIS -+ out_ep = usb_ep_autoconfig (gadget, &fs_sink_desc, -+ DEV_RNDIS_CONFIG_VALUE, -+ (int)rndis_data_intf.bInterfaceNumber, -+ (int)rndis_data_intf.bAlternateSetting); -+#elif defined(DEV_CONFIG_CDC) -+ out_ep = usb_ep_autoconfig (gadget, &fs_sink_desc, -+ DEV_CONFIG_VALUE, -+ (int)data_intf.bInterfaceNumber, -+ (int)data_intf.bAlternateSetting); -+#elif defined(DEV_CONFIG_SUBSET) -+ out_ep = usb_ep_autoconfig (gadget, &fs_sink_desc, -+ DEV_CONFIG_VALUE, -+ (int)subset_data_intf.bInterfaceNumber, -+ (int)subset_data_intf.bAlternateSetting); -+#endif /* CONFIG_USB_ETH_RNDIS */ - -- out_ep = usb_ep_autoconfig (gadget, &fs_sink_desc); - if (!out_ep) - goto autoconf_fail; - out_ep->driver_data = out_ep; /* claim */ -@@ -2406,7 +2439,18 @@ - * Since some hosts expect one, try to allocate one anyway. - */ - if (cdc || rndis) { -- status_ep = usb_ep_autoconfig (gadget, &fs_status_desc); -+#ifdef CONFIG_USB_ETH_RNDIS -+ status_ep = usb_ep_autoconfig (gadget, &fs_status_desc, -+ DEV_RNDIS_CONFIG_VALUE, -+ (int)rndis_control_intf.bInterfaceNumber, -+ (int)rndis_control_intf.bAlternateSetting); -+#elif defined(DEV_CONFIG_CDC) -+ status_ep = usb_ep_autoconfig (gadget, &fs_status_desc, -+ DEV_CONFIG_VALUE, -+ (int)control_intf.bInterfaceNumber, -+ (int)control_intf.bAlternateSetting); -+#endif /* CONFIG_USB_ETH_RNDIS */ -+ - if (status_ep) { - status_ep->driver_data = status_ep; /* claim */ - } else if (rndis) { -@@ -2414,13 +2458,14 @@ - "can't run RNDIS on %s\n", - gadget->name); - return -ENODEV; -+ } - #ifdef DEV_CONFIG_CDC -- /* pxa25x only does CDC subset; often used with RNDIS */ -- } else if (cdc) { -+ /* pxa25x only does CDC subset; often used with RNDIS */ -+ else if (cdc) { - control_intf.bNumEndpoints = 0; - /* FIXME remove endpoint from descriptor list */ --#endif - } -+#endif - } - #endif - -Index: linux-2.6.23/drivers/usb/gadget/file_storage.c -=================================================================== ---- linux-2.6.23.orig/drivers/usb/gadget/file_storage.c 2007-10-23 12:47:11.000000000 +0200 -+++ linux-2.6.23/drivers/usb/gadget/file_storage.c 2007-10-23 12:48:34.000000000 +0200 -@@ -3912,20 +3912,20 @@ - - /* Find all the endpoints we will use */ - usb_ep_autoconfig_reset(gadget); -- ep = usb_ep_autoconfig(gadget, &fs_bulk_in_desc); -+ ep = usb_ep_autoconfig(gadget, &fs_bulk_in_desc, 0, 0, 0); - if (!ep) - goto autoconf_fail; - ep->driver_data = fsg; // claim the endpoint - fsg->bulk_in = ep; - -- ep = usb_ep_autoconfig(gadget, &fs_bulk_out_desc); -+ ep = usb_ep_autoconfig(gadget, &fs_bulk_out_desc, 0, 0, 0); - if (!ep) - goto autoconf_fail; - ep->driver_data = fsg; // claim the endpoint - fsg->bulk_out = ep; - - if (transport_is_cbi()) { -- ep = usb_ep_autoconfig(gadget, &fs_intr_in_desc); -+ ep = usb_ep_autoconfig(gadget, &fs_intr_in_desc, 0, 0, 0); - if (!ep) - goto autoconf_fail; - ep->driver_data = fsg; // claim the endpoint -Index: linux-2.6.23/drivers/usb/gadget/gmidi.c -=================================================================== ---- linux-2.6.23.orig/drivers/usb/gadget/gmidi.c 2007-10-23 12:47:11.000000000 +0200 -+++ linux-2.6.23/drivers/usb/gadget/gmidi.c 2007-10-23 12:48:34.000000000 +0200 -@@ -1204,7 +1204,7 @@ - * but there may also be important quirks to address. - */ - usb_ep_autoconfig_reset(gadget); -- in_ep = usb_ep_autoconfig(gadget, &bulk_in_desc); -+ in_ep = usb_ep_autoconfig(gadget, &bulk_in_desc, 0, 0, 0); - if (!in_ep) { - autoconf_fail: - printk(KERN_ERR "%s: can't autoconfigure on %s\n", -@@ -1214,7 +1214,7 @@ - EP_IN_NAME = in_ep->name; - in_ep->driver_data = in_ep; /* claim */ - -- out_ep = usb_ep_autoconfig(gadget, &bulk_out_desc); -+ out_ep = usb_ep_autoconfig(gadget, &bulk_out_desc, 0, 0, 0); - if (!out_ep) { - goto autoconf_fail; - } -Index: linux-2.6.23/drivers/usb/gadget/pxa27x_udc.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/drivers/usb/gadget/pxa27x_udc.c 2007-10-23 12:48:34.000000000 +0200 -@@ -0,0 +1,2408 @@ -+/* -+ * linux/drivers/usb/gadget/pxa27x_udc.c -+ * Intel PXA2xx and IXP4xx on-chip full speed USB device controllers -+ * -+ * Copyright (C) 2002 Intrinsyc, Inc. (Frank Becker) -+ * Copyright (C) 2003 Robert Schwebel, Pengutronix -+ * Copyright (C) 2003 Benedikt Spranger, Pengutronix -+ * Copyright (C) 2003 David Brownell -+ * Copyright (C) 2003 Joshua Wise -+ * Copyright (C) 2004 Intel Corporation -+ * Copyright (C) 2007 Rodolfo Giometti <giometti@linux.it> -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -+ * -+ */ -+ -+#undef DEBUG -+/* #define VERBOSE DBG_VERBOSE */ -+ -+#include <linux/module.h> -+#include <linux/kernel.h> -+#include <linux/ioport.h> -+#include <linux/types.h> -+#include <linux/version.h> -+#include <linux/errno.h> -+#include <linux/delay.h> -+#include <linux/sched.h> -+#include <linux/slab.h> -+#include <linux/init.h> -+#include <linux/timer.h> -+#include <linux/list.h> -+#include <linux/interrupt.h> -+#include <linux/proc_fs.h> -+#include <linux/mm.h> -+#include <linux/device.h> -+#include <linux/dma-mapping.h> -+#include <linux/platform_device.h> -+ -+#include <asm/byteorder.h> -+#include <asm/dma.h> -+#include <asm/gpio.h> -+#include <asm/io.h> -+#include <asm/irq.h> -+#include <asm/system.h> -+#include <asm/mach-types.h> -+#include <asm/unaligned.h> -+#include <asm/hardware.h> -+//#include <asm/arch/pxa-regs.h> -+ -+#include <linux/usb/ch9.h> -+#include <linux/usb_gadget.h> -+ -+//#include <asm/arch/udc.h> -+#include <asm/mach/udc_pxa2xx.h> -+ -+/* -+ * This driver handles the USB Device Controller (UDC) in Intel's PXA 27x -+ * series processors. -+ * Such controller drivers work with a gadget driver. The gadget driver -+ * returns descriptors, implements configuration and data protocols used -+ * by the host to interact with this device, and allocates endpoints to -+ * the different protocol interfaces. The controller driver virtualizes -+ * usb hardware so that the gadget drivers will be more portable. -+ * -+ * This UDC hardware wants to implement a bit too much USB protocol, so -+ * it constrains the sorts of USB configuration change events that work. -+ * The errata for these chips are misleading; some "fixed" bugs from -+ * pxa250 a0/a1 b0/b1/b2 sure act like they're still there. -+ */ -+ -+#define DRIVER_VERSION "28-Jun-2007" -+#define DRIVER_DESC "PXA 27x USB Device Controller driver" -+ -+static const char driver_name[] = "pxa27x_udc"; -+ -+static const char ep0name[] = "ep0"; -+ -+#undef USE_DMA -+#undef DISABLE_TEST_MODE -+ -+#ifdef CONFIG_PROC_FS -+#define UDC_PROC_FILE -+#endif -+ -+#include "pxa27x_udc.h" -+ -+#ifdef CONFIG_EMBEDDED -+/* few strings, and little code to use them */ -+#undef DEBUG -+#undef UDC_PROC_FILE -+#endif -+ -+#ifdef USE_DMA -+static int use_dma = 1; -+module_param(use_dma, bool, 0); -+MODULE_PARM_DESC(use_dma, "true to use dma"); -+ -+static void dma_nodesc_handler(int dmach, void *_ep); -+static void kick_dma(struct pxa27x_ep *ep, struct pxa27x_request *req); -+ -+#define DMASTR " (dma support)" -+ -+#else /* !USE_DMA */ -+#define DMASTR " (pio only)" -+#endif -+ -+#ifdef CONFIG_USB_PXA27X_SMALL -+#define SIZE_STR " (small)" -+#else -+#define SIZE_STR "" -+#endif -+ -+#ifdef DISABLE_TEST_MODE -+/* (mode == 0) == no undocumented chip tweaks -+ * (mode & 1) == double buffer bulk IN -+ * (mode & 2) == double buffer bulk OUT -+ * ... so mode = 3 (or 7, 15, etc) does it for both -+ */ -+static ushort fifo_mode = 0; -+module_param(fifo_mode, ushort, 0); -+MODULE_PARM_DESC(fifo_mode, "pxa27x udc fifo mode"); -+#endif -+ -+#define UDCISR0_IR0 0x3 -+#define UDCISR_INT_MASK (UDC_INT_FIFOERROR | UDC_INT_PACKETCMP) -+#define UDCICR_INT_MASK UDCISR_INT_MASK -+ -+#define UDCCSR_MASK (UDCCSR_FST | UDCCSR_DME) -+/* --------------------------------------------------------------------------- -+ * endpoint related parts of the api to the usb controller hardware, -+ * used by gadget driver; and the inner talker-to-hardware core. -+ * --------------------------------------------------------------------------- -+ */ -+ -+static void pxa27x_ep_fifo_flush(struct usb_ep *ep); -+static void nuke(struct pxa27x_ep *, int status); -+ -+/* one GPIO should control a D+ pullup, so host sees this device (or not) */ -+static void pullup_off(void) -+{ -+ struct pxa2xx_udc_mach_info *mach = the_controller->mach; -+ -+ if (mach->gpio_pullup) -+ gpio_set_value(mach->gpio_pullup, 0); -+ else if (mach->udc_command) -+ mach->udc_command(PXA2XX_UDC_CMD_DISCONNECT); -+} -+ -+static void pullup_on(void) -+{ -+ struct pxa2xx_udc_mach_info *mach = the_controller->mach; -+ -+ if (mach->gpio_pullup) -+ gpio_set_value(mach->gpio_pullup, 1); -+ else if (mach->udc_command) -+ mach->udc_command(PXA2XX_UDC_CMD_CONNECT); -+} -+ -+static void pio_irq_enable(int ep_num) -+{ -+ if (ep_num < 16) -+ UDCICR0 |= 3 << (ep_num * 2); -+ else { -+ ep_num -= 16; -+ UDCICR1 |= 3 << (ep_num * 2); -+ } -+} -+ -+static void pio_irq_disable(int ep_num) -+{ -+ ep_num &= 0xf; -+ if (ep_num < 16) -+ UDCICR0 &= ~(3 << (ep_num * 2)); -+ else { -+ ep_num -= 16; -+ UDCICR1 &= ~(3 << (ep_num * 2)); -+ } -+} -+ -+/* The UDCCR reg contains mask and interrupt status bits, -+ * so using '|=' isn't safe as it may ack an interrupt. -+ */ -+#define UDCCR_MASK_BITS (UDCCR_OEN | UDCCR_UDE) -+ -+static inline void udc_set_mask_UDCCR(int mask) -+{ -+ UDCCR = (UDCCR & UDCCR_MASK_BITS) | (mask & UDCCR_MASK_BITS); -+} -+ -+static inline void udc_clear_mask_UDCCR(int mask) -+{ -+ UDCCR = (UDCCR & UDCCR_MASK_BITS) & ~(mask & UDCCR_MASK_BITS); -+} -+ -+static inline void udc_ack_int_UDCCR(int mask) -+{ -+ /* udccr contains the bits we dont want to change */ -+ __u32 udccr = UDCCR & UDCCR_MASK_BITS; -+ -+ UDCCR = udccr | (mask & ~UDCCR_MASK_BITS); -+} -+ -+/* -+ * endpoint enable/disable -+ * -+ * we need to verify the descriptors used to enable endpoints. since pxa27x -+ * endpoint configurations are fixed, and are pretty much always enabled, -+ * there's not a lot to manage here. -+ * -+ * because pxa27x can't selectively initialize bulk (or interrupt) endpoints, -+ * (resetting endpoint halt and toggle), SET_INTERFACE is unusable except -+ * for a single interface (with only the default altsetting) and for gadget -+ * drivers that don't halt endpoints (not reset by set_interface). that also -+ * means that if you use ISO, you must violate the USB spec rule that all -+ * iso endpoints must be in non-default altsettings. -+ */ -+static int pxa27x_ep_enable(struct usb_ep *_ep, -+ const struct usb_endpoint_descriptor *desc) -+{ -+ struct pxa27x_ep *ep; -+ struct pxa27x_udc *dev; -+ -+ ep = container_of(_ep, struct pxa27x_ep, ep); -+ if (!_ep || !desc || _ep->name == ep0name -+ || desc->bDescriptorType != USB_DT_ENDPOINT -+ || ep->fifo_size < le16_to_cpu(desc->wMaxPacketSize)) { -+ DMSG("%s, bad ep or descriptor\n", __FUNCTION__); -+ return -EINVAL; -+ } -+ -+ /* xfer types must match, except that interrupt ~= bulk */ -+ if (ep->ep_type != USB_ENDPOINT_XFER_BULK -+ && desc->bmAttributes != USB_ENDPOINT_XFER_INT) { -+ DMSG("%s, %s type mismatch\n", __FUNCTION__, _ep->name); -+ return -EINVAL; -+ } -+ -+ /* hardware _could_ do smaller, but driver doesn't */ -+ if ((desc->bmAttributes == USB_ENDPOINT_XFER_BULK -+ && le16_to_cpu(desc->wMaxPacketSize) -+ != BULK_FIFO_SIZE) -+ || !desc->wMaxPacketSize) { -+ DMSG("%s, bad %s maxpacket\n", __FUNCTION__, _ep->name); -+ return -ERANGE; -+ } -+ -+ dev = ep->dev; -+ if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN) { -+ DMSG("%s, bogus device state\n", __FUNCTION__); -+ return -ESHUTDOWN; -+ } -+ -+ ep->desc = desc; -+ ep->dma = -1; -+ ep->stopped = 0; -+ ep->pio_irqs = ep->dma_irqs = 0; -+ ep->ep.maxpacket = le16_to_cpu(desc->wMaxPacketSize); -+ -+ /* flush fifo (mostly for OUT buffers) */ -+ pxa27x_ep_fifo_flush(_ep); -+ -+ /* ... reset halt state too, if we could ... */ -+ -+#ifdef USE_DMA -+ /* for (some) bulk and ISO endpoints, try to get a DMA channel and -+ * bind it to the endpoint. otherwise use PIO. -+ */ -+ DMSG("%s: called attributes=%d\n", __FUNCTION__, ep->ep_type); -+ switch (ep->ep_type) { -+ case USB_ENDPOINT_XFER_ISOC: -+ if (le16_to_cpu(desc->wMaxPacketSize) % 32) -+ break; -+ /* fall through */ -+ case USB_ENDPOINT_XFER_BULK: -+ if (!use_dma || !ep->reg_drcmr) -+ break; -+ ep->dma = pxa_request_dma((char *)_ep->name, -+ (le16_to_cpu(desc->wMaxPacketSize) > 64) -+ ? DMA_PRIO_MEDIUM /* some iso */ -+ : DMA_PRIO_LOW, -+ dma_nodesc_handler, ep); -+ if (ep->dma >= 0) { -+ *ep->reg_drcmr = DRCMR_MAPVLD | ep->dma; -+ DMSG("%s using dma%d\n", _ep->name, ep->dma); -+ } -+ default: -+ break; -+ } -+#endif -+ DBG(DBG_VERBOSE, "enabled %s\n", _ep->name); -+ return 0; -+} -+ -+static int pxa27x_ep_disable(struct usb_ep *_ep) -+{ -+ struct pxa27x_ep *ep; -+ -+ ep = container_of(_ep, struct pxa27x_ep, ep); -+ if (!_ep || !ep->desc) { -+ DMSG("%s, %s not enabled\n", __FUNCTION__, -+ _ep ? ep->ep.name : NULL); -+ return -EINVAL; -+ } -+ nuke(ep, -ESHUTDOWN); -+ -+#ifdef USE_DMA -+ if (ep->dma >= 0) { -+ *ep->reg_drcmr = 0; -+ pxa_free_dma(ep->dma); -+ ep->dma = -1; -+ } -+#endif -+ -+ /* flush fifo (mostly for IN buffers) */ -+ pxa27x_ep_fifo_flush(_ep); -+ -+ ep->desc = 0; -+ ep->stopped = 1; -+ -+ DBG(DBG_VERBOSE, "%s disabled\n", _ep->name); -+ return 0; -+} -+ -+/*-------------------------------------------------------------------------*/ -+ -+/* for the pxa27x, these can just wrap kmalloc/kfree. gadget drivers -+ * must still pass correctly initialized endpoints, since other controller -+ * drivers may care about how it's currently set up (dma issues etc). -+ */ -+ -+/* -+ * pxa27x_ep_alloc_request - allocate a request data structure -+ */ -+static struct usb_request *pxa27x_ep_alloc_request(struct usb_ep *_ep, -+ unsigned int gfp_flags) -+{ -+ struct pxa27x_request *req; -+ -+ req = kmalloc(sizeof *req, gfp_flags); -+ if (!req) -+ return 0; -+ -+ memset(req, 0, sizeof *req); -+ INIT_LIST_HEAD(&req->queue); -+ return &req->req; -+} -+ -+/* -+ * pxa27x_ep_free_request - deallocate a request data structure -+ */ -+static void pxa27x_ep_free_request(struct usb_ep *_ep, struct usb_request *_req) -+{ -+ struct pxa27x_request *req; -+ -+ req = container_of(_req, struct pxa27x_request, req); -+ WARN_ON(!list_empty(&req->queue)); -+ kfree(req); -+} -+ -+/* PXA cache needs flushing with DMA I/O (it's dma-incoherent), but there's -+ * no device-affinity and the heap works perfectly well for i/o buffers. -+ * It wastes much less memory than dma_alloc_coherent() would, and even -+ * prevents cacheline (32 bytes wide) sharing problems. -+ */ -+static void *pxa27x_ep_alloc_buffer(struct usb_ep *_ep, unsigned bytes, -+ dma_addr_t * dma, unsigned int gfp_flags) -+{ -+ char *retval; -+ -+ retval = kmalloc(bytes, gfp_flags & ~(__GFP_DMA | __GFP_HIGHMEM)); -+ if (retval) -+#ifdef USE_DMA -+ *dma = virt_to_bus(retval); -+#else -+ *dma = (dma_addr_t) ~0; -+#endif -+ return retval; -+} -+ -+static void -+pxa27x_ep_free_buffer(struct usb_ep *_ep, void *buf, dma_addr_t dma, -+ unsigned bytes) -+{ -+ kfree(buf); -+} -+ -+/*-------------------------------------------------------------------------*/ -+ -+/* -+ * done - retire a request; caller blocked irqs -+ */ -+static void done(struct pxa27x_ep *ep, struct pxa27x_request *req, int status) -+{ -+ list_del_init(&req->queue); -+ if (likely(req->req.status == -EINPROGRESS)) -+ req->req.status = status; -+ else -+ status = req->req.status; -+ -+ if (status && status != -ESHUTDOWN) -+ DBG(DBG_VERBOSE, "complete %s req %p stat %d len %u/%u\n", -+ ep->ep.name, &req->req, status, -+ req->req.actual, req->req.length); -+ -+ /* don't modify queue heads during completion callback */ -+ req->req.complete(&ep->ep, &req->req); -+} -+ -+static inline void ep0_idle(struct pxa27x_udc *dev) -+{ -+ dev->ep0state = EP0_IDLE; -+ LED_EP0_OFF; -+} -+ -+static int -+write_packet(volatile u32 * uddr, struct pxa27x_request *req, unsigned max) -+{ -+ u32 *buf; -+ int length, count, remain; -+ -+ buf = (u32 *) (req->req.buf + req->req.actual); -+ prefetch(buf); -+ -+ /* how big will this packet be? */ -+ length = min(req->req.length - req->req.actual, max); -+ req->req.actual += length; -+ -+ remain = length & 0x3; -+ count = length & ~(0x3); -+ -+ while (likely(count)) { -+ *uddr = *buf++; -+ count -= 4; -+ } -+ -+ if (remain) { -+ volatile u8 *reg = (u8 *) uddr; -+ char *rd = (u8 *) buf; -+ -+ while (remain--) { -+ *reg = *rd++; -+ } -+ } -+ -+ return length; -+} -+ -+/* -+ * write to an IN endpoint fifo, as many packets as possible. -+ * irqs will use this to write the rest later. -+ * caller guarantees at least one packet buffer is ready (or a zlp). -+ */ -+static int write_fifo(struct pxa27x_ep *ep, struct pxa27x_request *req) -+{ -+ unsigned max; -+ -+ max = le16_to_cpu(ep->desc->wMaxPacketSize); -+ do { -+ int count; -+ int is_last, is_short; -+ -+ count = write_packet(ep->reg_udcdr, req, max); -+ -+ /* last packet is usually short (or a zlp) */ -+ if (unlikely(count != max)) -+ is_last = is_short = 1; -+ else { -+ if (likely(req->req.length != req->req.actual) -+ || req->req.zero) -+ is_last = 0; -+ else -+ is_last = 1; -+ /* interrupt/iso maxpacket may not fill the fifo */ -+ is_short = unlikely(max < ep->fifo_size); -+ } -+ -+ DMSG("wrote %s count:%d bytes%s%s %d left %p\n", -+ ep->ep.name, count, -+ is_last ? "/L" : "", is_short ? "/S" : "", -+ req->req.length - req->req.actual, &req->req); -+ -+ /* let loose that packet. maybe try writing another one, -+ * double buffering might work. TSP, TPC, and TFS -+ * bit values are the same for all normal IN endpoints. -+ */ -+ *ep->reg_udccsr = UDCCSR_PC; -+ if (is_short) -+ *ep->reg_udccsr = UDCCSR_SP; -+ -+ /* requests complete when all IN data is in the FIFO */ -+ if (is_last) { -+ done(ep, req, 0); -+ if (list_empty(&ep->queue) || unlikely(ep->dma >= 0)) { -+ pio_irq_disable(ep->ep_num); -+#ifdef USE_DMA -+ /* unaligned data and zlps couldn't use dma */ -+ if (unlikely(!list_empty(&ep->queue))) { -+ req = list_entry(ep->queue.next, -+ struct pxa27x_request, -+ queue); -+ kick_dma(ep, req); -+ return 0; -+ } -+#endif -+ } -+ return 1; -+ } -+ /* TODO experiment: how robust can fifo mode tweaking be? -+ * double buffering is off in the default fifo mode, which -+ * prevents TFS from being set here. -+ */ -+ -+ } while (*ep->reg_udccsr & UDCCSR_FS); -+ return 0; -+} -+ -+/* caller asserts req->pending (ep0 irq status nyet cleared); starts -+ * ep0 data stage. these chips want very simple state transitions. -+ */ -+static inline void ep0start(struct pxa27x_udc *dev, u32 flags, const char *tag) -+{ -+ UDCCSR0 = flags | UDCCSR0_SA | UDCCSR0_OPC; -+ UDCISR0 = UDCICR_INT(0, UDC_INT_FIFOERROR | UDC_INT_PACKETCMP); -+ dev->req_pending = 0; -+ DBG(DBG_VERY_NOISY, "%s %s, %02x/%02x\n", -+ __FUNCTION__, tag, UDCCSR0, flags); -+} -+ -+static int write_ep0_fifo(struct pxa27x_ep *ep, struct pxa27x_request *req) -+{ -+ unsigned count; -+ int is_short; -+ -+ count = write_packet(&UDCDR0, req, EP0_FIFO_SIZE); -+ ep->dev->stats.write.bytes += count; -+ -+ /* last packet "must be" short (or a zlp) */ -+ is_short = (count != EP0_FIFO_SIZE); -+ -+ DBG(DBG_VERY_NOISY, "ep0in %d bytes %d left %p\n", count, -+ req->req.length - req->req.actual, &req->req); -+ -+ if (unlikely(is_short)) { -+ if (ep->dev->req_pending) -+ ep0start(ep->dev, UDCCSR0_IPR, "short IN"); -+ else -+ UDCCSR0 = UDCCSR0_IPR; -+ -+ count = req->req.length; -+ done(ep, req, 0); -+ ep0_idle(ep->dev); -+#if 0 -+ /* This seems to get rid of lost status irqs in some cases: -+ * host responds quickly, or next request involves config -+ * change automagic, or should have been hidden, or ... -+ * -+ * FIXME get rid of all udelays possible... -+ */ -+ if (count >= EP0_FIFO_SIZE) { -+ count = 100; -+ do { -+ if ((UDCCSR0 & UDCCSR0_OPC) != 0) { -+ /* clear OPC, generate ack */ -+ UDCCSR0 = UDCCSR0_OPC; -+ break; -+ } -+ count--; -+ udelay(1); -+ } while (count); -+ } -+#endif -+ } else if (ep->dev->req_pending) -+ ep0start(ep->dev, 0, "IN"); -+ return is_short; -+} -+ -+/* -+ * read_fifo - unload packet(s) from the fifo we use for usb OUT -+ * transfers and put them into the request. caller should have made -+ * sure there's at least one packet ready. -+ * -+ * returns true if the request completed because of short packet or the -+ * request buffer having filled (and maybe overran till end-of-packet). -+ */ -+static int read_fifo(struct pxa27x_ep *ep, struct pxa27x_request *req) -+{ -+ for (;;) { -+ u32 *buf; -+ int bufferspace, count, is_short; -+ -+ /* make sure there's a packet in the FIFO. */ -+ if (unlikely((*ep->reg_udccsr & UDCCSR_PC) == 0)) -+ break; -+ buf = (u32 *) (req->req.buf + req->req.actual); -+ prefetchw(buf); -+ bufferspace = req->req.length - req->req.actual; -+ -+ /* read all bytes from this packet */ -+ if (likely(*ep->reg_udccsr & UDCCSR_BNE)) { -+ count = 0x3ff & *ep->reg_udcbcr; -+ req->req.actual += min(count, bufferspace); -+ } else /* zlp */ -+ count = 0; -+ -+ is_short = (count < ep->ep.maxpacket); -+ DMSG("read %s udccsr:%02x, count:%d bytes%s req %p %d/%d\n", -+ ep->ep.name, *ep->reg_udccsr, count, -+ is_short ? "/S" : "", -+ &req->req, req->req.actual, req->req.length); -+ -+#if 0 -+ dump_regs(ep->ep_num ); -+#endif -+ count = min(count, bufferspace); -+ while (likely(count > 0)) { -+ *buf++ = *ep->reg_udcdr; -+ count -= 4; -+ } -+ DMSG("Buf:0x%p\n", req->req.buf); -+ -+ *ep->reg_udccsr = UDCCSR_PC; -+ /* RPC/RSP/RNE could now reflect the other packet buffer */ -+ -+ /* completion */ -+ if (is_short || req->req.actual == req->req.length) { -+ done(ep, req, 0); -+ if (list_empty(&ep->queue)) -+ pio_irq_disable(ep->ep_num); -+ return 1; -+ } -+ -+ /* finished that packet. the next one may be waiting... */ -+ } -+ return 0; -+} -+ -+/* -+ * special ep0 version of the above. no UBCR0 or double buffering; status -+ * handshaking is magic. most device protocols don't need control-OUT. -+ * CDC vendor commands (and RNDIS), mass storage CB/CBI, and some other -+ * protocols do use them. -+ */ -+static int read_ep0_fifo(struct pxa27x_ep *ep, struct pxa27x_request *req) -+{ -+ u32 *buf, word; -+ unsigned bufferspace; -+ -+ buf = (u32 *) (req->req.buf + req->req.actual); -+ bufferspace = req->req.length - req->req.actual; -+ -+ while (UDCCSR0 & UDCCSR0_RNE) { -+ word = UDCDR0; -+ -+ if (unlikely(bufferspace == 0)) { -+ /* this happens when the driver's buffer -+ * is smaller than what the host sent. -+ * discard the extra data. -+ */ -+ if (req->req.status != -EOVERFLOW) -+ DMSG("%s overflow\n", ep->ep.name); -+ req->req.status = -EOVERFLOW; -+ } else { -+ *buf++ = word; -+ req->req.actual += 4; -+ bufferspace -= 4; -+ } -+ } -+ -+ UDCCSR0 = UDCCSR0_OPC; -+ -+ /* completion */ -+ if (req->req.actual >= req->req.length) -+ return 1; -+ -+ /* finished that packet. the next one may be waiting... */ -+ return 0; -+} -+ -+#ifdef USE_DMA -+ -+#define MAX_IN_DMA ((DCMD_LENGTH + 1) - BULK_FIFO_SIZE) -+static void kick_dma(struct pxa27x_ep *ep, struct pxa27x_request *req) -+{ -+ u32 dcmd = 0; -+ u32 len = req->req.length; -+ u32 buf = req->req.dma; -+ u32 fifo = io_v2p((u32) ep->reg_udcdr); -+ -+ buf += req->req.actual; -+ len -= req->req.actual; -+ ep->dma_con = 0; -+ -+ DMSG("%s: req:0x%p length:%d, actual:%d dma:%d\n", -+ __FUNCTION__, &req->req, req->req.length, -+ req->req.actual, ep->dma); -+ -+ /* no-descriptor mode can be simple for bulk-in, iso-in, iso-out */ -+ DCSR(ep->dma) = DCSR_NODESC; -+ if (buf & 0x3) -+ DALGN |= 1 << ep->dma; -+ else -+ DALGN &= ~(1 << ep->dma); -+ -+ if (ep->dir_in) { -+ DSADR(ep->dma) = buf; -+ DTADR(ep->dma) = fifo; -+ if (len > MAX_IN_DMA) { -+ len = MAX_IN_DMA; -+ ep->dma_con = 1; -+ } else if (len >= ep->ep.maxpacket) { -+ if ((ep->dma_con = (len % ep->ep.maxpacket) != 0)) -+ len = ep->ep.maxpacket; -+ } -+ dcmd = len | DCMD_BURST32 | DCMD_WIDTH4 | DCMD_ENDIRQEN -+ | DCMD_FLOWTRG | DCMD_INCSRCADDR; -+ } else { -+ DSADR(ep->dma) = fifo; -+ DTADR(ep->dma) = buf; -+ dcmd = len | DCMD_BURST32 | DCMD_WIDTH4 | DCMD_ENDIRQEN -+ | DCMD_FLOWSRC | DCMD_INCTRGADDR; -+ } -+ *ep->reg_udccsr = UDCCSR_DME; -+ DCMD(ep->dma) = dcmd; -+ DCSR(ep->dma) = DCSR_NODESC | DCSR_EORIRQEN -+ | ((ep->dir_in) ? DCSR_STOPIRQEN : 0); -+ *ep->reg_drcmr = ep->dma | DRCMR_MAPVLD; -+ DCSR(ep->dma) |= DCSR_RUN; -+} -+ -+static void cancel_dma(struct pxa27x_ep *ep) -+{ -+ struct pxa27x_request *req; -+ u32 tmp; -+ -+ if (DCSR(ep->dma) == 0 || list_empty(&ep->queue)) -+ return; -+ -+ DMSG("hehe dma:%d,dcsr:0x%x\n", ep->dma, DCSR(ep->dma)); -+ DCSR(ep->dma) = 0; -+ while ((DCSR(ep->dma) & DCSR_STOPSTATE) == 0) -+ cpu_relax(); -+ -+ req = list_entry(ep->queue.next, struct pxa27x_request, queue); -+ tmp = DCMD(ep->dma) & DCMD_LENGTH; -+ req->req.actual = req->req.length - tmp; -+ -+ /* the last tx packet may be incomplete, so flush the fifo. -+ * FIXME correct req.actual if we can -+ */ -+ *ep->reg_udccsr = UDCCSR_FEF; -+} -+ -+static void dma_nodesc_handler(int dmach, void *_ep, struct pt_regs *r) -+{ -+ struct pxa27x_ep *ep = _ep; -+ struct pxa27x_request *req, *req_next; -+ u32 dcsr, tmp, completed; -+ -+ local_irq_disable(); -+ -+ req = list_entry(ep->queue.next, struct pxa27x_request, queue); -+ -+ DMSG("%s, buf:0x%p\n", __FUNCTION__, req->req.buf); -+ -+ ep->dma_irqs++; -+ ep->dev->stats.irqs++; -+ HEX_DISPLAY(ep->dev->stats.irqs); -+ -+ completed = 0; -+ -+ dcsr = DCSR(dmach); -+ DCSR(ep->dma) &= ~DCSR_RUN; -+ -+ if (dcsr & DCSR_BUSERR) { -+ DCSR(dmach) = DCSR_BUSERR; -+ printk(KERN_ERR " Buss Error\n"); -+ req->req.status = -EIO; -+ completed = 1; -+ } else if (dcsr & DCSR_ENDINTR) { -+ DCSR(dmach) = DCSR_ENDINTR; -+ if (ep->dir_in) { -+ tmp = req->req.length - req->req.actual; -+ /* Last packet is a short one */ -+ if (tmp < ep->ep.maxpacket) { -+ int count = 0; -+ -+ *ep->reg_udccsr = UDCCSR_SP | -+ (*ep->reg_udccsr & UDCCSR_MASK); -+ /*Wait for packet out */ -+ while ((count++ < 10000) && -+ !(*ep->reg_udccsr & UDCCSR_FS)) ; -+ if (count >= 10000) -+ DMSG("Failed to send packet\n"); -+ else -+ DMSG("%s: short packet sent len:%d," -+ "length:%d,actual:%d\n", -+ __FUNCTION__, tmp, req->req.length, -+ req->req.actual); -+ req->req.actual = req->req.length; -+ completed = 1; -+ /* There are still packets to transfer */ -+ } else if (ep->dma_con) { -+ DMSG("%s: more packets,length:%d,actual:%d\n", -+ __FUNCTION__, req->req.length, -+ req->req.actual); -+ req->req.actual += ep->ep.maxpacket; -+ completed = 0; -+ } else { -+ DMSG("%s: no more packets,length:%d," -+ "actual:%d\n", __FUNCTION__, -+ req->req.length, req->req.actual); -+ req->req.actual = req->req.length; -+ completed = 1; -+ } -+ } else { -+ req->req.actual = req->req.length; -+ completed = 1; -+ } -+ } else if (dcsr & DCSR_EORINTR) { /* Only happened in OUT DMA */ -+ int remain, udccsr; -+ -+ DCSR(dmach) = DCSR_EORINTR; -+ remain = DCMD(dmach) & DCMD_LENGTH; -+ req->req.actual = req->req.length - remain; -+ -+ udccsr = *ep->reg_udccsr; -+ if (udccsr & UDCCSR_SP) { -+ *ep->reg_udccsr = UDCCSR_PC | (udccsr & UDCCSR_MASK); -+ completed = 1; -+ } -+ DMSG("%s: length:%d actual:%d\n", -+ __FUNCTION__, req->req.length, req->req.actual); -+ } else -+ DMSG("%s: Others dma:%d DCSR:0x%x DCMD:0x%x\n", -+ __FUNCTION__, dmach, DCSR(dmach), DCMD(dmach)); -+ -+ if (likely(completed)) { -+ if (req->queue.next != &ep->queue) { -+ req_next = list_entry(req->queue.next, -+ struct pxa27x_request, queue); -+ kick_dma(ep, req_next); -+ } -+ done(ep, req, 0); -+ } else { -+ kick_dma(ep, req); -+ } -+ -+ local_irq_enable(); -+} -+ -+#endif -+/*-------------------------------------------------------------------------*/ -+ -+static int -+pxa27x_ep_queue(struct usb_ep *_ep, struct usb_request *_req, -+ unsigned int gfp_flags) -+{ -+ struct pxa27x_ep *ep; -+ struct pxa27x_request *req; -+ struct pxa27x_udc *dev; -+ unsigned long flags; -+ -+ req = container_of(_req, struct pxa27x_request, req); -+ if (unlikely(!_req || !_req->complete || !_req->buf || -+ !list_empty(&req->queue))) { -+ DMSG("%s, bad params\n", __FUNCTION__); -+ return -EINVAL; -+ } -+ -+ ep = container_of(_ep, struct pxa27x_ep, ep); -+ if (unlikely(!_ep || (!ep->desc && ep->ep.name != ep0name))) { -+ DMSG("%s, bad ep\n", __FUNCTION__); -+ return -EINVAL; -+ } -+ -+ DMSG("%s, ep point %d is queue\n", __FUNCTION__, ep->ep_num); -+ -+ dev = ep->dev; -+ if (unlikely(!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN)) { -+ DMSG("%s, bogus device state\n", __FUNCTION__); -+ return -ESHUTDOWN; -+ } -+ -+ /* iso is always one packet per request, that's the only way -+ * we can report per-packet status. that also helps with dma. -+ */ -+ if (unlikely(ep->ep_type == USB_ENDPOINT_XFER_ISOC -+ && req->req.length > le16_to_cpu -+ (ep->desc->wMaxPacketSize))) -+ return -EMSGSIZE; -+ -+#ifdef USE_DMA -+ /* FIXME: caller may already have done the dma mapping */ -+ if (ep->dma >= 0) { -+ _req->dma = dma_map_single(dev->dev, _req->buf, _req->length, -+ (ep-> -+ dir_in) ? DMA_TO_DEVICE : -+ DMA_FROM_DEVICE); -+ } -+#endif -+ -+ DBG(DBG_NOISY, "%s queue req %p, len %d buf %p\n", -+ _ep->name, _req, _req->length, _req->buf); -+ -+ local_irq_save(flags); -+ -+ _req->status = -EINPROGRESS; -+ _req->actual = 0; -+ -+ /* kickstart this i/o queue? */ -+ if (list_empty(&ep->queue) && !ep->stopped) { -+ if (ep->desc == 0 /* ep0 */ ) { -+ unsigned length = _req->length; -+ -+ switch (dev->ep0state) { -+ case EP0_IN_DATA_PHASE: -+ dev->stats.write.ops++; -+ if (write_ep0_fifo(ep, req)) -+ req = 0; -+ break; -+ -+ case EP0_OUT_DATA_PHASE: -+ dev->stats.read.ops++; -+ if (dev->req_pending) -+ ep0start(dev, UDCCSR0_IPR, "OUT"); -+ if (length == 0 || ((UDCCSR0 & UDCCSR0_RNE) != 0 -+ && read_ep0_fifo(ep, -+ req))) { -+ ep0_idle(dev); -+ done(ep, req, 0); -+ req = 0; -+ } -+ break; -+ case EP0_NO_ACTION: -+ ep0_idle(dev); -+ req = 0; -+ break; -+ default: -+ DMSG("ep0 i/o, odd state %d\n", dev->ep0state); -+ local_irq_restore(flags); -+ return -EL2HLT; -+ } -+#ifdef USE_DMA -+ /* either start dma or prime pio pump */ -+ } else if (ep->dma >= 0) { -+ kick_dma(ep, req); -+#endif -+ /* can the FIFO can satisfy the request immediately? */ -+ } else if (ep->dir_in -+ && (*ep->reg_udccsr & UDCCSR_FS) != 0 -+ && write_fifo(ep, req)) { -+ req = 0; -+ } else if ((*ep->reg_udccsr & UDCCSR_FS) != 0 -+ && read_fifo(ep, req)) { -+ req = 0; -+ } -+ DMSG("req:%p,ep->desc:%p,ep->dma:%d\n", req, ep->desc, ep->dma); -+ if (likely(req && ep->desc) && ep->dma < 0) -+ pio_irq_enable(ep->ep_num); -+ } -+ -+ /* pio or dma irq handler advances the queue. */ -+ if (likely(req != 0)) -+ list_add_tail(&req->queue, &ep->queue); -+ local_irq_restore(flags); -+ -+ return 0; -+} -+ -+/* -+ * nuke - dequeue ALL requests -+ */ -+static void nuke(struct pxa27x_ep *ep, int status) -+{ -+ struct pxa27x_request *req; -+ -+ /* called with irqs blocked */ -+#ifdef USE_DMA -+ if (ep->dma >= 0 && !ep->stopped) -+ cancel_dma(ep); -+#endif -+ while (!list_empty(&ep->queue)) { -+ req = list_entry(ep->queue.next, struct pxa27x_request, queue); -+ done(ep, req, status); -+ } -+ if (ep->desc) -+ pio_irq_disable(ep->ep_num); -+} -+ -+/* dequeue JUST ONE request */ -+static int pxa27x_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req) -+{ -+ struct pxa27x_ep *ep; -+ struct pxa27x_request *req; -+ unsigned long flags; -+ -+ ep = container_of(_ep, struct pxa27x_ep, ep); -+ if (!_ep || ep->ep.name == ep0name) -+ return -EINVAL; -+ -+ local_irq_save(flags); -+ -+ /* make sure it's actually queued on this endpoint */ -+ list_for_each_entry(req, &ep->queue, queue) { -+ if (&req->req == _req) -+ break; -+ } -+ if (&req->req != _req) { -+ local_irq_restore(flags); -+ return -EINVAL; -+ } -+#ifdef USE_DMA -+ if (ep->dma >= 0 && ep->queue.next == &req->queue && !ep->stopped) { -+ cancel_dma(ep); -+ done(ep, req, -ECONNRESET); -+ /* restart i/o */ -+ if (!list_empty(&ep->queue)) { -+ req = list_entry(ep->queue.next, -+ struct pxa27x_request, queue); -+ kick_dma(ep, req); -+ } -+ } else -+#endif -+ done(ep, req, -ECONNRESET); -+ -+ local_irq_restore(flags); -+ return 0; -+} -+ -+/*-------------------------------------------------------------------------*/ -+ -+static int pxa27x_ep_set_halt(struct usb_ep *_ep, int value) -+{ -+ struct pxa27x_ep *ep; -+ unsigned long flags; -+ -+ DMSG("%s is called\n", __FUNCTION__); -+ ep = container_of(_ep, struct pxa27x_ep, ep); -+ if (unlikely(!_ep || (!ep->desc && ep->ep.name != ep0name)) -+ || ep->ep_type == USB_ENDPOINT_XFER_ISOC) { -+ DMSG("%s, bad ep\n", __FUNCTION__); -+ return -EINVAL; -+ } -+ if (value == 0) { -+ /* this path (reset toggle+halt) is needed to implement -+ * SET_INTERFACE on normal hardware. but it can't be -+ * done from software on the PXA UDC, and the hardware -+ * forgets to do it as part of SET_INTERFACE automagic. -+ */ -+ DMSG("only host can clear %s halt\n", _ep->name); -+ return -EROFS; -+ } -+ -+ local_irq_save(flags); -+ -+ if (ep->dir_in && ((*ep->reg_udccsr & UDCCSR_FS) == 0 -+ || !list_empty(&ep->queue))) { -+ local_irq_restore(flags); -+ return -EAGAIN; -+ } -+ -+ /* FST bit is the same for control, bulk in, bulk out, interrupt in */ -+ *ep->reg_udccsr = UDCCSR_FST | UDCCSR_FEF; -+ -+ /* ep0 needs special care */ -+ if (!ep->desc) { -+ start_watchdog(ep->dev); -+ ep->dev->req_pending = 0; -+ ep->dev->ep0state = EP0_STALL; -+ LED_EP0_OFF; -+ -+ /* and bulk/intr endpoints like dropping stalls too */ -+ } else { -+ unsigned i; -+ for (i = 0; i < 1000; i += 20) { -+ if (*ep->reg_udccsr & UDCCSR_SST) -+ break; -+ udelay(20); -+ } -+ } -+ local_irq_restore(flags); -+ -+ DBG(DBG_VERBOSE, "%s halt\n", _ep->name); -+ return 0; -+} -+ -+static int pxa27x_ep_fifo_status(struct usb_ep *_ep) -+{ -+ struct pxa27x_ep *ep; -+ -+ ep = container_of(_ep, struct pxa27x_ep, ep); -+ if (!_ep) { -+ DMSG("%s, bad ep\n", __FUNCTION__); -+ return -ENODEV; -+ } -+ /* pxa can't report unclaimed bytes from IN fifos */ -+ if (ep->dir_in) -+ return -EOPNOTSUPP; -+ if (ep->dev->gadget.speed == USB_SPEED_UNKNOWN -+ || (*ep->reg_udccsr & UDCCSR_FS) == 0) -+ return 0; -+ else -+ return (*ep->reg_udcbcr & 0xfff) + 1; -+} -+ -+static void pxa27x_ep_fifo_flush(struct usb_ep *_ep) -+{ -+ struct pxa27x_ep *ep; -+ -+ ep = container_of(_ep, struct pxa27x_ep, ep); -+ if (!_ep || ep->ep.name == ep0name || !list_empty(&ep->queue)) { -+ DMSG("%s, bad ep\n", __FUNCTION__); -+ return; -+ } -+ -+ /* toggle and halt bits stay unchanged */ -+ -+ /* for OUT, just read and discard the FIFO contents. */ -+ if (!ep->dir_in) { -+ while (((*ep->reg_udccsr) & UDCCSR_BNE) != 0) -+ (void)*ep->reg_udcdr; -+ return; -+ } -+ -+ /* most IN status is the same, but ISO can't stall */ -+ *ep->reg_udccsr = UDCCSR_PC | UDCCSR_FST | UDCCSR_TRN -+ | (ep->ep_type == USB_ENDPOINT_XFER_ISOC) -+ ? 0 : UDCCSR_SST; -+} -+ -+static struct usb_ep_ops pxa27x_ep_ops = { -+ .enable = pxa27x_ep_enable, -+ .disable = pxa27x_ep_disable, -+ -+ .alloc_request = pxa27x_ep_alloc_request, -+ .free_request = pxa27x_ep_free_request, -+ -+#warning "CHECK comemnts here" -+ //.alloc_buffer = pxa27x_ep_alloc_buffer, -+ //.free_buffer = pxa27x_ep_free_buffer, -+ -+ .queue = pxa27x_ep_queue, -+ .dequeue = pxa27x_ep_dequeue, -+ -+ .set_halt = pxa27x_ep_set_halt, -+ .fifo_status = pxa27x_ep_fifo_status, -+ .fifo_flush = pxa27x_ep_fifo_flush, -+}; -+ -+/* --------------------------------------------------------------------------- -+ * device-scoped parts of the api to the usb controller hardware -+ * --------------------------------------------------------------------------- -+ */ -+ -+static inline void validate_fifo_size(struct pxa27x_ep *pxa_ep, u8 bmAttributes) -+{ -+ switch (bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) { -+ case USB_ENDPOINT_XFER_CONTROL: -+ pxa_ep->fifo_size = EP0_FIFO_SIZE; -+ break; -+ case USB_ENDPOINT_XFER_ISOC: -+ pxa_ep->fifo_size = ISO_FIFO_SIZE; -+ break; -+ case USB_ENDPOINT_XFER_BULK: -+ pxa_ep->fifo_size = BULK_FIFO_SIZE; -+ break; -+ case USB_ENDPOINT_XFER_INT: -+ pxa_ep->fifo_size = INT_FIFO_SIZE; -+ break; -+ default: -+ break; -+ } -+} -+ -+#define NAME_SIZE 18 -+struct usb_ep *pxa27x_ep_alloc(struct usb_gadget *gadget, -+ struct usb_endpoint_descriptor *desc, int config, -+ int interface, int alt) -+{ -+ u32 tmp; -+ unsigned i; -+ char *name; -+ struct usb_ep *ep = NULL; -+ struct pxa27x_ep *pxa_ep = NULL; -+ struct pxa27x_udc *dev = the_controller; -+ -+ DMSG("pxa27x_config_ep is called\n"); -+ DMSG(" usb endpoint descriptor is:\n" -+ " bLength:%d\n" -+ " bDescriptorType:%x\n" -+ " bEndpointAddress:%x\n" -+ " bmAttributes:%x\n" -+ " wMaxPacketSize:%d\n", -+ desc->bLength, -+ desc->bDescriptorType, desc->bEndpointAddress, -+ desc->bmAttributes, desc->wMaxPacketSize); -+ -+ for (i = 1; i < UDC_EP_NUM; i++) { -+ if (!dev->ep[i].assigned) { -+ pxa_ep = &dev->ep[i]; -+ pxa_ep->assigned = 1; -+ pxa_ep->ep_num = i; -+ break; -+ } -+ } -+ if (unlikely(i == UDC_EP_NUM)) { -+ printk(KERN_ERR __FILE__ ": Failed to find a spare endpoint\n"); -+ return ep; -+ } -+ -+ ep = &pxa_ep->ep; -+ -+ pxa_ep->dev = dev; -+ pxa_ep->desc = desc; -+ pxa_ep->pio_irqs = pxa_ep->dma_irqs = 0; -+ pxa_ep->dma = -1; -+ -+ if (!(desc->bEndpointAddress & 0xF)) -+ desc->bEndpointAddress |= i; -+ -+ if (!(desc->wMaxPacketSize)) { -+ validate_fifo_size(pxa_ep, desc->bmAttributes); -+ desc->wMaxPacketSize = pxa_ep->fifo_size; -+ } else -+ pxa_ep->fifo_size = desc->wMaxPacketSize; -+ -+ pxa_ep->dir_in = (desc->bEndpointAddress & USB_DIR_IN) ? 1 : 0; -+ pxa_ep->ep_type = desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK; -+ pxa_ep->stopped = 1; -+ pxa_ep->dma_con = 0; -+ pxa_ep->config = config; -+ pxa_ep->interface = interface; -+ pxa_ep->aisn = alt; -+ -+ pxa_ep->reg_udccsr = &UDCCSR0 + i; -+ pxa_ep->reg_udcbcr = &UDCBCR0 + i; -+ pxa_ep->reg_udcdr = &UDCDR0 + i; -+ pxa_ep->reg_udccr = &UDCCRA - 1 + i; -+#ifdef USE_DMA -+ pxa_ep->reg_drcmr = &DRCMR24 + i; -+#endif -+ -+ DMSG("udccsr=0x%8x, udcbcr=0x%8x, udcdr=0x%8x," -+ "udccr0=0x%8x\n", -+ (unsigned)pxa_ep->reg_udccsr, -+ (unsigned)pxa_ep->reg_udcbcr, -+ (unsigned)pxa_ep->reg_udcdr, (unsigned)pxa_ep->reg_udccr); -+ -+ /* Configure UDCCR */ -+ tmp = 0; -+ tmp |= (pxa_ep->config << UDCCONR_CN_S) & UDCCONR_CN; -+#if 0 -+ tmp |= (pxa_ep->interface << UDCCONR_IN_S) & UDCCONR_IN; -+ tmp |= (pxa_ep->aisn << UDCCONR_AISN_S) & UDCCONR_AISN; -+#else -+ tmp |= (0 << UDCCONR_IN_S) & UDCCONR_IN; -+ tmp |= (0 << UDCCONR_AISN_S) & UDCCONR_AISN; -+#endif -+ tmp |= (desc->bEndpointAddress << UDCCONR_EN_S) & UDCCONR_EN; -+ tmp |= (pxa_ep->ep_type << UDCCONR_ET_S) & UDCCONR_ET; -+ tmp |= (pxa_ep->dir_in) ? UDCCONR_ED : 0; -+ tmp |= (min(pxa_ep->fifo_size, (unsigned)desc->wMaxPacketSize) -+ << UDCCONR_MPS_S) & UDCCONR_MPS; -+ tmp |= UDCCONR_DE | UDCCONR_EE; -+#if 0 -+ tmp |= UDCCONR_EE; -+#endif -+ -+ *pxa_ep->reg_udccr = tmp; -+ -+#ifdef USE_DMA -+ /* Only BULK use DMA */ -+ if ((pxa_ep->ep_type & USB_ENDPOINT_XFERTYPE_MASK) -+ == USB_ENDPOINT_XFER_BULK) -+ *pxa_ep->reg_udccsr = UDCCSR_DME; -+#endif -+ -+ DMSG("UDCCR: 0x%p is 0x%x\n", pxa_ep->reg_udccr, *pxa_ep->reg_udccr); -+ -+ /* Fill ep name */ -+ name = kmalloc(NAME_SIZE, GFP_KERNEL); -+ if (!name) { -+ printk(KERN_ERR "%s: Error\n", __FUNCTION__); -+ return NULL; -+ } -+ -+ switch (pxa_ep->ep_type) { -+ case USB_ENDPOINT_XFER_BULK: -+ sprintf(name, "Bulk-%s-%d", (pxa_ep->dir_in ? "in" : "out"), i); -+ break; -+ case USB_ENDPOINT_XFER_INT: -+ sprintf(name, "Interrupt-%s-%d", (pxa_ep->dir_in ? -+ "in" : "out"), i); -+ break; -+ default: -+ sprintf(name, "endpoint-%s-%d", (pxa_ep->dir_in ? -+ "in" : "out"), i); -+ break; -+ } -+ ep->name = name; -+ -+ ep->ops = &pxa27x_ep_ops; -+ ep->maxpacket = min((ushort) pxa_ep->fifo_size, desc->wMaxPacketSize); -+ -+ list_add_tail(&ep->ep_list, &gadget->ep_list); -+ return ep; -+} -+ -+static int pxa27x_udc_get_frame(struct usb_gadget *_gadget) -+{ -+ return (UDCFNR & 0x3FF); -+} -+ -+static int pxa27x_udc_wakeup(struct usb_gadget *_gadget) -+{ -+ /* host may not have enabled remote wakeup */ -+ if ((UDCCR & UDCCR_DWRE) == 0) -+ return -EHOSTUNREACH; -+ udc_set_mask_UDCCR(UDCCR_UDR); -+ return 0; -+} -+ -+static const struct usb_gadget_ops pxa27x_udc_ops = { -+ .ep_alloc = pxa27x_ep_alloc, -+ .get_frame = pxa27x_udc_get_frame, -+ .wakeup = pxa27x_udc_wakeup, -+ /* current versions must always be self-powered */ -+}; -+ -+/*-------------------------------------------------------------------------*/ -+ -+#ifdef UDC_PROC_FILE -+ -+static const char proc_node_name[] = "driver/udc"; -+ -+static int -+udc_proc_read(char *page, char **start, off_t off, int count, -+ int *eof, void *_dev) -+{ -+ char *buf = page; -+ struct pxa27x_udc *dev = _dev; -+ char *next = buf; -+ unsigned size = count; -+ unsigned long flags; -+ int i, t; -+ u32 tmp; -+ -+ if (off != 0) -+ return 0; -+ -+ local_irq_save(flags); -+ -+ /* basic device status */ -+ t = scnprintf(next, size, DRIVER_DESC "\n" -+ "%s version: %s\nGadget driver: %s\n", -+ driver_name, DRIVER_VERSION SIZE_STR DMASTR, -+ dev->driver ? dev->driver->driver.name : "(none)"); -+ size -= t; -+ next += t; -+ -+ /* registers for device and ep0 */ -+ t = scnprintf(next, size, -+ "uicr %02X.%02X, usir %02X.%02x, ufnr %02X\n", -+ UDCICR1, UDCICR0, UDCISR1, UDCISR0, UDCFNR); -+ size -= t; -+ next += t; -+ -+ tmp = UDCCR; -+ t = scnprintf(next, size, -+ "udccr %02X =%s%s%s%s%s%s%s%s%s%s, con=%d,inter=%d,altinter=%d\n", -+ tmp, (tmp & UDCCR_OEN) ? " oen" : "", -+ (tmp & UDCCR_AALTHNP) ? " aalthnp" : "", -+ (tmp & UDCCR_AHNP) ? " rem" : "", -+ (tmp & UDCCR_BHNP) ? " rstir" : "", -+ (tmp & UDCCR_DWRE) ? " dwre" : "", -+ (tmp & UDCCR_SMAC) ? " smac" : "", -+ (tmp & UDCCR_EMCE) ? " emce" : "", -+ (tmp & UDCCR_UDR) ? " udr" : "", -+ (tmp & UDCCR_UDA) ? " uda" : "", -+ (tmp & UDCCR_UDE) ? " ude" : "", -+ (tmp & UDCCR_ACN) >> UDCCR_ACN_S, -+ (tmp & UDCCR_AIN) >> UDCCR_AIN_S, -+ (tmp & UDCCR_AAISN) >> UDCCR_AAISN_S); -+ -+ size -= t; -+ next += t; -+ -+ tmp = UDCCSR0; -+ t = scnprintf(next, size, -+ "udccsr0 %02X =%s%s%s%s%s%s%s\n", tmp, -+ (tmp & UDCCSR0_SA) ? " sa" : "", -+ (tmp & UDCCSR0_RNE) ? " rne" : "", -+ (tmp & UDCCSR0_FST) ? " fst" : "", -+ (tmp & UDCCSR0_SST) ? " sst" : "", -+ (tmp & UDCCSR0_DME) ? " dme" : "", -+ (tmp & UDCCSR0_IPR) ? " ipr" : "", -+ (tmp & UDCCSR0_OPC) ? " opc" : ""); -+ size -= t; -+ next += t; -+ -+ if (!dev->driver) -+ goto done; -+ -+ t = scnprintf(next, size, "ep0 IN %lu/%lu, OUT %lu/%lu\nirqs %lu\n\n", -+ dev->stats.write.bytes, dev->stats.write.ops, -+ dev->stats.read.bytes, dev->stats.read.ops, -+ dev->stats.irqs); -+ size -= t; -+ next += t; -+ -+ /* dump endpoint queues */ -+ for (i = 0; i < UDC_EP_NUM; i++) { -+ struct pxa27x_ep *ep = &dev->ep[i]; -+ struct pxa27x_request *req; -+ int t; -+ -+ if (i != 0) { -+ const struct usb_endpoint_descriptor *d; -+ -+ d = ep->desc; -+ if (!d) -+ continue; -+ tmp = *dev->ep[i].reg_udccsr; -+ t = scnprintf(next, size, -+ "%s max %d %s udccs %02x udccr:0x%x\n", -+ ep->ep.name, -+ le16_to_cpu(d->wMaxPacketSize), -+ (ep->dma >= 0) ? "dma" : "pio", tmp, -+ *dev->ep[i].reg_udccr); -+ /* TODO translate all five groups of udccs bits! */ -+ -+ } else /* ep0 should only have one transfer queued */ -+ t = scnprintf(next, size, "ep0 max 16 pio irqs %lu\n", -+ ep->pio_irqs); -+ if (t <= 0 || t > size) -+ goto done; -+ size -= t; -+ next += t; -+ -+ if (list_empty(&ep->queue)) { -+ t = scnprintf(next, size, "\t(nothing queued)\n"); -+ if (t <= 0 || t > size) -+ goto done; -+ size -= t; -+ next += t; -+ continue; -+ } -+ list_for_each_entry(req, &ep->queue, queue) { -+#ifdef USE_DMA -+ if (ep->dma >= 0 && req->queue.prev == &ep->queue) -+ t = scnprintf(next, size, -+ "\treq %p len %d/%d " -+ "buf %p (dma%d dcmd %08x)\n", -+ &req->req, req->req.actual, -+ req->req.length, req->req.buf, -+ ep->dma, DCMD(ep->dma) -+ /* low 13 bits == bytes-to-go */ -+ ); -+ else -+#endif -+ t = scnprintf(next, size, -+ "\treq %p len %d/%d buf %p\n", -+ &req->req, req->req.actual, -+ req->req.length, req->req.buf); -+ if (t <= 0 || t > size) -+ goto done; -+ size -= t; -+ next += t; -+ } -+ } -+ -+ done: -+ local_irq_restore(flags); -+ *eof = 1; -+ return count - size; -+} -+ -+#define create_proc_files() \ -+ create_proc_read_entry(proc_node_name, 0, NULL, udc_proc_read, dev) -+#define remove_proc_files() \ -+ remove_proc_entry(proc_node_name, NULL) -+ -+#else /* !UDC_PROC_FILE */ -+#define create_proc_files() do {} while (0) -+#define remove_proc_files() do {} while (0) -+ -+#endif /* UDC_PROC_FILE */ -+ -+/* "function" sysfs attribute */ -+static ssize_t -+show_function(struct device *_dev, struct device_attribute *attr, char *buf) -+{ -+ struct pxa27x_udc *dev = dev_get_drvdata(_dev); -+ -+ if (!dev->driver -+ || !dev->driver->function -+ || strlen(dev->driver->function) > PAGE_SIZE) -+ return 0; -+ return scnprintf(buf, PAGE_SIZE, "%s\n", dev->driver->function); -+} -+ -+static DEVICE_ATTR(function, S_IRUGO, show_function, NULL); -+ -+/*-------------------------------------------------------------------------*/ -+ -+/* -+ * udc_disable - disable USB device controller -+ */ -+static void udc_disable(struct pxa27x_udc *dev) -+{ -+ UDCICR0 = 0x00000000; -+ UDCICR1 = 0x00000000; -+ -+ udc_clear_mask_UDCCR(UDCCR_UDE); -+ -+ /* Disable clock for USB device */ -+ pxa_set_cken(CKEN_USB, 0); -+ -+ ep0_idle(dev); -+ dev->gadget.speed = USB_SPEED_UNKNOWN; -+ -+ pullup_off(); -+} -+ -+/* -+ * udc_reinit - initialize software state -+ */ -+static void udc_reinit(struct pxa27x_udc *dev) -+{ -+ u32 i; -+ -+ dev->ep0state = EP0_IDLE; -+ -+ /* basic endpoint records init */ -+ for (i = 0; i < UDC_EP_NUM; i++) { -+ struct pxa27x_ep *ep = &dev->ep[i]; -+ -+ ep->stopped = 0; -+ ep->pio_irqs = ep->dma_irqs = 0; -+ } -+ dev->configuration = 0; -+ dev->interface = 0; -+ dev->alternate = 0; -+ /* the rest was statically initialized, and is read-only */ -+} -+ -+/* until it's enabled, this UDC should be completely invisible -+ * to any USB host. -+ */ -+static void udc_enable(struct pxa27x_udc *dev) -+{ -+ udc_clear_mask_UDCCR(UDCCR_UDE); -+ -+ /* Enable clock for USB device */ -+ pxa_set_cken(CKEN_USB, 1); -+ -+ UDCICR0 = UDCICR1 = 0; -+ -+ ep0_idle(dev); -+ dev->gadget.speed = USB_SPEED_FULL; -+ dev->stats.irqs = 0; -+ -+ udc_set_mask_UDCCR(UDCCR_UDE); -+ udelay(2); -+ if (UDCCR & UDCCR_EMCE) { -+ printk(KERN_ERR -+ ": There are error in configuration, udc disabled\n"); -+ } -+ -+ /* caller must be able to sleep in order to cope -+ * with startup transients. -+ */ -+ msleep(100); -+ -+ /* enable suspend/resume and reset irqs */ -+ UDCICR1 = UDCICR1_IECC | UDCICR1_IERU | UDCICR1_IESU | UDCICR1_IERS; -+ -+ /* enable ep0 irqs */ -+ UDCICR0 = UDCICR_INT(0, UDCICR_INT_MASK); -+#if 0 -+ for (i = 1; i < UDC_EP_NUM; i++) { -+ if (dev->ep[i].assigned) -+ pio_irq_enable(i); -+ } -+#endif -+ -+ pullup_on(); -+} -+ -+/* when a driver is successfully registered, it will receive -+ * control requests including set_configuration(), which enables -+ * non-control requests. then usb traffic follows until a -+ * disconnect is reported. then a host may connect again, or -+ * the driver might get unbound. -+ */ -+int usb_gadget_register_driver(struct usb_gadget_driver *driver) -+{ -+ struct pxa27x_udc *dev = the_controller; -+ int retval; -+ -+ DMSG("dev=0x%x, driver=0x%x, speed=%d, " -+ "bind=0x%x, unbind=0x%x, disconnect=0x%x, setup=0x%x\n", -+ (unsigned)dev, (unsigned)driver, driver->speed, -+ (unsigned)driver->bind, (unsigned)driver->unbind, -+ (unsigned)driver->disconnect, (unsigned)driver->setup); -+ -+ if (!driver || driver->speed != USB_SPEED_FULL -+ || !driver->bind -+ || !driver->unbind || !driver->disconnect || !driver->setup) -+ return -EINVAL; -+ if (!dev) -+ return -ENODEV; -+ if (dev->driver) -+ return -EBUSY; -+ -+ /* first hook up the driver ... */ -+ dev->driver = driver; -+ dev->gadget.dev.driver = &driver->driver; -+ -+ retval = device_add(&dev->gadget.dev); -+ if (retval) { -+ DMSG("unable to add device for %s --> error %d\n", -+ driver->driver.name, retval); -+ goto device_add_error; -+ } -+ retval = driver->bind(&dev->gadget); -+ if (retval) { -+ DMSG("bind to driver %s --> error %d\n", -+ driver->driver.name, retval); -+ goto device_bind_error; -+ } -+ retval = device_create_file(dev->dev, &dev_attr_function); -+ if (retval) { -+ DMSG("unable to create file for %s --> error %d\n", -+ driver->driver.name, retval); -+ goto create_file_error; -+ } -+ -+ /* ... then enable host detection and ep0; and we're ready -+ * for set_configuration as well as eventual disconnect. -+ * NOTE: this shouldn't power up until later. -+ */ -+ DMSG("registered gadget driver '%s'\n", driver->driver.name); -+ udc_enable(dev); -+ dump_state(dev); -+ -+ return 0; -+ -+ create_file_error: -+ driver->unbind(&dev->gadget); -+ -+ device_bind_error: -+ device_del(&dev->gadget.dev); -+ -+ device_add_error: -+ dev->driver = 0; -+ dev->gadget.dev.driver = 0; -+ -+ return retval; -+} -+ -+EXPORT_SYMBOL(usb_gadget_register_driver); -+ -+static void -+stop_activity(struct pxa27x_udc *dev, struct usb_gadget_driver *driver) -+{ -+ int i; -+ -+ DMSG("Trace path 1\n"); -+ /* don't disconnect drivers more than once */ -+ if (dev->gadget.speed == USB_SPEED_UNKNOWN) -+ driver = 0; -+ dev->gadget.speed = USB_SPEED_UNKNOWN; -+ -+ /* prevent new request submissions, kill any outstanding requests */ -+ for (i = 0; i < UDC_EP_NUM; i++) { -+ struct pxa27x_ep *ep = &dev->ep[i]; -+ -+ ep->stopped = 1; -+ nuke(ep, -ESHUTDOWN); -+ } -+ del_timer_sync(&dev->timer); -+ -+ /* report disconnect; the driver is already quiesced */ -+ if (driver) -+ driver->disconnect(&dev->gadget); -+ -+ /* re-init driver-visible data structures */ -+ udc_reinit(dev); -+} -+ -+int usb_gadget_unregister_driver(struct usb_gadget_driver *driver) -+{ -+ struct pxa27x_udc *dev = the_controller; -+ -+ if (!dev) -+ return -ENODEV; -+ if (!driver || driver != dev->driver) -+ return -EINVAL; -+ -+ local_irq_disable(); -+ udc_disable(dev); -+ stop_activity(dev, driver); -+ local_irq_enable(); -+ -+ driver->unbind(&dev->gadget); -+ dev->driver = 0; -+ -+ device_del(&dev->gadget.dev); -+ device_remove_file(dev->dev, &dev_attr_function); -+ -+ DMSG("unregistered gadget driver '%s'\n", driver->driver.name); -+ dump_state(dev); -+ return 0; -+} -+ -+EXPORT_SYMBOL(usb_gadget_unregister_driver); -+ -+#ifndef enable_disconnect_irq -+#define enable_disconnect_irq() do {} while (0) -+#define disable_disconnect_irq() do {} while (0) -+#endif -+ -+/*-------------------------------------------------------------------------*/ -+ -+static inline void clear_ep_state(struct pxa27x_udc *dev) -+{ -+ unsigned i; -+ -+ /* hardware SET_{CONFIGURATION,INTERFACE} automagic resets endpoint -+ * fifos, and pending transactions mustn't be continued in any case. -+ */ -+ for (i = 1; i < UDC_EP_NUM; i++) -+ nuke(&dev->ep[i], -ECONNABORTED); -+} -+ -+static void udc_watchdog(unsigned long _dev) -+{ -+ struct pxa27x_udc *dev = (void *)_dev; -+ -+ local_irq_disable(); -+ if (dev->ep0state == EP0_STALL -+ && (UDCCSR0 & UDCCSR0_FST) == 0 && (UDCCSR0 & UDCCSR0_SST) == 0) { -+ UDCCSR0 = UDCCSR0_FST | UDCCSR0_FTF; -+ DBG(DBG_VERBOSE, "ep0 re-stall\n"); -+ start_watchdog(dev); -+ } -+ local_irq_enable(); -+} -+ -+static void handle_ep0(struct pxa27x_udc *dev) -+{ -+ u32 udccsr0 = UDCCSR0; -+ struct pxa27x_ep *ep = &dev->ep[0]; -+ struct pxa27x_request *req; -+ union { -+ struct usb_ctrlrequest r; -+ u8 raw[8]; -+ u32 word[2]; -+ } u; -+ -+ if (list_empty(&ep->queue)) -+ req = 0; -+ else -+ req = list_entry(ep->queue.next, struct pxa27x_request, queue); -+ -+ /* clear stall status */ -+ if (udccsr0 & UDCCSR0_SST) { -+ nuke(ep, -EPIPE); -+ UDCCSR0 = UDCCSR0_SST; -+ del_timer(&dev->timer); -+ ep0_idle(dev); -+ } -+ -+ /* previous request unfinished? non-error iff back-to-back ... */ -+ if ((udccsr0 & UDCCSR0_SA) != 0 && dev->ep0state != EP0_IDLE) { -+ nuke(ep, 0); -+ del_timer(&dev->timer); -+ ep0_idle(dev); -+ } -+ -+ switch (dev->ep0state) { -+ case EP0_NO_ACTION: -+ printk(KERN_INFO "%s: Busy\n", __FUNCTION__); -+ /*Fall through */ -+ case EP0_IDLE: -+ /* late-breaking status? */ -+ udccsr0 = UDCCSR0; -+ -+ /* start control request? */ -+ if (likely((udccsr0 & (UDCCSR0_OPC | UDCCSR0_SA | UDCCSR0_RNE)) -+ == (UDCCSR0_OPC | UDCCSR0_SA | UDCCSR0_RNE))) { -+ int i; -+ -+ nuke(ep, -EPROTO); -+ /* read SETUP packet */ -+ for (i = 0; i < 2; i++) { -+ if (unlikely(!(UDCCSR0 & UDCCSR0_RNE))) { -+ bad_setup: -+ DMSG("SETUP %d!\n", i); -+ goto stall; -+ } -+ u.word[i] = UDCDR0; -+ } -+ if (unlikely((UDCCSR0 & UDCCSR0_RNE) != 0)) -+ goto bad_setup; -+ -+ le16_to_cpus(&u.r.wValue); -+ le16_to_cpus(&u.r.wIndex); -+ le16_to_cpus(&u.r.wLength); -+ -+ LED_EP0_ON; -+ -+ DBG(DBG_VERBOSE, "SETUP %02x.%02x v%04x i%04x l%04x\n", -+ u.r.bRequestType, u.r.bRequest, -+ u.r.wValue, u.r.wIndex, u.r.wLength); -+ /* cope with automagic for some standard requests. */ -+ dev->req_std = (u.r.bRequestType & USB_TYPE_MASK) -+ == USB_TYPE_STANDARD; -+ dev->req_config = 0; -+ dev->req_pending = 1; -+#if 0 -+ switch (u.r.bRequest) { -+ /* hardware was supposed to hide this */ -+ case USB_REQ_SET_CONFIGURATION: -+ case USB_REQ_SET_INTERFACE: -+ case USB_REQ_SET_ADDRESS: -+ printk(KERN_ERR "Should not come here\n"); -+ break; -+ } -+ -+#endif -+ if (u.r.bRequestType & USB_DIR_IN) -+ dev->ep0state = EP0_IN_DATA_PHASE; -+ else -+ dev->ep0state = EP0_OUT_DATA_PHASE; -+ i = dev->driver->setup(&dev->gadget, &u.r); -+ -+ if (i < 0) { -+ /* hardware automagic preventing STALL... */ -+ if (dev->req_config) { -+ /* hardware sometimes neglects to tell -+ * tell us about config change events, -+ * so later ones may fail... -+ */ -+ WARN("config change %02x fail %d?\n", -+ u.r.bRequest, i); -+ return; -+ /* TODO experiment: if has_cfr, -+ * hardware didn't ACK; maybe we -+ * could actually STALL! -+ */ -+ } -+ DBG(DBG_VERBOSE, "protocol STALL, " -+ "%02x err %d\n", UDCCSR0, i); -+ stall: -+ /* the watchdog timer helps deal with cases -+ * where udc seems to clear FST wrongly, and -+ * then NAKs instead of STALLing. -+ */ -+ ep0start(dev, UDCCSR0_FST | UDCCSR0_FTF, -+ "stall"); -+ start_watchdog(dev); -+ dev->ep0state = EP0_STALL; -+ LED_EP0_OFF; -+ -+ /* deferred i/o == no response yet */ -+ } else if (dev->req_pending) { -+ if (likely(dev->ep0state == EP0_IN_DATA_PHASE -+ || dev->req_std || u.r.wLength)) -+ ep0start(dev, 0, "defer"); -+ else -+ ep0start(dev, UDCCSR0_IPR, "defer/IPR"); -+ } -+ -+ /* expect at least one data or status stage irq */ -+ return; -+ -+ } else { -+ /* some random early IRQ: -+ * - we acked FST -+ * - IPR cleared -+ * - OPC got set, without SA (likely status stage) -+ */ -+ UDCCSR0 = udccsr0 & (UDCCSR0_SA | UDCCSR0_OPC); -+ } -+ break; -+ case EP0_IN_DATA_PHASE: /* GET_DESCRIPTOR etc */ -+ if (udccsr0 & UDCCSR0_OPC) { -+ UDCCSR0 = UDCCSR0_OPC | UDCCSR0_FTF; -+ DBG(DBG_VERBOSE, "ep0in premature status\n"); -+ if (req) -+ done(ep, req, 0); -+ ep0_idle(dev); -+ } else { /* irq was IPR clearing */ -+ -+ if (req) { -+ /* this IN packet might finish the request */ -+ (void)write_ep0_fifo(ep, req); -+ } /* else IN token before response was written */ -+ } -+ break; -+ case EP0_OUT_DATA_PHASE: /* SET_DESCRIPTOR etc */ -+ if (udccsr0 & UDCCSR0_OPC) { -+ if (req) { -+ /* this OUT packet might finish the request */ -+ if (read_ep0_fifo(ep, req)) -+ done(ep, req, 0); -+ /* else more OUT packets expected */ -+ } /* else OUT token before read was issued */ -+ } else { /* irq was IPR clearing */ -+ -+ DBG(DBG_VERBOSE, "ep0out premature status\n"); -+ if (req) -+ done(ep, req, 0); -+ ep0_idle(dev); -+ } -+ break; -+ case EP0_STALL: -+ UDCCSR0 = UDCCSR0_FST; -+ break; -+ } -+ UDCISR0 = UDCISR_INT(0, UDCISR_INT_MASK); -+} -+ -+static void handle_ep(struct pxa27x_ep *ep) -+{ -+ struct pxa27x_request *req; -+ int completed; -+ u32 udccsr = 0; -+ -+ DMSG("%s is called\n", __FUNCTION__); -+ do { -+ completed = 0; -+ if (likely(!list_empty(&ep->queue))) { -+ req = list_entry(ep->queue.next, -+ struct pxa27x_request, queue); -+ } else -+ req = 0; -+ -+#if 0 -+ udccsr = *ep->reg_udccsr; -+#endif -+ DMSG("%s: req:%p, udcisr0:0x%x udccsr %p:0x%x\n", __FUNCTION__, -+ req, UDCISR0, ep->reg_udccsr, *ep->reg_udccsr); -+ if (unlikely(ep->dir_in)) { -+ udccsr = (UDCCSR_SST | UDCCSR_TRN) & *ep->reg_udccsr; -+ if (unlikely(udccsr)) -+ *ep->reg_udccsr = udccsr; -+ -+ if (req && likely((*ep->reg_udccsr & UDCCSR_FS) != 0)) -+ completed = write_fifo(ep, req); -+ -+ } else { -+ udccsr = (UDCCSR_SST | UDCCSR_TRN) & *ep->reg_udccsr; -+ if (unlikely(udccsr)) -+ *ep->reg_udccsr = udccsr; -+ -+ /* fifos can hold packets, ready for reading... */ -+ if (likely(req)) { -+ completed = read_fifo(ep, req); -+ } else { -+ pio_irq_disable(ep->ep_num); -+ *ep->reg_udccsr = UDCCSR_FEF; -+ DMSG("%s: no req for out data\n", __FUNCTION__); -+ } -+ } -+ ep->pio_irqs++; -+ } while (completed); -+} -+ -+static void pxa27x_change_configuration(struct pxa27x_udc *dev) -+{ -+ struct usb_ctrlrequest req; -+ -+ req.bRequestType = 0; -+ req.bRequest = USB_REQ_SET_CONFIGURATION; -+ req.wValue = dev->configuration; -+ req.wIndex = 0; -+ req.wLength = 0; -+ -+ dev->ep0state = EP0_NO_ACTION; -+ dev->driver->setup(&dev->gadget, &req); -+ -+} -+ -+static void pxa27x_change_interface(struct pxa27x_udc *dev) -+{ -+ struct usb_ctrlrequest req; -+ -+ req.bRequestType = USB_RECIP_INTERFACE; -+ req.bRequest = USB_REQ_SET_INTERFACE; -+ req.wValue = dev->alternate; -+ req.wIndex = dev->interface; -+ req.wLength = 0; -+ -+ dev->ep0state = EP0_NO_ACTION; -+ dev->driver->setup(&dev->gadget, &req); -+} -+ -+/* -+ * pxa27x_udc_irq - interrupt handler -+ * -+ * avoid delays in ep0 processing. the control handshaking isn't always -+ * under software control (pxa250c0 and the pxa255 are better), and delays -+ * could cause usb protocol errors. -+ */ -+static irqreturn_t pxa27x_udc_irq(int irq, void *_dev) -+{ -+ struct pxa27x_udc *dev = _dev; -+ int handled; -+ -+ dev->stats.irqs++; -+ HEX_DISPLAY(dev->stats.irqs); -+ -+ DBG(DBG_VERBOSE, "Interrupt, UDCISR0:0x%08x, UDCISR1:0x%08x, " -+ "UDCCR:0x%08x\n", UDCISR0, UDCISR1, UDCCR); -+ -+ do { -+ u32 udcir = UDCISR1 & 0xF8000000; -+ -+ handled = 0; -+ -+ /* SUSpend Interrupt Request */ -+ if (unlikely(udcir & UDCISR1_IRSU)) { -+ UDCISR1 = UDCISR1_IRSU; -+ handled = 1; -+ DBG(DBG_VERBOSE, "USB suspend\n"); -+ if (dev->gadget.speed != USB_SPEED_UNKNOWN -+ && dev->driver && dev->driver->suspend) -+ dev->driver->suspend(&dev->gadget); -+ ep0_idle(dev); -+ } -+ -+ /* RESume Interrupt Request */ -+ if (unlikely(udcir & UDCISR1_IRRU)) { -+ UDCISR1 = UDCISR1_IRRU; -+ handled = 1; -+ DBG(DBG_VERBOSE, "USB resume\n"); -+ -+ if (dev->gadget.speed != USB_SPEED_UNKNOWN -+ && dev->driver && dev->driver->resume) -+ dev->driver->resume(&dev->gadget); -+ } -+ -+ if (unlikely(udcir & UDCISR1_IRCC)) { -+ unsigned config, interface, alternate; -+ -+ handled = 1; -+ DBG(DBG_VERBOSE, "USB SET_CONFIGURATION or " -+ "SET_INTERFACE command received\n"); -+ -+ UDCCR |= UDCCR_SMAC; -+ -+ config = (UDCCR & UDCCR_ACN) >> UDCCR_ACN_S; -+ -+ if (dev->configuration != config) { -+ dev->configuration = config; -+ pxa27x_change_configuration(dev); -+ } -+ -+ interface = (UDCCR & UDCCR_AIN) >> UDCCR_AIN_S; -+ alternate = (UDCCR & UDCCR_AAISN) >> UDCCR_AAISN_S; -+ -+ if ((dev->configuration != interface) || -+ (dev->alternate != alternate)) { -+ dev->interface = config; -+ dev->alternate = alternate; -+ pxa27x_change_interface(dev); -+ } -+ -+ UDCISR1 = UDCISR1_IRCC; -+ DMSG("%s: con:%d,inter:%d,alt:%d\n", -+ __FUNCTION__, config, interface, alternate); -+ } -+ -+ /* ReSeT Interrupt Request - USB reset */ -+ if (unlikely(udcir & UDCISR1_IRRS)) { -+ UDCISR1 = UDCISR1_IRRS; -+ handled = 1; -+ -+ if ((UDCCR & UDCCR_UDA) == 0) { -+ DBG(DBG_VERBOSE, "SB reset start\n"); -+ -+ /* reset driver and endpoints, -+ * in case that's not yet done -+ */ -+ stop_activity(dev, dev->driver); -+ -+ } -+ INFO("USB reset\n"); -+ dev->gadget.speed = USB_SPEED_FULL; -+ memset(&dev->stats, 0, sizeof dev->stats); -+ -+ } else { -+ u32 udcisr0 = UDCISR0; -+ u32 udcisr1 = UDCISR1 & 0xFFFF; -+ int i; -+ -+ if (unlikely(!udcisr0 && !udcisr1)) -+ continue; -+ -+ DBG(DBG_VERY_NOISY, "irq %02x.%02x\n", udcisr1, -+ udcisr0); -+ -+ /* control traffic */ -+ if (udcisr0 & UDCISR0_IR0) { -+ dev->ep[0].pio_irqs++; -+ handle_ep0(dev); -+ handled = 1; -+ } -+ -+ udcisr0 >>= 2; -+ /* endpoint data transfers */ -+ for (i = 1; udcisr0 != 0 && i < 16; udcisr0 >>= 2, i++) { -+ UDCISR0 = UDCISR_INT(i, UDCISR_INT_MASK); -+ -+ if (udcisr0 & UDC_INT_FIFOERROR) -+ printk(KERN_ERR -+ " Endpoint %d Fifo error\n", i); -+ if (udcisr0 & UDC_INT_PACKETCMP) { -+ handle_ep(&dev->ep[i]); -+ handled = 1; -+ } -+ -+ } -+ -+ for (i = 0; udcisr1 != 0 && i < 8; udcisr1 >>= 2, i++) { -+ UDCISR1 = UDCISR_INT(i, UDCISR_INT_MASK); -+ -+ if (udcisr1 & UDC_INT_FIFOERROR) { -+ printk(KERN_ERR -+ " Endpoint %d fifo error\n", -+ (i + 16)); -+ } -+ -+ if (udcisr1 & UDC_INT_PACKETCMP) { -+ handle_ep(&dev->ep[i + 16]); -+ handled = 1; -+ } -+ } -+ } -+ -+ /* we could also ask for 1 msec SOF (SIR) interrupts */ -+ -+ } while (handled); -+ return IRQ_HANDLED; -+} -+ -+static void udc_init_ep(struct pxa27x_udc *dev) -+{ -+ int i; -+ -+ INIT_LIST_HEAD(&dev->gadget.ep_list); -+ INIT_LIST_HEAD(&dev->gadget.ep0->ep_list); -+ -+ for (i = 0; i < UDC_EP_NUM; i++) { -+ struct pxa27x_ep *ep = &dev->ep[i]; -+ -+ ep->dma = -1; -+ if (i != 0) { -+ memset(ep, 0, sizeof(*ep)); -+ } -+ INIT_LIST_HEAD(&ep->queue); -+ } -+} -+ -+/*-------------------------------------------------------------------------*/ -+ -+static void nop_release(struct device *dev) -+{ -+ DMSG("%s %s\n", __FUNCTION__, dev->bus_id); -+} -+ -+/* this uses load-time allocation and initialization (instead of -+ * doing it at run-time) to save code, eliminate fault paths, and -+ * be more obviously correct. -+ */ -+static struct pxa27x_udc memory = { -+ .gadget = { -+ .ops = &pxa27x_udc_ops, -+ .ep0 = &memory.ep[0].ep, -+ .name = driver_name, -+ .dev = { -+ .bus_id = "gadget", -+ .release = nop_release, -+ }, -+ }, -+ -+ /* control endpoint */ -+ .ep[0] = { -+ .ep = { -+ .name = ep0name, -+ .ops = &pxa27x_ep_ops, -+ .maxpacket = EP0_FIFO_SIZE, -+ }, -+ .dev = &memory, -+ .reg_udccsr = &UDCCSR0, -+ .reg_udcdr = &UDCDR0, -+ } -+}; -+ -+#define CP15R0_VENDOR_MASK 0xffffe000 -+ -+#define CP15R0_XSCALE_VALUE 0x69054000 /* intel/arm/xscale */ -+ -+/* -+ * probe - binds to the platform device -+ */ -+static int __init pxa27x_udc_probe(struct platform_device *pdev) -+{ -+ struct device *dev = &pdev->dev; -+ struct pxa27x_udc *udc = &memory; -+ int irq, retval; -+ u32 chiprev; -+ -+ /* insist on Intel/ARM/XScale */ -+ asm("mrc%? p15, 0, %0, c0, c0":"=r"(chiprev)); -+ if ((chiprev & CP15R0_VENDOR_MASK) != CP15R0_XSCALE_VALUE) { -+ printk(KERN_ERR "%s: not XScale!\n", driver_name); -+ return -ENODEV; -+ } -+ -+ irq = platform_get_irq(pdev, 0); -+ if (irq < 0) -+ return -ENODEV; -+ pr_debug("%s: IRQ %d\n", driver_name, irq); -+ -+ /* other non-static parts of init */ -+ udc->dev = dev; -+ udc->mach = dev->platform_data; -+ -+ /* Disable irq, erase old events and disable the pull up on the bus */ -+ UDCICR0 = 0x00000000; -+ UDCICR1 = 0x00000000; -+ UDCISR0 = 0xffffffff; -+ UDCISR1 = 0xffffffff; -+ if (udc->mach->gpio_pullup) { -+ if ((retval = gpio_request(udc->mach->gpio_pullup, -+ "pca2xx_udc GPIO PULLUP"))) { -+ dev_dbg(&pdev->dev, -+ "can't get pullup gpio %d, err: %d\n", -+ udc->mach->gpio_pullup, retval); -+ if (udc->mach->gpio_vbus) -+ gpio_free(udc->mach->gpio_vbus); -+ return -EBUSY; -+ } -+ gpio_direction_output(udc->mach->gpio_pullup, 0); -+ } -+ -+ init_timer(&udc->timer); -+ udc->timer.function = udc_watchdog; -+ udc->timer.data = (unsigned long)udc; -+ -+ device_initialize(&udc->gadget.dev); -+ udc->gadget.dev.parent = dev; -+ udc->gadget.dev.dma_mask = dev->dma_mask; -+ -+ the_controller = udc; -+ dev_set_drvdata(dev, udc); -+ -+ udc_disable(udc); -+ udc_init_ep(udc); -+ udc_reinit(udc); -+ -+ /* irq setup after old hardware state is cleaned up */ -+ retval = request_irq(irq, pxa27x_udc_irq, 0, driver_name, udc); -+ if (retval != 0) { -+ printk(KERN_ERR "%s: can't get irq %i, err %d\n", -+ driver_name, irq, retval); -+ return -EBUSY; -+ } -+ udc->got_irq = 1; -+ -+ create_proc_files(); -+ -+ return 0; -+} -+ -+static void pxa27x_udc_shutdown(struct platform_device *_dev) -+{ -+ pullup_off(); -+} -+ -+static int __exit pxa27x_udc_remove(struct platform_device *pdev) -+{ -+ struct device *dev = &pdev->dev; -+ struct pxa27x_udc *udc = dev->driver_data; -+ -+ udc_disable(udc); -+ remove_proc_files(); -+ usb_gadget_unregister_driver(udc->driver); -+ -+ if (udc->got_irq) { -+ free_irq(platform_get_irq(pdev, 0), udc); -+ udc->got_irq = 0; -+ } -+ if (machine_is_lubbock() && udc->got_disc) { -+ free_irq(LUBBOCK_USB_DISC_IRQ, udc); -+ udc->got_disc = 0; -+ } -+ dev_set_drvdata(dev, 0); -+ the_controller = 0; -+ return 0; -+} -+ -+#ifdef CONFIG_PM -+static int pxa27x_udc_suspend(struct platform_device *pdev, pm_message_t state) -+{ -+ struct device *dev = &pdev->dev; -+ struct pxa27x_udc *udc = dev->driver_data; -+ int i; -+ -+ DMSG("%s will go into SUSPEND_POWER_DOWN\n", __FUNCTION__); -+ udc->udccsr0 = UDCCSR0; -+ for (i = 1; (i < UDC_EP_NUM); i++) { -+ if (udc->ep[i].assigned) { -+ struct pxa27x_ep *ep = &udc->ep[i]; -+ -+ ep->udccsr_value = *ep->reg_udccsr; -+ ep->udccr_value = *ep->reg_udccr; -+ DMSG("EP%d, udccsr:0x%x, udccr:0x%x\n", -+ i, *ep->reg_udccsr, *ep->reg_udccr); -+ } -+ } -+ -+ udc_clear_mask_UDCCR(UDCCR_UDE); -+ pxa_set_cken(CKEN_USB, 0); -+ -+ return 0; -+} -+ -+static int pxa27x_udc_resume(struct platform_device *pdev) -+{ -+ struct device *dev = &pdev->dev; -+ struct pxa27x_udc *udc = dev->driver_data; -+ int i; -+ -+ DMSG("%s: udc resume\n", __FUNCTION__); -+ -+ UDCCSR0 = udc->udccsr0 & (UDCCSR0_FST | UDCCSR0_DME); -+ for (i = 1; i < UDC_EP_NUM; i++) { -+ if (udc->ep[i].assigned) { -+ struct pxa27x_ep *ep = &udc->ep[i]; -+ -+ *ep->reg_udccsr = ep->udccsr_value; -+ *ep->reg_udccr = ep->udccr_value; -+ DMSG("EP%d, udccsr:0x%x, udccr:0x%x\n", -+ i, *ep->reg_udccsr, *ep->reg_udccr); -+ } -+ } -+ udc_enable(udc); -+ /* OTGPH bit is set when sleep mode is entered. -+ * it indicates that OTG pad is retaining its state. -+ * Upon exit from sleep mode and before clearing OTGPH, -+ * Software must configure the USB OTG pad, UDC, and UHC -+ * to the state they were in before entering sleep mode.*/ -+ PSSR |= PSSR_OTGPH; -+ -+ return 0; -+} -+#else -+#define pxa27x_udc_suspend NULL -+#define pxa27x_udc_resume NULL -+#endif -+ -+/*-------------------------------------------------------------------------*/ -+ -+static struct platform_driver pxa27x_udc_driver = { -+ .shutdown = pxa27x_udc_shutdown, -+ .remove = __exit_p(pxa27x_udc_remove), -+ .suspend = pxa27x_udc_suspend, -+ .resume = pxa27x_udc_resume, -+ .driver = { -+ .owner = THIS_MODULE, -+ .name = "pxa27x-udc", -+ }, -+}; -+ -+static int __init udc_init(void) -+{ -+ printk(KERN_INFO "%s: version %s\n", driver_name, DRIVER_VERSION); -+ return platform_driver_probe(&pxa27x_udc_driver, pxa27x_udc_probe); -+} -+ -+static void __exit udc_exit(void) -+{ -+ platform_driver_unregister(&pxa27x_udc_driver); -+} -+ -+module_init(udc_init); -+module_exit(udc_exit); -+ -+MODULE_DESCRIPTION(DRIVER_DESC); -+MODULE_AUTHOR("Frank Becker, Robert Schwebel, David Brownell, Rodolfo Giometti"); -+MODULE_LICENSE("GPL"); -Index: linux-2.6.23/drivers/usb/gadget/pxa27x_udc.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/drivers/usb/gadget/pxa27x_udc.h 2007-10-23 12:48:34.000000000 +0200 -@@ -0,0 +1,304 @@ -+/* -+ * linux/drivers/usb/gadget/pxa27x_udc.h -+ * Intel PXA27x on-chip full speed USB device controller -+ * -+ * Copyright (C) 2003 Robert Schwebel <r.schwebel@pengutronix.de>, Pengutronix -+ * Copyright (C) 2003 David Brownell -+ * Copyright (C) 2004 Intel Corporation -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -+ */ -+ -+#ifndef __LINUX_USB_GADGET_PXA27X_H -+#define __LINUX_USB_GADGET_PXA27X_H -+ -+#include <linux/types.h> -+ -+struct pxa27x_udc; -+ -+struct pxa27x_ep { -+ struct usb_ep ep; -+ struct pxa27x_udc *dev; -+ -+ const struct usb_endpoint_descriptor *desc; -+ struct list_head queue; -+ unsigned long pio_irqs; -+ unsigned long dma_irqs; -+ -+ int dma; -+ unsigned fifo_size; -+ unsigned ep_num; -+ unsigned ep_type; -+ -+ unsigned stopped : 1; -+ unsigned dma_con : 1; -+ unsigned dir_in : 1; -+ unsigned assigned : 1; -+ -+ unsigned config; -+ unsigned interface; -+ unsigned aisn; -+ /* UDCCSR = UDC Control/Status Register for this EP -+ * UBCR = UDC Byte Count Remaining (contents of OUT fifo) -+ * UDCDR = UDC Endpoint Data Register (the fifo) -+ * UDCCR = UDC Endpoint Configuration Registers -+ * DRCM = DMA Request Channel Map -+ */ -+ volatile u32 *reg_udccsr; -+ volatile u32 *reg_udcbcr; -+ volatile u32 *reg_udcdr; -+ volatile u32 *reg_udccr; -+#ifdef USE_DMA -+ volatile u32 *reg_drcmr; -+#define drcmr(n) .reg_drcmr = & DRCMR ## n , -+#else -+#define drcmr(n) -+#endif -+ -+#ifdef CONFIG_PM -+ unsigned udccsr_value; -+ unsigned udccr_value; -+#endif -+}; -+ -+struct pxa27x_request { -+ struct usb_request req; -+ struct list_head queue; -+}; -+ -+enum ep0_state { -+ EP0_IDLE, -+ EP0_IN_DATA_PHASE, -+ EP0_OUT_DATA_PHASE, -+// EP0_END_XFER, -+ EP0_STALL, -+ EP0_NO_ACTION -+}; -+ -+#define EP0_FIFO_SIZE ((unsigned)16) -+#define BULK_FIFO_SIZE ((unsigned)64) -+#define ISO_FIFO_SIZE ((unsigned)256) -+#define INT_FIFO_SIZE ((unsigned)8) -+ -+struct udc_stats { -+ struct ep0stats { -+ unsigned long ops; -+ unsigned long bytes; -+ } read, write; -+ unsigned long irqs; -+}; -+ -+#ifdef CONFIG_USB_PXA27X_SMALL -+/* when memory's tight, SMALL config saves code+data. */ -+//#undef USE_DMA -+//#define UDC_EP_NUM 3 -+#endif -+ -+#ifndef UDC_EP_NUM -+#define UDC_EP_NUM 24 -+#endif -+ -+struct pxa27x_udc { -+ struct usb_gadget gadget; -+ struct usb_gadget_driver *driver; -+ -+ enum ep0_state ep0state; -+ struct udc_stats stats; -+ unsigned got_irq : 1, -+ got_disc : 1, -+ has_cfr : 1, -+ req_pending : 1, -+ req_std : 1, -+ req_config : 1; -+ -+#define start_watchdog(dev) mod_timer(&dev->timer, jiffies + (HZ/200)) -+ struct timer_list timer; -+ -+ struct device *dev; -+ struct pxa2xx_udc_mach_info *mach; -+ u64 dma_mask; -+ struct pxa27x_ep ep [UDC_EP_NUM]; -+ -+ unsigned configuration, -+ interface, -+ alternate; -+#ifdef CONFIG_PM -+ unsigned udccsr0; -+#endif -+}; -+ -+/*-------------------------------------------------------------------------*/ -+#if 0 -+#ifdef DEBUG -+#define HEX_DISPLAY(n) do { \ -+ if (machine_is_mainstone())\ -+ { MST_LEDDAT1 = (n); } \ -+ } while(0) -+ -+#define HEX_DISPLAY1(n) HEX_DISPLAY(n) -+ -+#define HEX_DISPLAY2(n) do { \ -+ if (machine_is_mainstone()) \ -+ { MST_LEDDAT2 = (n); } \ -+ } while(0) -+ -+#endif /* DEBUG */ -+#endif -+/*-------------------------------------------------------------------------*/ -+ -+/* LEDs are only for debug */ -+#ifndef HEX_DISPLAY -+#define HEX_DISPLAY(n) do {} while(0) -+#endif -+ -+#ifndef LED_CONNECTED_ON -+#define LED_CONNECTED_ON do {} while(0) -+#define LED_CONNECTED_OFF do {} while(0) -+#endif -+#ifndef LED_EP0_ON -+#define LED_EP0_ON do {} while (0) -+#define LED_EP0_OFF do {} while (0) -+#endif -+ -+static struct pxa27x_udc *the_controller; -+ -+/*-------------------------------------------------------------------------*/ -+ -+/* -+ * Debugging support vanishes in non-debug builds. DBG_NORMAL should be -+ * mostly silent during normal use/testing, with no timing side-effects. -+ */ -+#define DBG_NORMAL 1 /* error paths, device state transitions */ -+#define DBG_VERBOSE 2 /* add some success path trace info */ -+#define DBG_NOISY 3 /* ... even more: request level */ -+#define DBG_VERY_NOISY 4 /* ... even more: packet level */ -+ -+#ifdef DEBUG -+ -+static const char *state_name[] = { -+ "EP0_IDLE", -+ "EP0_IN_DATA_PHASE", "EP0_OUT_DATA_PHASE", -+ "EP0_END_XFER", "EP0_STALL" -+}; -+ -+#define DMSG(stuff...) printk(KERN_ERR "udc: " stuff) -+ -+#ifdef VERBOSE -+# define UDC_DEBUG DBG_VERBOSE -+#else -+# define UDC_DEBUG DBG_NORMAL -+#endif -+ -+static void __attribute__ ((__unused__)) -+dump_udccr(const char *label) -+{ -+ u32 udccr = UDCCR; -+ DMSG("%s 0x%08x =%s%s%s%s%s%s%s%s%s%s, con=%d,inter=%d,altinter=%d\n", -+ label, udccr, -+ (udccr & UDCCR_OEN) ? " oen":"", -+ (udccr & UDCCR_AALTHNP) ? " aalthnp":"", -+ (udccr & UDCCR_AHNP) ? " rem" : "", -+ (udccr & UDCCR_BHNP) ? " rstir" : "", -+ (udccr & UDCCR_DWRE) ? " dwre" : "", -+ (udccr & UDCCR_SMAC) ? " smac" : "", -+ (udccr & UDCCR_EMCE) ? " emce" : "", -+ (udccr & UDCCR_UDR) ? " udr" : "", -+ (udccr & UDCCR_UDA) ? " uda" : "", -+ (udccr & UDCCR_UDE) ? " ude" : "", -+ (udccr & UDCCR_ACN) >> UDCCR_ACN_S, -+ (udccr & UDCCR_AIN) >> UDCCR_AIN_S, -+ (udccr & UDCCR_AAISN)>> UDCCR_AAISN_S ); -+} -+ -+static void __attribute__ ((__unused__)) -+dump_udccsr0(const char *label) -+{ -+ u32 udccsr0 = UDCCSR0; -+ -+ DMSG("%s %s 0x%08x =%s%s%s%s%s%s%s\n", -+ label, state_name[the_controller->ep0state], udccsr0, -+ (udccsr0 & UDCCSR0_SA) ? " sa" : "", -+ (udccsr0 & UDCCSR0_RNE) ? " rne" : "", -+ (udccsr0 & UDCCSR0_FST) ? " fst" : "", -+ (udccsr0 & UDCCSR0_SST) ? " sst" : "", -+ (udccsr0 & UDCCSR0_DME) ? " dme" : "", -+ (udccsr0 & UDCCSR0_IPR) ? " ipr" : "", -+ (udccsr0 & UDCCSR0_OPC) ? " opr" : ""); -+} -+ -+static void __attribute__ ((__unused__)) -+dump_state(struct pxa27x_udc *dev) -+{ -+ unsigned i; -+ -+ DMSG("%s, udcicr %02X.%02X, udcsir %02X.%02x, udcfnr %02X\n", -+ state_name[dev->ep0state], -+ UDCICR1, UDCICR0, UDCISR1, UDCISR0, UDCFNR); -+ dump_udccr("udccr"); -+ -+ if (!dev->driver) { -+ DMSG("no gadget driver bound\n"); -+ return; -+ } else -+ DMSG("ep0 driver '%s'\n", dev->driver->driver.name); -+ -+ -+ dump_udccsr0 ("udccsr0"); -+ DMSG("ep0 IN %lu/%lu, OUT %lu/%lu\n", -+ dev->stats.write.bytes, dev->stats.write.ops, -+ dev->stats.read.bytes, dev->stats.read.ops); -+ -+ for (i = 1; i < UDC_EP_NUM; i++) { -+ if (dev->ep [i].desc == 0) -+ continue; -+ DMSG ("udccs%d = %02x\n", i, *dev->ep->reg_udccsr); -+ } -+} -+ -+#if 0 -+static void dump_regs(u8 ep) -+{ -+ DMSG("EP:%d UDCCSR:0x%08x UDCBCR:0x%08x\n UDCCR:0x%08x\n", -+ ep,UDCCSN(ep), UDCBCN(ep), UDCCN(ep)); -+} -+static void dump_req (struct pxa27x_request *req) -+{ -+ struct usb_request *r = &req->req; -+ -+ DMSG("%s: buf:0x%08x length:%d dma:0x%08x actual:%d\n", -+ __FUNCTION__, (unsigned)r->buf, r->length, -+ r->dma, r->actual); -+} -+#endif -+ -+#else -+ -+#define DMSG(stuff...) do{}while(0) -+ -+#define dump_udccr(x) do{}while(0) -+#define dump_udccsr0(x) do{}while(0) -+#define dump_state(x) do{}while(0) -+ -+#define UDC_DEBUG ((unsigned)0) -+ -+#endif -+ -+#define DBG(lvl, stuff...) do{if ((lvl) <= UDC_DEBUG) DMSG(stuff);}while(0) -+ -+#define WARN(stuff...) printk(KERN_WARNING "udc: " stuff) -+#define INFO(stuff...) printk(KERN_INFO "udc: " stuff) -+ -+ -+#endif /* __LINUX_USB_GADGET_PXA27X_H */ -Index: linux-2.6.23/drivers/usb/gadget/serial.c -=================================================================== ---- linux-2.6.23.orig/drivers/usb/gadget/serial.c 2007-10-23 12:47:11.000000000 +0200 -+++ linux-2.6.23/drivers/usb/gadget/serial.c 2007-10-23 12:48:34.000000000 +0200 -@@ -1378,20 +1378,20 @@ - - usb_ep_autoconfig_reset(gadget); - -- ep = usb_ep_autoconfig(gadget, &gs_fullspeed_in_desc); -+ ep = usb_ep_autoconfig(gadget, &gs_fullspeed_in_desc, 0, 0, 0); - if (!ep) - goto autoconf_fail; - EP_IN_NAME = ep->name; - ep->driver_data = ep; /* claim the endpoint */ - -- ep = usb_ep_autoconfig(gadget, &gs_fullspeed_out_desc); -+ ep = usb_ep_autoconfig(gadget, &gs_fullspeed_out_desc, 0, 0, 0); - if (!ep) - goto autoconf_fail; - EP_OUT_NAME = ep->name; - ep->driver_data = ep; /* claim the endpoint */ - - if (use_acm) { -- ep = usb_ep_autoconfig(gadget, &gs_fullspeed_notify_desc); -+ ep = usb_ep_autoconfig(gadget, &gs_fullspeed_notify_desc, 0, 0, 0); - if (!ep) { - printk(KERN_ERR "gs_bind: cannot run ACM on %s\n", gadget->name); - goto autoconf_fail; -Index: linux-2.6.23/drivers/usb/gadget/zero.c -=================================================================== ---- linux-2.6.23.orig/drivers/usb/gadget/zero.c 2007-10-23 12:47:11.000000000 +0200 -+++ linux-2.6.23/drivers/usb/gadget/zero.c 2007-10-23 12:48:34.000000000 +0200 -@@ -1154,7 +1154,7 @@ - * but there may also be important quirks to address. - */ - usb_ep_autoconfig_reset (gadget); -- ep = usb_ep_autoconfig (gadget, &fs_source_desc); -+ ep = usb_ep_autoconfig (gadget, &fs_source_desc, 0, 0, 0); - if (!ep) { - autoconf_fail: - printk (KERN_ERR "%s: can't autoconfigure on %s\n", -@@ -1164,7 +1164,7 @@ - EP_IN_NAME = ep->name; - ep->driver_data = ep; /* claim */ - -- ep = usb_ep_autoconfig (gadget, &fs_sink_desc); -+ ep = usb_ep_autoconfig (gadget, &fs_sink_desc, 0, 0, 0); - if (!ep) - goto autoconf_fail; - EP_OUT_NAME = ep->name; -Index: linux-2.6.23/include/asm-arm/arch-pxa/udc.h -=================================================================== ---- linux-2.6.23.orig/include/asm-arm/arch-pxa/udc.h 2007-10-09 22:31:38.000000000 +0200 -+++ linux-2.6.23/include/asm-arm/arch-pxa/udc.h 2007-10-23 12:48:34.000000000 +0200 -@@ -2,6 +2,7 @@ - * linux/include/asm-arm/arch-pxa/udc.h - * - */ -+#include <asm/arch/pxa-regs.h> - #include <asm/mach/udc_pxa2xx.h> - - extern void pxa_set_udc_info(struct pxa2xx_udc_mach_info *info); -Index: linux-2.6.23/include/linux/usb_gadget.h -=================================================================== ---- linux-2.6.23.orig/include/linux/usb_gadget.h 2007-10-23 12:47:11.000000000 +0200 -+++ linux-2.6.23/include/linux/usb_gadget.h 2007-10-23 12:48:34.000000000 +0200 -@@ -397,10 +397,28 @@ - - struct usb_gadget; - -+/** -+ * struct usb_endpoint_config - possible configurations of a given endpoint -+ * @config: the configuration number -+ * @interface: the interface number -+ * @altinterface: the altinterface number -+ * -+ * Used as an array to pass information about the possible configurations -+ * of a given endpoint to the bus controller. -+ */ -+struct usb_endpoint_config { -+ int config; -+ int interface; -+ int altinterface; -+}; -+ - /* the rest of the api to the controller hardware: device operations, - * which don't involve endpoints (or i/o). - */ - struct usb_gadget_ops { -+ struct usb_ep* (*ep_alloc)(struct usb_gadget *gadget, -+ struct usb_endpoint_descriptor *desc, -+ int config, int interface, int alt); - int (*get_frame)(struct usb_gadget *); - int (*wakeup)(struct usb_gadget *); - int (*set_selfpowered) (struct usb_gadget *, int is_selfpowered); -@@ -824,7 +842,8 @@ - /* utility wrapping a simple endpoint selection policy */ - - extern struct usb_ep *usb_ep_autoconfig (struct usb_gadget *, -- struct usb_endpoint_descriptor *) __devinit; -+ struct usb_endpoint_descriptor *, -+ int, int, int) __devinit; - - extern void usb_ep_autoconfig_reset (struct usb_gadget *) __devinit; - diff --git a/packages/linux/linux-ezx-2.6.23/patches/pxa27x_overlay-r7.patch b/packages/linux/linux-ezx-2.6.23/patches/pxa27x_overlay-r7.patch deleted file mode 100644 index 7eca9301ac..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/pxa27x_overlay-r7.patch +++ /dev/null @@ -1,2436 +0,0 @@ - drivers/video/Kconfig | 18 - drivers/video/Makefile | 1 - drivers/video/pxafb.c | 305 +++++-- - drivers/video/pxafb.h | 65 + - drivers/video/pxafb_overlay.c | 1525 ++++++++++++++++++++++++++++++++++++ - include/asm-arm/arch-pxa/pxa-regs.h | 111 ++ - 6 files changed, 1969 insertions(+), 56 deletions(-) - -Index: linux-2.6.23/drivers/video/Kconfig -=================================================================== ---- linux-2.6.23.orig/drivers/video/Kconfig 2007-10-09 22:31:38.000000000 +0200 -+++ linux-2.6.23/drivers/video/Kconfig 2007-10-22 21:53:54.000000000 +0200 -@@ -1682,6 +1682,24 @@ - - If unsure, say N. - -+choice -+ prompt "PXA LCD type" -+ depends on FB_PXA -+ -+config FB_PXA_LCD_QVGA -+ bool "QVGA(320x240)" -+ -+config FB_PXA_LCD_VGA -+ bool "VGA (640x480)" -+ -+endchoice -+ -+config FB_PXA_OVERLAY -+ tristate "PXA LCD overlay support" -+ depends on FB_PXA -+ ---help--- -+ Frame buffer overlay driver for PXA27x -+ - config FB_PXA_PARAMETERS - bool "PXA LCD command line parameters" - default n -Index: linux-2.6.23/drivers/video/Makefile -=================================================================== ---- linux-2.6.23.orig/drivers/video/Makefile 2007-10-09 22:31:38.000000000 +0200 -+++ linux-2.6.23/drivers/video/Makefile 2007-10-22 21:53:54.000000000 +0200 -@@ -96,6 +96,7 @@ - obj-$(CONFIG_FB_CIRRUS) += cirrusfb.o - obj-$(CONFIG_FB_ASILIANT) += asiliantfb.o - obj-$(CONFIG_FB_PXA) += pxafb.o -+obj-$(CONFIG_FB_PXA_OVERLAY) += pxafb_overlay.o - obj-$(CONFIG_FB_W100) += w100fb.o - obj-$(CONFIG_FB_AU1100) += au1100fb.o - obj-$(CONFIG_FB_AU1200) += au1200fb.o -Index: linux-2.6.23/drivers/video/pxafb.c -=================================================================== ---- linux-2.6.23.orig/drivers/video/pxafb.c 2007-10-09 22:31:38.000000000 +0200 -+++ linux-2.6.23/drivers/video/pxafb.c 2007-10-22 22:01:00.000000000 +0200 -@@ -58,17 +58,49 @@ - #define LCCR0_INVALID_CONFIG_MASK (LCCR0_OUM|LCCR0_BM|LCCR0_QDM|LCCR0_DIS|LCCR0_EFM|LCCR0_IUM|LCCR0_SFM|LCCR0_LDM|LCCR0_ENB) - #define LCCR3_INVALID_CONFIG_MASK (LCCR3_HSP|LCCR3_VSP|LCCR3_PCD|LCCR3_BPP) - -+wait_queue_head_t fcs_wait_eof; -+int fcs_in_eof; -+static DECLARE_MUTEX(fcs_lcd_sem); -+ - static void (*pxafb_backlight_power)(int); - static void (*pxafb_lcd_power)(int, struct fb_var_screeninfo *); - - static int pxafb_activate_var(struct fb_var_screeninfo *var, struct pxafb_info *); --static void set_ctrlr_state(struct pxafb_info *fbi, u_int state); -+void pxafb_set_ctrlr_state(struct pxafb_info *fbi, u_int state); - - #ifdef CONFIG_FB_PXA_PARAMETERS - #define PXAFB_OPTIONS_SIZE 256 - static char g_options[PXAFB_OPTIONS_SIZE] __devinitdata = ""; - #endif - -+static struct pxafb_rgb def_rgb_8 = { -+ red: { offset: 0, length: 8, }, -+ green: { offset: 0, length: 8, }, -+ blue: { offset: 0, length: 8, }, -+ transp: { offset: 0, length: 0, }, -+}; -+ -+static struct pxafb_rgb def_rgb_16 = { -+ red: { offset: 11, length: 5, }, -+ green: { offset: 5, length: 6, }, -+ blue: { offset: 0, length: 5, }, -+ transp: { offset: 0, length: 0, }, -+}; -+ -+static struct pxafb_rgb def_rgb_18 = { -+ red: { offset: 12, length: 6, }, -+ green: { offset: 6, length: 6, }, -+ blue: { offset: 0, length: 6, }, -+ transp: { offset: 0, length: 0, }, -+}; -+ -+static struct pxafb_rgb def_rgb_24 = { -+ red: { offset: 16, length: 8, }, -+ green: { offset: 8, length: 8, }, -+ blue: { offset: 0, length: 8, }, -+ transp: { offset: 0, length: 0, }, -+}; -+ - static inline void pxafb_schedule_work(struct pxafb_info *fbi, u_int state) - { - unsigned long flags; -@@ -190,6 +222,10 @@ - case 4: ret = LCCR3_4BPP; break; - case 8: ret = LCCR3_8BPP; break; - case 16: ret = LCCR3_16BPP; break; -+ case 18: ret = LCCR3_18BPP; break; -+ case 19: ret = LCCR3_19BPP; break; -+ case 24: ret = LCCR3_24BPP; break; -+ case 25: ret = LCCR3_25BPP; break; - } - return ret; - } -@@ -301,18 +337,34 @@ - * The pixel packing format is described on page 7-11 of the - * PXA2XX Developer's Manual. - */ -- if (var->bits_per_pixel == 16) { -- var->red.offset = 11; var->red.length = 5; -- var->green.offset = 5; var->green.length = 6; -- var->blue.offset = 0; var->blue.length = 5; -- var->transp.offset = var->transp.length = 0; -- } else { -- var->red.offset = var->green.offset = var->blue.offset = var->transp.offset = 0; -- var->red.length = 8; -- var->green.length = 8; -- var->blue.length = 8; -- var->transp.length = 0; -- } -+ switch (var->bits_per_pixel) { -+ case 16: -+ /* 2 pixels per line */ -+ var->red = def_rgb_16.red; -+ var->green = def_rgb_16.green; -+ var->blue = def_rgb_16.blue; -+ var->transp = def_rgb_16.transp; -+ break; -+ case 18: -+ case 19: -+ var->red = def_rgb_18.red; -+ var->green = def_rgb_18.green; -+ var->blue = def_rgb_18.blue; -+ var->transp = def_rgb_18.transp; -+ break; -+ case 24: -+ case 25: -+ var->red = def_rgb_24.red; -+ var->green = def_rgb_24.green; -+ var->blue = def_rgb_24.blue; -+ var->transp = def_rgb_24.transp; -+ break; -+ default: -+ var->red = def_rgb_8.red; -+ var->green = def_rgb_8.green; -+ var->blue = def_rgb_8.blue; -+ var->transp = def_rgb_8.transp; -+ } - - #ifdef CONFIG_CPU_FREQ - pr_debug("pxafb: dma period = %d ps, clock = %d kHz\n", -@@ -326,7 +378,7 @@ - static inline void pxafb_set_truecolor(u_int is_true_color) - { - pr_debug("pxafb: true_color = %d\n", is_true_color); -- // do your machine-specific setup if needed -+ /* do your machine-specific setup if needed */ - } - - /* -@@ -341,7 +393,8 @@ - - pr_debug("pxafb: set_par\n"); - -- if (var->bits_per_pixel == 16) -+ if (var->bits_per_pixel == 16 || var->bits_per_pixel == 18 ||var->bits_per_pixel == 19 -+ || var->bits_per_pixel == 24 || var->bits_per_pixel == 25) - fbi->fb.fix.visual = FB_VISUAL_TRUECOLOR; - else if (!fbi->cmap_static) - fbi->fb.fix.visual = FB_VISUAL_PSEUDOCOLOR; -@@ -354,12 +407,25 @@ - fbi->fb.fix.visual = FB_VISUAL_STATIC_PSEUDOCOLOR; - } - -- fbi->fb.fix.line_length = var->xres_virtual * -- var->bits_per_pixel / 8; -- if (var->bits_per_pixel == 16) -- fbi->palette_size = 0; -- else -- fbi->palette_size = var->bits_per_pixel == 1 ? 4 : 1 << var->bits_per_pixel; -+ switch (var->bits_per_pixel) { -+ case 16: -+ fbi->fb.fix.line_length = var->xres_virtual * 2; -+ fbi->palette_size = 0; -+ break; -+ case 18: -+ case 19: -+ fbi->fb.fix.line_length = var->xres_virtual * 3; -+ fbi->palette_size = 0; -+ break; -+ case 24: -+ case 25: -+ fbi->fb.fix.line_length = var->xres_virtual * 4; -+ fbi->palette_size = 0; -+ break; -+ default: -+ fbi->fb.fix.line_length = var->xres_virtual * var->bits_per_pixel / 8; -+ fbi->palette_size = var->bits_per_pixel == 1 ? 4 : 1 << var->bits_per_pixel; -+ } - - palette_mem_size = fbi->palette_size * sizeof(u16); - -@@ -373,7 +439,8 @@ - */ - pxafb_set_truecolor(fbi->fb.fix.visual == FB_VISUAL_TRUECOLOR); - -- if (fbi->fb.var.bits_per_pixel == 16) -+ if (fbi->fb.var.bits_per_pixel == 16 || fbi->fb.var.bits_per_pixel == 18 ||fbi->fb.var.bits_per_pixel == 19 -+ || fbi->fb.var.bits_per_pixel == 24 || fbi->fb.var.bits_per_pixel == 25) - fb_dealloc_cmap(&fbi->fb.cmap); - else - fb_alloc_cmap(&fbi->fb.cmap, 1<<fbi->fb.var.bits_per_pixel, 0); -@@ -419,7 +486,7 @@ - * 16 bpp mode does not really use the palette, so this will not - * blank the display in all modes. - */ --static int pxafb_blank(int blank, struct fb_info *info) -+int pxafb_blank(int blank, struct fb_info *info) - { - struct pxafb_info *fbi = (struct pxafb_info *)info; - int i; -@@ -436,19 +503,20 @@ - for (i = 0; i < fbi->palette_size; i++) - pxafb_setpalettereg(i, 0, 0, 0, 0, info); - -- pxafb_schedule_work(fbi, C_DISABLE); -- //TODO if (pxafb_blank_helper) pxafb_blank_helper(blank); -+ pxafb_schedule_work(fbi, C_BLANK); -+ /* TODO if (pxafb_blank_helper) pxafb_blank_helper(blank); */ - break; - - case FB_BLANK_UNBLANK: -- //TODO if (pxafb_blank_helper) pxafb_blank_helper(blank); -+ /* TODO if (pxafb_blank_helper) pxafb_blank_helper(blank); */ - if (fbi->fb.fix.visual == FB_VISUAL_PSEUDOCOLOR || - fbi->fb.fix.visual == FB_VISUAL_STATIC_PSEUDOCOLOR) - fb_set_cmap(&fbi->fb.cmap, info); -- pxafb_schedule_work(fbi, C_ENABLE); -+ pxafb_schedule_work(fbi, C_UNBLANK); - } - return 0; - } -+EXPORT_SYMBOL(pxafb_blank); - - static int pxafb_mmap(struct fb_info *info, - struct vm_area_struct *vma) -@@ -582,6 +650,10 @@ - case 4: - case 8: - case 16: -+ case 18: -+ case 19: -+ case 24: -+ case 25: - break; - default: - printk(KERN_ERR "%s: invalid bit depth %d\n", -@@ -613,7 +685,10 @@ - - new_regs.lccr0 = fbi->lccr0 | - (LCCR0_LDM | LCCR0_SFM | LCCR0_IUM | LCCR0_EFM | -- LCCR0_QDM | LCCR0_BM | LCCR0_OUM); -+#ifdef CONFIG_PXA27x /* Enable overlay for PXA27x */ -+ LCCR0_OUC | LCCR0_CMDIM | LCCR0_RDSTM | -+#endif -+ LCCR0_QDM | LCCR0_BM | LCCR0_OUM); - - new_regs.lccr1 = - LCCR1_DisWdth(var->xres) + -@@ -672,13 +747,14 @@ - - fbi->dmadesc_fbhigh_cpu->fsadr = fbi->screen_dma; - fbi->dmadesc_fbhigh_cpu->fidr = 0; -- fbi->dmadesc_fbhigh_cpu->ldcmd = BYTES_PER_PANEL; -+ fbi->dmadesc_fbhigh_cpu->ldcmd = BYTES_PER_PANEL | LDCMD_EOFINT; - - fbi->dmadesc_palette_cpu->fsadr = fbi->palette_dma; - fbi->dmadesc_palette_cpu->fidr = 0; - fbi->dmadesc_palette_cpu->ldcmd = (fbi->palette_size * 2) | LDCMD_PAL; - -- if (var->bits_per_pixel == 16) { -+ if (var->bits_per_pixel == 16 || var->bits_per_pixel == 18 ||var->bits_per_pixel == 19 -+ || var->bits_per_pixel == 24 || var->bits_per_pixel == 25) { - /* palette shouldn't be loaded in true-color mode */ - fbi->dmadesc_fbhigh_cpu->fdadr = fbi->dmadesc_fbhigh_dma; - fbi->fdadr0 = fbi->dmadesc_fbhigh_dma; /* no pal just fbhigh */ -@@ -731,8 +807,8 @@ - } - - /* -- * NOTE! The following functions are purely helpers for set_ctrlr_state. -- * Do not call them directly; set_ctrlr_state does the correct serialisation -+ * NOTE! The following functions are purely helpers for pxafb_set_ctrlr_state. -+ * Do not call them directly; pxafb_set_ctrlr_state does the correct serialisation - * to ensure that things happen in the right way 100% of time time. - * -- rmk - */ -@@ -754,7 +830,8 @@ - - static void pxafb_setup_gpio(struct pxafb_info *fbi) - { -- int gpio, ldd_bits; -+ int gpio; -+ int ldd_bits = 0; - unsigned int lccr0 = fbi->lccr0; - - /* -@@ -764,28 +841,56 @@ - /* 4 bit interface */ - if ((lccr0 & LCCR0_CMS) == LCCR0_Mono && - (lccr0 & LCCR0_SDS) == LCCR0_Sngl && -- (lccr0 & LCCR0_DPD) == LCCR0_4PixMono) -+ (lccr0 & LCCR0_DPD) == LCCR0_4PixMono) { - ldd_bits = 4; -- -+ } - /* 8 bit interface */ - else if (((lccr0 & LCCR0_CMS) == LCCR0_Mono && - ((lccr0 & LCCR0_SDS) == LCCR0_Dual || (lccr0 & LCCR0_DPD) == LCCR0_8PixMono)) || - ((lccr0 & LCCR0_CMS) == LCCR0_Color && -- (lccr0 & LCCR0_PAS) == LCCR0_Pas && (lccr0 & LCCR0_SDS) == LCCR0_Sngl)) -+ (lccr0 & LCCR0_PAS) == LCCR0_Pas && (lccr0 & LCCR0_SDS) == LCCR0_Sngl)) { - ldd_bits = 8; -- -+ } - /* 16 bit interface */ -- else if ((lccr0 & LCCR0_CMS) == LCCR0_Color && -- ((lccr0 & LCCR0_SDS) == LCCR0_Dual || (lccr0 & LCCR0_PAS) == LCCR0_Act)) -- ldd_bits = 16; -+ else if ((lccr0 & LCCR0_CMS) == LCCR0_Color && -+ ((lccr0 & LCCR0_SDS) == LCCR0_Dual || (lccr0 & LCCR0_PAS) == LCCR0_Act)) { -+ switch (fbi->fb.var.bits_per_pixel) { -+ case 16: -+#ifdef CONFIG_PXA27x -+ /* bits 58-77 */ -+ GPDR1 |= (0x3f << 26); -+ GPDR2 |= 0x00003fff; - -+ GAFR1_U = (GAFR1_U & ~(0xfff << 20)) | (0xaaa << 20); -+ GAFR2_L = (GAFR2_L & 0xf0000000) | 0x0aaaaaaa; -+#endif -+ ldd_bits = 16; -+ break; -+ case 18: -+ case 19: -+ case 24: -+ case 25: -+#ifdef CONFIG_PXA27x -+ /* bits 58-77 and 86, 87 */ -+ GPDR1 |= (0x3f << 26); -+ GPDR2 |= 0x00c03fff; -+ -+ GAFR1_U = (GAFR1_U & ~(0xfff << 20)) | (0xaaa << 20); -+ GAFR2_L = (GAFR2_L & 0xf0000000) | 0x0aaaaaaa; -+ GAFR2_U = (GAFR2_U & 0xffff0fff) | 0xa000; -+#endif -+ ldd_bits = 25; -+ break; -+ } -+ } - else { - printk(KERN_ERR "pxafb_setup_gpio: unable to determine bits per pixel\n"); - return; - } - -- for (gpio = 58; ldd_bits; gpio++, ldd_bits--) -+ for (gpio = 58; ldd_bits > 0; gpio++, ldd_bits--) { - pxa_gpio_mode(gpio | GPIO_ALT_FN_2_OUT); -+ } - pxa_gpio_mode(GPIO74_LCD_FCLK_MD); - pxa_gpio_mode(GPIO75_LCD_LCLK_MD); - pxa_gpio_mode(GPIO76_LCD_PCLK_MD); -@@ -805,6 +910,7 @@ - /* enable LCD controller clock */ - pxa_set_cken(CKEN_LCD, 1); - -+ down(&fcs_lcd_sem); - /* Sequence from 11.7.10 */ - LCCR3 = fbi->reg_lccr3; - LCCR2 = fbi->reg_lccr2; -@@ -815,6 +921,8 @@ - FDADR1 = fbi->fdadr1; - LCCR0 |= LCCR0_ENB; - -+ up(&fcs_lcd_sem); -+ - pr_debug("FDADR0 0x%08x\n", (unsigned int) FDADR0); - pr_debug("FDADR1 0x%08x\n", (unsigned int) FDADR1); - pr_debug("LCCR0 0x%08x\n", (unsigned int) LCCR0); -@@ -829,6 +937,7 @@ - - pr_debug("pxafb: disabling LCD controller\n"); - -+ down(&fcs_lcd_sem); - set_current_state(TASK_UNINTERRUPTIBLE); - add_wait_queue(&fbi->ctrlr_wait, &wait); - -@@ -838,6 +947,7 @@ - - schedule_timeout(200 * HZ / 1000); - remove_wait_queue(&fbi->ctrlr_wait, &wait); -+ up(&fcs_lcd_sem); - - /* disable LCD controller clock */ - pxa_set_cken(CKEN_LCD, 0); -@@ -855,6 +965,11 @@ - LCCR0 |= LCCR0_LDM; - wake_up(&fbi->ctrlr_wait); - } -+ if (lcsr & LCSR_EOF && fcs_in_eof) { -+ LCCR0 |= LCCR0_EFM; -+ fcs_in_eof = 0; -+ wake_up(&fcs_wait_eof); -+ } - - LCSR = lcsr; - return IRQ_HANDLED; -@@ -865,7 +980,7 @@ - * sleep when disabling the LCD controller, or if we get two contending - * processes trying to alter state. - */ --static void set_ctrlr_state(struct pxafb_info *fbi, u_int state) -+void pxafb_set_ctrlr_state(struct pxafb_info *fbi, u_int state) - { - u_int old_state; - -@@ -887,7 +1002,9 @@ - */ - if (old_state != C_DISABLE && old_state != C_DISABLE_PM) { - fbi->state = state; -- //TODO __pxafb_lcd_power(fbi, 0); -+ /* TODO __pxafb_lcd_power(fbi, 0); */ -+ if(fbi->set_overlay_ctrlr_state) -+ fbi->set_overlay_ctrlr_state(fbi, C_DISABLE); - pxafb_disable_controller(fbi); - } - break; -@@ -901,6 +1018,8 @@ - fbi->state = state; - __pxafb_backlight_power(fbi, 0); - __pxafb_lcd_power(fbi, 0); -+ if(fbi->set_overlay_ctrlr_state) -+ fbi->set_overlay_ctrlr_state(fbi, C_DISABLE); - if (old_state != C_DISABLE_CLKCHANGE) - pxafb_disable_controller(fbi); - } -@@ -914,7 +1033,9 @@ - if (old_state == C_DISABLE_CLKCHANGE) { - fbi->state = C_ENABLE; - pxafb_enable_controller(fbi); -- //TODO __pxafb_lcd_power(fbi, 1); -+ /* TODO __pxafb_lcd_power(fbi, 1); */ -+ if(fbi->set_overlay_ctrlr_state) -+ fbi->set_overlay_ctrlr_state(fbi, C_ENABLE); - } - break; - -@@ -926,9 +1047,13 @@ - */ - if (old_state == C_ENABLE) { - __pxafb_lcd_power(fbi, 0); -+ if(fbi->set_overlay_ctrlr_state) -+ fbi->set_overlay_ctrlr_state(fbi, C_DISABLE); - pxafb_disable_controller(fbi); - pxafb_setup_gpio(fbi); - pxafb_enable_controller(fbi); -+ if(fbi->set_overlay_ctrlr_state) -+ fbi->set_overlay_ctrlr_state(fbi, C_ENABLE); - __pxafb_lcd_power(fbi, 1); - } - break; -@@ -954,11 +1079,46 @@ - pxafb_enable_controller(fbi); - __pxafb_lcd_power(fbi, 1); - __pxafb_backlight_power(fbi, 1); -+ if(fbi->set_overlay_ctrlr_state) -+ fbi->set_overlay_ctrlr_state(fbi, C_ENABLE); - } - break; -+ -+ case C_BLANK: -+ /* -+ * Disable controller, blank overlays if exist. -+ */ -+ if ((old_state != C_DISABLE) && (old_state != C_BLANK)) { -+ fbi->state = state; -+ __pxafb_backlight_power(fbi, 0); -+ __pxafb_lcd_power(fbi, 0); -+ if(fbi->set_overlay_ctrlr_state) -+ fbi->set_overlay_ctrlr_state(fbi, C_BLANK); -+ if (old_state != C_DISABLE_CLKCHANGE) -+ pxafb_disable_controller(fbi); -+ } -+ break; -+ -+ case C_UNBLANK: -+ /* -+ * Power up the LCD screen, enable controller, and -+ * turn on the backlight, unblank overlays if exist. -+ */ -+ if ((old_state != C_ENABLE) && (old_state != C_UNBLANK)) { -+ fbi->state = C_UNBLANK; -+ pxafb_setup_gpio(fbi); -+ pxafb_enable_controller(fbi); -+ __pxafb_lcd_power(fbi, 1); -+ __pxafb_backlight_power(fbi, 1); -+ if(fbi->set_overlay_ctrlr_state) -+ fbi->set_overlay_ctrlr_state(fbi, C_UNBLANK); -+ } -+ break; -+ - } - up(&fbi->ctrlr_sem); - } -+EXPORT_SYMBOL(pxafb_set_ctrlr_state); - - /* - * Our LCD controller task (which is called when we blank or unblank) -@@ -970,7 +1130,7 @@ - container_of(work, struct pxafb_info, task); - u_int state = xchg(&fbi->task_state, -1); - -- set_ctrlr_state(fbi, state); -+ pxafb_set_ctrlr_state(fbi, state); - } - - #ifdef CONFIG_CPU_FREQ -@@ -985,19 +1145,29 @@ - pxafb_freq_transition(struct notifier_block *nb, unsigned long val, void *data) - { - struct pxafb_info *fbi = TO_INF(nb, freq_transition); -- //TODO struct cpufreq_freqs *f = data; -+ /* TODO struct cpufreq_freqs *f = data; */ -+ struct cpufreq_freqs *clkinfo; - u_int pcd; -+ u_int lccr3; - - switch (val) { - case CPUFREQ_PRECHANGE: -- set_ctrlr_state(fbi, C_DISABLE_CLKCHANGE); -+ pxafb_set_ctrlr_state(fbi, C_DISABLE_CLKCHANGE); - break; - - case CPUFREQ_POSTCHANGE: -+ clkinfo = (struct cpufreq_freqs *)data; -+ /* If leaving a 13kHz state with the LCD sustained */ -+ if ((clkinfo->old == 13000)) -+ break; -+ - pcd = get_pcd(fbi->fb.var.pixclock); -+ lccr3 = fbi->reg_lccr3; - set_hsync_time(fbi, pcd); - fbi->reg_lccr3 = (fbi->reg_lccr3 & ~0xff) | LCCR3_PixClkDiv(pcd); -- set_ctrlr_state(fbi, C_ENABLE_CLKCHANGE); -+ pxafb_set_ctrlr_state(fbi, C_ENABLE_CLKCHANGE); -+ if (lccr3 != fbi->reg_lccr3 && !((LCCR0 & LCCR0_DIS) || !(LCCR0 & LCCR0_ENB))) -+ LCCR3 = fbi->reg_lccr3; - break; - } - return 0; -@@ -1016,7 +1186,7 @@ - printk(KERN_DEBUG "min dma period: %d ps, " - "new clock %d kHz\n", pxafb_display_dma_period(var), - policy->max); -- // TODO: fill in min/max values -+ /* TODO: fill in min/max values */ - break; - #if 0 - case CPUFREQ_NOTIFY: -@@ -1042,7 +1212,7 @@ - { - struct pxafb_info *fbi = platform_get_drvdata(dev); - -- set_ctrlr_state(fbi, C_DISABLE_PM); -+ pxafb_set_ctrlr_state(fbi, C_DISABLE_PM); - return 0; - } - -@@ -1050,7 +1220,11 @@ - { - struct pxafb_info *fbi = platform_get_drvdata(dev); - -- set_ctrlr_state(fbi, C_ENABLE_PM); -+ pxafb_set_ctrlr_state(fbi, C_ENABLE_PM); -+//RP#ifdef CONFIG_PXA27x -+//RP LCCR4 |= (1 << 31); /* Disable the PCD Divisor, PCDDIV */ -+//RP LCCR4 |= (5 << 17); /* Undocumented feature */ -+//RP#endif - return 0; - } - #else -@@ -1154,11 +1328,21 @@ - fbi->task_state = (u_char)-1; - - for (i = 0; i < inf->num_modes; i++) { -- smemlen = mode[i].xres * mode[i].yres * mode[i].bpp / 8; -+ if (mode[i].bpp <= 16) { /* 8, 16 bpp */ -+ smemlen = mode[i].xres * mode[i].yres * mode[i].bpp / 8; -+ } else if ( mode[i].bpp > 19 ) { /* 24, 25 bpp */ -+ smemlen = mode[i].xres * mode[i].yres * 4; -+ } else { /* 18, 19 bpp */ -+ /* packed format */ -+ smemlen = mode[i].xres * mode[i].yres * 3; -+ } -+ - if (smemlen > fbi->fb.fix.smem_len) - fbi->fb.fix.smem_len = smemlen; - } - -+ fbi->set_overlay_ctrlr_state = NULL; -+ - init_waitqueue_head(&fbi->ctrlr_wait); - INIT_WORK(&fbi->task, pxafb_task); - init_MUTEX(&fbi->ctrlr_sem); -@@ -1225,6 +1409,10 @@ - case 4: - case 8: - case 16: -+ case 18: -+ case 19: -+ case 24: -+ case 25: - inf->modes[0].bpp = bpp; - dev_info(dev, "overriding bit depth: %d\n", bpp); - break; -@@ -1373,7 +1561,7 @@ - fbi = pxafb_init_fbinfo(&dev->dev); - if (!fbi) { - dev_err(&dev->dev, "Failed to initialize framebuffer device\n"); -- ret = -ENOMEM; // only reason for pxafb_init_fbinfo to fail is kmalloc -+ ret = -ENOMEM; /* only reason for pxafb_init_fbinfo to fail is kmalloc */ - goto failed; - } - -@@ -1408,7 +1596,7 @@ - } - - #ifdef CONFIG_PM -- // TODO -+ /* TODO */ - #endif - - #ifdef CONFIG_CPU_FREQ -@@ -1421,7 +1609,12 @@ - /* - * Ok, now enable the LCD controller - */ -- set_ctrlr_state(fbi, C_ENABLE); -+ pxafb_set_ctrlr_state(fbi, C_ENABLE); -+//#ifdef CONFIG_PXA27x -+// LCCR4 |= (1 << 31); /* Disabel the PCD Divisor, PCDDIV */ -+// LCCR4 |= (5 << 17); /* Undocumented feature */ -+//#endif -+ init_waitqueue_head(&fcs_wait_eof); - - return 0; - -Index: linux-2.6.23/drivers/video/pxafb.h -=================================================================== ---- linux-2.6.23.orig/drivers/video/pxafb.h 2007-10-09 22:31:38.000000000 +0200 -+++ linux-2.6.23/drivers/video/pxafb.h 2007-10-22 21:53:54.000000000 +0200 -@@ -29,6 +29,60 @@ - unsigned int lccr3; - }; - -+struct pxafb_rgb { -+ struct fb_bitfield red; -+ struct fb_bitfield green; -+ struct fb_bitfield blue; -+ struct fb_bitfield transp; -+}; -+ -+#ifdef CONFIG_PXA27x -+/* PXA Overlay Framebuffer Support */ -+struct overlayfb_info -+{ -+ struct fb_info fb; -+ -+ struct fb_var_screeninfo old_var; -+ -+ struct semaphore mutex; -+ unsigned long refcount; -+ -+ struct pxafb_info *basefb; -+ -+ unsigned long map_cpu; -+ unsigned long screen_cpu; -+ unsigned long palette_cpu; -+ unsigned long map_size; -+ unsigned long palette_size; -+ -+ dma_addr_t screen_dma; -+ dma_addr_t map_dma; -+ dma_addr_t palette_dma; -+ -+ volatile u_char state; -+ -+ /* overlay specific info */ -+ unsigned long xpos; /* screen position (x, y)*/ -+ unsigned long ypos; -+ unsigned long format; -+ -+ /* additional */ -+ union { -+ struct pxafb_dma_descriptor *dma0; -+ struct pxafb_dma_descriptor *dma1; -+ struct { -+ struct pxafb_dma_descriptor *dma2; -+ struct pxafb_dma_descriptor *dma3; -+ struct pxafb_dma_descriptor *dma4; -+ }; -+ struct { -+ struct pxafb_dma_descriptor *dma5_pal; -+ struct pxafb_dma_descriptor *dma5_frame; -+ }; -+ }; -+}; -+#endif -+ - /* PXA LCD DMA descriptor */ - struct pxafb_dma_descriptor { - unsigned int fdadr; -@@ -87,6 +141,14 @@ - wait_queue_head_t ctrlr_wait; - struct work_struct task; - -+#ifdef CONFIG_PXA27x -+ /* PXA Overlay Framebuffer Support */ -+ struct overlayfb_info *overlay1fb; -+ struct overlayfb_info *overlay2fb; -+ struct overlayfb_info *cursorfb; -+#endif -+ void (*set_overlay_ctrlr_state)(struct pxafb_info *, u_int); -+ - #ifdef CONFIG_CPU_FREQ - struct notifier_block freq_transition; - struct notifier_block freq_policy; -@@ -106,6 +168,9 @@ - #define C_DISABLE_PM (5) - #define C_ENABLE_PM (6) - #define C_STARTUP (7) -+#define C_BLANK (8) -+#define C_UNBLANK (9) -+ - - #define PXA_NAME "PXA" - -Index: linux-2.6.23/drivers/video/pxafb_overlay.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/drivers/video/pxafb_overlay.c 2007-10-22 21:53:54.000000000 +0200 -@@ -0,0 +1,1525 @@ -+/* -+ * linux/drivers/video/pxafb_overlay.c -+ * -+ * Copyright (c) 2004, Intel Corporation -+ * -+ * Code Status: -+ * 2004/10/28: <yan.yin@intel.com> -+ * - Ported to 2.6 kernel -+ * - Made overlay driver a loadable module -+ * - Merged overlay optimized patch -+ * 2004/03/10: <stanley.cai@intel.com> -+ * - Fixed Bugs -+ * - Added workaround for overlay1&2 -+ * 2003/08/27: <yu.tang@intel.com> -+ * - Added Overlay 1 & Overlay2 & Hardware Cursor support -+ * -+ * -+ * This software program is licensed subject to the GNU Lesser General -+ * Public License (LGPL). Version 2.1, February 1999, available at -+ * http://www.gnu.org/copyleft/lesser.html -+ * -+ * Intel PXA27x LCD Controller Frame Buffer Overlay Driver -+ * -+ * -+ */ -+ -+#include <linux/module.h> -+#include <linux/moduleparam.h> -+#include <linux/kernel.h> -+#include <linux/sched.h> -+#include <linux/errno.h> -+#include <linux/string.h> -+#include <linux/interrupt.h> -+#include <linux/slab.h> -+#include <linux/fb.h> -+#include <linux/delay.h> -+#include <linux/init.h> -+#include <linux/ioport.h> -+#include <linux/cpufreq.h> -+#include <linux/device.h> -+#include <linux/platform_device.h> -+#include <linux/dma-mapping.h> -+ -+#include <asm/hardware.h> -+#include <asm/io.h> -+#include <asm/irq.h> -+#include <asm/uaccess.h> -+#include <asm/arch/bitfield.h> -+#include <asm/arch/pxafb.h> -+#include <asm/arch/pxa-regs.h> -+ -+#include "pxafb.h" -+ -+/* LCD enhancement : Overlay 1 & 2 & Hardware Cursor */ -+ -+/* -+ * LCD enhancement : Overlay 1 -+ * -+ * Features: -+ * - support 16bpp (No palette) -+ */ -+/* -+ * debugging? -+ */ -+#define DEBUG 0 -+ -+#ifdef DEBUG -+#define dbg(fmt,arg...) printk(KERN_ALERT "%s(): " fmt "\n", __FUNCTION__, ##arg) -+#else -+#define dbg(fmt,arg...) -+#endif -+ -+static int overlay1fb_enable(struct fb_info *info); -+static int overlay2fb_enable(struct fb_info *info); -+static int cursorfb_enable(struct fb_info *info); -+ -+static int overlay1fb_disable(struct fb_info *info); -+static int overlay2fb_disable(struct fb_info *info); -+static int cursorfb_disable(struct fb_info *info); -+ -+static int overlay1fb_blank(int blank, struct fb_info *info); -+static int overlay2fb_blank(int blank, struct fb_info *info); -+static int cursorfb_blank(int blank, struct fb_info *info); -+ -+extern void pxafb_set_ctrlr_state(struct pxafb_info *fbi, u_int state); -+extern int pxafb_blank(int blank, struct fb_info *info); -+ -+static struct pxafb_rgb def_rgb_18 = { -+ red: { offset: 12, length: 6, }, -+ green: { offset: 6, length: 6, }, -+ blue: { offset: 0, length: 6, }, -+ transp: { offset: 0, length: 0, }, -+}; -+ -+static struct pxafb_rgb def_rgbt_16 = { -+ red: { offset: 10, length: 5, }, -+ green: { offset: 5, length: 5, }, -+ blue: { offset: 0, length: 5, }, -+ transp: { offset: 15, length: 1, }, -+}; -+ -+static struct pxafb_rgb def_rgbt_19 = { -+ red: { offset: 12, length: 6, }, -+ green: { offset: 6, length: 6, }, -+ blue: { offset: 0, length: 6, }, -+ transp: { offset: 18, length: 1, }, -+}; -+ -+static struct pxafb_rgb def_rgbt_24 = { -+ red: { offset: 16, length: 7, }, -+ green: { offset: 8, length: 8, }, -+ blue: { offset: 0, length: 8, }, -+ transp: { offset: 0, length: 0, }, -+}; -+ -+static struct pxafb_rgb def_rgbt_25 = { -+ red: { offset: 16, length: 8, }, -+ green: { offset: 8, length: 8, }, -+ blue: { offset: 0, length: 8, }, -+ transp: { offset: 24, length: 1, }, -+}; -+ -+#define CLEAR_LCD_INTR(reg, intr) do { \ -+ reg = (intr); \ -+}while(0) -+ -+#define WAIT_FOR_LCD_INTR(reg,intr,timeout) ({ \ -+ int __done =0; \ -+ int __t = timeout; \ -+ while (__t) { \ -+ __done = (reg) & (intr); \ -+ if (__done) break; \ -+ mdelay(10); \ -+ __t--; \ -+ } \ -+ if (!__t) dbg("wait " #intr " timeount");\ -+ __done; \ -+}) -+ -+#define DISABLE_OVERLAYS(fbi) do { \ -+ if (fbi->overlay1fb && (fbi->overlay1fb->state == C_ENABLE)) { \ -+ overlay1fb_disable((struct fb_info*)fbi->overlay1fb); \ -+ } \ -+ if (fbi->overlay2fb && (fbi->overlay2fb->state == C_ENABLE)) { \ -+ overlay2fb_disable((struct fb_info*)fbi->overlay2fb); \ -+ } \ -+ if (fbi->cursorfb && (fbi->cursorfb->state == C_ENABLE)) { \ -+ cursorfb_disable((struct fb_info*)fbi->cursorfb); \ -+ } \ -+}while(0) -+ -+#define ENABLE_OVERLAYS(fbi) do { \ -+ if (fbi->overlay1fb && (fbi->overlay1fb->state == C_DISABLE)) { \ -+ overlay1fb_enable((struct fb_info*)fbi->overlay1fb); \ -+ } \ -+ if (fbi->overlay2fb && (fbi->overlay2fb->state == C_DISABLE)) { \ -+ overlay2fb_enable((struct fb_info*)fbi->overlay2fb); \ -+ } \ -+ if (fbi->cursorfb && (fbi->cursorfb->state == C_DISABLE)) { \ -+ cursorfb_enable((struct fb_info*)fbi->cursorfb); \ -+ } \ -+}while(0) -+ -+#define BLANK_OVERLAYS(fbi) do { \ -+ if (fbi->overlay1fb && (fbi->overlay1fb->state == C_ENABLE)) { \ -+ overlay1fb_disable((struct fb_info*)fbi->overlay1fb); \ -+ fbi->overlay1fb->state = C_BLANK; \ -+ } \ -+ if (fbi->overlay2fb && (fbi->overlay2fb->state == C_ENABLE)) { \ -+ overlay2fb_disable((struct fb_info*)fbi->overlay2fb); \ -+ fbi->overlay2fb->state = C_BLANK; \ -+ } \ -+ if (fbi->cursorfb && (fbi->cursorfb->state == C_ENABLE)) { \ -+ cursorfb_disable((struct fb_info*)fbi->cursorfb); \ -+ fbi->cursorfb->state = C_BLANK; \ -+ } \ -+}while(0) -+ -+#define UNBLANK_OVERLAYS(fbi) do { \ -+ if (fbi->overlay1fb && (fbi->overlay1fb->state == C_BLANK)) { \ -+ overlay1fb_enable((struct fb_info*)fbi->overlay1fb); \ -+ fbi->overlay1fb->state = C_ENABLE; \ -+ } \ -+ if (fbi->overlay2fb && (fbi->overlay2fb->state == C_BLANK)) { \ -+ overlay2fb_enable((struct fb_info*)fbi->overlay2fb); \ -+ fbi->overlay2fb->state = C_ENABLE; \ -+ } \ -+ if (fbi->cursorfb && (fbi->cursorfb->state == C_BLANK)) { \ -+ cursorfb_enable((struct fb_info*)fbi->cursorfb); \ -+ fbi->cursorfb->state = C_ENABLE; \ -+ } \ -+}while(0) -+ -+static int overlay1fb_open(struct fb_info *info, int user) -+{ -+ struct overlayfb_info *fbi = (struct overlayfb_info*) info; -+ int ret = 0; -+ -+/* If basefb is disable, enable fb. */ -+ if (fbi->basefb && fbi->basefb->state != C_ENABLE) -+ pxafb_blank(VESA_NO_BLANKING, (struct fb_info *)(fbi->basefb)); -+ -+ down(&fbi->mutex); -+ -+ if (fbi->refcount) -+ ret = -EACCES; -+ else -+ fbi->refcount ++; -+ -+ up(&fbi->mutex); -+ -+ /* Initialize the variables in overlay1 framebuffer. */ -+ fbi->fb.var.xres = fbi->fb.var.yres = 0; -+ fbi->fb.var.bits_per_pixel = 0; -+ -+ return ret; -+} -+ -+static int overlay1fb_release(struct fb_info *info, int user) -+{ -+ struct overlayfb_info *fbi = (struct overlayfb_info*) info; -+ down(&fbi->mutex); -+ -+ if (fbi->refcount) -+ fbi->refcount --; -+ -+ up(&fbi->mutex); -+ /* disable overlay when released */ -+ overlay1fb_blank(1, info); -+ -+ return 0; -+} -+ -+static int overlay1fb_map_video_memory(struct fb_info *info) -+{ -+ struct overlayfb_info *fbi = (struct overlayfb_info*) info; -+ -+ if (fbi->map_cpu) -+ dma_free_writecombine(NULL, fbi->map_size, (void*)fbi->map_cpu, fbi->map_dma); -+ fbi->map_size = PAGE_ALIGN(fbi->fb.fix.smem_len + PAGE_SIZE); -+ -+ fbi->map_cpu = (unsigned long)dma_alloc_writecombine(NULL, fbi->map_size, -+ &fbi->map_dma, GFP_KERNEL ); -+ -+ if (!fbi->map_cpu) return -ENOMEM; -+ -+ fbi->screen_cpu = fbi->map_cpu + PAGE_SIZE; -+ fbi->screen_dma = fbi->map_dma + PAGE_SIZE; -+ -+ fbi->fb.fix.smem_start = fbi->screen_dma; -+ -+ /* setup dma descriptor */ -+ fbi->dma1 = (struct pxafb_dma_descriptor*) -+ (fbi->screen_cpu - sizeof(struct pxafb_dma_descriptor)); -+ -+ fbi->dma1->fdadr = (fbi->screen_dma - sizeof(struct pxafb_dma_descriptor)); -+ fbi->dma1->fsadr = fbi->screen_dma; -+ fbi->dma1->fidr = 0; -+ fbi->dma1->ldcmd = fbi->fb.fix.smem_len; -+ -+ return 0; -+} -+ -+static int overlay1fb_enable(struct fb_info *info) -+{ -+ struct overlayfb_info *fbi = (struct overlayfb_info*) info; -+ unsigned long bpp1; -+ -+ if (!fbi->map_cpu) return -EINVAL; -+ -+ switch (fbi->fb.var.bits_per_pixel) { -+ case 16: -+ bpp1 = 0x4; -+ break; -+ case 18: -+ bpp1 = 0x6; -+ break; -+ case 19: -+ bpp1 = 0x8; -+ break; -+ case 24: -+ bpp1 = 0x9; -+ break; -+ case 25: -+ bpp1 = 0xa; -+ break; -+ default: -+ return -EINVAL; -+ } -+ -+ /* disable branch/start/end of frame interrupt */ -+ LCCR5 |= (LCCR5_IUM1 | LCCR5_BSM1 | LCCR5_EOFM1 | LCCR5_SOFM1); -+ -+ if (fbi->state == C_DISABLE || fbi->state == C_BLANK) -+ FDADR1 = (fbi->dma1->fdadr); -+ else -+ FBR1 = fbi->dma1->fdadr | 0x1; -+ -+ /* enable overlay 1 window */ -+ OVL1C2 = (fbi->ypos << 10) | fbi->xpos; -+ OVL1C1 = OVL1C1_O1EN | (bpp1 << 20) | ((fbi->fb.var.yres-1)<<10) | (fbi->fb.var.xres-1); -+ -+ fbi->state = C_ENABLE; -+ -+ return 0; -+} -+ -+static int overlay1fb_disable(struct fb_info *info) -+{ -+ struct overlayfb_info *fbi = (struct overlayfb_info*)info; -+ int done; -+ -+ if ((fbi->state == C_DISABLE) || (fbi->state == C_BLANK)) -+ return 0; -+ -+ fbi->state = C_DISABLE; -+ -+ /* clear O1EN */ -+ OVL1C1 &= ~OVL1C1_O1EN; -+ -+ CLEAR_LCD_INTR(LCSR1, LCSR1_BS1); -+ FBR1 = 0x3; -+ done = WAIT_FOR_LCD_INTR(LCSR1, LCSR1_BS1, 100); -+ -+ if (!done) { -+ pr_debug(KERN_INFO "%s: timeout\n", __FUNCTION__); -+ return -1; -+ } -+ return 0; -+} -+ -+static int overlay1fb_blank(int blank, struct fb_info *info) -+{ -+ struct overlayfb_info *fbi = (struct overlayfb_info*) info; -+ int err=0; -+ -+ switch (blank) { -+ case 0: -+ err = overlay1fb_enable(info); -+ if (err) { -+ fbi->state = C_DISABLE; -+ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE); -+ } -+ break; -+ case 1: -+ err = overlay1fb_disable(info); -+ if (err) { -+ fbi->state = C_DISABLE; -+ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE); -+ } -+ break; -+ default: -+ break; -+ } -+ -+ return err; -+} -+ -+static int overlay1fb_check_var( struct fb_var_screeninfo *var, struct fb_info *info) -+{ -+ int xpos, ypos; -+ struct overlayfb_info *fbi=(struct overlayfb_info*)info; -+ -+ /* must in base frame */ -+ xpos = (var->nonstd & 0x3ff); -+ ypos = ((var->nonstd>>10) & 0x3ff); -+ -+ if ( (xpos + var->xres) > fbi->basefb->fb.var.xres ) -+ return -EINVAL; -+ -+ if ( (ypos + var->yres) > fbi->basefb->fb.var.yres ) -+ return -EINVAL; -+ -+ switch (var->bits_per_pixel) { -+ case 16: -+ if ( var->xres & 0x1 ) { -+ printk("xres should be a multiple of 2 pixels!\n"); -+ return -EINVAL; -+ } -+ break; -+ case 18: -+ case 19: -+ if ( var->xres & 0x7 ) { -+ printk("xres should be a multiple of 8 pixels!\n"); -+ return -EINVAL; -+ } -+ break; -+ default: -+ break; -+ } -+ -+ fbi->old_var=*var; -+ -+ var->activate=FB_ACTIVATE_NOW; -+ -+ return 0; -+} -+ -+ -+static int overlay1fb_set_par(struct fb_info *info) -+{ -+ int nbytes=0, err=0, pixels_per_line=0; -+ -+ struct overlayfb_info *fbi=(struct overlayfb_info*)info; -+ struct fb_var_screeninfo *var = &fbi->fb.var; -+ -+ info->flags &= ~FBINFO_MISC_USEREVENT; -+ -+ if (fbi->state == C_BLANK) -+ return 0; -+ -+ if (fbi->state == C_DISABLE) -+ goto out1; -+ -+ /* only xpos & ypos change */ -+ if ( (var->xres == fbi->old_var.xres) && -+ (var->yres == fbi->old_var.yres) && -+ (var->bits_per_pixel == fbi->old_var.bits_per_pixel) ) -+ goto out2; -+ -+out1: -+ switch(var->bits_per_pixel) { -+ case 16: -+ /* 2 pixels per line */ -+ pixels_per_line = (fbi->fb.var.xres + 0x1) & (~0x1); -+ nbytes = 2; -+ -+ var->red = def_rgbt_16.red; -+ var->green = def_rgbt_16.green; -+ var->blue = def_rgbt_16.blue; -+ var->transp = def_rgbt_16.transp; -+ -+ break; -+ case 18: -+ /* 8 pixels per line */ -+ pixels_per_line = (fbi->fb.var.xres + 0x7 ) & (~0x7); -+ nbytes = 3; -+ -+ var->red = def_rgb_18.red; -+ var->green = def_rgb_18.green; -+ var->blue = def_rgb_18.blue; -+ var->transp = def_rgb_18.transp; -+ -+ break; -+ case 19: -+ /* 8 pixels per line */ -+ pixels_per_line = (fbi->fb.var.xres + 0x7 ) & (~0x7); -+ nbytes = 3; -+ -+ var->red = def_rgbt_19.red; -+ var->green = def_rgbt_19.green; -+ var->blue = def_rgbt_19.blue; -+ var->transp = def_rgbt_19.transp; -+ -+ break; -+ case 24: -+ pixels_per_line = fbi->fb.var.xres; -+ nbytes = 4; -+ -+ var->red = def_rgbt_24.red; -+ var->green = def_rgbt_24.green; -+ var->blue = def_rgbt_24.blue; -+ var->transp = def_rgbt_24.transp; -+ -+ break; -+ case 25: -+ pixels_per_line = fbi->fb.var.xres; -+ nbytes = 4; -+ -+ var->red = def_rgbt_25.red; -+ var->green = def_rgbt_25.green; -+ var->blue = def_rgbt_25.blue; -+ var->transp = def_rgbt_25.transp; -+ -+ break; -+ } -+ -+ fbi->fb.fix.line_length = nbytes * pixels_per_line; -+ fbi->fb.fix.smem_len = fbi->fb.fix.line_length * fbi->fb.var.yres; -+ -+ err= overlay1fb_map_video_memory((struct fb_info*)fbi); -+ -+ if (err) -+ return err; -+ -+out2: -+ fbi->xpos = var->nonstd & 0x3ff; -+ fbi->ypos = (var->nonstd>>10) & 0x3ff; -+ -+ overlay1fb_enable(info); -+ -+ return 0; -+ -+} -+ -+static struct fb_ops overlay1fb_ops = { -+ .owner = THIS_MODULE, -+ .fb_open = overlay1fb_open, -+ .fb_release = overlay1fb_release, -+ .fb_check_var = overlay1fb_check_var, -+ .fb_set_par = overlay1fb_set_par, -+ .fb_blank = overlay1fb_blank, -+ .fb_fillrect = cfb_fillrect, -+ .fb_copyarea = cfb_copyarea, -+ .fb_imageblit = cfb_imageblit, -+}; -+ -+ /* -+ * LCD enhancement : Overlay 2 -+ * -+ * Features: -+ * - support planar YCbCr420/YCbCr422/YCbCr444; -+ */ -+static int overlay2fb_open(struct fb_info *info, int user) -+{ -+ struct overlayfb_info *fbi = (struct overlayfb_info*) info; -+ int ret = 0; -+ -+ /* if basefb is disable, enable fb. */ -+ if (fbi->basefb && fbi->basefb->state != C_ENABLE) -+ pxafb_blank(VESA_NO_BLANKING, (struct fb_info *)(fbi->basefb)); -+ -+ down(&fbi->mutex); -+ -+ if (fbi->refcount) -+ ret = -EACCES; -+ else -+ fbi->refcount ++; -+ -+ up(&fbi->mutex); -+ fbi->fb.var.xres = fbi->fb.var.yres = 0; -+ -+ return ret; -+} -+ -+static int overlay2fb_release(struct fb_info *info, int user) -+{ -+ struct overlayfb_info *fbi = (struct overlayfb_info*) info; -+ -+ down(&fbi->mutex); -+ -+ if (fbi->refcount) -+ fbi->refcount --; -+ -+ up(&fbi->mutex); -+ -+ /* disable overlay when released */ -+ overlay2fb_blank(1, info); -+ -+ return 0; -+} -+ -+static int overlay2fb_map_YUV_memory( struct fb_info *info) -+{ -+ struct overlayfb_info *fbi = (struct overlayfb_info*) info; -+ unsigned int ylen, cblen, crlen, aylen, acblen, acrlen; -+ unsigned int yoff, cboff, croff; -+ unsigned int xres,yres; -+ unsigned int nbytes; -+ -+ ylen = cblen = crlen = aylen = acblen = acrlen = 0; -+ yoff = cboff = croff = 0; -+ -+ if (fbi->map_cpu) -+ dma_free_writecombine(NULL, fbi->map_size, (void*)fbi->map_cpu, fbi->map_dma); -+ -+ yres = fbi->fb.var.yres; -+ -+ switch(fbi->format) { -+ case 0x4: /* YCbCr 4:2:0 planar */ -+ pr_debug("420 planar\n"); -+ /* 16 pixels per line */ -+ xres = (fbi->fb.var.xres + 0xf) & (~0xf); -+ fbi->fb.fix.line_length = xres; -+ -+ nbytes = xres * yres; -+ ylen = nbytes; -+ cblen = crlen = (nbytes/4); -+ -+ break; -+ case 0x3: /* YCbCr 4:2:2 planar */ -+ /* 8 pixles per line */ -+ pr_debug("422 planar\n"); -+ xres = (fbi->fb.var.xres + 0x7) & (~0x7); -+ fbi->fb.fix.line_length = xres; -+ -+ nbytes = xres * yres; -+ ylen = nbytes; -+ cblen = crlen = (nbytes/2); -+ -+ break; -+ case 0x2: /* YCbCr 4:4:4 planar */ -+ /* 4 pixels per line */ -+ pr_debug("444 planar\n"); -+ xres = (fbi->fb.var.xres + 0x3) & (~0x3); -+ fbi->fb.fix.line_length = xres; -+ -+ nbytes = xres * yres; -+ ylen = cblen = crlen = nbytes; -+ break; -+ } -+ -+ /* 16-bytes alignment for DMA */ -+ aylen = (ylen + 0xf) & (~0xf); -+ acblen = (cblen + 0xf) & (~0xf); -+ acrlen = (crlen + 0xf) & (~0xf); -+ -+ fbi->fb.fix.smem_len = aylen + acblen + acrlen; -+ -+ /* alloc memory */ -+ -+ fbi->map_size = PAGE_ALIGN(fbi->fb.fix.smem_len + PAGE_SIZE); -+ fbi->map_cpu = (unsigned long)dma_alloc_writecombine(NULL, fbi->map_size, -+ &fbi->map_dma, GFP_KERNEL ); -+ -+ if (!fbi->map_cpu) return -ENOMEM; -+ -+ fbi->screen_cpu = fbi->map_cpu + PAGE_SIZE; -+ fbi->screen_dma = fbi->map_dma + PAGE_SIZE; -+ -+ fbi->fb.fix.smem_start = fbi->screen_dma; -+ -+ /* setup dma for Planar format */ -+ fbi->dma2 = (struct pxafb_dma_descriptor*) -+ (fbi->screen_cpu - sizeof(struct pxafb_dma_descriptor)); -+ fbi->dma3 = fbi->dma2 - 1; -+ fbi->dma4 = fbi->dma3 - 1; -+ -+ /* offset */ -+ yoff = 0; -+ cboff = aylen; -+ croff = cboff + acblen; -+ -+ /* Y vector */ -+ fbi->dma2->fdadr = (fbi->screen_dma - sizeof(struct pxafb_dma_descriptor)); -+ fbi->dma2->fsadr = fbi->screen_dma + yoff; -+ fbi->dma2->fidr = 0; -+ fbi->dma2->ldcmd = ylen; -+ -+ /* Cb vector */ -+ fbi->dma3->fdadr = (fbi->dma2->fdadr - sizeof(struct pxafb_dma_descriptor)); -+ fbi->dma3->fsadr = (fbi->screen_dma + cboff); -+ fbi->dma3->fidr = 0; -+ fbi->dma3->ldcmd = cblen; -+ -+ /* Cr vector */ -+ -+ fbi->dma4->fdadr = (fbi->dma3->fdadr - sizeof(struct pxafb_dma_descriptor)); -+ fbi->dma4->fsadr = (fbi->screen_dma + croff); -+ fbi->dma4->fidr = 0; -+ fbi->dma4->ldcmd = crlen; -+ -+ /* adjust for user */ -+ fbi->fb.var.red.length = ylen; -+ fbi->fb.var.red.offset = yoff; -+ fbi->fb.var.green.length = cblen; -+ fbi->fb.var.green.offset = cboff; -+ fbi->fb.var.blue.length = crlen; -+ fbi->fb.var.blue.offset = croff; -+ -+ return 0; -+}; -+ -+static int overlay2fb_map_RGB_memory( struct fb_info *info) -+{ -+ struct overlayfb_info *fbi = (struct overlayfb_info*) info; -+ struct fb_var_screeninfo *var = &fbi->fb.var; -+ int pixels_per_line=0 , nbytes=0; -+ -+ if (fbi->map_cpu) -+ dma_free_writecombine(NULL, fbi->map_size, (void*)fbi->map_cpu, fbi->map_dma); -+ -+ switch(var->bits_per_pixel) { -+ case 16: -+ /* 2 pixels per line */ -+ pixels_per_line = (fbi->fb.var.xres + 0x1) & (~0x1); -+ nbytes = 2; -+ -+ var->red = def_rgbt_16.red; -+ var->green = def_rgbt_16.green; -+ var->blue = def_rgbt_16.blue; -+ var->transp = def_rgbt_16.transp; -+ break; -+ -+ case 18: -+ /* 8 pixels per line */ -+ pixels_per_line = (fbi->fb.var.xres + 0x7 ) & (~0x7); -+ nbytes = 3; -+ -+ var->red = def_rgb_18.red; -+ var->green = def_rgb_18.green; -+ var->blue = def_rgb_18.blue; -+ var->transp = def_rgb_18.transp; -+ -+ break; -+ case 19: -+ /* 8 pixels per line */ -+ pixels_per_line = (fbi->fb.var.xres + 0x7 ) & (~0x7); -+ nbytes = 3; -+ -+ var->red = def_rgbt_19.red; -+ var->green = def_rgbt_19.green; -+ var->blue = def_rgbt_19.blue; -+ var->transp = def_rgbt_19.transp; -+ -+ break; -+ case 24: -+ pixels_per_line = fbi->fb.var.xres; -+ nbytes = 4; -+ -+ var->red = def_rgbt_24.red; -+ var->green = def_rgbt_24.green; -+ var->blue = def_rgbt_24.blue; -+ var->transp = def_rgbt_24.transp; -+ -+ break; -+ -+ case 25: -+ pixels_per_line = fbi->fb.var.xres; -+ nbytes = 4; -+ -+ var->red = def_rgbt_25.red; -+ var->green = def_rgbt_25.green; -+ var->blue = def_rgbt_25.blue; -+ var->transp = def_rgbt_25.transp; -+ -+ break; -+ } -+ -+ fbi->fb.fix.line_length = nbytes * pixels_per_line; -+ fbi->fb.fix.smem_len = fbi->fb.fix.line_length * fbi->fb.var.yres; -+ -+ fbi->map_size = PAGE_ALIGN(fbi->fb.fix.smem_len + PAGE_SIZE); -+ fbi->map_cpu = (unsigned long)dma_alloc_writecombine(NULL, fbi->map_size, -+ &fbi->map_dma, GFP_KERNEL ); -+ -+ if (!fbi->map_cpu) return -ENOMEM; -+ -+ fbi->screen_cpu = fbi->map_cpu + PAGE_SIZE; -+ fbi->screen_dma = fbi->map_dma + PAGE_SIZE; -+ -+ fbi->fb.fix.smem_start = fbi->screen_dma; -+ -+ /* setup dma descriptor */ -+ fbi->dma2 = (struct pxafb_dma_descriptor*) -+ (fbi->screen_cpu - sizeof(struct pxafb_dma_descriptor)); -+ -+ fbi->dma2->fdadr = (fbi->screen_dma - sizeof(struct pxafb_dma_descriptor)); -+ fbi->dma2->fsadr = fbi->screen_dma; -+ fbi->dma2->fidr = 0; -+ fbi->dma2->ldcmd = fbi->fb.fix.smem_len; -+ -+ return 0; -+} -+ -+static int overlay2fb_enable(struct fb_info *info) -+{ -+ struct overlayfb_info *fbi = (struct overlayfb_info*) info; -+ unsigned long bpp2; -+ unsigned int xres, yres; -+ -+ if (!fbi->map_cpu) return -EINVAL; -+ -+ switch(fbi->fb.var.bits_per_pixel) { -+ case 16: -+ bpp2 = 0x4; -+ break; -+ case 18: -+ bpp2 = 0x6; -+ break; -+ case 19: -+ bpp2 = 0x8; -+ break; -+ case 24: -+ bpp2 = 0x9; -+ break; -+ case 25: -+ bpp2 = 0xa; -+ break; -+ default: -+ return -EINVAL; -+ } -+ -+ /* disable branch/start/end of frame interrupt */ -+ LCCR5 |= (LCCR5_IUM4 | LCCR5_IUM3 | LCCR5_IUM2 | -+ LCCR5_BSM4 | LCCR5_BSM3 | LCCR5_BSM2 | -+ LCCR5_EOFM4 | LCCR5_EOFM3 | LCCR5_EOFM2 | -+ LCCR5_SOFM4 | LCCR5_SOFM3 | LCCR5_SOFM2); -+ -+ if (fbi->format == 0) { -+ /* overlay2 RGB resolution, RGB and YUV have different xres value*/ -+ xres = fbi->fb.var.xres; -+ yres = fbi->fb.var.yres; -+ -+ OVL2C2 = (fbi->format << 20) | (fbi->ypos << 10) | fbi->xpos; -+ OVL2C1 = OVL2C1_O2EN | (bpp2 << 20) | ((yres-1)<<10) | (xres-1); -+ /* setup RGB DMA */ -+ if (fbi->state == C_DISABLE || fbi->state == C_BLANK) -+ FDADR2 = fbi->dma2->fdadr; -+ else -+ FBR2 = fbi->dma2->fdadr | 0x1; -+ } else { -+ /* overlay2 YUV resolution */ -+ xres = fbi->fb.fix.line_length; -+ yres = fbi->fb.var.yres; -+ -+ OVL2C2 = (fbi->format << 20) | (fbi->ypos << 10) | fbi->xpos; -+ OVL2C1 = OVL2C1_O2EN | (bpp2 << 20) | ((yres-1)<<10) | (xres-1); -+ -+ if (fbi->state == C_DISABLE || fbi->state == C_BLANK) { -+ FDADR2 = fbi->dma2->fdadr; -+ FDADR3 = fbi->dma3->fdadr; -+ FDADR4 = fbi->dma4->fdadr; -+ } else { -+ FBR2 = fbi->dma2->fdadr | 0x01; -+ FBR3 = fbi->dma3->fdadr | 0x01; -+ FBR4 = fbi->dma4->fdadr | 0x01; -+ } -+ } -+ -+ fbi->state = C_ENABLE; -+ return 0; -+} -+ -+static int overlay2fb_disable(struct fb_info *info) -+{ -+ struct overlayfb_info *fbi = (struct overlayfb_info*)info; -+ int done; -+ -+ if (fbi->state == C_DISABLE) -+ return 0; -+ if (fbi->state == C_BLANK) { -+ fbi->state = C_DISABLE; -+ return 0; -+ } -+ -+ fbi->state = C_DISABLE; -+ -+ /* clear O2EN */ -+ OVL2C1 &= ~OVL2C1_O2EN; -+ -+ /* Make overlay2 can't disable/enable -+ * correctly sometimes. -+ */ -+ CLEAR_LCD_INTR(LCSR1, LCSR1_BS2); -+ -+ if (fbi->format == 0) -+ FBR2 = 0x3; -+ else { -+ FBR2 = 0x3; -+ FBR3 = 0x3; -+ FBR4 = 0x3; -+ } -+ -+ done = WAIT_FOR_LCD_INTR(LCSR1, LCSR1_BS2, 100); -+ -+ if (!done) { -+ pr_debug(KERN_INFO "%s: timeout\n", __FUNCTION__); -+ return -1; -+ } -+ return 0; -+} -+ -+static int overlay2fb_blank(int blank, struct fb_info *info) -+{ -+ struct overlayfb_info *fbi = (struct overlayfb_info*) info; -+ int err=0; -+ -+ switch(blank) -+ { -+ case 0: -+ err = overlay2fb_enable(info); -+ if (err) { -+ fbi->state = C_DISABLE; -+ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE); -+ } -+ break; -+ case 1: -+ err = overlay2fb_disable(info); -+ if (err) { -+ fbi->state = C_DISABLE; -+ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE); -+ } -+ break; -+ default: -+ /* reserved */ -+ break; -+ } -+ -+ return err; -+} -+ -+ -+static int overlay2fb_check_var( struct fb_var_screeninfo *var, struct fb_info *info) -+{ -+ int xpos, ypos, xres, yres; -+ int format; -+ struct overlayfb_info *fbi=(struct overlayfb_info*)info; -+ -+ xres=yres=0; -+ -+ xpos = (var->nonstd & 0x3ff); -+ ypos = (var->nonstd >> 10) & 0x3ff; -+ format = (var->nonstd >>20) & 0x7; -+ -+ -+ /* Palnar YCbCr444, YCbCr422, YCbCr420 */ -+ if ( (format != 0x4) && (format != 0x3) && (format != 0x2) && (format !=0x0)) -+ return -EINVAL; -+ -+ /* dummy pixels */ -+ switch(format) { -+ case 0x0: /* RGB */ -+ xres = var->xres; -+ break; -+ case 0x2: /* 444 */ -+ xres = (var->xres + 0x3) & ~(0x3); -+ break; -+ case 0x3: /* 422 */ -+ xres = (var->xres + 0x7) & ~(0x7); -+ break; -+ case 0x4: /* 420 */ -+ xres = (var->xres + 0xf) & ~(0xf); -+ break; -+ } -+ yres = var->yres; -+ -+ if ( (xpos + xres) > fbi->basefb->fb.var.xres ) -+ return -EINVAL; -+ -+ if ( (ypos + yres) > fbi->basefb->fb.var.yres ) -+ return -EINVAL; -+ -+ fbi->old_var=*var; -+ -+ var->activate=FB_ACTIVATE_NOW; -+ -+ return 0; -+ -+} -+ -+ -+/* -+ * overlay2fb_set_var() -+ * -+ * var.nonstd is used as YCbCr format. -+ * var.red/green/blue is used as (Y/Cb/Cr) vector -+ */ -+ -+static int overlay2fb_set_par(struct fb_info *info) -+{ -+ unsigned int xpos, ypos; -+ int format, err; -+ -+ struct overlayfb_info *fbi=(struct overlayfb_info*)info; -+ struct fb_var_screeninfo *var = &fbi->fb.var; -+ -+ info->flags &= ~FBINFO_MISC_USEREVENT; -+ -+ if (fbi->state == C_BLANK) -+ return 0; -+ -+ if (fbi->state == C_DISABLE) -+ goto out1; -+ -+ if ( (var->xres == fbi->old_var.xres) && -+ (var->yres == fbi->old_var.yres) && -+ (var->bits_per_pixel == fbi->old_var.bits_per_pixel) && -+ (((var->nonstd>>20) & 0x7) == fbi->format) ) -+ goto out2; -+ -+out1: -+ xpos = var->nonstd & 0x3ff; -+ ypos = (var->nonstd>>10) & 0x3ff; -+ format = (var->nonstd>>20) & 0x7; -+ -+ -+ fbi->format = format; -+ if ( fbi->format==0 ) -+ err = overlay2fb_map_RGB_memory(info); -+ else -+ err = overlay2fb_map_YUV_memory(info); -+ -+ if (err) return err; -+ -+out2: -+ /* position */ -+ fbi->xpos = var->nonstd & 0x3ff; -+ fbi->ypos = (var->nonstd>>10) & 0x3ff; -+ -+ overlay2fb_enable(info); -+ -+ return 0; -+} -+ -+static struct fb_ops overlay2fb_ops = { -+ .owner = THIS_MODULE, -+ .fb_open = overlay2fb_open, -+ .fb_release = overlay2fb_release, -+ .fb_check_var = overlay2fb_check_var, -+ .fb_set_par = overlay2fb_set_par, -+ .fb_blank = overlay2fb_blank, -+ .fb_fillrect = cfb_fillrect, -+ .fb_copyarea = cfb_copyarea, -+ .fb_imageblit = cfb_imageblit, -+}; -+ -+/* Hardware cursor */ -+ -+/* Bulverde Cursor Modes */ -+struct cursorfb_mode{ -+ int xres; -+ int yres; -+ int bpp; -+}; -+ -+static struct cursorfb_mode cursorfb_modes[]={ -+ { 32, 32, 2}, -+ { 32, 32, 2}, -+ { 32, 32, 2}, -+ { 64, 64, 2}, -+ { 64, 64, 2}, -+ { 64, 64, 2}, -+ {128, 128, 1}, -+ {128, 128, 1} -+}; -+ -+static int cursorfb_enable(struct fb_info *info) -+{ -+ struct overlayfb_info *fbi = (struct overlayfb_info*) info; -+ -+ if (!fbi->map_cpu) return -EINVAL; -+ -+ CCR &= ~CCR_CEN; -+ -+ /* set palette format -+ * -+ * FIXME: if only cursor uses palette -+ */ -+ LCCR4 = (LCCR4 & (~(0x3<<15))) | (0x1<<15); -+ -+ /* disable branch/start/end of frame interrupt */ -+ LCCR5 |= (LCCR5_IUM5 | LCCR5_BSM5 | LCCR5_EOFM5 | LCCR5_SOFM5); -+ -+ /* load palette and frame data */ -+ if (fbi->state == C_DISABLE) { -+ FDADR5 = fbi->dma5_pal->fdadr; -+ udelay(1); -+ FDADR5 = fbi->dma5_frame->fdadr; -+ udelay(1); -+ -+ } -+ else { -+ FBR5 = fbi->dma5_pal->fdadr | 0x1; -+ udelay(1); -+ FBR5 = fbi->dma5_frame->fdadr | 0x1; -+ udelay(1); -+ } -+ -+ CCR = CCR_CEN | (fbi->ypos << 15) | (fbi->xpos << 5) | (fbi->format); -+ -+ fbi->state = C_ENABLE; -+ -+ return 0; -+} -+ -+static int cursorfb_disable(struct fb_info *info) -+{ -+ struct overlayfb_info *fbi = (struct overlayfb_info*)info; -+ int done, ret = 0; -+ -+ fbi->state = C_DISABLE; -+ -+ done = WAIT_FOR_LCD_INTR(LCSR1, LCSR1_BS5, 100); -+ if (!done) ret = -1; -+ -+ CCR &= ~CCR_CEN; -+ -+ return ret; -+} -+ -+static int cursorfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, -+ u_int trans, struct fb_info *info) -+{ -+ struct overlayfb_info *fbi = (struct overlayfb_info *)info; -+ u_int val, ret = 1; -+ u_int *pal=(u_int*) fbi->palette_cpu; -+ -+ /* 25bit with Transparcy for 16bpp format */ -+ if (regno < fbi->palette_size) { -+ val = ((trans << 24) & 0x1000000); -+ val |= ((red << 16) & 0x0ff0000); -+ val |= ((green << 8 ) & 0x000ff00); -+ val |= ((blue << 0) & 0x00000ff); -+ -+ pal[regno] = val; -+ ret = 0; -+ } -+ return ret; -+} -+ -+int cursorfb_blank(int blank, struct fb_info *info) -+{ -+ switch(blank) -+ { -+ case 0: -+ cursorfb_enable(info); -+ break; -+ case 1: -+ cursorfb_disable(info); -+ break; -+ default: -+ /* reserved */ -+ break; -+ } -+ return 0; -+} -+ -+static int cursorfb_check_var( struct fb_var_screeninfo *var, struct fb_info *info) -+{ -+ int xpos, ypos, xres, yres; -+ int mode; -+ struct cursorfb_mode *cursor; -+ struct overlayfb_info *fbi=(struct overlayfb_info*)info; -+ -+ mode = var->nonstd & 0x7; -+ xpos = (var->nonstd>>5) & 0x3ff; -+ ypos = (var->nonstd>>15) & 0x3ff; -+ -+ if (mode>7 || mode <0 ) -+ return -EINVAL; -+ -+ cursor = cursorfb_modes + mode; -+ -+ xres = cursor->xres; -+ yres = cursor->yres; -+ -+ if ( (xpos + xres) > fbi->basefb->fb.var.xres ) -+ return -EINVAL; -+ -+ if ( (ypos + yres) > fbi->basefb->fb.var.yres ) -+ return -EINVAL; -+ -+ return 0; -+ -+} -+ -+static int cursorfb_set_par(struct fb_info *info) -+{ -+ struct overlayfb_info *fbi = (struct overlayfb_info*) info; -+ struct fb_var_screeninfo *var = &fbi->fb.var; -+ struct cursorfb_mode *cursor; -+ int mode, xpos, ypos; -+ int err; -+ -+ info->flags &= ~FBINFO_MISC_USEREVENT; -+ -+ mode = var->nonstd & 0x7; -+ xpos = (var->nonstd>>5) & 0x3ff; -+ ypos = (var->nonstd>>15) & 0x3ff; -+ -+ if (mode != fbi->format) { -+ cursor = cursorfb_modes + mode; -+ -+ /* update "var" info */ -+ fbi->fb.var.xres = cursor->xres; -+ fbi->fb.var.yres = cursor->yres; -+ fbi->fb.var.bits_per_pixel = cursor->bpp; -+ -+ /* alloc video memory -+ * -+ * 4k is engouh for 128x128x1 cursor, -+ * - 2k for cursor pixels, -+ * - 2k for palette data, plus 2 dma descriptor -+ */ -+ if (!fbi->map_cpu) { -+ fbi->map_size = PAGE_SIZE; -+ fbi->map_cpu = (unsigned long)dma_alloc_writecombine(NULL, fbi->map_size, -+ &fbi->map_dma, GFP_KERNEL ); -+ if (!fbi->map_cpu) return -ENOMEM; -+ } -+ -+ cursor = cursorfb_modes + mode; -+ -+ /* update overlay & fix "info" */ -+ fbi->screen_cpu = fbi->map_cpu; -+ fbi->palette_cpu = fbi->map_cpu + (PAGE_SIZE/2); -+ fbi->screen_dma = fbi->map_dma; -+ fbi->palette_dma = fbi->map_dma + (PAGE_SIZE/2); -+ -+ fbi->format = mode; -+ fbi->palette_size = (1<<cursor->bpp); -+ fbi->fb.fix.smem_start = fbi->screen_dma; -+ fbi->fb.fix.smem_len = cursor->xres * cursor->yres * cursor->bpp / 8; -+ fbi->fb.fix.line_length = cursor->xres * cursor->bpp / 8; -+ -+ fbi->dma5_pal = (struct pxafb_dma_descriptor*)(fbi->map_cpu + PAGE_SIZE - 16 ); -+ fbi->dma5_pal->fdadr = (fbi->map_dma + PAGE_SIZE - 16); -+ fbi->dma5_pal->fsadr = fbi->palette_dma; -+ fbi->dma5_pal->fidr = 0; -+ fbi->dma5_pal->ldcmd = (fbi->palette_size<<2) | LDCMD_PAL; -+ -+ fbi->dma5_frame = (struct pxafb_dma_descriptor*)(fbi->map_cpu + PAGE_SIZE - 32 ); -+ fbi->dma5_frame->fdadr = (fbi->map_dma + PAGE_SIZE - 32); -+ fbi->dma5_frame->fsadr = fbi->screen_dma; -+ fbi->dma5_frame->fidr = 0; -+ fbi->dma5_frame->ldcmd = fbi->fb.fix.smem_len; -+ -+ /* alloc & set default cmap */ -+ err = fb_alloc_cmap(&fbi->fb.cmap, fbi->palette_size, 0); -+ if (err) return err; -+ err = fb_set_cmap(&fbi->fb.cmap, info); -+ if (err) return err; -+ } -+ -+ /* update overlay info */ -+ if ( (xpos != fbi->xpos) || (ypos != fbi->ypos) ) { -+ fbi->xpos = xpos; -+ fbi->ypos = ypos; -+ } -+ -+ cursorfb_enable(info); -+ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE); -+ -+ return 0; -+} -+ -+static struct fb_ops cursorfb_ops = { -+ .owner = THIS_MODULE, -+ .fb_check_var = cursorfb_check_var, -+ .fb_set_par = cursorfb_set_par, -+ .fb_blank = cursorfb_blank, -+ .fb_fillrect = cfb_fillrect, -+ .fb_copyarea = cfb_copyarea, -+ .fb_imageblit = cfb_imageblit, -+ .fb_setcolreg = cursorfb_setcolreg, -+}; -+ -+static struct overlayfb_info * __init overlay1fb_init_fbinfo(void) -+{ -+ struct overlayfb_info *fbi; -+ -+ fbi = kmalloc(sizeof(struct overlayfb_info) + sizeof(u16) * 16, GFP_KERNEL); -+ if (!fbi) -+ return NULL; -+ -+ memset(fbi, 0, sizeof(struct overlayfb_info) ); -+ -+ fbi->refcount = 0; -+ init_MUTEX(&fbi->mutex); -+ -+ strcpy(fbi->fb.fix.id, "overlay1"); -+ -+ fbi->fb.fix.type = FB_TYPE_PACKED_PIXELS; -+ fbi->fb.fix.type_aux = 0; -+ fbi->fb.fix.xpanstep = 0; -+ fbi->fb.fix.ypanstep = 0; -+ fbi->fb.fix.ywrapstep = 0; -+ fbi->fb.fix.accel = FB_ACCEL_NONE; -+ -+ fbi->fb.var.nonstd = 0; -+ fbi->fb.var.activate = FB_ACTIVATE_NOW; -+ fbi->fb.var.height = -1; -+ fbi->fb.var.width = -1; -+ fbi->fb.var.accel_flags = 0; -+ fbi->fb.var.vmode = FB_VMODE_NONINTERLACED; -+ -+ -+ fbi->fb.fbops = &overlay1fb_ops; -+ fbi->fb.flags = FBINFO_FLAG_DEFAULT; -+ fbi->fb.node = -1; -+ fbi->fb.pseudo_palette = NULL; -+ -+ fbi->xpos = 0; -+ fbi->ypos = 0; -+ fbi->format = -1; -+ fbi->state = C_DISABLE; -+ -+ return fbi; -+} -+ -+static struct overlayfb_info * __init overlay2fb_init_fbinfo(void) -+{ -+ struct overlayfb_info *fbi; -+ -+ fbi = kmalloc(sizeof(struct overlayfb_info) + sizeof(u16) * 16, GFP_KERNEL); -+ if (!fbi) -+ return NULL; -+ -+ memset(fbi, 0, sizeof(struct overlayfb_info) ); -+ -+ fbi->refcount = 0; -+ init_MUTEX(&fbi->mutex); -+ -+ strcpy(fbi->fb.fix.id, "overlay2"); -+ -+ fbi->fb.fix.type = FB_TYPE_PACKED_PIXELS; -+ fbi->fb.fix.type_aux = 0; -+ fbi->fb.fix.xpanstep = 0; -+ fbi->fb.fix.ypanstep = 0; -+ fbi->fb.fix.ywrapstep = 0; -+ fbi->fb.fix.accel = FB_ACCEL_NONE; -+ -+ fbi->fb.var.nonstd = 0; -+ fbi->fb.var.activate = FB_ACTIVATE_NOW; -+ fbi->fb.var.height = -1; -+ fbi->fb.var.width = -1; -+ fbi->fb.var.accel_flags = 0; -+ fbi->fb.var.vmode = FB_VMODE_NONINTERLACED; -+ -+ fbi->fb.fbops = &overlay2fb_ops; -+ fbi->fb.flags = FBINFO_FLAG_DEFAULT; -+ fbi->fb.node = -1; -+ fbi->fb.pseudo_palette = NULL; -+ -+ fbi->xpos = 0; -+ fbi->ypos = 0; -+ fbi->format = -1; -+ fbi->state = C_DISABLE; -+ -+ return fbi; -+} -+ -+static struct overlayfb_info * __init cursorfb_init_fbinfo(void) -+{ -+ struct overlayfb_info *fbi; -+ -+ fbi = kmalloc(sizeof(struct overlayfb_info) + sizeof(u16) * 16, GFP_KERNEL); -+ if (!fbi) -+ return NULL; -+ -+ memset(fbi, 0, sizeof(struct overlayfb_info) ); -+ -+ fbi->refcount = 0; -+ init_MUTEX(&fbi->mutex); -+ -+ strcpy(fbi->fb.fix.id, "cursor"); -+ -+ fbi->fb.fix.type = FB_TYPE_PACKED_PIXELS; -+ fbi->fb.fix.type_aux = 0; -+ fbi->fb.fix.xpanstep = 0; -+ fbi->fb.fix.ypanstep = 0; -+ fbi->fb.fix.ywrapstep = 0; -+ fbi->fb.fix.accel = FB_ACCEL_NONE; -+ -+ fbi->fb.var.nonstd = 0; -+ fbi->fb.var.activate = FB_ACTIVATE_NOW; -+ fbi->fb.var.height = -1; -+ fbi->fb.var.width = -1; -+ fbi->fb.var.accel_flags = 0; -+ fbi->fb.var.vmode = FB_VMODE_NONINTERLACED; -+ -+ fbi->fb.fbops = &cursorfb_ops; -+ fbi->fb.flags = FBINFO_FLAG_DEFAULT; -+ fbi->fb.node = -1; -+ fbi->fb.pseudo_palette = NULL; -+ -+ -+ fbi->xpos = 0; -+ fbi->ypos = 0; -+ fbi->format = -1; -+ fbi->state = C_DISABLE; -+ -+ return fbi; -+} -+ -+ -+void pxa_set_overlay_ctrlr_state(struct pxafb_info *fbi, u_int state) -+{ -+ switch (state) { -+ case C_DISABLE: -+ DISABLE_OVERLAYS(fbi); -+ break; -+ case C_ENABLE: -+ ENABLE_OVERLAYS(fbi); -+ break; -+ case C_BLANK: -+ BLANK_OVERLAYS(fbi); -+ break; -+ case C_UNBLANK: -+ UNBLANK_OVERLAYS(fbi); -+ break; -+ default: -+ break; -+ } -+} -+ -+static int is_pxafb_device(struct device * dev, void * data) -+{ -+ struct platform_device *pdev = container_of(dev, struct platform_device, dev); -+ -+ return (strncmp(pdev->name, "pxa2xx-fb", 9) == 0); -+} -+ -+static int __devinit pxafb_overlay_init(void) -+{ -+ int ret; -+ struct overlayfb_info *overlay1fb, *overlay2fb, *cursorfb; -+ struct pxafb_info *fbi; -+ struct device *dev; -+ -+ ret = -1; -+ overlay1fb = overlay2fb = cursorfb = NULL; -+ fbi = NULL; -+ -+ dev = bus_find_device(&platform_bus_type, NULL, NULL, is_pxafb_device); -+ if (!dev) { -+ printk(KERN_INFO "Base framebuffer not exists, failed to load overlay driver!\n"); -+ return ret; -+ } -+ -+ fbi = dev_get_drvdata(dev); -+ if (fbi == NULL) { -+ printk(KERN_INFO "Base framebuffer not initialized, failed to load overlay driver!\n"); -+ return ret; -+ } -+ -+ /* Overlay 1 windows */ -+ overlay1fb = overlay1fb_init_fbinfo(); -+ -+ if (!overlay1fb) { -+ ret = -ENOMEM; -+ printk("overlay1fb_init_fbinfo failed\n"); -+ goto failed; -+ } -+ -+ ret = register_framebuffer(&overlay1fb->fb); -+ if (ret < 0) -+ goto failed; -+ -+ /* Overlay 2 window */ -+ overlay2fb = overlay2fb_init_fbinfo(); -+ -+ if (!overlay2fb) { -+ ret = -ENOMEM; -+ printk("overlay2fb_init_fbinfo failed\n"); -+ goto failed; -+ } -+ -+ ret = register_framebuffer(&overlay2fb->fb); -+ if (ret < 0) goto failed; -+ -+ /* Hardware cursor window */ -+ cursorfb = cursorfb_init_fbinfo(); -+ -+ if (!cursorfb) { -+ ret = -ENOMEM; -+ printk("cursorfb_init_fbinfo failed\n"); -+ goto failed; -+ } -+ -+ ret = register_framebuffer(&cursorfb->fb); -+ if (ret < 0) goto failed; -+ -+ -+ /* set refernce to Overlays */ -+ fbi->overlay1fb = overlay1fb; -+ fbi->overlay2fb = overlay2fb; -+ fbi->cursorfb = cursorfb; -+ fbi->set_overlay_ctrlr_state=pxa_set_overlay_ctrlr_state; -+ -+ /* set refernce to BaseFrame */ -+ overlay1fb->basefb = fbi; -+ overlay2fb->basefb = fbi; -+ cursorfb->basefb = fbi; -+ -+ printk(KERN_INFO "Load PXA Overlay driver successfully!\n"); -+ -+ return 0; -+ -+failed: -+ if (overlay1fb) -+ kfree(overlay1fb); -+ if (overlay2fb) -+ kfree(overlay2fb); -+ if (cursorfb) -+ kfree(cursorfb); -+ printk(KERN_INFO "Load PXA Overlay driver failed!\n"); -+ return ret; -+} -+ -+static void __exit pxafb_overlay_exit(void) -+{ -+ struct pxafb_info *fbi; -+ struct device *dev; -+ -+ dev = bus_find_device(&platform_bus_type, NULL, NULL, is_pxafb_device); -+ if (!dev) -+ return; -+ -+ fbi = dev_get_drvdata(dev); -+ if (!fbi) -+ return; -+ -+ if (fbi->overlay1fb) { -+ unregister_framebuffer(&(fbi->overlay1fb->fb)); -+ kfree(fbi->overlay1fb); -+ fbi->overlay1fb = NULL; -+ } -+ -+ if (fbi->overlay2fb) { -+ unregister_framebuffer(&(fbi->overlay2fb->fb)); -+ kfree(fbi->overlay2fb); -+ fbi->overlay2fb = NULL; -+ } -+ -+ if (fbi->cursorfb) { -+ unregister_framebuffer(&(fbi->cursorfb->fb)); -+ kfree(fbi->cursorfb); -+ fbi->cursorfb = NULL; -+ } -+ -+ fbi->set_overlay_ctrlr_state = NULL; -+ -+ printk(KERN_INFO "Unload PXA Overlay driver successfully!\n"); -+ return; -+} -+ -+ -+module_init(pxafb_overlay_init); -+module_exit(pxafb_overlay_exit); -+ -+MODULE_DESCRIPTION("Loadable framebuffer overlay driver for PXA"); -+MODULE_LICENSE("GPL"); -+ -Index: linux-2.6.23/include/asm-arm/arch-pxa/pxa-regs.h -=================================================================== ---- linux-2.6.23.orig/include/asm-arm/arch-pxa/pxa-regs.h 2007-10-10 09:38:46.000000000 +0200 -+++ linux-2.6.23/include/asm-arm/arch-pxa/pxa-regs.h 2007-10-22 21:53:54.000000000 +0200 -@@ -789,11 +789,18 @@ - #define UDC_INT_PACKETCMP (0x1) - - #define UDCICR_INT(n,intr) (((intr) & 0x03) << (((n) & 0x0F) * 2)) -+/* Older defines, do not use. */ - #define UDCICR1_IECC (1 << 31) /* IntEn - Configuration Change */ - #define UDCICR1_IESOF (1 << 30) /* IntEn - Start of Frame */ - #define UDCICR1_IERU (1 << 29) /* IntEn - Resume */ - #define UDCICR1_IESU (1 << 28) /* IntEn - Suspend */ - #define UDCICR1_IERS (1 << 27) /* IntEn - Reset */ -+/* New defines. */ -+#define UDCISR1_IRCC (1 << 31) /* IntEn - Configuration Change */ -+#define UDCISR1_IRSOF (1 << 30) /* IntEn - Start of Frame */ -+#define UDCISR1_IRRU (1 << 29) /* IntEn - Resume */ -+#define UDCISR1_IRSU (1 << 28) /* IntEn - Suspend */ -+#define UDCISR1_IRRS (1 << 27) /* IntEn - Reset */ - - #define UDCISR0 __REG(0x4060000C) /* UDC Interrupt Status Register 0 */ - #define UDCISR1 __REG(0x40600010) /* UDC Interrupt Status Register 1 */ -@@ -1826,6 +1833,8 @@ - #define DFBR0 __REG(0x44000020) /* DMA Channel 0 Frame Branch Register */ - #define DFBR1 __REG(0x44000024) /* DMA Channel 1 Frame Branch Register */ - #define LCSR __REG(0x44000038) /* LCD Controller Status Register */ -+#define LCSR0 __REG(0x44000038) /* LCD Controller Status Register */ -+#define LCSR1 __REG(0x44000034) /* LCD Controller Status Register */ - #define LIIDR __REG(0x4400003C) /* LCD Controller Interrupt ID Register */ - #define TMEDRGBR __REG(0x44000040) /* TMED RGB Seed Register */ - #define TMEDCR __REG(0x44000044) /* TMED Control Register */ -@@ -1835,6 +1844,10 @@ - #define LCCR3_4BPP (2 << 24) - #define LCCR3_8BPP (3 << 24) - #define LCCR3_16BPP (4 << 24) -+#define LCCR3_18BPP (6 << 24) -+#define LCCR3_19BPP (8 << 24) -+#define LCCR3_24BPP (9 << 24) -+#define LCCR3_25BPP (10<< 24) - - #define FDADR0 __REG(0x44000200) /* DMA Channel 0 Frame Descriptor Address Register */ - #define FSADR0 __REG(0x44000204) /* DMA Channel 0 Frame Source Address Register */ -@@ -1999,6 +2012,104 @@ - - #define LDCMD_PAL (1 << 26) /* instructs DMA to load palette buffer */ - -+/* Overlay1 & Overlay2 & Hardware Cursor */ -+#define LCSR1_SOF1 (1 << 0) -+#define LCSR1_SOF2 (1 << 1) -+#define LCSR1_SOF3 (1 << 2) -+#define LCSR1_SOF4 (1 << 3) -+#define LCSR1_SOF5 (1 << 4) -+#define LCSR1_SOF6 (1 << 5) -+ -+#define LCSR1_EOF1 (1 << 8) -+#define LCSR1_EOF2 (1 << 9) -+#define LCSR1_EOF3 (1 << 10) -+#define LCSR1_EOF4 (1 << 11) -+#define LCSR1_EOF5 (1 << 12) -+#define LCSR1_EOF6 (1 << 13) -+ -+#define LCSR1_BS1 (1 << 16) -+#define LCSR1_BS2 (1 << 17) -+#define LCSR1_BS3 (1 << 18) -+#define LCSR1_BS4 (1 << 19) -+#define LCSR1_BS5 (1 << 20) -+#define LCSR1_BS6 (1 << 21) -+ -+#define LCSR1_IU2 (1 << 25) -+#define LCSR1_IU3 (1 << 26) -+#define LCSR1_IU4 (1 << 27) -+#define LCSR1_IU5 (1 << 28) -+#define LCSR1_IU6 (1 << 29) -+ -+#define LDCMD_SOFINT (1 << 22) -+#define LDCMD_EOFINT (1 << 21) -+ -+ -+#define LCCR5_SOFM1 (1<<0) /* Start Of Frame Mask for Overlay 1 (channel 1) */ -+#define LCCR5_SOFM2 (1<<1) /* Start Of Frame Mask for Overlay 2 (channel 2) */ -+#define LCCR5_SOFM3 (1<<2) /* Start Of Frame Mask for Overlay 2 (channel 3) */ -+#define LCCR5_SOFM4 (1<<3) /* Start Of Frame Mask for Overlay 2 (channel 4) */ -+#define LCCR5_SOFM5 (1<<4) /* Start Of Frame Mask for cursor (channel 5) */ -+#define LCCR5_SOFM6 (1<<5) /* Start Of Frame Mask for command data (channel 6) */ -+ -+#define LCCR5_EOFM1 (1<<8) /* End Of Frame Mask for Overlay 1 (channel 1) */ -+#define LCCR5_EOFM2 (1<<9) /* End Of Frame Mask for Overlay 2 (channel 2) */ -+#define LCCR5_EOFM3 (1<<10) /* End Of Frame Mask for Overlay 2 (channel 3) */ -+#define LCCR5_EOFM4 (1<<11) /* End Of Frame Mask for Overlay 2 (channel 4) */ -+#define LCCR5_EOFM5 (1<<12) /* End Of Frame Mask for cursor (channel 5) */ -+#define LCCR5_EOFM6 (1<<13) /* End Of Frame Mask for command data (channel 6) */ -+ -+#define LCCR5_BSM1 (1<<16) /* Branch mask for Overlay 1 (channel 1) */ -+#define LCCR5_BSM2 (1<<17) /* Branch mask for Overlay 2 (channel 2) */ -+#define LCCR5_BSM3 (1<<18) /* Branch mask for Overlay 2 (channel 3) */ -+#define LCCR5_BSM4 (1<<19) /* Branch mask for Overlay 2 (channel 4) */ -+#define LCCR5_BSM5 (1<<20) /* Branch mask for cursor (channel 5) */ -+#define LCCR5_BSM6 (1<<21) /* Branch mask for data command (channel 6) */ -+ -+#define LCCR5_IUM1 (1<<24) /* Input FIFO Underrun Mask for Overlay 1 */ -+#define LCCR5_IUM2 (1<<25) /* Input FIFO Underrun Mask for Overlay 2 */ -+#define LCCR5_IUM3 (1<<26) /* Input FIFO Underrun Mask for Overlay 2 */ -+#define LCCR5_IUM4 (1<<27) /* Input FIFO Underrun Mask for Overlay 2 */ -+#define LCCR5_IUM5 (1<<28) /* Input FIFO Underrun Mask for cursor */ -+#define LCCR5_IUM6 (1<<29) /* Input FIFO Underrun Mask for data command */ -+ -+#define OVL1C1_O1EN (1<<31) /* Enable bit for Overlay 1 */ -+#define OVL2C1_O2EN (1<<31) /* Enable bit for Overlay 2 */ -+#define CCR_CEN (1<<31) /* Enable bit for Cursor */ -+ -+/* LCD registers */ -+#define LCCR4 __REG(0x44000010) /* LCD Controller Control Register 4 */ -+#define LCCR5 __REG(0x44000014) /* LCD Controller Control Register 5 */ -+#define FBR0 __REG(0x44000020) /* DMA Channel 0 Frame Branch Register */ -+#define FBR1 __REG(0x44000024) /* DMA Channel 1 Frame Branch Register */ -+#define FBR2 __REG(0x44000028) /* DMA Channel 2 Frame Branch Register */ -+#define FBR3 __REG(0x4400002C) /* DMA Channel 3 Frame Branch Register */ -+#define FBR4 __REG(0x44000030) /* DMA Channel 4 Frame Branch Register */ -+#define FDADR2 __REG(0x44000220) /* DMA Channel 2 Frame Descriptor Address Register */ -+#define FSADR2 __REG(0x44000224) /* DMA Channel 2 Frame Source Address Register */ -+#define FIDR2 __REG(0x44000228) /* DMA Channel 2 Frame ID Register */ -+#define LDCMD2 __REG(0x4400022C) /* DMA Channel 2 Command Register */ -+#define FDADR3 __REG(0x44000230) /* DMA Channel 3 Frame Descriptor Address Register */ -+#define FSADR3 __REG(0x44000234) /* DMA Channel 3 Frame Source Address Register */ -+#define FIDR3 __REG(0x44000238) /* DMA Channel 3 Frame ID Register */ -+#define LDCMD3 __REG(0x4400023C) /* DMA Channel 3 Command Register */ -+#define FDADR4 __REG(0x44000240) /* DMA Channel 4 Frame Descriptor Address Register */ -+#define FSADR4 __REG(0x44000244) /* DMA Channel 4 Frame Source Address Register */ -+#define FIDR4 __REG(0x44000248) /* DMA Channel 4 Frame ID Register */ -+#define LDCMD4 __REG(0x4400024C) /* DMA Channel 4 Command Register */ -+#define FDADR5 __REG(0x44000250) /* DMA Channel 5 Frame Descriptor Address Register */ -+#define FSADR5 __REG(0x44000254) /* DMA Channel 5 Frame Source Address Register */ -+#define FIDR5 __REG(0x44000258) /* DMA Channel 5 Frame ID Register */ -+#define LDCMD5 __REG(0x4400025C) /* DMA Channel 5 Command Register */ -+ -+#define OVL1C1 __REG(0x44000050) /* Overlay 1 Control Register 1 */ -+#define OVL1C2 __REG(0x44000060) /* Overlay 1 Control Register 2 */ -+#define OVL2C1 __REG(0x44000070) /* Overlay 2 Control Register 1 */ -+#define OVL2C2 __REG(0x44000080) /* Overlay 2 Control Register 2 */ -+#define CCR __REG(0x44000090) /* Cursor Control Register */ -+ -+#define FBR5 __REG(0x44000110) /* DMA Channel 5 Frame Branch Register */ -+#define FBR6 __REG(0x44000114) /* DMA Channel 6 Frame Branch Register */ -+ - /* - * Memory controller - */ diff --git a/packages/linux/linux-ezx-2.6.23/patches/series b/packages/linux/linux-ezx-2.6.23/patches/series deleted file mode 100644 index c7738e4b61..0000000000 --- a/packages/linux/linux-ezx-2.6.23/patches/series +++ /dev/null @@ -1,106 +0,0 @@ -binutils-buildid-arm.patch -patch-2.6.23.1 -pxa27x_overlay-r7.patch - -ezx-core.patch -# ezx-core TODO: should be ezx-common -# look at the pxa-regs.h diff and put each definition on the proper patch -# register a machine type for each phone model - -# enable this patch ONLY if you have STUART connected and dont forget -# to change your cmdline if you want console on STUART. -#ezx-enable-stuart.patch - -ezx-bp.patch -# ezx-bp TODO: -# try to run this as a module - this may solve timing issues for opentapi. -# suspend/resume (not sure if it can be handled here) -# implement 2nd gen handshake support -# move platform device to ezx-phone.c - -ezx-pm.patch - -ezx-pcap.patch -# ezx-pcap TODO: -# move vibrator level function to the vibrator driver - -a780-pcap.patch -e680-pcap.patch -a1200-pcap.patch -e6-pcap.patch - -a780-mci.patch -e680-mci.patch -a1200-mci.patch -e6-mci.patch - -pxa27x-udc-support.3.patch - -ezx-emu.patch -# ezx-emu TODO: -# userspace interface for controling emu -# read adc to find which accessory is plugged -a780-emu.patch -e680-emu.patch - -pxa27x-udc-fix-a1200.patch #(see ezx-a1200.c) -ezx-eoc.patch -a1200-eoc.patch -e6-eoc.patch - -ezx-mtd-map.patch - -ezx-serial-bug-workaround.patch - -pxa-kbd.patch -a780-kbd.patch -e680-kbd.patch -a1200-kbd.patch - -pcap-ts.patch -a780-ts.patch -e680-ts.patch -a1200-ts.patch -e6-ts.patch - -ezx-backlight.patch - -a780-flip.patch -e680-locksw.patch -a1200-flip.patch - -a780-leds.patch -e680-leds.patch - -a780-vibrator.patch - -# mux_cli patches -mux_cli.patch -mux-fix.patch -mux-fix-init-errorpath.patch -mux-remove-flipbuffers.patch -mux-remove-get_halted_bit.patch -mux-remove-usbh_finished_resume.patch -mux-fix-makefile.patch -mux-fix-tty-driver.patch -mux-linux-2.6.21-fix.patch -#mux-ifdef-ezx-features.patch -#mux_debug.patch - -asoc-pxa-ssp.patch -asoc-fix-loopback.patch -ezx-asoc.patch - -# mux_cli TODO: -# merge patches -# try to understand the code and cleanup (painful) - -# Global TODO: -# compile everything as module and test for insmod/rmmod -# can NOT run as module (yet) -# pxa-ohci, ts0710_mux, ts0710_mux_usb, ezx-bp - -# the folowing break too much stuff on other phones. - -# incomplete - |