linux-ezx: use linux.inc to avoid duplication, update patches, add asoc patch
authorKoen Kooi <koen@openembedded.org>
Fri, 7 Sep 2007 08:10:33 +0000 (08:10 +0000)
committerKoen Kooi <koen@openembedded.org>
Fri, 7 Sep 2007 08:10:33 +0000 (08:10 +0000)
38 files changed:
packages/linux/linux-ezx-2.6.21/a1200/.mtn2git_empty [new file with mode: 0644]
packages/linux/linux-ezx-2.6.21/a1200/defconfig [moved from packages/linux/linux-ezx-2.6.21/patches/defconfig-a1200 with 100% similarity]
packages/linux/linux-ezx-2.6.21/a780/.mtn2git_empty [new file with mode: 0644]
packages/linux/linux-ezx-2.6.21/a780/defconfig [moved from packages/linux/linux-ezx-2.6.21/patches/defconfig-a780 with 94% similarity]
packages/linux/linux-ezx-2.6.21/e2/.mtn2git_empty [new file with mode: 0644]
packages/linux/linux-ezx-2.6.21/e2/defconfig [moved from packages/linux/linux-ezx-2.6.21/patches/defconfig-e2 with 100% similarity]
packages/linux/linux-ezx-2.6.21/e6/.mtn2git_empty [new file with mode: 0644]
packages/linux/linux-ezx-2.6.21/e6/defconfig [moved from packages/linux/linux-ezx-2.6.21/patches/defconfig-e6 with 100% similarity]
packages/linux/linux-ezx-2.6.21/e680/.mtn2git_empty [new file with mode: 0644]
packages/linux/linux-ezx-2.6.21/e680/defconfig [moved from packages/linux/linux-ezx-2.6.21/patches/defconfig-e680 with 100% similarity]
packages/linux/linux-ezx-2.6.21/patches/a1200-mci.patch
packages/linux/linux-ezx-2.6.21/patches/a1200-pcap.patch [new file with mode: 0644]
packages/linux/linux-ezx-2.6.21/patches/a1200-ts.patch
packages/linux/linux-ezx-2.6.21/patches/a780-emu.patch [new file with mode: 0644]
packages/linux/linux-ezx-2.6.21/patches/a780-flip.patch
packages/linux/linux-ezx-2.6.21/patches/a780-kbd.patch
packages/linux/linux-ezx-2.6.21/patches/a780-leds.patch
packages/linux/linux-ezx-2.6.21/patches/a780-mci.patch
packages/linux/linux-ezx-2.6.21/patches/a780-pcap.patch [new file with mode: 0644]
packages/linux/linux-ezx-2.6.21/patches/a780-ts.patch
packages/linux/linux-ezx-2.6.21/patches/e680-emu.patch [new file with mode: 0644]
packages/linux/linux-ezx-2.6.21/patches/e680-kbd.patch
packages/linux/linux-ezx-2.6.21/patches/e680-leds.patch
packages/linux/linux-ezx-2.6.21/patches/e680-locksw.patch
packages/linux/linux-ezx-2.6.21/patches/e680-mci.patch
packages/linux/linux-ezx-2.6.21/patches/e680-pcap.patch [new file with mode: 0644]
packages/linux/linux-ezx-2.6.21/patches/e680-ts.patch
packages/linux/linux-ezx-2.6.21/patches/ezx-asoc.patch [new file with mode: 0644]
packages/linux/linux-ezx-2.6.21/patches/ezx-backlight.patch
packages/linux/linux-ezx-2.6.21/patches/ezx-bp.patch
packages/linux/linux-ezx-2.6.21/patches/ezx-core.patch
packages/linux/linux-ezx-2.6.21/patches/ezx-emu.patch
packages/linux/linux-ezx-2.6.21/patches/ezx-pcap.patch
packages/linux/linux-ezx-2.6.21/patches/ezx-pm.patch
packages/linux/linux-ezx-2.6.21/patches/index.html [new file with mode: 0644]
packages/linux/linux-ezx-2.6.21/patches/series
packages/linux/linux-ezx-2.6.21/rokre2/.mtn2git_empty [new file with mode: 0644]
packages/linux/linux-ezx_2.6.21.bb

diff --git a/packages/linux/linux-ezx-2.6.21/a1200/.mtn2git_empty b/packages/linux/linux-ezx-2.6.21/a1200/.mtn2git_empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/packages/linux/linux-ezx-2.6.21/a780/.mtn2git_empty b/packages/linux/linux-ezx-2.6.21/a780/.mtn2git_empty
new file mode 100644 (file)
index 0000000..e69de29
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21
-# Sat Jun  2 19:52:36 2007
+# Linux kernel version: 2.6.21.4
+# Fri Sep  7 09:32:15 2007
 #
 CONFIG_ARM=y
 CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -198,7 +198,7 @@ CONFIG_PREEMPT=y
 CONFIG_NO_IDLE_HZ=y
 CONFIG_HZ=100
 CONFIG_AEABI=y
-# CONFIG_OABI_COMPAT is not set
+CONFIG_OABI_COMPAT=y
 # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
 CONFIG_SELECT_MEMORY_MODEL=y
 CONFIG_FLATMEM_MANUAL=y
@@ -215,9 +215,9 @@ 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_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p1 rootfstype=ext3 rootdelay=5 ip=192.168.1.2:192.168.1.10:192.168.1.10:255.255.255.0:ezx:usb0:off   debug mem=32M@0xA0000000 mem=16M@0xAC000000"
 # CONFIG_XIP_KERNEL is not set
 # CONFIG_KEXEC is not set
 
@@ -228,6 +228,8 @@ CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext3 ip=169
 #
 # At least one emulation must be selected
 #
+# CONFIG_FPE_NWFPE is not set
+# CONFIG_FPE_FASTFPE is not set
 
 #
 # Userspace binary formats
@@ -428,7 +430,7 @@ CONFIG_MTD_XIP=y
 # CONFIG_MTD_COMPLEX_MAPPINGS is not set
 CONFIG_MTD_PHYSMAP=y
 CONFIG_MTD_PHYSMAP_START=0x0
-CONFIG_MTD_PHYSMAP_LEN=0
+CONFIG_MTD_PHYSMAP_LEN=0x0
 CONFIG_MTD_PHYSMAP_BANKWIDTH=2
 # CONFIG_MTD_ARM_INTEGRATOR is not set
 # CONFIG_MTD_SHARP_SL is not set
@@ -833,12 +835,78 @@ CONFIG_FONT_MINI_4x6=y
 #
 # Logo configuration
 #
-# CONFIG_LOGO is not set
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
 
 #
 # Sound
 #
-# CONFIG_SOUND is not set
+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=m
+CONFIG_SND_PCM_OSS=m
+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_AC97_CODEC=m
+CONFIG_SND_DUMMY=m
+# 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_PCM=m
+CONFIG_SND_PXA2XX_AC97=m
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+
+#
+# SoC audio support
+#
+CONFIG_SND_SOC=y
+
+#
+# SoC Platforms
+#
+
+#
+# SoC Audio for the Atmel AT91
+#
+
+#
+# SoC Audio for the Intel PXA2xx
+#
+CONFIG_SND_PXA2XX_SOC=y
+CONFIG_SND_PXA2XX_SOC_EZX=y
+CONFIG_SND_SOC_PCAP2=y
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
 
 #
 # HID Devices
diff --git a/packages/linux/linux-ezx-2.6.21/e2/.mtn2git_empty b/packages/linux/linux-ezx-2.6.21/e2/.mtn2git_empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/packages/linux/linux-ezx-2.6.21/e6/.mtn2git_empty b/packages/linux/linux-ezx-2.6.21/e6/.mtn2git_empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/packages/linux/linux-ezx-2.6.21/e680/.mtn2git_empty b/packages/linux/linux-ezx-2.6.21/e680/.mtn2git_empty
new file mode 100644 (file)
index 0000000..e69de29
index 0d2640a..0bd7581 100755 (executable)
@@ -1,20 +1,8 @@
-Index: linux-2.6.21/arch/arm/mach-pxa/Kconfig
-===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/Kconfig        2007-06-02 20:32:31.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/Kconfig     2007-06-02 20:44:29.000000000 -0300
-@@ -97,6 +97,7 @@
- config PXA_EZX_A1200
-       bool "Motorola A1200 GSM Phone"
-       select PXA27x
-+      select EZX_MCI_TF
- config PXA_EZX_E6
-       bool "Motorola E6 GSM Phone"
 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-06-02 20:32:26.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c 2007-06-02 20:44:56.000000000 -0300
-@@ -13,11 +13,14 @@
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-a1200.c    2007-06-28 22:48:05.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c 2007-06-28 22:53:19.000000000 -0300
+@@ -13,6 +13,8 @@
  #include <linux/init.h>
  #include <linux/platform_device.h>
  #include <linux/fb.h>
@@ -23,13 +11,14 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c
  
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
- #include <asm/arch/pxa-regs.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"
- #include "ezx.h"
-@@ -25,6 +28,95 @@
  extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
  extern void ezx_backlight_power(int);
  
@@ -125,7 +114,7 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c
  static struct pxafb_mode_info mode_a1200 = {
         .pixclock = 192308,
         .xres = 240,
-@@ -54,6 +146,7 @@
+@@ -88,6 +180,7 @@
  static void __init a1200_init(void)
  {
        set_pxa_fb_info(&a1200_fb_info);
diff --git a/packages/linux/linux-ezx-2.6.21/patches/a1200-pcap.patch b/packages/linux/linux-ezx-2.6.21/patches/a1200-pcap.patch
new file mode 100644 (file)
index 0000000..9bc1755
--- /dev/null
@@ -0,0 +1,53 @@
+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-06-28 22:44:12.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c 2007-06-28 22:45: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,40 @@
+        .pxafb_lcd_power = &ezx_lcd_power,
+ };
++/* PCAP */
++static int __init a1200_pcap_init(void)
++{
++      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)
index a7ca636..bcac76d 100755 (executable)
@@ -1,9 +1,9 @@
 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-06-02 20:32:32.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c 2007-06-02 20:33:41.000000000 -0300
-@@ -117,6 +117,27 @@
-       .exit           = a1200_mci_exit,
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-a1200.c    2007-06-28 22:54:35.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c 2007-06-28 22:55:00.000000000 -0300
+@@ -173,8 +173,33 @@
+       },
  };
  
 +/* PCAP_TS */
@@ -23,17 +23,15 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c
 +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 pxafb_mode_info mode_a1200 = {
-        .pixclock = 192308,
-        .xres = 240,
-@@ -141,6 +162,7 @@
- };
  static struct platform_device *devices[] __initdata = {
+       &a1200_pcap_device,
 +      &pcap_ts_device,
  };
  
diff --git a/packages/linux/linux-ezx-2.6.21/patches/a780-emu.patch b/packages/linux/linux-ezx-2.6.21/patches/a780-emu.patch
new file mode 100644 (file)
index 0000000..1477ce4
--- /dev/null
@@ -0,0 +1,38 @@
+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-01 19:46:15.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c  2007-08-01 19:52:09.000000000 -0300
+@@ -219,8 +219,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)
index b93b1b1..4c61a35 100755 (executable)
@@ -1,7 +1,7 @@
 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-06-08 18:38:47.000000000 +0200
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c  2007-06-08 18:38:50.000000000 +0200
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-a780.c     2007-08-01 19:58:07.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c  2007-08-01 20:02:00.000000000 -0300
 @@ -17,6 +17,7 @@
  #include <linux/mmc/host.h>
  #include <linux/irq.h>
@@ -10,8 +10,8 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c
  
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
-@@ -214,8 +215,31 @@
-        },
+@@ -319,10 +320,33 @@
+       .resource       = pcap_ts_resources,
  };
  
 +static struct gpio_keys_button a780flip_buttons[] = {
@@ -37,6 +37,8 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c
 +
 +
  static struct platform_device *devices[] __initdata = {
+       &a780_pcap_device,
+       &a780_emu_device,
        &pcap_ts_device,
 +      &a780flip_device,
  };
index 902889a..9f26b3d 100755 (executable)
@@ -1,8 +1,8 @@
 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-24 00:54:38.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c  2007-05-24 00:56:22.000000000 -0300
-@@ -16,18 +16,21 @@
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-a780.c     2007-08-01 19:52:09.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c  2007-08-01 19:56:13.000000000 -0300
+@@ -16,6 +16,7 @@
  #include <linux/fb.h>
  #include <linux/mmc/host.h>
  #include <linux/irq.h>
@@ -10,13 +10,13 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c
  
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
- #include <asm/arch/pxa-regs.h>
- #include <asm/arch/pxafb.h>
+@@ -24,11 +25,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"
- #include "ezx.h"
  
  extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
  extern void ezx_backlight_power(int);
@@ -24,8 +24,8 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c
  
  #ifdef CONFIG_EZX_PCAP
  extern int ezx_pcap_mmcsd_power(int);
-@@ -141,6 +144,55 @@
-       .pxafb_lcd_power = &ezx_lcd_power,
+@@ -243,6 +246,55 @@
+       .resource       = a780_emu_resources,
  };
  
 +static unsigned char a780_keycode[] = {
@@ -78,9 +78,9 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c
 +};
 +
  static struct platform_device *devices[] __initdata = {
- };
-@@ -159,6 +211,7 @@
+       &a780_pcap_device,
+       &a780_emu_device,
+@@ -263,6 +315,7 @@
  
        set_pxa_fb_info(&a780_fb_info);
        pxa_set_mci_info(&a780_mci_platform_data);
index 5a9a938..ff7a0b3 100755 (executable)
@@ -5,8 +5,8 @@
 
 Index: linux-2.6.21/drivers/leds/Kconfig
 ===================================================================
---- linux-2.6.21.orig/drivers/leds/Kconfig     2007-06-08 18:33:45.000000000 +0200
-+++ linux-2.6.21/drivers/leds/Kconfig  2007-06-08 18:39:04.000000000 +0200
+--- linux-2.6.21.orig/drivers/leds/Kconfig     2007-08-01 19:38:44.000000000 -0300
++++ linux-2.6.21/drivers/leds/Kconfig  2007-08-01 20:03:29.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.
@@ -23,8 +23,8 @@ Index: linux-2.6.21/drivers/leds/Kconfig
        depends on LEDS_TRIGGERS
 Index: linux-2.6.21/drivers/leds/Makefile
 ===================================================================
---- linux-2.6.21.orig/drivers/leds/Makefile    2007-06-08 18:33:45.000000000 +0200
-+++ linux-2.6.21/drivers/leds/Makefile 2007-06-08 18:39:04.000000000 +0200
+--- linux-2.6.21.orig/drivers/leds/Makefile    2007-08-01 19:38:44.000000000 -0300
++++ linux-2.6.21/drivers/leds/Makefile 2007-08-01 20:03:29.000000000 -0300
 @@ -16,6 +16,7 @@
  obj-$(CONFIG_LEDS_WRAP)                       += leds-wrap.o
  obj-$(CONFIG_LEDS_H1940)              += leds-h1940.o
@@ -36,7 +36,7 @@ Index: linux-2.6.21/drivers/leds/Makefile
 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-06-08 18:39:04.000000000 +0200
