r1004 - trunk/src/target/kernel/patches

laforge at sita.openmoko.org laforge at sita.openmoko.org
Thu Feb 15 22:37:18 CET 2007


Author: laforge
Date: 2007-02-15 22:37:15 +0100 (Thu, 15 Feb 2007)
New Revision: 1004

Added:
   trunk/src/target/kernel/patches/asoc-asm_hardware_h.patch
   trunk/src/target/kernel/patches/asoc-platform-hw_init-pcm_emulation-fix.patch
   trunk/src/target/kernel/patches/i2c-permit_invalid_addrs.patch
   trunk/src/target/kernel/patches/pm-debug_less_verbose.patch
   trunk/src/target/kernel/patches/s3c2410_touchscreen.patch
   trunk/src/target/kernel/patches/s3c2410fb_2617_backport.patch
Removed:
   trunk/src/target/kernel/patches/asoc-neo_backport.patch
   trunk/src/target/kernel/patches/qt2410-touchscreen.patch
Modified:
   trunk/src/target/kernel/patches/asoc.patch
   trunk/src/target/kernel/patches/gta01-backlight.patch
   trunk/src/target/kernel/patches/gta01-core.patch
   trunk/src/target/kernel/patches/gta01-inputdevice.patch
   trunk/src/target/kernel/patches/gta01-jbt6k74.patch
   trunk/src/target/kernel/patches/gta01-no_nand_partitions.patch
   trunk/src/target/kernel/patches/gta01-pcf50606.patch
   trunk/src/target/kernel/patches/gta01-power_control.patch
   trunk/src/target/kernel/patches/gta01-vbus_draw.patch
   trunk/src/target/kernel/patches/qt2410-base.patch
   trunk/src/target/kernel/patches/qt2410-s3c_mci-pdata.patch
   trunk/src/target/kernel/patches/s3c2410_udc-vbus_draw_pdata.patch
   trunk/src/target/kernel/patches/s3c2410_udc.patch
   trunk/src/target/kernel/patches/s3c_mci.patch
   trunk/src/target/kernel/patches/series
   trunk/src/target/kernel/patches/udc-nomodule-misccr.patch
Log:
* merge our patchset into 2.6.20 mainline kernel (yay!)
* rename qt2410_touchscreen into s3c2410_touchscreen
* revert 2.6.17->2.6.20 changes to s3c2410_fb, since they're broken
* add PCM emulation bugfix to ASoC for s3c24xx
* make power management a bit less verbose if debug is enabled
* get rid of asoc-neo_backport, since we're now 2.6.20


Added: trunk/src/target/kernel/patches/asoc-asm_hardware_h.patch
===================================================================
--- trunk/src/target/kernel/patches/asoc-asm_hardware_h.patch	2007-02-15 21:31:15 UTC (rev 1003)
+++ trunk/src/target/kernel/patches/asoc-asm_hardware_h.patch	2007-02-15 21:37:15 UTC (rev 1004)
@@ -0,0 +1,17 @@
+Don't include <asm/arch/hardware.h>, but <asm/hardware.h>
+
+Signed-off-by: Harald Welte <laforge at openmko.org>
+
+Index: linux-2.6.20/sound/soc/s3c24xx/neo1973_wm8753.c
+===================================================================
+--- linux-2.6.20.orig/sound/soc/s3c24xx/neo1973_wm8753.c	2007-02-15 16:27:53.000000000 +0100
++++ linux-2.6.20/sound/soc/s3c24xx/neo1973_wm8753.c	2007-02-15 16:28:02.000000000 +0100
+@@ -33,7 +33,7 @@
+ #include <asm/arch/regs-iis.h>
+ #include <asm/arch/regs-clock.h>
+ #include <asm/arch/regs-gpio.h>
+-#include <asm/arch/hardware.h>
++#include <asm/hardware.h>
+ #include <asm/arch/audio.h>
+ #include <asm/io.h>
+ #include <asm/arch/spi-gpio.h>

Deleted: trunk/src/target/kernel/patches/asoc-neo_backport.patch
===================================================================
--- trunk/src/target/kernel/patches/asoc-neo_backport.patch	2007-02-15 21:31:15 UTC (rev 1003)
+++ trunk/src/target/kernel/patches/asoc-neo_backport.patch	2007-02-15 21:37:15 UTC (rev 1004)
@@ -1,156 +0,0 @@
-Index: linux-2.6.17.14/include/sound/soc.h
-===================================================================
---- linux-2.6.17.14.orig/include/sound/soc.h
-+++ linux-2.6.17.14/include/sound/soc.h
-@@ -359,7 +359,7 @@ struct snd_soc_codec {
- 	struct list_head dapm_paths;
- 	unsigned int dapm_state;
- 	unsigned int suspend_dapm_state;
--	struct delayed_work delayed_work;
-+	struct work_struct delayed_work;
- 
- 	/* codec DAI's */
- 	struct snd_soc_codec_dai *dai;
-@@ -436,7 +436,7 @@ struct snd_soc_device {
- 	struct snd_soc_platform *platform;
- 	struct snd_soc_codec *codec;
- 	struct snd_soc_codec_device *codec_dev;
--	struct delayed_work delayed_work;
-+	struct work_struct delayed_work;
- 	void *codec_data;
- };
- 
-Index: linux-2.6.17.14/sound/soc/codecs/wm8753.c
-===================================================================
---- linux-2.6.17.14.orig/sound/soc/codecs/wm8753.c
-+++ linux-2.6.17.14/sound/soc/codecs/wm8753.c
-@@ -1422,10 +1422,9 @@ static void wm8753_set_dai_mode(struct s
- 	wm8753_dai[1].codec = codec;
- }
- 
--static void wm8753_work(struct work_struct *work)
-+static void wm8753_work(void *data)
- {
--	struct snd_soc_codec *codec =
--		container_of(work, struct snd_soc_codec, delayed_work.work);
-+	struct snd_soc_codec *codec = data;
- 	wm8753_dapm_event(codec, codec->dapm_state);
- }
- 
-@@ -1669,7 +1668,7 @@ static int wm8753_probe(struct platform_
- 	INIT_LIST_HEAD(&codec->dapm_widgets);
- 	INIT_LIST_HEAD(&codec->dapm_paths);
- 	wm8753_socdev = socdev;
--	INIT_DELAYED_WORK(&codec->delayed_work, wm8753_work);
-+	INIT_WORK(&codec->delayed_work, wm8753_work, codec);
- 
- #if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
- 	if (setup->i2c_address) {
-Index: linux-2.6.17.14/sound/soc/soc-core.c
-===================================================================
---- linux-2.6.17.14.orig/sound/soc/soc-core.c
-+++ linux-2.6.17.14/sound/soc/soc-core.c
-@@ -64,7 +64,7 @@ MODULE_PARM_DESC(pmdown_time, "DAPM stre
- /*
-  * This function forces any delayed work to be queued and run.
-  */
--static int run_delayed_work(struct delayed_work *dwork)
-+static int run_delayed_work(struct work_struct *dwork)
- {
- 	int ret;
- 
-@@ -267,10 +267,9 @@ out:
-  * This is to ensure there are no pops or clicks in between any music tracks
-  * due to DAPM power cycling.
-  */
--static void close_delayed_work(struct work_struct *work)
-+static void close_delayed_work(void *data)
- {
--	struct snd_soc_device *socdev =
--		container_of(work, struct snd_soc_device, delayed_work.work);
-+	struct snd_soc_device *socdev = data;
- 	struct snd_soc_codec *codec = socdev->codec;
- 	struct snd_soc_codec_dai *codec_dai;
- 	int i;
-@@ -775,7 +774,7 @@ static int soc_probe(struct platform_dev
- 	}
- 
- 	/* DAPM stream work */
--	INIT_DELAYED_WORK(&socdev->delayed_work, close_delayed_work);
-+	INIT_WORK(&socdev->delayed_work, close_delayed_work, socdev);
- 	return 0;
- 
- platform_err:
-Index: linux-2.6.17.14/sound/soc/s3c24xx/s3c24xx-i2s.c
-===================================================================
---- linux-2.6.17.14.orig/sound/soc/s3c24xx/s3c24xx-i2s.c
-+++ linux-2.6.17.14/sound/soc/s3c24xx/s3c24xx-i2s.c
-@@ -60,13 +60,13 @@ static struct s3c2410_dma_client s3c24xx
- 
- static struct s3c24xx_pcm_dma_params s3c24xx_i2s_pcm_stereo_out = {
- 	.client		= &s3c24xx_dma_client_out,
--	.channel	= DMACH_I2S_OUT,
-+	.channel	= 2,
- 	.dma_addr	= S3C2410_PA_IIS + S3C2410_IISFIFO
- };
- 
- static struct s3c24xx_pcm_dma_params s3c24xx_i2s_pcm_stereo_in = {
- 	.client		= &s3c24xx_dma_client_in,
--	.channel	= DMACH_I2S_IN,
-+	.channel	= 1,
- 	.dma_addr	= S3C2410_PA_IIS + S3C2410_IISFIFO
- };
- 
-Index: linux-2.6.17.14/sound/soc/s3c24xx/s3c24xx-pcm.c
-===================================================================
---- linux-2.6.17.14.orig/sound/soc/s3c24xx/s3c24xx-pcm.c
-+++ linux-2.6.17.14/sound/soc/s3c24xx/s3c24xx-pcm.c
-@@ -114,9 +114,9 @@ static void s3c24xx_pcm_enqueue(struct s
- 	prtd->dma_pos = pos;
- }
- 
--static void s3c24xx_audio_buffdone(struct s3c2410_dma_chan *channel,
-+static void s3c24xx_audio_buffdone(s3c2410_dma_chan_t *channel,
- 							void *dev_id, int size,
--							enum s3c2410_dma_buffresult result)
-+							s3c2410_dma_buffresult_t result)
- {
- 	struct snd_pcm_substream *substream = dev_id;
- 	struct s3c24xx_runtime_data *prtd = substream->runtime->private_data;
-@@ -180,7 +180,8 @@ static int s3c24xx_pcm_hw_params(struct 
- 						2, S3C2410_DCON_SYNC_PCLK | S3C2410_DCON_HANDSHAKE);
- 	} else {
- 		s3c2410_dma_config(prtd->params->channel,
--						2, S3C2410_DCON_HANDSHAKE | S3C2410_DCON_SYNC_PCLK);
-+						2, S3C2410_DCON_HANDSHAKE | S3C2410_DCON_SYNC_PCLK |
-+						S3C2410_DCON_CH1_I2SSDI);
- 
- 		s3c2410_dma_devconfig(prtd->params->channel,
- 						S3C2410_DMASRC_HW, 0x3,
-@@ -261,7 +262,7 @@ static int s3c24xx_pcm_trigger(struct sn
- 	case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
- 		prtd->state |= ST_RUNNING;
- 		s3c2410_dma_ctrl(prtd->params->channel, S3C2410_DMAOP_START);
--		s3c2410_dma_ctrl(prtd->params->channel, S3C2410_DMAOP_STARTED);
-+//		s3c2410_dma_ctrl(prtd->params->channel, S3C2410_DMAOP_STARTED);
- 		break;
- 
- 	case SNDRV_PCM_TRIGGER_STOP:
-Index: linux-2.6.17.14/drivers/i2c/i2c-core.c
-===================================================================
---- linux-2.6.17.14.orig/drivers/i2c/i2c-core.c
-+++ linux-2.6.17.14/drivers/i2c/i2c-core.c
-@@ -650,11 +650,11 @@ static int i2c_probe_address(struct i2c_
- 	int err;
- 
- 	/* Make sure the address is valid */
--	if (addr < 0x03 || addr > 0x77) {
-+	/*if (addr < 0x03 || addr > 0x77) {
- 		dev_warn(&adapter->dev, "Invalid probe address 0x%02x\n",
- 			 addr);
- 		return -EINVAL;
--	}
-+	}*/
- 
- 	/* Skip if already in use */
- 	if (i2c_check_addr(adapter, addr))

Added: trunk/src/target/kernel/patches/asoc-platform-hw_init-pcm_emulation-fix.patch
===================================================================
--- trunk/src/target/kernel/patches/asoc-platform-hw_init-pcm_emulation-fix.patch	2007-02-15 21:31:15 UTC (rev 1003)
+++ trunk/src/target/kernel/patches/asoc-platform-hw_init-pcm_emulation-fix.patch	2007-02-15 21:37:15 UTC (rev 1004)
@@ -0,0 +1,45 @@
+Since the PCM emulation can call multiple times to hw_setup(), but we 
+can only once allocate/request the DMA channel, we have to handle
+this gracefully.
+
+Signed-off-by: Harald Welte <laforge at openmoko.org>
+
+Index: linux-2.6.20/sound/soc/s3c24xx/s3c24xx-pcm.c
+===================================================================
+--- linux-2.6.20.orig/sound/soc/s3c24xx/s3c24xx-pcm.c	2007-02-15 21:50:25.000000000 +0100
++++ linux-2.6.20/sound/soc/s3c24xx/s3c24xx-pcm.c	2007-02-15 22:25:10.000000000 +0100
+@@ -155,18 +155,22 @@
+ 	if (!dma)
+ 		return 0;
+ 
+-	/* prepare DMA */
+-	prtd->params = dma;
+-
+-	DBG("params %p, client %p, channel %d\n", prtd->params,
+-		prtd->params->client, prtd->params->channel);
+-
+-	ret = s3c2410_dma_request(prtd->params->channel,
+-				  prtd->params->client, NULL);
+-
+-	if (ret) {
+-		DBG(KERN_ERR "failed to get dma channel\n");
+-		return ret;
++	/* this may get called several times by oss emulation
++	 * with different params -HW */
++	if (prtd->params == NULL) {
++		/* prepare DMA */
++		prtd->params = dma;
++
++		DBG("params %p, client %p, channel %d\n", prtd->params,
++			prtd->params->client, prtd->params->channel);
++
++		ret = s3c2410_dma_request(prtd->params->channel,
++					  prtd->params->client, NULL);
++
++		if (ret) {
++			DBG(KERN_ERR "failed to get dma channel\n");
++			return ret;
++		}
+ 	}
+ 
+ 	/* channel needs configuring for mem=>device, increment memory addr,

Modified: trunk/src/target/kernel/patches/asoc.patch
===================================================================
--- trunk/src/target/kernel/patches/asoc.patch	2007-02-15 21:31:15 UTC (rev 1003)
+++ trunk/src/target/kernel/patches/asoc.patch	2007-02-15 21:37:15 UTC (rev 1004)
@@ -1,8 +1,8 @@
-Index: linux-2.6.17.14-fic4.test/Documentation/sound/alsa/soc/DAI.txt
+Index: linux-2.6-asoc-pxa/Documentation/sound/alsa/soc/DAI.txt
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/Documentation/sound/alsa/soc/DAI.txt	2007-02-06 15:55:20.000000000 +0100
-@@ -0,0 +1,117 @@
+--- /dev/null
++++ linux-2.6-asoc-pxa/Documentation/sound/alsa/soc/DAI.txt
+@@ -0,0 +1,56 @@
 +ASoC currently supports the three main Digital Audio Interfaces (DAI) found on
 +SoC controllers and portable audio CODECS today, namely AC97, I2S and PCM.
 +
@@ -59,72 +59,11 @@
 + o Mode A - MSB is transmitted on falling edge of first BCLK after FRAME/SYNC.
 +
 + o Mode B - MSB is transmitted on rising edge of FRAME/SYNC.
-+
-+
-+ASoC DAI Configuration
-+======================
-+
-+DAI configuration parameters, all listed in include/sound/soc.h
-+
-+ 1) hardware DAI formats
-+
-+#define SND_SOC_DAIFMT_I2S        (1 << 0)	/* I2S mode */
-+#define SND_SOC_DAIFMT_RIGHT_J    (1 << 1)	/* Right justified or LSB mode */
-+#define SND_SOC_DAIFMT_LEFT_J     (1 << 2)	/* Left Justified or MSB mode */
-+#define SND_SOC_DAIFMT_DSP_A      (1 << 3)	/* L data msb after FRM */
-+#define SND_SOC_DAIFMT_DSP_B      (1 << 4)	/* L data msb during FRM */
-+#define SND_SOC_DAIFMT_AC97       (1 << 5)	/* AC97 */
-+
-+#define SND_SOC_DAIFMT_MSB 	SND_SOC_DAIFMT_LEFT_J
-+#define SND_SOC_DAIFMT_LSB	SND_SOC_DAIFMT_RIGHT_J
-+
-+ 2) Clock gating
-+
-+#define SND_SOC_DAIFMT_CONT			(0 << 4)	/* continuous clock */
-+#define SND_SOC_DAIFMT_GATED		(1 << 4)	/* clock is gated when not Tx/Rx */
-+
-+ 3) hw DAI signal inversions
-+
-+#define SND_SOC_DAIFMT_NB_NF		(1 << 8)	/* normal bit clock + frame */
-+#define SND_SOC_DAIFMT_NB_IF		(1 << 9)	/* normal bclk + inv frm */
-+#define SND_SOC_DAIFMT_IB_NF		(1 << 10)	/* invert bclk + nor frm */
-+#define SND_SOC_DAIFMT_IB_IF		(1 << 11)	/* invert bclk + frm */
-+
-+ 4) hw clock masters
-+    This is wrt the codec, the inverse is true for the interface
-+    i.e. if the codec is clk and frm master then the interface is
-+    clk and frame slave.
-+
-+#define SND_SOC_DAIFMT_CBM_CFM		(1 << 12)	/* codec clk & frm master */
-+#define SND_SOC_DAIFMT_CBS_CFM		(1 << 13)	/* codec clk slave & frm master */
-+#define SND_SOC_DAIFMT_CBM_CFS		(1 << 14)	/* codec clk master & frame slave */
-+#define SND_SOC_DAIFMT_CBS_CFS		(1 << 15)	/* codec clk & frm slave */
-+
-+
-+ASoC DAI Operations
-+===================
-+
-+	/* codec DAI clocking configuration */
-+	int (*set_sysclk)(struct snd_soc_codec_dai *codec_dai,
-+		int clk_id, unsigned int freq, int dir);
-+	int (*set_pll)(struct snd_soc_codec_dai *codec_dai,
-+		int pll_id, unsigned int freq_in, unsigned int freq_out);
-+	int (*set_clkdiv)(struct snd_soc_codec_dai *codec_dai,
-+		int div_id, int div);
-+
-+	/* CPU DAI format configuration */
-+	int (*set_fmt)(struct snd_soc_codec_dai *codec_dai,
-+		unsigned int fmt);
-+	int (*set_tdm_slot)(struct snd_soc_codec_dai *codec_dai,
-+		unsigned int mask, int slots);
-+	int (*set_tristate)(struct snd_soc_codec_dai *, int tristate);
-+
-+
-Index: linux-2.6.17.14-fic4.test/Documentation/sound/alsa/soc/clocking.txt
+Index: linux-2.6-asoc-pxa/Documentation/sound/alsa/soc/clocking.txt
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/Documentation/sound/alsa/soc/clocking.txt	2007-02-06 15:55:20.000000000 +0100
-@@ -0,0 +1,47 @@
+--- /dev/null
++++ linux-2.6-asoc-pxa/Documentation/sound/alsa/soc/clocking.txt
+@@ -0,0 +1,51 @@
 +Audio Clocking
 +==============
 +
@@ -171,12 +110,16 @@
 +it's best to configure BCLK to the lowest possible speed (depending on your
 +rate, number of channels and wordsize) to save on power.
 +
++It's also desireable to use the codec (if possible) to drive (or master) the
++audio clocks as it's usually gives more accurate sample rates than the CPU.
 +
-Index: linux-2.6.17.14-fic4.test/Documentation/sound/alsa/soc/codec.txt
++
++
+Index: linux-2.6-asoc-pxa/Documentation/sound/alsa/soc/codec.txt
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/Documentation/sound/alsa/soc/codec.txt	2007-02-06 15:55:20.000000000 +0100
-@@ -0,0 +1,196 @@
+--- /dev/null
++++ linux-2.6-asoc-pxa/Documentation/sound/alsa/soc/codec.txt
+@@ -0,0 +1,197 @@
 +ASoC Codec Driver
 +=================
 +
@@ -185,21 +128,18 @@
 +specific to the target platform or machine. All platform and machine specific
 +code should be added to the platform and machine drivers respectively.
 +
-+Each codec driver must provide the following features:-
++Each codec driver *must* provide the following features:-
 +
-+ 1) Digital audio interface (DAI) description
-+ 2) Digital audio interface configuration
-+ 3) PCM's description
-+ 4) Codec control IO - using I2C, 3 Wire(SPI) or both API's
-+ 5) Mixers and audio controls
-+ 6) Sysclk configuration
-+ 7) Codec audio operations
++ 1) Codec DAI and PCM configuration
++ 2) Codec control IO - using I2C, 3 Wire(SPI) or both API's
++ 3) Mixers and audio controls
++ 4) Codec audio operations
 +
 +Optionally, codec drivers can also provide:-
 +
-+ 8) DAPM description.
-+ 9) DAPM event handler.
-+10) DAC Digital mute control.
++ 5) DAPM description.
++ 6) DAPM event handler.
++ 7) DAC Digital mute control.
 +
 +It's probably best to use this guide in conjuction with the existing codec
 +driver code in sound/soc/codecs/
@@ -207,44 +147,47 @@
 +ASoC Codec driver breakdown
 +===========================
 +
-+1 - Digital Audio Interface (DAI) configuration
-+-----------------------------------------------
-+DAI configuration is handled by the codec_pcm_prepare function and is
-+responsible for configuring and starting the DAI on the codec. This can be
-+called multiple times and is atomic. It can access the runtime parameters.
++1 - Codec DAI and PCM configuration
++-----------------------------------
++Each codec driver must have a struct snd_soc_codec_dai to define it's DAI and
++PCM's capablities and operations. This struct is exported so that it can be
++registered with the core by your machine driver.
 +
-+This usually consists of a large function with numerous switch statements to
-+set up each configuration option. These options are set by the core at runtime.
-+
-+
-+2 - Codec PCM's
-+---------------
-+Each codec must have it's PCM's defined. This defines the number of channels,
-+stream names, callbacks and codec name. It is also used to register the DAI
-+with the ASoC core. The PCM structure also associates the DAI capabilities with
-+the ALSA PCM.
-+
 +e.g.
 +
-+static struct snd_soc_pcm_codec wm8731_pcm_client = {
++struct snd_soc_codec_dai wm8731_dai = {
 +	.name = "WM8731",
++	/* playback capabilities */
 +	.playback = {
 +		.stream_name = "Playback",
 +		.channels_min = 1,
 +		.channels_max = 2,
-+	},
++		.rates = WM8731_RATES,
++		.formats = WM8731_FORMATS,},
++	/* capture capabilities */
 +	.capture = {
 +		.stream_name = "Capture",
 +		.channels_min = 1,
 +		.channels_max = 2,
-+	},
++		.rates = WM8731_RATES,
++		.formats = WM8731_FORMATS,},
++	/* pcm operations - see section 4 below */
 +	.ops = {
 +		.prepare = wm8731_pcm_prepare,
++		.hw_params = wm8731_hw_params,
++		.shutdown = wm8731_shutdown,
 +	},
++	/* DAI operations - see DAI.txt */
++	.dai_ops = {
++		.digital_mute = wm8731_mute,
++		.set_sysclk = wm8731_set_dai_sysclk,
++		.set_fmt = wm8731_set_dai_fmt,
++	}
 +};
++EXPORT_SYMBOL_GPL(wm8731_dai);
 +
 +
-+3 - Codec control IO
++2 - Codec control IO
 +--------------------
 +The codec can ususally be controlled via an I2C or SPI style interface (AC97
 +combines control with data in the DAI). The codec drivers will have to provide
@@ -269,7 +212,7 @@
 +	hw_read_t hw_read;
 +
 +
-+4 - Mixers and audio controls
++3 - Mixers and audio controls
 +-----------------------------
 +All the codec mixers and audio controls can be defined using the convenience
 +macros defined in soc.h.
@@ -307,24 +250,25 @@
 +
 +Defines a stereo enumerated control
 +
-+5 - Codec Audio Operations
++
++4 - Codec Audio Operations
 +--------------------------
 +The codec driver also supports the following alsa operations:-
 +
 +/* SoC audio ops */
 +struct snd_soc_ops {
-+	int (*startup)(snd_pcm_substream_t *);
-+	void (*shutdown)(snd_pcm_substream_t *);
-+	int (*hw_params)(snd_pcm_substream_t *, snd_pcm_hw_params_t *);
-+	int (*hw_free)(snd_pcm_substream_t *);
-+	int (*prepare)(snd_pcm_substream_t *);
++	int (*startup)(struct snd_pcm_substream *);
++	void (*shutdown)(struct snd_pcm_substream *);
++	int (*hw_params)(struct snd_pcm_substream *, struct snd_pcm_hw_params *);
++	int (*hw_free)(struct snd_pcm_substream *);
++	int (*prepare)(struct snd_pcm_substream *);
 +};
 +
 +Please refer to the alsa driver PCM documentation for details.
 +http://www.alsa-project.org/~iwai/writing-an-alsa-driver/c436.htm
 +
 +
-+6 - DAPM description.
++5 - DAPM description.
 +---------------------
 +The Dynamic Audio Power Management description describes the codec's power
 +components, their relationships and registers to the ASoC core. Please read
@@ -333,7 +277,7 @@
 +Please also see the examples in other codec drivers.
 +
 +
-+7 - DAPM event handler
++6 - DAPM event handler
 +----------------------
 +This function is a callback that handles codec domain PM calls and system
 +domain PM calls (e.g. suspend and resume). It's used to put the codec to sleep
@@ -353,7 +297,7 @@
 +	SNDRV_CTL_POWER_D3cold: /* Everything Off, without power */
 +
 +
-+8 - Codec DAC digital mute control.
++7 - Codec DAC digital mute control.
 +------------------------------------
 +Most codecs have a digital mute before the DAC's that can be used to minimise
 +any system noise.  The mute stops any digital data from entering the DAC.
@@ -373,10 +317,10 @@
 +		wm8974_write(codec, WM8974_DAC, mute_reg);
 +	return 0;
 +}
-Index: linux-2.6.17.14-fic4.test/Documentation/sound/alsa/soc/dapm.txt
+Index: linux-2.6-asoc-pxa/Documentation/sound/alsa/soc/dapm.txt
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/Documentation/sound/alsa/soc/dapm.txt	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/Documentation/sound/alsa/soc/dapm.txt
 @@ -0,0 +1,297 @@
 +Dynamic Audio Power Management for Portable Devices
 +===================================================
@@ -675,10 +619,10 @@
 +#define SND_SOC_DAPM_POST_PMD	0x8		/* after widget power down */
 +#define SND_SOC_DAPM_PRE_REG	0x10	/* before audio path setup */
 +#define SND_SOC_DAPM_POST_REG	0x20	/* after audio path setup */
-Index: linux-2.6.17.14-fic4.test/Documentation/sound/alsa/soc/machine.txt
+Index: linux-2.6-asoc-pxa/Documentation/sound/alsa/soc/machine.txt
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/Documentation/sound/alsa/soc/machine.txt	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/Documentation/sound/alsa/soc/machine.txt
 @@ -0,0 +1,113 @@
 +ASoC Machine Driver
 +===================
@@ -794,10 +738,10 @@
 +
 +Machine specific audio mixer controls can be added in the dai init function.
 \ No newline at end of file
-Index: linux-2.6.17.14-fic4.test/Documentation/sound/alsa/soc/overview.txt
+Index: linux-2.6-asoc-pxa/Documentation/sound/alsa/soc/overview.txt
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/Documentation/sound/alsa/soc/overview.txt	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/Documentation/sound/alsa/soc/overview.txt
 @@ -0,0 +1,83 @@
 +ALSA SoC Layer
 +==============
@@ -883,10 +827,10 @@
 +
 +clocking.txt: ASoC clocking for best power performance.
 \ No newline at end of file
-Index: linux-2.6.17.14-fic4.test/Documentation/sound/alsa/soc/platform.txt
+Index: linux-2.6-asoc-pxa/Documentation/sound/alsa/soc/platform.txt
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/Documentation/sound/alsa/soc/platform.txt	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/Documentation/sound/alsa/soc/platform.txt
 @@ -0,0 +1,58 @@
 +ASoC Platform Driver
 +====================
@@ -902,12 +846,12 @@
 +
 +/* SoC audio ops */
 +struct snd_soc_ops {
-+	int (*startup)(snd_pcm_substream_t *);
-+	void (*shutdown)(snd_pcm_substream_t *);
-+	int (*hw_params)(snd_pcm_substream_t *, snd_pcm_hw_params_t *);
-+	int (*hw_free)(snd_pcm_substream_t *);
-+	int (*prepare)(snd_pcm_substream_t *);
-+	int (*trigger)(snd_pcm_substream_t *, int);
++	int (*startup)(struct snd_pcm_substream *);
++	void (*shutdown)(struct snd_pcm_substream *);
++	int (*hw_params)(struct snd_pcm_substream *, struct snd_pcm_hw_params *);
++	int (*hw_free)(struct snd_pcm_substream *);
++	int (*prepare)(struct snd_pcm_substream *);
++	int (*trigger)(struct snd_pcm_substream *, int);
 +};
 +
 +The platform driver exports it's DMA functionailty via struct snd_soc_platform:-
@@ -921,11 +865,11 @@
 +	int (*resume)(struct platform_device *pdev, struct snd_soc_cpu_dai *cpu_dai);
 +
 +	/* pcm creation and destruction */
-+	int (*pcm_new)(snd_card_t *, struct snd_soc_codec_dai *, snd_pcm_t *);
-+	void (*pcm_free)(snd_pcm_t *);
++	int (*pcm_new)(struct snd_card *, struct snd_soc_codec_dai *, struct snd_pcm *);
++	void (*pcm_free)(struct snd_pcm *);
 +
 +	/* platform stream ops */
-+	snd_pcm_ops_t *pcm_ops;
++	struct snd_pcm_ops *pcm_ops;
 +};
 +
 +Please refer to the alsa driver documentation for details of audio DMA.
@@ -946,23 +890,23 @@
 + 5) Suspend and resume (optional)
 +
 +Please see codec.txt for a description of items 1 - 4.
-Index: linux-2.6.17.14-fic4.test/Documentation/sound/alsa/soc/pops_clicks.txt
+Index: linux-2.6-asoc-pxa/Documentation/sound/alsa/soc/pops_clicks.txt
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/Documentation/sound/alsa/soc/pops_clicks.txt	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/Documentation/sound/alsa/soc/pops_clicks.txt
 @@ -0,0 +1,52 @@
 +Audio Pops and Clicks
 +=====================
 +
 +Pops and clicks are unwanted audio artifacts caused by the powering up and down
