From c50fe0c5f0eb2e243a4921e8576ba49db26483fc Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sat, 19 May 2007 09:38:22 +0000 Subject: linux-ezx 2.6.21: update to r2011: r2011: call send_readurb on bp_rdy signal from BP to keep BP communication active add asoc pxa2xx-ssp.c driver from asoc-v0.13rc3 r2010: * pxa-kbd.patch: Fix pxakbd bug: direct keys were not passed to userspace * a780-kbd.patch: Cleanup keycodes definition for a780, use unique keycodes so to avoid the double event problem occurring when the same keycode is used more than once. r2003: core: EZX subsystem ezx-phone.c file for each phone BP handshake code on a platform_driver (and another .patch) pm: fully functional suspend/resume (except for BP) reboot/poweroff new: a780 flip e680 lock switch bp: Kconfig entry to disable BP handshake (the watchdog dont start if we dont try to handshake) other: delete obsolete files r2002: * Implement vibrator handling for a780 using the leds class. r1999: * Port and readapt ezx-backlight patch. Let's use again the backlight class to handle lcd brightness. r1998: * Port leds patches for A780 and E680 (we still pollute ezx.c for now) --- packages/linux/linux-ezx-2.6.21/a780-flip.patch | 43 + packages/linux/linux-ezx-2.6.21/a780-kbd.patch | 90 ++ packages/linux/linux-ezx-2.6.21/a780-leds.patch | 181 +++ packages/linux/linux-ezx-2.6.21/a780-mci.patch | 123 ++ .../linux/linux-ezx-2.6.21/a780-vibrator.patch | 151 +++ packages/linux/linux-ezx-2.6.21/asoc-pxa-ssp.patch | 755 ++++++++++++ packages/linux/linux-ezx-2.6.21/defconfig-a780 | 114 +- packages/linux/linux-ezx-2.6.21/defconfig-e680 | 1240 ++++++++++++++++++++ packages/linux/linux-ezx-2.6.21/e680-kbd.patch | 93 ++ packages/linux/linux-ezx-2.6.21/e680-leds.patch | 368 ++++++ packages/linux/linux-ezx-2.6.21/e680-locksw.patch | 42 + packages/linux/linux-ezx-2.6.21/e680-mci.patch | 127 ++ .../linux/linux-ezx-2.6.21/ezx-backlight.patch | 203 ++++ packages/linux/linux-ezx-2.6.21/ezx-bp.patch | 327 ++++++ packages/linux/linux-ezx-2.6.21/ezx-core.patch | 656 +++++------ packages/linux/linux-ezx-2.6.21/ezx-emu.patch | 78 +- packages/linux/linux-ezx-2.6.21/ezx-pcap.patch | 161 ++- packages/linux/linux-ezx-2.6.21/ezx-pm.patch | 90 +- packages/linux/linux-ezx-2.6.21/mux_cli.patch | 21 +- packages/linux/linux-ezx-2.6.21/pcap-ts.patch | 46 +- packages/linux/linux-ezx-2.6.21/pxa-kbd.patch | 87 +- packages/linux/linux-ezx_2.6.21.bb | 19 +- 22 files changed, 4382 insertions(+), 633 deletions(-) create mode 100644 packages/linux/linux-ezx-2.6.21/a780-flip.patch create mode 100644 packages/linux/linux-ezx-2.6.21/a780-kbd.patch create mode 100644 packages/linux/linux-ezx-2.6.21/a780-leds.patch create mode 100644 packages/linux/linux-ezx-2.6.21/a780-mci.patch create mode 100644 packages/linux/linux-ezx-2.6.21/a780-vibrator.patch create mode 100644 packages/linux/linux-ezx-2.6.21/asoc-pxa-ssp.patch create mode 100644 packages/linux/linux-ezx-2.6.21/defconfig-e680 create mode 100644 packages/linux/linux-ezx-2.6.21/e680-kbd.patch create mode 100644 packages/linux/linux-ezx-2.6.21/e680-leds.patch create mode 100644 packages/linux/linux-ezx-2.6.21/e680-locksw.patch create mode 100644 packages/linux/linux-ezx-2.6.21/e680-mci.patch create mode 100644 packages/linux/linux-ezx-2.6.21/ezx-backlight.patch create mode 100644 packages/linux/linux-ezx-2.6.21/ezx-bp.patch diff --git a/packages/linux/linux-ezx-2.6.21/a780-flip.patch b/packages/linux/linux-ezx-2.6.21/a780-flip.patch new file mode 100644 index 0000000000..56f1e4336d --- /dev/null +++ b/packages/linux/linux-ezx-2.6.21/a780-flip.patch @@ -0,0 +1,43 @@ +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-05-08 13:23:57.000000000 -0300 ++++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c 2007-05-08 13:26:53.000000000 -0300 +@@ -17,6 +17,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -193,7 +194,30 @@ + }, + }; + ++static struct gpio_keys_button a780flip_buttons[] = { ++ [0] = { ++ .keycode = 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 = { ++ &a780flip_device, + }; + + static void __init a780_init(void) diff --git a/packages/linux/linux-ezx-2.6.21/a780-kbd.patch b/packages/linux/linux-ezx-2.6.21/a780-kbd.patch new file mode 100644 index 0000000000..383839d639 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.21/a780-kbd.patch @@ -0,0 +1,90 @@ +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-05-17 22:04:57.000000000 +0200 ++++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c 2007-05-17 22:05:05.000000000 +0200 +@@ -16,18 +16,21 @@ + #include + #include + #include ++#include + + #include + #include + #include + #include + #include ++#include + + #include "generic.h" + #include "ezx.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); +@@ -141,6 +144,55 @@ + .pxafb_lcd_power = &ezx_lcd_power, + }; + ++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 = { + }; + +@@ -159,6 +211,7 @@ + + set_pxa_fb_info(&a780_fb_info); + pxa_set_mci_info(&a780_mci_platform_data); ++ pxa_set_kbd_info(&a780_kbd_platform_data); + + platform_add_devices(devices, ARRAY_SIZE(devices)); + } diff --git a/packages/linux/linux-ezx-2.6.21/a780-leds.patch b/packages/linux/linux-ezx-2.6.21/a780-leds.patch new file mode 100644 index 0000000000..09913df2ca --- /dev/null +++ b/packages/linux/linux-ezx-2.6.21/a780-leds.patch @@ -0,0 +1,181 @@ + +# +# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher +# + +Index: linux-2.6.21/drivers/leds/Kconfig +=================================================================== +--- linux-2.6.21.orig/drivers/leds/Kconfig 2007-05-08 04:09:08.000000000 -0300 ++++ linux-2.6.21/drivers/leds/Kconfig 2007-05-08 14:09:03.000000000 -0300 +@@ -104,6 +104,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.21/drivers/leds/Makefile +=================================================================== +--- linux-2.6.21.orig/drivers/leds/Makefile 2007-05-08 04:09:08.000000000 -0300 ++++ linux-2.6.21/drivers/leds/Makefile 2007-05-08 14:09:03.000000000 -0300 +@@ -16,6 +16,7 @@ + obj-$(CONFIG_LEDS_WRAP) += leds-wrap.o + obj-$(CONFIG_LEDS_H1940) += leds-h1940.o + obj-$(CONFIG_LEDS_COBALT) += leds-cobalt.o ++obj-$(CONFIG_LEDS_A780) += leds-a780.o + + # LED Triggers + obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o +Index: linux-2.6.21/drivers/leds/leds-a780.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.21/drivers/leds/leds-a780.c 2007-05-08 14:09:03.000000000 -0300 +@@ -0,0 +1,122 @@ ++/* ++ * EZX Platform LED Driver for the Motorola A780 GSM Phone ++ * ++ * Copyright 2006 Vanille-Media ++ * ++ * Author: Michael Lauer ++ * ++ * 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 ++#include ++#include ++#include ++ ++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(SSP_PCAP_ADJ_BIT_PERIPH_BL_CTRL0, value & 0x01); ++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL_CTRL1, value & 0x02); ++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL_CTRL2, value & 0x04); ++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL_CTRL3, value & 0x08); ++ ezx_pcap_bit_set(SSP_PCAP_ADJ_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(SSP_PCAP_ADJ_BIT_PERIPH_BL2_CTRL0, value & 0x01); ++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL2_CTRL1, value & 0x02); ++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL2_CTRL2, value & 0x04); ++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL2_CTRL3, value & 0x08); ++ ezx_pcap_bit_set(SSP_PCAP_ADJ_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 "); ++MODULE_DESCRIPTION("Motorola A780 LED driver"); ++MODULE_LICENSE("GPL"); +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-05-08 14:09:13.000000000 -0300 ++++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c 2007-05-08 14:11:37.000000000 -0300 +@@ -215,9 +215,14 @@ + }, + }; + ++static struct platform_device a780led_device = { ++ .name = "a780-led", ++ .id = -1, ++}; + + static struct platform_device *devices[] __initdata = { + &a780flip_device, ++ &a780led_device, + }; + + static void __init a780_init(void) diff --git a/packages/linux/linux-ezx-2.6.21/a780-mci.patch b/packages/linux/linux-ezx-2.6.21/a780-mci.patch new file mode 100644 index 0000000000..b9d601856a --- /dev/null +++ b/packages/linux/linux-ezx-2.6.21/a780-mci.patch @@ -0,0 +1,123 @@ +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-05-08 03:46:17.000000000 -0300 ++++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c 2007-05-08 04:05:48.000000000 -0300 +@@ -14,11 +14,14 @@ + #include + #include + #include ++#include ++#include + + #include + #include + #include + #include ++#include + + #include "generic.h" + #include "ezx.h" +@@ -26,6 +29,95 @@ + 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[] = { ++ [MMC_VDD_160] = 5, ++ [MMC_VDD_170] = 5, ++ [MMC_VDD_180] = 6, ++ [MMC_VDD_190] = 6, ++ [MMC_VDD_200] = 7, ++ [MMC_VDD_210] = 7, ++ [MMC_VDD_220] = 8, ++ [MMC_VDD_230] = 8, ++ [MMC_VDD_240] = 9, ++ [MMC_VDD_250] = 9, ++ [MMC_VDD_260] = 10, ++ [MMC_VDD_270] = 10, ++ [MMC_VDD_280] = 11, ++ [MMC_VDD_290] = 11, ++ [MMC_VDD_300] = 12, ++ [MMC_VDD_310] = 12, ++ [MMC_VDD_320] = 13, ++ [MMC_VDD_330] = 13, ++ [MMC_VDD_340] = 14, ++ [MMC_VDD_350] = 14, ++ [MMC_VDD_360] = 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, SA_INTERRUPT, ++ "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) ++{ ++ if (vdd <= MMC_VDD_360) ++ 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_160_165|MMC_VDD_18_19|MMC_VDD_20_21 ++ |MMC_VDD_22_23|MMC_VDD_24_25|MMC_VDD_26_27 ++ |MMC_VDD_28_29|MMC_VDD_30_31|MMC_VDD_32_33 ++ |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, +@@ -66,6 +158,7 @@ + PSLR = 0x05800f00; + + set_pxa_fb_info(&a780_fb_info); ++ pxa_set_mci_info(&a780_mci_platform_data); + + platform_add_devices(devices, ARRAY_SIZE(devices)); + } diff --git a/packages/linux/linux-ezx-2.6.21/a780-vibrator.patch b/packages/linux/linux-ezx-2.6.21/a780-vibrator.patch new file mode 100644 index 0000000000..7436c40f5f --- /dev/null +++ b/packages/linux/linux-ezx-2.6.21/a780-vibrator.patch @@ -0,0 +1,151 @@ +Index: linux-2.6.21/drivers/leds/leds-a780.c +=================================================================== +--- linux-2.6.21.orig/drivers/leds/leds-a780.c 2007-05-08 15:09:26.000000000 -0300 ++++ linux-2.6.21/drivers/leds/leds-a780.c 2007-05-08 15:19:26.000000000 -0300 +@@ -18,10 +18,13 @@ + #include + #include + ++extern void ezx_pcap_vibrator_level(u_int32_t); ++ + 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 ); ++#warning FIXME: use read/write operations + ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL_CTRL0, value & 0x01); + ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL_CTRL1, value & 0x02); + ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL_CTRL2, value & 0x04); +@@ -33,6 +36,7 @@ + { + if ( value > 31 ) value = 31; + printk( KERN_DEBUG "a780led_aux_set: %d\n", value ); ++#warning FIXME: use read/write operations + ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL2_CTRL0, value & 0x01); + ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL2_CTRL1, value & 0x02); + ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL2_CTRL2, value & 0x04); +@@ -40,6 +44,43 @@ + ezx_pcap_bit_set(SSP_PCAP_ADJ_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 ); ++ ++ switch(value) ++ { ++ case 0: ++ /* turn off vibrator */ ++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_V_VIB_EN, 0); ++ break; ++ ++ case 1: ++ ezx_pcap_vibrator_level(PCAP_VIBRATOR_VOLTAGE_LEVEL0); ++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_V_VIB_EN, 1); ++ break; ++ ++ case 2: ++ ezx_pcap_vibrator_level(PCAP_VIBRATOR_VOLTAGE_LEVEL1); ++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_V_VIB_EN, 1); ++ break; ++ ++ case 3: ++ ezx_pcap_vibrator_level(PCAP_VIBRATOR_VOLTAGE_LEVEL2); ++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_V_VIB_EN, 1); ++ break; ++ ++ case 4: ++ ezx_pcap_vibrator_level(PCAP_VIBRATOR_VOLTAGE_LEVEL3); ++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_V_VIB_EN, 1); ++ break; ++ ++ default: ++ break; ++ } ++} ++ + static struct led_classdev a780_main_led = { + .name = "a780:main", + .default_trigger = "none", +@@ -52,11 +93,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 +112,7 @@ + { + led_classdev_resume(&a780_main_led); + led_classdev_resume(&a780_aux_led); ++ led_classdev_resume(&a780_vibrator); + return 0; + } + #endif +@@ -77,8 +126,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 +144,7 @@ + { + led_classdev_unregister(&a780_main_led); + led_classdev_unregister(&a780_aux_led); ++ led_classdev_unregister(&a780_vibrator); + return 0; + } + +@@ -111,6 +169,8 @@ + { + 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.21/drivers/leds/Kconfig +=================================================================== +--- linux-2.6.21.orig/drivers/leds/Kconfig 2007-05-08 15:09:26.000000000 -0300 ++++ linux-2.6.21/drivers/leds/Kconfig 2007-05-08 15:09:26.000000000 -0300 +@@ -105,11 +105,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.21/asoc-pxa-ssp.patch b/packages/linux/linux-ezx-2.6.21/asoc-pxa-ssp.patch new file mode 100644 index 0000000000..1fc8283ca2 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.21/asoc-pxa-ssp.patch @@ -0,0 +1,755 @@ +Index: linux-2.6.21/sound/soc/pxa/pxa2xx-ssp.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.21/sound/soc/pxa/pxa2xx-ssp.c 2007-05-14 21:14:38.000000000 -0300 +@@ -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 ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++#include "pxa2xx-pcm.h" ++#include "pxa2xx-ssp.h" ++ ++#define PXA_SSP_DEBUG 1 ++ ++/* ++ * 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] = {CKEN23_SSP1, CKEN3_SSP2, CKEN4_SSP3}; ++#else ++static int cken[3] = {CKEN3_SSP, CKEN9_NSSP, CKEN10_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.21/sound/soc/pxa/pxa2xx-ssp.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.21/sound/soc/pxa/pxa2xx-ssp.h 2007-05-14 21:14:38.000000000 -0300 +@@ -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.21/sound/soc/pxa/Kconfig +=================================================================== +--- linux-2.6.21.orig/sound/soc/pxa/Kconfig 2007-05-14 21:16:22.000000000 -0300 ++++ linux-2.6.21/sound/soc/pxa/Kconfig 2007-05-14 21:17:01.000000000 -0300 +@@ -20,6 +20,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.21/sound/soc/pxa/Makefile +=================================================================== +--- linux-2.6.21.orig/sound/soc/pxa/Makefile 2007-05-14 21:14:52.000000000 -0300 ++++ linux-2.6.21/sound/soc/pxa/Makefile 2007-05-14 21:16:10.000000000 -0300 +@@ -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.21/defconfig-a780 b/packages/linux/linux-ezx-2.6.21/defconfig-a780 index 42fb38751c..85701ae3d1 100644 --- a/packages/linux/linux-ezx-2.6.21/defconfig-a780 +++ b/packages/linux/linux-ezx-2.6.21/defconfig-a780 @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21 -# Fri Apr 27 21:27:36 2007 +# Tue May 8 15:14:00 2007 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -45,8 +45,7 @@ CONFIG_SYSVIPC_SYSCTL=y # CONFIG_TASKSTATS is not set # CONFIG_UTS_NS is not set # CONFIG_AUDIT is not set -CONFIG_IKCONFIG=y -CONFIG_IKCONFIG_PROC=y +# CONFIG_IKCONFIG is not set # CONFIG_SYSFS_DEPRECATED is not set # CONFIG_RELAY is not set # CONFIG_BLK_DEV_INITRD is not set @@ -54,9 +53,8 @@ CONFIG_CC_OPTIMIZE_FOR_SIZE=y CONFIG_SYSCTL=y CONFIG_EMBEDDED=y CONFIG_UID16=y -CONFIG_SYSCTL_SYSCALL=y +# CONFIG_SYSCTL_SYSCALL is not set CONFIG_KALLSYMS=y -# CONFIG_KALLSYMS_ALL is not set # CONFIG_KALLSYMS_EXTRA_PASS is not set CONFIG_HOTPLUG=y CONFIG_PRINTK=y @@ -151,10 +149,12 @@ 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_EMU=y -CONFIG_PXA_EZX_EMU_USB=y -# CONFIG_PXA_EZX_EMU_UART is not set -# CONFIG_PXA_EZX_EMU_NOTHING is not set +CONFIG_EZX_BP=y +CONFIG_EZX_PCAP=y +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 @@ -192,10 +192,10 @@ CONFIG_XSCALE_PMU=y # Kernel Features # CONFIG_PREEMPT=y -# CONFIG_NO_IDLE_HZ is not set +CONFIG_NO_IDLE_HZ=y CONFIG_HZ=100 CONFIG_AEABI=y -CONFIG_OABI_COMPAT=y +# CONFIG_OABI_COMPAT is not set # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set CONFIG_SELECT_MEMORY_MODEL=y CONFIG_FLATMEM_MANUAL=y @@ -225,9 +225,6 @@ CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext3 ip=169 # # At least one emulation must be selected # -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_NWFPE_XP is not set -# CONFIG_FPE_FASTFPE is not set # # Userspace binary formats @@ -257,10 +254,6 @@ CONFIG_NET=y CONFIG_PACKET=y # CONFIG_PACKET_MMAP is not set CONFIG_UNIX=y -CONFIG_XFRM=y -# CONFIG_XFRM_USER is not set -# CONFIG_XFRM_SUB_POLICY is not set -# CONFIG_XFRM_MIGRATE is not set # CONFIG_NET_KEY is not set CONFIG_INET=y # CONFIG_IP_MULTICAST is not set @@ -279,11 +272,10 @@ CONFIG_SYN_COOKIES=y # CONFIG_INET_IPCOMP is not set # CONFIG_INET_XFRM_TUNNEL is not set # CONFIG_INET_TUNNEL is not set -CONFIG_INET_XFRM_MODE_TRANSPORT=y -CONFIG_INET_XFRM_MODE_TUNNEL=y -CONFIG_INET_XFRM_MODE_BEET=y -CONFIG_INET_DIAG=y -CONFIG_INET_TCP_DIAG=y +# 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" @@ -364,8 +356,6 @@ CONFIG_BT_HCIUART_H4=y CONFIG_STANDALONE=y CONFIG_PREVENT_FIRMWARE_BUILD=y CONFIG_FW_LOADER=m -# CONFIG_DEBUG_DRIVER is not set -# CONFIG_DEBUG_DEVRES is not set # CONFIG_SYS_HYPERVISOR is not set # @@ -559,8 +549,17 @@ CONFIG_DUMMY=y # Wan interfaces # # CONFIG_WAN is not set -# CONFIG_PPP 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_SLIP is not set +CONFIG_SLHC=m # CONFIG_SHAPER is not set # CONFIG_NETCONSOLE is not set # CONFIG_NETPOLL is not set @@ -599,6 +598,7 @@ CONFIG_INPUT_KEYBOARD=y # CONFIG_KEYBOARD_NEWTON is not set # CONFIG_KEYBOARD_STOWAWAY 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_TOUCHSCREEN=y @@ -611,6 +611,7 @@ CONFIG_INPUT_TOUCHSCREEN=y # CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set # CONFIG_TOUCHSCREEN_TOUCHWIN is not set # CONFIG_TOUCHSCREEN_UCB1400 is not set +CONFIG_TOUCHSCREEN_PCAP=y # CONFIG_INPUT_MISC is not set # @@ -653,7 +654,7 @@ CONFIG_LEGACY_PTY_COUNT=8 # Watchdog Cards # # CONFIG_WATCHDOG is not set -# CONFIG_HW_RANDOM is not set +CONFIG_HW_RANDOM=y # CONFIG_NVRAM is not set # CONFIG_DTLK is not set # CONFIG_R3964 is not set @@ -708,14 +709,13 @@ CONFIG_I2C_PXA=m # SPI support # CONFIG_SPI=y -CONFIG_SPI_DEBUG=y CONFIG_SPI_MASTER=y # # SPI Master Controller Drivers # # CONFIG_SPI_BITBANG is not set -CONFIG_SPI_PXA2XX=y +CONFIG_SPI_PXA2XX=m # # SPI Protocol Masters @@ -745,7 +745,8 @@ CONFIG_SPI_PXA2XX=y # # LED devices # -# CONFIG_NEW_LEDS is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y # # LED drivers @@ -754,6 +755,10 @@ CONFIG_SPI_PXA2XX=y # # LED Triggers # +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_A780=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y # # Multimedia devices @@ -772,6 +777,7 @@ CONFIG_SPI_PXA2XX=y CONFIG_BACKLIGHT_LCD_SUPPORT=y CONFIG_BACKLIGHT_CLASS_DEVICE=y # CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_EZX=y CONFIG_FB=y # CONFIG_FIRMWARE_EDID is not set # CONFIG_FB_DDC is not set @@ -825,7 +831,7 @@ CONFIG_FONT_MINI_4x6=y # # HID Devices # -CONFIG_HID=y +CONFIG_HID=m # CONFIG_HID_DEBUG is not set # @@ -908,7 +914,7 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y # CONFIG_USB_RTL8150 is not set # CONFIG_USB_USBNET_MII is not set # CONFIG_USB_USBNET is not set -CONFIG_USB_MON=y +# CONFIG_USB_MON is not set # # USB port drivers @@ -982,14 +988,17 @@ CONFIG_MMC_PXA=y # Real Time Clock # CONFIG_RTC_LIB=y -CONFIG_RTC_CLASS=m +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set # # RTC interfaces # -CONFIG_RTC_INTF_SYSFS=m -CONFIG_RTC_INTF_PROC=m -CONFIG_RTC_INTF_DEV=m +# CONFIG_RTC_INTF_SYSFS is not set +# CONFIG_RTC_INTF_PROC is not set +CONFIG_RTC_INTF_DEV=y # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set # @@ -1006,7 +1015,7 @@ CONFIG_RTC_INTF_DEV=m # CONFIG_RTC_DRV_RS5C348 is not set # CONFIG_RTC_DRV_RS5C372 is not set # CONFIG_RTC_DRV_M48T86 is not set -CONFIG_RTC_DRV_SA1100=m +CONFIG_RTC_DRV_SA1100=y # CONFIG_RTC_DRV_TEST is not set # CONFIG_RTC_DRV_MAX6902 is not set # CONFIG_RTC_DRV_V3020 is not set @@ -1051,7 +1060,9 @@ CONFIG_AUTOFS4_FS=y # # CD-ROM/DVD Filesystems # -# CONFIG_ISO9660_FS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +CONFIG_ZISOFS=y # CONFIG_UDF_FS is not set # @@ -1200,33 +1211,11 @@ CONFIG_ENABLE_MUST_CHECK=y # CONFIG_UNUSED_SYMBOLS is not set # CONFIG_DEBUG_FS is not set # CONFIG_HEADERS_CHECK is not set -CONFIG_DEBUG_KERNEL=y -# CONFIG_DEBUG_SHIRQ is not set +# CONFIG_DEBUG_KERNEL is not set CONFIG_LOG_BUF_SHIFT=14 -CONFIG_DETECT_SOFTLOCKUP=y -# CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set -# CONFIG_DEBUG_SLAB is not set -CONFIG_DEBUG_PREEMPT=y -CONFIG_DEBUG_RT_MUTEXES=y -CONFIG_DEBUG_PI_LIST=y -# CONFIG_RT_MUTEX_TESTER is not set -CONFIG_DEBUG_SPINLOCK=y -CONFIG_DEBUG_MUTEXES=y -CONFIG_DEBUG_SPINLOCK_SLEEP=y -# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set -# CONFIG_DEBUG_KOBJECT is not set -CONFIG_DEBUG_BUGVERBOSE=y -# CONFIG_DEBUG_INFO is not set -# CONFIG_DEBUG_VM is not set -# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_BUGVERBOSE is not set CONFIG_FRAME_POINTER=y -CONFIG_FORCED_INLINING=y -# CONFIG_RCU_TORTURE_TEST is not set -# CONFIG_FAULT_INJECTION is not set # CONFIG_DEBUG_USER is not set -CONFIG_DEBUG_ERRORS=y -# CONFIG_DEBUG_LL is not set # # Security options @@ -1248,6 +1237,7 @@ CONFIG_CRC16=m CONFIG_CRC32=y CONFIG_LIBCRC32C=m CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=m CONFIG_PLIST=y CONFIG_HAS_IOMEM=y CONFIG_HAS_IOPORT=y diff --git a/packages/linux/linux-ezx-2.6.21/defconfig-e680 b/packages/linux/linux-ezx-2.6.21/defconfig-e680 new file mode 100644 index 0000000000..59b639f910 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.21/defconfig-e680 @@ -0,0 +1,1240 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.21 +# Tue May 8 14:31:50 2007 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=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" + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 + +# +# General setup +# +CONFIG_LOCALVERSION="-ezxdev" +# CONFIG_LOCALVERSION_AUTO is not set +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +# CONFIG_IPC_NS is not set +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_UTS_NS is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +# 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_EPOLL=y +# CONFIG_SHMEM is not set +CONFIG_SLAB=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_RT_MUTEXES=y +CONFIG_TINY_SHMEM=y +CONFIG_BASE_SMALL=0 +# CONFIG_SLOB is not set + +# +# Loadable module support +# +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 + +# +# Block layer +# +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF 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_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_NS9XXX 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_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_PXA_EZX=y +CONFIG_PXA_EZX_E680=y +# CONFIG_PXA_EZX_A780 is not set +# CONFIG_PXA_EZX_E2 is not set +CONFIG_EZX_BP=y +CONFIG_EZX_PCAP=y +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 + +# +# 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 +# + +# +# PCCARD (PCMCIA/CardBus) support +# +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +CONFIG_PREEMPT=y +CONFIG_NO_IDLE_HZ=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_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0 +CONFIG_ZBOOT_ROM_BSS=0 +CONFIG_CMDLINE="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" +# 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_PM_SYSFS_DEPRECATED is not set +CONFIG_APM_EMULATION=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_NETDEBUG is not set +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 + +# +# DCCP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_DCCP is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_SCTP is not set + +# +# TIPC Configuration (EXPERIMENTAL) +# +# 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=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +# CONFIG_BT_HCIUSB is not set +CONFIG_BT_HCIUART=m +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_IEEE80211 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 + +# +# Connector - unified userspace <-> kernelspace linker +# +CONFIG_CONNECTOR=m + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=m +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_CONCAT=m +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=m +# 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=m +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=m +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# 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=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +CONFIG_MTD_CFI_INTELEXT=m +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=m +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set +CONFIG_MTD_XIP=y + +# +# Mapping drivers for chip access +# +CONFIG_MTD_COMPLEX_MAPPINGS=y +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_SHARP_SL is not set +CONFIG_MTD_EZX=m +# CONFIG_MTD_EZX_A780 is not set +CONFIG_MTD_EZX_A780_ALTERNATE=y +# CONFIG_MTD_EZX_E2 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 + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# OneNAND Flash Device Drivers +# +# CONFIG_MTD_ONENAND is not set + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Plug and Play support +# +# CONFIG_PNPACPI is not set + +# +# Block devices +# +# 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 + +# +# ATA/ATAPI/MFM/RLL support +# +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +# CONFIG_SCSI is not set +# CONFIG_SCSI_NETLINK is not set + +# +# Serial ATA (prod) and Parallel ATA (experimental) drivers +# +# CONFIG_ATA is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# + +# +# I2O device support +# + +# +# Network device support +# +CONFIG_NETDEVICES=y +CONFIG_DUMMY=y +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set + +# +# PHY device support +# + +# +# Ethernet (10 or 100Mbit) +# +# CONFIG_NET_ETHERNET is not set + +# +# Ethernet (1000 Mbit) +# + +# +# Ethernet (10000 Mbit) +# + +# +# Token Ring devices +# + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Wan interfaces +# +# 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_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 + +# +# ISDN subsystem +# +# CONFI