++++ linux-2.6.21/drivers/leds/leds-a780.c      2007-08-01 20:03:29.000000000 -0300
 @@ -0,0 +1,122 @@
 +/*
 + * EZX Platform LED Driver for the Motorola A780 GSM Phone
@@ -162,18 +162,23 @@ Index: linux-2.6.21/drivers/leds/leds-a780.c
 +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-06-08 18:38:50.000000000 +0200
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c  2007-06-08 18:39:04.000000000 +0200
-@@ -236,10 +236,15 @@
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-a780.c     2007-08-01 20:02:00.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c  2007-08-01 20:03:29.000000000 -0300
+@@ -341,12 +341,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,
index 4877bff..3cf1848 100755 (executable)
@@ -1,8 +1,8 @@
 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-24 00:44:14.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c  2007-05-24 00:47:01.000000000 -0300
-@@ -14,11 +14,14 @@
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-a780.c     2007-06-28 22:45:00.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c  2007-06-28 22:53:03.000000000 -0300
+@@ -14,6 +14,8 @@
  #include <linux/init.h>
  #include <linux/platform_device.h>
  #include <linux/fb.h>
@@ -11,13 +11,14 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c
  
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
- #include <asm/arch/pxa-regs.h>
+@@ -21,12 +23,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"
- #include "ezx.h"
-@@ -26,6 +29,95 @@
  extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
  extern void ezx_backlight_power(int);
  
@@ -113,7 +114,7 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c
  static struct pxafb_mode_info mode_a780 = {
        .pixclock       = 150000,
        .xres           = 240,
-@@ -66,6 +158,7 @@
+@@ -145,6 +237,7 @@
        PSLR  = 0x05800f00;
  
        set_pxa_fb_info(&a780_fb_info);
@@ -121,15 +122,3 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c
  
          /* clear EMU MUX1/MUX2 (low) to close the audio path to EMU */
        pxa_gpio_mode(GPIO_EMU_MUX1|GPIO_OUT);
-Index: linux-2.6.21/arch/arm/mach-pxa/Kconfig
-===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/Kconfig        2007-05-24 00:47:13.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/Kconfig     2007-05-24 00:48:11.000000000 -0300
-@@ -87,6 +87,7 @@
- config PXA_EZX_A780
-       bool "Motorola A780 GSM Phone"
-       select PXA27x
-+      select EZX_MCI_TF
- config PXA_EZX_E2
-       bool "Motorola E2 GSM Phone"
diff --git a/packages/linux/linux-ezx-2.6.21/patches/a780-pcap.patch b/packages/linux/linux-ezx-2.6.21/patches/a780-pcap.patch
new file mode 100644 (file)
index 0000000..3541734
--- /dev/null
@@ -0,0 +1,98 @@
+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-06-28 22:44:12.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c  2007-06-28 22:45:00.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,85 @@
+       .pxafb_lcd_power = &ezx_lcd_power,
+ };
++/* PCAP */
++static int __init a780_pcap_init(void)
++{
++      /* initialize PCAP registers */
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_A1CTRL, 1);
++//    ezx_pcap_vibrator_level(PCAP_VIBRATOR_VOLTAGE_LEVEL3);
++
++      /* set SW1 sleep to keep SW1 1.3v in sync mode */
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW1_MODE10, 0);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW1_MODE11, 0);
++
++      /*  SW1 active in sync mode */
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW1_MODE00, 1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW1_MODE01, 0);
++
++      /*  at SW1 -core voltage to 1.30V   */
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW10_DVS, 1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW11_DVS, 1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW12_DVS, 1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW13_DVS, 0);
++
++      /* when STANDY2 PIN ACTIVE (high) set V3-- sram V8 -- pll off  */
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V3_STBY, 1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V3_LOWPWR, 0);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V8_STBY, 1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V8_LOWPWR, 0);
++
++      /*
++       * when STANDY2 PIN ACTIVE (high) set V4-- lcd only for e680 V6 ---
++       * camera for e680
++       */
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V4_STBY, 1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V4_LOWPWR, 1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V6_STBY, 1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V6_LOWPWR, 0);
++
++      /* set Vc to low power mode when AP sleep */
++//    SSP_PCAP_bit_set( SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_VC_STBY);
++
++      /* set VAUX2 to voltage 2.775V and low power mode when AP sleep */
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX2_1, 1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX2_0, 0);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_VAUX2_STBY, 1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_VAUX2_LOWPWR, 1);
++//    ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX2_EN, 1);
++
++//    PGSR(GPIO34_TXENB) |= GPIO_bit(GPIO34_TXENB);
++
++      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)
index a4a476a..7c455cf 100755 (executable)
@@ -1,9 +1,9 @@
 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-06-02 20:32:48.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c  2007-06-02 20:33:10.000000000 -0300
-@@ -121,6 +121,27 @@
-       .exit           = a780_mci_exit,
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-a780.c     2007-08-01 19:56:13.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c  2007-08-01 19:58:07.000000000 -0300
+@@ -295,9 +295,34 @@
+        },
  };
  
 +/* PCAP_TS */
@@ -23,17 +23,16 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c
 +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 pxafb_mode_info mode_a780 = {
-       .pixclock       = 150000,
-       .xres           = 240,
-@@ -194,6 +215,7 @@
- };
  static struct platform_device *devices[] __initdata = {
+       &a780_pcap_device,
+       &a780_emu_device,
 +      &pcap_ts_device,
  };
  
diff --git a/packages/linux/linux-ezx-2.6.21/patches/e680-emu.patch b/packages/linux/linux-ezx-2.6.21/patches/e680-emu.patch
new file mode 100644 (file)
index 0000000..572485d
--- /dev/null
@@ -0,0 +1,38 @@
+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-08-01 19:53:13.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c  2007-08-01 19:55:54.000000000 -0300
+@@ -222,8 +222,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)
index 2a2d9c7..0d2047c 100755 (executable)
@@ -1,8 +1,8 @@
 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-05-24 00:54:39.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c  2007-05-24 00:56:30.000000000 -0300
-@@ -15,18 +15,21 @@
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-e680.c     2007-08-01 19:55:54.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c  2007-08-01 19:56:21.000000000 -0300
+@@ -15,6 +15,7 @@
  #include <linux/fb.h>
  #include <linux/mmc/host.h>
  #include <linux/irq.h>
@@ -10,13 +10,13 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c
  
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
- #include <asm/arch/pxa-regs.h>
- #include <asm/arch/pxafb.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"
- #include "ezx.h"
  
  extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
  extern void ezx_backlight_power(int);
@@ -24,8 +24,8 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c
  
  #ifdef CONFIG_EZX_PCAP
  extern int ezx_pcap_mmcsd_power(int);
-@@ -144,6 +147,58 @@
-       .pxafb_lcd_power = &ezx_lcd_power,
+@@ -246,6 +249,58 @@
+       .resource       = e680_emu_resources,
  };
  
 +static unsigned char e680_keycode[] = {
@@ -81,9 +81,9 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c
 +};
 +
  static struct platform_device *devices[] __initdata = {
- };
-@@ -162,6 +217,7 @@
+       &e680_pcap_device,
+       &e680_emu_device,
+@@ -266,6 +321,7 @@
  
        set_pxa_fb_info(&e680_fb_info);
        pxa_set_mci_info(&e680_mci_platform_data);
index 82dc93b..beffb28 100755 (executable)
@@ -5,8 +5,8 @@
 
 Index: linux-2.6.21/drivers/leds/Kconfig
 ===================================================================
---- linux-2.6.21.orig/drivers/leds/Kconfig     2007-06-08 18:39:04.000000000 +0200
-+++ linux-2.6.21/drivers/leds/Kconfig  2007-06-08 18:39:12.000000000 +0200
+--- linux-2.6.21.orig/drivers/leds/Kconfig     2007-08-01 20:03:29.000000000 -0300
++++ linux-2.6.21/drivers/leds/Kconfig  2007-08-01 20:04:02.000000000 -0300
 @@ -111,6 +111,13 @@
          This option enables support for the LEDs on the
          Motorola A780 GSM Phone.
@@ -23,8 +23,8 @@ Index: linux-2.6.21/drivers/leds/Kconfig
        depends on LEDS_TRIGGERS
 Index: linux-2.6.21/drivers/leds/Makefile
 ===================================================================
---- linux-2.6.21.orig/drivers/leds/Makefile    2007-06-08 18:39:04.000000000 +0200
-+++ linux-2.6.21/drivers/leds/Makefile 2007-06-08 18:39:12.000000000 +0200
+--- linux-2.6.21.orig/drivers/leds/Makefile    2007-08-01 20:03:29.000000000 -0300
++++ linux-2.6.21/drivers/leds/Makefile 2007-08-01 20:04:02.000000000 -0300
 @@ -17,6 +17,7 @@
  obj-$(CONFIG_LEDS_H1940)              += leds-h1940.o
  obj-$(CONFIG_LEDS_COBALT)             += leds-cobalt.o
@@ -36,8 +36,8 @@ Index: linux-2.6.21/drivers/leds/Makefile
 Index: linux-2.6.21/drivers/leds/leds-e680.c
 ===================================================================
 --- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.21/drivers/leds/leds-e680.c      2007-06-08 18:39:12.000000000 +0200