-+of components within the audio subsystem. This is noticable on PC's when an audio
-+module is either loaded or unloaded (at module load time the sound card is
++of components within the audio subsystem. This is noticable on PC's when an
++audio module is either loaded or unloaded (at module load time the sound card is
 +powered up and causes a popping noise on the speakers).
 +
-+Pops and clicks can be more frequent on portable systems with DAPM. This is because
-+the components within the subsystem are being dynamically powered depending on
-+the audio usage and this can subsequently cause a small pop or click every time a
-+component power state is changed.
++Pops and clicks can be more frequent on portable systems with DAPM. This is
++because the components within the subsystem are being dynamically powered
++depending on the audio usage and this can subsequently cause a small pop or
++click every time a component power state is changed.
 +
 +
 +Minimising Playback Pops and Clicks
@@ -1003,11 +947,11 @@
 +amplitude too quickly. It can be minimised by enabling the zero cross setting
 +for each volume control. The ZC forces the gain change to occur when the signal
 +crosses the zero amplitude line.
-Index: linux-2.6.17.14-fic4.test/include/sound/ac97_codec.h
+Index: linux-2.6-asoc-pxa/include/sound/ac97_codec.h
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/include/sound/ac97_codec.h	2007-02-06 15:38:06.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/include/sound/ac97_codec.h	2007-02-06 15:55:20.000000000 +0100
-@@ -407,6 +407,7 @@
+--- linux-2.6-asoc-pxa.orig/include/sound/ac97_codec.h
++++ linux-2.6-asoc-pxa/include/sound/ac97_codec.h
+@@ -425,6 +425,7 @@ struct snd_ac97_build_ops {
  
  struct snd_ac97_bus_ops {
  	void (*reset) (struct snd_ac97 *ac97);
@@ -1015,10 +959,10 @@
  	void (*write) (struct snd_ac97 *ac97, unsigned short reg, unsigned short val);
  	unsigned short (*read) (struct snd_ac97 *ac97, unsigned short reg);
  	void (*wait) (struct snd_ac97 *ac97);
-Index: linux-2.6.17.14-fic4.test/include/sound/soc-dapm.h
+Index: linux-2.6-asoc-pxa/include/sound/soc-dapm.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/include/sound/soc-dapm.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/include/sound/soc-dapm.h
 @@ -0,0 +1,286 @@
 +/*
 + * linux/sound/soc-dapm.h -- ALSA SoC Dynamic Audio Power Management
@@ -1306,10 +1250,10 @@
 +};
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/include/sound/soc.h
+Index: linux-2.6-asoc-pxa/include/sound/soc.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/include/sound/soc.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/include/sound/soc.h
 @@ -0,0 +1,460 @@
 +/*
 + * linux/sound/soc.h -- ALSA SoC Layer
@@ -1771,11 +1715,11 @@
 +};
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/Kconfig
+Index: linux-2.6-asoc-pxa/sound/Kconfig
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/sound/Kconfig	2007-02-06 15:38:06.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/sound/Kconfig	2007-02-06 15:55:20.000000000 +0100
-@@ -74,6 +74,8 @@
+--- linux-2.6-asoc-pxa.orig/sound/Kconfig
++++ linux-2.6-asoc-pxa/sound/Kconfig
+@@ -76,6 +76,8 @@ source "sound/sparc/Kconfig"
  
  source "sound/parisc/Kconfig"
  
@@ -1784,10 +1728,10 @@
  endmenu
  
  menu "Open Sound System"
-Index: linux-2.6.17.14-fic4.test/sound/soc/Kconfig
+Index: linux-2.6-asoc-pxa/sound/soc/Kconfig
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/Kconfig	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/Kconfig
 @@ -0,0 +1,37 @@
 +#
 +# SoC audio configuration
@@ -1826,19 +1770,19 @@
 +endmenu
 +
 +endmenu
-Index: linux-2.6.17.14-fic4.test/sound/soc/Makefile
+Index: linux-2.6-asoc-pxa/sound/soc/Makefile
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/Makefile	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/Makefile
 @@ -0,0 +1,4 @@
 +snd-soc-core-objs := soc-core.o soc-dapm.o
 +
 +obj-$(CONFIG_SND_SOC)	+= snd-soc-core.o
 +obj-$(CONFIG_SND_SOC)	+= pxa/ at91/ imx/ s3c24xx/ codecs/
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/Kconfig
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/Kconfig
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/Kconfig	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/Kconfig
 @@ -0,0 +1,102 @@
 +config SND_SOC_AC97_CODEC
 +	tristate "SoC generic AC97 support"
@@ -1942,10 +1886,10 @@
 +	depends SND_SOC
 +	help
 +	  Say Y or M if you want to support the AK4535 codec.
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/Makefile
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/Makefile
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/Makefile	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/Makefile
 @@ -0,0 +1,35 @@
 +snd-soc-ac97-objs := ac97.o
 +snd-soc-wm8711-objs := wm8711.o
@@ -1982,10 +1926,10 @@
 +obj-$(CONFIG_SND_SOC_AK4535)	+= snd-soc-ak4535.o
 +obj-$(CONFIG_SND_SOC_WM9713)	+= snd-soc-wm9713.o
 +obj-$(CONFIG_SND_SOC_WM9712)	+= snd-soc-wm9712.o
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/ac97.c
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/ac97.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/ac97.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/ac97.c
 @@ -0,0 +1,156 @@
 +/*
 + * ac97.c  --  ALSA Soc AC97 codec support
@@ -2143,10 +2087,10 @@
 +MODULE_DESCRIPTION("Soc Generic AC97 driver");
 +MODULE_AUTHOR("Liam Girdwood");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/ac97.h
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/ac97.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/ac97.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/ac97.h
 @@ -0,0 +1,18 @@
 +/*
 + * linux/sound/codecs/ac97.h -- ALSA SoC Layer
@@ -2166,10 +2110,10 @@
 +extern struct snd_soc_codec_device soc_codec_dev_ac97;
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/ak4535.c
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/ak4535.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/ak4535.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/ak4535.c
 @@ -0,0 +1,697 @@
 +/*
 + * ak4535.c  --  AK4535 ALSA Soc Audio driver
@@ -2868,10 +2812,10 @@
 +MODULE_DESCRIPTION("Soc AK4535 driver");
 +MODULE_AUTHOR("Richard Purdie");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/ak4535.h
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/ak4535.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/ak4535.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/ak4535.h
 @@ -0,0 +1,46 @@
 +/*
 + * ak4535.h  --  AK4535 Soc Audio driver
@@ -2919,10 +2863,10 @@
 +extern struct snd_soc_codec_device soc_codec_dev_ak4535;
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/uda1380.c
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/uda1380.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/uda1380.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/uda1380.c
 @@ -0,0 +1,745 @@
 +/*
 + * uda1380.c - Philips UDA1380 ALSA SoC audio driver
@@ -3669,10 +3613,10 @@
 +MODULE_AUTHOR("Giorgio Padrin");
 +MODULE_DESCRIPTION("Audio support for codec Philips UDA1380");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/uda1380.h
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/uda1380.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/uda1380.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/uda1380.h
 @@ -0,0 +1,89 @@
 +/*
 + * Audio support for Philips UDA1380
@@ -3763,10 +3707,10 @@
 +extern struct snd_soc_codec_device soc_codec_dev_uda1380;
 +
 +#endif /* _UDA1380_H */
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8731.c
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm8731.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8731.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm8731.c
 @@ -0,0 +1,763 @@
 +/*
 + * wm8731.c  --  WM8731 ALSA SoC Audio driver
@@ -4531,10 +4475,10 @@
 +MODULE_DESCRIPTION("ASoC WM8731 driver");
 +MODULE_AUTHOR("Richard Purdie");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8731.h
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm8731.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8731.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm8731.h
 @@ -0,0 +1,44 @@
 +/*
 + * wm8731.h  --  WM8731 Soc Audio driver
@@ -4580,10 +4524,10 @@
 +extern struct snd_soc_codec_device soc_codec_dev_wm8731;
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8750.c
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm8750.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8750.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm8750.c
 @@ -0,0 +1,1055 @@
 +/*
 + * wm8750.c -- WM8750 ALSA SoC audio driver
@@ -5640,10 +5584,10 @@
 +MODULE_DESCRIPTION("ASoC WM8750 driver");
 +MODULE_AUTHOR("Liam Girdwood");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8750.h
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm8750.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8750.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm8750.h
 @@ -0,0 +1,67 @@
 +/*
 + * Copyright 2005 Openedhand Ltd.
@@ -5712,11 +5656,11 @@
 +extern struct snd_soc_codec_device soc_codec_dev_wm8750;
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8753.c
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm8753.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8753.c	2007-02-06 15:55:20.000000000 +0100
-@@ -0,0 +1,1738 @@
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm8753.c
+@@ -0,0 +1,1782 @@
 +/*
 + * wm8753.c  --  WM8753 ALSA Soc Audio driver
 + *
@@ -6001,9 +5945,9 @@
 +
 +SOC_ENUM("Bass Boost", wm8753_enum[0]),
 +SOC_ENUM("Bass Filter", wm8753_enum[1]),
-+SOC_SINGLE("Bass Volume", WM8753_BASS, 0, 7, 1),
++SOC_SINGLE("Bass Volume", WM8753_BASS, 0, 15, 1),
 +
-+SOC_SINGLE("Treble Volume", WM8753_TREBLE, 0, 7, 0),
++SOC_SINGLE("Treble Volume", WM8753_TREBLE, 0, 15, 1),
 +SOC_ENUM("Treble Cut-off", wm8753_enum[2]),
 +
 +SOC_DOUBLE("Sidetone Capture Volume", WM8753_RECMIX1, 0, 4, 7, 1),
@@ -6215,9 +6159,9 @@
 +	&wm8753_line_right_controls),
 +SND_SOC_DAPM_MUX("Line Mono Mux", SND_SOC_NOPM, 0, 0,
 +	&wm8753_line_mono_controls),
-+SND_SOC_DAPM_MUX("Line Mixer", SND_SOC_NOPM, 0, 0,
++SND_SOC_DAPM_MUX("Line Mixer", WM8753_PWR2, 0, 0,
 +	&wm8753_line_mux_mix_controls),
-+SND_SOC_DAPM_MUX("Rx Mixer", SND_SOC_NOPM, 0, 0,
++SND_SOC_DAPM_MUX("Rx Mixer", WM8753_PWR2, 1, 0,
 +	&wm8753_rx_mux_mix_controls),
 +SND_SOC_DAPM_PGA("Mic 1 Volume", WM8753_PWR2, 8, 0, NULL, 0),
 +SND_SOC_DAPM_PGA("Mic 2 Volume", WM8753_PWR2, 7, 0, NULL, 0),
@@ -6683,7 +6627,7 @@
 +	struct snd_soc_codec *codec = codec_dai->codec;
 +	u16 voice, ioctl;
 +
-+	voice = wm8753_read_reg_cache(codec, WM8753_PCM) & 0x010f;
++	voice = wm8753_read_reg_cache(codec, WM8753_PCM) & 0x011f;
 +	ioctl = wm8753_read_reg_cache(codec, WM8753_IOCTL) & 0x015d;
 +
 +	/* set master/slave audio interface */
@@ -6700,18 +6644,40 @@
 +	}
 +
 +	/* clock inversion */
-+	switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
-+	case SND_SOC_DAIFMT_NB_NF:
++	switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
++	case SND_SOC_DAIFMT_DSP_A:
++	case SND_SOC_DAIFMT_DSP_B:
++		/* frame inversion not valid for DSP modes */
++		switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
++		case SND_SOC_DAIFMT_NB_NF:
++			break;
++		case SND_SOC_DAIFMT_IB_NF:
++			voice |= 0x0080;
++			break;
++		default:
++			return -EINVAL;
++		}
 +		break;
-+	case SND_SOC_DAIFMT_IB_IF:
-+		voice |= 0x0090;
++	case SND_SOC_DAIFMT_I2S:
++	case SND_SOC_DAIFMT_RIGHT_J:
++	case SND_SOC_DAIFMT_LEFT_J:
++		voice &= ~0x0010;
++		switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
++		case SND_SOC_DAIFMT_NB_NF:
++			break;
++		case SND_SOC_DAIFMT_IB_IF:
++			voice |= 0x0090;
++			break;
++		case SND_SOC_DAIFMT_IB_NF:
++			voice |= 0x0080;
++			break;
++		case SND_SOC_DAIFMT_NB_IF:
++			voice |= 0x0010;
++			break;
++		default:
++			return -EINVAL;
++		}
 +		break;
-+	case SND_SOC_DAIFMT_IB_NF:
-+		voice |= 0x0080;
-+		break;
-+	case SND_SOC_DAIFMT_NB_IF:
-+		voice |= 0x0010;
-+		break;
 +	default:
 +		return -EINVAL;
 +	}
@@ -6788,7 +6754,7 @@
 +	struct snd_soc_codec *codec = codec_dai->codec;
 +	u16 ioctl, hifi;
 +
-+	hifi = wm8753_read_reg_cache(codec, WM8753_HIFI) & 0x010f;
++	hifi = wm8753_read_reg_cache(codec, WM8753_HIFI) & 0x011f;
 +	ioctl = wm8753_read_reg_cache(codec, WM8753_IOCTL) & 0x00ae;
 +
 +	/* set master/slave audio interface */
@@ -6805,18 +6771,40 @@
 +	}
 +
 +	/* clock inversion */
-+	switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
-+	case SND_SOC_DAIFMT_NB_NF:
++	switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
++	case SND_SOC_DAIFMT_DSP_A:
++	case SND_SOC_DAIFMT_DSP_B:
++		/* frame inversion not valid for DSP modes */
++		switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
++		case SND_SOC_DAIFMT_NB_NF:
++			break;
++		case SND_SOC_DAIFMT_IB_NF:
++			hifi |= 0x0080;
++			break;
++		default:
++			return -EINVAL;
++		}
 +		break;
-+	case SND_SOC_DAIFMT_IB_IF:
-+		hifi |= 0x0090;
++	case SND_SOC_DAIFMT_I2S:
++	case SND_SOC_DAIFMT_RIGHT_J:
++	case SND_SOC_DAIFMT_LEFT_J:
++		hifi &= ~0x0010;
++		switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
++		case SND_SOC_DAIFMT_NB_NF:
++			break;
++		case SND_SOC_DAIFMT_IB_IF:
++			hifi |= 0x0090;
++			break;
++		case SND_SOC_DAIFMT_IB_NF:
++			hifi |= 0x0080;
++			break;
++		case SND_SOC_DAIFMT_NB_IF:
++			hifi |= 0x0010;
++			break;
++		default:
++			return -EINVAL;
++		}
 +		break;
-+	case SND_SOC_DAIFMT_IB_NF:
-+		hifi |= 0x0080;
-+		break;
-+	case SND_SOC_DAIFMT_NB_IF:
-+		hifi |= 0x0010;
-+		break;
 +	default:
 +		return -EINVAL;
 +	}
@@ -7455,10 +7443,10 @@
 +MODULE_DESCRIPTION("ASoC WM8753 driver");
 +MODULE_AUTHOR("Liam Girdwood");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8753.h
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm8753.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8753.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm8753.h
 @@ -0,0 +1,126 @@
 +/*
 + * wm8753.h  --  audio driver for WM8753
@@ -7586,10 +7574,10 @@
 +extern struct snd_soc_codec_device soc_codec_dev_wm8753;
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8772.c
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm8772.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8772.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm8772.c
 @@ -0,0 +1,603 @@
 +/*
 + * wm8772.c  --  WM8772 ALSA Soc Audio driver
@@ -8194,10 +8182,10 @@
 +MODULE_DESCRIPTION("ASoC WM8772 driver");
 +MODULE_AUTHOR("Liam Girdwood");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8772.h
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm8772.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8772.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm8772.h
 @@ -0,0 +1,46 @@
 +/*
 + * wm8772.h  --  audio driver for WM8772
@@ -8245,10 +8233,10 @@
 +extern struct snd_soc_codec_device soc_codec_dev_wm8772;
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8971.c
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm8971.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8971.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm8971.c
 @@ -0,0 +1,971 @@
 +/*
 + * wm8971.c  --  WM8971 ALSA SoC Audio driver
@@ -9221,10 +9209,10 @@
 +MODULE_DESCRIPTION("ASoC WM8971 driver");
 +MODULE_AUTHOR("Lab126");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8971.h
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm8971.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8971.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm8971.h
 @@ -0,0 +1,63 @@
 +/*
 + * wm8971.h  --  audio driver for WM8971
@@ -9289,10 +9277,10 @@
 +extern struct snd_soc_codec_device soc_codec_dev_wm8971;
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8974.c
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm8974.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8974.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm8974.c
 @@ -0,0 +1,873 @@
 +/*
 + * wm8974.c  --  WM8974 ALSA Soc Audio driver
@@ -10167,10 +10155,10 @@
 +MODULE_DESCRIPTION("ASoC WM8974 driver");
 +MODULE_AUTHOR("Liam Girdwood");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8974.h
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm8974.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8974.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm8974.h
 @@ -0,0 +1,104 @@
 +/*
 + * wm8974.h  --  WM8974 Soc Audio driver
@@ -10276,10 +10264,10 @@
 +extern struct snd_soc_codec_device soc_codec_dev_wm8974;
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm9712.c
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm9712.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm9712.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm9712.c
 @@ -0,0 +1,771 @@
 +/*
 + * wm9712.c  --  ALSA Soc WM9712 codec support
@@ -11052,10 +11040,10 @@
 +MODULE_DESCRIPTION("ASoC WM9711/WM9712 driver");
 +MODULE_AUTHOR("Liam Girdwood");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm9712.h
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm9712.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm9712.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm9712.h
 @@ -0,0 +1,14 @@
 +/*
 + * wm9712.h  --  WM9712 Soc Audio driver
@@ -11071,10 +11059,10 @@
 +extern struct snd_soc_codec_device soc_codec_dev_wm9712;
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm9713.c
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm9713.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm9713.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm9713.c
 @@ -0,0 +1,1220 @@
 +/*
 + * wm9713.c  --  ALSA Soc WM9713 codec support
@@ -12296,10 +12284,10 @@
 +MODULE_DESCRIPTION("ASoC WM9713/WM9714 driver");
 +MODULE_AUTHOR("Liam Girdwood");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm9713.h
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm9713.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm9713.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm9713.h
 @@ -0,0 +1,51 @@
 +/*
 + * wm9713.h  --  WM9713 Soc Audio driver
@@ -12352,10 +12340,10 @@
 +int wm9713_reset(struct snd_soc_codec *codec,  int try_warm);
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/soc/pxa/Kconfig
+Index: linux-2.6-asoc-pxa/sound/soc/pxa/Kconfig
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/pxa/Kconfig	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/pxa/Kconfig
 @@ -0,0 +1,143 @@
 +menu "SoC Audio for the Intel PXA2xx"
 +
@@ -12500,10 +12488,10 @@
 +	  with the tlv320.
 +
 +endmenu
-Index: linux-2.6.17.14-fic4.test/sound/soc/pxa/Makefile
+Index: linux-2.6-asoc-pxa/sound/soc/pxa/Makefile
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/pxa/Makefile	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/pxa/Makefile
 @@ -0,0 +1,39 @@
 +# PXA Platform Support
 +snd-soc-pxa2xx-objs := pxa2xx-pcm.o
@@ -12544,10 +12532,10 @@
 +obj-$(CONFIG_SND_PXA2xx_SOC_SPITZ) += snd-soc-spitz.o
 +obj-$(CONFIG_SND_PXA2xx_SOC_MAGICIAN) += snd-soc-magician.o
 +obj-$(CONFIG_SND_PXA2xx_SOC_AMESOM_TLV320) += snd-soc-amesom-tlv320.o
-Index: linux-2.6.17.14-fic4.test/sound/soc/pxa/corgi.c
+Index: linux-2.6-asoc-pxa/sound/soc/pxa/corgi.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/pxa/corgi.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/pxa/corgi.c
 @@ -0,0 +1,383 @@
 +/*
 + * corgi.c  --  SoC audio for Corgi
@@ -12932,10 +12920,10 @@
 +MODULE_AUTHOR("Richard Purdie");
 +MODULE_DESCRIPTION("ALSA SoC Corgi");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/pxa/mainstone.c
+Index: linux-2.6-asoc-pxa/sound/soc/pxa/mainstone.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/pxa/mainstone.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/pxa/mainstone.c
 @@ -0,0 +1,127 @@
 +/*
 + * mainstone.c  --  SoC audio for Mainstone
@@ -13064,10 +13052,10 @@
 +MODULE_AUTHOR("Liam Girdwood, liam.girdwood at wolfsonmicro.com, www.wolfsonmicro.com");
 +MODULE_DESCRIPTION("ALSA SoC Mainstone");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/pxa/mainstone_baseband.c
+Index: linux-2.6-asoc-pxa/sound/soc/pxa/mainstone_baseband.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/pxa/mainstone_baseband.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/pxa/mainstone_baseband.c
 @@ -0,0 +1,212 @@
 +/*
 + * mainstone_baseband.c
@@ -13281,10 +13269,10 @@
 +MODULE_AUTHOR("Liam Girdwood, liam.girdwood at wolfsonmicro.com, www.wolfsonmicro.com");
 +MODULE_DESCRIPTION("Mainstone Example Baseband PCM Interface");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/pxa/mainstone_bluetooth.c
+Index: linux-2.6-asoc-pxa/sound/soc/pxa/mainstone_bluetooth.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/pxa/mainstone_bluetooth.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/pxa/mainstone_bluetooth.c
 @@ -0,0 +1,371 @@
 +/*
 + * mainstone_bluetooth.c
@@ -13657,10 +13645,10 @@
 +MODULE_AUTHOR("Liam Girdwood, liam.girdwood at wolfsonmicro.com, www.wolfsonmicro.com");
 +MODULE_DESCRIPTION("Mainstone Example Bluetooth PCM Interface");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/pxa/mainstone_wm8731.c
+Index: linux-2.6-asoc-pxa/sound/soc/pxa/mainstone_wm8731.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/pxa/mainstone_wm8731.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/pxa/mainstone_wm8731.c
 @@ -0,0 +1,203 @@
 +/*
 + * mainstone.c  --  SoC audio for Mainstone
@@ -13865,10 +13853,10 @@
 +MODULE_AUTHOR("Liam Girdwood, liam.girdwood at wolfsonmicro.com, www.wolfsonmicro.com");
 +MODULE_DESCRIPTION("ALSA SoC WM8731 Mainstone");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/pxa/mainstone_wm8753.c
+Index: linux-2.6-asoc-pxa/sound/soc/pxa/mainstone_wm8753.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/pxa/mainstone_wm8753.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/pxa/mainstone_wm8753.c
 @@ -0,0 +1,547 @@
 +/*
 + * mainstone.c  --  SoC audio for Mainstone
@@ -14417,10 +14405,10 @@
 +MODULE_AUTHOR("Liam Girdwood, liam.girdwood at wolfsonmicro.com, www.wolfsonmicro.com");
 +MODULE_DESCRIPTION("ALSA SoC WM8753 Mainstone");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/pxa/mainstone_wm8974.c
+Index: linux-2.6-asoc-pxa/sound/soc/pxa/mainstone_wm8974.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/pxa/mainstone_wm8974.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/pxa/mainstone_wm8974.c
 @@ -0,0 +1,104 @@
 +/*
 + * mainstone.c  --  SoC audio for Mainstone
@@ -14526,10 +14514,10 @@
 +MODULE_AUTHOR("Liam Girdwood, liam.girdwood at wolfsonmicro.com, www.wolfsonmicro.com");
 +MODULE_DESCRIPTION("ALSA SoC Mainstone");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/pxa/mainstone_wm9712.c
+Index: linux-2.6-asoc-pxa/sound/soc/pxa/mainstone_wm9712.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/pxa/mainstone_wm9712.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/pxa/mainstone_wm9712.c
 @@ -0,0 +1,172 @@
 +/*
 + * mainstone.c  --  SoC audio for Mainstone
@@ -14703,10 +14691,10 @@
 +MODULE_AUTHOR("Liam Girdwood, liam.girdwood at wolfsonmicro.com, www.wolfsonmicro.com");
 +MODULE_DESCRIPTION("ALSA SoC WM9712 Mainstone");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/pxa/mainstone_wm9713.c
+Index: linux-2.6-asoc-pxa/sound/soc/pxa/mainstone_wm9713.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/pxa/mainstone_wm9713.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/pxa/mainstone_wm9713.c
 @@ -0,0 +1,318 @@
 +/*
 + * mainstone.c  --  SoC audio for Mainstone
@@ -15026,10 +15014,10 @@
 +MODULE_AUTHOR("Liam Girdwood, liam.girdwood at wolfsonmicro.com, www.wolfsonmicro.com");
 +MODULE_DESCRIPTION("ALSA SoC WM9713 Mainstone");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/pxa/poodle.c
+Index: linux-2.6-asoc-pxa/sound/soc/pxa/poodle.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/pxa/poodle.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/pxa/poodle.c
 @@ -0,0 +1,352 @@
 +/*
 + * poodle.c  --  SoC audio for Poodle
@@ -15383,10 +15371,10 @@
 +MODULE_AUTHOR("Richard Purdie");
 +MODULE_DESCRIPTION("ALSA SoC Poodle");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/pxa/pxa2xx-ac97.c
+Index: linux-2.6-asoc-pxa/sound/soc/pxa/pxa2xx-ac97.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/pxa/pxa2xx-ac97.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/pxa/pxa2xx-ac97.c
 @@ -0,0 +1,431 @@
 +/*
 + * linux/sound/pxa2xx-ac97.c -- AC97 support for the Intel PXA2xx chip.
@@ -15819,10 +15807,10 @@
 +MODULE_AUTHOR("Nicolas Pitre");
 +MODULE_DESCRIPTION("AC97 driver for the Intel PXA2xx chip");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/pxa/pxa2xx-i2s.c
+Index: linux-2.6-asoc-pxa/sound/soc/pxa/pxa2xx-i2s.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/pxa/pxa2xx-i2s.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/pxa/pxa2xx-i2s.c
 @@ -0,0 +1,318 @@
 +/*
 + * pxa2xx-i2s.c  --  ALSA Soc Audio Layer
@@ -16142,10 +16130,10 @@
 +MODULE_AUTHOR("Liam Girdwood, liam.girdwood at wolfsonmicro.com, www.wolfsonmicro.com");
 +MODULE_DESCRIPTION("pxa2xx I2S SoC Interface");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/pxa/pxa2xx-pcm.c
+Index: linux-2.6-asoc-pxa/sound/soc/pxa/pxa2xx-pcm.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/pxa/pxa2xx-pcm.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/pxa/pxa2xx-pcm.c
 @@ -0,0 +1,372 @@
 +/*
 + * linux/sound/arm/pxa2xx-pcm.c -- ALSA PCM interface for the Intel PXA2xx chip
@@ -16519,10 +16507,10 @@
 +MODULE_AUTHOR("Nicolas Pitre");
 +MODULE_DESCRIPTION("Intel PXA2xx PCM DMA module");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/pxa/pxa2xx-pcm.h
+Index: linux-2.6-asoc-pxa/sound/soc/pxa/pxa2xx-pcm.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/pxa/pxa2xx-pcm.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/pxa/pxa2xx-pcm.h
 @@ -0,0 +1,34 @@
 +/*
 + * linux/sound/arm/pxa2xx-pcm.h -- ALSA PCM interface for the Intel PXA2xx chip
@@ -16558,10 +16546,10 @@
 +extern struct snd_soc_platform pxa2xx_soc_platform;
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/soc/pxa/pxa2xx-ssp.c
+Index: linux-2.6-asoc-pxa/sound/soc/pxa/pxa2xx-ssp.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/pxa/pxa2xx-ssp.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/pxa/pxa2xx-ssp.c
 @@ -0,0 +1,666 @@
 +/*
 + * pxa2xx-ssp.c  --  ALSA Soc Audio Layer
@@ -17229,10 +17217,10 @@
 +MODULE_AUTHOR("Liam Girdwood, liam.girdwood at wolfsonmicro.com, www.wolfsonmicro.com");
 +MODULE_DESCRIPTION("pxa2xx SSP/PCM SoC Interface");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/pxa/spitz.c
+Index: linux-2.6-asoc-pxa/sound/soc/pxa/spitz.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/pxa/spitz.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/pxa/spitz.c
 @@ -0,0 +1,394 @@
 +/*
 + * spitz.c  --  SoC audio for Sharp SL-Cxx00 models Spitz, Borzoi and Akita
@@ -17628,10 +17616,10 @@
 +MODULE_AUTHOR("Richard Purdie");
 +MODULE_DESCRIPTION("ALSA SoC Spitz");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/pxa/tosa.c
+Index: linux-2.6-asoc-pxa/sound/soc/pxa/tosa.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/pxa/tosa.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/pxa/tosa.c
 @@ -0,0 +1,289 @@
 +/*
 + * tosa.c  --  SoC audio for Tosa
@@ -17922,10 +17910,10 @@
 +MODULE_AUTHOR("Richard Purdie");
 +MODULE_DESCRIPTION("ALSA SoC Tosa");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/soc-dapm.c
+Index: linux-2.6-asoc-pxa/sound/soc/soc-dapm.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/soc-dapm.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/soc-dapm.c
 @@ -0,0 +1,1329 @@
 +/*
 + * soc-dapm.c  --  ALSA SoC Dynamic Audio Power Management
@@ -19256,10 +19244,10 @@
 +MODULE_AUTHOR("Liam Girdwood, liam.girdwood at wolfsonmicro.com, www.wolfsonmicro.com");
 +MODULE_DESCRIPTION("Dynamic Audio Power Management core for ALSA SoC");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/soc-core.c
+Index: linux-2.6-asoc-pxa/sound/soc/soc-core.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/soc-core.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/soc-core.c
 @@ -0,0 +1,1587 @@
 +/*
 + * soc-core.c  --  ALSA SoC Audio Layer
@@ -20848,10 +20836,10 @@
 +MODULE_AUTHOR("Liam Girdwood, liam.girdwood at wolfsonmicro.com, www.wolfsonmicro.com");
 +MODULE_DESCRIPTION("ALSA SoC Core");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/at91/Kconfig
+Index: linux-2.6-asoc-pxa/sound/soc/at91/Kconfig
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/at91/Kconfig	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/at91/Kconfig
 @@ -0,0 +1,32 @@
 +menu "SoC Audio for the Atmel AT91"
 +
@@ -20885,10 +20873,10 @@
 +	  and LRC signals on Endrelia boards.
 +
 +endmenu
-Index: linux-2.6.17.14-fic4.test/sound/soc/at91/Makefile
+Index: linux-2.6-asoc-pxa/sound/soc/at91/Makefile
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/at91/Makefile	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/at91/Makefile
 @@ -0,0 +1,11 @@
 +# AT91 Platform Support
 +snd-soc-at91-objs := at91-pcm.o
@@ -20901,10 +20889,10 @@
 +snd-soc-eti-b1-wm8731-objs := eti_b1_wm8731.o
 +
 +obj-$(CONFIG_SND_AT91_SOC_ETI_B1_WM8731) += snd-soc-eti-b1-wm8731.o
-Index: linux-2.6.17.14-fic4.test/sound/soc/imx/imx-ssi.c
+Index: linux-2.6-asoc-pxa/sound/soc/imx/imx-ssi.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/imx/imx-ssi.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/imx/imx-ssi.c
 @@ -0,0 +1,591 @@
 +/*
 + * imx-ssi.c  --  SSI driver for Freescale IMX
@@ -21497,10 +21485,10 @@
 +MODULE_AUTHOR("Liam Girdwood, liam.girdwood at wolfsonmicro.com, www.wolfsonmicro.com");
 +MODULE_DESCRIPTION("i.MX ASoC I2S driver");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/imx/Kconfig
+Index: linux-2.6-asoc-pxa/sound/soc/imx/Kconfig
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/imx/Kconfig	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/imx/Kconfig
 @@ -0,0 +1,31 @@
 +menu "SoC Audio for the Freescale i.MX"
 +
@@ -21533,10 +21521,10 @@
 +	  with the WM8753.
 +
 +endmenu
-Index: linux-2.6.17.14-fic4.test/sound/soc/imx/Makefile
+Index: linux-2.6-asoc-pxa/sound/soc/imx/Makefile
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/imx/Makefile	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/imx/Makefile
 @@ -0,0 +1,18 @@
 +# i.MX Platform Support
 +snd-soc-imx21-objs := imx21-pcm.o
@@ -21556,23 +21544,23 @@
 +snd-soc-mx21ads-wm8731-objs := mx21ads_wm8731.o
 +obj-$(CONFIG_SND_SOC_MX21ADS_WM8731) += snd-soc-mx21ads-wm8731.o
 +
-Index: linux-2.6.17.14-fic4.test/sound/Makefile
+Index: linux-2.6-asoc-pxa/sound/Makefile
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/sound/Makefile	2007-02-06 15:38:07.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/sound/Makefile	2007-02-06 15:55:34.000000000 +0100
-@@ -4,7 +4,7 @@
- obj-$(CONFIG_SOUND) += soundcore.o
+--- linux-2.6-asoc-pxa.orig/sound/Makefile
++++ linux-2.6-asoc-pxa/sound/Makefile
+@@ -5,7 +5,7 @@ obj-$(CONFIG_SOUND) += soundcore.o
+ obj-$(CONFIG_SOUND_PRIME) += sound_firmware.o
  obj-$(CONFIG_SOUND_PRIME) += oss/
  obj-$(CONFIG_DMASOUND) += oss/
 -obj-$(CONFIG_SND) += core/ i2c/ drivers/ isa/ pci/ ppc/ arm/ synth/ usb/ sparc/ parisc/ pcmcia/ mips/
 +obj-$(CONFIG_SND) += core/ i2c/ drivers/ isa/ pci/ ppc/ arm/ synth/ usb/ sparc/ parisc/ pcmcia/ mips/ soc/
+ obj-$(CONFIG_SND_AOA) += aoa/
  
- ifeq ($(CONFIG_SND),y)
-   obj-y += last.o
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8711.c
+ # This one must be compilable even if sound is configured out
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm8711.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8711.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm8711.c
 @@ -0,0 +1,715 @@
 +/*
 + * wm8711.c  --  WM8711 ALSA SoC Audio driver
@@ -22289,10 +22277,10 @@
 +MODULE_DESCRIPTION("ASoC WM8711 driver");
 +MODULE_AUTHOR("Mike Arthur");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8711.h
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm8711.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8711.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm8711.h
 @@ -0,0 +1,42 @@
 +/*
 + * wm8711.h  --  WM8711 Soc Audio driver
@@ -22336,10 +22324,10 @@
 +extern struct snd_soc_codec_device soc_codec_dev_wm8711;
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8980.c
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm8980.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8980.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm8980.c
 @@ -0,0 +1,923 @@
 +/*
 + * wm8980.c  --  WM8980 ALSA Soc Audio driver
@@ -23264,10 +23252,10 @@
 +MODULE_DESCRIPTION("ASoC WM8980 driver");
 +MODULE_AUTHOR("Mike Arthur");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8980.h
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm8980.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8980.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm8980.h
 @@ -0,0 +1,116 @@
 +/*
 + * wm8980.h  --  WM8980 Soc Audio driver
@@ -23385,10 +23373,10 @@
 +extern struct snd_soc_codec_device soc_codec_dev_wm8980;
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/soc/at91/eti_b1_wm8731.c
+Index: linux-2.6-asoc-pxa/sound/soc/at91/eti_b1_wm8731.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/at91/eti_b1_wm8731.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/at91/eti_b1_wm8731.c
 @@ -0,0 +1,375 @@
 +/*
 + * eti_b1_wm8731  --  SoC audio for AT91RM9200-based Endrelia ETI_B1 board.
@@ -23765,10 +23753,10 @@
 +MODULE_AUTHOR("Frank Mandarino <fmandarino at endrelia.com>");
 +MODULE_DESCRIPTION("ALSA SoC ETI-B1-WM8731");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8510.c
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm8510.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8510.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm8510.c
 @@ -0,0 +1,860 @@
 +/*
 + * wm8510.c  --  WM8510 ALSA Soc Audio driver
@@ -24630,10 +24618,10 @@
 +MODULE_DESCRIPTION("ASoC WM8510 driver");
 +MODULE_AUTHOR("Liam Girdwood");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8510.h
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm8510.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8510.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm8510.h
 @@ -0,0 +1,103 @@
 +/*
 + * wm8510.h  --  WM8510 Soc Audio driver
@@ -24738,10 +24726,10 @@
 +extern struct snd_soc_codec_device soc_codec_dev_wm8510;
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/soc/imx/imx-ac97.c
+Index: linux-2.6-asoc-pxa/sound/soc/imx/imx-ac97.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/imx/imx-ac97.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/imx/imx-ac97.c
 @@ -0,0 +1,222 @@
 +/*
 + * imx-ssi.c  --  SSI driver for Freescale IMX
@@ -24965,23 +24953,23 @@
 +MODULE_AUTHOR("Liam Girdwood, liam.girdwood at wolfsonmicro.com, www.wolfsonmicro.com");
 +MODULE_DESCRIPTION("i.MX ASoC AC97 driver");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/include/linux/i2c-id.h
+Index: linux-2.6-asoc-pxa/include/linux/i2c-id.h
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/include/linux/i2c-id.h	2007-02-06 15:38:06.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/include/linux/i2c-id.h	2007-02-06 15:56:03.000000000 +0100
-@@ -112,6 +112,8 @@
- #define I2C_DRIVERID_X1205	82	/* Xicor/Intersil X1205 RTC	*/
- #define I2C_DRIVERID_PCF8563	83	/* Philips PCF8563 RTC		*/
- #define I2C_DRIVERID_RS5C372	84	/* Ricoh RS5C372 RTC		*/
-+#define I2C_DRIVERID_WM8731	89	/* Wolfson WM8731 audio codec */
-+#define I2C_DRIVERID_WM8750	90	/* Wolfson WM8750 audio codec */
+--- linux-2.6-asoc-pxa.orig/include/linux/i2c-id.h
++++ linux-2.6-asoc-pxa/include/linux/i2c-id.h
+@@ -115,6 +115,8 @@
+ #define I2C_DRIVERID_KS0127	86	/* Samsung ks0127 video decoder */
+ #define I2C_DRIVERID_TLV320AIC23B 87	/* TI TLV320AIC23B audio codec  */
+ #define I2C_DRIVERID_ISL1208	88	/* Intersil ISL1208 RTC		*/
++#define I2C_DRIVERID_WM8731		89	/* Wolfson WM8731 audio codec */
++#define I2C_DRIVERID_WM8750		90	/* Wolfson WM8750 audio codec */
  
  #define I2C_DRIVERID_I2CDEV	900
  #define I2C_DRIVERID_ARP        902    /* SMBus ARP Client              */
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8976.c
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm8976.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8976.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm8976.c
 @@ -0,0 +1,885 @@
 +/*
 + * wm8976.c  --  WM8976 ALSA Soc Audio driver
@@ -25868,10 +25856,10 @@
 +MODULE_DESCRIPTION("ASoC WM8976 driver");
 +MODULE_AUTHOR("Graeme Gregory");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8976.h
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm8976.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8976.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm8976.h
 @@ -0,0 +1,112 @@
 +/*
 + * wm8976.h  --  WM8976 Soc Audio driver
@@ -25985,10 +25973,10 @@
 +extern struct snd_soc_codec_device soc_codec_dev_wm8976;
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/soc/imx/imx21-pcm.c
+Index: linux-2.6-asoc-pxa/sound/soc/imx/imx21-pcm.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/imx/imx21-pcm.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/imx/imx21-pcm.c
 @@ -0,0 +1,454 @@
 +/*
 + * linux/sound/arm/mxc-pcm.c -- ALSA SoC interface for the Freescale i.MX CPU's
@@ -26444,10 +26432,10 @@
 +MODULE_AUTHOR("Liam Girdwood");
 +MODULE_DESCRIPTION("Freescale i.MX PCM DMA module");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/imx/imx21-pcm.h
+Index: linux-2.6-asoc-pxa/sound/soc/imx/imx21-pcm.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/imx/imx21-pcm.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/imx/imx21-pcm.h
 @@ -0,0 +1,237 @@
 +/*
 + * mxc-pcm.h :- ASoC platform header for Freescale i.MX
@@ -26686,10 +26674,10 @@
 +
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/soc/imx/imx31-pcm.c
+Index: linux-2.6-asoc-pxa/sound/soc/imx/imx31-pcm.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/imx/imx31-pcm.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/imx/imx31-pcm.c
 @@ -0,0 +1,417 @@
 +/*
 + * linux/sound/arm/mxc-pcm.c -- ALSA SoC interface for the Freescale i.MX CPU's
@@ -27108,10 +27096,10 @@
 +MODULE_AUTHOR("Liam Girdwood");
 +MODULE_DESCRIPTION("Freescale i.MX31 PCM DMA module");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/imx/imx31-pcm.h
+Index: linux-2.6-asoc-pxa/sound/soc/imx/imx31-pcm.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/imx/imx31-pcm.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/imx/imx31-pcm.h
 @@ -0,0 +1,241 @@
 +/*
 + * mxc-pcm.h :- ASoC platform header for Freescale i.MX
@@ -27354,10 +27342,10 @@
 +extern struct snd_ac97_bus_ops mxc_ac97_ops;
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/soc/pxa/magician.c
+Index: linux-2.6-asoc-pxa/sound/soc/pxa/magician.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/pxa/magician.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/pxa/magician.c
 @@ -0,0 +1,563 @@
 +/*
 + * SoC audio for HTC Magician
@@ -27922,10 +27910,10 @@
 +MODULE_AUTHOR("Philipp Zabel");
 +MODULE_DESCRIPTION("ALSA SoC Magician");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/templates/template-ac97.c
+Index: linux-2.6-asoc-pxa/sound/soc/templates/template-ac97.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/templates/template-ac97.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/templates/template-ac97.c
 @@ -0,0 +1,270 @@
 +/*
 + * ltemplate-ac97.c -- AC97 support for the xxx chip.
@@ -28197,10 +28185,10 @@
 +};
 +EXPORT_SYMBOL_GPL(template_ac97_dai);
 +
-Index: linux-2.6.17.14-fic4.test/sound/soc/templates/template-codec.c
+Index: linux-2.6-asoc-pxa/sound/soc/templates/template-codec.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/templates/template-codec.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/templates/template-codec.c
 @@ -0,0 +1,784 @@
 +/*
 + * template-codec.c  --  Template Codec  Audio driver
@@ -28986,10 +28974,10 @@
 +
 +EXPORT_SYMBOL_GPL(soc_codec_dev_template_codec);
 +
-Index: linux-2.6.17.14-fic4.test/sound/soc/templates/template-i2s.c
+Index: linux-2.6-asoc-pxa/sound/soc/templates/template-i2s.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/templates/template-i2s.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/templates/template-i2s.c
 @@ -0,0 +1,223 @@
 +/*
 + *  This program is free software; you can redistribute  it and/or modify it
@@ -29214,10 +29202,10 @@
 +};
 +
 +EXPORT_SYMBOL_GPL(template_i2s_dai);
-Index: linux-2.6.17.14-fic4.test/sound/soc/templates/template-pcm.c
+Index: linux-2.6-asoc-pxa/sound/soc/templates/template-pcm.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/templates/template-pcm.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/templates/template-pcm.c
 @@ -0,0 +1,166 @@
 +/*
 + * This program is free software; you can redistribute it and/or modify
@@ -29385,10 +29373,10 @@
 +	.pcm_free	= template_pcm_free_dma_buffers,
 +};
 +EXPORT_SYMBOL_GPL(template_soc_platform);
-Index: linux-2.6.17.14-fic4.test/sound/soc/templates/template-pcm.h
+Index: linux-2.6-asoc-pxa/sound/soc/templates/template-pcm.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/templates/template-pcm.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/templates/template-pcm.h
 @@ -0,0 +1,19 @@
 +/*
 + * This program is free software; you can redistribute it and/or modify
@@ -29409,10 +29397,10 @@
 +extern struct snd_ac97_bus_ops tempalte_ac97_ops;
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/soc/templates/template-codec.h
+Index: linux-2.6-asoc-pxa/sound/soc/templates/template-codec.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/templates/template-codec.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/templates/template-codec.h
 @@ -0,0 +1,21 @@
 +/*
 + * This program is free software; you can redistribute it and/or modify
@@ -29435,10 +29423,10 @@
 +extern struct snd_soc_codec_device soc_codec_dev_template_codec;
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/soc/templates/template-machine.c
+Index: linux-2.6-asoc-pxa/sound/soc/templates/template-machine.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/templates/template-machine.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/templates/template-machine.c
 @@ -0,0 +1,161 @@
 +/*
 + *  This program is free software; you can redistribute  it and/or modify it
@@ -29601,10 +29589,10 @@
 +module_init(template_init);
 +module_exit(template_exit);
 +
-Index: linux-2.6.17.14-fic4.test/sound/soc/at91/at91-i2s.c
+Index: linux-2.6-asoc-pxa/sound/soc/at91/at91-i2s.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/at91/at91-i2s.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/at91/at91-i2s.c
 @@ -0,0 +1,720 @@
 +/*
 + * at91-i2s.c  --  ALSA SoC I2S Audio Layer Platform driver
@@ -30326,10 +30314,10 @@
 +MODULE_AUTHOR("Frank Mandarino, fmandarino at endrelia.com, www.endrelia.com");
 +MODULE_DESCRIPTION("AT91 I2S ASoC Interface");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/at91/at91-pcm.c
+Index: linux-2.6-asoc-pxa/sound/soc/at91/at91-pcm.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/at91/at91-pcm.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/at91/at91-pcm.c
 @@ -0,0 +1,432 @@
 +/*
 + * at91-pcm.c -- ALSA PCM interface for the Atmel AT91 SoC
@@ -30763,10 +30751,10 @@
 +MODULE_AUTHOR("Frank Mandarino <fmandarino at endrelia.com>");
 +MODULE_DESCRIPTION("Atmel AT91 PCM module");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/at91/at91-pcm.h
+Index: linux-2.6-asoc-pxa/sound/soc/at91/at91-pcm.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/at91/at91-pcm.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/at91/at91-pcm.h
 @@ -0,0 +1,72 @@
 +/*
 + * at91-pcm.h - ALSA PCM interface for the Atmel AT91 SoC
@@ -30840,10 +30828,10 @@
 +#define at91_ssc_write(a,v)	__raw_writel((v),(a))
 +
 +#endif /* _AT91_PCM_H */