-@@ -0,0 +1,309 @@
++++ linux-2.6.21/drivers/leds/leds-e680.c      2007-08-01 20:04:02.000000000 -0300
+@@ -0,0 +1,235 @@
 +/*
 + * EZX Platform LED Driver for the Motorola E680(i) GSM Phone
 + *
@@ -73,147 +73,100 @@ Index: linux-2.6.21/drivers/leds/leds-e680.c
 +extern int ezx_pcap_read(u_int8_t, u_int32_t *);
 +extern int ezx_pcap_write(u_int8_t, u_int32_t);
 +
-+static enum led_brightness old_red;
-+static enum led_brightness old_green;
-+static enum led_brightness old_blue;
-+
 +typedef struct {
-+      unsigned char ind_GPIO_red;    /*Indicator Red control GPIO 46: 0 active, 1 disactive*/
-+      unsigned char ind_GPIO_green;  /*Indicator Green control GPIO 47: 0 active, 1 disactive*/
-+      unsigned char pcap_LEDR_en;    /*pcap LEDR_EN bit value: 1 =Red LED(&Green) sink circuit enabled*/
-+      unsigned char pcap_LEDG_en;    /*pcap LEDG_EN bit value:1 =Green(->Blue)LED sink circuit enabled*/
-+      unsigned char pcap_LEDR_CTRL; /* 4bits Sets the timing for the red(&Green) LED sink circuit*/
-+      unsigned char pcap_LEDG_CTRL; /* 4bits Sets the timing for the GREEN (->Blue) LED sink circuit*/
-+      unsigned char pcap_LEDR_I;   /* 2 bits 00 3mA,01 4mA, 10 5mA, 11 9mA, sets the pulsed current level for LEDR*/
-+      unsigned char pcap_LEDG_I;   /* 2 bits 00 3mA,01 4mA, 10 5mA, 11 9mA, sets the pulsed current level for LEDG*/
-+      unsigned char pcap_SKIP_on;  /*1=The ON timing sequence defined by LEDx_CTRL is executed on every other cycle*/
++      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[]=
 +{
-+  /*  on/off pulsepower  timing  intensity */
-+      {0x1,0x1, 0x0,0x0, 0x0,0x0, 0x0,0x0,0x0}, /* OFF */
-+      {0x0,0x1, 0x1,0x0, 0xc,0x0, 0x1,0x0,0x0}, /* RED */
-+      {0x1,0x0, 0x1,0x0, 0xc,0x0, 0x1,0x0,0x0}, /* GREEN */
-+      {0x0,0x0, 0x1,0x0, 0xc,0x0, 0x1,0x0,0x0}, /* ORANGE = RED + GREEN */
-+      {0x1,0x1, 0x0,0x1, 0x0,0xc, 0x0,0x0,0x0}, /* BLUE */
-+      {0x0,0x1, 0x1,0x1, 0xc,0xc, 0x1,0x0,0x0}, /* LIGHT_RED = RED + BLUE */
-+      {0x1,0x0, 0x1,0x1, 0xc,0xc, 0x1,0x0,0x0}, /* LIGHT_GREEN = GREEN + BLUE */
-+      {0x0,0x0, 0x1,0x1, 0xc,0xc, 0x1,0x0,0x0}, /* WHITE = RED + GREEN + BLUE */
++      {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_led_set( enum led_brightness red, enum led_brightness green, enum led_brightness blue )
++static void e680led_set(struct led_classdev *led_cdev, enum led_brightness value)
 +{
-+      unsigned int tempValue = 0;
-+      unsigned int value = 0;
-+      unsigned int stateIndex = 0;
-+      unsigned char gpio_red, gpio_green, ledr_en, ledg_en, ledr_ctrl, ledg_ctrl, ledr_i, ledg_i,skip;
-+
-+      printk( KERN_DEBUG "e680led_led_set: red=%d, green=%d, blue=%d", red, green, blue );
-+      stateIndex = ( ( blue << 2 ) | ( green << 1 ) | ( red ) )   & 0x7;
-+      printk( KERN_DEBUG "LED stateIndex is %d", stateIndex );
-+      gpio_red   = led_register_value[stateIndex].ind_GPIO_red    & 0x1;
-+      gpio_green = led_register_value[stateIndex].ind_GPIO_green  & 0x1;
-+      ledr_en    = led_register_value[stateIndex].pcap_LEDR_en    & 0x1;
-+      ledg_en    = led_register_value[stateIndex].pcap_LEDG_en    & 0x1;
-+      ledr_ctrl  = led_register_value[stateIndex].pcap_LEDR_CTRL  & 0xf;
-+      ledg_ctrl  = led_register_value[stateIndex].pcap_LEDG_CTRL  & 0xf;
-+      ledr_i     = led_register_value[stateIndex].pcap_LEDR_I     & 0x3;
-+      ledg_i     = led_register_value[stateIndex].pcap_LEDG_I     & 0x3;
-+      skip       = led_register_value[stateIndex].pcap_SKIP_on    & 0x1;
-+
-+      /* disable LEDs */
-+      if( ezx_pcap_read(SSP_PCAP_ADJ_PERIPH_REGISTER,&tempValue) != SSP_PCAP_SUCCESS )
-+      {
-+              printk( KERN_WARNING "LED PCAP Read Failed\n" );
-+              return;
++      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;
 +      }
-+      tempValue &= (~SSP_PCAP_LED_MASK);
-+      if( ezx_pcap_write(SSP_PCAP_ADJ_PERIPH_REGISTER,tempValue) != SSP_PCAP_SUCCESS )
-+      {
-+              printk( KERN_WARNING "LED PCAP Write Failed (Clear Data)\n" );
-+              return;
++
++      /* 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;
 +
-+      /* configure GPIOs as output */
-+      pxa_gpio_mode(IND_CNTL_R_BUL | GPIO_OUT);
-+      pxa_gpio_mode(IND_CNTL_G_BUL | GPIO_OUT);
++      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;
 +
-+      //FIXME: Simplify this logic
-+      if ( (gpio_green && gpio_red) )
-+      {
-+              /*Disable Red & Green signal*/
-+              pxa_gpio_set_value(IND_CNTL_R_BUL, 1); /*IND_CNTL_R_BUL Low active*/
-+              PGSR(IND_CNTL_R_BUL) = PGSR(IND_CNTL_R_BUL) | GPIO_bit(IND_CNTL_R_BUL);
-+
-+              pxa_gpio_set_value(IND_CNTL_G_BUL, 0); /*IND_CNTL_G_BUL High active*/
-+              PGSR(IND_CNTL_G_BUL) = PGSR(IND_CNTL_G_BUL) & (~GPIO_bit(IND_CNTL_G_BUL));
-+
-+              printk( KERN_DEBUG "LED GPIO Green & Red Disable\n");
-+      } else if ( gpio_green && !gpio_red )
-+      {
-+              /*Green Disable, Red Enable*/
-+              pxa_gpio_set_value(IND_CNTL_R_BUL, 0);
-+              PGSR(IND_CNTL_R_BUL) = PGSR(IND_CNTL_R_BUL) & (~GPIO_bit(IND_CNTL_R_BUL));
-+
-+              pxa_gpio_set_value(IND_CNTL_G_BUL, 0);
-+              PGSR(IND_CNTL_G_BUL) = PGSR(IND_CNTL_G_BUL) & (~GPIO_bit(IND_CNTL_G_BUL));
-+
-+              printk( KERN_DEBUG "LED GPIO Green Disable, Red Enable\n");
-+      } else if (gpio_red && !gpio_green )
-+      {
-+              /*Red Disable, Green Enable*/
-+              pxa_gpio_set_value(IND_CNTL_R_BUL, 1);
-+              PGSR(IND_CNTL_R_BUL) = PGSR(IND_CNTL_R_BUL) | GPIO_bit(IND_CNTL_R_BUL);
-+
-+              pxa_gpio_set_value(IND_CNTL_G_BUL, 1);
-+              PGSR(IND_CNTL_G_BUL) = PGSR(IND_CNTL_G_BUL) | GPIO_bit(IND_CNTL_G_BUL);
-+              printk( KERN_DEBUG "LED GPIO Red Disable, Green Enable");
-+      }else
-+      {
-+              /*Red & Green enable*/
-+              pxa_gpio_set_value(IND_CNTL_R_BUL, 0);
-+              PGSR(IND_CNTL_R_BUL) = PGSR(IND_CNTL_R_BUL) & (~GPIO_bit(IND_CNTL_R_BUL));
-+
-+              pxa_gpio_set_value(IND_CNTL_G_BUL, 1);
-+              PGSR(IND_CNTL_G_BUL) = PGSR(IND_CNTL_G_BUL) | GPIO_bit(IND_CNTL_G_BUL);
-+              printk( KERN_DEBUG "LED GPIO Red & Green Enable\n");
-+      }
++      ezx_pcap_read(SSP_PCAP_ADJ_PERIPH_REGISTER,&tempValue);
 +
-+      /* Write PCAP LED Peripheral Control Register*/
-+      value = ( ledr_en | (ledg_en <<1) | (ledr_ctrl <<2) | (ledg_ctrl <<6) |
-+              (ledr_i << 10) | (ledg_i <<12) | (skip <<14) ) & 0x7fff;
-+      tempValue |= (value <<SSP_PCAP_LED_SHIFT);
-+
-+      if ( ezx_pcap_write(SSP_PCAP_ADJ_PERIPH_REGISTER,tempValue) == SSP_PCAP_SUCCESS )
-+      {
-+              printk( KERN_DEBUG "LED PCAP Write Success (0x%x :0x%x)\n",tempValue,value);
-+              old_red = red;
-+              old_green = green;
-+              old_blue = blue;
-+              return;
-+      } else {
-+              printk( KERN_DEBUG "LED PCAP Write Failed (State Change)\n");
-+              return;
-+      }
-+}
++      tempValue &= (~SSP_PCAP_LED_MASK);
 +
-+static void e680led_red_set(struct led_classdev *led_cdev, enum led_brightness value)
-+{
-+      printk( KERN_DEBUG "e680led_red_set: %d\n", value );
-+      e680led_led_set( 1 && value, old_green, old_blue );
-+}
++      pxa_gpio_set_value(IND_CNTL_R_BUL, gpio_red);
++      pxa_gpio_set_value(IND_CNTL_G_BUL, gpio_green);
 +
-+static void e680led_green_set(struct led_classdev *led_cdev, enum led_brightness value)
-+{
-+      printk( KERN_DEBUG "e680led_green_set: %d\n", value );
-+      e680led_led_set( old_red, 1 && value, old_blue );
-+}
++      /* 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;
 +
-+static void e680led_blue_set(struct led_classdev *led_cdev, enum led_brightness value)
-+{
-+      printk( KERN_DEBUG "e680led_blue_set: %d\n", value );
-+      e680led_led_set( old_red, old_green, 1 && value );
++      ezx_pcap_write(SSP_PCAP_ADJ_PERIPH_REGISTER,tempValue);
 +}
 +
 +static void e680led_keypad_set(struct led_classdev *led_cdev, enum led_brightness value)
@@ -238,25 +191,13 @@ Index: linux-2.6.21/drivers/leds/leds-e680.c
 +#endif
 +}
 +
-+static struct led_classdev e680_red_led = {
-+      .name                   = "e680:red",
-+      .default_trigger        = "none",
-+      .brightness_set         = e680led_red_set,
-+};
-+
-+static struct led_classdev e680_green_led = {
-+      .name                   = "e680:green",
++static struct led_classdev e680_led = {
++      .name                   = "e680:led",
 +      .default_trigger        = "none",
-+      .brightness_set         = e680led_green_set,
++      .brightness_set         = e680led_set,
 +};
 +
-+static struct led_classdev e680_blue_led = {
-+      .name                   = "e680:blue",
-+      .default_trigger        = "none",
-+      .brightness_set         = e680led_blue_set,
-+};
-+
-+static struct led_classdev e680_keypad_led = {
++static struct led_classdev e680_keypad = {
 +      .name                   = "e680:keypad",
 +      .default_trigger        = "none",
 +      .brightness_set         = e680led_keypad_set,
@@ -265,19 +206,15 @@ Index: linux-2.6.21/drivers/leds/leds-e680.c
 +#ifdef CONFIG_PM
 +static int e680led_suspend(struct platform_device *dev, pm_message_t state)
 +{
-+      led_classdev_suspend(&e680_red_led);
-+      led_classdev_suspend(&e680_green_led);
-+      led_classdev_suspend(&e680_blue_led);
-+      led_classdev_suspend(&e680_keypad_led);
++      led_classdev_suspend(&e680_led);
++      led_classdev_suspend(&e680_keypad);
 +      return 0;
 +}
 +
 +static int e680led_resume(struct platform_device *dev)
 +{
-+      led_classdev_resume(&e680_red_led);
-+      led_classdev_resume(&e680_green_led);
-+      led_classdev_resume(&e680_blue_led);
-+      led_classdev_resume(&e680_keypad_led);
++      led_classdev_resume(&e680_led);
++      led_classdev_resume(&e680_keypad);
 +      return 0;
 +}
 +#endif
@@ -286,35 +223,25 @@ Index: linux-2.6.21/drivers/leds/leds-e680.c
 +{
 +      int ret;
 +
-+      ret = led_classdev_register(&pdev->dev, &e680_red_led);
-+      if (ret < 0)
-+              return 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_green_led);
++      ret = led_classdev_register(&pdev->dev, &e680_led);
 +      if (ret < 0)
-+              led_classdev_unregister(&e680_red_led);
-+
-+      ret = led_classdev_register(&pdev->dev, &e680_blue_led);
-+      if (ret < 0) {
-+              led_classdev_unregister(&e680_red_led);
-+              led_classdev_unregister(&e680_green_led);
-+      }
++              return ret;
 +
-+      ret = led_classdev_register(&pdev->dev, &e680_keypad_led);
++      ret = led_classdev_register(&pdev->dev, &e680_keypad);
 +      if (ret < 0) {
-+              led_classdev_unregister(&e680_red_led);
-+              led_classdev_unregister(&e680_green_led);
-+              led_classdev_unregister(&e680_blue_led);
++              led_classdev_unregister(&e680_led);
 +      }
 +      return ret;
 +}
 +
 +static int e680led_remove(struct platform_device *pdev)
 +{
-+      led_classdev_unregister(&e680_red_led);
-+      led_classdev_unregister(&e680_green_led);
-+      led_classdev_unregister(&e680_blue_led);
-+      led_classdev_unregister(&e680_keypad_led);
++      led_classdev_unregister(&e680_led);
++      led_classdev_unregister(&e680_keypad);
 +      return 0;
 +}
 +
@@ -337,7 +264,6 @@ Index: linux-2.6.21/drivers/leds/leds-e680.c
 +
 +static void __exit e680led_exit(void)
 +{
-+      e680led_led_set( 0, 0, 0 );
 +      platform_driver_unregister(&e680led_driver);
 +}
 +
@@ -349,18 +275,23 @@ Index: linux-2.6.21/drivers/leds/leds-e680.c
 +MODULE_LICENSE("GPL");
 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-06-08 18:38:59.000000000 +0200
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c  2007-06-08 18:39:12.000000000 +0200
-@@ -242,9 +242,15 @@
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-e680.c     2007-08-01 20:02:32.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c  2007-08-01 20:04:02.000000000 -0300
+@@ -347,11 +347,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,
index 36b52a9..a0c1ebb 100755 (executable)
@@ -1,7 +1,7 @@
 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-06-08 18:38:48.000000000 +0200
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c  2007-06-08 18:38:59.000000000 +0200
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-e680.c     2007-08-01 19:58:54.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c  2007-08-01 20:02:32.000000000 -0300
 @@ -16,6 +16,7 @@
  #include <linux/mmc/host.h>
  #include <linux/irq.h>
@@ -10,8 +10,8 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c
  
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
-@@ -220,8 +221,30 @@
-        },
+@@ -325,10 +326,32 @@
+       .resource       = pcap_ts_resources,
  };
  
 +static struct gpio_keys_button e680locksw_buttons[] = {
@@ -36,6 +36,8 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c
 +};
 +
  static struct platform_device *devices[] __initdata = {
+       &e680_pcap_device,
+       &e680_emu_device,
        &pcap_ts_device,
 +      &e680locksw_device,
  };
index b5bb293..40b56b9 100755 (executable)
@@ -1,8 +1,8 @@
 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-05-24 00:43:08.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c  2007-05-24 00:48:20.000000000 -0300
-@@ -13,11 +13,14 @@
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-e680.c     2007-06-28 22:45:27.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c  2007-06-28 22:53:10.000000000 -0300
+@@ -13,6 +13,8 @@
  #include <linux/init.h>
  #include <linux/platform_device.h>
  #include <linux/fb.h>
@@ -11,13 +11,14 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c
  
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
- #include <asm/arch/pxa-regs.h>
+@@ -20,12 +22,106 @@
  #include <asm/arch/pxafb.h>
+ #include <asm/arch/ezx.h>
+ #include <asm/arch/ezx-pcap.h>
 +#include <asm/arch/mmc.h>
  
  #include "generic.h"
- #include "ezx.h"
-@@ -25,6 +28,99 @@
  extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
  extern void ezx_backlight_power(int);
  
@@ -117,7 +118,7 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c
  static struct pxafb_mode_info mode_e680 = {
        .pixclock       = 150000,
        .xres           = 240,
-@@ -65,6 +161,7 @@
+@@ -144,6 +240,7 @@
        PSLR  = 0x05800f00;
  
        set_pxa_fb_info(&e680_fb_info);
@@ -125,15 +126,3 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c
  
          /* clear EMU MUX1/MUX2 (low) to close the audio path to EMU */
        pxa_gpio_mode(GPIO_EMU_MUX1|GPIO_OUT);
-Index: linux-2.6.21/arch/arm/mach-pxa/Kconfig
-===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/Kconfig        2007-05-24 00:48:28.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/Kconfig     2007-05-24 00:48:55.000000000 -0300
-@@ -83,6 +83,7 @@
- config PXA_EZX_E680
-       bool "Motorola E680 GSM Phone"
-       select PXA27x
-+      select EZX_MCI_SD
- config PXA_EZX_A780
-       bool "Motorola A780 GSM Phone"
diff --git a/packages/linux/linux-ezx-2.6.21/patches/e680-pcap.patch b/packages/linux/linux-ezx-2.6.21/patches/e680-pcap.patch
new file mode 100644 (file)
index 0000000..e974be9
--- /dev/null
@@ -0,0 +1,98 @@
+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-06-28 22:44:12.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c  2007-06-28 22:45:27.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,85 @@
+       .pxafb_lcd_power = &ezx_lcd_power,
+ };
++/* PCAP */
++static int __init e680_pcap_init(void)
++{
++      /* initialize PCAP registers */
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_A1CTRL, 1);
++//    ezx_pcap_vibrator_level(PCAP_VIBRATOR_VOLTAGE_LEVEL3);
++
++      /* set SW1 sleep to keep SW1 1.3v in sync mode */
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW1_MODE10, 0);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW1_MODE11, 0);
++
++      /*  SW1 active in sync mode */
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW1_MODE00, 1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW1_MODE01, 0);
++
++      /*  at SW1 -core voltage to 1.30V   */
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW10_DVS, 1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW11_DVS, 1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW12_DVS, 1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW13_DVS, 0);
++
++      /* when STANDY2 PIN ACTIVE (high) set V3-- sram V8 -- pll off  */
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V3_STBY, 1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V3_LOWPWR, 0);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V8_STBY, 1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V8_LOWPWR, 0);
++
++      /*
++       * when STANDY2 PIN ACTIVE (high) set V4-- lcd only for e680 V6 ---
++       * camera for e680
++       */
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V4_STBY, 1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V4_LOWPWR, 1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V6_STBY, 1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V6_LOWPWR, 0);
++
++      /* set Vc to low power mode when AP sleep */
++//    SSP_PCAP_bit_set( SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_VC_STBY);
++
++      /* set VAUX2 to voltage 2.775V and low power mode when AP sleep */
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX2_1, 1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX2_0, 0);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_VAUX2_STBY, 1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_VAUX2_LOWPWR, 1);
++//    ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX2_EN, 1);
++
++//    PGSR(GPIO34_TXENB) |= GPIO_bit(GPIO34_TXENB);
++
++      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)
index 52f9ce3..7a7a1be 100755 (executable)
@@ -1,9 +1,9 @@
 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-06-02 20:32:49.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c  2007-06-02 20:33:26.000000000 -0300
-@@ -124,6 +124,27 @@
-       .exit           = e680_mci_exit,
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-e680.c     2007-08-01 19:56:21.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c  2007-08-01 19:58:54.000000000 -0300
+@@ -301,9 +301,34 @@
+        },
  };
  
 +/* PCAP_TS */
@@ -23,17 +23,16 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c
 +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 pxafb_mode_info mode_e680 = {
-       .pixclock       = 150000,
-       .xres           = 240,
-@@ -200,6 +221,7 @@
- };
  static struct platform_device *devices[] __initdata = {
+       &e680_pcap_device,
+       &e680_emu_device,
 +      &pcap_ts_device,
  };
  
diff --git a/packages/linux/linux-ezx-2.6.21/patches/ezx-asoc.patch b/packages/linux/linux-ezx-2.6.21/patches/ezx-asoc.patch
new file mode 100644 (file)
index 0000000..4b1f39b
--- /dev/null
@@ -0,0 +1,1179 @@
+Index: linux-2.6.21/sound/soc/codecs/pcap2.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/sound/soc/codecs/pcap2.c      2007-08-04 22:20:36.000000000 -0300
+@@ -0,0 +1,709 @@
++/*
++ * pcap2.c  --  Template Codec  Audio 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.
++ */
++
++#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 *);
++
++/*
++ * Debug
++ */
++
++#define PCAP2_DEBUG 1
++
++#ifdef PCAP2_DEBUG
++#define dbg(format, arg...) \
++      printk(KERN_DEBUG AUDIO_NAME ": " format "\n" , ## arg)
++#else
++#define dbg(format, arg...) do {} while (0)
++#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);
++
++
++
++
++/*
++ * write to the pcap2 codec register space
++ */
++static int pcap2_codec_write(struct snd_soc_codec *codec, unsigned int reg,
++      unsigned int value)
++{
++      dbg("codec_write reg=%08x, val=%08x", reg, value);
++      ezx_pcap_write(reg, value);
++      return 0;
++
++}
++
++static unsigned int pcap2_codec_read(struct snd_soc_codec *codec, unsigned int reg)
++{
++      unsigned int ret;
++      
++      ezx_pcap_read(reg, &ret);
++      dbg("codec_read  reg=%08x, val=%08x", reg, ret);
++      return(ret);
++
++}
++
++static const char *pcap2_amp_output[] = {"R L Stereo", "RL", "RL3db", "RL6db"};
++
++static const struct soc_enum pcap2_enum[] = {
++SOC_ENUM_SINGLE(PCAP2_OUTPUT_AMP, 19, 4, pcap2_amp_output),
++
++};
++
++/* pcap2 codec non DAPM controls */
++static const struct snd_kcontrol_new pcap2_codec_snd_controls[] = {
++SOC_SINGLE("Output gain",     PCAP2_OUTPUT_AMP, 13, 15, 0),
++SOC_SINGLE("Input gain",      PCAP2_INPUT_AMP,   0, 31, 0),
++SOC_SINGLE("louderspeaker sw",        PCAP2_OUTPUT_AMP,  1,  1, 0),
++SOC_SINGLE("Earpiece switch", PCAP2_OUTPUT_AMP,  0,  1, 0),
++SOC_SINGLE("Earpctrl switch",         PCAP2_OUTPUT_AMP, 17,  1, 0),
++SOC_SINGLE("Aright switch",   PCAP2_OUTPUT_AMP,  5,  1, 0),
++SOC_SINGLE("Aleft switch",    PCAP2_OUTPUT_AMP,  6,  1, 0),
++//SOC_SINGLE("AHS switch",    PCAP2_INPUT_AMP,  14,  1, 0),
++//SOC_SINGLE("pga in switch", PCAP2_OUTPUT_AMP, 10,  1, 0),
++SOC_ENUM("Output mode",               pcap2_enum[0]),
++};
++
++/* add non dapm controls */
++static int pcap2_codec_add_controls(struct snd_soc_codec *codec)
++{
++      int err, i;
++      dbg("pcap2_codec_add_controls");
++
++      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[] = {
++};
++
++/*
++ * template codec audio interconnectiosn between sink and source.
++ */
++static const char *audio_map[][3] = {
++
++
++      /* terminator */
++      {NULL, NULL, NULL},
++};
++
++static int pcap2_codec_add_widgets(struct snd_soc_codec *codec)
++{
++      int i;
++      dbg("pcap2_codec_add_widgets");
++
++      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;
++}
++
++/*
++ * Alsa operations
++ * Only implement the required operations for your platform.
++ * These operations are specific to the codec only.
++ */
++
++ /*
++ * Called by ALSA when a PCM substream is opened, private data can be allocated.
++ */
++static int pcap2mono_codec_startup(struct snd_pcm_substream *substream)
++{
++      dbg("pcap2 codec startup");
++
++      return 0;
++}
++
++/*
++ * Called by ALSA when a PCM substream is closed. Private data can be
++ * freed here.
++ */
++static int pcap2mono_codec_shutdown(struct snd_pcm_substream *substream)
++{
++      struct snd_soc_pcm_runtime *rtd = substream->private_data;
++      struct snd_soc_device *socdev = rtd->socdev;
++      struct snd_soc_codec *codec = socdev->codec;
++
++      dbg("pcap2mono codec shutdown");
++
++      pcap2_codec_write(codec, PCAP2_CODEC, 0);
++      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 pcap2mono_codec_hw_params(struct snd_pcm_substream *substream,
++                              struct snd_pcm_hw_params *params)
++{
++//    u_int32_t tmp;
++      dbg("pcap2mono_codec_hw_params");
++
++      return 0;
++}
++
++/*
++ * Free's resources allocated by hw_params, can be called multiple times
++ */
++static int pcap2mono_codec_hw_free(struct snd_pcm_substream *substream)
++{
++      dbg("pcap2mono_codec_hw_free");
++      return 0;
++}
++
++static int pcap2_set_dai_sysclk(struct snd_soc_codec_dai *codec_dai,
++              int clk_id, unsigned int freq, int dir)
++{
++
++      dbg("pcap2 set dai sysclk");
++      return 0;
++}
++
++static int pcap2_set_dai_pll(struct snd_soc_codec_dai *codec_dai,
++              int pll_id, unsigned int freq_in, unsigned int freq_out)
++{
++      struct snd_soc_codec *codec = codec_dai->codec;
++      u_int32_t tmp;
++
++      dbg("pcap2 set dai pll");
++
++      if (codec_dai->id == PCAP2_STEREO_DAI) {
++              /* ST_DAC */
++              dbg("stereo codec not supported yet.");
++              return -ENODEV;
++      }
++      else {
++              /* MONO_DAC */
++              tmp = pcap2_codec_read(codec, PCAP2_CODEC);
++
++              tmp &= ~0x10000;
++              switch (pll_id) {
++              case PCAP2_PLL_AP:
++                      tmp |= 0x10000;
++                      break;
++              case PCAP2_PLL_BP:
++                      break;
++              default:
++                      return -ENODEV;
++              }
++
++              tmp &= ~0x1c0;
++              switch (freq_in) {
++              case 13000000:
++                      break;
++/*            case 15M36:
++                      tmp |= 0x40;
++                      break;
++              case 16M8:
++                      tmp |= 0x80;
++                      break;
++              case 19M44:
++                      tmp |= 0xc0;
++                      break;
++*/            case 26000000:
++                      tmp |= 0x100;
++                      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;
++      u_int32_t tmp = 0;
++      
++      dbg("pcap2_set_dai_fmt");
++
++      if (codec_dai->id == PCAP2_STEREO_DAI) {
++              /* ST_DAC */
++              dbg("stereo codec not supported yet.");
++              return -ENODEV;
++      }
++      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_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 |= 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;
++
++              pcap2_codec_write(codec, PCAP2_CODEC, tmp);
++      }
++      return 0;
++}
++
++
++#if 0
++//    ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_A1_CONFIG, 1);
++//    ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_AHS_CONFIG, 1);
++
++//    ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_ST_DAC_ST_CLK_EN, 0);
++//    ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_ST_DAC_ST_DAC_EN, 0);
++//    ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_ST_DAC_SMB_ST_DAC,1);
++      
++//    dbg ("configure pcap to use ap clock");
++//    OSCC |= 0x00000008;
++//    pxa_gpio_mode(AP_13MHZ_OUTPUT_PIN | GPIO_ALT_FN_3_OUT);
++
++//    ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUD_CODEC_CLK_IN_SEL, 1);
++//    ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_ST_DAC_ST_DAC_CLK_IN_SEL, 1);
++
++
++
++//    ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_V2_EN_2, 1);
++
++
++
++
++      /* configure bitclk, pllclock, mode */
++      ezx_pcap_write(PCAP2_ST_DAC, 0);
++
++      tmp = PCAP_CDC_CLK_IN_13M0;
++      ezx_pcap_write(PCAP2_CODEC, tmp);
++
++      /* codec 0=master 1=slave */
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUD_CODEC_SMB, 0);
++
++      /* bitrate 0=8k 1=16k */
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUD_CODEC_FS_8K_16K, 0);
++
++      /* clock source */
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUD_CODEC_CLK_IN_SEL,1);
++
++      /* dai select 0=neptune 1=pxa */
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUD_CODEC_DIG_AUD_IN,1);
++
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUD_CODEC_AUDIHPF,1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUD_CODEC_AUDOHPF,1);
++
++      /* clock/frame inv */
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUD_CODEC_CLK_INV,0);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUD_CODEC_FS_INV,0);
++
++      /*(3) reset digital filter(DF_RESET=1) */
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUD_CODEC_DF_RESET,1);
++
++//    ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUD_CODEC_ADITH,0);
++
++      /* (4) enable pcap clk(CDC_CLK_EN=1),enable CODEC(CDC_EN=1)   */
++
++//    ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_CD_BYP,0);
++
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUD_CODEC_CDC_CLK_EN,1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUD_CODEC_CDC_EN,1);
++      mdelay(1);
++
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_ST_DAC_SW, 0);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_CDC_SW, 1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_PGA_IN_SW, 0);
++
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_PGA_R_EN, 1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_PGA_L_EN, 0);
++
++      /* set default output to louderspeaker while developing */
++      ezx_pcap_read(SSP_PCAP_ADJ_AUD_RX_AMPS_REGISTER, &tmp);
++      tmp &= ~SSP_PCAP_MONO_PGA_MASK;
++      tmp |= PCAP_MONO_PGA_RL;
++      ezx_pcap_write(SSP_PCAP_ADJ_AUD_RX_AMPS_REGISTER, tmp);
++//    ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_A1CTRL, 1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_A2_EN, 1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_A2_CONFIG, 1);
++
++      /* set default input to handset while developing */
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_MB_ON1, 1);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_A5_EN, 0);
++      ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_A5_MUX, 1); 
++
++
++              
++      dump_registers();
++
++
++      return 0;
++}
++
++#endif
++
++/*
++ * Starts (Triggers) audio playback or capture.
++ * Usually only needed for DMA
++ */
++static int pcap2mono_codec_trigger(struct snd_pcm_substream *substream, int cmd)
++{
++      struct snd_soc_pcm_runtime *rtd = substream->private_data;
++      struct snd_soc_device *socdev = rtd->socdev;
++      struct snd_soc_codec *codec = socdev->codec;
++      u_int32_t tmp;
++      
++      dbg("pcap2mono_codec_trigger");
++      tmp = pcap2_codec_read(codec, PCAP2_CODEC);
++
++
++      /* reset digital filter */
++      tmp |= 0x800;
++
++      /* enable codec */
++      tmp |= 0x1000;
++      
++      /* enable codec clock */
++      tmp |= 0x2000;
++
++      pcap2_codec_write(codec, PCAP2_CODEC, tmp);
++
++      dump_registers();
++      return 0;
++}
++
++/*
++ * Called by ALSA when the PCM substream is prepared, can set format, sample
++ * rate, etc.  This function is non atomic and can be called multiple times,
++ * it can refer to the runtime info.
++ */
++static int pcap2mono_codec_prepare(struct snd_pcm_substream *substream)
++{
++      dbg("pcap2mono_codec_prepare");
++      return 0;
++}
++
++/*
++ * Codec DAPM event handler
++ * This handles codec level DAPM events
++ */
++static int pcap2_codec_dapm_event(struct snd_soc_codec *codec, int event)
++{
++      switch (event) {
++      case SNDRV_CTL_POWER_D0: /* full On */
++              /* e.g. vref/mid, osc on, */
++//            ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_AUDIO_LOWPWR, 0);
++              ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_V2_EN_2, 1);
++              ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_V2_EN_2, 1);
++              break;
++      case SNDRV_CTL_POWER_D1: /* partial On */
++      case SNDRV_CTL_POWER_D2: /* partial On */
++              break;
++      case SNDRV_CTL_POWER_D3hot: /* Off, with power */
++              /* everything off except vref/vmid, */
++              dbg("power on pcap codec");
++              ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_AUDIO_LOWPWR, 0);
++//            ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_V2_EN_2, 1);
++//            ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_V2_EN_2, 1);
++              break;
++      case SNDRV_CTL_POWER_D3cold: /* Off, without power */
++              /* everything off, dac mute, inactive */
++              ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_AUDIO_LOWPWR, 1);
++              break;
++      }
++      codec->dapm_state = event;
++      return 0;
++}
++
++/*
++ * Define codec DAI.
++ */
++struct snd_soc_codec_dai pcap2_dai[] = {
++{
++      .name = "PCAP2 MONO",
++      .id = 0,
++      /* playback and capture stream info */
++      .playback = {
++              .stream_name = "mono 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 = "mono capture",
++              .channels_min = 1,
++              .channels_max = 1,
++              .rates = (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000),
++              .formats = SNDRV_PCM_FMTBIT_S16_LE,
++      },
++      /* codec operations */
++      /* alsa PCM operations */
++      .ops = {
++              .startup = pcap2mono_codec_startup,
++              .shutdown = pcap2mono_codec_shutdown,
++              .prepare = pcap2mono_codec_prepare,
++              .trigger = pcap2mono_codec_trigger,
++              .hw_params = pcap2mono_codec_hw_params,
++              .hw_free = pcap2mono_codec_hw_free,},
++      .dai_ops = {
++//            .digital_mute = pcap2_mute,
++              .set_fmt = pcap2_set_dai_fmt,
++//            .set_clkdiv = pcap2_set_dai_clkdiv,
++              .set_pll = pcap2_set_dai_pll,
++              .set_sysclk = pcap2_set_dai_sysclk,
++      },
++},
++{
++      .name = "PCAP2 STEREO",
++      .id = 1,
++      .playback = {
++              .stream_name = "stereo playback",
++              .channels_min = 2,
++              .channels_max = 2,
++              .rates = (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_44100),
++              .formats = SNDRV_PCM_FMTBIT_S16_LE,
++      },
++      .ops = {
++//            .startup = pcap2stereo_codec_startup,
++//            .shutdown = pcap2stereo_codec_shutdown,
++//            .prepare = pcap2stereo_codec_prepare,
++//            .trigger = pcap2stereo_codec_trigger,
++//            .hw_params = pcap2stereo_codec_hw_params,
++//            .hw_free = pcap2stereo_codec_hw_free,
++      },
++      .dai_ops = {
++//            .digital_mute = pcap2_mute,
++              .set_fmt = pcap2_set_dai_fmt,
++//            .set_clkdiv = pcap2_set_dai_clkdiv,
++              .set_pll = pcap2_set_dai_pll,
++              .set_sysclk = pcap2_set_dai_sysclk,
++      },
++},
++{
++      .name = "PCAP2 BP",
++      .id = 2,
++      .playback = {
++              .stream_name = "baseband playback",
++              .channels_min = 1,
++              .channels_max = 1,
++              .rates = SNDRV_PCM_RATE_8000,
++              .formats = SNDRV_PCM_FMTBIT_S16_LE,
++      },
++      .ops = {
++              .startup = pcap2mono_codec_startup,
++//            .shutdown = pcap2mono_codec_shutdown,
++              .prepare = pcap2mono_codec_prepare,
++              .trigger = pcap2mono_codec_trigger,
++              .hw_params = pcap2mono_codec_hw_params,
++              .hw_free = pcap2mono_codec_hw_free,
++      },
++      .dai_ops = {
++//            .digital_mute = pcap2_mute,
++              .set_fmt = pcap2_set_dai_fmt,
++//            .set_clkdiv = pcap2_set_dai_clkdiv,
++              .set_pll = pcap2_set_dai_pll,
++              .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 reg, 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);
++              dbg("erro registrando\n");
++      }
++
++      return ret;
++}
++
++static struct snd_soc_device *pcap2_codec_socdev;
++
++
++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.21/sound/soc/codecs/pcap2.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/sound/soc/codecs/pcap2.h      2007-08-04 02:06:01.000000000 -0300
+@@ -0,0 +1,31 @@
++/*
++ * 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
++
++/* PCAP2 register space */
++
++#define PCAP2_OUTPUT_AMP      0x0c
++#define PCAP2_ST_DAC          0x0d
++#define PCAP2_INPUT_AMP               0x1a
++#define PCAP2_CODEC           0x0b
++
++#define PCAP2_MONO_DAI                0
++#define PCAP2_STEREO_DAI      1
++#define PCAP2_BP_DAI          2
++
++#define PCAP2_PLL_BP          0
++#define PCAP2_PLL_AP          1
++
++//struct template_codec_setup_data {
++//    unsigned short i2c_address;
++//};
++
++extern struct snd_soc_codec_dai pcap2_dai[];
++extern struct snd_soc_codec_device soc_codec_dev_pcap2;
++
++#endif
+Index: linux-2.6.21/sound/soc/pxa/Kconfig
+===================================================================
+--- linux-2.6.21.orig/sound/soc/pxa/Kconfig    2007-08-02 22:58:17.000000000 -0300
++++ linux-2.6.21/sound/soc/pxa/Kconfig 2007-08-02 22:58:34.000000000 -0300
+@@ -60,4 +60,13 @@
+         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).
++
+ endmenu
+Index: linux-2.6.21/sound/soc/pxa/ezx.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/sound/soc/pxa/ezx.c   2007-08-04 22:35:25.000000000 -0300
+@@ -0,0 +1,296 @@
++/*
++ *  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 "../codecs/pcap2.h"
++#include "pxa2xx-pcm.h"
++#include "pxa2xx-ssp.h"
++
++#define GPIO_HW_ATTENUATE_A780  96
++/*
++ * 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)
++{
++      printk("ezx_machine_startup\n");
++      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 */
++      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 PLL source */
++      ret = codec_dai->dai_ops.set_pll(codec_dai, PCAP2_PLL_AP, 13000000, -1);
++      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_PLL, 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)
++{
++
++      printk("ezx_machine_hw_free\n");
++
++      return 0;
++}
++
++static int ezx_machine_prepare(struct snd_pcm_substream *substream)
++{
++      int timeout = 0;
++      while(((SSSR_P(3) & SSSR_CSS) != 0) && (timeout++ < 10000000));
++
++      if (timeout >= 10000000) 
++              printk("clock sync timeout!\n");
++      else
++              printk("clock sync passed %d\n", timeout);
++
++//    printk("SSCR0 %x SSCR1 %x SSTO %x SSPSP %x SSSR %x SSACD %x\n",
++//            SSCR0_P(3), SSCR1_P(3),
++//            SSTO_P(3), SSPSP_P(3),
++//            SSSR_P(3), SSACD_P(3));
++      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;
++      printk("bp_hw_params\n");
++      /* 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 PLL source */
++      ret = codec_dai->dai_ops.set_pll(codec_dai, PCAP2_PLL_BP, 13000000, -1);
++      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_PLL, 0, SND_SOC_CLOCK_IN);
++//    if (ret < 0)
++//            return ret;
++      
++      return 0;
++}
++
++/* machine audio map (connections to the codec pins) */
++static const char *audio_map[][3] = {
++
++      {NULL, NULL, NULL},
++};
++
++/*
++ * Initialise the machine audio subsystem.
++ */
++static int ezx_machine_init(struct snd_soc_codec *codec)
++{
++      printk("ezx machine init\n");
++      /* mark unused codec pins as NC */
++
++      /* Add template specific controls */
++
++      /* Add template specific widgets */
++
++      /* Set up template specific audio path audio_map */
++      /* 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 MONO",
++      .stream_name = "mono playback",
++      .cpu_dai = &pxa_ssp_dai[PXA2XX_DAI_SSP3],
++      .codec_dai = &pcap2_dai[PCAP2_MONO_DAI],
++      .init = ezx_machine_init,
++      .ops = &ezx_ops,
++},
++{
++      .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 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 private data */
++//static struct codec_priv_setup_data template_codec_setup = {
++//    .i2c_address = 0x1b,
++//};
++
++/* 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,
++//    .codec_data = &ezx_pcap2_setup,
++};
++
++static struct platform_device *ezx_snd_device;
++
++static int __init ezx_init(void)
++{
++      int ret;
++      printk("soc: ezx_init entered\n");
++      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);
++
++      pxa_gpio_mode(GPIO83_SFRM3_MD); /* SFRM */
++      pxa_gpio_mode(GPIO81_STXD3_MD); /* TXD  */
++      pxa_gpio_mode(52 | GPIO_ALT_FN_2_IN);   /* SCLK */
++      pxa_gpio_mode(GPIO89_SRXD3_MD); /* RXD  */
++
++
++      pxa_gpio_mode(GPIO_HW_ATTENUATE_A780 | GPIO_OUT);
++      pxa_gpio_set_value(GPIO_HW_ATTENUATE_A780, 1);
++
++
++
++
++      return ret;
++}
++
++static void __exit ezx_exit(void)
++{
++      platform_device_unregister(ezx_snd_device);
++}
++
++module_init(ezx_init);
++module_exit(ezx_exit);
++
+Index: linux-2.6.21/sound/soc/codecs/Makefile
+===================================================================
+--- linux-2.6.21.orig/sound/soc/codecs/Makefile        2007-08-02 22:57:48.000000000 -0300
++++ linux-2.6.21/sound/soc/codecs/Makefile     2007-08-02 22:58:34.000000000 -0300
+@@ -2,8 +2,10 @@
+ snd-soc-wm8731-objs := wm8731.o
+ snd-soc-wm8750-objs := wm8750.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_WM9712)  += snd-soc-wm9712.o
++obj-$(CONFIG_SND_SOC_PCAP2)   += snd-soc-pcap2.o
+Index: linux-2.6.21/sound/soc/codecs/Kconfig
+===================================================================
+--- linux-2.6.21.orig/sound/soc/codecs/Kconfig 2007-08-02 22:57:48.000000000 -0300
++++ linux-2.6.21/sound/soc/codecs/Kconfig      2007-08-02 22:58:34.000000000 -0300
+@@ -13,3 +13,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.21/sound/soc/pxa/Makefile
+===================================================================
+--- linux-2.6.21.orig/sound/soc/pxa/Makefile   2007-08-02 22:58:17.000000000 -0300
++++ linux-2.6.21/sound/soc/pxa/Makefile        2007-08-02 22:58:34.000000000 -0300
+@@ -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
+Index: linux-2.6.21/sound/soc/pxa/pxa2xx-ssp.c
+===================================================================
+--- linux-2.6.21.orig/sound/soc/pxa/pxa2xx-ssp.c       2007-08-02 22:58:17.000000000 -0300
++++ linux-2.6.21/sound/soc/pxa/pxa2xx-ssp.c    2007-08-02 22:58:34.000000000 -0300
+@@ -440,6 +440,12 @@
+       case SND_SOC_DAIFMT_NB_NF:
+               SSPSP_P(port) |= SSPSP_SFRMP | SSPSP_FSRT;
+               break;
++      case SND_SOC_DAIFMT_NB_IF:
++              SSPSP_P(port) |= SSPSP_FSRT;
++              break;
++      case SND_SOC_DAIFMT_IB_NF:
++              SSPSP_P(port) |= SSPSP_SFRMP;
++              break;
+       case SND_SOC_DAIFMT_IB_IF:
+               break;
+       default:
+Index: linux-2.6.21/sound/soc/pxa/pxa2xx-pcm.c
+===================================================================
+--- linux-2.6.21.orig/sound/soc/pxa/pxa2xx-pcm.c       2007-08-02 22:57:48.000000000 -0300
++++ linux-2.6.21/sound/soc/pxa/pxa2xx-pcm.c    2007-08-04 22:46:02.000000000 -0300
+@@ -61,8 +61,9 @@
+       dcsr = DCSR(dma_ch);
+       DCSR(dma_ch) = dcsr & ~DCSR_STOPIRQEN;
+-
++      printk("dma irq dcsr=%08x ", dcsr);
+       if (dcsr & DCSR_ENDINTR) {
++              printk("endintr\n");
+               snd_pcm_period_elapsed(substream);
+       } else {
+               printk( KERN_ERR "%s: DMA error on channel %d (DCSR=%#x)\n",
+@@ -106,7 +107,8 @@
+                       return ret;
+               prtd->dma_ch = ret;
+       }
+-
++      printk("requested dma channel %d\n", ret);
++      
+       snd_pcm_set_runtime_buffer(substream, &substream->dma_buffer);
+       runtime->dma_bytes = totsize;
+@@ -153,11 +155,13 @@
+ static int pxa2xx_pcm_prepare(struct snd_pcm_substream *substream)
+ {
+       struct pxa2xx_runtime_data *prtd = substream->runtime->private_data;
+-
++      printk("pcm_prepare channel %d\n", prtd->dma_ch);
+       DCSR(prtd->dma_ch) &= ~DCSR_RUN;
+       DCSR(prtd->dma_ch) = 0;
+       DCMD(prtd->dma_ch) = 0;
+-      *prtd->params->drcmr = prtd->dma_ch | DRCMR_MAPVLD;
++
++      if (prtd->params)
++              *prtd->params->drcmr = prtd->dma_ch | DRCMR_MAPVLD;
+       return 0;
+ }
+@@ -190,7 +194,7 @@
+       default:
+               ret = -EINVAL;
+       }
+-
++      printk("pcm_trigger ret%d, cmd%d\n", ret, cmd);
+       return ret;
+ }
index 7054ef5..c0284e3 100755 (executable)
@@ -5,8 +5,8 @@
 
 Index: linux-2.6.21/drivers/video/backlight/Kconfig
 ===================================================================