-Index: linux-2.6.17.14-fic4.test/sound/soc/pxa/pxa2xx-ssp.h
+Index: linux-2.6-asoc-pxa/sound/soc/pxa/pxa2xx-ssp.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/pxa/pxa2xx-ssp.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/pxa/pxa2xx-ssp.h
 @@ -0,0 +1,43 @@
 +/*
 + * linux/sound/arm/pxa2xx-ssp.h
@@ -30888,10 +30876,10 @@
 +extern struct snd_soc_cpu_dai pxa_ssp_dai[3];
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/soc/pxa/pxa2xx-ac97.h
+Index: linux-2.6-asoc-pxa/sound/soc/pxa/pxa2xx-ac97.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/pxa/pxa2xx-ac97.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/pxa/pxa2xx-ac97.h
 @@ -0,0 +1,22 @@
 +/*
 + * linux/sound/arm/pxa2xx-ac97.h
@@ -30915,10 +30903,10 @@
 +extern struct snd_ac97_bus_ops pxa2xx_ac97_ops;
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/soc/pxa/pxa2xx-i2s.h
+Index: linux-2.6-asoc-pxa/sound/soc/pxa/pxa2xx-i2s.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/pxa/pxa2xx-i2s.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/pxa/pxa2xx-i2s.h
 @@ -0,0 +1,20 @@
 +/*
 + * linux/sound/arm/pxa2xx-i2s.h
@@ -30940,10 +30928,10 @@
 +extern struct snd_soc_cpu_dai pxa_i2s_dai;
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/soc/s3c24xx/Kconfig
+Index: linux-2.6-asoc-pxa/sound/soc/s3c24xx/Kconfig
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/s3c24xx/Kconfig	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/s3c24xx/Kconfig
 @@ -0,0 +1,31 @@
 +menu "SoC Audio for the Samsung S3C24XX"
 +
@@ -30976,10 +30964,10 @@
 +	  with the WM8753.
 +endmenu
 +
-Index: linux-2.6.17.14-fic4.test/sound/soc/s3c24xx/Makefile
+Index: linux-2.6-asoc-pxa/sound/soc/s3c24xx/Makefile
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/s3c24xx/Makefile	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/s3c24xx/Makefile
 @@ -0,0 +1,13 @@
 +# S3c24XX Platform Support
 +snd-soc-s3c24xx-objs := s3c24xx-pcm.o
@@ -30994,10 +30982,10 @@
 +
 +obj-$(CONFIG_SND_S3C24XX_SOC_SMDK2440) += snd-soc-smdk2440.o
 +obj-$(CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753) += snd-soc-neo1973-wm8753.o
-Index: linux-2.6.17.14-fic4.test/sound/soc/s3c24xx/s3c24xx-i2s.c
+Index: linux-2.6-asoc-pxa/sound/soc/s3c24xx/s3c24xx-i2s.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/s3c24xx/s3c24xx-i2s.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/s3c24xx/s3c24xx-i2s.c
 @@ -0,0 +1,439 @@
 +/*
 + * s3c24xx-i2s.c  --  ALSA Soc Audio Layer
@@ -31174,7 +31162,7 @@
 +static int s3c24xx_snd_lrsync(void)
 +{
 +	u32 iiscon;
-+	long timeout = jiffies + msecs_to_jiffies(5);
++	unsigned long timeout = jiffies + msecs_to_jiffies(5);
 +
 +	DBG("Entered %s\n", __FUNCTION__);
 +
@@ -31438,10 +31426,10 @@
 +MODULE_AUTHOR("Ben Dooks, <ben at simtec.co.uk>");
 +MODULE_DESCRIPTION("s3c24xx I2S SoC Interface");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/s3c24xx/s3c24xx-i2s.h
+Index: linux-2.6-asoc-pxa/sound/soc/s3c24xx/s3c24xx-i2s.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/s3c24xx/s3c24xx-i2s.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/s3c24xx/s3c24xx-i2s.h
 @@ -0,0 +1,35 @@
 +/*
 + * s3c24xx-i2s.c  --  ALSA Soc Audio Layer
@@ -31478,11 +31466,11 @@
 +u32 s3c24xx_i2s_get_clockrate(void);
 +
 +#endif /*S3C24XXI2S_H_*/
-Index: linux-2.6.17.14-fic4.test/sound/soc/s3c24xx/s3c24xx-pcm.c
+Index: linux-2.6-asoc-pxa/sound/soc/s3c24xx/s3c24xx-pcm.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/s3c24xx/s3c24xx-pcm.c	2007-02-06 15:55:20.000000000 +0100
-@@ -0,0 +1,467 @@
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/s3c24xx/s3c24xx-pcm.c
+@@ -0,0 +1,462 @@
 +/*
 + * s3c24xx-pcm.c  --  ALSA Soc Audio Layer
 + *
@@ -31531,14 +31519,14 @@
 +#endif
 +
 +static const struct snd_pcm_hardware s3c24xx_pcm_hardware = {
-+	.info				= SNDRV_PCM_INFO_INTERLEAVED |
-+				    	SNDRV_PCM_INFO_BLOCK_TRANSFER |
-+				    	SNDRV_PCM_INFO_MMAP |
-+				    	SNDRV_PCM_INFO_MMAP_VALID,
-+	.formats			= SNDRV_PCM_FMTBIT_S16_LE |
-+				    	SNDRV_PCM_FMTBIT_U16_LE |
-+				    	SNDRV_PCM_FMTBIT_U8 |
-+				    	SNDRV_PCM_FMTBIT_S8,
++	.info			= SNDRV_PCM_INFO_INTERLEAVED |
++				    SNDRV_PCM_INFO_BLOCK_TRANSFER |
++				    SNDRV_PCM_INFO_MMAP |
++				    SNDRV_PCM_INFO_MMAP_VALID,
++	.formats		= SNDRV_PCM_FMTBIT_S16_LE |
++				    SNDRV_PCM_FMTBIT_U16_LE |
++				    SNDRV_PCM_FMTBIT_U8 |
++				    SNDRV_PCM_FMTBIT_S8,
 +	.channels_min		= 2,
 +	.channels_max		= 2,
 +	.buffer_bytes_max	= 128*1024,
@@ -31546,19 +31534,19 @@
 +	.period_bytes_max	= PAGE_SIZE*2,
 +	.periods_min		= 2,
 +	.periods_max		= 128,
-+	.fifo_size			= 32,
++	.fifo_size		= 32,
 +};
 +
 +struct s3c24xx_runtime_data {
-+	spinlock_t					lock;
-+	int							state;
-+	unsigned int		 		dma_loaded;
-+	unsigned int		 		dma_limit;
-+	unsigned int		 		dma_period;
-+	dma_addr_t		 			dma_start;
-+	dma_addr_t		 			dma_pos;
-+	dma_addr_t		 			dma_end;
-+	struct s3c24xx_pcm_dma_params 	*params;
++	spinlock_t lock;
++	int state;
++	unsigned int dma_loaded;
++	unsigned int dma_limit;
++	unsigned int dma_period;
++	dma_addr_t dma_start;
++	dma_addr_t dma_pos;
++	dma_addr_t dma_end;
++	struct s3c24xx_pcm_dma_params *params;
 +};
 +
 +/* s3c24xx_pcm_enqueue
@@ -31574,7 +31562,7 @@
 +
 +	DBG("Entered %s\n", __FUNCTION__);
 +
-+	while ( prtd->dma_loaded < prtd->dma_limit) {
++	while (prtd->dma_loaded < prtd->dma_limit) {
 +		unsigned long len = prtd->dma_period;
 +
 +		DBG("dma_loaded: %d\n",prtd->dma_loaded);
@@ -31680,12 +31668,12 @@
 +	runtime->dma_bytes = totbytes;
 +
 +	spin_lock_irq(&prtd->lock);
-+	prtd->dma_loaded	= 0;
-+	prtd->dma_limit	= runtime->hw.periods_min;
-+	prtd->dma_period	= params_period_bytes(params);
-+	prtd->dma_start	= runtime->dma_addr;
-+	prtd->dma_pos	= prtd->dma_start;
-+	prtd->dma_end	= prtd->dma_start + totbytes;
++	prtd->dma_loaded = 0;
++	prtd->dma_limit = runtime->hw.periods_min;
++	prtd->dma_period = params_period_bytes(params);
++	prtd->dma_start = runtime->dma_addr;
++	prtd->dma_pos = prtd->dma_start;
++	prtd->dma_end = prtd->dma_start + totbytes;
 +	spin_unlock_irq(&prtd->lock);
 +
 +	return 0;
@@ -31700,7 +31688,7 @@
 +	/* TODO - do we need to ensure DMA flushed */
 +	snd_pcm_set_runtime_buffer(substream, NULL);
 +
-+	if(prtd->params) {
++	if (prtd->params) {
 +		s3c2410_dma_free(prtd->params->channel, prtd->params->client);
 +		prtd->params = NULL;
 +	}
@@ -31798,7 +31786,7 @@
 +			res = 0;
 +	}
 +
-+	return bytes_to_frames(substream->runtime, res);;
++	return bytes_to_frames(substream->runtime, res);
 +}
 +
 +static int s3c24xx_pcm_open(struct snd_pcm_substream *substream)
@@ -31813,16 +31801,11 @@
 +	snd_soc_set_runtime_hwparams(substream, &s3c24xx_pcm_hardware);
 +
 +	prtd = kzalloc(sizeof(struct s3c24xx_runtime_data), GFP_KERNEL);
-+	if(prtd == NULL) {
-+		ret = -ENOMEM;
-+		goto out;
-+	}
++	if (prtd == NULL)
++		return -ENOMEM;
 +
 +	runtime->private_data = prtd;
 +	return 0;
-+
-+out:
-+	return ret;
 +}
 +
 +static int s3c24xx_pcm_close(struct snd_pcm_substream *substream)
@@ -31832,7 +31815,7 @@
 +
 +	DBG("Entered %s\n", __FUNCTION__);
 +
-+	if(prtd)
++	if (prtd)
 +		kfree(prtd);
 +	else
 +		DBG("s3c24xx_pcm_close called with prtd == NULL\n");
@@ -31950,11 +31933,11 @@
 +MODULE_AUTHOR("Ben Dooks, <ben at simtec.co.uk>");
 +MODULE_DESCRIPTION("Samsung S3C24XX PCM DMA module");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/s3c24xx/s3c24xx-pcm.h
+Index: linux-2.6-asoc-pxa/sound/soc/s3c24xx/s3c24xx-pcm.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/s3c24xx/s3c24xx-pcm.h	2007-02-06 15:55:20.000000000 +0100
-@@ -0,0 +1,33 @@
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/s3c24xx/s3c24xx-pcm.h
+@@ -0,0 +1,32 @@
 +/*
 + *  s3c24xx-pcm.h --
 + *
@@ -31963,7 +31946,6 @@
 + *  Free Software Foundation;  either version 2 of the  License, or (at your
 + *  option) any later version.
 + *
-+ *
 + *  ALSA PCM interface for the Samsung S3C24xx CPU
 + */
 +
@@ -31988,10 +31970,10 @@
 +extern struct snd_ac97_bus_ops s3c24xx_ac97_ops;
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/soc/s3c24xx/smdk2440.c
+Index: linux-2.6-asoc-pxa/sound/soc/s3c24xx/smdk2440.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/s3c24xx/smdk2440.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/s3c24xx/smdk2440.c
 @@ -0,0 +1,320 @@
 +/*
 + * smdk2440.c  --  ALSA Soc Audio Layer
@@ -32313,10 +32295,10 @@
 +MODULE_AUTHOR("Ben Dooks, <ben at simtec.co.uk>");
 +MODULE_DESCRIPTION("ALSA SoC SMDK2440");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8956.c
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm8956.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8956.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm8956.c
 @@ -0,0 +1,724 @@
 +/*
 + * wm8956.c  --  WM8956 ALSA SoC Audio driver
@@ -33042,10 +33024,10 @@
 +MODULE_DESCRIPTION("ASoC WM8956 driver");
 +MODULE_AUTHOR("Liam Girdwood");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8956.h
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm8956.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8956.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm8956.h
 @@ -0,0 +1,116 @@
 +/*
 + * wm8956.h  --  WM8956 Soc Audio driver
@@ -33163,10 +33145,10 @@
 +extern struct snd_soc_codec_device soc_codec_dev_wm8956;
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8960.c
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm8960.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8960.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm8960.c
 @@ -0,0 +1,766 @@
 +/*
 + * wm8960.c  --  WM8960 ALSA SoC Audio driver
@@ -33934,10 +33916,10 @@
 +MODULE_DESCRIPTION("ASoC WM8960 driver");
 +MODULE_AUTHOR("Liam Girdwood");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8960.h
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/wm8960.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/wm8960.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/wm8960.h
 @@ -0,0 +1,121 @@
 +/*
 + * wm8960.h  --  WM8960 Soc Audio driver
@@ -34060,10 +34042,10 @@
 +extern struct snd_soc_codec_device soc_codec_dev_wm8960;
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/soc/s3c24xx/smdk2440_wm8956.c
+Index: linux-2.6-asoc-pxa/sound/soc/s3c24xx/smdk2440_wm8956.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/s3c24xx/smdk2440_wm8956.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/s3c24xx/smdk2440_wm8956.c
 @@ -0,0 +1,335 @@
 +/*
 + * smdk2440.c  --  ALSA Soc Audio Layer
@@ -34400,10 +34382,10 @@
 +MODULE_AUTHOR("Ben Dooks, <ben at simtec.co.uk>");
 +MODULE_DESCRIPTION("ALSA SoC SMDK2440");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/imx/imx-ssi.h
+Index: linux-2.6-asoc-pxa/sound/soc/imx/imx-ssi.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/imx/imx-ssi.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/imx/imx-ssi.h
 @@ -0,0 +1,28 @@
 +/*
 + * This program is free software; you can redistribute it and/or modify
@@ -34433,10 +34415,10 @@
 +extern struct snd_soc_cpu_dai imx_ssi_pcm_dai[2];
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/soc/at91/at91-i2s.h
+Index: linux-2.6-asoc-pxa/sound/soc/at91/at91-i2s.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/at91/at91-i2s.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/at91/at91-i2s.h
 @@ -0,0 +1,27 @@
 +/*
 + * at91-i2s.h - ALSA I2S interface for the Atmel AT91 SoC
@@ -34465,10 +34447,10 @@
 +
 +#endif /* _AT91_I2S_H */
 +