---- linux-2.6.21.orig/drivers/video/backlight/Kconfig  2007-06-02 20:03:06.000000000 -0300
-+++ linux-2.6.21/drivers/video/backlight/Kconfig       2007-06-02 20:26:49.000000000 -0300
+--- linux-2.6.21.orig/drivers/video/backlight/Kconfig  2007-08-01 19:38:48.000000000 -0300
++++ linux-2.6.21/drivers/video/backlight/Kconfig       2007-08-01 20:00:56.000000000 -0300
 @@ -63,3 +63,12 @@
        help
          If you have a Frontpath ProGear say Y to enable the
@@ -22,8 +22,8 @@ Index: linux-2.6.21/drivers/video/backlight/Kconfig
 +
 Index: linux-2.6.21/drivers/video/backlight/Makefile
 ===================================================================
---- linux-2.6.21.orig/drivers/video/backlight/Makefile 2007-06-02 20:03:06.000000000 -0300
-+++ linux-2.6.21/drivers/video/backlight/Makefile      2007-06-02 20:26:49.000000000 -0300
+--- linux-2.6.21.orig/drivers/video/backlight/Makefile 2007-08-01 19:38:48.000000000 -0300
++++ linux-2.6.21/drivers/video/backlight/Makefile      2007-08-01 20:00:56.000000000 -0300
 @@ -6,3 +6,4 @@
  obj-$(CONFIG_BACKLIGHT_HP680) += hp680_bl.o
  obj-$(CONFIG_BACKLIGHT_LOCOMO)        += locomolcd.o
@@ -32,7 +32,7 @@ Index: linux-2.6.21/drivers/video/backlight/Makefile
 Index: linux-2.6.21/drivers/video/backlight/ezx_bl.c
 ===================================================================
 --- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.21/drivers/video/backlight/ezx_bl.c      2007-06-02 20:26:49.000000000 -0300