-Index: linux-2.6.17.14-fic4.test/sound/soc/imx/mx31ads_wm8753.c
+Index: linux-2.6-asoc-pxa/sound/soc/imx/mx31ads_wm8753.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/imx/mx31ads_wm8753.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/imx/mx31ads_wm8753.c
 @@ -0,0 +1,400 @@
 +/*
 + * mx31ads_wm8753.c  --  SoC audio for mx31ads
@@ -34870,10 +34852,10 @@
 +MODULE_AUTHOR("Liam Girdwood, liam.girdwood at wolfsonmicro.com, www.wolfsonmicro.com");
 +MODULE_DESCRIPTION("ALSA SoC WM8753 mx31ads");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/s3c24xx/lm4857.h
+Index: linux-2.6-asoc-pxa/sound/soc/s3c24xx/lm4857.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/s3c24xx/lm4857.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/s3c24xx/lm4857.h
 @@ -0,0 +1,15 @@
 +#ifndef LM4857_H_
 +#define LM4857_H_
@@ -34890,10 +34872,10 @@
 +#define LM4857_EPGAIN 4
 +
 +#endif /*LM4857_H_*/
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/tlv320.c
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/tlv320.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/tlv320.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/tlv320.c
 @@ -0,0 +1,609 @@
 +/*
 + * tlv320.c  --  TLV 320 ALSA Soc Audio driver
@@ -35504,10 +35486,10 @@
 +MODULE_DESCRIPTION("ASoC TLV320 driver");
 +MODULE_AUTHOR("Nicola Perrino");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/codecs/tlv320.h
+Index: linux-2.6-asoc-pxa/sound/soc/codecs/tlv320.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/codecs/tlv320.h	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/codecs/tlv320.h
 @@ -0,0 +1,111 @@
 +/*
 + * tlv320.h  --  TLV 320 ALSA Soc Audio driver
@@ -35620,10 +35602,10 @@
 +extern struct snd_soc_codec_device soc_codec_dev_tlv320;
 +
 +#endif
-Index: linux-2.6.17.14-fic4.test/sound/soc/pxa/amesom_tlv320.c
+Index: linux-2.6-asoc-pxa/sound/soc/pxa/amesom_tlv320.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/pxa/amesom_tlv320.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/pxa/amesom_tlv320.c
 @@ -0,0 +1,211 @@
 +/*
 + * amesom_tlv320.c  --  SoC audio for Amesom
@@ -35836,10 +35818,10 @@
 +MODULE_AUTHOR("Nicola Perrino");
 +MODULE_DESCRIPTION("ALSA SoC TLV320 Amesom");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/sound/soc/s3c24xx/neo1973_wm8753.c
+Index: linux-2.6-asoc-pxa/sound/soc/s3c24xx/neo1973_wm8753.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/sound/soc/s3c24xx/neo1973_wm8753.c	2007-02-06 15:55:20.000000000 +0100
+--- /dev/null
++++ linux-2.6-asoc-pxa/sound/soc/s3c24xx/neo1973_wm8753.c
 @@ -0,0 +1,686 @@
 +/*
 + * neo1973_wm8753.c  --  SoC audio for Neo1973

Modified: trunk/src/target/kernel/patches/gta01-backlight.patch
===================================================================
--- trunk/src/target/kernel/patches/gta01-backlight.patch	2007-02-15 21:31:15 UTC (rev 1003)
+++ trunk/src/target/kernel/patches/gta01-backlight.patch	2007-02-15 21:37:15 UTC (rev 1004)
@@ -1,12 +1,12 @@
 This is a backlight driver for FIC's Neo1973 Phone (codename GTA01)
 
-Index: linux-2.6.17.14-fic4.test/drivers/video/backlight/Kconfig
+Index: linux-2.6.20/drivers/video/backlight/Kconfig
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/drivers/video/backlight/Kconfig	2007-01-24 14:06:21.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/drivers/video/backlight/Kconfig	2007-01-24 14:07:01.000000000 +0100
-@@ -50,6 +50,14 @@
- 	  If you have a Sharp Zaurus SL-C7xx, SL-Cxx00 or SL-6000x say y to enable the
- 	  backlight driver.
+--- linux-2.6.20.orig/drivers/video/backlight/Kconfig	2007-02-15 16:26:53.000000000 +0100
++++ linux-2.6.20/drivers/video/backlight/Kconfig	2007-02-15 16:28:11.000000000 +0100
+@@ -58,6 +58,14 @@
+ 	  If you have a Sharp Zaurus SL-5500 (Collie) or SL-5600 (Poodle) say y to
+ 	  enable the LCD/backlight driver.
  
 +config BACKLIGHT_GTA01
 +	tristate "FIC GTA01 Backlight Driver"
@@ -19,22 +19,22 @@
  config BACKLIGHT_HP680
  	tristate "HP Jornada 680 Backlight Driver"
  	depends on BACKLIGHT_DEVICE && SH_HP6XX
-Index: linux-2.6.17.14-fic4.test/drivers/video/backlight/Makefile
+Index: linux-2.6.20/drivers/video/backlight/Makefile
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/drivers/video/backlight/Makefile	2007-01-24 14:06:21.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/drivers/video/backlight/Makefile	2007-01-24 14:07:01.000000000 +0100
+--- linux-2.6.20.orig/drivers/video/backlight/Makefile	2007-02-15 16:26:53.000000000 +0100
++++ linux-2.6.20/drivers/video/backlight/Makefile	2007-02-15 16:28:11.000000000 +0100
 @@ -3,5 +3,6 @@
  obj-$(CONFIG_LCD_CLASS_DEVICE)     += lcd.o
  obj-$(CONFIG_BACKLIGHT_CLASS_DEVICE) += backlight.o
  obj-$(CONFIG_BACKLIGHT_CORGI)	+= corgi_bl.o
 +obj-$(CONFIG_BACKLIGHT_GTA01)	+= gta01_bl.o
  obj-$(CONFIG_BACKLIGHT_HP680)	+= hp680_bl.o
- obj-$(CONFIG_SHARP_LOCOMO)	+= locomolcd.o
-Index: linux-2.6.17.14-fic4.test/drivers/video/backlight/gta01_bl.c
+ obj-$(CONFIG_BACKLIGHT_LOCOMO)	+= locomolcd.o
+Index: linux-2.6.20/drivers/video/backlight/gta01_bl.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/drivers/video/backlight/gta01_bl.c	2007-01-24 14:07:43.000000000 +0100
-@@ -0,0 +1,275 @@
++++ linux-2.6.20/drivers/video/backlight/gta01_bl.c	2007-02-15 17:02:00.000000000 +0100
+@@ -0,0 +1,276 @@
 +/*
 + *  Backlight Driver for FIC GTA01 (Neo1973) GSM Phone
 + *
@@ -248,7 +248,8 @@
 +	if (!machinfo->limit_mask)
 +		machinfo->limit_mask = -1;
 +
-+	gta01_backlight_device = backlight_device_register("gta01-bl", NULL,
++	gta01_backlight_device = backlight_device_register("gta01-bl",
++							   &pdev->dev, NULL,
 +							   &gta01bl_prop);
 +	if (IS_ERR(gta01_backlight_device))
 +		return PTR_ERR(gta01_backlight_device);

Modified: trunk/src/target/kernel/patches/gta01-core.patch
===================================================================
--- trunk/src/target/kernel/patches/gta01-core.patch	2007-02-15 21:31:15 UTC (rev 1003)
+++ trunk/src/target/kernel/patches/gta01-core.patch	2007-02-15 21:37:15 UTC (rev 1004)
@@ -1,11 +1,11 @@
 This patch adds support for the FIC GTA01 machine type to the ARM port of
 the linux kernel.
 
-Index: linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/Kconfig
+Index: linux-2.6.20/arch/arm/mach-s3c2410/Kconfig
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/arch/arm/mach-s3c2410/Kconfig	2007-02-07 20:39:12.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/Kconfig	2007-02-07 20:39:12.000000000 +0100
-@@ -69,6 +69,13 @@
+--- linux-2.6.20.orig/arch/arm/mach-s3c2410/Kconfig	2007-02-15 17:08:30.000000000 +0100
++++ linux-2.6.20/arch/arm/mach-s3c2410/Kconfig	2007-02-15 17:08:32.000000000 +0100
+@@ -86,6 +86,13 @@
  	help
  	   Say Y here if you are using the Armzone QT2410
  
@@ -19,23 +19,22 @@
  config ARCH_S3C2440
  	bool "SMDK2440"
  	select CPU_S3C2440
-Index: linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/Makefile
+Index: linux-2.6.20/arch/arm/mach-s3c2410/Makefile
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/arch/arm/mach-s3c2410/Makefile	2007-02-07 20:39:12.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/Makefile	2007-02-07 20:39:12.000000000 +0100
-@@ -44,6 +44,7 @@
- obj-$(CONFIG_MACH_N30)		+= mach-n30.o
- obj-$(CONFIG_ARCH_SMDK2410)	+= mach-smdk2410.o
+--- linux-2.6.20.orig/arch/arm/mach-s3c2410/Makefile	2007-02-15 17:08:30.000000000 +0100
++++ linux-2.6.20/arch/arm/mach-s3c2410/Makefile	2007-02-15 17:08:32.000000000 +0100
+@@ -89,5 +89,6 @@
+ obj-$(CONFIG_MACH_NEXCODER_2440) += mach-nexcoder.o
+ obj-$(CONFIG_MACH_VSTMS)	+= mach-vstms.o
  obj-$(CONFIG_MACH_QT2410)	+= mach-qt2410.o
 +obj-$(CONFIG_MACH_GTA01)	+= mach-gta01.o
- obj-$(CONFIG_ARCH_S3C2440)	+= mach-smdk2440.o
- obj-$(CONFIG_MACH_VR1000)	+= mach-vr1000.o usb-simtec.o
- obj-$(CONFIG_MACH_RX3715)	+= mach-rx3715.o
-Index: linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/mach-gta01.c
+ 
+ obj-$(CONFIG_MACH_SMDK)		+= common-smdk.o
+Index: linux-2.6.20/arch/arm/mach-s3c2410/mach-gta01.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/mach-gta01.c	2007-02-07 20:42:17.000000000 +0100
-@@ -0,0 +1,508 @@
++++ linux-2.6.20/arch/arm/mach-s3c2410/mach-gta01.c	2007-02-15 17:08:46.000000000 +0100
+@@ -0,0 +1,507 @@
 +/*
 + * linux/arch/arm/mach-s3c2410/mach-gta01.c
 + *
@@ -69,6 +68,7 @@
 +#include <linux/timer.h>
 +#include <linux/init.h>
 +#include <linux/platform_device.h>
++#include <linux/serial_core.h>
 +#include <linux/spi/spi.h>
 +#include <linux/spi/spi_bitbang.h>
 +#include <linux/mmc/protocol.h>
@@ -106,8 +106,6 @@
 +#include "pm.h"
 +
 +static struct map_desc gta01_iodesc[] __initdata = {
-+	IODESC_ENT(SDI),
-+	IODESC_ENT(IIS),
 +	{ 0xe0000000, __phys_to_pfn(S3C2410_CS3+0x01000000), SZ_1M, MT_DEVICE }
 +};
 +
@@ -544,19 +542,10 @@
 +MACHINE_END
 +
 +
-Index: linux-2.6.17.14-fic4.test/arch/arm/tools/mach-types
+Index: linux-2.6.20/include/asm-arm/arch-s3c2410/gta01.h
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/arch/arm/tools/mach-types	2007-02-07 20:39:12.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/arch/arm/tools/mach-types	2007-02-07 20:39:12.000000000 +0100
-@@ -1041,3 +1041,4 @@
- ixp465			MACH_IXP465		IXP465			1028
- balloon3		MACH_BALLOON3		BALLOON3		1029
- qt2410			MACH_QT2410		QT2410			1108
-+gta01			MACH_GTA01		GTA01			1182
-Index: linux-2.6.17.14-fic4.test/include/asm-arm/arch-s3c2410/gta01.h
-===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/include/asm-arm/arch-s3c2410/gta01.h	2007-02-07 20:39:12.000000000 +0100
++++ linux-2.6.20/include/asm-arm/arch-s3c2410/gta01.h	2007-02-15 17:08:32.000000000 +0100
 @@ -0,0 +1,60 @@
 +#ifndef _GTA01_H
 +#define _GTA01_H

Modified: trunk/src/target/kernel/patches/gta01-inputdevice.patch
===================================================================
--- trunk/src/target/kernel/patches/gta01-inputdevice.patch	2007-02-15 21:31:15 UTC (rev 1003)
+++ trunk/src/target/kernel/patches/gta01-inputdevice.patch	2007-02-15 21:37:15 UTC (rev 1004)
@@ -1,12 +1,12 @@
 This provides support for the GTA01 keyboard
 
-Index: linux-2.6.17.14-fic4.test/drivers/input/keyboard/Kconfig
+Index: linux-2.6.20/drivers/input/keyboard/Kconfig
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/drivers/input/keyboard/Kconfig	2007-01-08 21:34:30.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/drivers/input/keyboard/Kconfig	2007-01-08 22:51:40.000000000 +0100
-@@ -183,4 +183,16 @@
- 	  This driver implements support for HIL-keyboards attached
- 	  to your machine, so normally you should say Y here.
+--- linux-2.6.20.orig/drivers/input/keyboard/Kconfig	2007-02-15 16:15:18.000000000 +0100
++++ linux-2.6.20/drivers/input/keyboard/Kconfig	2007-02-15 16:18:52.000000000 +0100
+@@ -214,4 +214,16 @@
+ 	  To compile this driver as a module, choose M here: the
+ 	  module will be called aaed2000_kbd.
  
 +config KEYBOARD_GTA01
 +	tristate "GTA01 buttons"
@@ -21,23 +21,23 @@
 +
 +
  endif
-Index: linux-2.6.17.14-fic4.test/drivers/input/keyboard/Makefile
+Index: linux-2.6.20/drivers/input/keyboard/Makefile
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/drivers/input/keyboard/Makefile	2007-01-08 21:34:30.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/drivers/input/keyboard/Makefile	2007-01-08 22:51:40.000000000 +0100
-@@ -12,6 +12,7 @@
- obj-$(CONFIG_KEYBOARD_LOCOMO)		+= locomokbd.o
+--- linux-2.6.20.orig/drivers/input/keyboard/Makefile	2007-02-15 16:15:18.000000000 +0100
++++ linux-2.6.20/drivers/input/keyboard/Makefile	2007-02-15 16:18:52.000000000 +0100
+@@ -13,6 +13,7 @@
  obj-$(CONFIG_KEYBOARD_NEWTON)		+= newtonkbd.o
+ obj-$(CONFIG_KEYBOARD_STOWAWAY)		+= stowaway.o
  obj-$(CONFIG_KEYBOARD_CORGI)		+= corgikbd.o
 +obj-$(CONFIG_KEYBOARD_GTA01)		+= gta01kbd.o
  obj-$(CONFIG_KEYBOARD_SPITZ)		+= spitzkbd.o
  obj-$(CONFIG_KEYBOARD_HIL)		+= hil_kbd.o
  obj-$(CONFIG_KEYBOARD_HIL_OLD)		+= hilkbd.o
-Index: linux-2.6.17.14-fic4.test/drivers/input/keyboard/gta01kbd.c
+Index: linux-2.6.20/drivers/input/keyboard/gta01kbd.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/drivers/input/keyboard/gta01kbd.c	2007-01-08 22:52:23.000000000 +0100
-@@ -0,0 +1,452 @@
++++ linux-2.6.20/drivers/input/keyboard/gta01kbd.c	2007-02-15 16:20:10.000000000 +0100
+@@ -0,0 +1,214 @@
 +/*
 + * Keyboard driver for FIC GTA01 (Neo1973) GSM phone
 + *
@@ -60,7 +60,7 @@
 +#include <linux/module.h>
 +#include <linux/slab.h>
 +
-+#include <asm/arch/hardware.h>
++#include <asm/hardware.h>
 +#include <asm/arch/gta01.h>
 +
 +struct gta01kbd {
@@ -69,246 +69,8 @@
 +	unsigned long suspend_jiffies;
 +};
 +
-+#if 0
-+#include <asm/arch/corgi.h>
-+#include <asm/arch/hardware.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/hardware/scoop.h>
-+
-+#define KB_ROWS				8
-+#define KB_COLS				12
-+#define KB_ROWMASK(r)		(1 << (r))
-+#define SCANCODE(r,c)		( ((r)<<4) + (c) + 1 )
-+/* zero code, 124 scancodes */
-+#define	NR_SCANCODES		( SCANCODE(KB_ROWS-1,KB_COLS-1) +1 +1 )
-+
-+#define SCAN_INTERVAL		(50) /* ms */
-+#define HINGE_SCAN_INTERVAL	(250) /* ms */
-+
-+#define CORGI_KEY_CALENDER	KEY_F1
-+#define CORGI_KEY_ADDRESS	KEY_F2
-+#define CORGI_KEY_FN		KEY_F3
-+#define CORGI_KEY_CANCEL	KEY_F4
-+#define CORGI_KEY_OFF		KEY_SUSPEND
-+#define CORGI_KEY_EXOK		KEY_F5
-+#define CORGI_KEY_EXCANCEL	KEY_F6
-+#define CORGI_KEY_EXJOGDOWN	KEY_F7
-+#define CORGI_KEY_EXJOGUP	KEY_F8
-+#define CORGI_KEY_JAP1		KEY_LEFTCTRL
-+#define CORGI_KEY_JAP2		KEY_LEFTALT
-+#define CORGI_KEY_MAIL		KEY_F10
-+#define CORGI_KEY_OK		KEY_F11
-+#define CORGI_KEY_MENU		KEY_F12
-+
-+static unsigned char corgikbd_keycode[NR_SCANCODES] = {
-+	0,                                                                                                                /* 0 */
-+	0, KEY_1, KEY_3, KEY_5, KEY_6, KEY_7, KEY_9, KEY_0, KEY_BACKSPACE, 0, 0, 0, 0, 0, 0, 0, 	                      /* 1-16 */
-+	0, KEY_2, KEY_4, KEY_R, KEY_Y, KEY_8, KEY_I, KEY_O, KEY_P, 0, 0, 0, 0, 0, 0, 0,                                   /* 17-32 */
-+	KEY_TAB, KEY_Q, KEY_E, KEY_T, KEY_G, KEY_U, KEY_J, KEY_K, 0, 0, 0, 0, 0, 0, 0, 0,                                 /* 33-48 */
-+	CORGI_KEY_CALENDER, KEY_W, KEY_S, KEY_F, KEY_V, KEY_H, KEY_M, KEY_L, 0, KEY_RIGHTSHIFT, 0, 0, 0, 0, 0, 0,         /* 49-64 */
-+	CORGI_KEY_ADDRESS, KEY_A, KEY_D, KEY_C, KEY_B, KEY_N, KEY_DOT, 0, KEY_ENTER, 0, KEY_LEFTSHIFT, 0, 0, 0, 0, 0, 	  /* 65-80 */
-+	CORGI_KEY_MAIL, KEY_Z, KEY_X, KEY_MINUS, KEY_SPACE, KEY_COMMA, 0, KEY_UP, 0, 0, 0, CORGI_KEY_FN, 0, 0, 0, 0,            /* 81-96 */
-+	KEY_SYSRQ, CORGI_KEY_JAP1, CORGI_KEY_JAP2, CORGI_KEY_CANCEL, CORGI_KEY_OK, CORGI_KEY_MENU, KEY_LEFT, KEY_DOWN, KEY_RIGHT, 0, 0, 0, 0, 0, 0, 0,  /* 97-112 */
-+	CORGI_KEY_OFF, CORGI_KEY_EXOK, CORGI_KEY_EXCANCEL, CORGI_KEY_EXJOGDOWN, CORGI_KEY_EXJOGUP, 0, 0, 0, 0, 0, 0, 0,   /* 113-124 */
-+};
-+
-+
-+struct corgikbd {
-+	unsigned char keycode[ARRAY_SIZE(corgikbd_keycode)];
-+	struct input_dev *input;
-+
-+	spinlock_t lock;
-+	struct timer_list timer;
-+	struct timer_list htimer;
-+
-+	unsigned int suspended;
-+	unsigned long suspend_jiffies;
-+};
-+
-+#define KB_DISCHARGE_DELAY	10
-+#define KB_ACTIVATE_DELAY	10
-+
-+/* Helper functions for reading the keyboard matrix
-+ * Note: We should really be using pxa_gpio_mode to alter GPDR but it
-+ *       requires a function call per GPIO bit which is excessive
-+ *       when we need to access 12 bits at once multiple times.
-+ * These functions must be called within local_irq_save()/local_irq_restore()
-+ * or similar.
-+ */
-+static inline void corgikbd_discharge_all(void)
++static irqreturn_t gta01kbd_interrupt(int irq, void *dev_id)
 +{
-+	/* STROBE All HiZ */
-+	GPCR2  = CORGI_GPIO_ALL_STROBE_BIT;
-+	GPDR2 &= ~CORGI_GPIO_ALL_STROBE_BIT;
-+}
-+
-+static inline void corgikbd_activate_all(void)
-+{
-+	/* STROBE ALL -> High */
-+	GPSR2  = CORGI_GPIO_ALL_STROBE_BIT;
-+	GPDR2 |= CORGI_GPIO_ALL_STROBE_BIT;
-+
-+	udelay(KB_DISCHARGE_DELAY);
-+
-+	/* Clear any interrupts we may have triggered when altering the GPIO lines */
-+	GEDR1 = CORGI_GPIO_HIGH_SENSE_BIT;
-+	GEDR2 = CORGI_GPIO_LOW_SENSE_BIT;
-+}
-+
-+static inline void corgikbd_activate_col(int col)
-+{
-+	/* STROBE col -> High, not col -> HiZ */
-+	GPSR2 = CORGI_GPIO_STROBE_BIT(col);
-+	GPDR2 = (GPDR2 & ~CORGI_GPIO_ALL_STROBE_BIT) | CORGI_GPIO_STROBE_BIT(col);
-+}
-+
-+static inline void corgikbd_reset_col(int col)
-+{
-+	/* STROBE col -> Low */
-+	GPCR2 = CORGI_GPIO_STROBE_BIT(col);
-+	/* STROBE col -> out, not col -> HiZ */
-+	GPDR2 = (GPDR2 & ~CORGI_GPIO_ALL_STROBE_BIT) | CORGI_GPIO_STROBE_BIT(col);
-+}
-+
-+#define GET_ROWS_STATUS(c)	(((GPLR1 & CORGI_GPIO_HIGH_SENSE_BIT) >> CORGI_GPIO_HIGH_SENSE_RSHIFT) | ((GPLR2 & CORGI_GPIO_LOW_SENSE_BIT) << CORGI_GPIO_LOW_SENSE_LSHIFT))
-+
-+/*
-+ * The corgi keyboard only generates interrupts when a key is pressed.
-+ * When a key is pressed, we enable a timer which then scans the
-+ * keyboard to detect when the key is released.
-+ */
-+
-+/* Scan the hardware keyboard and push any changes up through the input layer */
-+static void corgikbd_scankeyboard(struct corgikbd *corgikbd_data, struct pt_regs *regs)
-+{
-+	unsigned int row, col, rowd;
-+	unsigned long flags;
-+	unsigned int num_pressed;
-+
-+	if (corgikbd_data->suspended)
-+		return;
-+
-+	spin_lock_irqsave(&corgikbd_data->lock, flags);
-+
-+	if (regs)
-+		input_regs(corgikbd_data->input, regs);
-+
-+	num_pressed = 0;
-+	for (col = 0; col < KB_COLS; col++) {
-+		/*
-+		 * Discharge the output driver capacitatance
-+		 * in the keyboard matrix. (Yes it is significant..)
-+		 */
-+
-+		corgikbd_discharge_all();
-+		udelay(KB_DISCHARGE_DELAY);
-+
-+		corgikbd_activate_col(col);
-+		udelay(KB_ACTIVATE_DELAY);
-+
-+		rowd = GET_ROWS_STATUS(col);
-+		for (row = 0; row < KB_ROWS; row++) {
-+			unsigned int scancode, pressed;
-+
-+			scancode = SCANCODE(row, col);
-+			pressed = rowd & KB_ROWMASK(row);
-+
-+			input_report_key(corgikbd_data->input, corgikbd_data->keycode[scancode], pressed);
-+
-+			if (pressed)
-+				num_pressed++;
-+
-+			if (pressed && (corgikbd_data->keycode[scancode] == CORGI_KEY_OFF)
-+					&& time_after(jiffies, corgikbd_data->suspend_jiffies + HZ)) {
-+				input_event(corgikbd_data->input, EV_PWR, CORGI_KEY_OFF, 1);
-+				corgikbd_data->suspend_jiffies=jiffies;
-+			}
-+		}
-+		corgikbd_reset_col(col);
-+	}
-+
-+	corgikbd_activate_all();
-+
-+	input_sync(corgikbd_data->input);
-+
-+	/* if any keys are pressed, enable the timer */
-+	if (num_pressed)
-+		mod_timer(&corgikbd_data->timer, jiffies + msecs_to_jiffies(SCAN_INTERVAL));
-+
-+	spin_unlock_irqrestore(&corgikbd_data->lock, flags);
-+}
-+
-+/*
-+ * corgi keyboard interrupt handler.
-+ */
-+static irqreturn_t corgikbd_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-+{
-+	struct corgikbd *corgikbd_data = dev_id;
-+
-+	if (!timer_pending(&corgikbd_data->timer)) {
-+		/** wait chattering delay **/
-+		udelay(20);
-+		corgikbd_scankeyboard(corgikbd_data, regs);
-+	}
-+
-+	return IRQ_HANDLED;
-+}
-+
-+/*
-+ * corgi timer checking for released keys
-+ */
-+static void corgikbd_timer_callback(unsigned long data)
-+{
-+	struct corgikbd *corgikbd_data = (struct corgikbd *) data;
-+	corgikbd_scankeyboard(corgikbd_data, NULL);
-+}
-+
-+/*
-+ * The hinge switches generate no interrupt so they need to be
-+ * monitored by a timer.
-+ *
-+ * We debounce the switches and pass them to the input system.
-+ *
-+ *  gprr == 0x00 - Keyboard with Landscape Screen
-+ *          0x08 - No Keyboard with Portrait Screen
-+ *          0x0c - Keyboard and Screen Closed
-+ */
-+
-+#define READ_GPIO_BIT(x)    (GPLR(x) & GPIO_bit(x))
-+#define HINGE_STABLE_COUNT 2
-+static int sharpsl_hinge_state;
-+static int hinge_count;
-+
-+static void corgikbd_hinge_timer(unsigned long data)
-+{
-+	struct corgikbd *corgikbd_data = (struct corgikbd *) data;
-+	unsigned long gprr;
-+	unsigned long flags;
-+
-+	gprr = read_scoop_reg(&corgiscoop_device.dev, SCOOP_GPRR) & (CORGI_SCP_SWA | CORGI_SCP_SWB);
-+	gprr |= (READ_GPIO_BIT(CORGI_GPIO_AK_INT) != 0);
-+	if (gprr != sharpsl_hinge_state) {
-+		hinge_count = 0;
-+		sharpsl_hinge_state = gprr;
-+	} else if (hinge_count < HINGE_STABLE_COUNT) {
-+		hinge_count++;
-+		if (hinge_count >= HINGE_STABLE_COUNT) {
-+			spin_lock_irqsave(&corgikbd_data->lock, flags);
-+
-+			input_report_switch(corgikbd_data->input, SW_LID, ((sharpsl_hinge_state & CORGI_SCP_SWA) != 0));
-+			input_report_switch(corgikbd_data->input, SW_TABLET_MODE, ((sharpsl_hinge_state & CORGI_SCP_SWB) != 0));
-+			input_report_switch(corgikbd_data->input, SW_HEADPHONE_INSERT, (READ_GPIO_BIT(CORGI_GPIO_AK_INT) != 0));
-+			input_sync(corgikbd_data->input);
-+
-+			spin_unlock_irqrestore(&corgikbd_data->lock, flags);
-+		}
-+	}
-+	mod_timer(&corgikbd_data->htimer, jiffies + msecs_to_jiffies(HINGE_SCAN_INTERVAL));
-+}
-+#endif
-+
-+static irqreturn_t gta01kbd_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-+{
 +	struct gta01kbd *gta01kbd_data = dev_id;
 +
 +	/* FIXME: use GPIO from platform_dev resources */

Modified: trunk/src/target/kernel/patches/gta01-jbt6k74.patch
===================================================================
--- trunk/src/target/kernel/patches/gta01-jbt6k74.patch	2007-02-15 21:31:15 UTC (rev 1003)
+++ trunk/src/target/kernel/patches/gta01-jbt6k74.patch	2007-02-15 21:37:15 UTC (rev 1004)
@@ -1,10 +1,10 @@
 This driver adds support for LCM initialization of the JBT6K74 LCM
 as found on the FIC GTA01 hardware
 
-Index: linux-2.6.17.14-fic4.test/drivers/spi/Kconfig
+Index: linux-2.6.20/drivers/spi/Kconfig
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/drivers/spi/Kconfig	2007-01-10 01:10:12.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/drivers/spi/Kconfig	2007-01-10 01:10:59.000000000 +0100
+--- linux-2.6.20.orig/drivers/spi/Kconfig	2007-02-15 16:26:53.000000000 +0100
++++ linux-2.6.20/drivers/spi/Kconfig	2007-02-15 16:28:11.000000000 +0100
 @@ -129,5 +129,9 @@
  
  # (slave support would go here)
@@ -15,21 +15,21 @@
 +
  endmenu # "SPI support"
  
-Index: linux-2.6.17.14-fic4.test/drivers/spi/Makefile
+Index: linux-2.6.20/drivers/spi/Makefile
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/drivers/spi/Makefile	2007-01-10 01:10:12.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/drivers/spi/Makefile	2007-01-10 01:10:59.000000000 +0100
+--- linux-2.6.20.orig/drivers/spi/Makefile	2007-02-15 16:26:53.000000000 +0100
++++ linux-2.6.20/drivers/spi/Makefile	2007-02-15 16:28:11.000000000 +0100
 @@ -26,4 +26,5 @@
  # 	... add above this line ...
  
  # SPI slave drivers (protocol for that link)
 +obj-$(CONFIG_SPI_SLAVE_JBT6K74)		+= jbt6k74.o
  # 	... add above this line ...
-Index: linux-2.6.17.14-fic4.test/drivers/spi/jbt6k74.c
+Index: linux-2.6.20/drivers/spi/jbt6k74.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/drivers/spi/jbt6k74.c	2007-01-15 02:41:26.000000000 +0100
-@@ -0,0 +1,534 @@
++++ linux-2.6.20/drivers/spi/jbt6k74.c	2007-02-15 16:49:58.000000000 +0100
+@@ -0,0 +1,533 @@
 +/* Linux kernel driver for the tpo JBT6K74-AS LCM ASIC
 + *
 + * Copyright (C) 2006-2007 by OpenMoko, Inc.
@@ -54,7 +54,6 @@
 + */
 +#include <linux/kernel.h>
 +#include <linux/types.h>
-+#include <linux/config.h>
 +#include <linux/module.h>
 +#include <linux/device.h>
 +#include <linux/platform_device.h>

Modified: trunk/src/target/kernel/patches/gta01-no_nand_partitions.patch
===================================================================
--- trunk/src/target/kernel/patches/gta01-no_nand_partitions.patch	2007-02-15 21:31:15 UTC (rev 1003)
+++ trunk/src/target/kernel/patches/gta01-no_nand_partitions.patch	2007-02-15 21:37:15 UTC (rev 1004)
@@ -1,8 +1,8 @@
-Index: linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/mach-gta01.c
+Index: linux-2.6.20/arch/arm/mach-s3c2410/mach-gta01.c
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/arch/arm/mach-s3c2410/mach-gta01.c	2007-02-10 23:31:12.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/mach-gta01.c	2007-02-11 01:39:24.000000000 +0100
-@@ -188,40 +188,10 @@
+--- linux-2.6.20.orig/arch/arm/mach-s3c2410/mach-gta01.c	2007-02-15 16:28:11.000000000 +0100
++++ linux-2.6.20/arch/arm/mach-s3c2410/mach-gta01.c	2007-02-15 16:28:11.000000000 +0100
+@@ -186,40 +186,10 @@
  	.devices_count = ARRAY_SIZE(gta01_devices)
  };
  
@@ -44,11 +44,11 @@
  	},
  };
  
-Index: linux-2.6.17.14-fic4.test/drivers/mtd/nand/s3c2410.c
+Index: linux-2.6.20/drivers/mtd/nand/s3c2410.c
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/drivers/mtd/nand/s3c2410.c	2007-02-11 00:22:02.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/drivers/mtd/nand/s3c2410.c	2007-02-11 03:45:28.000000000 +0100
-@@ -480,19 +480,31 @@
+--- linux-2.6.20.orig/drivers/mtd/nand/s3c2410.c	2007-02-15 16:28:11.000000000 +0100
++++ linux-2.6.20/drivers/mtd/nand/s3c2410.c	2007-02-15 16:28:11.000000000 +0100
+@@ -471,17 +471,31 @@
  }
  
  #ifdef CONFIG_MTD_PARTITIONS
@@ -64,9 +64,7 @@
  		return add_mtd_device(&mtd->mtd);
  
 -	if (set->nr_partitions > 0 && set->partitions != NULL) {
--		return add_mtd_partitions(&mtd->mtd,
--					  set->partitions,
--					  set->nr_partitions);
+-		return add_mtd_partitions(&mtd->mtd, set->partitions, set->nr_partitions);
 +	if (set->nr_partitions == 0) {
 +		mtd->mtd.name = set->name;
 +		nr_part = parse_mtd_partitions(&mtd->mtd, part_probes,

Modified: trunk/src/target/kernel/patches/gta01-pcf50606.patch
===================================================================
--- trunk/src/target/kernel/patches/gta01-pcf50606.patch	2007-02-15 21:31:15 UTC (rev 1003)
+++ trunk/src/target/kernel/patches/gta01-pcf50606.patch	2007-02-15 21:37:15 UTC (rev 1004)
@@ -1,10 +1,10 @@
 This is the PCF50606 power management unit driver for FIC GTA01
 
-Index: linux-2.6.17.14-fic4.test/drivers/i2c/chips/pcf50606.c
+Index: linux-2.6.20/drivers/i2c/chips/pcf50606.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/drivers/i2c/chips/pcf50606.c	2007-02-11 04:00:50.000000000 +0100
-@@ -0,0 +1,1495 @@
++++ linux-2.6.20/drivers/i2c/chips/pcf50606.c	2007-02-15 16:25:44.000000000 +0100
+@@ -0,0 +1,1497 @@
 +/* Philips PCF50606 Power Management Unit (PMU) driver
 + *
 + * (C) 2006 by OpenMoko, Inc.
@@ -40,6 +40,7 @@
 +#include <linux/i2c.h>
 +#include <linux/types.h>
 +#include <linux/interrupt.h>
++#include <linux/irq.h>
 +#include <linux/workqueue.h>
 +#include <linux/rtc.h>
 +#include <linux/bcd.h>
@@ -526,9 +527,10 @@
 +}
 +EXPORT_SYMBOL(pcf50606_gpo0_get);
 +
-+static void pcf50606_work(void *data)
++static void pcf50606_work(struct work_struct *work)
 +{
-+	struct pcf50606_data *pcf = data;
++	struct pcf50606_data *pcf = 
++			container_of(work, struct pcf50606_data, work);
 +	u_int8_t int1, int2, int3;
 +
 +	pcf->working = 1;
@@ -699,12 +701,12 @@
 +}
 +
 +
-+static irqreturn_t pcf50606_irq(int irq, void *_pcf, struct pt_regs *regs)
++static irqreturn_t pcf50606_irq(int irq, void *_pcf)
 +{
 +	struct pcf50606_data *pcf = _pcf;
 +
-+	DEBUGP("entering(irq=%u, pcf=%p, regs=%p): scheduling work\n",
-+		irq, _pcf, regs);
++	DEBUGP("entering(irq=%u, pcf=%p): scheduling work\n",
++		irq, _pcf);
 +	pcf50606_schedule_work(pcf);
 +
 +	return IRQ_HANDLED;
@@ -1337,7 +1339,7 @@
 +		return -ENOMEM;
 +
 +	mutex_init(&data->lock);
-+	INIT_WORK(&data->work, pcf50606_work, data);
++	INIT_WORK(&data->work, pcf50606_work);
 +	data->working = 0;
 +	data->onkey_seconds = -1;
 +	new_client = &data->client;
@@ -1500,10 +1502,10 @@
 +
 +module_init(pcf50606_init);
 +module_exit(pcf50606_exit);
-Index: linux-2.6.17.14-fic4.test/drivers/i2c/chips/pcf50606.h
+Index: linux-2.6.20/drivers/i2c/chips/pcf50606.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/drivers/i2c/chips/pcf50606.h	2007-02-10 11:51:17.000000000 +0100
++++ linux-2.6.20/drivers/i2c/chips/pcf50606.h	2007-02-15 16:23:09.000000000 +0100
 @@ -0,0 +1,259 @@
 +#ifndef _PCF50606_H
 +#define _PCF50606_H
@@ -1764,10 +1766,10 @@
 +
 +#endif /* _PCF50606_H */
 +
-Index: linux-2.6.17.14-fic4.test/drivers/i2c/chips/Kconfig
+Index: linux-2.6.20/drivers/i2c/chips/Kconfig
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/drivers/i2c/chips/Kconfig	2007-02-10 11:51:15.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/drivers/i2c/chips/Kconfig	2007-02-10 11:51:17.000000000 +0100
+--- linux-2.6.20.orig/drivers/i2c/chips/Kconfig	2007-02-15 16:20:52.000000000 +0100
++++ linux-2.6.20/drivers/i2c/chips/Kconfig	2007-02-15 16:23:09.000000000 +0100
 @@ -36,6 +36,17 @@
  	  This driver can also be built as a module.  If so, the module
  	  will be called eeprom.
@@ -1786,10 +1788,10 @@
  config SENSORS_PCF8574
  	tristate "Philips PCF8574 and PCF8574A"
  	depends on I2C && EXPERIMENTAL
-Index: linux-2.6.17.14-fic4.test/drivers/i2c/chips/Makefile
+Index: linux-2.6.20/drivers/i2c/chips/Makefile
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/drivers/i2c/chips/Makefile	2007-02-10 11:51:15.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/drivers/i2c/chips/Makefile	2007-02-10 11:51:17.000000000 +0100
+--- linux-2.6.20.orig/drivers/i2c/chips/Makefile	2007-02-15 16:20:52.000000000 +0100
++++ linux-2.6.20/drivers/i2c/chips/Makefile	2007-02-15 16:23:09.000000000 +0100
 @@ -8,6 +8,7 @@
  obj-$(CONFIG_SENSORS_MAX6875)	+= max6875.o
  obj-$(CONFIG_SENSORS_M41T00)	+= m41t00.o
@@ -1798,22 +1800,22 @@
  obj-$(CONFIG_SENSORS_PCF8574)	+= pcf8574.o
  obj-$(CONFIG_SENSORS_PCF8591)	+= pcf8591.o
  obj-$(CONFIG_ISP1301_OMAP)	+= isp1301_omap.o
-Index: linux-2.6.17.14-fic4.test/include/linux/i2c-id.h
+Index: linux-2.6.20/include/linux/i2c-id.h
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/include/linux/i2c-id.h	2007-02-10 11:51:15.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/include/linux/i2c-id.h	2007-02-10 11:51:17.000000000 +0100
-@@ -157,6 +157,7 @@
- #define I2C_DRIVERID_ASB100 1043
+--- linux-2.6.20.orig/include/linux/i2c-id.h	2007-02-15 16:20:52.000000000 +0100
++++ linux-2.6.20/include/linux/i2c-id.h	2007-02-15 16:23:09.000000000 +0100
+@@ -159,6 +159,7 @@
  #define I2C_DRIVERID_FSCHER 1046
  #define I2C_DRIVERID_W83L785TS 1047
-+#define I2C_DRIVERID_PCF50606 1048
+ #define I2C_DRIVERID_OV7670 1048	/* Omnivision 7670 camera */
++#define I2C_DRIVERID_PCF50606 1049
  
  /*
   * ---- Adapter types ----------------------------------------------------
-Index: linux-2.6.17.14-fic4.test/include/linux/pcf50606.h
+Index: linux-2.6.20/include/linux/pcf50606.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/include/linux/pcf50606.h	2007-02-10 11:51:17.000000000 +0100
++++ linux-2.6.20/include/linux/pcf50606.h	2007-02-15 16:23:09.000000000 +0100
 @@ -0,0 +1,55 @@
 +#ifndef _LINUX_PCF50606_H
 +#define _LINUX_PCF50606_H

Modified: trunk/src/target/kernel/patches/gta01-power_control.patch
===================================================================
--- trunk/src/target/kernel/patches/gta01-power_control.patch	2007-02-15 21:31:15 UTC (rev 1003)
+++ trunk/src/target/kernel/patches/gta01-power_control.patch	2007-02-15 21:37:15 UTC (rev 1004)
@@ -1,17 +1,17 @@
-Index: linux-2.6.17.14-fic4.test/arch/arm/common/Makefile
+Index: linux-2.6.20/arch/arm/common/Makefile
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/arch/arm/common/Makefile	2007-02-07 20:41:35.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/arch/arm/common/Makefile	2007-02-07 20:42:24.000000000 +0100
-@@ -16,3 +16,5 @@
- obj-$(CONFIG_SHARPSL_PM)	+= sharpsl_pm.o
+--- linux-2.6.20.orig/arch/arm/common/Makefile	2007-02-04 19:44:54.000000000 +0100
++++ linux-2.6.20/arch/arm/common/Makefile	2007-02-15 15:05:53.000000000 +0100
+@@ -17,3 +17,5 @@
  obj-$(CONFIG_SHARP_SCOOP)	+= scoop.o
  obj-$(CONFIG_ARCH_IXP2000)	+= uengine.o
+ obj-$(CONFIG_ARCH_IXP23XX)	+= uengine.o
 +#obj-$(CONFIG_MACH_GTA01)	+= gta01_pm_gsm.o gta01_pm_gps.o gta01_pm_bt.o
 +obj-m 				+= gta01_pm_gsm.o gta01_pm_gps.o gta01_pm_bt.o
-Index: linux-2.6.17.14-fic4.test/arch/arm/common/gta01_pm_gps.c
+Index: linux-2.6.20/arch/arm/common/gta01_pm_gps.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/arch/arm/common/gta01_pm_gps.c	2007-02-07 20:42:24.000000000 +0100
++++ linux-2.6.20/arch/arm/common/gta01_pm_gps.c	2007-02-15 15:17:52.000000000 +0100
 @@ -0,0 +1,542 @@
 +/*
 + * GPS Power Management code for the FIC Neo1973 GSM Phone
@@ -34,8 +34,8 @@
 +
 +#include <linux/pcf50606.h>
 +
++#include <asm/hardware.h>
 +#include <asm/arch/gta01.h>
-+#include <asm/arch/hardware.h>
 +
 +/* This is the 2.8V supply for the RTC crystal, the mail clock crystal and
 + * the input to VDD_RF */
@@ -555,10 +555,10 @@
 +MODULE_LICENSE("GPL");
 +MODULE_AUTHOR("Harald Welte <laforge at openmoko.org>");
 +MODULE_DESCRIPTION("FIC GTA01 (Neo1973) GPS Power Management");
-Index: linux-2.6.17.14-fic4.test/arch/arm/common/gta01_pm_gsm.c
+Index: linux-2.6.20/arch/arm/common/gta01_pm_gsm.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/arch/arm/common/gta01_pm_gsm.c	2007-02-07 21:51:56.000000000 +0100
++++ linux-2.6.20/arch/arm/common/gta01_pm_gsm.c	2007-02-15 15:16:48.000000000 +0100
 @@ -0,0 +1,164 @@
 +/*
 + * GSM Management code for the FIC Neo1973 GSM Phone
@@ -578,8 +578,8 @@
 +#include <linux/kernel.h>
 +#include <linux/platform_device.h>
 +
++#include <asm/hardware.h>
 +#include <asm/arch/gta01.h>
-+#include <asm/arch/hardware.h>
 +
 +struct gta01pm_priv {
 +	int gpio_ngsm_en;
@@ -724,10 +724,10 @@
 +MODULE_LICENSE("GPL");
 +MODULE_AUTHOR("Harald Welte <laforge at openmoko.org>");
 +MODULE_DESCRIPTION("FIC GTA01 (Neo1973) GSM Management");
-Index: linux-2.6.17.14-fic4.test/arch/arm/common/gta01_pm_bt.c
+Index: linux-2.6.20/arch/arm/common/gta01_pm_bt.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/arch/arm/common/gta01_pm_bt.c	2007-02-07 20:42:24.000000000 +0100
++++ linux-2.6.20/arch/arm/common/gta01_pm_bt.c	2007-02-15 15:17:38.000000000 +0100
 @@ -0,0 +1,133 @@
 +/*
 + * Bluetooth PM code for the FIC Neo1973 GSM Phone
@@ -749,8 +749,8 @@
 +
 +#include <linux/pcf50606.h>
 +
++#include <asm/hardware.h>
 +#include <asm/arch/gta01.h>
-+#include <asm/arch/hardware.h>
 +
 +#define DRVMSG "FIC GTA01 (Neo1973) Bluetooth Power Management"
 +

Modified: trunk/src/target/kernel/patches/gta01-vbus_draw.patch
===================================================================
--- trunk/src/target/kernel/patches/gta01-vbus_draw.patch	2007-02-15 21:31:15 UTC (rev 1003)
+++ trunk/src/target/kernel/patches/gta01-vbus_draw.patch	2007-02-15 21:37:15 UTC (rev 1004)
@@ -1,7 +1,7 @@
-Index: linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/mach-gta01.c
+Index: linux-2.6.20/arch/arm/mach-s3c2410/mach-gta01.c
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/arch/arm/mach-s3c2410/mach-gta01.c	2007-01-24 15:07:40.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/mach-gta01.c	2007-01-24 15:18:50.000000000 +0100
+--- linux-2.6.20.orig/arch/arm/mach-s3c2410/mach-gta01.c	2007-02-15 15:42:57.000000000 +0100
++++ linux-2.6.20/arch/arm/mach-s3c2410/mach-gta01.c	2007-02-15 16:03:56.000000000 +0100
 @@ -30,6 +30,7 @@
  #include <linux/list.h>
  #include <linux/timer.h>
@@ -19,23 +19,22 @@
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
  #include <asm/mach/irq.h>
-@@ -298,8 +301,38 @@
+@@ -297,8 +300,37 @@
  	}
  }
  
 +/* use a work queue, since I2C API inherently schedules
 + * and we get called in hardirq context from UDC driver */
 +
-+static void __gta01_udc_vbus_draw(void *v_ma);
-+static int gta01_udc_vbus_draw_ma;
-+static DECLARE_WORK(gta01_udc_vbus_work, __gta01_udc_vbus_draw,
-+		    &gta01_udc_vbus_draw_ma);
++struct vbus_draw {
++	struct work_struct work;
++	int ma;
++};
++static struct vbus_draw gta01_udc_vbus_drawer;
 +
-+static void __gta01_udc_vbus_draw(void *v_ma)
++static void __gta01_udc_vbus_draw(struct work_struct *work)
 +{
-+	unsigned int ma = *((unsigned int *) v_ma);
-+
-+	if (ma >= 500) {
++	if (gta01_udc_vbus_drawer.ma >= 500) {
 +		/* enable fast charge */
 +		printk(KERN_DEBUG "udc: enabling fast charge\n");
 +		pcf50606_charge_fast(pcf50606_global, 1);
@@ -48,8 +47,8 @@
 +
 +static void gta01_udc_vbus_draw(unsigned int ma)
 +{
-+	gta01_udc_vbus_draw_ma = ma;
-+	schedule_work(&gta01_udc_vbus_work);
++	gta01_udc_vbus_drawer.ma = ma;
++	schedule_work(&gta01_udc_vbus_drawer.work);
 +}
 +
  static struct s3c2410_udc_mach_info gta01_udc_cfg = {
@@ -58,3 +57,11 @@
  };
  
  static struct s3c2410_ts_mach_info gta01_ts_cfg = {
+@@ -464,6 +496,7 @@
+ 
+ 	s3c24xx_fb_set_platdata(&gta01_lcd_cfg);
+ 
++	INIT_WORK(&gta01_udc_vbus_drawer.work, __gta01_udc_vbus_draw);
+ 	s3c24xx_udc_set_platdata(&gta01_udc_cfg);
+ 	set_s3c2410ts_info(&gta01_ts_cfg);
+ 

Added: trunk/src/target/kernel/patches/i2c-permit_invalid_addrs.patch
===================================================================
--- trunk/src/target/kernel/patches/i2c-permit_invalid_addrs.patch	2007-02-15 21:31:15 UTC (rev 1003)
+++ trunk/src/target/kernel/patches/i2c-permit_invalid_addrs.patch	2007-02-15 21:37:15 UTC (rev 1004)
@@ -0,0 +1,23 @@
+We need this stupid workaround since our amplifier chip uses a 'reserved' I2C
+address
+
+Signed-off-by: Harald Welte <laforge at openmoko.org>
+
+Index: linux-2.6.20/drivers/i2c/i2c-core.c
+===================================================================
+--- linux-2.6.20.orig/drivers/i2c/i2c-core.c	2007-02-15 20:30:14.000000000 +0100
++++ linux-2.6.20/drivers/i2c/i2c-core.c	2007-02-15 20:30:22.000000000 +0100
+@@ -701,11 +701,11 @@
+ 	int err;
+ 
+ 	/* Make sure the address is valid */
+-	if (addr < 0x03 || addr > 0x77) {
++	/*if (addr < 0x03 || addr > 0x77) {
+ 		dev_warn(&adapter->dev, "Invalid probe address 0x%02x\n",
+ 			 addr);
+ 		return -EINVAL;
+-	}
++	}*/
+ 
+ 	/* Skip if already in use */
+ 	if (i2c_check_addr(adapter, addr))

Added: trunk/src/target/kernel/patches/pm-debug_less_verbose.patch
===================================================================
--- trunk/src/target/kernel/patches/pm-debug_less_verbose.patch	2007-02-15 21:31:15 UTC (rev 1003)
+++ trunk/src/target/kernel/patches/pm-debug_less_verbose.patch	2007-02-15 21:37:15 UTC (rev 1004)
@@ -0,0 +1,15 @@
+Index: linux-2.6.20/drivers/base/power/main.c
+===================================================================
+--- linux-2.6.20.orig/drivers/base/power/main.c	2007-02-15 19:56:34.000000000 +0100
++++ linux-2.6.20/drivers/base/power/main.c	2007-02-15 19:56:43.000000000 +0100
+@@ -53,8 +53,8 @@
+ {
+ 	int error;
+ 
+-	pr_debug("PM: Adding info for %s:%s\n",
+-		 dev->bus ? dev->bus->name : "No Bus", dev->kobj.name);
++	//pr_debug("PM: Adding info for %s:%s\n",
++	//	 dev->bus ? dev->bus->name : "No Bus", dev->kobj.name);
+ 	down(&dpm_list_sem);
+ 	list_add_tail(&dev->power.entry, &dpm_active);
+ 	device_pm_set_parent(dev, dev->parent);

Modified: trunk/src/target/kernel/patches/qt2410-base.patch
===================================================================
--- trunk/src/target/kernel/patches/qt2410-base.patch	2007-02-15 21:31:15 UTC (rev 1003)
+++ trunk/src/target/kernel/patches/qt2410-base.patch	2007-02-15 21:37:15 UTC (rev 1004)
@@ -1,8 +1,8 @@
-Index: linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/Kconfig
+Index: linux-2.6.20/arch/arm/mach-s3c2410/Kconfig
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/arch/arm/mach-s3c2410/Kconfig	2007-01-24 12:14:53.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/Kconfig	2007-01-24 12:17:13.000000000 +0100
-@@ -63,6 +63,12 @@
+--- linux-2.6.20.orig/arch/arm/mach-s3c2410/Kconfig	2007-02-15 16:26:54.000000000 +0100
++++ linux-2.6.20/arch/arm/mach-s3c2410/Kconfig	2007-02-15 17:05:08.000000000 +0100
+@@ -80,6 +80,12 @@
  	   Say Y here if you are using the SMDK2410 or the derived module A9M2410
             <http://www.fsforth.de>
  
@@ -15,50 +15,24 @@
  config ARCH_S3C2440
  	bool "SMDK2440"
  	select CPU_S3C2440
-Index: linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/Makefile
+Index: linux-2.6.20/arch/arm/mach-s3c2410/Makefile
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/arch/arm/mach-s3c2410/Makefile	2007-01-24 12:14:53.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/Makefile	2007-01-24 12:17:13.000000000 +0100
-@@ -43,10 +43,11 @@
- obj-$(CONFIG_ARCH_H1940)	+= mach-h1940.o
- obj-$(CONFIG_MACH_N30)		+= mach-n30.o
- obj-$(CONFIG_ARCH_SMDK2410)	+= mach-smdk2410.o
-+obj-$(CONFIG_MACH_QT2410)	+= mach-qt2410.o
- obj-$(CONFIG_ARCH_S3C2440)	+= mach-smdk2440.o
- obj-$(CONFIG_MACH_VR1000)	+= mach-vr1000.o usb-simtec.o
- obj-$(CONFIG_MACH_RX3715)	+= mach-rx3715.o
+--- linux-2.6.20.orig/arch/arm/mach-s3c2410/Makefile	2007-02-15 16:26:54.000000000 +0100
++++ linux-2.6.20/arch/arm/mach-s3c2410/Makefile	2007-02-15 17:05:08.000000000 +0100
+@@ -88,5 +88,6 @@
  obj-$(CONFIG_MACH_OTOM)		+= mach-otom.o
  obj-$(CONFIG_MACH_NEXCODER_2440) += mach-nexcoder.o
+ obj-$(CONFIG_MACH_VSTMS)	+= mach-vstms.o
++obj-$(CONFIG_MACH_QT2410)	+= mach-qt2410.o
  
 -obj-$(CONFIG_MACH_SMDK)		+= common-smdk.o
 \ No newline at end of file
 +obj-$(CONFIG_MACH_SMDK)		+= common-smdk.o
-Index: linux-2.6.17.14-fic4.test/arch/arm/tools/mach-types
+Index: linux-2.6.20/arch/arm/mach-s3c2410/mach-qt2410.c
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/arch/arm/tools/mach-types	2007-01-24 12:14:53.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/arch/arm/tools/mach-types	2007-01-24 12:17:13.000000000 +0100
-@@ -1040,3 +1040,4 @@
- ai2410			MACH_AI2410		AI2410			1027
- ixp465			MACH_IXP465		IXP465			1028
- balloon3		MACH_BALLOON3		BALLOON3		1029
-+qt2410			MACH_QT2410		QT2410			1108
-Index: linux-2.6.17.14-fic4.test/include/asm-arm/arch-s3c2410/map.h
-===================================================================
---- linux-2.6.17.14-fic4.test.orig/include/asm-arm/arch-s3c2410/map.h	2007-01-24 12:14:53.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/include/asm-arm/arch-s3c2410/map.h	2007-01-24 12:17:13.000000000 +0100
-@@ -225,6 +225,7 @@
- #define S3C24XX_PA_RTC      S3C2410_PA_RTC
- #define S3C24XX_PA_ADC      S3C2410_PA_ADC
- #define S3C24XX_PA_SPI      S3C2410_PA_SPI
-+#define S3C24XX_PA_SDI      S3C2410_PA_SDI
- #endif
- 
- #endif /* __ASM_ARCH_MAP_H */
-Index: linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/mach-qt2410.c
-===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/mach-qt2410.c	2007-01-24 12:17:22.000000000 +0100
-@@ -0,0 +1,377 @@
++++ linux-2.6.20/arch/arm/mach-s3c2410/mach-qt2410.c	2007-02-15 17:07:34.000000000 +0100
+@@ -0,0 +1,385 @@
 +/*
 + *
 + * linux/arch/arm/mach-s3c2410/mach-qt2410.c
@@ -91,6 +65,7 @@
 +#include <linux/timer.h>
 +#include <linux/init.h>
 +#include <linux/platform_device.h>
++#include <linux/serial_core.h>
 +#include <linux/spi/spi.h>
 +#include <linux/spi/spi_bitbang.h>
 +
@@ -113,6 +88,7 @@
 +#include <asm/arch/fb.h>
 +#include <asm/arch/nand.h>
 +#include <asm/arch/udc.h>
++#include <asm/arch/ts.h>
 +#include <asm/arch/spi.h>
 +#include <asm/arch/spi-gpio.h>
 +
@@ -122,8 +98,6 @@
 +#include "pm.h"
 +
 +static struct map_desc qt2410_iodesc[] __initdata = {
-+	IODESC_ENT(SDI),
-+	IODESC_ENT(IIS),
 +	{ 0xe0000000, __phys_to_pfn(S3C2410_CS3+0x01000000), SZ_1M, MT_DEVICE }
 +};
 +
@@ -247,6 +221,7 @@
 +	&s3c_device_sdi,
 +	&s3c_device_usbgadget,
 +	&s3c_device_nand,
++	&s3c_device_ts,
 +	&cs89x0_device,
 +};
 +
@@ -391,6 +366,12 @@
 +	.udc_command	= qt2410_udc_pullup,
 +};
 +
++static struct s3c2410_ts_mach_info qt2410_ts_cfg = {
++	.delay = 10000,
++	.presc = 49,
++	.oversampling_shift = 2,
++};
++
 +static void __init qt2410_map_io(void)
 +{
 +	s3c24xx_init_io(qt2410_iodesc, ARRAY_SIZE(qt2410_iodesc));
@@ -416,6 +397,7 @@
 +	s3c_device_nand.dev.platform_data = &qt2410_nand_info;
 +	s3c24xx_fb_set_platdata(&qt2410_lcd_cfg);
 +	s3c24xx_udc_set_platdata(&qt2410_udc_cfg);
++	set_s3c2410ts_info(&qt2410_ts_cfg);
 +
 +	s3c2410_gpio_cfgpin(S3C2410_GPB5, S3C2410_GPIO_OUTPUT);
 +	spi_register_board_info(qt2410_spi_board_info,
@@ -425,7 +407,7 @@
 +	s3c2410_pm_init();
 +}
 +
-+MACHINE_START(QT2410, "QT2410") 
++MACHINE_START(QT2410, "QT2410")
 +	.phys_io	= S3C2410_PA_UART,
 +	.io_pg_offst	= (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
 +	.boot_params	= S3C2410_SDRAM_PA + 0x100,

Modified: trunk/src/target/kernel/patches/qt2410-s3c_mci-pdata.patch
===================================================================
--- trunk/src/target/kernel/patches/qt2410-s3c_mci-pdata.patch	2007-02-15 21:31:15 UTC (rev 1003)
+++ trunk/src/target/kernel/patches/qt2410-s3c_mci-pdata.patch	2007-02-15 21:37:15 UTC (rev 1004)
@@ -1,27 +1,27 @@
 This patch adds platform data to support the SD/MMC slot of the Armzone
 S3C2410 development board.
 
-Index: linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/mach-qt2410.c
+Index: linux-2.6.20/arch/arm/mach-s3c2410/mach-qt2410.c
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/arch/arm/mach-s3c2410/mach-qt2410.c	2007-01-24 12:18:07.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/mach-qt2410.c	2007-01-24 12:18:09.000000000 +0100
-@@ -30,6 +30,7 @@
- #include <linux/timer.h>
+--- linux-2.6.20.orig/arch/arm/mach-s3c2410/mach-qt2410.c	2007-02-15 17:07:38.000000000 +0100
++++ linux-2.6.20/arch/arm/mach-s3c2410/mach-qt2410.c	2007-02-15 17:08:16.000000000 +0100
+@@ -31,6 +31,7 @@
  #include <linux/init.h>
  #include <linux/platform_device.h>
+ #include <linux/serial_core.h>
 +#include <linux/mmc/protocol.h>
  #include <linux/spi/spi.h>
  #include <linux/spi/spi_bitbang.h>
  
-@@ -54,6 +55,7 @@
- #include <asm/arch/udc.h>
+@@ -56,6 +57,7 @@
+ #include <asm/arch/ts.h>
  #include <asm/arch/spi.h>
  #include <asm/arch/spi-gpio.h>
 +#include <asm/arch/mci.h>
  
  #include "devs.h"
  #include "cpu.h"
-@@ -468,6 +470,13 @@
+@@ -475,6 +477,13 @@
  __setup("tft=", tft_setup);
  
  
@@ -35,7 +35,7 @@
  static void __init qt2410_map_io(void)
  {
  	s3c24xx_init_io(qt2410_iodesc, ARRAY_SIZE(qt2410_iodesc));
-@@ -491,6 +500,7 @@
+@@ -498,6 +507,7 @@
  	s3c2410_gpio_setpin(S3C2410_GPF7, 1);
  
  	s3c_device_nand.dev.platform_data = &qt2410_nand_info;

Deleted: trunk/src/target/kernel/patches/qt2410-touchscreen.patch
===================================================================
--- trunk/src/target/kernel/patches/qt2410-touchscreen.patch	2007-02-15 21:31:15 UTC (rev 1003)
+++ trunk/src/target/kernel/patches/qt2410-touchscreen.patch	2007-02-15 21:37:15 UTC (rev 1004)
@@ -1,530 +0,0 @@
-Index: linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/devs.c
-===================================================================
---- linux-2.6.17.14-fic4.test.orig/arch/arm/mach-s3c2410/devs.c	2007-01-24 12:17:45.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/devs.c	2007-01-24 12:18:11.000000000 +0100
-@@ -37,6 +37,7 @@
- 
- #include <asm/arch/regs-serial.h>
- #include <asm/arch/udc.h>
-+#include <asm/arch/ts.h>
- 
- #include "devs.h"
- 
-@@ -137,6 +138,23 @@
- 
- EXPORT_SYMBOL(s3c_device_nand);
- 
-+/* Touchscreen */
-+struct platform_device s3c_device_ts = {
-+	.name		  = "s3c2410-ts",
-+	.id		  = -1,
-+};
-+
-+EXPORT_SYMBOL(s3c_device_ts);
-+
-+static struct s3c2410_ts_mach_info s3c2410ts_info;
-+
-+void __init set_s3c2410ts_info(struct s3c2410_ts_mach_info *hard_s3c2410ts_info)
-+{
-+	memcpy(&s3c2410ts_info,hard_s3c2410ts_info,sizeof(struct s3c2410_ts_mach_info));
-+	s3c_device_ts.dev.platform_data = &s3c2410ts_info;
-+}
-+EXPORT_SYMBOL(set_s3c2410ts_info);
-+
- /* USB Device (Gadget)*/
- 
- static struct resource s3c_usbgadget_resource[] = {
-Index: linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/devs.h
-===================================================================
---- linux-2.6.17.14-fic4.test.orig/arch/arm/mach-s3c2410/devs.h	2007-01-24 12:17:39.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/devs.h	2007-01-24 12:18:11.000000000 +0100
-@@ -39,6 +39,7 @@
- extern struct platform_device s3c_device_timer3;
- 
- extern struct platform_device s3c_device_usbgadget;
-+extern struct platform_device s3c_device_ts;
- 
- /* s3c2440 specific devices */
- 
-Index: linux-2.6.17.14-fic4.test/drivers/input/touchscreen/Kconfig
-===================================================================
---- linux-2.6.17.14-fic4.test.orig/drivers/input/touchscreen/Kconfig	2007-01-24 12:17:39.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/drivers/input/touchscreen/Kconfig	2007-01-24 12:18:11.000000000 +0100
-@@ -49,6 +49,24 @@
- 	  To compile this driver as a module, choose M here: the
- 	  module will be called corgi_ts.
- 
-+config TOUCHSCREEN_S3C2410
-+	tristate "Samsung S3C2410 touchscreen input driver"
-+	depends on ARCH_S3C2410 && INPUT && INPUT_TOUCHSCREEN
-+	select SERIO
-+	help
-+	  Say Y here if you have the s3c2410 touchscreen.
-+
-+	  If unsure, say N.
-+
-+	  To compile this driver as a module, choose M here: the
-+	  module will be called s3c2410_ts.
-+
-+config TOUCHSCREEN_S3C2410_DEBUG
-+	boolean "Samsung S3C2410 touchscreen debug messages"
-+	depends on TOUCHSCREEN_S3C2410
-+	help
-+	  Select this if you want debug messages
-+
- config TOUCHSCREEN_GUNZE
- 	tristate "Gunze AHL-51S touchscreen"
- 	select SERIO
-Index: linux-2.6.17.14-fic4.test/drivers/input/touchscreen/Makefile
-===================================================================
---- linux-2.6.17.14-fic4.test.orig/drivers/input/touchscreen/Makefile	2007-01-24 12:17:39.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/drivers/input/touchscreen/Makefile	2007-01-24 12:18:11.000000000 +0100
-@@ -12,3 +12,5 @@
- obj-$(CONFIG_TOUCHSCREEN_MTOUCH) += mtouch.o
- obj-$(CONFIG_TOUCHSCREEN_MK712)	+= mk712.o
- obj-$(CONFIG_TOUCHSCREEN_HP600)	+= hp680_ts_input.o
-+obj-$(CONFIG_TOUCHSCREEN_S3C2410) += s3c2410_ts.o
-+
-Index: linux-2.6.17.14-fic4.test/drivers/input/touchscreen/s3c2410_ts.c
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/drivers/input/touchscreen/s3c2410_ts.c	2007-01-24 12:18:11.000000000 +0100
-@@ -0,0 +1,351 @@
-+/*
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ * Copyright (c) 2004 Arnaud Patard <arnaud.patard at rtp-net.org>
-+ * iPAQ H1940 touchscreen support
-+ *
-+ * ChangeLog
-+ *
-+ * 2004-09-05: Herbert Pötzl <herbert at 13thfloor.at>
-+ *	- added clock (de-)allocation code
-+ *
-+ * 2005-03-06: Arnaud Patard <arnaud.patard at rtp-net.org>
-+ *      - h1940_ -> s3c2410 (this driver is now also used on the n30
-+ *        machines :P)
-+ *      - Debug messages are now enabled with the config option
-+ *        TOUCHSCREEN_S3C2410_DEBUG
-+ *      - Changed the way the value are read
-+ *      - Input subsystem should now work
-+ *      - Use ioremap and readl/writel
-+ *
-+ * 2005-03-23: Arnaud Patard <arnaud.patard at rtp-net.org>
-+ *      - Make use of some undocumented features of the touchscreen
-+ *        controller
-+ *
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/errno.h>
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/slab.h>
-+#include <linux/input.h>
-+#include <linux/init.h>
-+#include <linux/serio.h>
-+#include <linux/delay.h>
-+#include <linux/platform_device.h>
-+#include <linux/clk.h>
-+#include <asm/io.h>
-+#include <asm/irq.h>
-+
-+#include <asm/arch/regs-adc.h>
-+#include <asm/arch/regs-gpio.h>
-+#include <asm/arch/ts.h>
-+
-+/* For ts.dev.id.version */
-+#define S3C2410TSVERSION	0x0101
-+
-+#define WAIT4INT(x)  (((x)<<8) | \
-+		     S3C2410_ADCTSC_YM_SEN | S3C2410_ADCTSC_YP_SEN | S3C2410_ADCTSC_XP_SEN | \
-+		     S3C2410_ADCTSC_XY_PST(3))
-+
-+#define AUTOPST	     (S3C2410_ADCTSC_YM_SEN | S3C2410_ADCTSC_YP_SEN | S3C2410_ADCTSC_XP_SEN | \
-+		     S3C2410_ADCTSC_AUTO_PST | S3C2410_ADCTSC_XY_PST(0))
-+
-+#define DEBUG_LVL    KERN_DEBUG
-+
-+MODULE_AUTHOR("Arnaud Patard <arnaud.patard at rtp-net.org>");
-+MODULE_DESCRIPTION("s3c2410 touchscreen driver");
-+MODULE_LICENSE("GPL");
-+
-+/*
-+ * Definitions & global arrays.
-+ */
-+
-+
-+static char *s3c2410ts_name = "s3c2410 TouchScreen";
-+
-+/*
-+ * Per-touchscreen data.
-+ */
-+
-+struct s3c2410ts {
-+	struct input_dev *dev;
-+	long xp;
-+	long yp;
-+	int count;
-+	int shift;
-+};
-+
-+static struct s3c2410ts ts;
-+static void __iomem *base_addr;
-+
-+static inline void s3c2410_ts_connect(void)
-+{
-+	s3c2410_gpio_cfgpin(S3C2410_GPG12, S3C2410_GPG12_XMON);
-+	s3c2410_gpio_cfgpin(S3C2410_GPG13, S3C2410_GPG13_nXPON);
-+	s3c2410_gpio_cfgpin(S3C2410_GPG14, S3C2410_GPG14_YMON);
-+	s3c2410_gpio_cfgpin(S3C2410_GPG15, S3C2410_GPG15_nYPON);
-+}
-+
-+static void touch_timer_fire(unsigned long data)
-+{
-+  	unsigned long data0;
-+  	unsigned long data1;
-+	int updown;
-+
-+  	data0 = readl(base_addr+S3C2410_ADCDAT0);
-+  	data1 = readl(base_addr+S3C2410_ADCDAT1);
-+
-+ 	updown = (!(data0 & S3C2410_ADCDAT0_UPDOWN)) && (!(data1 & S3C2410_ADCDAT0_UPDOWN));
-+
-+ 	if (updown) {
-+ 		if (ts.count != 0) {
-+ 			ts.xp >>= ts.shift;
-+ 			ts.yp >>= ts.shift;
-+
-+#ifdef CONFIG_TOUCHSCREEN_S3C2410_DEBUG
-+ 			{
-+ 				struct timeval tv;
-+ 				do_gettimeofday(&tv);
-+ 				printk(DEBUG_LVL "T: %06d, X: %03ld, Y: %03ld\n", (int)tv.tv_usec, ts.xp, ts.yp);
-+ 			}
-+#endif
-+
-+ 			input_report_abs(ts.dev, ABS_X, ts.xp);
-+ 			input_report_abs(ts.dev, ABS_Y, ts.yp);
-+
-+ 			input_report_key(ts.dev, BTN_TOUCH, 1);
-+ 			input_report_abs(ts.dev, ABS_PRESSURE, 1);
-+ 			input_sync(ts.dev);
-+ 		}
-+
-+ 		ts.xp = 0;
-+ 		ts.yp = 0;
-+ 		ts.count = 0;
-+
-+ 		writel(S3C2410_ADCTSC_PULL_UP_DISABLE | AUTOPST, base_addr+S3C2410_ADCTSC);
-+ 		writel(readl(base_addr+S3C2410_ADCCON) | S3C2410_ADCCON_ENABLE_START, base_addr+S3C2410_ADCCON);
-+ 	} else {
-+ 		ts.count = 0;
-+
-+ 		input_report_key(ts.dev, BTN_TOUCH, 0);
-+ 		input_report_abs(ts.dev, ABS_PRESSURE, 0);
-+ 		input_sync(ts.dev);
-+
-+ 		writel(WAIT4INT(0), base_addr+S3C2410_ADCTSC);
-+ 	}
-+}
-+
-+static struct timer_list touch_timer =
-+		TIMER_INITIALIZER(touch_timer_fire, 0, 0);
-+
-+static irqreturn_t stylus_updown(int irq, void *dev_id, struct pt_regs *regs)
-+{
-+	unsigned long data0;
-+	unsigned long data1;
-+	int updown;
-+
-+	data0 = readl(base_addr+S3C2410_ADCDAT0);
-+	data1 = readl(base_addr+S3C2410_ADCDAT1);
-+
-+	updown = (!(data0 & S3C2410_ADCDAT0_UPDOWN)) && (!(data1 & S3C2410_ADCDAT0_UPDOWN));
-+
-+	/* TODO we should never get an interrupt with updown set while
-+	 * the timer is running, but maybe we ought to verify that the
-+	 * timer isn't running anyways. */
-+
-+	if (updown)
-+		touch_timer_fire(0);
-+
-+	return IRQ_HANDLED;
-+}
-+
-+
-+static irqreturn_t stylus_action(int irq, void *dev_id, struct pt_regs *regs)
-+{
-+	unsigned long data0;
-+	unsigned long data1;
-+
-+	data0 = readl(base_addr+S3C2410_ADCDAT0);
-+	data1 = readl(base_addr+S3C2410_ADCDAT1);
-+
-+	ts.xp += data0 & S3C2410_ADCDAT0_XPDATA_MASK;
-+	ts.yp += data1 & S3C2410_ADCDAT1_YPDATA_MASK;
-+	ts.count++;
-+
-+        if (ts.count < (1<<ts.shift)) {
-+		writel(S3C2410_ADCTSC_PULL_UP_DISABLE | AUTOPST, base_addr+S3C2410_ADCTSC);
-+		writel(readl(base_addr+S3C2410_ADCCON) | S3C2410_ADCCON_ENABLE_START, base_addr+S3C2410_ADCCON);
-+	} else {
-+		mod_timer(&touch_timer, jiffies+1);
-+		writel(WAIT4INT(1), base_addr+S3C2410_ADCTSC);
-+	}
-+
-+	return IRQ_HANDLED;
-+}
-+
-+static struct clk	*adc_clock;
-+
-+/*
-+ * The functions for inserting/removing us as a module.
-+ */
-+
-+static int __init s3c2410ts_probe(struct platform_device *pdev)
-+{
-+	struct s3c2410_ts_mach_info *info;
-+	struct input_dev *input_dev;
-+
-+	info = ( struct s3c2410_ts_mach_info *)pdev->dev.platform_data;
-+
-+	if (!info)
-+	{
-+		printk(KERN_ERR "Hm... too bad : no platform data for ts\n");
-+		return -EINVAL;
-+	}
-+
-+#ifdef CONFIG_TOUCHSCREEN_S3C2410_DEBUG
-+	printk(DEBUG_LVL "Entering s3c2410ts_init\n");
-+#endif
-+
-+	adc_clock = clk_get(NULL, "adc");
-+	if (!adc_clock) {
-+		printk(KERN_ERR "failed to get adc clock source\n");
-+		return -ENOENT;
-+	}
-+	clk_enable(adc_clock);
-+
-+#ifdef CONFIG_TOUCHSCREEN_S3C2410_DEBUG
-+	printk(DEBUG_LVL "got and enabled clock\n");
-+#endif
-+
-+	base_addr=ioremap(S3C2410_PA_ADC,0x20);
-+	if (base_addr == NULL) {
-+		printk(KERN_ERR "Failed to remap register block\n");
-+		return -ENOMEM;
-+	}
-+
-+
-+	/* Configure GPIOs */
-+	s3c2410_ts_connect();
-+
-+	if ((info->presc&0xff) > 0)
-+		writel(S3C2410_ADCCON_PRSCEN | S3C2410_ADCCON_PRSCVL(info->presc&0xFF),\
-+			     base_addr+S3C2410_ADCCON);
-+	else
-+		writel(0,base_addr+S3C2410_ADCCON);
-+
-+
-+	/* Initialise registers */
-+	if ((info->delay&0xffff) > 0)
-+		writel(info->delay & 0xffff,  base_addr+S3C2410_ADCDLY);
-+
-+	writel(WAIT4INT(0), base_addr+S3C2410_ADCTSC);
-+
-+	/* Initialise input stuff */
-+	memset(&ts, 0, sizeof(struct s3c2410ts));
-+	input_dev = input_allocate_device();
-+
-+	if (!input_dev) {
-+		printk(KERN_ERR "Unable to allocate the input device !!\n");
-+		return -ENOMEM;
-+	}
-+
-+	ts.dev = input_dev;
-+	ts.dev->evbit[0] = BIT(EV_SYN) | BIT(EV_KEY) | BIT(EV_ABS);
-+	ts.dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH);
-+	input_set_abs_params(ts.dev, ABS_X, 0, 0x3FF, 0, 0);
-+	input_set_abs_params(ts.dev, ABS_Y, 0, 0x3FF, 0, 0);
-+	input_set_abs_params(ts.dev, ABS_PRESSURE, 0, 1, 0, 0);
-+
-+	ts.dev->private = &ts;
-+	ts.dev->name = s3c2410ts_name;
-+	ts.dev->id.bustype = BUS_RS232;
-+	ts.dev->id.vendor = 0xDEAD;
-+	ts.dev->id.product = 0xBEEF;
-+	ts.dev->id.version = S3C2410TSVERSION;
-+
-+	ts.shift = info->oversampling_shift;
-+
-+	/* Get irqs */
-+	if (request_irq(IRQ_ADC, stylus_action, SA_SAMPLE_RANDOM,
-+		"s3c2410_action", ts.dev)) {
-+		printk(KERN_ERR "s3c2410_ts.c: Could not allocate ts IRQ_ADC !\n");
-+		iounmap(base_addr);
-+		return -EIO;
-+	}
-+	if (request_irq(IRQ_TC, stylus_updown, SA_SAMPLE_RANDOM,
-+			"s3c2410_action", ts.dev)) {
-+		printk(KERN_ERR "s3c2410_ts.c: Could not allocate ts IRQ_TC !\n");
-+		iounmap(base_addr);
-+		return -EIO;
-+	}
-+
-+	printk(KERN_INFO "%s successfully loaded\n", s3c2410ts_name);
-+
-+	/* All went ok, so register to the input system */
-+	input_register_device(ts.dev);
-+
-+	return 0;
-+}
-+
-+static int s3c2410ts_remove(struct platform_device *pdev)
-+{
-+	disable_irq(IRQ_ADC);
-+	disable_irq(IRQ_TC);
-+	free_irq(IRQ_TC,ts.dev);
-+	free_irq(IRQ_ADC,ts.dev);
-+
-+	if (adc_clock) {
-+		clk_disable(adc_clock);
-+		clk_put(adc_clock);
-+		adc_clock = NULL;
-+	}
-+
-+	input_unregister_device(ts.dev);
-+	iounmap(base_addr);
-+
-+	return 0;
-+}
-+
-+static struct platform_driver s3c2410ts_driver = {
-+       .driver         = {
-+	       .name   = "s3c2410-ts",
-+	       .owner  = THIS_MODULE,
-+       },
-+       .probe          = s3c2410ts_probe,
-+       .remove         = s3c2410ts_remove,
-+};
-+
-+
-+static int __init s3c2410ts_init(void)
-+{
-+	return platform_driver_register(&s3c2410ts_driver);
-+}
-+
-+static void __exit s3c2410ts_exit(void)
-+{
-+	platform_driver_unregister(&s3c2410ts_driver);
-+}
-+
-+module_init(s3c2410ts_init);
-+module_exit(s3c2410ts_exit);
-+
-+/*
-+    Local variables:
-+        compile-command: "make ARCH=arm CROSS_COMPILE=/usr/local/arm/3.3.2/bin/arm-linux- -k -C ../../.."
-+        c-basic-offset: 8
-+    End:
-+*/
-Index: linux-2.6.17.14-fic4.test/include/asm-arm/arch-s3c2410/regs-adc.h
-===================================================================
---- linux-2.6.17.14-fic4.test.orig/include/asm-arm/arch-s3c2410/regs-adc.h	2007-01-24 12:17:39.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/include/asm-arm/arch-s3c2410/regs-adc.h	2007-01-24 12:18:11.000000000 +0100
-@@ -44,7 +44,7 @@
- #define S3C2410_ADCTSC_XP_SEN		(1<<4)
- #define S3C2410_ADCTSC_PULL_UP_DISABLE	(1<<3)
- #define S3C2410_ADCTSC_AUTO_PST		(1<<2)
--#define S3C2410_ADCTSC_XY_PST		(0x3<<0)
-+#define S3C2410_ADCTSC_XY_PST(x)	(((x)&0x3)<<0)
- 
- /* ADCDAT0 Bits */
- #define S3C2410_ADCDAT0_UPDOWN		(1<<15)
-Index: linux-2.6.17.14-fic4.test/include/asm-arm/arch-s3c2410/ts.h
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/include/asm-arm/arch-s3c2410/ts.h	2007-01-24 12:18:11.000000000 +0100
-@@ -0,0 +1,28 @@
-+/* linux/include/asm/arch-s3c2410/ts.h
-+ *
-+ * Copyright (c) 2005 Arnaud Patard <arnaud.patard at rtp-net.org>
-+ *
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ *
-+ *  Changelog:
-+ *     24-Mar-2005     RTP     Created file
-+ *     03-Aug-2005     RTP     Renamed to ts.h
-+ */
-+
-+#ifndef __ASM_ARM_TS_H
-+#define __ASM_ARM_TS_H
-+
-+struct s3c2410_ts_mach_info {
-+       int             delay;
-+       int             presc;
-+       int             oversampling_shift;
-+};
-+
-+void __init set_s3c2410ts_info(struct s3c2410_ts_mach_info *hard_s3c2410ts_info);
-+
-+#endif /* __ASM_ARM_TS_H */
-+
-Index: linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/mach-qt2410.c
-===================================================================
---- linux-2.6.17.14-fic4.test.orig/arch/arm/mach-s3c2410/mach-qt2410.c	2007-01-24 12:18:09.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/mach-qt2410.c	2007-01-24 12:18:11.000000000 +0100
-@@ -53,6 +53,7 @@
- #include <asm/arch/fb.h>
- #include <asm/arch/nand.h>
- #include <asm/arch/udc.h>
-+#include <asm/arch/ts.h>
- #include <asm/arch/spi.h>
- #include <asm/arch/spi-gpio.h>
- #include <asm/arch/mci.h>
-@@ -315,6 +316,7 @@
- 	&s3c_device_sdi,
- 	&s3c_device_usbgadget,
- 	&s3c_device_nand,
-+	&s3c_device_ts,
- 	&cs89x0_device,
- };
- 
-@@ -477,6 +479,12 @@
- 	.ocr_avail 	= MMC_VDD_32_33,
- };
- 
-+static struct s3c2410_ts_mach_info qt2410_ts_cfg = {
-+	.delay = 10000,
-+	.presc = 49,
-+	.oversampling_shift = 2,
-+};
-+
- static void __init qt2410_map_io(void)
- {
- 	s3c24xx_init_io(qt2410_iodesc, ARRAY_SIZE(qt2410_iodesc));
-@@ -516,6 +524,7 @@
- 	}
- 
- 	s3c24xx_udc_set_platdata(&qt2410_udc_cfg);
-+	set_s3c2410ts_info(&qt2410_ts_cfg);
- 
- 	s3c2410_gpio_cfgpin(S3C2410_GPB5, S3C2410_GPIO_OUTPUT);
- 	spi_register_board_info(qt2410_spi_board_info,

Added: trunk/src/target/kernel/patches/s3c2410_touchscreen.patch
===================================================================
--- trunk/src/target/kernel/patches/s3c2410_touchscreen.patch	2007-02-15 21:31:15 UTC (rev 1003)
+++ trunk/src/target/kernel/patches/s3c2410_touchscreen.patch	2007-02-15 21:37:15 UTC (rev 1004)
@@ -0,0 +1,580 @@
+diff --git a/arch/arm/mach-s3c2410/devs.c b/arch/arm/mach-s3c2410/devs.c
+index e55a6a9..9a2a67b 100644
+--- a/arch/arm/mach-s3c2410/devs.c
++++ b/arch/arm/mach-s3c2410/devs.c
+@@ -29,6 +29,7 @@ #include <asm/irq.h>
+ 
+ #include <asm/arch/regs-serial.h>
+ #include <asm/arch/udc.h>
++#include <asm/arch/ts.h>
+ 
+ #include "devs.h"
+ #include "cpu.h"
+@@ -205,6 +206,23 @@ struct platform_device s3c_device_nand =
+ 
+ EXPORT_SYMBOL(s3c_device_nand);
+ 
++/* Touchscreen */
++struct platform_device s3c_device_ts = {
++	.name		  = "s3c2410-ts",
++	.id		  = -1,
++};
++
++EXPORT_SYMBOL(s3c_device_ts);
++
++static struct s3c2410_ts_mach_info s3c2410ts_info;
++
++void __init set_s3c2410ts_info(struct s3c2410_ts_mach_info *hard_s3c2410ts_info)
++{
++	memcpy(&s3c2410ts_info,hard_s3c2410ts_info,sizeof(struct s3c2410_ts_mach_info));
++	s3c_device_ts.dev.platform_data = &s3c2410ts_info;
++}
++EXPORT_SYMBOL(set_s3c2410ts_info);
++
+ /* USB Device (Gadget)*/
+ 
+ static struct resource s3c_usbgadget_resource[] = {
+diff --git a/arch/arm/mach-s3c2410/devs.h b/arch/arm/mach-s3c2410/devs.h
+index 14fb0ba..0fc63cf 100644
+--- a/arch/arm/mach-s3c2410/devs.h
++++ b/arch/arm/mach-s3c2410/devs.h
+@@ -41,6 +41,7 @@ extern struct platform_device s3c_device
+ extern struct platform_device s3c_device_timer3;
+ 
+ extern struct platform_device s3c_device_usbgadget;
++extern struct platform_device s3c_device_ts;
+ 
+ /* s3c2440 specific devices */
+ 
+diff --git a/arch/arm/mach-s3c2410/mach-h1940.c b/arch/arm/mach-s3c2410/mach-h1940.c
+index f539535..f65b7ce 100644
+--- a/arch/arm/mach-s3c2410/mach-h1940.c
++++ b/arch/arm/mach-s3c2410/mach-h1940.c
+@@ -39,6 +39,7 @@ #include <asm/arch/h1940.h>
+ #include <asm/arch/h1940-latch.h>
+ #include <asm/arch/fb.h>
+ #include <asm/arch/udc.h>
++#include <asm/arch/ts.h>
+ 
+ #include <linux/serial_core.h>
+ 
+@@ -132,6 +133,11 @@ static struct s3c2410_udc_mach_info h194
+ };
+ 
+ 
++static struct s3c2410_ts_mach_info h1940_ts_cfg __initdata = {
++		.delay = 10000,
++		.presc = 49,
++		.oversampling_shift = 2,
++};
+ 
+ /**
+  * Set lcd on or off
+@@ -183,6 +189,7 @@ static struct platform_device *h1940_dev
+ 	&s3c_device_i2c,
+ 	&s3c_device_iis,
+ 	&s3c_device_usbgadget,
++	&s3c_device_ts,
+ };
+ 
+ static struct s3c24xx_board h1940_board __initdata = {
+@@ -213,6 +220,7 @@ static void __init h1940_init(void)
+ 	u32 tmp;
+ 
+ 	s3c24xx_fb_set_platdata(&h1940_lcdcfg);
++	set_s3c2410ts_info(&h1940_ts_cfg);
+  	s3c24xx_udc_set_platdata(&h1940_udc_cfg);
+ 
+ 	/* Turn off suspend on both USB ports, and switch the
+diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig
+index 6b46c9b..91f5f4f 100644
+--- a/drivers/input/touchscreen/Kconfig
++++ b/drivers/input/touchscreen/Kconfig
+@@ -49,6 +49,24 @@ config TOUCHSCREEN_CORGI
+ 	  To compile this driver as a module, choose M here: the
+ 	  module will be called corgi_ts.
+ 
++config TOUCHSCREEN_S3C2410
++	tristate "Samsung S3C2410 touchscreen input driver"
++	depends on ARCH_S3C2410 && INPUT && INPUT_TOUCHSCREEN
++	select SERIO
++	help
++	  Say Y here if you have the s3c2410 touchscreen.
++
++	  If unsure, say N.
++
++	  To compile this driver as a module, choose M here: the
++	  module will be called s3c2410_ts.
++
++config TOUCHSCREEN_S3C2410_DEBUG
++	boolean "Samsung S3C2410 touchscreen debug messages"
++	depends on TOUCHSCREEN_S3C2410
++	help
++	  Select this if you want debug messages
++
+ config TOUCHSCREEN_GUNZE
+ 	tristate "Gunze AHL-51S touchscreen"
+ 	select SERIO
+diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile
+index 30e6e22..8cbaac5 100644
+--- a/drivers/input/touchscreen/Makefile
++++ b/drivers/input/touchscreen/Makefile
+@@ -16,3 +16,4 @@ obj-$(CONFIG_TOUCHSCREEN_PENMOUNT)	+= pe
+ obj-$(CONFIG_TOUCHSCREEN_TOUCHRIGHT)	+= touchright.o
+ obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN)	+= touchwin.o
+ obj-$(CONFIG_TOUCHSCREEN_UCB1400)	+= ucb1400_ts.o
++obj-$(CONFIG_TOUCHSCREEN_S3C2410)	+= s3c2410_ts.o
+diff --git a/drivers/input/touchscreen/s3c2410_ts.c b/drivers/input/touchscreen/s3c2410_ts.c
+new file mode 100644
+index 0000000..0dea2ef
+--- /dev/null
++++ b/drivers/input/touchscreen/s3c2410_ts.c
+@@ -0,0 +1,401 @@
++/*
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *
++ * Copyright (c) 2004 Arnaud Patard <arnaud.patard at rtp-net.org>
++ * iPAQ H1940 touchscreen support
++ *
++ * ChangeLog
++ *
++ * 2004-09-05: Herbert Pötzl <herbert at 13thfloor.at>
++ *	- added clock (de-)allocation code
++ *
++ * 2005-03-06: Arnaud Patard <arnaud.patard at rtp-net.org>
++ *      - h1940_ -> s3c2410 (this driver is now also used on the n30
++ *        machines :P)
++ *      - Debug messages are now enabled with the config option
++ *        TOUCHSCREEN_S3C2410_DEBUG
++ *      - Changed the way the value are read
++ *      - Input subsystem should now work
++ *      - Use ioremap and readl/writel
++ *
++ * 2005-03-23: Arnaud Patard <arnaud.patard at rtp-net.org>
++ *      - Make use of some undocumented features of the touchscreen
++ *        controller
++ *
++ */
++
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/slab.h>
++#include <linux/input.h>
++#include <linux/init.h>
++#include <linux/serio.h>
++#include <linux/delay.h>
++#include <linux/platform_device.h>
++#include <linux/clk.h>
++#include <asm/io.h>
++#include <asm/irq.h>
++
++#include <asm/arch/regs-adc.h>
++#include <asm/arch/regs-gpio.h>
++#include <asm/arch/ts.h>
++
++/* For ts.dev.id.version */
++#define S3C2410TSVERSION	0x0101
++
++#define TSC_SLEEP  (S3C2410_ADCTSC_PULL_UP_DISABLE | S3C2410_ADCTSC_XY_PST(0))
++
++#define WAIT4INT(x)  (((x)<<8) | \
++		     S3C2410_ADCTSC_YM_SEN | S3C2410_ADCTSC_YP_SEN | S3C2410_ADCTSC_XP_SEN | \
++		     S3C2410_ADCTSC_XY_PST(3))
++
++#define AUTOPST	     (S3C2410_ADCTSC_YM_SEN | S3C2410_ADCTSC_YP_SEN | S3C2410_ADCTSC_XP_SEN | \
++		     S3C2410_ADCTSC_AUTO_PST | S3C2410_ADCTSC_XY_PST(0))
++
++#define DEBUG_LVL    KERN_DEBUG
++
++MODULE_AUTHOR("Arnaud Patard <arnaud.patard at rtp-net.org>");
++MODULE_DESCRIPTION("s3c2410 touchscreen driver");
++MODULE_LICENSE("GPL");
++
++/*
++ * Definitions & global arrays.
++ */
++
++
++static char *s3c2410ts_name = "s3c2410 TouchScreen";
++
++/*
++ * Per-touchscreen data.
++ */
++
++struct s3c2410ts {
++	struct input_dev *dev;
++	long xp;
++	long yp;
++	int count;
++	int shift;
++};
++
++static struct s3c2410ts ts;
++static void __iomem *base_addr;
++
++static inline void s3c2410_ts_connect(void)
++{
++	s3c2410_gpio_cfgpin(S3C2410_GPG12, S3C2410_GPG12_XMON);
++	s3c2410_gpio_cfgpin(S3C2410_GPG13, S3C2410_GPG13_nXPON);
++	s3c2410_gpio_cfgpin(S3C2410_GPG14, S3C2410_GPG14_YMON);
++	s3c2410_gpio_cfgpin(S3C2410_GPG15, S3C2410_GPG15_nYPON);
++}
++
++static void touch_timer_fire(unsigned long data)
++{
++  	unsigned long data0;
++  	unsigned long data1;
++	int updown;
++
++  	data0 = readl(base_addr+S3C2410_ADCDAT0);
++  	data1 = readl(base_addr+S3C2410_ADCDAT1);
++
++ 	updown = (!(data0 & S3C2410_ADCDAT0_UPDOWN)) && (!(data1 & S3C2410_ADCDAT0_UPDOWN));
++
++ 	if (updown) {
++ 		if (ts.count != 0) {
++ 			ts.xp >>= ts.shift;
++ 			ts.yp >>= ts.shift;
++
++#ifdef CONFIG_TOUCHSCREEN_S3C2410_DEBUG
++ 			{
++ 				struct timeval tv;
++ 				do_gettimeofday(&tv);
++ 				printk(DEBUG_LVL "T: %06d, X: %03ld, Y: %03ld\n", (int)tv.tv_usec, ts.xp, ts.yp);
++ 			}
++#endif
++
++ 			input_report_abs(ts.dev, ABS_X, ts.xp);
++ 			input_report_abs(ts.dev, ABS_Y, ts.yp);
++
++ 			input_report_key(ts.dev, BTN_TOUCH, 1);
++ 			input_report_abs(ts.dev, ABS_PRESSURE, 1);
++ 			input_sync(ts.dev);
++ 		}
++
++ 		ts.xp = 0;
++ 		ts.yp = 0;
++ 		ts.count = 0;
++
++ 		writel(S3C2410_ADCTSC_PULL_UP_DISABLE | AUTOPST, base_addr+S3C2410_ADCTSC);
++ 		writel(readl(base_addr+S3C2410_ADCCON) | S3C2410_ADCCON_ENABLE_START, base_addr+S3C2410_ADCCON);
++ 	} else {
++ 		ts.count = 0;
++
++ 		input_report_key(ts.dev, BTN_TOUCH, 0);
++ 		input_report_abs(ts.dev, ABS_PRESSURE, 0);
++ 		input_sync(ts.dev);
++
++ 		writel(WAIT4INT(0), base_addr+S3C2410_ADCTSC);
++ 	}
++}
++
++static struct timer_list touch_timer =
++		TIMER_INITIALIZER(touch_timer_fire, 0, 0);
++
++static irqreturn_t stylus_updown(int irq, void *dev_id)
++{
++	unsigned long data0;
++	unsigned long data1;
++	int updown;
++
++	data0 = readl(base_addr+S3C2410_ADCDAT0);
++	data1 = readl(base_addr+S3C2410_ADCDAT1);
++
++	updown = (!(data0 & S3C2410_ADCDAT0_UPDOWN)) && (!(data1 & S3C2410_ADCDAT0_UPDOWN));
++
++	/* TODO we should never get an interrupt with updown set while
++	 * the timer is running, but maybe we ought to verify that the
++	 * timer isn't running anyways. */
++
++	if (updown)
++		touch_timer_fire(0);
++
++	return IRQ_HANDLED;
++}
++
++
++static irqreturn_t stylus_action(int irq, void *dev_id)
++{
++	unsigned long data0;
++	unsigned long data1;
++
++	data0 = readl(base_addr+S3C2410_ADCDAT0);
++	data1 = readl(base_addr+S3C2410_ADCDAT1);
++
++	ts.xp += data0 & S3C2410_ADCDAT0_XPDATA_MASK;
++	ts.yp += data1 & S3C2410_ADCDAT1_YPDATA_MASK;
++	ts.count++;
++
++        if (ts.count < (1<<ts.shift)) {
++		writel(S3C2410_ADCTSC_PULL_UP_DISABLE | AUTOPST, base_addr+S3C2410_ADCTSC);
++		writel(readl(base_addr+S3C2410_ADCCON) | S3C2410_ADCCON_ENABLE_START, base_addr+S3C2410_ADCCON);
++	} else {
++		mod_timer(&touch_timer, jiffies+1);
++		writel(WAIT4INT(1), base_addr+S3C2410_ADCTSC);
++	}
++
++	return IRQ_HANDLED;
++}
++
++static struct clk	*adc_clock;
++
++/*
++ * The functions for inserting/removing us as a module.
++ */
++
++static int __init s3c2410ts_probe(struct platform_device *pdev)
++{
++	struct s3c2410_ts_mach_info *info;
++	struct input_dev *input_dev;
++
++	info = ( struct s3c2410_ts_mach_info *)pdev->dev.platform_data;
++
++	if (!info)
++	{
++		printk(KERN_ERR "Hm... too bad : no platform data for ts\n");
++		return -EINVAL;
++	}
++
++#ifdef CONFIG_TOUCHSCREEN_S3C2410_DEBUG
++	printk(DEBUG_LVL "Entering s3c2410ts_init\n");
++#endif
++
++	adc_clock = clk_get(NULL, "adc");
++	if (!adc_clock) {
++		printk(KERN_ERR "failed to get adc clock source\n");
++		return -ENOENT;
++	}
++	clk_enable(adc_clock);
++
++#ifdef CONFIG_TOUCHSCREEN_S3C2410_DEBUG
++	printk(DEBUG_LVL "got and enabled clock\n");
++#endif
++
++	base_addr=ioremap(S3C2410_PA_ADC,0x20);
++	if (base_addr == NULL) {
++		printk(KERN_ERR "Failed to remap register block\n");
++		return -ENOMEM;
++	}
++
++
++	/* Configure GPIOs */
++	s3c2410_ts_connect();
++
++	if ((info->presc&0xff) > 0)
++		writel(S3C2410_ADCCON_PRSCEN | S3C2410_ADCCON_PRSCVL(info->presc&0xFF),\
++			     base_addr+S3C2410_ADCCON);
++	else
++		writel(0,base_addr+S3C2410_ADCCON);
++
++
++	/* Initialise registers */
++	if ((info->delay&0xffff) > 0)
++		writel(info->delay & 0xffff,  base_addr+S3C2410_ADCDLY);
++
++	writel(WAIT4INT(0), base_addr+S3C2410_ADCTSC);
++
++	/* Initialise input stuff */
++	memset(&ts, 0, sizeof(struct s3c2410ts));
++	input_dev = input_allocate_device();
++
++	if (!input_dev) {
++		printk(KERN_ERR "Unable to allocate the input device !!\n");
++		return -ENOMEM;
++	}
++
++	ts.dev = input_dev;
++	ts.dev->evbit[0] = BIT(EV_SYN) | BIT(EV_KEY) | BIT(EV_ABS);
++	ts.dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH);
++	input_set_abs_params(ts.dev, ABS_X, 0, 0x3FF, 0, 0);
++	input_set_abs_params(ts.dev, ABS_Y, 0, 0x3FF, 0, 0);
++	input_set_abs_params(ts.dev, ABS_PRESSURE, 0, 1, 0, 0);
++
++	ts.dev->private = &ts;
++	ts.dev->name = s3c2410ts_name;
++	ts.dev->id.bustype = BUS_RS232;
++	ts.dev->id.vendor = 0xDEAD;
++	ts.dev->id.product = 0xBEEF;
++	ts.dev->id.version = S3C2410TSVERSION;
++
++	ts.shift = info->oversampling_shift;
++
++	/* Get irqs */
++	if (request_irq(IRQ_ADC, stylus_action, IRQF_SAMPLE_RANDOM,
++		"s3c2410_action", ts.dev)) {
++		printk(KERN_ERR "s3c2410_ts.c: Could not allocate ts IRQ_ADC !\n");
++		iounmap(base_addr);
++		return -EIO;
++	}
++	if (request_irq(IRQ_TC, stylus_updown, IRQF_SAMPLE_RANDOM,
++			"s3c2410_action", ts.dev)) {
++		printk(KERN_ERR "s3c2410_ts.c: Could not allocate ts IRQ_TC !\n");
++		iounmap(base_addr);
++		return -EIO;
++	}
++
++	printk(KERN_INFO "%s successfully loaded\n", s3c2410ts_name);
++
++	/* All went ok, so register to the input system */
++	input_register_device(ts.dev);
++
++	return 0;
++}
++
++static int s3c2410ts_remove(struct platform_device *pdev)
++{
++	disable_irq(IRQ_ADC);
++	disable_irq(IRQ_TC);
++	free_irq(IRQ_TC,ts.dev);
++	free_irq(IRQ_ADC,ts.dev);
++
++	if (adc_clock) {
++		clk_disable(adc_clock);
++		clk_put(adc_clock);
++		adc_clock = NULL;
++	}
++
++	input_unregister_device(ts.dev);
++	iounmap(base_addr);
++
++	return 0;
++}
++
++#ifdef CONFIG_PM
++static int s3c2410ts_suspend(struct platform_device *pdev, pm_message_t state)
++{
++	writel(TSC_SLEEP, base_addr+S3C2410_ADCTSC);
++	writel(readl(base_addr+S3C2410_ADCCON) | S3C2410_ADCCON_STDBM,
++	       base_addr+S3C2410_ADCCON);
++
++	disable_irq(IRQ_ADC);
++	disable_irq(IRQ_TC);
++
++	clk_disable(adc_clock);
++
++	return 0;
++}
++
++static int s3c2410ts_resume(struct platform_device *pdev)
++{
++	struct s3c2410_ts_mach_info *info =
++		( struct s3c2410_ts_mach_info *)pdev->dev.platform_data;
++
++	clk_enable(adc_clock);
++	msleep(1);
++
++	enable_irq(IRQ_ADC);
++	enable_irq(IRQ_TC);
++
++	if ((info->presc&0xff) > 0)
++		writel(S3C2410_ADCCON_PRSCEN | S3C2410_ADCCON_PRSCVL(info->presc&0xFF),\
++			     base_addr+S3C2410_ADCCON);
++	else
++		writel(0,base_addr+S3C2410_ADCCON);
++
++	/* Initialise registers */
++	if ((info->delay&0xffff) > 0)
++		writel(info->delay & 0xffff,  base_addr+S3C2410_ADCDLY);
++
++	writel(WAIT4INT(0), base_addr+S3C2410_ADCTSC);
++
++	return 0;
++}
++
++#else
++#define s3c2410ts_suspend NULL
++#define s3c2410ts_resume  NULL
++#endif
++
++static struct platform_driver s3c2410ts_driver = {
++       .driver         = {
++	       .name   = "s3c2410-ts",
++	       .owner  = THIS_MODULE,
++       },
++       .probe          = s3c2410ts_probe,
++       .remove         = s3c2410ts_remove,
++       .suspend        = s3c2410ts_suspend,
++       .resume         = s3c2410ts_resume,
++
++};
++
++
++static int __init s3c2410ts_init(void)
++{
++	return platform_driver_register(&s3c2410ts_driver);
++}
++
++static void __exit s3c2410ts_exit(void)
++{
++	platform_driver_unregister(&s3c2410ts_driver);
++}
++
++module_init(s3c2410ts_init);
++module_exit(s3c2410ts_exit);
++
++/*
++    Local variables:
++        compile-command: "make ARCH=arm CROSS_COMPILE=/usr/local/arm/3.3.2/bin/arm-linux- -k -C ../../.."
++        c-basic-offset: 8
++    End:
++*/
+diff --git a/include/asm-arm/arch-s3c2410/regs-adc.h b/include/asm-arm/arch-s3c2410/regs-adc.h
+index 3196a28..c7f2319 100644
+--- a/include/asm-arm/arch-s3c2410/regs-adc.h
++++ b/include/asm-arm/arch-s3c2410/regs-adc.h
+@@ -41,7 +41,7 @@ #define S3C2410_ADCTSC_XM_SEN		(1<<5)
+ #define S3C2410_ADCTSC_XP_SEN		(1<<4)
+ #define S3C2410_ADCTSC_PULL_UP_DISABLE	(1<<3)
+ #define S3C2410_ADCTSC_AUTO_PST		(1<<2)
+-#define S3C2410_ADCTSC_XY_PST		(0x3<<0)
++#define S3C2410_ADCTSC_XY_PST(x)	(((x)&0x3)<<0)
+ 
+ /* ADCDAT0 Bits */
+ #define S3C2410_ADCDAT0_UPDOWN		(1<<15)
+diff --git a/include/asm-arm/arch-s3c2410/ts.h b/include/asm-arm/arch-s3c2410/ts.h
+new file mode 100644
+index 0000000..8566f25
+--- /dev/null
++++ b/include/asm-arm/arch-s3c2410/ts.h
+@@ -0,0 +1,28 @@
++/* linux/include/asm/arch-s3c2410/ts.h
++ *
++ * Copyright (c) 2005 Arnaud Patard <arnaud.patard at rtp-net.org>
++ *
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ *
++ *  Changelog:
++ *     24-Mar-2005     RTP     Created file
++ *     03-Aug-2005     RTP     Renamed to ts.h
++ */
++
++#ifndef __ASM_ARM_TS_H
++#define __ASM_ARM_TS_H
++
++struct s3c2410_ts_mach_info {
++       int             delay;
++       int             presc;
++       int             oversampling_shift;
++};
++
++void __init set_s3c2410ts_info(struct s3c2410_ts_mach_info *hard_s3c2410ts_info);
++
++#endif /* __ASM_ARM_TS_H */
++

Modified: trunk/src/target/kernel/patches/s3c2410_udc-vbus_draw_pdata.patch
===================================================================
--- trunk/src/target/kernel/patches/s3c2410_udc-vbus_draw_pdata.patch	2007-02-15 21:31:15 UTC (rev 1003)
+++ trunk/src/target/kernel/patches/s3c2410_udc-vbus_draw_pdata.patch	2007-02-15 21:37:15 UTC (rev 1004)
@@ -2,12 +2,12 @@
 which gets called when the amount of power we can draw from Vbus
 has changed.
 
-Index: linux-2.6.17.14-fic4.test/drivers/usb/gadget/s3c2410_udc.c
+Index: linux-2.6.20/drivers/usb/gadget/s3c2410_udc.c
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/drivers/usb/gadget/s3c2410_udc.c	2007-01-21 13:12:03.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/drivers/usb/gadget/s3c2410_udc.c	2007-01-21 13:29:44.000000000 +0100
-@@ -1370,11 +1370,22 @@
- 	return 0;
+--- linux-2.6.20.orig/drivers/usb/gadget/s3c2410_udc.c	2007-02-15 14:55:45.000000000 +0100
++++ linux-2.6.20/drivers/usb/gadget/s3c2410_udc.c	2007-02-15 15:00:11.000000000 +0100
+@@ -1404,12 +1404,23 @@
+ 	return IRQ_HANDLED;
  }
  
 +static void s3c2410_vbus_draw(struct usb_gadget *_gadget, int ma)
@@ -25,14 +25,15 @@
  	.wakeup             = s3c2410_wakeup,
  	.set_selfpowered    = s3c2410_set_selfpowered,
          .pullup             = s3c2410_pullup,
+ 	.vbus_session	    = s3c2410_udc_vbus_session,
 +	.vbus_draw	    = s3c2410_vbus_draw,
  };
  
- 
-Index: linux-2.6.17.14-fic4.test/include/asm-arm/arch-s3c2410/udc.h
+ /*------------------------- gadget driver handling---------------------------*/
+Index: linux-2.6.20/include/asm-arm/arch-s3c2410/udc.h
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/include/asm-arm/arch-s3c2410/udc.h	2007-01-21 13:06:57.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/include/asm-arm/arch-s3c2410/udc.h	2007-01-21 13:12:03.000000000 +0100
+--- linux-2.6.20.orig/include/asm-arm/arch-s3c2410/udc.h	2007-02-15 14:54:49.000000000 +0100
++++ linux-2.6.20/include/asm-arm/arch-s3c2410/udc.h	2007-02-15 15:00:50.000000000 +0100
 @@ -12,6 +12,7 @@
   *	14-Mar-2005	RTP	Created file
   *	02-Aug-2005	RTP	File rename
@@ -45,7 +46,7 @@
  
  struct s3c2410_udc_mach_info {
  	void	(*udc_command)(enum s3c2410_udc_cmd_e);
-+	void	(*vbus_draw)(unsigned int ma);
++ 	void	(*vbus_draw)(unsigned int ma);
+ 	unsigned int vbus_pin;
+ 	unsigned char vbus_pin_inverted;
  };
- 
- extern void __init s3c24xx_udc_set_platdata(struct s3c2410_udc_mach_info *);

Modified: trunk/src/target/kernel/patches/s3c2410_udc.patch
===================================================================
--- trunk/src/target/kernel/patches/s3c2410_udc.patch	2007-02-15 21:31:15 UTC (rev 1003)
+++ trunk/src/target/kernel/patches/s3c2410_udc.patch	2007-02-15 21:37:15 UTC (rev 1004)
@@ -1,19 +1,17 @@
-This is a driver for the S3C2410 usb device controller
-
-Index: linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/devs.c
+Index: linux-2.6.20/arch/arm/mach-s3c2410/devs.c
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/arch/arm/mach-s3c2410/devs.c	2006-12-11 21:44:29.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/devs.c	2006-12-11 21:44:31.000000000 +0100
-@@ -36,6 +36,7 @@
+--- linux-2.6.20.orig/arch/arm/mach-s3c2410/devs.c	2007-02-04 19:44:54.000000000 +0100
++++ linux-2.6.20/arch/arm/mach-s3c2410/devs.c	2007-02-15 14:54:49.000000000 +0100
+@@ -29,6 +29,7 @@
  #include <asm/irq.h>
  
  #include <asm/arch/regs-serial.h>
 +#include <asm/arch/udc.h>
  
  #include "devs.h"
+ #include "cpu.h"
+@@ -230,6 +231,20 @@
  
-@@ -161,6 +162,20 @@
- 
  EXPORT_SYMBOL(s3c_device_usbgadget);
  
 +void __init s3c24xx_udc_set_platdata(struct s3c2410_udc_mach_info *pd)
@@ -33,30 +31,120 @@
  /* Watchdog */
  
  static struct resource s3c_wdt_resource[] = {
-Index: linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/s3c2410.c
+Index: linux-2.6.20/arch/arm/mach-s3c2410/mach-h1940.c
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/arch/arm/mach-s3c2410/s3c2410.c	2006-12-11 21:44:29.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/arch/arm/mach-s3c2410/s3c2410.c	2006-12-11 21:44:31.000000000 +0100
-@@ -48,6 +48,7 @@
+--- linux-2.6.20.orig/arch/arm/mach-s3c2410/mach-h1940.c	2007-02-04 19:44:54.000000000 +0100
++++ linux-2.6.20/arch/arm/mach-s3c2410/mach-h1940.c	2007-02-15 14:54:49.000000000 +0100
+@@ -33,10 +33,13 @@
  
+ #include <asm/arch/regs-serial.h>
+ #include <asm/arch/regs-lcd.h>
++#include <asm/arch/regs-gpio.h>
++#include <asm/arch/regs-clock.h>
+ 
+ #include <asm/arch/h1940.h>
+ #include <asm/arch/h1940-latch.h>
+ #include <asm/arch/fb.h>
++#include <asm/arch/udc.h>
+ 
+ #include "clock.h"
+ #include "devs.h"
+@@ -102,6 +105,32 @@
+ 
+ EXPORT_SYMBOL_GPL(h1940_latch_control);
+ 
++static void h1940_udc_pullup(enum s3c2410_udc_cmd_e cmd)
++{
++	printk(KERN_DEBUG "udc: pullup(%d)\n",cmd);
++
++	switch (cmd)
++	{
++		case S3C2410_UDC_P_ENABLE :
++			h1940_latch_control(0, H1940_LATCH_USB_DP);
++			break;
++		case S3C2410_UDC_P_DISABLE :
++			h1940_latch_control(H1940_LATCH_USB_DP, 0);
++			break;
++		case S3C2410_UDC_P_RESET :
++			break;
++		default:
++			break;
++	}
++}
++
++static struct s3c2410_udc_mach_info h1940_udc_cfg __initdata = {
++	.udc_command		= h1940_udc_pullup,
++	.vbus_pin		= S3C2410_GPG5,
++	.vbus_pin_inverted	= 1,
++};
++
++
+ 
+ /**
+  * Set lcd on or off
+@@ -152,6 +181,7 @@
+ 	&s3c_device_wdt,
+ 	&s3c_device_i2c,
+ 	&s3c_device_iis,
++	&s3c_device_usbgadget,
+ };
+ 
+ static struct s3c24xx_board h1940_board __initdata = {
+@@ -179,7 +209,23 @@
+ 
+ static void __init h1940_init(void)
+ {
++	u32 tmp;
++
+ 	s3c24xx_fb_set_platdata(&h1940_lcdcfg);
++ 	s3c24xx_udc_set_platdata(&h1940_udc_cfg);
++
++	/* Turn off suspend on both USB ports, and switch the
++	 * selectable USB port to USB device mode. */
++
++	s3c2410_modify_misccr(S3C2410_MISCCR_USBHOST |
++			      S3C2410_MISCCR_USBSUSPND0 |
++			      S3C2410_MISCCR_USBSUSPND1, 0x0);
++
++	tmp = (
++		 0x78 << S3C2410_PLLCON_MDIVSHIFT)
++	      | (0x02 << S3C2410_PLLCON_PDIVSHIFT)
++	      | (0x03 << S3C2410_PLLCON_SDIVSHIFT);
++	writel(tmp, S3C2410_UPLLCON);
+ }
+ 
+ MACHINE_START(H1940, "IPAQ-H1940")
+@@ -189,6 +235,6 @@
+ 	.boot_params	= S3C2410_SDRAM_PA + 0x100,
+ 	.map_io		= h1940_map_io,
+ 	.init_irq	= h1940_init_irq,
+-	.init_machine   = h1940_init,
++	.init_machine	= h1940_init,
+ 	.timer		= &s3c24xx_timer,
+ MACHINE_END
+Index: linux-2.6.20/arch/arm/mach-s3c2410/s3c2410.c
+===================================================================
+--- linux-2.6.20.orig/arch/arm/mach-s3c2410/s3c2410.c	2007-02-04 19:44:54.000000000 +0100
++++ linux-2.6.20/arch/arm/mach-s3c2410/s3c2410.c	2007-02-15 14:55:33.000000000 +0100
+@@ -39,6 +39,7 @@
+ /* Initial IO mappings */
+ 
  static struct map_desc s3c2410_iodesc[] __initdata = {
- 	IODESC_ENT(USBHOST),
 +	IODESC_ENT(USBDEV),
  	IODESC_ENT(CLKPWR),
  	IODESC_ENT(LCD),
  	IODESC_ENT(TIMER),
-Index: linux-2.6.17.14-fic4.test/drivers/usb/gadget/Kconfig
+Index: linux-2.6.20/drivers/usb/gadget/Kconfig
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/drivers/usb/gadget/Kconfig	2006-12-11 21:44:29.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/drivers/usb/gadget/Kconfig	2006-12-11 21:44:31.000000000 +0100
-@@ -187,6 +187,27 @@
+--- linux-2.6.20.orig/drivers/usb/gadget/Kconfig	2007-02-04 19:44:54.000000000 +0100
++++ linux-2.6.20/drivers/usb/gadget/Kconfig	2007-02-15 14:54:49.000000000 +0100
+@@ -187,6 +187,25 @@
  
  	   Select this only if your OMAP board has a Mini-AB connector.
  
 +config USB_GADGET_S3C2410
-+	boolean "S3C2410 USB Device Controller"
++	boolean "S3C2410"
 +	depends on ARCH_S3C2410
-+	select USB_GADGET_SELECTED
 +	help
 +	  Samsung's S3C2410 is an ARM-4 processor with an integrated
 +	  full speed USB 1.1 device controller.
@@ -67,20 +155,19 @@
 +	tristate
 +	depends on USB_GADGET_S3C2410
 +	default USB_GADGET
++	select USB_GADGET_SELECTED
 +
 +config USB_S3C2410_DEBUG
 +	boolean "S3C2410 udc debug messages"
 +	depends on USB_GADGET_S3C2410
-+	help
-+	  foo
 +
  config USB_GADGET_AT91
  	boolean "AT91 USB Device Port"
- 	depends on ARCH_AT91RM9200
-Index: linux-2.6.17.14-fic4.test/drivers/usb/gadget/Makefile
+ 	depends on ARCH_AT91
+Index: linux-2.6.20/drivers/usb/gadget/Makefile
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/drivers/usb/gadget/Makefile	2006-12-11 21:44:29.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/drivers/usb/gadget/Makefile	2006-12-11 21:44:31.000000000 +0100
+--- linux-2.6.20.orig/drivers/usb/gadget/Makefile	2007-02-04 19:44:54.000000000 +0100
++++ linux-2.6.20/drivers/usb/gadget/Makefile	2007-02-15 14:54:49.000000000 +0100
 @@ -7,6 +7,7 @@
  obj-$(CONFIG_USB_GOKU)		+= goku_udc.o
  obj-$(CONFIG_USB_OMAP)		+= omap_udc.o
@@ -89,11 +176,11 @@
  obj-$(CONFIG_USB_AT91)		+= at91_udc.o
  
  #
-Index: linux-2.6.17.14-fic4.test/drivers/usb/gadget/s3c2410_udc.c
+Index: linux-2.6.20/drivers/usb/gadget/s3c2410_udc.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/drivers/usb/gadget/s3c2410_udc.c	2006-12-11 21:44:31.000000000 +0100
-@@ -0,0 +1,1800 @@
++++ linux-2.6.20/drivers/usb/gadget/s3c2410_udc.c	2007-02-15 14:54:49.000000000 +0100
+@@ -0,0 +1,1897 @@
 +/*
 + * linux/drivers/usb/gadget/s3c2410_udc.c
 + * Samsung on-chip full speed USB device controllers
@@ -115,7 +202,6 @@
 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 + *
 + */
-+#include <linux/config.h>
 +#include <linux/module.h>
 +#include <linux/kernel.h>
 +#include <linux/delay.h>
@@ -888,7 +974,7 @@
 + *      s3c2410_udc_irq - interrupt handler
 + */
 +static irqreturn_t
-+s3c2410_udc_irq(int irq, void *_dev, struct pt_regs *r)
++s3c2410_udc_irq(int irq, void *_dev)
 +{
 +	struct s3c2410_udc      *dev = _dev;
 +	int usb_status;
@@ -1440,14 +1526,10 @@
 +static void udc_disable(struct s3c2410_udc *dev);
 +static void udc_enable(struct s3c2410_udc *dev);
 +
-+static int s3c2410_pullup (struct usb_gadget *_gadget, int is_on)
++static int pull_up (struct s3c2410_udc  *udc, int is_on)
 +{
-+	struct s3c2410_udc  *udc;
-+
-+	dprintk(DEBUG_NORMAL, "s3c2410_pullup()\n");
++	dprintk(DEBUG_NORMAL, "pull_up()\n");
 +	
-+	udc = container_of (_gadget, struct s3c2410_udc, gadget);
-+
 +	if (udc_info && udc_info->udc_command) {
 +		if (is_on)
 +			udc_enable(udc);
@@ -1466,14 +1548,53 @@
 +	return 0;
 +}
 +
++static int s3c2410_udc_vbus_session(struct usb_gadget *_gadget, int is_active)
++{
++	struct s3c2410_udc  *udc;
++
++	dprintk(DEBUG_NORMAL, "s3c2410_udc_vbus_session()\n");
++	udc = container_of (_gadget, struct s3c2410_udc, gadget);
++
++	udc->vbus = (is_active != 0);
++	pull_up(udc, is_active);
++	return 0;
++}
++
++static int s3c2410_pullup (struct usb_gadget *_gadget, int is_on)
++{
++	struct s3c2410_udc  *udc;
++
++	dprintk(DEBUG_NORMAL, "s3c2410_pullup()\n");
++	udc = container_of (_gadget, struct s3c2410_udc, gadget);
++	is_on = !!is_on;
++	pull_up(udc, is_on);
++	return 0;
++}
++
++static irqreturn_t s3c2410_udc_vbus_irq(int irq, void *_dev)
++{
++	struct s3c2410_udc      *dev = _dev;
++	unsigned int 		value;
++
++	dprintk(DEBUG_NORMAL, "s3c2410_udc_vbus_irq()\n");
++	value = s3c2410_gpio_getpin(udc_info->vbus_pin);
++	if (udc_info->vbus_pin_inverted)
++		value = !value;
++
++	if (value != dev->vbus)
++		s3c2410_udc_vbus_session(&dev->gadget, value);
++
++	return IRQ_HANDLED;
++}
++
 +static const struct usb_gadget_ops s3c2410_ops = {
 +	.get_frame          = s3c2410_g_get_frame,
 +	.wakeup             = s3c2410_wakeup,
 +	.set_selfpowered    = s3c2410_set_selfpowered,
 +        .pullup             = s3c2410_pullup,
++	.vbus_session	    = s3c2410_udc_vbus_session,
 +};
 +
-+
 +/*------------------------- gadget driver handling---------------------------*/
 +/*
 + * udc_disable
@@ -1588,9 +1709,18 @@
 +		return -ENODEV;
 +	if (udc->driver)
 +		return -EBUSY;
-+	if (!driver->bind || !driver->unbind || !driver->setup
-+			|| driver->speed == USB_SPEED_UNKNOWN)
++	if (!driver->bind || !driver->setup
++			|| driver->speed != USB_SPEED_FULL) {
++		printk(KERN_ERR "Invalid driver : bind %p setup %p speed %d\n",
++			driver->bind, driver->setup, driver->speed);
 +		return -EINVAL;
++	}
++#if defined(MODULE)
++	if (!driver->unbind) {
++		printk(KERN_ERR "Invalid driver : no unbind method\n");
++		return -EINVAL;
++	}
++#endif
 +
 +	/* Hook the driver */
 +	udc->driver = driver;
@@ -1634,12 +1764,12 @@
 +	if (driver->disconnect)
 +		driver->disconnect(&udc->gadget);
 +
-+	driver->unbind (&udc->gadget);
++	if (driver->unbind)
++		driver->unbind (&udc->gadget);
++
 +	device_del(&udc->gadget.dev);
 +	udc->driver = NULL;
 +
-+	device_release_driver (&udc->gadget.dev);
-+
 +	/* Disable udc */
 +	udc_disable(udc);
 +
@@ -1728,6 +1858,7 @@
 +{
 +	struct s3c2410_udc *udc = &memory;
 +	int retval;
++	unsigned int irq;
 +
 +	dprintk(DEBUG_NORMAL,"s3c2410_udc_probe\n");
 +
@@ -1786,7 +1917,7 @@
 +
 +	/* irq setup after old hardware state is cleaned up */
 +	retval = request_irq(IRQ_USBD, s3c2410_udc_irq,
-+		SA_INTERRUPT, gadget_name, udc);
++		IRQF_DISABLED, gadget_name, udc);
 +
 +	if (retval != 0) {
 +		printk(KERN_ERR "%s: can't get irq %i, err %d\n",
@@ -1794,14 +1925,35 @@
 +		retval = -EBUSY;
 +		goto err_map;
 +	}
++
 +	dprintk(DEBUG_VERBOSE, "%s: got irq %i\n", gadget_name, IRQ_USBD);
 +
++	if (udc_info && udc_info->vbus_pin > 0) {
++		irq = s3c2410_gpio_getirq(udc_info->vbus_pin);
++		retval = request_irq(irq, s3c2410_udc_vbus_irq,
++			IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
++			gadget_name, udc);
++
++		if (retval != 0) {
++			printk(KERN_ERR "%s: can't get vbus irq %i, err %d\n",
++				gadget_name, irq, retval);
++			retval = -EBUSY;
++			goto err_int;
++		}
++
++		dprintk(DEBUG_VERBOSE, "%s: got irq %i\n", gadget_name, irq);
++	}
++	else {
++		udc->vbus = 1;
++	}
++
 +#ifdef ENABLE_SYSFS
 +	/* create device files */
 +	device_create_file(&pdev->dev, &dev_attr_regs);
 +#endif
 +	return 0;
-+
++err_int:
++	free_irq(IRQ_USBD, udc);
 +err_map:
 +	iounmap(base_addr);
 +err_mem:
@@ -1816,20 +1968,22 @@
 +static int s3c2410_udc_remove(struct platform_device *pdev)
 +{
 +	struct s3c2410_udc *udc = platform_get_drvdata(pdev);
++	unsigned int irq;
 +
 +	dprintk(DEBUG_NORMAL, "s3c2410_udc_remove\n");
 +	usb_gadget_unregister_driver(udc->driver);
 +
-+	if (udc->got_irq) {
-+		free_irq(IRQ_USBD, udc);
-+		udc->got_irq = 0;
++	if (udc_info && udc_info->vbus_pin > 0) {
++		irq = s3c2410_gpio_getirq(udc_info->vbus_pin);
++		free_irq(irq, udc);
 +	}
 +
++	free_irq(IRQ_USBD, udc);
++
 +	iounmap(base_addr);
 +	release_mem_region(rsrc_start, rsrc_len);
 +	
 +	platform_set_drvdata(pdev, NULL);
-+	kfree(udc);
 +
 +	if (!IS_ERR(udc_clock) && udc_clock != NULL) {
 +		clk_disable(udc_clock);
@@ -1846,6 +2000,32 @@
 +	return 0;
 +}
 +
++#ifdef CONFIG_PM
++static int s3c2410_udc_suspend(struct platform_device *pdev, pm_message_t message)
++{
++	struct s3c2410_udc *udc = platform_get_drvdata(pdev);
++
++	if (udc_info && udc_info->udc_command)
++		udc_info->udc_command(S3C2410_UDC_P_DISABLE);
++
++	return 0;
++}
++
++static int s3c2410_udc_resume(struct platform_device *pdev)
++{
++	struct s3c2410_udc *udc = platform_get_drvdata(pdev);
++
++	if (udc_info && udc_info->udc_command)
++		udc_info->udc_command(S3C2410_UDC_P_ENABLE);
++
++	return 0;
++}
++#else
++#define s3c2410_udc_suspend      NULL
++#define s3c2410_udc_resume       NULL
++#endif
++
++
 +static struct platform_driver udc_driver_2410 = {
 +	.driver		= {
 +		.name 	= "s3c2410-usbgadget",
@@ -1853,6 +2033,8 @@
 +	},
 +	.probe          = s3c2410_udc_probe,
 +	.remove         = s3c2410_udc_remove,
++	.suspend	= s3c2410_udc_suspend,
++	.resume		= s3c2410_udc_resume,
 +};
 +
 +static struct platform_driver udc_driver_2440 = {
@@ -1862,6 +2044,8 @@
 +	},
 +	.probe          = s3c2410_udc_probe,
 +	.remove         = s3c2410_udc_remove,
++	.suspend	= s3c2410_udc_suspend,
++	.resume		= s3c2410_udc_resume,
 +};
 +
 +static int __init udc_init(void)
@@ -1894,11 +2078,11 @@
 +MODULE_DESCRIPTION(DRIVER_DESC);
 +MODULE_VERSION(DRIVER_VERSION);
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.17.14-fic4.test/drivers/usb/gadget/s3c2410_udc.h
+Index: linux-2.6.20/drivers/usb/gadget/s3c2410_udc.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/drivers/usb/gadget/s3c2410_udc.h	2006-12-11 21:44:31.000000000 +0100
-@@ -0,0 +1,187 @@
++++ linux-2.6.20/drivers/usb/gadget/s3c2410_udc.h	2007-02-15 14:54:49.000000000 +0100
+@@ -0,0 +1,188 @@
 +#ifndef _S3C2410_UDC_H
 +#define _S3C2410_UDC_H
 +
@@ -1979,6 +2163,7 @@
 +	unsigned			req_std : 1;
 +	unsigned			req_config : 1;
 +	unsigned			req_pending : 1;
++	u8				vbus;
 +};
 +
 +/****************** MACROS ******************/
@@ -2086,36 +2271,11 @@
 +#endif
 +
 +
-Index: linux-2.6.17.14-fic4.test/include/asm-arm/arch-s3c2410/regs-udc.h
+Index: linux-2.6.20/include/asm-arm/arch-s3c2410/udc.h
 ===================================================================
---- linux-2.6.17.14-fic4.test.orig/include/asm-arm/arch-s3c2410/regs-udc.h	2006-12-11 21:44:29.000000000 +0100
-+++ linux-2.6.17.14-fic4.test/include/asm-arm/arch-s3c2410/regs-udc.h	2006-12-11 21:44:31.000000000 +0100
-@@ -17,8 +17,7 @@
- #ifndef __ASM_ARCH_REGS_UDC_H
- #define __ASM_ARCH_REGS_UDC_H
- 
--
--#define S3C2410_USBDREG(x) ((x) + S3C24XX_VA_USBDEV)
-+#define S3C2410_USBDREG(x) (x)
- 
- #define S3C2410_UDC_FUNC_ADDR_REG	S3C2410_USBDREG(0x0140)
- #define S3C2410_UDC_PWR_REG		S3C2410_USBDREG(0x0144)
-@@ -142,8 +141,8 @@
- #define S3C2410_UDC_OCSR2_ISO		(1<<6) // R/W
- #define S3C2410_UDC_OCSR2_DMAIEN	(1<<5) // R/W
- 
--#define S3C2410_UDC_SETIX(x)	    \
--	__raw_writel(S3C2410_UDC_INDEX_ ## x, S3C2410_UDC_INDEX_REG);
-+#define S3C2410_UDC_SETIX(base,x)	    \
-+	writel(S3C2410_UDC_INDEX_ ## x, base+S3C2410_UDC_INDEX_REG);
- 
- 
- #define S3C2410_UDC_EP0_CSR_OPKRDY	(1<<0)
-Index: linux-2.6.17.14-fic4.test/include/asm-arm/arch-s3c2410/udc.h
-===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.14-fic4.test/include/asm-arm/arch-s3c2410/udc.h	2006-12-11 21:44:31.000000000 +0100
-@@ -0,0 +1,32 @@
++++ linux-2.6.20/include/asm-arm/arch-s3c2410/udc.h	2007-02-15 14:54:49.000000000 +0100
+@@ -0,0 +1,34 @@
 +/* linux/include/asm/arch-s3c2410/udc.h
 + *
 + * Copyright (c) 2005 Arnaud Patard <arnaud.patard at rtp-net.org>
@@ -2143,6 +2303,8 @@
 +
 +struct s3c2410_udc_mach_info {
 +	void	(*udc_command)(enum s3c2410_udc_cmd_e);
++	unsigned int vbus_pin;
++	unsigned char vbus_pin_inverted;
 +};
 +
 +extern void __init s3c24xx_udc_set_platdata(struct s3c2410_udc_mach_info *);

Added: trunk/src/target/kernel/patches/s3c2410fb_2617_backport.patch
===================================================================
--- trunk/src/target/kernel/patches/s3c2410fb_2617_backport.patch	2007-02-15 21:31:15 UTC (rev 1003)
+++ trunk/src/target/kernel/patches/s3c2410fb_2617_backport.patch	2007-02-15 21:37:15 UTC (rev 1004)
@@ -0,0 +1,340 @@
+Backport / Revert changes between 2.6.17.14 and 2.6.20 in s3c2410_fb.c,
+since somehow the kernel refuses to boot.
+
+TODO: find out why and only fix the actual bug
+
+Signed-off-by: Harald Welte <laforge at openmoko.org>
+
+Index: linux-2.6.20/drivers/video/s3c2410fb.c
+===================================================================
+--- linux-2.6.20.orig/drivers/video/s3c2410fb.c	2007-02-15 19:23:34.000000000 +0100
++++ linux-2.6.20/drivers/video/s3c2410fb.c	2007-02-15 19:24:57.000000000 +0100
+@@ -76,6 +76,7 @@
+ #include <linux/errno.h>
+ #include <linux/string.h>
+ #include <linux/mm.h>
++#include <linux/tty.h>
+ #include <linux/slab.h>
+ #include <linux/delay.h>
+ #include <linux/fb.h>
+@@ -131,7 +132,7 @@
+ 	saddr2 += (var->xres * var->yres * var->bits_per_pixel)/8;
+ 	saddr2>>= 1;
+ 
+-	saddr3 =  S3C2410_OFFSIZE(0) | S3C2410_PAGEWIDTH((var->xres * var->bits_per_pixel / 16) & 0x3ff);
++	saddr3 =  S3C2410_OFFSIZE(0) | S3C2410_PAGEWIDTH(var->xres);
+ 
+ 	dprintk("LCDSADDR1 = 0x%08lx\n", saddr1);
+ 	dprintk("LCDSADDR2 = 0x%08lx\n", saddr2);
+@@ -199,86 +200,28 @@
+ 		var->bits_per_pixel = fbi->mach_info->bpp.min;
+ 
+ 	/* set r/g/b positions */
+-	switch (var->bits_per_pixel) {
+-		case 1:
+-		case 2:
+-		case 4:
+-			var->red.offset    	= 0;
+-			var->red.length    	= var->bits_per_pixel;
+-			var->green         	= var->red;
+-			var->blue          	= var->red;
+-			var->transp.offset 	= 0;
+-			var->transp.length 	= 0;
+-			break;
+-		case 8:
+-			if ( fbi->mach_info->type != S3C2410_LCDCON1_TFT ) {
+-				/* 8 bpp 332 */
+-				var->red.length		= 3;
+-				var->red.offset		= 5;
+-				var->green.length	= 3;
+-				var->green.offset	= 2;
+-				var->blue.length	= 2;
+-				var->blue.offset	= 0;
+-				var->transp.length	= 0;
+-			} else {
+-				var->red.offset    	= 0;
+-				var->red.length    	= var->bits_per_pixel;
+-				var->green         	= var->red;
+-				var->blue          	= var->red;
+-				var->transp.offset 	= 0;
+-				var->transp.length 	= 0;
+-			}
+-			break;
+-		case 12:
+-			/* 12 bpp 444 */
+-			var->red.length		= 4;
+-			var->red.offset		= 8;
+-			var->green.length	= 4;
+-			var->green.offset	= 4;
+-			var->blue.length	= 4;
+-			var->blue.offset	= 0;
+-			var->transp.length	= 0;
+-			break;
+-
+-		default:
+-		case 16:
+-			if (fbi->regs.lcdcon5 & S3C2410_LCDCON5_FRM565 ) {
+-				/* 16 bpp, 565 format */
+-				var->red.offset		= 11;
+-				var->green.offset	= 5;
+-				var->blue.offset	= 0;
+-				var->red.length		= 5;
+-				var->green.length	= 6;
+-				var->blue.length	= 5;
+-				var->transp.length	= 0;
+-			} else {
+-				/* 16 bpp, 5551 format */
+-				var->red.offset		= 11;
+-				var->green.offset	= 6;
+-				var->blue.offset	= 1;
+-				var->red.length		= 5;
+-				var->green.length	= 5;
+-				var->blue.length	= 5;
+-				var->transp.length	= 0;
+-			}
+-			break;
+-		case 24:
+-			/* 24 bpp 888 */
+-			var->red.length		= 8;
+-			var->red.offset		= 16;
+-			var->green.length	= 8;
+-			var->green.offset	= 8;
+-			var->blue.length	= 8;
+-			var->blue.offset	= 0;
+-			var->transp.length	= 0;
+-			break;
+-
+ 
++	if (var->bits_per_pixel == 16) {
++		var->red.offset		= 11;
++		var->green.offset	= 5;
++		var->blue.offset	= 0;
++		var->red.length		= 5;
++		var->green.length	= 6;
++		var->blue.length	= 5;
++		var->transp.length	= 0;
++	} else {
++		var->red.length		= var->bits_per_pixel;
++		var->red.offset		= 0;
++		var->green.length	= var->bits_per_pixel;
++		var->green.offset	= 0;
++		var->blue.length	= var->bits_per_pixel;
++		var->blue.offset	= 0;
++		var->transp.length	= 0;
+ 	}
++
+ 	return 0;
+ }
+ 
+-
+ /* s3c2410fb_activate_var
+  *
+  * activate (set) the controller from the given framebuffer
+@@ -288,61 +231,29 @@
+ static void s3c2410fb_activate_var(struct s3c2410fb_info *fbi,
+ 				   struct fb_var_screeninfo *var)
+ {
+-	int hs;
+-
+ 	fbi->regs.lcdcon1 &= ~S3C2410_LCDCON1_MODEMASK;
+-	fbi->regs.lcdcon1 &= ~S3C2410_LCDCON1_TFT;
+ 
+ 	dprintk("%s: var->xres  = %d\n", __FUNCTION__, var->xres);
+ 	dprintk("%s: var->yres  = %d\n", __FUNCTION__, var->yres);
+ 	dprintk("%s: var->bpp   = %d\n", __FUNCTION__, var->bits_per_pixel);
+ 
+-	fbi->regs.lcdcon1 |= fbi->mach_info->type;
+-
+-	if (fbi->mach_info->type == S3C2410_LCDCON1_TFT)
+-		switch (var->bits_per_pixel) {
+-		case 1:
+-			fbi->regs.lcdcon1 |= S3C2410_LCDCON1_TFT1BPP;
+-			break;
+-		case 2:
+-			fbi->regs.lcdcon1 |= S3C2410_LCDCON1_TFT2BPP;
+-			break;
+-		case 4:
+-			fbi->regs.lcdcon1 |= S3C2410_LCDCON1_TFT4BPP;
+-			break;
+-		case 8:
+-			fbi->regs.lcdcon1 |= S3C2410_LCDCON1_TFT8BPP;
+-			break;
+-		case 16:
+-			fbi->regs.lcdcon1 |= S3C2410_LCDCON1_TFT16BPP;
+-			break;
+-
+-		default:
+-			/* invalid pixel depth */
+-			dev_err(fbi->dev, "invalid bpp %d\n", var->bits_per_pixel);
+-		}
+-	else
+-		switch (var->bits_per_pixel) {
+-		case 1:
+-			fbi->regs.lcdcon1 |= S3C2410_LCDCON1_STN1BPP;
+-			break;
+-		case 2:
+-			fbi->regs.lcdcon1 |= S3C2410_LCDCON1_STN2GREY;
+-			break;
+-		case 4:
+-			fbi->regs.lcdcon1 |= S3C2410_LCDCON1_STN4GREY;
+-			break;
+-		case 8:
+-			fbi->regs.lcdcon1 |= S3C2410_LCDCON1_STN8BPP;
+-			break;
+-		case 12:
+-			fbi->regs.lcdcon1 |= S3C2410_LCDCON1_STN12BPP;
+-			break;
+-
+-		default:
+-			/* invalid pixel depth */
+-			dev_err(fbi->dev, "invalid bpp %d\n", var->bits_per_pixel);
+-		}
++	switch (var->bits_per_pixel) {
++	case 1:
++		fbi->regs.lcdcon1 |= S3C2410_LCDCON1_TFT1BPP;
++		break;
++	case 2:
++		fbi->regs.lcdcon1 |= S3C2410_LCDCON1_TFT2BPP;
++		break;
++	case 4:
++		fbi->regs.lcdcon1 |= S3C2410_LCDCON1_TFT4BPP;
++		break;
++	case 8:
++		fbi->regs.lcdcon1 |= S3C2410_LCDCON1_TFT8BPP;
++		break;
++	case 16:
++		fbi->regs.lcdcon1 |= S3C2410_LCDCON1_TFT16BPP;
++		break;
++	}
+ 
+ 	/* check to see if we need to update sync/borders */
+ 
+@@ -373,44 +284,15 @@
+ 	fbi->regs.lcdcon2 &= ~S3C2410_LCDCON2_LINEVAL(0x3ff);
+ 	fbi->regs.lcdcon2 |=  S3C2410_LCDCON2_LINEVAL(var->yres - 1);
+ 
+-	switch(fbi->mach_info->type) {
+-		case S3C2410_LCDCON1_DSCAN4:
+-		case S3C2410_LCDCON1_STN8:
+-			hs = var->xres / 8;
+-			break;
+-		case S3C2410_LCDCON1_STN4:
+-			hs = var->xres / 4;
+-			break;
+-		default:
+-		case S3C2410_LCDCON1_TFT:
+-			hs = var->xres;
+-			break;
+-
+-	}
+-
+-	/* Special cases : STN color displays */
+-	if ( ((fbi->regs.lcdcon1 & S3C2410_LCDCON1_MODEMASK) == S3C2410_LCDCON1_STN8BPP) \
+-	  || ((fbi->regs.lcdcon1 & S3C2410_LCDCON1_MODEMASK) == S3C2410_LCDCON1_STN12BPP) ) {
+-		hs = hs * 3;
+-	}
+-
+-
+ 	fbi->regs.lcdcon3 &= ~S3C2410_LCDCON3_HOZVAL(0x7ff);
+-	fbi->regs.lcdcon3 |=  S3C2410_LCDCON3_HOZVAL(hs - 1);
++	fbi->regs.lcdcon3 |=  S3C2410_LCDCON3_HOZVAL(var->xres - 1);
+ 
+ 	if (var->pixclock > 0) {
+ 		int clkdiv = s3c2410fb_calc_pixclk(fbi, var->pixclock);
+ 
+-		if (fbi->mach_info->type == S3C2410_LCDCON1_TFT) {
+-			clkdiv = (clkdiv / 2) -1;
+-			if (clkdiv < 0)
+-				clkdiv = 0;
+-		}
+-		else {
+-			clkdiv = (clkdiv / 2);
+-			if (clkdiv < 2)
+-				clkdiv = 2;
+-		}
++		clkdiv = (clkdiv / 2) -1;
++		if (clkdiv < 0)
++			clkdiv = 0;
+ 
+ 		fbi->regs.lcdcon1 &= ~S3C2410_LCDCON1_CLKVAL(0x3ff);
+ 		fbi->regs.lcdcon1 |=  S3C2410_LCDCON1_CLKVAL(clkdiv);
+@@ -448,18 +330,10 @@
+ 	struct s3c2410fb_info *fbi = info->par;
+ 	struct fb_var_screeninfo *var = &info->var;
+ 
+-	switch (var->bits_per_pixel)
+-	{
+-		case 16:
+-			fbi->fb->fix.visual = FB_VISUAL_TRUECOLOR;
+-			break;
+-		case 1:
+-			 fbi->fb->fix.visual = FB_VISUAL_MONO01;
+-			 break;
+-		default:
+-			 fbi->fb->fix.visual = FB_VISUAL_PSEUDOCOLOR;
+-			 break;
+-	}
++	if (var->bits_per_pixel == 16)
++		fbi->fb->fix.visual = FB_VISUAL_TRUECOLOR;
++	else
++		fbi->fb->fix.visual = FB_VISUAL_PSEUDOCOLOR;
+ 
+ 	fbi->fb->fix.line_length     = (var->width*var->bits_per_pixel)/8;
+ 
+@@ -767,7 +641,6 @@
+ 	int ret;
+ 	int irq;
+ 	int i;
+-	u32 lcdcon1;
+ 
+ 	mach_info = pdev->dev.platform_data;
+ 	if (mach_info == NULL) {
+@@ -799,11 +672,6 @@
+ 
+ 	memcpy(&info->regs, &mach_info->regs, sizeof(info->regs));
+ 
+-	/* Stop the video and unset ENVID if set */
+-	info->regs.lcdcon1 &= ~S3C2410_LCDCON1_ENVID;
+-	lcdcon1 = readl(S3C2410_LCDCON1);
+-	writel(lcdcon1 & ~S3C2410_LCDCON1_ENVID, S3C2410_LCDCON1);
+-
+ 	info->mach_info		    = pdev->dev.platform_data;
+ 
+ 	fbinfo->fix.type	    = FB_TYPE_PACKED_PIXELS;
+@@ -926,14 +794,15 @@
+  * shutdown the lcd controller
+ */
+ 
+-static void s3c2410fb_stop_lcd(struct s3c2410fb_info *fbi)
++static void s3c2410fb_stop_lcd(void)
+ {
+ 	unsigned long flags;
++	unsigned long tmp;
+ 
+ 	local_irq_save(flags);
+ 
+-	fbi->regs.lcdcon1 &= ~S3C2410_LCDCON1_ENVID;
+-	writel(fbi->regs.lcdcon1, S3C2410_LCDCON1);
++	tmp = readl(S3C2410_LCDCON1);
++	writel(tmp & ~S3C2410_LCDCON1_ENVID, S3C2410_LCDCON1);
+ 
+ 	local_irq_restore(flags);
+ }
+@@ -947,7 +816,7 @@
+ 	struct s3c2410fb_info *info = fbinfo->par;
+ 	int irq;
+ 
+-	s3c2410fb_stop_lcd(info);
++	s3c2410fb_stop_lcd();
+ 	msleep(1);
+ 
+ 	s3c2410fb_unmap_video_memory(info);
+@@ -975,7 +844,7 @@
+ 	struct fb_info	   *fbinfo = platform_get_drvdata(dev);
+ 	struct s3c2410fb_info *info = fbinfo->par;
+ 
+-	s3c2410fb_stop_lcd(info);
++	s3c2410fb_stop_lcd();
+ 
+ 	/* sleep before disabling the clock, we need to ensure
+ 	 * the LCD DMA engine is not going to get back on the bus

Modified: trunk/src/target/kernel/patches/s3c_mci.patch
===================================================================
--- trunk/src/target/kernel/patches/s3c_mci.patch	2007-02-15 21:31:15 UTC (rev 1003)
+++ trunk/src/target/kernel/patches/s3c_mci.patch	2007-02-15 21:37:15 UTC (rev 1004)
@@ -1,13 +1,13 @@
 This is the latest S3C MMC/SD driver by Thomas Kleffel
 
-Index: linux-2.6.17.7-fic1/drivers/mmc/Kconfig
+Index: linux-2.6.20/drivers/mmc/Kconfig
 ===================================================================
---- linux-2.6.17.7-fic1.orig/drivers/mmc/Kconfig	2006-11-02 12:48:23.000000000 +0100
-+++ linux-2.6.17.7-fic1/drivers/mmc/Kconfig	2006-11-02 12:48:50.000000000 +0100
-@@ -109,4 +109,16 @@
+--- linux-2.6.20.orig/drivers/mmc/Kconfig	2007-02-15 16:15:19.000000000 +0100
++++ linux-2.6.20/drivers/mmc/Kconfig	2007-02-15 16:17:32.000000000 +0100
+@@ -125,4 +125,16 @@
+           To compile this driver as a module, choose M here: the
+ 	  module will be called tifm_sd.
  
- 	  If unsure, say N.
- 
 +config MMC_S3C
 +	tristate "Samsung S3C SD/MMC Card Interface support"
 +	depends on ARCH_S3C2410 && MMC
@@ -21,26 +21,10 @@
 +
 +
  endmenu
-Index: linux-2.6.17.7-fic1/drivers/mmc/Makefile
+Index: linux-2.6.20/drivers/mmc/mmc_debug.c
 ===================================================================
---- linux-2.6.17.7-fic1.orig/drivers/mmc/Makefile	2006-11-02 12:48:23.000000000 +0100
-+++ linux-2.6.17.7-fic1/drivers/mmc/Makefile	2006-11-02 12:48:50.000000000 +0100
-@@ -23,9 +23,11 @@
- obj-$(CONFIG_MMC_AU1X)		+= au1xmmc.o
- obj-$(CONFIG_MMC_OMAP)		+= omap.o
- obj-$(CONFIG_MMC_AT91RM9200)	+= at91_mci.o
-+obj-$(CONFIG_MMC_S3C)		+= s3cmci.o
- 
- mmc_core-y := mmc.o mmc_queue.o mmc_sysfs.o
- 
- ifeq ($(CONFIG_MMC_DEBUG),y)
-+obj-$(CONFIG_MMC)		+= mmc_debug.o
- EXTRA_CFLAGS += -DDEBUG
- endif
-Index: linux-2.6.17.7-fic1/drivers/mmc/mmc_debug.c
-===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.7-fic1/drivers/mmc/mmc_debug.c	2006-11-02 12:48:50.000000000 +0100
++++ linux-2.6.20/drivers/mmc/mmc_debug.c	2007-02-15 16:17:32.000000000 +0100
 @@ -0,0 +1,59 @@
 +/*
 + *  linux/drivers/mmc/mmc_debug.c
@@ -101,10 +85,10 @@
 +	}
 +}
 +EXPORT_SYMBOL(mmc_err2str);
-Index: linux-2.6.17.7-fic1/drivers/mmc/mmc_debug.h
+Index: linux-2.6.20/drivers/mmc/mmc_debug.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.7-fic1/drivers/mmc/mmc_debug.h	2006-11-02 12:48:50.000000000 +0100
++++ linux-2.6.20/drivers/mmc/mmc_debug.h	2007-02-15 16:17:32.000000000 +0100
 @@ -0,0 +1,7 @@
 +#ifndef MMC_DEBUG_H
 +#define MMC_DEBUG_H
@@ -113,10 +97,10 @@
 +char *mmc_err2str(int err);
 +
 +#endif /* MMC_DEBUG_H */
-Index: linux-2.6.17.7-fic1/drivers/mmc/s3cmci.c
+Index: linux-2.6.20/drivers/mmc/s3cmci.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.7-fic1/drivers/mmc/s3cmci.c	2006-11-02 21:06:00.000000000 +0100
++++ linux-2.6.20/drivers/mmc/s3cmci.c	2007-02-15 16:22:54.000000000 +0100
 @@ -0,0 +1,1339 @@
 +/*
 + *  linux/drivers/mmc/s3cmci.h - Samsung S3C MCI driver
@@ -487,7 +471,7 @@
 + *       contition comes up
 + */
 +
-+static irqreturn_t s3cmci_irq(int irq, void *dev_id, struct pt_regs *regs)
++static irqreturn_t s3cmci_irq(int irq, void *dev_id)
 +{
 +	struct s3cmci_host *host;
 +	struct mmc_command *cmd;
@@ -669,7 +653,7 @@
 + * ISR for the CardDetect Pin
 +*/
 +
-+static irqreturn_t s3cmci_irq_cd(int irq, void *dev_id, struct pt_regs *regs)
++static irqreturn_t s3cmci_irq_cd(int irq, void *dev_id)
 +{
 +	struct s3cmci_host *host = (struct s3cmci_host *)dev_id;
 +
@@ -1457,10 +1441,10 @@
 +MODULE_LICENSE("GPL");
 +MODULE_AUTHOR("Thomas Kleffel <tk at maintech.de>");
 +
-Index: linux-2.6.17.7-fic1/drivers/mmc/s3cmci.h
+Index: linux-2.6.20/drivers/mmc/s3cmci.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17.7-fic1/drivers/mmc/s3cmci.h	2006-11-02 21:05:15.000000000 +0100
++++ linux-2.6.20/drivers/mmc/s3cmci.h	2007-02-15 16:22:43.000000000 +0100
 @@ -0,0 +1,71 @@
 +/*
 + *  linux/drivers/mmc/s3cmci.h - Samsung S3C MCI driver
@@ -1533,23 +1517,11 @@
 +	unsigned int		ccnt, dcnt;
 +	struct tasklet_struct	pio_tasklet;
 +};
-Index: linux-2.6.17.7-fic1/include/asm-arm/arch-s3c2410/regs-sdi.h
+Index: linux-2.6.20/include/asm-arm/arch-s3c2410/regs-sdi.h
 ===================================================================
---- linux-2.6.17.7-fic1.orig/include/asm-arm/arch-s3c2410/regs-sdi.h	2006-11-02 12:48:24.000000000 +0100
-+++ linux-2.6.17.7-fic1/include/asm-arm/arch-s3c2410/regs-sdi.h	2006-11-02 12:48:50.000000000 +0100
-@@ -7,9 +7,10 @@
-  * it under the terms of the GNU General Public License version 2 as
-  * published by the Free Software Foundation.
-  *
-- * S3C2410 MMC/SDIO register definitions
-+ * Samsung S3C MCI register definitions
-  *
-  *  Changelog:
-+ *    09-May-2006 Thomas Kleffel Added defines for 2440
-  *    18-Aug-2004 Ben Dooks      Created initial file
-  *    29-Nov-2004 Koen Martens   Added some missing defines, fixed duplicates
-  *    29-Nov-2004 Ben Dooks	 Updated Koen's patch
-@@ -33,9 +34,15 @@
+--- linux-2.6.20.orig/include/asm-arm/arch-s3c2410/regs-sdi.h	2007-02-15 16:15:19.000000000 +0100
++++ linux-2.6.20/include/asm-arm/arch-s3c2410/regs-sdi.h	2007-02-15 16:17:32.000000000 +0100
+@@ -28,9 +28,15 @@
  #define S3C2410_SDIDCNT               (0x30)
  #define S3C2410_SDIDSTA               (0x34)
  #define S3C2410_SDIFSTA               (0x38)
@@ -1565,7 +1537,7 @@
  #define S3C2410_SDICON_BYTEORDER      (1<<4)
  #define S3C2410_SDICON_SDIOIRQ        (1<<3)
  #define S3C2410_SDICON_RWAITEN        (1<<2)
-@@ -47,7 +54,8 @@
+@@ -42,7 +48,8 @@
  #define S3C2410_SDICMDCON_LONGRSP     (1<<10)
  #define S3C2410_SDICMDCON_WAITRSP     (1<<9)
  #define S3C2410_SDICMDCON_CMDSTART    (1<<8)
@@ -1575,7 +1547,7 @@
  
  #define S3C2410_SDICMDSTAT_CRCFAIL    (1<<12)
  #define S3C2410_SDICMDSTAT_CMDSENT    (1<<11)
-@@ -56,6 +64,9 @@
+@@ -51,6 +58,9 @@
  #define S3C2410_SDICMDSTAT_XFERING    (1<<8)
  #define S3C2410_SDICMDSTAT_INDEX      (0xff)
  
@@ -1585,7 +1557,7 @@
  #define S3C2410_SDIDCON_IRQPERIOD     (1<<21)
  #define S3C2410_SDIDCON_TXAFTERRESP   (1<<20)
  #define S3C2410_SDIDCON_RXAFTERCMD    (1<<19)
-@@ -64,6 +75,7 @@
+@@ -59,6 +69,7 @@
  #define S3C2410_SDIDCON_WIDEBUS       (1<<16)
  #define S3C2410_SDIDCON_DMAEN         (1<<15)
  #define S3C2410_SDIDCON_STOP          (1<<14)
@@ -1593,7 +1565,7 @@
  #define S3C2410_SDIDCON_DATMODE	      (3<<12)
  #define S3C2410_SDIDCON_BLKNUM        (0x7ff)
  
-@@ -73,6 +85,7 @@
+@@ -68,6 +79,7 @@
  #define S3C2410_SDIDCON_XFER_RXSTART  (2<<12)
  #define S3C2410_SDIDCON_XFER_TXSTART  (3<<12)
  
@@ -1601,7 +1573,7 @@
  #define S3C2410_SDIDCNT_BLKNUM_SHIFT  (12)
  
  #define S3C2410_SDIDSTA_RDYWAITREQ    (1<<10)
-@@ -87,10 +100,12 @@
+@@ -82,10 +94,12 @@
  #define S3C2410_SDIDSTA_TXDATAON      (1<<1)
  #define S3C2410_SDIDSTA_RXDATAON      (1<<0)
  
@@ -1616,10 +1588,10 @@
  #define S3C2410_SDIFSTA_RFLAST         (1<<9)
  #define S3C2410_SDIFSTA_RFFULL         (1<<8)
  #define S3C2410_SDIFSTA_RFHALF         (1<<7)
-Index: linux-2.6.17.7-fic1/include/linux/mmc/mmc.h
+Index: linux-2.6.20/include/linux/mmc/mmc.h
 ===================================================================
---- linux-2.6.17.7-fic1.orig/include/linux/mmc/mmc.h	2006-11-02 12:48:24.000000000 +0100
-+++ linux-2.6.17.7-fic1/include/linux/mmc/mmc.h	2006-11-02 12:48:50.000000000 +0100
+--- linux-2.6.20.orig/include/linux/mmc/mmc.h	2007-02-15 16:15:19.000000000 +0100
++++ linux-2.6.20/include/linux/mmc/mmc.h	2007-02-15 16:17:32.000000000 +0100
 @@ -54,12 +54,15 @@
  	unsigned int		retries;	/* max number of retries */
  	unsigned int		error;		/* command error */

Modified: trunk/src/target/kernel/patches/series
===================================================================
--- trunk/src/target/kernel/patches/series	2007-02-15 21:31:15 UTC (rev 1003)
+++ trunk/src/target/kernel/patches/series	2007-02-15 21:37:15 UTC (rev 1004)
@@ -1,10 +1,15 @@
 asoc.patch
-asoc-neo_backport.patch
-gta01-asoc-rxmixer.patch
+asoc-asm_hardware_h.patch
+asoc-platform-hw_init-pcm_emulation-fix.patch
+i2c-permit_invalid_addrs.patch
+pm-debug_less_verbose.patch
+g_ether-highpower.patch
+s3c2410fb_2617_backport.patch
 2.6.17-s3c2410-spi-mode23.patch
-2.6.17-arm-usb_gadget-ether-link.patch
 s3c2410_serial-nodebug.patch
 s3c2410_udc.patch
+s3c2410_touchscreen.patch
+s3c2410-bbt.patch
 udc-nomodule-misccr.patch
 s3c2410_udc-vbus_draw_pdata.patch
 s3c_mci.patch
@@ -16,7 +21,6 @@
 qt2410-cs8900.patch
 qt2410-biglcd.patch
 qt2410-s3c_mci-pdata.patch
-qt2410-touchscreen.patch
 gta01-core.patch
 gta01-jbt6k74.patch
 gta01-backlight.patch
@@ -24,9 +28,7 @@
 gta01-vibrator.patch
 gta01-inputdevice.patch
 gta01-power_control.patch
-s3c2410-bbt.patch
-g_ether-highpower.patch
 gta01-vbus_draw.patch
+gta01-no_nand_partitions.patch
+input-nots-mousedev.patch
 ts0710.patch
-input-nots-mousedev.patch
-gta01-no_nand_partitions.patch

Modified: trunk/src/target/kernel/patches/udc-nomodule-misccr.patch
===================================================================
--- trunk/src/target/kernel/patches/udc-nomodule-misccr.patch	2007-02-15 21:31:15 UTC (rev 1003)
+++ trunk/src/target/kernel/patches/udc-nomodule-misccr.patch	2007-02-15 21:37:15 UTC (rev 1004)
@@ -2,22 +2,13 @@
 that the USB port is switched into device mode by configuering the MISCCR
 register accordingly.
 
-Index: linux-2.6.17.14-fic1/drivers/usb/gadget/s3c2410_udc.c
+Index: linux-2.6.20/drivers/usb/gadget/s3c2410_udc.c
 ===================================================================
---- linux-2.6.17.14-fic1.orig/drivers/usb/gadget/s3c2410_udc.c	2006-11-03 01:22:14.000000000 +0100
-+++ linux-2.6.17.14-fic1/drivers/usb/gadget/s3c2410_udc.c	2006-11-03 12:41:52.000000000 +0100
-@@ -1492,7 +1492,7 @@
- 		return -ENODEV;
- 	if (udc->driver)
- 		return -EBUSY;
--	if (!driver->bind || !driver->unbind || !driver->setup
-+	if (!driver->bind || !driver->setup
- 			|| driver->speed == USB_SPEED_UNKNOWN)
- 		return -EINVAL;
- 
-@@ -1700,6 +1700,8 @@
+--- linux-2.6.20.orig/drivers/usb/gadget/s3c2410_udc.c	2007-02-15 14:54:49.000000000 +0100
++++ linux-2.6.20/drivers/usb/gadget/s3c2410_udc.c	2007-02-15 14:55:45.000000000 +0100
+@@ -1764,6 +1764,8 @@
+ 		udc->vbus = 1;
  	}
- 	dprintk(DEBUG_VERBOSE, "%s: got irq %i\n", gadget_name, IRQ_USBD);
  
 +	s3c2410_modify_misccr(S3C2410_MISCCR_USBHOST|S3C2410_MISCCR_USBSUSPND0|S3C2410_MISCCR_USBSUSPND1, 0);
 +





More information about the commitlog mailing list