++++ linux-2.6.21/drivers/video/backlight/ezx_bl.c      2007-08-01 20:00:56.000000000 -0300
 @@ -0,0 +1,142 @@
 +/*
 + * Backlight Driver for Motorola A780 and E680(i) GSM Phones.
@@ -178,9 +178,9 @@ Index: linux-2.6.21/drivers/video/backlight/ezx_bl.c
 +MODULE_LICENSE("GPL");
 Index: linux-2.6.21/arch/arm/mach-pxa/ezx.c
 ===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/ezx.c  2007-06-02 20:19:44.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx.c       2007-06-02 20:26:49.000000000 -0300
-@@ -67,6 +67,12 @@
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx.c  2007-08-01 19:39:02.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx.c       2007-08-01 20:00:56.000000000 -0300
+@@ -65,6 +65,12 @@
  #endif
  EXPORT_SYMBOL(ezx_backlight_power);
  
@@ -190,13 +190,13 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx.c
 +      .id             = -1,
 +};
 +
- /* SSP */
- struct platform_device ezxssp_device = {
-       .name           = "ezx-ssp",
-@@ -179,6 +185,7 @@
+ /* OHCI Controller */
+ static int ezx_ohci_init(struct device *dev)
+ {
+@@ -121,6 +127,7 @@
+ static struct platform_device *devices[] __initdata = {
        &ezxbp_device,
-       &ezxpcap_device,
-       &ezxemu_device,
 +      &ezxbacklight_device,
  };
  
index a0b3b61..b0ccf48 100755 (executable)
@@ -1,8 +1,8 @@
 Index: linux-2.6.21/arch/arm/mach-pxa/ezx.c
 ===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/ezx.c  2007-06-02 14:46:25.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx.c       2007-06-02 20:03:12.000000000 -0300
-@@ -100,9 +100,41 @@
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx.c  2007-06-28 19:44:46.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx.c       2007-06-28 19:44:52.000000000 -0300
+@@ -86,8 +86,40 @@
        .init           = ezx_ohci_init,
  };
  
@@ -39,15 +39,14 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx.c
 +
  
  static struct platform_device *devices[] __initdata = {
-       &ezxssp_device,
 +      &ezxbp_device,
  };
  
  static int __init ezx_init(void)
 Index: linux-2.6.21/arch/arm/mach-pxa/Kconfig
 ===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/Kconfig        2007-06-02 14:48:52.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/Kconfig     2007-06-02 20:03:11.000000000 -0300
+--- linux-2.6.21.orig/arch/arm/mach-pxa/Kconfig        2007-06-28 19:44:29.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/Kconfig     2007-06-28 19:44:52.000000000 -0300
 @@ -102,6 +102,9 @@
  
  endchoice
@@ -61,7 +60,7 @@ Index: linux-2.6.21/arch/arm/mach-pxa/Kconfig
 Index: linux-2.6.21/arch/arm/mach-pxa/ezx-bp.c
 ===================================================================
 --- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-bp.c    2007-06-02 18:26:22.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-bp.c    2007-06-28 19:44:52.000000000 -0300
 @@ -0,0 +1,249 @@
 +/*
 + *  BP handshake code for Motorola EZX phones
@@ -314,8 +313,8 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-bp.c
 +
 Index: linux-2.6.21/arch/arm/mach-pxa/Makefile
 ===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/Makefile       2007-06-02 14:49:50.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/Makefile    2007-06-02 20:03:11.000000000 -0300
+--- linux-2.6.21.orig/arch/arm/mach-pxa/Makefile       2007-06-28 19:44:29.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/Makefile    2007-06-28 19:44:52.000000000 -0300
 @@ -24,6 +24,7 @@
  obj-$(CONFIG_PXA_EZX_E2)      += ezx-e2.o
  obj-$(CONFIG_PXA_EZX_A1200)   += ezx-a1200.o
index c0e9435..653e814 100755 (executable)
@@ -1,7 +1,7 @@
 Index: linux-2.6.21/arch/arm/boot/compressed/head-xscale.S
 ===================================================================
---- linux-2.6.21.orig/arch/arm/boot/compressed/head-xscale.S   2007-06-02 14:46:22.000000000 -0300
-+++ linux-2.6.21/arch/arm/boot/compressed/head-xscale.S        2007-06-02 14:46:25.000000000 -0300
+--- linux-2.6.21.orig/arch/arm/boot/compressed/head-xscale.S   2007-06-28 16:51:44.000000000 -0300
++++ linux-2.6.21/arch/arm/boot/compressed/head-xscale.S        2007-06-28 16:51:50.000000000 -0300
 @@ -53,3 +53,6 @@
                str     r1, [r0, #0x18]
  #endif
@@ -11,8 +11,8 @@ Index: linux-2.6.21/arch/arm/boot/compressed/head-xscale.S
 +#endif
 Index: linux-2.6.21/arch/arm/mach-pxa/Kconfig
 ===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/Kconfig        2007-06-02 14:46:22.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/Kconfig     2007-06-02 14:48:52.000000000 -0300
+--- linux-2.6.21.orig/arch/arm/mach-pxa/Kconfig        2007-06-28 16:51:44.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/Kconfig     2007-06-28 20:54:54.000000000 -0300
 @@ -37,6 +37,10 @@
        bool "Keith und Koep Trizeps4 DIMM-Module"
        select PXA27x
@@ -68,13 +68,13 @@ Index: linux-2.6.21/arch/arm/mach-pxa/Kconfig
  endif
 Index: linux-2.6.21/arch/arm/mach-pxa/Makefile
 ===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/Makefile       2007-06-02 14:46:22.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/Makefile    2007-06-02 14:49:50.000000000 -0300
+--- linux-2.6.21.orig/arch/arm/mach-pxa/Makefile       2007-06-28 16:51:44.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/Makefile    2007-06-28 20:54:54.000000000 -0300
 @@ -18,6 +18,12 @@
  obj-$(CONFIG_MACH_AKITA)      += akita-ioexp.o
  obj-$(CONFIG_MACH_POODLE)     += poodle.o corgi_ssp.o
  obj-$(CONFIG_MACH_TOSA)         += tosa.o
-+obj-$(CONFIG_PXA_EZX)         += ezx.o ezx_ssp.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
@@ -86,8 +86,8 @@ Index: linux-2.6.21/arch/arm/mach-pxa/Makefile
 Index: linux-2.6.21/arch/arm/mach-pxa/ezx.c
 ===================================================================
 --- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx.c       2007-06-02 14:46:25.000000000 -0300
-@@ -0,0 +1,135 @@
++++ linux-2.6.21/arch/arm/mach-pxa/ezx.c       2007-06-28 20:54:54.000000000 -0300
+@@ -0,0 +1,118 @@
 +/*
 + *  ezx.c - Common code for EZX platform.
 + *
@@ -108,11 +108,9 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx.c
 +#include <asm/arch/pxafb.h>
 +#include <asm/arch/pxa-regs.h>
 +#include <asm/arch/ohci.h>
++#include <asm/arch/ezx.h>
 +
 +#include "generic.h"
-+#include "ezx.h"
-+
-+extern int ezx_ssp_set_machinfo(struct ezxssp_machinfo *);
 +
 +/* EZX PXA Framebuffer */
 +void ezx_lcd_power(int on, struct fb_var_screeninfo *var)
@@ -156,18 +154,6 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx.c
 +#endif
 +EXPORT_SYMBOL(ezx_backlight_power);
 +
-+/* SSP */
-+struct platform_device ezxssp_device = {
-+      .name           = "ezx-ssp",
-+      .id             = -1,
-+};
-+
-+struct ezxssp_machinfo ezx_ssp_machinfo = {
-+      .port           = 1,
-+      .cs_pcap        = GPIO_SPI_CE,
-+      .clk_pcap       = 1,
-+};
-+
 +/* OHCI Controller */
 +static int ezx_ohci_init(struct device *dev)
 +{
@@ -192,15 +178,12 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx.c
 +
 +
 +static struct platform_device *devices[] __initdata = {
-+      &ezxssp_device,
 +};
 +
 +static int __init ezx_init(void)
 +{
 +      CKEN = CKEN9_OSTIMER | CKEN22_MEMC;
 +
-+      ezx_ssp_set_machinfo(&ezx_ssp_machinfo);
-+
 +      pxa_gpio_mode(GPIO_ICL_FFRXD_MD);
 +      pxa_gpio_mode(GPIO_ICL_FFTXD_MD);
 +      pxa_gpio_mode(GPIO_ICL_FFCTS_MD);
@@ -226,7 +209,7 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx.c
 Index: linux-2.6.21/include/asm-arm/arch-pxa/ezx.h
 ===================================================================
 --- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.21/include/asm-arm/arch-pxa/ezx.h        2007-06-02 14:46:25.000000000 -0300
++++ linux-2.6.21/include/asm-arm/arch-pxa/ezx.h        2007-06-28 16:51:50.000000000 -0300
 @@ -0,0 +1,225 @@
 +/*
 + *  linux/include/asm-arm/arch-pxa/ezx.h
@@ -455,8 +438,8 @@ Index: linux-2.6.21/include/asm-arm/arch-pxa/ezx.h
 +
 Index: linux-2.6.21/include/asm-arm/arch-pxa/pxa-regs.h
 ===================================================================
---- linux-2.6.21.orig/include/asm-arm/arch-pxa/pxa-regs.h      2007-06-02 14:46:22.000000000 -0300
-+++ linux-2.6.21/include/asm-arm/arch-pxa/pxa-regs.h   2007-06-02 14:46:25.000000000 -0300
+--- linux-2.6.21.orig/include/asm-arm/arch-pxa/pxa-regs.h      2007-06-28 16:51:44.000000000 -0300
++++ linux-2.6.21/include/asm-arm/arch-pxa/pxa-regs.h   2007-06-28 18:18:49.000000000 -0300
 @@ -849,6 +849,8 @@
  #define UP2OCR_HXOE           (1 << 17)       /* Host Port 2 Transceiver Output Enable */
  #define UP2OCR_SEOS           (1 << 24)       /* Single-Ended Output Select */
@@ -572,8 +555,8 @@ Index: linux-2.6.21/include/asm-arm/arch-pxa/pxa-regs.h
  #define PGSR2         __REG(0x40F00028)  /* Power Manager GPIO Sleep State Register for GP[84-64] */
 Index: linux-2.6.21/arch/arm/boot/compressed/head.S
 ===================================================================
---- linux-2.6.21.orig/arch/arm/boot/compressed/head.S  2007-06-02 14:46:22.000000000 -0300
-+++ linux-2.6.21/arch/arm/boot/compressed/head.S       2007-06-02 14:46:25.000000000 -0300
+--- linux-2.6.21.orig/arch/arm/boot/compressed/head.S  2007-06-28 16:51:44.000000000 -0300
++++ linux-2.6.21/arch/arm/boot/compressed/head.S       2007-06-28 16:51:50.000000000 -0300
 @@ -117,6 +117,9 @@
                mov     r0, r0
                .endr
@@ -586,8 +569,8 @@ Index: linux-2.6.21/arch/arm/boot/compressed/head.S
                .word   start                   @ absolute load/run zImage address
 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-06-02 14:46:22.000000000 -0300
-+++ linux-2.6.21/include/asm-arm/arch-pxa/uncompress.h 2007-06-02 14:46:25.000000000 -0300
+--- linux-2.6.21.orig/include/asm-arm/arch-pxa/uncompress.h    2007-06-28 16:51:44.000000000 -0300
++++ linux-2.6.21/include/asm-arm/arch-pxa/uncompress.h 2007-06-28 16:51:50.000000000 -0300
 @@ -14,14 +14,14 @@
  #define STUART                ((volatile unsigned long *)0x40700000)
  #define HWUART                ((volatile unsigned long *)0x41600000)
@@ -606,155 +589,10 @@ Index: linux-2.6.21/include/asm-arm/arch-pxa/uncompress.h
  }
  
  /*
-Index: linux-2.6.21/arch/arm/mach-pxa/ezx_ssp.c
-===================================================================
---- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx_ssp.c   2007-06-02 14:46:25.000000000 -0300
-@@ -0,0 +1,126 @@
-+/*
-+ *  SSP control code 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/module.h>
-+#include <linux/init.h>
-+#include <linux/kernel.h>
-+#include <linux/sched.h>
-+#include <linux/slab.h>
-+#include <linux/delay.h>
-+#include <linux/platform_device.h>
-+#include <asm/hardware.h>
-+#include <asm/mach-types.h>
-+
-+#include <asm/arch/ssp.h>
-+#include <asm/arch/pxa-regs.h>
-+
-+#include "ezx.h"
-+
-+static DEFINE_SPINLOCK(ezx_ssp_lock);
-+static struct ssp_dev ezx_ssp_dev;
-+static struct ssp_state ezx_ssp_state;
-+static struct ezxssp_machinfo *ssp_machinfo;
-+
-+/* PCAP */
-+unsigned long ezx_ssp_pcap_putget(ulong data)
-+{
-+      unsigned long flag;
-+      u32 ret = 0;
-+
-+      spin_lock_irqsave(&ezx_ssp_lock, flag);
-+      if (ssp_machinfo->cs_pcap >= 0)
-+              GPCR(ssp_machinfo->cs_pcap) = GPIO_bit(ssp_machinfo->cs_pcap);
-+
-+      ssp_write_word(&ezx_ssp_dev,data);
-+      ssp_read_word(&ezx_ssp_dev, &ret);
-+
-+      if (ssp_machinfo->cs_pcap >= 0)
-+              GPSR(ssp_machinfo->cs_pcap) = GPIO_bit(ssp_machinfo->cs_pcap);
-+      spin_unlock_irqrestore(&ezx_ssp_lock, flag);
-+
-+      return ret;
-+}
-+EXPORT_SYMBOL(ezx_ssp_pcap_putget);
-+
-+void __init ezx_ssp_set_machinfo(struct ezxssp_machinfo *machinfo)
-+{
-+      ssp_machinfo = machinfo;
-+}
-+
-+static int __init ezx_ssp_probe(struct platform_device *dev)
-+{
-+      int ret;
-+      /* PCAP init */
-+      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);
-+
-+      /* Chip Select - Disable All */
-+      if (ssp_machinfo->cs_pcap >= 0)
-+              pxa_gpio_mode(ssp_machinfo->cs_pcap | GPIO_OUT | GPIO_DFLT_HIGH);
-+
-+      ret = ssp_init(&ezx_ssp_dev, ssp_machinfo->port, 0);
-+
-+      if (ret)
-+              printk(KERN_ERR "Unable to register SSP handler!\n");
-+      else {
-+              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(ssp_machinfo->clk_pcap));
-+              ssp_enable(&ezx_ssp_dev);
-+      }
-+
-+      return ret;
-+}
-+
-+static int ezx_ssp_remove(struct platform_device *dev)
-+{
-+      ssp_exit(&ezx_ssp_dev);
-+      return 0;
-+}
-+
-+static int ezx_ssp_suspend(struct platform_device *dev, pm_message_t state)
-+{
-+      ssp_flush(&ezx_ssp_dev);
-+      ssp_save_state(&ezx_ssp_dev,&ezx_ssp_state);
-+
-+      return 0;
-+}
-+
-+static int ezx_ssp_resume(struct platform_device *dev)
-+{
-+      if (ssp_machinfo->cs_pcap >= 0)
-+              GPSR(ssp_machinfo->cs_pcap) = GPIO_bit(ssp_machinfo->cs_pcap);
-+      ssp_restore_state(&ezx_ssp_dev,&ezx_ssp_state);
-+      ssp_enable(&ezx_ssp_dev);
-+
-+      return 0;
-+}
-+
-+static struct platform_driver ezxssp_driver = {
-+      .probe          = ezx_ssp_probe,
-+      .remove         = ezx_ssp_remove,
-+      .suspend        = ezx_ssp_suspend,
-+      .resume         = ezx_ssp_resume,
-+      .driver         = {
-+              .name   = "ezx-ssp",
-+      },
-+};
-+
-+int __init ezx_ssp_init(void)
-+{
-+      return platform_driver_register(&ezxssp_driver);
-+}
-+
-+arch_initcall(ezx_ssp_init);
-Index: linux-2.6.21/arch/arm/mach-pxa/ezx.h
-===================================================================
---- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx.h       2007-06-02 14:46:25.000000000 -0300
-@@ -0,0 +1,9 @@
-+#include <asm/arch/ezx.h>
-+
-+/* SSP */
-+struct ezxssp_machinfo {
-+      int port;
-+      int cs_pcap;
-+      int clk_pcap;
-+};
-+
 Index: linux-2.6.21/arch/arm/mm/init.c
 ===================================================================
---- linux-2.6.21.orig/arch/arm/mm/init.c       2007-06-02 14:46:22.000000000 -0300
-+++ linux-2.6.21/arch/arm/mm/init.c    2007-06-02 14:46:25.000000000 -0300
+--- linux-2.6.21.orig/arch/arm/mm/init.c       2007-06-28 16:51:44.000000000 -0300
++++ linux-2.6.21/arch/arm/mm/init.c    2007-06-28 16:51:50.000000000 -0300
 @@ -241,6 +241,10 @@
         */
        reserve_bootmem_node(pgdat, boot_pfn << PAGE_SHIFT,
@@ -769,7 +607,7 @@ Index: linux-2.6.21/arch/arm/mm/init.c
 Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c
 ===================================================================
 --- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c  2007-06-02 14:46:25.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c  2007-06-28 20:53:01.000000000 -0300
 @@ -0,0 +1,88 @@
 +/*
 + *  ezx-a780.c - Code specific to A780 GSM Phone.
@@ -792,9 +630,9 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c
 +#include <asm/mach/arch.h>
 +#include <asm/arch/pxa-regs.h>
 +#include <asm/arch/pxafb.h>
++#include <asm/arch/ezx.h>
 +
 +#include "generic.h"
-+#include "ezx.h"
 +
 +extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
 +extern void ezx_backlight_power(int);
@@ -862,7 +700,7 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c
 Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e2.c
 ===================================================================
 --- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-e2.c    2007-06-02 14:46:25.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-e2.c    2007-06-28 20:54:24.000000000 -0300
 @@ -0,0 +1,70 @@
 +/*
 + *  ezx-e2.c - Code specific to E2 GSM Phone.
@@ -884,9 +722,9 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e2.c
 +#include <asm/mach/arch.h>
 +#include <asm/arch/pxa-regs.h>
 +#include <asm/arch/pxafb.h>
++#include <asm/arch/ezx.h>
 +
 +#include "generic.h"
-+#include "ezx.h"
 +
 +extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
 +extern void ezx_backlight_power(int);
@@ -937,7 +775,7 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e2.c
 Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c
 ===================================================================
 --- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c  2007-06-02 14:46:25.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c  2007-06-28 20:53:29.000000000 -0300
 @@ -0,0 +1,87 @@
 +/*
 + *  ezx-e680.c - Code specific to E680 GSM Phone.
@@ -959,9 +797,9 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c
 +#include <asm/mach/arch.h>
 +#include <asm/arch/pxa-regs.h>
 +#include <asm/arch/pxafb.h>
++#include <asm/arch/ezx.h>
 +
 +#include "generic.h"
-+#include "ezx.h"
 +
 +extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
 +extern void ezx_backlight_power(int);
@@ -1029,7 +867,7 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c
 Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c
 ===================================================================
 --- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c 2007-06-02 14:46:25.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c 2007-06-28 20:53:48.000000000 -0300
 @@ -0,0 +1,70 @@
 +/*
 + *  ezx-a1200.c - Code specific to A1200 GSM Phone.
@@ -1051,9 +889,9 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c
 +#include <asm/mach/arch.h>
 +#include <asm/arch/pxa-regs.h>
 +#include <asm/arch/pxafb.h>
++#include <asm/arch/ezx.h>
 +
 +#include "generic.h"
-+#include "ezx.h"
 +
 +extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
 +extern void ezx_backlight_power(int);
@@ -1104,7 +942,7 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c
 Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e6.c
 ===================================================================
 --- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-e6.c    2007-06-02 14:48:08.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-e6.c    2007-06-28 20:54:07.000000000 -0300
 @@ -0,0 +1,70 @@
 +/*
 + *  ezx-e6.c - Code specific to E6 GSM Phone.
@@ -1126,9 +964,9 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e6.c
 +#include <asm/mach/arch.h>
 +#include <asm/arch/pxa-regs.h>
 +#include <asm/arch/pxafb.h>
++#include <asm/arch/ezx.h>
 +
 +#include "generic.h"
-+#include "ezx.h"
 +
 +extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
 +extern void ezx_backlight_power(int);
index 94581d4..a86be24 100755 (executable)
@@ -1,7 +1,7 @@
 Index: linux-2.6.21/arch/arm/mach-pxa/ezx-emu.c
 ===================================================================
 --- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-emu.c   2007-06-02 20:32:34.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-emu.c   2007-08-01 19:45:27.000000000 -0300
 @@ -0,0 +1,215 @@
 +/*
 + *  EMU Driver for Motorola EZX phones
@@ -220,19 +220,11 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-emu.c
 +MODULE_LICENSE("GPL");
 Index: linux-2.6.21/arch/arm/mach-pxa/Kconfig
 ===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/Kconfig        2007-06-02 20:32:32.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/Kconfig     2007-06-02 20:32:34.000000000 -0300
-@@ -73,6 +73,7 @@
- endchoice
-+
- endif
- if PXA_EZX
-@@ -117,6 +118,28 @@
- config EZX_MCI_TF
-       bool
+--- linux-2.6.21.orig/arch/arm/mach-pxa/Kconfig        2007-08-01 19:39:02.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/Kconfig     2007-08-01 19:45:27.000000000 -0300
+@@ -108,6 +108,28 @@
+ config EZX_PCAP
+       bool "PCAP Support"
  
 +config EZX_EMU
 +      bool "Motorola Enchanced Mini Usb"
@@ -259,50 +251,10 @@ Index: linux-2.6.21/arch/arm/mach-pxa/Kconfig
  endif
  
  endmenu
-Index: linux-2.6.21/arch/arm/mach-pxa/ezx.c
-===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/ezx.c  2007-06-02 20:32:28.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx.c       2007-06-02 20:32:34.000000000 -0300
-@@ -150,11 +150,35 @@
-       .resource       = ezxpcap_resources,
- };
-+/* EMU */
-+static struct resource ezxemu_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 ezxemu_device = {
-+      .name           = "ezx-emu",
-+      .id             = -1,
-+      .dev            = {
-+              .parent         = &ezxpcap_device.dev,
-+      },
-+      .num_resources  = ARRAY_SIZE(ezxemu_resources),
-+      .resource       = ezxemu_resources,
-+};
- static struct platform_device *devices[] __initdata = {
-       &ezxssp_device,
-       &ezxbp_device,
-       &ezxpcap_device,
-+      &ezxemu_device,
- };
- /* PM */
 Index: linux-2.6.21/arch/arm/mach-pxa/Makefile
 ===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/Makefile       2007-06-02 20:32:28.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/Makefile    2007-06-02 20:32:34.000000000 -0300
+--- linux-2.6.21.orig/arch/arm/mach-pxa/Makefile       2007-08-01 19:39:02.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/Makefile    2007-08-01 19:45:27.000000000 -0300
 @@ -26,6 +26,7 @@
  obj-$(CONFIG_PXA_EZX_E6)      += ezx-e6.o
  obj-$(CONFIG_EZX_BP)          += ezx-bp.o
index 6af6317..91d33d6 100755 (executable)
@@ -1,8 +1,8 @@
 Index: linux-2.6.21/arch/arm/mach-pxa/ezx-pcap.c
 ===================================================================
 --- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-pcap.c  2007-06-07 21:39:37.000000000 -0300
-@@ -0,0 +1,472 @@
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-pcap.c  2007-08-01 20:14:17.000000000 -0300
+@@ -0,0 +1,498 @@
 +/* Driver for Motorola PCAP2 as present in EZX phones
 + *
 + * This is both a SPI device driver for PCAP itself, as well as
@@ -24,21 +24,51 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-pcap.c
 +#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>
 +
-+#include "ezx.h"
-+
 +#if 0
 +#define DEBUGP(x, args...) printk(x, ## args)
 +#else
 +#define DEBUGP(x, args...)
 +#endif
 +
-+extern unsigned long ezx_ssp_pcap_putget(ulong);
++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 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)
 +{
@@ -160,72 +190,20 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-pcap.c
 +}
 +EXPORT_SYMBOL_GPL(ezx_pcap_vibrator_level);
 +
-+static int __init pcap_init(void)
-+{
-+        /* initialize registers */
-+#warning FIXME: pcap_init still chip level
-+      /* implement a per board pcap init reg array? */
-+
-+      ezx_pcap_write(SSP_PCAP_ADJ_MSR_REGISTER, PCAP_MASK_ALL_INTERRUPT);
-+      ezx_pcap_write(SSP_PCAP_ADJ_ISR_REGISTER, PCAP_CLEAR_INTERRUPT_REGISTER);
-+
-+        ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_A1CTRL, 1);
-+//        ezx_pcap_vibrator_level(PCAP_VIBRATOR_VOLTAGE_LEVEL3);
-+
-+        /* set SW1 sleep to keep SW1 1.3v in sync mode */
-+        ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW1_MODE10, 0);
-+        ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW1_MODE11, 0);
-+        /*  SW1 active in sync mode */
-+        ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW1_MODE00, 1);
-+        ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW1_MODE01, 0);
-+        /*  at SW1 -core voltage to 1.30V   */
-+        ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW10_DVS, 1);
-+        ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW11_DVS, 1);
-+        ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW12_DVS, 1);
-+        ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW13_DVS, 0);
-+
-+        /* when STANDY2 PIN ACTIVE (high) set V3-- sram V8 -- pll off  */
-+        ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V3_STBY, 1);
-+        ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V3_LOWPWR, 0);
-+
-+        ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V8_STBY, 1);
-+        ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V8_LOWPWR, 0);
-+
-+        /* when STANDY2 PIN ACTIVE (high) set V4-- lcd only for e680 V6 ---
-+       * camera for e680 */
-+        ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V4_STBY, 1);
-+        ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V4_LOWPWR, 1);
-+
-+        ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V6_STBY, 1);
-+        ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V6_LOWPWR, 0);
-+
-+        /* set Vc to low power mode when AP sleep */
-+        //SSP_PCAP_bit_set( SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_VC_STBY);
-+
-+        /* set VAUX2 to voltage 2.775V and low power mode when AP sleep */
-+        ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX2_1, 1);
-+        ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX2_0, 0);
-+        ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_VAUX2_STBY, 1);
-+        ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_VAUX2_LOWPWR, 1);
-+        ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX2_EN, 1);
-+
-+//    PGSR(GPIO34_TXENB) |= GPIO_bit(GPIO34_TXENB);
-+
-+      return 0;
-+}
 +/* MMC/SD specific functions */
 +
 +void ezx_pcap_mmcsd_voltage(u_int32_t bits)
 +{
 +        unsigned int tmp;
 +        ezx_pcap_read(SSP_PCAP_ADJ_AUX_VREG_REGISTER, &tmp);
-+#if defined(CONFIG_EZX_MCI_SD)
-+        tmp &= 0xffffff9f;      /* zero all vaux2 bits */
-+        tmp |= (bits & 0x3) << 5;
-+#elif defined(CONFIG_EZX_MCI_TF)
-+        tmp &= 0xfffff0ff;      /* zero all vaux3 bits */
-+        tmp |= (bits & 0xf) << 8;
-+#endif
++      if (pcap_data->flags & PCAP_MCI_SD) {
++              tmp &= 0xffffff9f;      /* zero all vaux2 bits */
++              tmp |= (bits & 0x3) << 5;
++      }
++      else if (pcap_data->flags & PCAP_MCI_TF) {
++              tmp &= 0xfffff0ff;      /* zero all vaux3 bits */
++              tmp |= (bits & 0xf) << 8;
++      }
 +        ezx_pcap_write(SSP_PCAP_ADJ_AUX_VREG_REGISTER, tmp);
 +}
 +EXPORT_SYMBOL(ezx_pcap_mmcsd_voltage);
@@ -234,11 +212,12 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-pcap.c
 +{
 +      if (on > 0) on = 1;
 +      else on = 0;
-+#if defined(CONFIG_EZX_MCI_SD)
-+      return ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX2_EN, on);
-+#elif defined(CONFIG_EZX_MCI_TF)
-+      return ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX3_EN, on);
-+#endif
++      if (pcap_data->flags & PCAP_MCI_SD)
++              return ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX2_EN, on);
++      else if (pcap_data->flags & PCAP_MCI_TF)
++              return ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX3_EN, on);
++      else
++              return -ENODEV;
 +}
 +EXPORT_SYMBOL_GPL(ezx_pcap_mmcsd_power);
 +
@@ -397,18 +376,54 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-pcap.c
 +              set_irq_flags(irq, 0);
 +      }
 +
++      ssp_exit(&ezx_ssp_dev);
++
 +      return 0;
 +}
 +
 +static int __init ezx_pcap_probe(struct platform_device *pdev)
 +{
-+      unsigned int irq;
++      unsigned int ret, irq;
 +      DEBUGP("ezx_pcap_probe entered\n");
 +
-+      pcap_init();
++      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);
++      }
++
++      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(SSP_PCAP_ADJ_MSR_REGISTER, PCAP_MASK_ALL_INTERRUPT);
++      ezx_pcap_write(SSP_PCAP_ADJ_ISR_REGISTER, PCAP_CLEAR_INTERRUPT_REGISTER);
++
++      if (pcap_data->init)
++              pcap_data->init();
 +
-+      set_irq_type(IRQ_GPIO1, IRQT_RISING);
 +        /* set up interrupt demultiplexing code for PCAP2 irqs */
++      set_irq_type(IRQ_GPIO1, IRQT_RISING);
 +        for (irq = EZX_IRQ(0); irq <= EZX_IRQ(6); irq++) {
 +                set_irq_chip(irq, &pcap_chip);
 +                set_irq_handler(irq, handle_edge_irq);
@@ -417,19 +432,30 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-pcap.c
 +        set_irq_chained_handler(IRQ_GPIO1, pcap_irq_demux_handler);
 +
 +      printk("ezx-pcap: ssp driver registered\n");
-+
-+        return 0;
++        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);
 +        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)
++                      GPCR(pcap_data->cs) = GPIO_bit(pcap_data->cs);
++              else
++                      GPSR(pcap_data->cs) = GPIO_bit(pcap_data->cs);
++      }
++      ssp_restore_state(&ezx_ssp_dev,&ezx_ssp_state);
++      ssp_enable(&ezx_ssp_dev);
++
 +      /* ack all irqs */
 +      ezx_pcap_write(SSP_PCAP_ADJ_ISR_REGISTER, PCAP_CLEAR_INTERRUPT_REGISTER);
 +        return 0;
@@ -478,8 +504,21 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx-pcap.c
 Index: linux-2.6.21/include/asm-arm/arch-pxa/ezx-pcap.h
 ===================================================================
 --- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.21/include/asm-arm/arch-pxa/ezx-pcap.h   2007-06-03 11:14:40.000000000 -0300
-@@ -0,0 +1,665 @@
++++ linux-2.6.21/include/asm-arm/arch-pxa/ezx-pcap.h   2007-06-29 01:07:18.000000000 -0300
+@@ -0,0 +1,678 @@
++struct pcap_platform_data {
++      int port;
++      int cs;
++      int clk;
++      int flags;
++      int (*init)(void);
++};
++
++#define PCAP_CS_AH    0x1
++#define PCAP_MCI_SD   0x2
++#define PCAP_MCI_TF   0x4
++
++
 +/* (c) Copyright Motorola Beijing 2002 all rights reserved.
 +
 +      Project Name  : EZX
@@ -1147,8 +1186,8 @@ Index: linux-2.6.21/include/asm-arm/arch-pxa/ezx-pcap.h
 +#endif
 Index: linux-2.6.21/include/asm-arm/arch-pxa/irqs.h
 ===================================================================
---- linux-2.6.21.orig/include/asm-arm/arch-pxa/irqs.h  2007-06-03 02:17:12.000000000 -0300
-+++ linux-2.6.21/include/asm-arm/arch-pxa/irqs.h       2007-06-03 11:14:40.000000000 -0300
+--- linux-2.6.21.orig/include/asm-arm/arch-pxa/irqs.h  2007-06-29 01:06:37.000000000 -0300
++++ linux-2.6.21/include/asm-arm/arch-pxa/irqs.h       2007-06-29 01:07:18.000000000 -0300
 @@ -176,7 +176,8 @@
  #define NR_IRQS                       (IRQ_LOCOMO_SPI_TEND + 1)
  #elif defined(CONFIG_ARCH_LUBBOCK) || \
@@ -1173,65 +1212,24 @@ Index: linux-2.6.21/include/asm-arm/arch-pxa/irqs.h
 +#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 */
-Index: linux-2.6.21/arch/arm/mach-pxa/ezx.c
-===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/ezx.c  2007-06-03 11:14:40.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx.c       2007-06-09 14:57:44.000000000 -0300
-@@ -131,11 +131,30 @@
-       .resource       = ezxbp_resources,
- };
-+/* PCAP */
-+static struct resource ezxpcap_resources[] = {
-+      [0] = {
-+              .start          = IRQ_GPIO1,
-+              .end            = IRQ_GPIO1,
-+              .flags          = IORESOURCE_IRQ,
-+      },
-+};
-+
-+struct platform_device ezxpcap_device = {
-+      .name           = "ezx-pcap",
-+      .id             = -1,
-+      .dev            = {
-+              .parent         = &ezxssp_device.dev,
-+      },
-+      .num_resources  = ARRAY_SIZE(ezxpcap_resources),
-+      .resource       = ezxpcap_resources,
-+};
- static struct platform_device *devices[] __initdata = {
-       &ezxssp_device,
-       &ezxbp_device,
-+      &ezxpcap_device,
- };
- /* PM */
 Index: linux-2.6.21/arch/arm/mach-pxa/Kconfig
 ===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/Kconfig        2007-06-03 11:14:40.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/Kconfig     2007-06-09 14:57:46.000000000 -0300
-@@ -105,6 +105,15 @@
+--- linux-2.6.21.orig/arch/arm/mach-pxa/Kconfig        2007-06-29 01:07:18.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/Kconfig     2007-08-01 20:14:28.000000000 -0300
+@@ -105,6 +105,9 @@
  config EZX_BP
        bool "BP Control code for EZX Platform"
  
 +config EZX_PCAP
 +      bool "PCAP Support"
-+
-+config EZX_MCI_SD
-+      bool
-+
-+config EZX_MCI_TF
-+      bool
 +
  endif
  
  endmenu
 Index: linux-2.6.21/arch/arm/mach-pxa/Makefile
 ===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/Makefile       2007-06-03 11:14:40.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/Makefile    2007-06-09 14:57:44.000000000 -0300
+--- linux-2.6.21.orig/arch/arm/mach-pxa/Makefile       2007-06-29 01:07:18.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/Makefile    2007-08-01 20:14:28.000000000 -0300
 @@ -25,6 +25,7 @@
  obj-$(CONFIG_PXA_EZX_A1200)   += ezx-a1200.o
  obj-$(CONFIG_PXA_EZX_E6)      += ezx-e6.o
index 85b6f5c..ff3413f 100755 (executable)
@@ -1,7 +1,7 @@
 Index: linux-2.6.21/arch/arm/mach-pxa/pxa27x.c
 ===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/pxa27x.c       2007-05-08 16:29:23.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/pxa27x.c    2007-05-08 16:29:36.000000000 -0300
+--- linux-2.6.21.orig/arch/arm/mach-pxa/pxa27x.c       2007-06-28 19:44:28.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/pxa27x.c    2007-06-28 19:44:58.000000000 -0300
 @@ -22,6 +22,10 @@
  #include <asm/arch/pxa-regs.h>
  #include <asm/arch/ohci.h>
@@ -29,8 +29,8 @@ Index: linux-2.6.21/arch/arm/mach-pxa/pxa27x.c
        }
 Index: linux-2.6.21/arch/arm/mach-pxa/pm.c
 ===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/pm.c   2007-05-08 16:29:23.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/pm.c        2007-05-08 16:29:36.000000000 -0300
+--- linux-2.6.21.orig/arch/arm/mach-pxa/pm.c   2007-06-28 19:44:28.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/pm.c        2007-06-28 19:44:58.000000000 -0300
 @@ -24,6 +24,10 @@
  #include <asm/arch/lubbock.h>
  #include <asm/mach/time.h>
@@ -58,17 +58,17 @@ Index: linux-2.6.21/arch/arm/mach-pxa/pm.c
        RESTORE(GPDR0); RESTORE(GPDR1); RESTORE(GPDR2);
 Index: linux-2.6.21/arch/arm/mach-pxa/ezx.c
 ===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/ezx.c  2007-05-08 16:29:36.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx.c       2007-05-08 16:32:56.000000000 -0300
-@@ -18,6 +18,7 @@
- #include <asm/arch/pxafb.h>
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx.c  2007-06-28 19:44:52.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx.c       2007-06-28 19:44:58.000000000 -0300
+@@ -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"
- #include "ezx.h"
-@@ -137,8 +138,69 @@
+@@ -122,8 +123,69 @@
        &ezxbp_device,
  };
  
@@ -137,4 +137,4 @@ Index: linux-2.6.21/arch/arm/mach-pxa/ezx.c
 +
        CKEN = CKEN9_OSTIMER | CKEN22_MEMC;
  
-       ezx_ssp_set_machinfo(&ezx_ssp_machinfo);
+       pxa_gpio_mode(GPIO_ICL_FFRXD_MD);
diff --git a/packages/linux/linux-ezx-2.6.21/patches/index.html b/packages/linux/linux-ezx-2.6.21/patches/index.html
new file mode 100644 (file)
index 0000000..4d57380
--- /dev/null
@@ -0,0 +1,60 @@
+<html><head><title>Revision 2047: /trunk/src/kernel-2.6/patches</title></head>
+<body>
+ <h2>Revision 2047: /trunk/src/kernel-2.6/patches</h2>
+ <ul>
+  <li><a href="../">..</a></li>
+  <li><a href="Makefile.OpenEZX">Makefile.OpenEZX</a></li>
+  <li><a href="a1200-mci.patch">a1200-mci.patch</a></li>
+  <li><a href="a1200-pcap.patch">a1200-pcap.patch</a></li>
+  <li><a href="a1200-ts.patch">a1200-ts.patch</a></li>
+  <li><a href="a780-emu.patch">a780-emu.patch</a></li>
+  <li><a href="a780-flip.patch">a780-flip.patch</a></li>
+  <li><a href="a780-kbd.patch">a780-kbd.patch</a></li>
+  <li><a href="a780-leds.patch">a780-leds.patch</a></li>
+  <li><a href="a780-mci.patch">a780-mci.patch</a></li>
+  <li><a href="a780-pcap.patch">a780-pcap.patch</a></li>
+  <li><a href="a780-ts.patch">a780-ts.patch</a></li>
+  <li><a href="a780-vibrator.patch">a780-vibrator.patch</a></li>
+  <li><a href="asoc-pxa-ssp.patch">asoc-pxa-ssp.patch</a></li>
+  <li><a href="defconfig-a1200">defconfig-a1200</a></li>
+  <li><a href="defconfig-a780">defconfig-a780</a></li>
+  <li><a href="defconfig-e2">defconfig-e2</a></li>
+  <li><a href="defconfig-e6">defconfig-e6</a></li>
+  <li><a href="defconfig-e680">defconfig-e680</a></li>
+  <li><a href="dmesg-a780.log">dmesg-a780.log</a></li>
+  <li><a href="e680-emu.patch">e680-emu.patch</a></li>
+  <li><a href="e680-kbd.patch">e680-kbd.patch</a></li>
+  <li><a href="e680-leds.patch">e680-leds.patch</a></li>
+  <li><a href="e680-locksw.patch">e680-locksw.patch</a></li>
+  <li><a href="e680-mci.patch">e680-mci.patch</a></li>
+  <li><a href="e680-pcap.patch">e680-pcap.patch</a></li>
+  <li><a href="e680-ts.patch">e680-ts.patch</a></li>
+  <li><a href="ezx-asoc.patch">ezx-asoc.patch</a></li>
+  <li><a href="ezx-backlight.patch">ezx-backlight.patch</a></li>
+  <li><a href="ezx-bp.patch">ezx-bp.patch</a></li>
+  <li><a href="ezx-core.patch">ezx-core.patch</a></li>
+  <li><a href="ezx-emu.patch">ezx-emu.patch</a></li>
+  <li><a href="ezx-enable-stuart.patch">ezx-enable-stuart.patch</a></li>
+  <li><a href="ezx-mtd-map.patch">ezx-mtd-map.patch</a></li>
+  <li><a href="ezx-pcap.patch">ezx-pcap.patch</a></li>
+  <li><a href="ezx-pm.patch">ezx-pm.patch</a></li>
+  <li><a href="ezx-serial-bug-workaround.patch">ezx-serial-bug-workaround.patch</a></li>
+  <li><a href="mux-fix-init-errorpath.patch">mux-fix-init-errorpath.patch</a></li>
+  <li><a href="mux-fix-makefile.patch">mux-fix-makefile.patch</a></li>
+  <li><a href="mux-fix-tty-driver.patch">mux-fix-tty-driver.patch</a></li>
+  <li><a href="mux-fix.patch">mux-fix.patch</a></li>
+  <li><a href="mux-ifdef-ezx-features.patch">mux-ifdef-ezx-features.patch</a></li>
+  <li><a href="mux-linux-2.6.21-fix.patch">mux-linux-2.6.21-fix.patch</a></li>
+  <li><a href="mux-remove-flipbuffers.patch">mux-remove-flipbuffers.patch</a></li>
+  <li><a href="mux-remove-get_halted_bit.patch">mux-remove-get_halted_bit.patch</a></li>
+  <li><a href="mux-remove-usbh_finished_resume.patch">mux-remove-usbh_finished_resume.patch</a></li>
+  <li><a href="mux_cli.patch">mux_cli.patch</a></li>
+  <li><a href="mux_debug.patch">mux_debug.patch</a></li>
+  <li><a href="patch-2.6.21.4">patch-2.6.21.4</a></li>
+  <li><a href="pcap-ts.patch">pcap-ts.patch</a></li>
+  <li><a href="pxa-kbd.patch">pxa-kbd.patch</a></li>
+  <li><a href="pxa27x-udc-support.2.patch">pxa27x-udc-support.2.patch</a></li>
+  <li><a href="series">series</a></li>
+ </ul>
+ <hr noshade><em>Powered by <a href="http://subversion.tigris.org/">Subversion</a> version 1.1.4 (r13838).</em>
+</body></html>
\ No newline at end of file
index 5580b74..ecdc30b 100755 (executable)
@@ -20,10 +20,11 @@ ezx-pm.patch
 
 ezx-pcap.patch
 # ezx-pcap TODO:
-# implement a per board init reg array
-# move mmc functions to the ezx-phone.c mmc init
 # move vibrator level function to the vibrator driver
 
+a780-pcap.patch
+e680-pcap.patch
+a1200-pcap.patch
 
 a780-mci.patch
 e680-mci.patch
@@ -36,6 +37,9 @@ ezx-emu.patch
 # userspace interface for controling emu
 # read adc to find which accessory is plugged
 
+a780-emu.patch
+e680-emu.patch
+
 ezx-mtd-map.patch
 # ezx-mtd-map TODO:
 # at least the original partition should go on the ezx-phone.c file
@@ -89,5 +93,5 @@ mux-linux-2.6.21-fix.patch
 #              pxa-ohci, ts0710_mux, ts0710_mux_usb, ezx-bp
 
 # incomplete
-#asoc-pxa-ssp.patch
-#ezx-asoc.patch
+asoc-pxa-ssp.patch
+ezx-asoc.patch
diff --git a/packages/linux/linux-ezx-2.6.21/rokre2/.mtn2git_empty b/packages/linux/linux-ezx-2.6.21/rokre2/.mtn2git_empty
new file mode 100644 (file)
index 0000000..e69de29
index 8b111a2..61681b4 100644 (file)
@@ -3,15 +3,13 @@ SECTION = "kernel"
 AUTHOR = "Harald Welte and the OpenEZX Team <openezx-devel@lists.openezx.org>"
 HOMEPAGE = "http://www.openezx.org"
 LICENSE = "GPL"
-DEPENDS += "quilt-native"
 EZX = "ezxdev"
-PR = "${EZX}-r6"
+PR = "${EZX}-r7"
 
 inherit kernel
 
-##############################################################
-# source and patches
-#
+require linux.inc
+
 SRC_URI = " \
        ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
        file://logo_linux_clut224.ppm \
@@ -21,11 +19,16 @@ SRC_URI = " \
        file://patches/ezx-bp.patch;patch=1 \
        file://patches/ezx-pm.patch;patch=1 \
        file://patches/ezx-pcap.patch;patch=1 \
+        file://patches/a780-pcap.patch;patch=1 \
+        file://patches/e680-pcap.patch;patch=1 \
+        file://patches/a1200-pcap.patch;patch=1 \
        file://patches/a780-mci.patch;patch=1 \
        file://patches/e680-mci.patch;patch=1 \
        file://patches/a1200-mci.patch;patch=1 \
        file://patches/pxa27x-udc-support.2.patch;patch=1 \
        file://patches/ezx-emu.patch;patch=1 \
+        file://patches/a780-emu.patch;patch=1 \
+        file://patches/e680-emu.patch;patch=1 \
        file://patches/ezx-mtd-map.patch;patch=1 \
        file://patches/ezx-serial-bug-workaround.patch;patch=1 \
        file://patches/pxa-kbd.patch;patch=1 \
@@ -50,12 +53,10 @@ SRC_URI = " \
        file://patches/mux-fix-makefile.patch;patch=1 \
        file://patches/mux-fix-tty-driver.patch;patch=1 \
        file://patches/mux-linux-2.6.21-fix.patch;patch=1 \
-       file://patches/defconfig-a1200 \
-       file://patches/defconfig-a780 \
-       file://patches/defconfig-e2 \
-       file://patches/defconfig-e6 \
-       file://patches/defconfig-e680 \
-       \
+        file://patches/asoc-pxa-ssp.patch;patch=1 \
+       http://shell.studenti.unina.it/~ospite/tmp/ezx-asoc-preview.patch;patch=1 \
+        file://defconfig \
+        \
        "
 
 S = "${WORKDIR}/linux-${PV}"
@@ -89,44 +90,6 @@ CMDLINE = "${CMDLINE_CON} ${CMDLINE_ROOT} ${CMDLINE_IP} ${CMDLINE_ROTATE} ${CMDL
 #module_autoload_pxaficp_ir = "pxaficp_ir"
 #module_autoload_snd-pcm-oss = "snd-pcm-oss"
 
-do_configure() {
-       install -m 0644 ${WORKDIR}/logo_linux_clut224.ppm drivers/video/logo/logo_linux_clut224.ppm
-
-       if [ ! -e ${WORKDIR}/patches/defconfig-${MACHINE} ]; then
-               die "No default configuration for ${MACHINE} available."
-       fi
-
-       echo "CONFIG_CMDLINE=\"${CMDLINE}\"" >> ${S}/.config
-
-       if [ "${TARGET_OS}" == "linux-gnueabi" -o  "${TARGET_OS}" == "linux-uclibcgnueabi" ]; then
-               echo "CONFIG_AEABI=y"                   >> ${S}/.config
-               echo "CONFIG_OABI_COMPAT=y"             >> ${S}/.config
-       else
-               echo "# CONFIG_AEABI is not set"        >> ${S}/.config
-               echo "# CONFIG_OABI_COMPAT is not set"  >> ${S}/.config
-       fi
-
-       #
-       # Logo configuration
-       #
-       echo "CONFIG_LOGO=y"                    >> ${S}/.config
-       echo "CONFIG_LOGO_LINUX_CLUT224=y"      >> ${S}/.config
-
-
-       sed -e '/CONFIG_AEABI/d' \
-           -e '/CONFIG_OABI_COMPAT=/d' \
-           -e '/CONFIG_CMDLINE=/d' \
-           -e '/CONFIG_MTD_MTDRAM_SA1100=/d' \
-           -e '/CONFIG_MTDRAM_TOTAL_SIZE=/d' \
-           -e '/CONFIG_MTDRAM_ERASE_SIZE=/d' \
-           -e '/CONFIG_MTDRAM_ABS_POS=/d' \
-           -e '/CONFIG_LOGO=/d' \
-           -e '/CONFIG_LOGO_LINUX_CLUT224=/d' \
-           '${WORKDIR}/patches/defconfig-${MACHINE}' >>'${S}/.config'
-
-       yes '' | oe_runmake oldconfig
-}
-
 ###############################################################
 # check the kernel is below the 1024*1024 byte limit for the boot-over usb
 #
@@ -139,15 +102,3 @@ do_compile_append() {
        fi
 }
 
-###############################################################
-# put into deploy directory
-#
-do_deploy() {
-        install -d ${DEPLOY_DIR_IMAGE}
-        install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${PR}-${MACHINE}-${DATETIME}.bin
-        tar -cvzf ${DEPLOY_DIR_IMAGE}/modules-${PV}-${PR}-${MACHINE}-${DATETIME}.tgz -C ${D} lib
-}
-
-do_deploy[dirs] = "${S}"
-
-addtask deploy before do_package after do_install