summaryrefslogtreecommitdiffstats
path: root/recipes
diff options
context:
space:
mode:
authorVasily Khoruzhick <anarsoul@gmail.com>2010-09-10 10:54:13 +0000
committerEric Bénard <eric@eukrea.com>2010-09-11 18:58:19 +0200
commit7e92d21ca7b6e6685c80243d3b09c06aedaa3354 (patch)
tree017f60781a09e9b93af24b09cc7113d823a97c46 /recipes
parent18bfe69b58341220399c1a1f9acc0bbc7a905eb8 (diff)
downloadopenembedded-7e92d21ca7b6e6685c80243d3b09c06aedaa3354.tar.gz
linux-2.6.35: add rx1950 support
Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com> Signed-off-by: Eric Bénard <eric@eukrea.com>
Diffstat (limited to 'recipes')
-rw-r--r--recipes/linux/linux-2.6.35/rx1950/0001-s3c2410_ts-add-fake-pressure-events.patch41
-rw-r--r--recipes/linux/linux-2.6.35/rx1950/0002-s3c2410_udc-2440-dual-packet-workaround.patch71
-rw-r--r--recipes/linux/linux-2.6.35/rx1950/0003-rx1950-add-battery-device.patch356
-rw-r--r--recipes/linux/linux-2.6.35/rx1950/0004-rx1950-add-LEDs-support.patch71
-rw-r--r--recipes/linux/linux-2.6.35/rx1950/0005-s3c24xx-DMA-don-t-use-autoreload-feature.patch701
-rw-r--r--recipes/linux/linux-2.6.35/rx1950/0006-s3cmci-minor-fixups.patch40
-rw-r--r--recipes/linux/linux-2.6.35/rx1950/0007-Add-s3c-adc-battery-driver.patch530
-rw-r--r--recipes/linux/linux-2.6.35/rx1950/defconfig1615
-rw-r--r--recipes/linux/linux_2.6.35.bb7
9 files changed, 3432 insertions, 0 deletions
diff --git a/recipes/linux/linux-2.6.35/rx1950/0001-s3c2410_ts-add-fake-pressure-events.patch b/recipes/linux/linux-2.6.35/rx1950/0001-s3c2410_ts-add-fake-pressure-events.patch
new file mode 100644
index 0000000000..fa43e2d86f
--- /dev/null
+++ b/recipes/linux/linux-2.6.35/rx1950/0001-s3c2410_ts-add-fake-pressure-events.patch
@@ -0,0 +1,41 @@
+From d9b482fc3e5bef43a7845989189cf9b71915a1cb Mon Sep 17 00:00:00 2001
+From: Vasily Khoruzhick <anarsoul@gmail.com>
+Date: Wed, 12 May 2010 09:59:32 +0300
+Subject: [PATCH 01/20] s3c2410_ts: add fake pressure events
+
+Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
+---
+ drivers/input/touchscreen/s3c2410_ts.c | 3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/input/touchscreen/s3c2410_ts.c b/drivers/input/touchscreen/s3c2410_ts.c
+index 6085d12..381c295 100644
+--- a/drivers/input/touchscreen/s3c2410_ts.c
++++ b/drivers/input/touchscreen/s3c2410_ts.c
+@@ -126,6 +126,7 @@ static void touch_timer_fire(unsigned long data)
+ input_report_abs(ts.input, ABS_Y, ts.yp);
+
+ input_report_key(ts.input, BTN_TOUCH, 1);
++ input_report_abs(ts.input, ABS_PRESSURE, 1);
+ input_sync(ts.input);
+
+ ts.xp = 0;
+@@ -140,6 +141,7 @@ static void touch_timer_fire(unsigned long data)
+ ts.count = 0;
+
+ input_report_key(ts.input, BTN_TOUCH, 0);
++ input_report_abs(ts.input, ABS_PRESSURE, 0);
+ input_sync(ts.input);
+
+ writel(WAIT4INT | INT_DOWN, ts.io + S3C2410_ADCTSC);
+@@ -318,6 +320,7 @@ static int __devinit s3c2410ts_probe(struct platform_device *pdev)
+ ts.input->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
+ input_set_abs_params(ts.input, ABS_X, 0, 0x3FF, 0, 0);
+ input_set_abs_params(ts.input, ABS_Y, 0, 0x3FF, 0, 0);
++ input_set_abs_params(ts.input, ABS_PRESSURE, 0, 1, 0, 0);
+
+ ts.input->name = "S3C24XX TouchScreen";
+ ts.input->id.bustype = BUS_HOST;
+--
+1.7.2.2
+
diff --git a/recipes/linux/linux-2.6.35/rx1950/0002-s3c2410_udc-2440-dual-packet-workaround.patch b/recipes/linux/linux-2.6.35/rx1950/0002-s3c2410_udc-2440-dual-packet-workaround.patch
new file mode 100644
index 0000000000..bd9a8b12e7
--- /dev/null
+++ b/recipes/linux/linux-2.6.35/rx1950/0002-s3c2410_udc-2440-dual-packet-workaround.patch
@@ -0,0 +1,71 @@
+From fc47d51f262ec6d0a4601fe37ac6478e30d68060 Mon Sep 17 00:00:00 2001
+From: Vasily Khoruzhick <anarsoul@gmail.com>
+Date: Thu, 24 Sep 2009 22:17:47 +0300
+Subject: [PATCH 02/20] s3c2410_udc: 2440 dual packet workaround
+
+This is a patch that seems to make the USB hangs on the S3C2440 go away.
+At least a good amount of ping torture didn't make them come back so far.
+
+The issue is that, if there are several back-to-back packets, sometimes no
+interrupt is generated for one of them. This seems to be caused by the
+mysterious dual packet mode, which the USB hardware enters automatically
+if the endpoint size is half that of the FIFO. (On the 2440, this is the
+normal situation for bulk data endpoints.)
+
+There is also a timing factor in this. I think what happens is that the USB
+hardware automatically sends an acknowledgement if there is only one packet
+in the FIFO (the FIFO has space for two). If another packet arrives before
+the host has retrieved and acknowledged the previous one, no interrupt is
+generated for that second one.
+
+However, there may be an indication. There is one undocumented bit (none
+of the 244x manuals document it), OUT_CRS1_REG[1], that seems to be set
+suspiciously often when this condition occurs. There is also
+CLR_DATA_TOGGLE, OUT_CRS1_REG[7], which may have a function related to
+this. (The Samsung manual is rather terse on that, as usual.)
+
+This needs to be examined further. For now, the patch seems to do the
+trick.
+
+Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
+---
+ drivers/usb/gadget/s3c2410_udc.c | 16 +++++++++++++++-
+ 1 files changed, 15 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/usb/gadget/s3c2410_udc.c b/drivers/usb/gadget/s3c2410_udc.c
+index ea2b3c7..fed323c 100644
+--- a/drivers/usb/gadget/s3c2410_udc.c
++++ b/drivers/usb/gadget/s3c2410_udc.c
+@@ -902,7 +902,7 @@ static irqreturn_t s3c2410_udc_irq(int dummy, void *_dev)
+ int pwr_reg;
+ int ep0csr;
+ int i;
+- u32 idx;
++ u32 idx, idx2;
+ unsigned long flags;
+
+ spin_lock_irqsave(&dev->lock, flags);
+@@ -1017,6 +1017,20 @@ static irqreturn_t s3c2410_udc_irq(int dummy, void *_dev)
+ }
+ }
+
++ /* what else causes this interrupt? a receive! who is it? */
++ if (!usb_status && !usbd_status && !pwr_reg && !ep0csr) {
++ for (i = 1; i < S3C2410_ENDPOINTS; i++) {
++ idx2 = udc_read(S3C2410_UDC_INDEX_REG);
++ udc_write(i, S3C2410_UDC_INDEX_REG);
++
++ if (udc_read(S3C2410_UDC_OUT_CSR1_REG) & 0x1)
++ s3c2410_udc_handle_ep(&dev->ep[i]);
++
++ /* restore index */
++ udc_write(idx2, S3C2410_UDC_INDEX_REG);
++ }
++ }
++
+ dprintk(DEBUG_VERBOSE, "irq: %d s3c2410_udc_done.\n", IRQ_USBD);
+
+ /* Restore old index */
+--
+1.7.2.2
+
diff --git a/recipes/linux/linux-2.6.35/rx1950/0003-rx1950-add-battery-device.patch b/recipes/linux/linux-2.6.35/rx1950/0003-rx1950-add-battery-device.patch
new file mode 100644
index 0000000000..1a5eff49a0
--- /dev/null
+++ b/recipes/linux/linux-2.6.35/rx1950/0003-rx1950-add-battery-device.patch
@@ -0,0 +1,356 @@
+From 880fc865d99084c3ec697289d34eb12a0aa54103 Mon Sep 17 00:00:00 2001
+From: Vasily Khoruzhick <anarsoul@gmail.com>
+Date: Wed, 16 Jun 2010 23:16:08 +0300
+Subject: [PATCH 03/20] rx1950: add battery device
+
+Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
+---
+ arch/arm/mach-s3c2440/mach-rx1950.c | 316 +++++++++++++++++++++++++++++++++++
+ 1 files changed, 316 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-s3c2440/mach-rx1950.c b/arch/arm/mach-s3c2440/mach-rx1950.c
+index 142d1f9..2bfa43a 100644
+--- a/arch/arm/mach-s3c2440/mach-rx1950.c
++++ b/arch/arm/mach-s3c2440/mach-rx1950.c
+@@ -25,8 +25,10 @@
+ #include <linux/input.h>
+ #include <linux/gpio_keys.h>
+ #include <linux/sysdev.h>
++#include <linux/pda_power.h>
+ #include <linux/pwm_backlight.h>
+ #include <linux/pwm.h>
++#include <linux/s3c_adc_battery.h>
+
+ #include <linux/mtd/mtd.h>
+ #include <linux/mtd/partitions.h>
+@@ -127,6 +129,318 @@ static struct s3c2410fb_display rx1950_display = {
+
+ };
+
++static int power_supply_init(struct device *dev)
++{
++ return gpio_request(S3C2410_GPF(2), "cable plugged");
++}
++
++static int rx1950_is_ac_online(void)
++{
++ return !gpio_get_value(S3C2410_GPF(2));
++}
++
++static void power_supply_exit(struct device *dev)
++{
++ gpio_free(S3C2410_GPF(2));
++}
++
++static char *rx1950_supplicants[] = {
++ "main-battery"
++};
++
++static struct pda_power_pdata power_supply_info = {
++ .init = power_supply_init,
++ .is_ac_online = rx1950_is_ac_online,
++ .exit = power_supply_exit,
++ .supplied_to = rx1950_supplicants,
++ .num_supplicants = ARRAY_SIZE(rx1950_supplicants),
++};
++
++static struct resource power_supply_resources[] = {
++ [0] = {
++ .name = "ac",
++ .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWEDGE |
++ IORESOURCE_IRQ_HIGHEDGE,
++ .start = IRQ_EINT2,
++ .end = IRQ_EINT2,
++ },
++};
++
++static struct platform_device power_supply = {
++ .name = "pda-power",
++ .id = -1,
++ .dev = {
++ .platform_data =
++ &power_supply_info,
++ },
++ .resource = power_supply_resources,
++ .num_resources = ARRAY_SIZE(power_supply_resources),
++};
++
++static const struct s3c_adc_bat_thresh bat_lut_noac[] = {
++ {
++ .volt = 4100,
++ .cur = 156,
++ .level = 100
++ },
++ {
++ .volt = 4050,
++ .cur = 156,
++ .level = 95
++ },
++ {
++ .volt = 4025,
++ .cur = 141,
++ .level = 90
++ },
++ {
++ .volt = 3995,
++ .cur = 144,
++ .level = 85
++ },
++ {
++ .volt = 3957,
++ .cur = 162,
++ .level = 80
++ },
++ {
++ .volt = 3931,
++ .cur = 147,
++ .level = 75
++ },
++ {
++ .volt = 3902,
++ .cur = 147,
++ .level = 70
++ },
++ {
++ .volt = 3863,
++ .cur = 153,
++ .level = 65
++ },
++ {
++ .volt = 3838,
++ .cur = 150,
++ .level = 60
++ },
++ {
++ .volt = 3800,
++ .cur = 153,
++ .level = 55
++ },
++ {
++ .volt = 3765,
++ .cur = 153,
++ .level = 50
++ },
++ {
++ .volt = 3748,
++ .cur = 172,
++ .level = 45
++ },
++ {
++ .volt = 3740,
++ .cur = 153,
++ .level = 40
++ },
++ {
++ .volt = 3714,
++ .cur = 175,
++ .level = 35
++ },
++ {
++ .volt = 3710,
++ .cur = 156,
++ .level = 30
++ },
++ {
++ .volt = 3963,
++ .cur = 156,
++ .level = 25
++ },
++ {
++ .volt = 3672,
++ .cur = 178,
++ .level = 20
++ },
++ {
++ .volt = 3651,
++ .cur = 178,
++ .level = 15
++ },
++ {
++ .volt = 3629,
++ .cur = 178,
++ .level = 10
++ },
++ {
++ .volt = 3612,
++ .cur = 162,
++ .level = 5
++ },
++ {
++ .volt = 3605,
++ .cur = 162,
++ .level = 0
++ },
++};
++
++static const struct s3c_adc_bat_thresh bat_lut_acin[] = {
++ {
++ .volt = 4200,
++ .cur = 0,
++ .level = 100
++ },
++ {
++ .volt = 4190,
++ .cur = 0,
++ .level = 99
++ },
++ {
++ .volt = 4178,
++ .cur = 0,
++ .level = 95
++ },
++ {
++ .volt = 4110,
++ .cur = 0,
++ .level = 70
++ },
++ {
++ .volt = 4076,
++ .cur = 0,
++ .level = 65
++ },
++ {
++ .volt = 4046,
++ .cur = 0,
++ .level = 60
++ },
++ {
++ .volt = 4021,
++ .cur = 0,
++ .level = 55
++ },
++ {
++ .volt = 3999,
++ .cur = 0,
++ .level = 50
++ },
++ {
++ .volt = 3982,
++ .cur = 0,
++ .level = 45
++ },
++ {
++ .volt = 3965,
++ .cur = 0,
++ .level = 40
++ },
++ {
++ .volt = 3957,
++ .cur = 0,
++ .level = 35
++ },
++ {
++ .volt = 3948,
++ .cur = 0,
++ .level = 30
++ },
++ {
++ .volt = 3936,
++ .cur = 0,
++ .level = 25
++ },
++ {
++ .volt = 3927,
++ .cur = 0,
++ .level = 20
++ },
++ {
++ .volt = 3906,
++ .cur = 0,
++ .level = 15
++ },
++ {
++ .volt = 3880,
++ .cur = 0,
++ .level = 10
++ },
++ {
++ .volt = 3829,
++ .cur = 0,
++ .level = 5
++ },
++ {
++ .volt = 3820,
++ .cur = 0,
++ .level = 0
++ },
++};
++
++int rx1950_bat_init(void)
++{
++ int ret;
++
++ ret = gpio_request(S3C2410_GPJ(2), "rx1950-charger-enable-1");
++ if (ret)
++ goto err_gpio1;
++ ret = gpio_request(S3C2410_GPJ(3), "rx1950-charger-enable-2");
++ if (ret)
++ goto err_gpio2;
++
++ return 0;
++
++err_gpio2:
++ gpio_free(S3C2410_GPJ(2));
++err_gpio1:
++ return ret;
++}
++
++void rx1950_bat_exit(void)
++{
++ gpio_free(S3C2410_GPJ(2));
++ gpio_free(S3C2410_GPJ(3));
++}
++
++void rx1950_enable_charger(void)
++{
++ gpio_direction_output(S3C2410_GPJ(2), 1);
++ gpio_direction_output(S3C2410_GPJ(3), 1);
++}
++
++void rx1950_disable_charger(void)
++{
++ gpio_direction_output(S3C2410_GPJ(2), 0);
++ gpio_direction_output(S3C2410_GPJ(3), 0);
++}
++
++static struct s3c_adc_bat_pdata rx1950_bat_cfg = {
++ .init = rx1950_bat_init,
++ .exit = rx1950_bat_exit,
++ .enable_charger = rx1950_enable_charger,
++ .disable_charger = rx1950_disable_charger,
++ .gpio_charge_finished = S3C2410_GPF(3),
++ .lut_noac = bat_lut_noac,
++ .lut_noac_cnt = ARRAY_SIZE(bat_lut_noac),
++ .lut_acin = bat_lut_acin,
++ .lut_acin_cnt = ARRAY_SIZE(bat_lut_acin),
++ .volt_channel = 0,
++ .current_channel = 1,
++ .volt_mult = 4235,
++ .current_mult = 2900,
++ .internal_impedance = 200,
++};
++
++static struct platform_device rx1950_battery = {
++ .name = "s3c-adc-battery",
++ .id = -1,
++ .dev = {
++ .parent = &s3c_device_adc.dev,
++ .platform_data = &rx1950_bat_cfg,
++ },
++};
++
+ static struct s3c2410fb_mach_info rx1950_lcd_cfg = {
+ .displays = &rx1950_display,
+ .num_displays = 1,
+@@ -503,6 +817,8 @@ static struct platform_device *rx1950_devices[] __initdata = {
+ &s3c_device_timer[1],
+ &rx1950_backlight,
+ &rx1950_device_gpiokeys,
++ &power_supply,
++ &rx1950_battery,
+ };
+
+ static struct clk *rx1950_clocks[] __initdata = {
+--
+1.7.2.2
+
diff --git a/recipes/linux/linux-2.6.35/rx1950/0004-rx1950-add-LEDs-support.patch b/recipes/linux/linux-2.6.35/rx1950/0004-rx1950-add-LEDs-support.patch
new file mode 100644
index 0000000000..36ac70f467
--- /dev/null
+++ b/recipes/linux/linux-2.6.35/rx1950/0004-rx1950-add-LEDs-support.patch
@@ -0,0 +1,71 @@
+From 2133ac2c163fb3963eb2463b1482a525112ea6e1 Mon Sep 17 00:00:00 2001
+From: Vasily Khoruzhick <anarsoul@gmail.com>
+Date: Fri, 23 Jul 2010 17:06:47 +0300
+Subject: [PATCH 04/20] rx1950: add LEDs support
+
+Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
+---
+ arch/arm/mach-s3c2440/mach-rx1950.c | 33 +++++++++++++++++++++++++++++++++
+ 1 files changed, 33 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-s3c2440/mach-rx1950.c b/arch/arm/mach-s3c2440/mach-rx1950.c
+index 2bfa43a..53180da 100644
+--- a/arch/arm/mach-s3c2440/mach-rx1950.c
++++ b/arch/arm/mach-s3c2440/mach-rx1950.c
+@@ -29,6 +29,7 @@
+ #include <linux/pwm_backlight.h>
+ #include <linux/pwm.h>
+ #include <linux/s3c_adc_battery.h>
++#include <linux/leds.h>
+
+ #include <linux/mtd/mtd.h>
+ #include <linux/mtd/partitions.h>
+@@ -415,6 +416,37 @@ void rx1950_disable_charger(void)
+ gpio_direction_output(S3C2410_GPJ(3), 0);
+ }
+
++static struct gpio_led rx1950_leds_desc[] = {
++ {
++ .name = "Green",
++ .default_trigger = "main-battery-charging-or-full",
++ .gpio = S3C2410_GPA(6),
++ },
++ {
++ .name = "Red",
++ .default_trigger = "main-battery-full",
++ .gpio = S3C2410_GPA(7),
++ },
++ {
++ .name = "Blue",
++ .default_trigger = "rx1950-acx-mem",
++ .gpio = S3C2410_GPA(11),
++ },
++};
++
++static struct gpio_led_platform_data rx1950_leds_pdata = {
++ .num_leds = ARRAY_SIZE(rx1950_leds_desc),
++ .leds = rx1950_leds_desc,
++};
++
++static struct platform_device rx1950_leds = {
++ .name = "leds-gpio",
++ .id = -1,
++ .dev = {
++ .platform_data = &rx1950_leds_pdata,
++ },
++};
++
+ static struct s3c_adc_bat_pdata rx1950_bat_cfg = {
+ .init = rx1950_bat_init,
+ .exit = rx1950_bat_exit,
+@@ -819,6 +851,7 @@ static struct platform_device *rx1950_devices[] __initdata = {
+ &rx1950_device_gpiokeys,
+ &power_supply,
+ &rx1950_battery,
++ &rx1950_leds,
+ };
+
+ static struct clk *rx1950_clocks[] __initdata = {
+--
+1.7.2.2
+
diff --git a/recipes/linux/linux-2.6.35/rx1950/0005-s3c24xx-DMA-don-t-use-autoreload-feature.patch b/recipes/linux/linux-2.6.35/rx1950/0005-s3c24xx-DMA-don-t-use-autoreload-feature.patch
new file mode 100644
index 0000000000..ea2208e0fc
--- /dev/null
+++ b/recipes/linux/linux-2.6.35/rx1950/0005-s3c24xx-DMA-don-t-use-autoreload-feature.patch
@@ -0,0 +1,701 @@
+From 3f78c6a448e380c40c6cc9dff2b7175be8fc2b9a Mon Sep 17 00:00:00 2001
+From: Vasily Khoruzhick <anarsoul@gmail.com>
+Date: Thu, 12 Aug 2010 21:32:25 +0300
+Subject: [PATCH 05/20] s3c24xx: DMA: don't use autoreload feature
+
+Some integrated DMA-capable hardware doesn't like autoreload
+feature of s3c24xx DMA-engine, that's why s3cmci driver
+didn't work with DMA transfers enabled.
+
+I rewrote DMA driver not to use autoreload feature and removed
+all pre-loading features. Buffer re-load is fast enought to perform
+it in IRQ handler, and anyway I don't see any reason to waste CPU
+cycles on waiting for buffer load. Driver is much simplier now,
+it was tested with s3cmci and s3c24xx-i2s drivers on s3c2442 and
+s3c2410 SoCs and works just nice.
+
+Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
+---
+ arch/arm/mach-s3c2410/include/mach/dma.h | 17 +-
+ arch/arm/plat-s3c24xx/dma.c | 442 +++++-------------------------
+ 2 files changed, 75 insertions(+), 384 deletions(-)
+
+diff --git a/arch/arm/mach-s3c2410/include/mach/dma.h b/arch/arm/mach-s3c2410/include/mach/dma.h
+index cf68136..1cbeff2 100644
+--- a/arch/arm/mach-s3c2410/include/mach/dma.h
++++ b/arch/arm/mach-s3c2410/include/mach/dma.h
+@@ -79,28 +79,15 @@ enum s3c2410_dma_state {
+ *
+ * There are no buffers loaded (the channel should be inactive)
+ *
+- * S3C2410_DMA_1LOADED
+- *
+- * There is one buffer loaded, however it has not been confirmed to be
+- * loaded by the DMA engine. This may be because the channel is not
+- * yet running, or the DMA driver decided that it was too costly to
+- * sit and wait for it to happen.
+- *
+ * S3C2410_DMA_1RUNNING
+ *
+- * The buffer has been confirmed running, and not finisged
+- *
+- * S3C2410_DMA_1LOADED_1RUNNING
++ * The buffer has been confirmed running, and not finished
+ *
+- * There is a buffer waiting to be loaded by the DMA engine, and one
+- * currently running.
+ */
+
+ enum s3c2410_dma_loadst {
+ S3C2410_DMALOAD_NONE,
+- S3C2410_DMALOAD_1LOADED,
+ S3C2410_DMALOAD_1RUNNING,
+- S3C2410_DMALOAD_1LOADED_1RUNNING,
+ };
+
+
+@@ -129,6 +116,7 @@ struct s3c2410_dma_buf {
+ dma_addr_t data; /* start of DMA data */
+ dma_addr_t ptr; /* where the DMA got to [1] */
+ void *id; /* client's id */
++ unsigned int timestamp;
+ };
+
+ /* [1] is this updated for both recv/send modes? */
+@@ -189,6 +177,7 @@ struct s3c2410_dma_chan {
+ struct s3c2410_dma_buf *curr; /* current dma buffer */
+ struct s3c2410_dma_buf *next; /* next buffer to load */
+ struct s3c2410_dma_buf *end; /* end of queue */
++ spinlock_t queue_lock;
+
+ /* system device */
+ struct sys_device dev;
+diff --git a/arch/arm/plat-s3c24xx/dma.c b/arch/arm/plat-s3c24xx/dma.c
+index 6ad274e..5ed045b 100644
+--- a/arch/arm/plat-s3c24xx/dma.c
++++ b/arch/arm/plat-s3c24xx/dma.c
+@@ -133,70 +133,6 @@ dmadbg_showregs(const char *fname, int line, struct s3c2410_dma_chan *chan)
+ #define dbg_showchan(chan) do { } while(0)
+ #endif /* CONFIG_S3C2410_DMA_DEBUG */
+
+-/* s3c2410_dma_stats_timeout
+- *
+- * Update DMA stats from timeout info
+-*/
+-
+-static void
+-s3c2410_dma_stats_timeout(struct s3c2410_dma_stats *stats, int val)
+-{
+- if (stats == NULL)
+- return;
+-
+- if (val > stats->timeout_longest)
+- stats->timeout_longest = val;
+- if (val < stats->timeout_shortest)
+- stats->timeout_shortest = val;
+-
+- stats->timeout_avg += val;
+-}
+-
+-/* s3c2410_dma_waitforload
+- *
+- * wait for the DMA engine to load a buffer, and update the state accordingly
+-*/
+-
+-static int
+-s3c2410_dma_waitforload(struct s3c2410_dma_chan *chan, int line)
+-{
+- int timeout = chan->load_timeout;
+- int took;
+-
+- if (chan->load_state != S3C2410_DMALOAD_1LOADED) {
+- printk(KERN_ERR "dma%d: s3c2410_dma_waitforload() called in loadstate %d from line %d\n", chan->number, chan->load_state, line);
+- return 0;
+- }
+-
+- if (chan->stats != NULL)
+- chan->stats->loads++;
+-
+- while (--timeout > 0) {
+- if ((dma_rdreg(chan, S3C2410_DMA_DSTAT) << (32-20)) != 0) {
+- took = chan->load_timeout - timeout;
+-
+- s3c2410_dma_stats_timeout(chan->stats, took);
+-
+- switch (chan->load_state) {
+- case S3C2410_DMALOAD_1LOADED:
+- chan->load_state = S3C2410_DMALOAD_1RUNNING;
+- break;
+-
+- default:
+- printk(KERN_ERR "dma%d: unknown load_state in s3c2410_dma_waitforload() %d\n", chan->number, chan->load_state);
+- }
+-
+- return 1;
+- }
+- }
+-
+- if (chan->stats != NULL) {
+- chan->stats->timeout_failed++;
+- }
+-
+- return 0;
+-}
+-
+ /* s3c2410_dma_loadbuffer
+ *
+ * load a buffer, and update the channel state
+@@ -206,66 +142,35 @@ static inline int
+ s3c2410_dma_loadbuffer(struct s3c2410_dma_chan *chan,
+ struct s3c2410_dma_buf *buf)
+ {
+- unsigned long reload;
+-
+ if (buf == NULL) {
+ dmawarn("buffer is NULL\n");
+ return -EINVAL;
+ }
+
+- pr_debug("s3c2410_chan_loadbuffer: loading buff %p (0x%08lx,0x%06x)\n",
++ pr_debug("%s: loading buff %p (0x%08lx,0x%06x)\n", __func__,
+ buf, (unsigned long)buf->data, buf->size);
+
+ /* check the state of the channel before we do anything */
+
+- if (chan->load_state == S3C2410_DMALOAD_1LOADED) {
+- dmawarn("load_state is S3C2410_DMALOAD_1LOADED\n");
+- }
+-
+- if (chan->load_state == S3C2410_DMALOAD_1LOADED_1RUNNING) {
+- dmawarn("state is S3C2410_DMALOAD_1LOADED_1RUNNING\n");
+- }
++ if (chan->load_state != S3C2410_DMALOAD_NONE)
++ printk(KERN_ERR "dma%d: channel already has buffer loaded\n",
++ chan->number);
+
+- /* it would seem sensible if we are the last buffer to not bother
+- * with the auto-reload bit, so that the DMA engine will not try
+- * and load another transfer after this one has finished...
+- */
+- if (chan->load_state == S3C2410_DMALOAD_NONE) {
+- pr_debug("load_state is none, checking for noreload (next=%p)\n",
+- buf->next);
+- reload = (buf->next == NULL) ? S3C2410_DCON_NORELOAD : 0;
+- } else {
+- //pr_debug("load_state is %d => autoreload\n", chan->load_state);
+- reload = S3C2410_DCON_AUTORELOAD;
+- }
+-
+- if ((buf->data & 0xf0000000) != 0x30000000) {
++ if ((buf->data & 0xf0000000) != 0x30000000)
+ dmawarn("dmaload: buffer is %p\n", (void *)buf->data);
+- }
+
+ writel(buf->data, chan->addr_reg);
+
+ dma_wrreg(chan, S3C2410_DMA_DCON,
+- chan->dcon | reload | (buf->size/chan->xfer_unit));
++ chan->dcon | S3C2410_DCON_NORELOAD |
++ (buf->size/chan->xfer_unit));
+
+- chan->next = buf->next;
++ chan->curr = buf;
+
+ /* update the state of the channel */
++ chan->load_state = S3C2410_DMALOAD_1RUNNING;
+
+- switch (chan->load_state) {
+- case S3C2410_DMALOAD_NONE:
+- chan->load_state = S3C2410_DMALOAD_1LOADED;
+- break;
+-
+- case S3C2410_DMALOAD_1RUNNING:
+- chan->load_state = S3C2410_DMALOAD_1LOADED_1RUNNING;
+- break;
+-
+- default:
+- dmawarn("dmaload: unknown state %d in loadbuffer\n",
+- chan->load_state);
+- break;
+- }
++ buf->timestamp = jiffies;
+
+ return 0;
+ }
+@@ -345,7 +250,6 @@ static int s3c2410_dma_start(struct s3c2410_dma_chan *chan)
+ dbg_showchan(chan);
+
+ /* enable the channel */
+-
+ if (!chan->irq_enabled) {
+ enable_irq(chan->irq);
+ chan->irq_enabled = 1;
+@@ -360,14 +264,6 @@ static int s3c2410_dma_start(struct s3c2410_dma_chan *chan)
+
+ pr_debug("dma%d: %08lx to DMASKTRIG\n", chan->number, tmp);
+
+-#if 0
+- /* the dma buffer loads should take care of clearing the AUTO
+- * reloading feature */
+- tmp = dma_rdreg(chan, S3C2410_DMA_DCON);
+- tmp &= ~S3C2410_DCON_NORELOAD;
+- dma_wrreg(chan, S3C2410_DMA_DCON, tmp);
+-#endif
+-
+ s3c2410_dma_call_op(chan, S3C2410_DMAOP_START);
+
+ dbg_showchan(chan);
+@@ -377,43 +273,11 @@ static int s3c2410_dma_start(struct s3c2410_dma_chan *chan)
+ * the first buffer is finished, the new one will be loaded onto
+ * the channel */
+
+- if (chan->next != NULL) {
+- if (chan->load_state == S3C2410_DMALOAD_1LOADED) {
+-
+- if (s3c2410_dma_waitforload(chan, __LINE__) == 0) {
+- pr_debug("%s: buff not yet loaded, no more todo\n",
+- __func__);
+- } else {
+- chan->load_state = S3C2410_DMALOAD_1RUNNING;
+- s3c2410_dma_loadbuffer(chan, chan->next);
+- }
+-
+- } else if (chan->load_state == S3C2410_DMALOAD_1RUNNING) {
+- s3c2410_dma_loadbuffer(chan, chan->next);
+- }
+- }
+-
+-
+ local_irq_restore(flags);
+
+ return 0;
+ }
+
+-/* s3c2410_dma_canload
+- *
+- * work out if we can queue another buffer into the DMA engine
+-*/
+-
+-static int
+-s3c2410_dma_canload(struct s3c2410_dma_chan *chan)
+-{
+- if (chan->load_state == S3C2410_DMALOAD_NONE ||
+- chan->load_state == S3C2410_DMALOAD_1RUNNING)
+- return 1;
+-
+- return 0;
+-}
+-
+ /* s3c2410_dma_enqueue
+ *
+ * queue an given buffer for dma transfer.
+@@ -462,47 +326,19 @@ int s3c2410_dma_enqueue(unsigned int channel, void *id,
+
+ local_irq_save(flags);
+
+- if (chan->curr == NULL) {
+- /* we've got nothing loaded... */
+- pr_debug("%s: buffer %p queued onto empty channel\n",
+- __func__, buf);
+-
+- chan->curr = buf;
+- chan->end = buf;
+- chan->next = NULL;
++ if (chan->end == NULL) {
++ pr_debug("dma%d: queued buffer onto empty channel\n",
++ chan->number);
++ chan->next = buf;
++ chan->end = buf;
+ } else {
+- pr_debug("dma%d: %s: buffer %p queued onto non-empty channel\n",
+- chan->number, __func__, buf);
+-
+- if (chan->end == NULL)
+- pr_debug("dma%d: %s: %p not empty, and chan->end==NULL?\n",
+- chan->number, __func__, chan);
+-
++ pr_debug("dma%d: queued buffer onto non-empty channel\n",
++ chan->number);
+ chan->end->next = buf;
+ chan->end = buf;
+ }
+
+- /* if necessary, update the next buffer field */
+- if (chan->next == NULL)
+- chan->next = buf;
+-
+- /* check to see if we can load a buffer */
+- if (chan->state == S3C2410_DMA_RUNNING) {
+- if (chan->load_state == S3C2410_DMALOAD_1LOADED && 1) {
+- if (s3c2410_dma_waitforload(chan, __LINE__) == 0) {
+- printk(KERN_ERR "dma%d: loadbuffer:"
+- "timeout loading buffer\n",
+- chan->number);
+- dbg_showchan(chan);
+- local_irq_restore(flags);
+- return -EINVAL;
+- }
+- }
+-
+- while (s3c2410_dma_canload(chan) && chan->next != NULL) {
+- s3c2410_dma_loadbuffer(chan, chan->next);
+- }
+- } else if (chan->state == S3C2410_DMA_IDLE) {
++ if (chan->state == S3C2410_DMA_IDLE) {
+ if (chan->flags & S3C2410_DMAF_AUTOSTART) {
+ s3c2410_dma_ctrl(chan->number | DMACH_LOW_LEVEL,
+ S3C2410_DMAOP_START);
+@@ -529,51 +365,6 @@ s3c2410_dma_freebuf(struct s3c2410_dma_buf *buf)
+ }
+ }
+
+-/* s3c2410_dma_lastxfer
+- *
+- * called when the system is out of buffers, to ensure that the channel
+- * is prepared for shutdown.
+-*/
+-
+-static inline void
+-s3c2410_dma_lastxfer(struct s3c2410_dma_chan *chan)
+-{
+-#if 0
+- pr_debug("dma%d: s3c2410_dma_lastxfer: load_state %d\n",
+- chan->number, chan->load_state);
+-#endif
+-
+- switch (chan->load_state) {
+- case S3C2410_DMALOAD_NONE:
+- break;
+-
+- case S3C2410_DMALOAD_1LOADED:
+- if (s3c2410_dma_waitforload(chan, __LINE__) == 0) {
+- /* flag error? */
+- printk(KERN_ERR "dma%d: timeout waiting for load (%s)\n",
+- chan->number, __func__);
+- return;
+- }
+- break;
+-
+- case S3C2410_DMALOAD_1LOADED_1RUNNING:
+- /* I belive in this case we do not have anything to do
+- * until the next buffer comes along, and we turn off the
+- * reload */
+- return;
+-
+- default:
+- pr_debug("dma%d: lastxfer: unhandled load_state %d with no next\n",
+- chan->number, chan->load_state);
+- return;
+-
+- }
+-
+- /* hopefully this'll shut the damned thing up after the transfer... */
+- dma_wrreg(chan, S3C2410_DMA_DCON, chan->dcon | S3C2410_DCON_NORELOAD);
+-}
+-
+-
+ #define dmadbg2(x...)
+
+ static irqreturn_t
+@@ -582,57 +373,25 @@ s3c2410_dma_irq(int irq, void *devpw)
+ struct s3c2410_dma_chan *chan = (struct s3c2410_dma_chan *)devpw;
+ struct s3c2410_dma_buf *buf;
+
++ /* Check for orphaned irq */
++ if (chan->state == S3C2410_DMA_IDLE)
++ return IRQ_HANDLED;
++
+ buf = chan->curr;
+
+ dbg_showchan(chan);
+
+ /* modify the channel state */
+
+- switch (chan->load_state) {
+- case S3C2410_DMALOAD_1RUNNING:
+- /* TODO - if we are running only one buffer, we probably
+- * want to reload here, and then worry about the buffer
+- * callback */
+-
+- chan->load_state = S3C2410_DMALOAD_NONE;
+- break;
+-
+- case S3C2410_DMALOAD_1LOADED:
+- /* iirc, we should go back to NONE loaded here, we
+- * had a buffer, and it was never verified as being
+- * loaded.
+- */
+-
++ if (chan->load_state == S3C2410_DMALOAD_1RUNNING)
+ chan->load_state = S3C2410_DMALOAD_NONE;
+- break;
+-
+- case S3C2410_DMALOAD_1LOADED_1RUNNING:
+- /* we'll worry about checking to see if another buffer is
+- * ready after we've called back the owner. This should
+- * ensure we do not wait around too long for the DMA
+- * engine to start the next transfer
+- */
+-
+- chan->load_state = S3C2410_DMALOAD_1LOADED;
+- break;
+-
+- case S3C2410_DMALOAD_NONE:
++ else
+ printk(KERN_ERR "dma%d: IRQ with no loaded buffer?\n",
+- chan->number);
+- break;
+-
+- default:
+- printk(KERN_ERR "dma%d: IRQ in invalid load_state %d\n",
+- chan->number, chan->load_state);
+- break;
+- }
++ chan->number);
+
+ if (buf != NULL) {
+- /* update the chain to make sure that if we load any more
+- * buffers when we call the callback function, things should
+- * work properly */
+-
+- chan->curr = buf->next;
++ chan->curr = NULL;
++ chan->next = buf->next;
+ buf->next = NULL;
+
+ if (buf->magic != BUF_MAGIC) {
+@@ -640,12 +399,14 @@ s3c2410_dma_irq(int irq, void *devpw)
+ chan->number, __func__, buf);
+ return IRQ_HANDLED;
+ }
+-
++ pr_debug("dma%d: transfer of size %d took %u ms\n",
++ chan->number,
++ buf->size,
++ jiffies_to_msecs(jiffies - buf->timestamp));
+ s3c2410_dma_buffdone(chan, buf, S3C2410_RES_OK);
+
+ /* free resouces */
+ s3c2410_dma_freebuf(buf);
+- } else {
+ }
+
+ /* only reload if the channel is still running... our buffer done
+@@ -655,53 +416,36 @@ s3c2410_dma_irq(int irq, void *devpw)
+ /* todo: check that when the channel is shut-down from inside this
+ * function, we cope with unsetting reload, etc */
+
+- if (chan->next != NULL && chan->state != S3C2410_DMA_IDLE) {
+- unsigned long flags;
+-
+- switch (chan->load_state) {
+- case S3C2410_DMALOAD_1RUNNING:
+- /* don't need to do anything for this state */
+- break;
+-
+- case S3C2410_DMALOAD_NONE:
+- /* can load buffer immediately */
+- break;
+-
+- case S3C2410_DMALOAD_1LOADED:
+- if (s3c2410_dma_waitforload(chan, __LINE__) == 0) {
+- /* flag error? */
+- printk(KERN_ERR "dma%d: timeout waiting for load (%s)\n",
+- chan->number, __func__);
+- return IRQ_HANDLED;
+- }
+-
+- break;
+-
+- case S3C2410_DMALOAD_1LOADED_1RUNNING:
+- goto no_load;
+-
+- default:
+- printk(KERN_ERR "dma%d: unknown load_state in irq, %d\n",
+- chan->number, chan->load_state);
+- return IRQ_HANDLED;
+- }
++ if (chan->next != NULL) {
++ if (chan->state != S3C2410_DMA_IDLE) {
++ unsigned long flags;
++ unsigned long tmp;
+
+- local_irq_save(flags);
+- s3c2410_dma_loadbuffer(chan, chan->next);
+- local_irq_restore(flags);
++ pr_debug("%s: dma%d: continuing with next buffer\n",
++ __func__, chan->number);
++ local_irq_save(flags);
++ s3c2410_dma_loadbuffer(chan, chan->next);
++ tmp = dma_rdreg(chan, S3C2410_DMA_DMASKTRIG);
++ tmp &= ~S3C2410_DMASKTRIG_STOP;
++ tmp |= S3C2410_DMASKTRIG_ON;
++ dma_wrreg(chan, S3C2410_DMA_DMASKTRIG, tmp);
++ local_irq_restore(flags);
++ } else
++ pr_debug("dma%d: buffdone callback stopped dma...\n",
++ chan->number);
+ } else {
+- s3c2410_dma_lastxfer(chan);
++ /* No more buffers? So no queue */
++ chan->end = NULL;
+
+ /* see if we can stop this channel.. */
+- if (chan->load_state == S3C2410_DMALOAD_NONE) {
+- pr_debug("dma%d: end of transfer, stopping channel (%ld)\n",
++ if (chan->state != S3C2410_DMA_IDLE) {
++ pr_debug("dma%d: end of transfer, stopping channel (%lu)\n",
+ chan->number, jiffies);
+ s3c2410_dma_ctrl(chan->number | DMACH_LOW_LEVEL,
+ S3C2410_DMAOP_STOP);
+ }
+ }
+
+- no_load:
+ return IRQ_HANDLED;
+ }
+
+@@ -840,9 +584,20 @@ static int s3c2410_dma_dostop(struct s3c2410_dma_chan *chan)
+ s3c2410_dma_call_op(chan, S3C2410_DMAOP_STOP);
+
+ tmp = dma_rdreg(chan, S3C2410_DMA_DMASKTRIG);
+- tmp |= S3C2410_DMASKTRIG_STOP;
+- //tmp &= ~S3C2410_DMASKTRIG_ON;
+- dma_wrreg(chan, S3C2410_DMA_DMASKTRIG, tmp);
++ if (tmp & S3C2410_DMASKTRIG_ON) {
++ int retries = 1000;
++ tmp |= S3C2410_DMASKTRIG_STOP;
++ dma_wrreg(chan, S3C2410_DMA_DMASKTRIG, tmp);
++
++ while (--retries) {
++ tmp = dma_rdreg(chan, S3C2410_DMA_DMASKTRIG);
++ if (!(tmp & S3C2410_DMASKTRIG_ON))
++ break;
++ }
++
++ if (!retries)
++ pr_debug("dma%d: failed to stop??\n", chan->number);
++ }
+
+ #if 0
+ /* should also clear interrupts, according to WinCE BSP */
+@@ -860,22 +615,6 @@ static int s3c2410_dma_dostop(struct s3c2410_dma_chan *chan)
+ return 0;
+ }
+
+-static void s3c2410_dma_waitforstop(struct s3c2410_dma_chan *chan)
+-{
+- unsigned long tmp;
+- unsigned int timeout = 0x10000;
+-
+- while (timeout-- > 0) {
+- tmp = dma_rdreg(chan, S3C2410_DMA_DMASKTRIG);
+-
+- if (!(tmp & S3C2410_DMASKTRIG_ON))
+- return;
+- }
+-
+- pr_debug("dma%d: failed to stop?\n", chan->number);
+-}
+-
+-
+ /* s3c2410_dma_flush
+ *
+ * stop the channel, and remove all current and pending transfers
+@@ -917,8 +656,6 @@ static int s3c2410_dma_flush(struct s3c2410_dma_chan *chan)
+
+ dbg_showregs(chan);
+
+- s3c2410_dma_waitforstop(chan);
+-
+ #if 0
+ /* should also clear interrupts, according to WinCE BSP */
+ {
+@@ -939,38 +676,8 @@ static int s3c2410_dma_flush(struct s3c2410_dma_chan *chan)
+
+ static int s3c2410_dma_started(struct s3c2410_dma_chan *chan)
+ {
+- unsigned long flags;
+-
+- local_irq_save(flags);
+-
+- dbg_showchan(chan);
+-
+- /* if we've only loaded one buffer onto the channel, then chec
+- * to see if we have another, and if so, try and load it so when
+- * the first buffer is finished, the new one will be loaded onto
+- * the channel */
+-
+- if (chan->next != NULL) {
+- if (chan->load_state == S3C2410_DMALOAD_1LOADED) {
+-
+- if (s3c2410_dma_waitforload(chan, __LINE__) == 0) {
+- pr_debug("%s: buff not yet loaded, no more todo\n",
+- __func__);
+- } else {
+- chan->load_state = S3C2410_DMALOAD_1RUNNING;
+- s3c2410_dma_loadbuffer(chan, chan->next);
+- }
+-
+- } else if (chan->load_state == S3C2410_DMALOAD_1RUNNING) {
+- s3c2410_dma_loadbuffer(chan, chan->next);
+- }
+- }
+-
+-
+- local_irq_restore(flags);
+-
++ /* Do nothing */
+ return 0;
+-
+ }
+
+ int
+@@ -1045,16 +752,12 @@ int s3c2410_dma_config(unsigned int channel,
+ case DMACH_PCM_IN:
+ case DMACH_PCM_OUT:
+ case DMACH_MIC_IN:
++ case DMACH_SDI:
+ default:
+ dcon |= S3C2410_DCON_HANDSHAKE;
+ dcon |= S3C2410_DCON_SYNC_PCLK;
+ break;
+
+- case DMACH_SDI:
+- /* note, ensure if need HANDSHAKE or not */
+- dcon |= S3C2410_DCON_SYNC_PCLK;
+- break;
+-
+ case DMACH_XD0:
+ case DMACH_XD1:
+ dcon |= S3C2410_DCON_HANDSHAKE;
+@@ -1231,21 +934,20 @@ static int s3c2410_dma_resume(struct sys_device *dev)
+ struct s3c2410_dma_chan *cp = to_dma_chan(dev);
+ unsigned int no = cp->number | DMACH_LOW_LEVEL;
+
+- /* restore channel's hardware configuration */
+
+ if (!cp->in_use)
+ return 0;
+
+- printk(KERN_INFO "dma%d: restoring configuration\n", cp->number);
+-
+- s3c2410_dma_config(no, cp->xfer_unit);
+- s3c2410_dma_devconfig(no, cp->source, cp->dev_addr);
+
+ /* re-select the dma source for this channel */
+-
+ if (cp->map != NULL)
+ dma_sel.select(cp, cp->map);
+
++ /* restore channel's hardware configuration */
++ printk(KERN_INFO "dma%d: restoring configuration\n", cp->number);
++ s3c2410_dma_config(no, cp->xfer_unit);
++ s3c2410_dma_devconfig(no, cp->source, cp->dev_addr);
++
+ return 0;
+ }
+
+--
+1.7.2.2
+
diff --git a/recipes/linux/linux-2.6.35/rx1950/0006-s3cmci-minor-fixups.patch b/recipes/linux/linux-2.6.35/rx1950/0006-s3cmci-minor-fixups.patch
new file mode 100644
index 0000000000..dde1d7784f
--- /dev/null
+++ b/recipes/linux/linux-2.6.35/rx1950/0006-s3cmci-minor-fixups.patch
@@ -0,0 +1,40 @@
+From 6c2fec9c2f1888fc177c29a37a3032f8144d2003 Mon Sep 17 00:00:00 2001
+From: Vasily Khoruzhick <anarsoul@gmail.com>
+Date: Fri, 13 Aug 2010 20:01:53 +0300
+Subject: [PATCH 06/20] s3cmci: minor fixups
+
+- It's not necessary to start DMA op manually, as we have
+autostart feature enabled
+- Restore prescaler before DMA operation, otherwise it
+takes ages to complete DMA op.
+
+Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
+---
+ drivers/mmc/host/s3cmci.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/mmc/host/s3cmci.c b/drivers/mmc/host/s3cmci.c
+index 2e16e0a..5d1a8ed 100644
+--- a/drivers/mmc/host/s3cmci.c
++++ b/drivers/mmc/host/s3cmci.c
+@@ -1106,6 +1106,8 @@ static int s3cmci_prepare_dma(struct s3cmci_host *host, struct mmc_data *data)
+ sg_dma_address(&data->sg[i]),
+ sg_dma_len(&data->sg[i]));
+
++ /* Restore prescaler value */
++ writel(host->prescaler, host->base + S3C2410_SDIPRE);
+ res = s3c2410_dma_enqueue(host->dma, host,
+ sg_dma_address(&data->sg[i]),
+ sg_dma_len(&data->sg[i]));
+@@ -1116,8 +1118,6 @@ static int s3cmci_prepare_dma(struct s3cmci_host *host, struct mmc_data *data)
+ }
+ }
+
+- s3c2410_dma_ctrl(host->dma, S3C2410_DMAOP_START);
+-
+ return 0;
+ }
+
+--
+1.7.2.2
+
diff --git a/recipes/linux/linux-2.6.35/rx1950/0007-Add-s3c-adc-battery-driver.patch b/recipes/linux/linux-2.6.35/rx1950/0007-Add-s3c-adc-battery-driver.patch
new file mode 100644
index 0000000000..f0b763afda
--- /dev/null
+++ b/recipes/linux/linux-2.6.35/rx1950/0007-Add-s3c-adc-battery-driver.patch
@@ -0,0 +1,530 @@
+From 874bc0df0eeddae98517190375e9e5697826f1a9 Mon Sep 17 00:00:00 2001
+From: Vasily Khoruzhick <anarsoul@gmail.com>
+Date: Wed, 16 Jun 2010 22:35:52 +0300
+Subject: [PATCH v5 3/4] Add s3c-adc-battery driver
+
+s3c-adc-battery is driver for monitoring
+and charging battery on iPAQ H1930/H1940/RX1950.
+It depends on s3c-adc driver to get battery voltage and current.
+
+Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
+---
+ drivers/power/Kconfig | 6 +
+ drivers/power/Makefile | 1 +
+ drivers/power/s3c_adc_battery.c | 433 +++++++++++++++++++++++++++++++++++++++
+ include/linux/s3c_adc_battery.h | 36 ++++
+ 4 files changed, 476 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/power/s3c_adc_battery.c
+ create mode 100644 include/linux/s3c_adc_battery.h
+
+diff --git a/drivers/power/Kconfig b/drivers/power/Kconfig
+index 8e9ba17..645baa5 100644
+--- a/drivers/power/Kconfig
++++ b/drivers/power/Kconfig
+@@ -136,6 +136,12 @@ config BATTERY_Z2
+ help
+ Say Y to include support for the battery on the Zipit Z2.
+
++config BATTERY_S3C_ADC
++ tristate "Battery driver for Samsung ADC based monitoring"
++ depends on S3C_ADC
++ help
++ Say Y here to enable support for iPAQ h1930/h1940/rx1950 battery
++
+ config CHARGER_PCF50633
+ tristate "NXP PCF50633 MBC"
+ depends on MFD_PCF50633
+diff --git a/drivers/power/Makefile b/drivers/power/Makefile
+index 0005080..166bcbf 100644
+--- a/drivers/power/Makefile
++++ b/drivers/power/Makefile
+@@ -33,4 +33,5 @@ obj-$(CONFIG_BATTERY_BQ27x00) += bq27x00_battery.o
+ obj-$(CONFIG_BATTERY_DA9030) += da9030_battery.o
+ obj-$(CONFIG_BATTERY_MAX17040) += max17040_battery.o
+ obj-$(CONFIG_BATTERY_Z2) += z2_battery.o
++obj-$(CONFIG_BATTERY_S3C_ADC) += s3c_adc_battery.o
+ obj-$(CONFIG_CHARGER_PCF50633) += pcf50633-charger.o
+diff --git a/drivers/power/s3c_adc_battery.c b/drivers/power/s3c_adc_battery.c
+new file mode 100644
+index 0000000..d7a0771
+--- /dev/null
++++ b/drivers/power/s3c_adc_battery.c
+@@ -0,0 +1,433 @@
++/*
++ * iPAQ h1930/h1940/rx1950 battery controler driver
++ * Copyright (c) Vasily Khoruzhick
++ * Based on h1940_battery.c by Arnaud Patard
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive for
++ * more details.
++ *
++ */
++
++#include <linux/interrupt.h>
++#include <linux/platform_device.h>
++#include <linux/power_supply.h>
++#include <linux/leds.h>
++#include <linux/gpio.h>
++#include <linux/err.h>
++#include <linux/timer.h>
++#include <linux/jiffies.h>
++#include <linux/s3c_adc_battery.h>
++#include <linux/errno.h>
++#include <linux/init.h>
++
++#include <plat/adc.h>
++
++#define BAT_POLL_INTERVAL 10000 /* ms */
++#define JITTER_DELAY 500 /* ms */
++
++struct s3c_adc_bat {
++ struct power_supply psy;
++ struct s3c_adc_client *client;
++ struct s3c_adc_bat_pdata *pdata;
++ int volt_value;
++ int cur_value;
++ unsigned int timestamp;
++ int level;
++ int status;
++ int cable_plugged:1;
++};
++
++static struct delayed_work bat_work;
++
++static void s3c_adc_bat_ext_power_changed(struct power_supply *psy)
++{
++ schedule_delayed_work(&bat_work,
++ msecs_to_jiffies(JITTER_DELAY));
++}
++
++static enum power_supply_property s3c_adc_backup_bat_props[] = {
++ POWER_SUPPLY_PROP_VOLTAGE_NOW,
++ POWER_SUPPLY_PROP_VOLTAGE_MIN,
++ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN,
++};
++
++static int s3c_adc_backup_bat_get_property(struct power_supply *psy,
++ enum power_supply_property psp,
++ union power_supply_propval *val)
++{
++ struct s3c_adc_bat *bat = container_of(psy, struct s3c_adc_bat, psy);
++
++ if (!bat) {
++ dev_err(psy->dev, "%s: no battery infos ?!\n", __func__);
++ return -EINVAL;
++ }
++
++ if (bat->volt_value < 0 ||
++ jiffies_to_msecs(jiffies - bat->timestamp) >
++ BAT_POLL_INTERVAL) {
++ bat->volt_value = s3c_adc_read(bat->client,
++ bat->pdata->backup_volt_channel);
++ bat->volt_value *= bat->pdata->backup_volt_mult;
++ bat->timestamp = jiffies;
++ }
++
++ switch (psp) {
++ case POWER_SUPPLY_PROP_VOLTAGE_NOW:
++ val->intval = bat->volt_value;
++ return 0;
++ case POWER_SUPPLY_PROP_VOLTAGE_MIN:
++ val->intval = bat->pdata->backup_volt_min;
++ return 0;
++ case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN:
++ val->intval = bat->pdata->backup_volt_max;
++ return 0;
++ default:
++ return -EINVAL;
++ }
++}
++
++static struct s3c_adc_bat backup_bat = {
++ .psy = {
++ .name = "backup-battery",
++ .type = POWER_SUPPLY_TYPE_BATTERY,
++ .properties = s3c_adc_backup_bat_props,
++ .num_properties = ARRAY_SIZE(s3c_adc_backup_bat_props),
++ .get_property = s3c_adc_backup_bat_get_property,
++ .use_for_apm = 1,
++ },
++};
++
++static enum power_supply_property s3c_adc_main_bat_props[] = {
++ POWER_SUPPLY_PROP_STATUS,
++ POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN,
++ POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN,
++ POWER_SUPPLY_PROP_CHARGE_NOW,
++ POWER_SUPPLY_PROP_VOLTAGE_NOW,
++ POWER_SUPPLY_PROP_CURRENT_NOW,
++};
++
++static int calc_full_volt(int volt_val, int cur_val, int impedance)
++{
++ return volt_val + cur_val * impedance / 1000;
++}
++
++static int s3c_adc_bat_get_property(struct power_supply *psy,
++ enum power_supply_property psp,
++ union power_supply_propval *val)
++{
++ struct s3c_adc_bat *bat = container_of(psy, struct s3c_adc_bat, psy);
++
++ int new_level;
++ int full_volt;
++ const struct s3c_adc_bat_thresh *lut = bat->pdata->lut_noac;
++ unsigned int lut_size = bat->pdata->lut_noac_cnt;
++
++ if (!bat) {
++ dev_err(psy->dev, "no battery infos ?!\n");
++ return -EINVAL;
++ }
++
++ if (bat->volt_value < 0 || bat->cur_value < 0 ||
++ jiffies_to_msecs(jiffies - bat->timestamp) >
++ BAT_POLL_INTERVAL) {
++ bat->volt_value = s3c_adc_read(bat->client,
++ bat->pdata->volt_channel) * bat->pdata->volt_mult;
++ bat->cur_value = s3c_adc_read(bat->client,
++ bat->pdata->current_channel) * bat->pdata->current_mult;
++ bat->timestamp = jiffies;
++ }
++
++ if (bat->cable_plugged &&
++ ((bat->pdata->gpio_charge_finished < 0) ||
++ !gpio_get_value(bat->pdata->gpio_charge_finished))) {
++ lut = bat->pdata->lut_acin;
++ lut_size = bat->pdata->lut_acin_cnt;
++ }
++
++ new_level = 100000;
++ full_volt = calc_full_volt((bat->volt_value / 1000),
++ (bat->cur_value / 1000), bat->pdata->internal_impedance);
++
++ if (full_volt < calc_full_volt(lut->volt, lut->cur,
++ bat->pdata->internal_impedance)) {
++ lut_size--;
++ while (lut_size--) {
++ int lut_volt1;
++ int lut_volt2;
++
++ lut_volt1 = calc_full_volt(lut[0].volt, lut[0].cur,
++ bat->pdata->internal_impedance);
++ lut_volt2 = calc_full_volt(lut[1].volt, lut[1].cur,
++ bat->pdata->internal_impedance);
++ if (full_volt < lut_volt1 && full_volt >= lut_volt2) {
++ new_level = (lut[1].level +
++ (lut[0].level - lut[1].level) *
++ (full_volt - lut_volt2) /
++ (lut_volt1 - lut_volt2)) * 1000;
++ break;
++ }
++ new_level = lut[1].level * 1000;
++ lut++;
++ }
++ }
++
++ bat->level = new_level;
++
++ switch (psp) {
++ case POWER_SUPPLY_PROP_STATUS:
++ if (bat->pdata->gpio_charge_finished < 0)
++ val->intval = bat->level == 100000 ?
++ POWER_SUPPLY_STATUS_FULL : bat->status;
++ else
++ val->intval = bat->status;
++ return 0;
++ case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN:
++ val->intval = 100000;
++ return 0;
++ case POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN:
++ val->intval = 0;
++ return 0;
++ case POWER_SUPPLY_PROP_CHARGE_NOW:
++ val->intval = bat->level;
++ return 0;
++ case POWER_SUPPLY_PROP_VOLTAGE_NOW:
++ val->intval = bat->volt_value;
++ return 0;
++ case POWER_SUPPLY_PROP_CURRENT_NOW:
++ val->intval = bat->cur_value;
++ return 0;
++ default:
++ return -EINVAL;
++ }
++}
++
++static struct s3c_adc_bat main_bat = {
++ .psy = {
++ .name = "main-battery",
++ .type = POWER_SUPPLY_TYPE_BATTERY,
++ .properties = s3c_adc_main_bat_props,
++ .num_properties = ARRAY_SIZE(s3c_adc_main_bat_props),
++ .get_property = s3c_adc_bat_get_property,
++ .external_power_changed = s3c_adc_bat_ext_power_changed,
++ .use_for_apm = 1,
++ },
++};
++
++static void s3c_adc_bat_work(struct work_struct *work)
++{
++ struct s3c_adc_bat *bat = &main_bat;
++ int is_charged;
++ int is_plugged;
++ static int was_plugged;
++
++ is_plugged = power_supply_am_i_supplied(&bat->psy);
++ bat->cable_plugged = is_plugged;
++ if (is_plugged != was_plugged) {
++ was_plugged = is_plugged;
++ if (is_plugged) {
++ if (bat->pdata->enable_charger)
++ bat->pdata->enable_charger();
++ bat->status = POWER_SUPPLY_STATUS_CHARGING;
++ } else {
++ if (bat->pdata->disable_charger)
++ bat->pdata->disable_charger();
++ bat->status = POWER_SUPPLY_STATUS_DISCHARGING;
++ }
++ } else {
++ if ((bat->pdata->gpio_charge_finished >= 0) && is_plugged) {
++ is_charged = gpio_get_value(
++ main_bat.pdata->gpio_charge_finished);
++ if (is_charged) {
++ if (bat->pdata->disable_charger)
++ bat->pdata->disable_charger();
++ bat->status = POWER_SUPPLY_STATUS_FULL;
++ } else {
++ if (bat->pdata->enable_charger)
++ bat->pdata->enable_charger();
++ bat->status = POWER_SUPPLY_STATUS_CHARGING;
++ }
++ }
++ }
++
++ power_supply_changed(&bat->psy);
++}
++
++static irqreturn_t s3c_adc_bat_charged(int irq, void *dev_id)
++{
++ schedule_delayed_work(&bat_work,
++ msecs_to_jiffies(JITTER_DELAY));
++ return IRQ_HANDLED;
++}
++
++static int __init s3c_adc_bat_probe(struct platform_device *pdev)
++{
++ struct s3c_adc_client *client;
++ struct s3c_adc_bat_pdata *pdata = pdev->dev.platform_data;
++ int ret;
++
++ client = s3c_adc_register(pdev, NULL, NULL, 0);
++ if (IS_ERR(client)) {
++ dev_err(&pdev->dev, "cannot register adc\n");
++ return PTR_ERR(client);
++ }
++
++ platform_set_drvdata(pdev, client);
++
++ main_bat.client = client;
++ main_bat.pdata = pdata;
++ main_bat.volt_value = -1;
++ main_bat.cur_value = -1;
++ main_bat.cable_plugged = 0;
++ main_bat.status = POWER_SUPPLY_STATUS_DISCHARGING;
++
++ ret = power_supply_register(&pdev->dev, &main_bat.psy);
++ if (ret)
++ goto err_reg_main;
++ if (pdata->backup_volt_mult) {
++ backup_bat.client = client;
++ backup_bat.pdata = pdev->dev.platform_data;
++ backup_bat.volt_value = -1;
++ ret = power_supply_register(&pdev->dev, &backup_bat.psy);
++ if (ret)
++ goto err_reg_backup;
++ }
++
++ INIT_DELAYED_WORK(&bat_work, s3c_adc_bat_work);
++
++ if (pdata->gpio_charge_finished >= 0) {
++ ret = gpio_request(pdata->gpio_charge_finished, "charged");
++ if (ret)
++ goto err_gpio;
++
++ ret = request_irq(gpio_to_irq(pdata->gpio_charge_finished),
++ s3c_adc_bat_charged,
++ IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
++ "battery charged", NULL);
++ if (ret)
++ goto err_irq;
++ }
++
++ if (pdata->init) {
++ ret = pdata->init();
++ if (ret)
++ goto err_platform;
++ }
++
++ dev_info(&pdev->dev, "successfully loaded\n");
++ device_init_wakeup(&pdev->dev, 1);
++
++ /* Schedule timer to check current status */
++ schedule_delayed_work(&bat_work,
++ msecs_to_jiffies(JITTER_DELAY));
++
++ return 0;
++
++err_platform:
++ if (pdata->gpio_charge_finished >= 0)
++ free_irq(gpio_to_irq(pdata->gpio_charge_finished), NULL);
++err_irq:
++ if (pdata->gpio_charge_finished >= 0)
++ gpio_free(pdata->gpio_charge_finished);
++err_gpio:
++ if (pdata->backup_volt_mult)
++ power_supply_unregister(&backup_bat.psy);
++err_reg_backup:
++ power_supply_unregister(&main_bat.psy);
++err_reg_main:
++ return ret;
++}
++
++static int s3c_adc_bat_remove(struct platform_device *pdev)
++{
++ struct s3c_adc_client *client = platform_get_drvdata(pdev);
++ struct s3c_adc_bat_pdata *pdata = pdev->dev.platform_data;
++
++ power_supply_unregister(&main_bat.psy);
++ if (pdata->backup_volt_mult)
++ power_supply_unregister(&backup_bat.psy);
++
++ s3c_adc_release(client);
++
++ if (pdata->gpio_charge_finished >= 0) {
++ free_irq(gpio_to_irq(pdata->gpio_charge_finished), NULL);
++ gpio_free(pdata->gpio_charge_finished);
++ }
++
++ cancel_delayed_work(&bat_work);
++
++ if (pdata->exit)
++ pdata->exit();
++
++ return 0;
++}
++
++#ifdef CONFIG_PM
++static int s3c_adc_bat_suspend(struct platform_device *pdev,
++ pm_message_t state)
++{
++ struct s3c_adc_bat_pdata *pdata = pdev->dev.platform_data;
++
++ if (pdata->gpio_charge_finished >= 0) {
++ if (device_may_wakeup(&pdev->dev))
++ enable_irq_wake(
++ gpio_to_irq(pdata->gpio_charge_finished));
++ else {
++ disable_irq(gpio_to_irq(pdata->gpio_charge_finished));
++ main_bat.pdata->disable_charger();
++ }
++ }
++
++ return 0;
++}
++
++static int s3c_adc_bat_resume(struct platform_device *pdev)
++{
++ struct s3c_adc_bat_pdata *pdata = pdev->dev.platform_data;
++
++ if (pdata->gpio_charge_finished >= 0) {
++ if (device_may_wakeup(&pdev->dev))
++ disable_irq_wake(
++ gpio_to_irq(pdata->gpio_charge_finished));
++ else
++ enable_irq(gpio_to_irq(pdata->gpio_charge_finished));
++ }
++
++ /* Schedule timer to check current status */
++ schedule_delayed_work(&bat_work,
++ msecs_to_jiffies(JITTER_DELAY));
++
++ return 0;
++}
++#else
++#define s3c_adc_battery_suspend NULL
++#define s3c_adc_battery_resume NULL
++#endif
++
++static struct platform_driver s3c_adc_bat_driver = {
++ .driver = {
++ .name = "s3c-adc-battery",
++ },
++ .probe = s3c_adc_bat_probe,
++ .remove = s3c_adc_bat_remove,
++ .suspend = s3c_adc_bat_suspend,
++ .resume = s3c_adc_bat_resume,
++};
++
++
++static int __init s3c_adc_bat_init(void)
++{
++ return platform_driver_register(&s3c_adc_bat_driver);
++}
++
++static void __exit s3c_adc_bat_exit(void)
++{
++ platform_driver_unregister(&s3c_adc_bat_driver);
++}
++
++module_init(s3c_adc_bat_init);
++module_exit(s3c_adc_bat_exit);
++
++MODULE_AUTHOR("Vasily Khoruzhick <anarsoul@gmail.com>");
++MODULE_DESCRIPTION("iPAQ H1930/H1940/RX1950 battery controler driver");
++MODULE_LICENSE("GPL");
+diff --git a/include/linux/s3c_adc_battery.h b/include/linux/s3c_adc_battery.h
+new file mode 100644
+index 0000000..dbce22f
+--- /dev/null
++++ b/include/linux/s3c_adc_battery.h
+@@ -0,0 +1,36 @@
++#ifndef _S3C_ADC_BATTERY_H
++#define _S3C_ADC_BATTERY_H
++
++struct s3c_adc_bat_thresh {
++ int volt; /* mV */
++ int cur; /* mA */
++ int level; /* percent */
++};
++
++struct s3c_adc_bat_pdata {
++ int (*init)(void);
++ void (*exit)(void);
++ void (*enable_charger)(void);
++ void (*disable_charger)(void);
++
++ int gpio_charge_finished;
++
++ const struct s3c_adc_bat_thresh *lut_noac;
++ unsigned int lut_noac_cnt;
++ const struct s3c_adc_bat_thresh *lut_acin;
++ unsigned int lut_acin_cnt;
++
++ const unsigned int volt_channel;
++ const unsigned int current_channel;
++ const unsigned int backup_volt_channel;
++
++ const unsigned int volt_mult;
++ const unsigned int current_mult;
++ const unsigned int backup_volt_mult;
++ const unsigned int internal_impedance;
++
++ const unsigned int backup_volt_max;
++ const unsigned int backup_volt_min;
++};
++
++#endif
+--
+1.7.1.1
+
diff --git a/recipes/linux/linux-2.6.35/rx1950/defconfig b/recipes/linux/linux-2.6.35/rx1950/defconfig
new file mode 100644
index 0000000000..ba0bc4d737
--- /dev/null
+++ b/recipes/linux/linux-2.6.35/rx1950/defconfig
@@ -0,0 +1,1615 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.35
+# Thu Sep 9 13:39:17 2010
+#
+CONFIG_ARM=y
+CONFIG_HAVE_PWM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_ARCH_USES_GETTIMEOFFSET=y
+CONFIG_HAVE_PROC_CPU=y
+CONFIG_NO_IOPORT=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_ARCH_HAS_CPUFREQ=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_NEED_DMA_MAP_STATE=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_CONSTRUCTORS=y
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_CROSS_COMPILE=""
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_HAVE_KERNEL_GZIP=y
+CONFIG_HAVE_KERNEL_LZMA=y
+CONFIG_HAVE_KERNEL_LZO=y
+CONFIG_KERNEL_GZIP=y
+# CONFIG_KERNEL_BZIP2 is not set
+# CONFIG_KERNEL_LZMA is not set
+# CONFIG_KERNEL_LZO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_TREE_RCU=y
+# CONFIG_TREE_PREEMPT_RCU is not set
+# CONFIG_TINY_RCU is not set
+# CONFIG_RCU_TRACE is not set
+CONFIG_RCU_FANOUT=32
+# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_TREE_RCU_TRACE is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=18
+# CONFIG_CGROUPS is not set
+# CONFIG_SYSFS_DEPRECATED_V2 is not set
+# CONFIG_RELAY is not set
+CONFIG_NAMESPACES=y
+# CONFIG_UTS_NS is not set
+# CONFIG_IPC_NS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_NET_NS is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_RD_GZIP=y
+CONFIG_RD_BZIP2=y
+CONFIG_RD_LZMA=y
+CONFIG_RD_LZO=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+CONFIG_HAVE_PERF_EVENTS=y
+CONFIG_PERF_USE_VMALLOC=y
+
+#
+# Kernel Performance Events And Counters
+#
+# CONFIG_PERF_EVENTS is not set
+# CONFIG_PERF_COUNTERS is not set
+CONFIG_VM_EVENT_COUNTERS=y
+# CONFIG_COMPAT_BRK is not set
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_CLK=y
+
+#
+# GCOV-based kernel profiling
+#
+# CONFIG_GCOV_KERNEL is not set
+# CONFIG_SLOW_WORK is not set
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_FORCE_LOAD=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_BLOCK=y
+CONFIG_LBDAF=y
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_DEADLINE is not set
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+CONFIG_DEFAULT_NOOP=y
+CONFIG_DEFAULT_IOSCHED="noop"
+# CONFIG_INLINE_SPIN_TRYLOCK is not set
+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK is not set
+# CONFIG_INLINE_SPIN_LOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
+CONFIG_INLINE_SPIN_UNLOCK=y
+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
+CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_READ_TRYLOCK is not set
+# CONFIG_INLINE_READ_LOCK is not set
+# CONFIG_INLINE_READ_LOCK_BH is not set
+# CONFIG_INLINE_READ_LOCK_IRQ is not set
+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
+CONFIG_INLINE_READ_UNLOCK=y
+# CONFIG_INLINE_READ_UNLOCK_BH is not set
+CONFIG_INLINE_READ_UNLOCK_IRQ=y
+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_WRITE_TRYLOCK is not set
+# CONFIG_INLINE_WRITE_LOCK is not set
+# CONFIG_INLINE_WRITE_LOCK_BH is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
+CONFIG_INLINE_WRITE_UNLOCK=y
+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
+CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
+# CONFIG_MUTEX_SPIN_ON_OWNER is not set
+CONFIG_FREEZER=y
+
+#
+# System Type
+#
+CONFIG_MMU=y
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_VEXPRESS is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_BCMRING is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CNS3XXX is not set
+# CONFIG_ARCH_GEMINI is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_STMP3XXX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_DOVE is not set
+# CONFIG_ARCH_KIRKWOOD is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_MMP is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_W90X900 is not set
+# CONFIG_ARCH_NUC93X is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_MSM is not set
+# CONFIG_ARCH_SHMOBILE is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+CONFIG_ARCH_S3C2410=y
+# CONFIG_ARCH_S3C64XX is not set
+# CONFIG_ARCH_S5P6440 is not set
+# CONFIG_ARCH_S5P6442 is not set
+# CONFIG_ARCH_S5PC100 is not set
+# CONFIG_ARCH_S5PV210 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_U300 is not set
+# CONFIG_ARCH_U8500 is not set
+# CONFIG_ARCH_NOMADIK is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_PLAT_SPEAR is not set
+CONFIG_PLAT_SAMSUNG=y
+
+#
+# Boot options
+#
+# CONFIG_S3C_BOOT_WATCHDOG is not set
+# CONFIG_S3C_BOOT_ERROR_RESET is not set
+CONFIG_S3C_BOOT_UART_FORCE_FIFO=y
+CONFIG_S3C_LOWLEVEL_UART_PORT=0
+CONFIG_S3C_GPIO_CFG_S3C24XX=y
+CONFIG_SAMSUNG_GPIO_EXTRA=0
+CONFIG_S3C_GPIO_SPACE=0
+CONFIG_S3C_ADC=y
+CONFIG_S3C_DEV_WDT=y
+CONFIG_S3C_DEV_NAND=y
+CONFIG_S3C_DMA=y
+
+#
+# Power management
+#
+# CONFIG_SAMSUNG_PM_DEBUG is not set
+# CONFIG_SAMSUNG_PM_CHECK is not set
+CONFIG_PLAT_S3C24XX=y
+CONFIG_CPU_LLSERIAL_S3C2440_ONLY=y
+CONFIG_CPU_LLSERIAL_S3C2440=y
+CONFIG_S3C2410_CLOCK=y
+CONFIG_S3C24XX_DCLK=y
+CONFIG_S3C24XX_PWM=y
+CONFIG_S3C24XX_GPIO_EXTRA=0
+CONFIG_S3C2410_DMA=y
+# CONFIG_S3C2410_DMA_DEBUG is not set
+
+#
+# S3C2400 Machines
+#
+CONFIG_CPU_S3C2410_DMA=y
+CONFIG_S3C2410_PM=y
+CONFIG_S3C2410_GPIO=y
+
+#
+# S3C2410 Machines
+#
+# CONFIG_ARCH_SMDK2410 is not set
+# CONFIG_ARCH_H1940 is not set
+CONFIG_PM_H1940=y
+# CONFIG_MACH_N30 is not set
+# CONFIG_ARCH_BAST is not set
+# CONFIG_MACH_OTOM is not set
+# CONFIG_MACH_AML_M5900 is not set
+# CONFIG_MACH_TCT_HAMMER is not set
+# CONFIG_MACH_VR1000 is not set
+# CONFIG_MACH_QT2410 is not set
+
+#
+# S3C2412 Machines
+#
+# CONFIG_MACH_JIVE is not set
+# CONFIG_MACH_SMDK2413 is not set
+# CONFIG_MACH_SMDK2412 is not set
+# CONFIG_MACH_VSTMS is not set
+
+#
+# S3C2416 Machines
+#
+# CONFIG_MACH_SMDK2416 is not set
+CONFIG_CPU_S3C2442=y
+CONFIG_CPU_S3C244X=y
+CONFIG_S3C2440_XTAL_16934400=y
+
+#
+# S3C2440 and S3C2442 Machines
+#
+# CONFIG_MACH_ANUBIS is not set
+# CONFIG_MACH_NEO1973_GTA02 is not set
+# CONFIG_MACH_OSIRIS is not set
+# CONFIG_MACH_RX3715 is not set
+# CONFIG_ARCH_S3C2440 is not set
+# CONFIG_MACH_NEXCODER_2440 is not set
+# CONFIG_SMDK2440_CPU2440 is not set
+# CONFIG_SMDK2440_CPU2442 is not set
+# CONFIG_MACH_AT2440EVB is not set
+# CONFIG_MACH_MINI2440 is not set
+CONFIG_MACH_RX1950=y
+
+#
+# S3C2443 Machines
+#
+# CONFIG_MACH_SMDK2443 is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_ARM920T=y
+CONFIG_CPU_32v4T=y
+CONFIG_CPU_ABRT_EV4T=y
+CONFIG_CPU_PABRT_LEGACY=y
+CONFIG_CPU_CACHE_V4WT=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+CONFIG_ARM_L1_CACHE_SHIFT=5
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_HZ=200
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+# CONFIG_HIGHMEM is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=999999
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+# CONFIG_KSM is not set
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+CONFIG_ALIGNMENT_TRAP=y
+# CONFIG_UACCESS_WITH_MEMCPY is not set
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=""
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+
+#
+# CPU Power Management
+#
+# CONFIG_CPU_FREQ is not set
+CONFIG_CPU_IDLE=y
+CONFIG_CPU_IDLE_GOV_LADDER=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_HAVE_AOUT=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND_NVS=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+CONFIG_APM_EMULATION=y
+# CONFIG_PM_RUNTIME is not set
+CONFIG_PM_OPS=y
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_RDS is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_L2TP is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_PHONET is not set
+# CONFIG_IEEE802154 is not set
+# CONFIG_NET_SCHED is not set
+# CONFIG_DCB is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+# CONFIG_IRLAN is not set
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# FIR device drivers
+#
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+CONFIG_WIRELESS=y
+CONFIG_WEXT_CORE=y
+CONFIG_WEXT_PROC=y
+CONFIG_CFG80211=m
+# CONFIG_NL80211_TESTMODE is not set
+# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
+# CONFIG_CFG80211_REG_DEBUG is not set
+CONFIG_CFG80211_DEFAULT_PS=y
+# CONFIG_CFG80211_DEBUGFS is not set
+# CONFIG_CFG80211_INTERNAL_REGDB is not set
+CONFIG_CFG80211_WEXT=y
+CONFIG_WIRELESS_EXT_SYSFS=y
+# CONFIG_LIB80211 is not set
+CONFIG_MAC80211=m
+CONFIG_MAC80211_HAS_RC=y
+CONFIG_MAC80211_RC_MINSTREL=y
+# CONFIG_MAC80211_RC_DEFAULT_PID is not set
+CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
+CONFIG_MAC80211_RC_DEFAULT="minstrel"
+# CONFIG_MAC80211_MESH is not set
+# CONFIG_MAC80211_LEDS is not set
+# CONFIG_MAC80211_DEBUGFS is not set
+# CONFIG_MAC80211_DEBUG_MENU is not set
+# CONFIG_WIMAX is not set
+CONFIG_RFKILL=y
+CONFIG_RFKILL_LEDS=y
+CONFIG_RFKILL_INPUT=y
+# CONFIG_NET_9P is not set
+# CONFIG_CAIF is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+# CONFIG_DEVTMPFS is not set
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_FIRMWARE_IN_KERNEL is not set
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_TESTS is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_SM_FTL is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+CONFIG_MTD_JEDECPROBE=y
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_CFI_AMDSTD=y
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_IMPA7 is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND_ECC=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_SM_COMMON is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+CONFIG_MTD_NAND_DENALI_SCRATCH_REG_ADDR=0xFF108018
+# CONFIG_MTD_NAND_GPIO is not set
+CONFIG_MTD_NAND_IDS=y
+CONFIG_MTD_NAND_S3C2410=y
+# CONFIG_MTD_NAND_S3C2410_DEBUG is not set
+CONFIG_MTD_NAND_S3C2410_HWECC=y
+# CONFIG_MTD_NAND_S3C2410_CLKSTOP is not set
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# LPDDR flash memory drivers
+#
+# CONFIG_MTD_LPDDR is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+
+#
+# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
+#
+# CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=1
+CONFIG_BLK_DEV_RAM_SIZE=8192
+# CONFIG_BLK_DEV_XIP is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_MG_DISK is not set
+# CONFIG_MISC_DEVICES is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+CONFIG_SCSI_MOD=y
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_DMA is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+# CONFIG_NET_ETHERNET is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+CONFIG_WLAN=y
+# CONFIG_LIBERTAS_THINFIRM is not set
+# CONFIG_MAC80211_HWSIM is not set
+# CONFIG_ATH_COMMON is not set
+# CONFIG_B43 is not set
+# CONFIG_B43LEGACY is not set
+# CONFIG_HOSTAP is not set
+# CONFIG_IWM is not set
+# CONFIG_LIBERTAS is not set
+# CONFIG_P54_COMMON is not set
+# CONFIG_RT2X00 is not set
+# CONFIG_WL12XX is not set
+
+#
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+#
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+# CONFIG_INPUT_SPARSEKMAP is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ADP5588 is not set
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_QT2160 is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+CONFIG_KEYBOARD_GPIO=y
+# CONFIG_KEYBOARD_TCA6416 is not set
+# CONFIG_KEYBOARD_MATRIX is not set
+# CONFIG_KEYBOARD_LM8323 is not set
+# CONFIG_KEYBOARD_MAX7359 is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_OPENCORES is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
+# CONFIG_TOUCHSCREEN_AD7879 is not set
+# CONFIG_TOUCHSCREEN_DYNAPRO is not set
+# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
+# CONFIG_TOUCHSCREEN_EETI is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+CONFIG_TOUCHSCREEN_S3C2410=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
+# CONFIG_TOUCHSCREEN_MCS5000 is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_INEXIO is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
+# CONFIG_TOUCHSCREEN_TSC2007 is not set
+# CONFIG_TOUCHSCREEN_W90X900 is not set
+# CONFIG_TOUCHSCREEN_TPS6507X is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_SERIO_ALTERA_PS2 is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+# CONFIG_N_GSM is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_SAMSUNG=y
+CONFIG_SERIAL_SAMSUNG_UARTS=3
+CONFIG_SERIAL_SAMSUNG_CONSOLE=y
+CONFIG_SERIAL_S3C2440=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_TIMBERDALE is not set
+# CONFIG_SERIAL_ALTERA_JTAGUART is not set
+# CONFIG_SERIAL_ALTERA_UART is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+# CONFIG_RAMOOPS is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+# CONFIG_I2C_COMPAT is not set
+CONFIG_I2C_CHARDEV=m
+CONFIG_I2C_HELPER_AUTO=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_DESIGNWARE is not set
+# CONFIG_I2C_GPIO is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PCA_PLATFORM is not set
+CONFIG_I2C_S3C2410=m
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_XILINX is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_SPI is not set
+
+#
+# PPS support
+#
+# CONFIG_PPS is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+CONFIG_GPIO_SYSFS=y
+
+#
+# Memory mapped GPIO expanders:
+#
+# CONFIG_GPIO_IT8761E is not set
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX7300 is not set
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+# CONFIG_GPIO_ADP5588 is not set
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+
+#
+# AC97 GPIO expanders:
+#
+
+#
+# MODULbus GPIO expanders:
+#
+# CONFIG_W1 is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+# CONFIG_TEST_POWER is not set
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_BATTERY_DS2782 is not set
+# CONFIG_BATTERY_BQ27x00 is not set
+# CONFIG_BATTERY_MAX17040 is not set
+CONFIG_BATTERY_S3C_ADC=y
+# CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_S3C2410_WATCHDOG=y
+# CONFIG_MAX63XX_WATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+# CONFIG_SSB is not set
+# CONFIG_MFD_SUPPORT is not set
+CONFIG_REGULATOR=y
+# CONFIG_REGULATOR_DEBUG is not set
+# CONFIG_REGULATOR_DUMMY is not set
+# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
+# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
+# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
+# CONFIG_REGULATOR_BQ24022 is not set
+# CONFIG_REGULATOR_MAX1586 is not set
+# CONFIG_REGULATOR_MAX8649 is not set
+# CONFIG_REGULATOR_MAX8660 is not set
+# CONFIG_REGULATOR_LP3971 is not set
+# CONFIG_REGULATOR_TPS65023 is not set
+# CONFIG_REGULATOR_TPS6507X is not set
+# CONFIG_MEDIA_SUPPORT is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_S3C2410=y
+CONFIG_FB_S3C2410_DEBUG=y
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+# CONFIG_FB_BROADSHEET is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_PLATFORM=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_GENERIC=y
+CONFIG_BACKLIGHT_PWM=y
+# CONFIG_BACKLIGHT_ADP8860 is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+# CONFIG_LOGO is not set
+CONFIG_SOUND=m
+CONFIG_SOUND_OSS_CORE=y
+# CONFIG_SOUND_OSS_CORE_PRECLAIM is not set
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_JACK=y
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+# CONFIG_SND_SUPPORT_OLD_API is not set
+# CONFIG_SND_VERBOSE_PROCFS is not set
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+# CONFIG_SND_RAWMIDI_SEQ is not set
+# CONFIG_SND_OPL3_LIB_SEQ is not set
+# CONFIG_SND_OPL4_LIB_SEQ is not set
+# CONFIG_SND_SBAWE_SEQ is not set
+# CONFIG_SND_EMU10K1_SEQ is not set
+# CONFIG_SND_DRIVERS is not set
+# CONFIG_SND_ARM is not set
+CONFIG_SND_SOC=m
+CONFIG_SND_S3C24XX_SOC=m
+# CONFIG_SND_S3C24XX_SOC_LN2440SBC_ALC650 is not set
+# CONFIG_SND_S3C24XX_SOC_S3C24XX_UDA134X is not set
+# CONFIG_SND_S3C24XX_SOC_SIMTEC_TLV320AIC23 is not set
+# CONFIG_SND_S3C24XX_SOC_SIMTEC_HERMES is not set
+CONFIG_SND_SOC_I2C_AND_SPI=m
+# CONFIG_SND_SOC_ALL_CODECS is not set
+# CONFIG_SOUND_PRIME is not set
+# CONFIG_HID_SUPPORT is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+# CONFIG_USB_MUSB_HDRC is not set
+# CONFIG_USB_GADGET_MUSB_HDRC is not set
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_DEBUG_FS is not set
+CONFIG_USB_GADGET_VBUS_DRAW=100
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_PXA25X is not set
+# CONFIG_USB_GADGET_R8A66597 is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_S3C_HSOTG is not set
+# CONFIG_USB_GADGET_IMX is not set
+CONFIG_USB_GADGET_S3C2410=y
+CONFIG_USB_S3C2410=y
+# CONFIG_USB_S3C2410_DEBUG is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_FSL_QE is not set
+# CONFIG_USB_GADGET_CI13XXX is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LANGWELL is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+# CONFIG_USB_AUDIO is not set
+CONFIG_USB_ETH=y
+# CONFIG_USB_ETH_RNDIS is not set
+# CONFIG_USB_ETH_EEM is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FUNCTIONFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_MASS_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_PRINTER is not set
+# CONFIG_USB_CDC_COMPOSITE is not set
+# CONFIG_USB_G_NOKIA is not set
+# CONFIG_USB_G_MULTI is not set
+# CONFIG_USB_G_HID is not set
+# CONFIG_USB_G_WEBCAM is not set
+
+#
+# OTG and related infrastructure
+#
+# CONFIG_USB_GPIO_VBUS is not set
+# CONFIG_USB_ULPI is not set
+# CONFIG_NOP_USB_XCEIV is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+
+#
+# MMC/SD/SDIO Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+# CONFIG_MMC_SDHCI is not set
+CONFIG_MMC_S3C=y
+CONFIG_MMC_S3C_HW_SDIO_IRQ=y
+# CONFIG_MMC_S3C_PIO is not set
+CONFIG_MMC_S3C_DMA=y
+# CONFIG_MMC_S3C_PIODMA is not set
+# CONFIG_MEMSTICK is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_S3C24XX is not set
+# CONFIG_LEDS_PCA9532 is not set
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_GPIO_PLATFORM=y
+# CONFIG_LEDS_LP3944 is not set
+# CONFIG_LEDS_PCA955X is not set
+# CONFIG_LEDS_PWM is not set
+# CONFIG_LEDS_REGULATOR is not set
+# CONFIG_LEDS_BD2802 is not set
+# CONFIG_LEDS_LT3593 is not set
+CONFIG_LEDS_TRIGGERS=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_GPIO is not set
+# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
+
+#
+# iptables trigger is under Netfilter config (LED target)
+#
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+# CONFIG_RTC_INTF_PROC is not set
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+# CONFIG_RTC_DRV_BQ32K is not set
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+# CONFIG_RTC_DRV_RX8581 is not set
+# CONFIG_RTC_DRV_RX8025 is not set
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_MSM6242 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_RP5C01 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_S3C=y
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
+# CONFIG_UIO is not set
+CONFIG_STAGING=y
+# CONFIG_STAGING_EXCLUDE_BUILD is not set
+# CONFIG_ECHO is not set
+# CONFIG_COMEDI is not set
+# CONFIG_POHMELFS is not set
+
+#
+# RAR Register Driver
+#
+# CONFIG_IIO is not set
+# CONFIG_RAMZSWAP is not set
+# CONFIG_BATMAN_ADV is not set
+# CONFIG_FB_SM7XX is not set
+
+#
+# Texas Instruments shared transport line discipline
+#
+# CONFIG_TI_ST is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=m
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_BTRFS_FS is not set
+# CONFIG_NILFS2_FS is not set
+CONFIG_FILE_LOCKING=y
+CONFIG_FSNOTIFY=y
+CONFIG_DNOTIFY=y
+# CONFIG_INOTIFY is not set
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+CONFIG_FUSE_FS=m
+# CONFIG_CUSE is not set
+
+#
+# Caches
+#
+# CONFIG_FSCACHE is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=866
+CONFIG_FAT_DEFAULT_IOCHARSET="utf8"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+CONFIG_MISC_FILESYSTEMS=y
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_ECRYPT_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_LOGFS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_SQUASHFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_V4_1 is not set
+CONFIG_ROOT_NFS=y
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CEPH_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+CONFIG_BSD_DISKLABEL=y
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+# CONFIG_NLS_CODEPAGE_437 is not set
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+CONFIG_NLS_CODEPAGE_866=y
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1251=y
+# CONFIG_NLS_ASCII is not set
+# CONFIG_NLS_ISO8859_1 is not set
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_STRIP_ASM_SYMS is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_DEBUG_MEMORY_INIT=y
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_LKDTM is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_TRACING_SUPPORT=y
+# CONFIG_FTRACE is not set
+# CONFIG_DYNAMIC_DEBUG is not set
+# CONFIG_ATOMIC64_SELFTEST is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+CONFIG_ARM_UNWIND=y
+CONFIG_DEBUG_USER=y
+# CONFIG_OC_ETM is not set
+CONFIG_DEBUG_S3C_UART=0
+
+#
+# Security options
+#
+CONFIG_KEYS=y
+# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_DEFAULT_SECURITY_SELINUX is not set
+# CONFIG_DEFAULT_SECURITY_SMACK is not set
+# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
+CONFIG_DEFAULT_SECURITY_DAC=y
+CONFIG_DEFAULT_SECURITY=""
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_FIPS=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD2=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_BLKCIPHER2=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG=y
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_PCOMP=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_NULL is not set
+CONFIG_CRYPTO_WORKQUEUE=y
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+CONFIG_CRYPTO_ECB=y
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_VMAC is not set
+
+#
+# Digest
+#
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_GHASH is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_MICHAEL_MIC=y
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+CONFIG_CRYPTO_AES=y
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_ARC4=y
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_ZLIB is not set
+# CONFIG_CRYPTO_LZO is not set
+
+#
+# Random Number Generation
+#
+CONFIG_CRYPTO_ANSI_CPRNG=y
+CONFIG_CRYPTO_HW=y
+# CONFIG_BINARY_PRINTF is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_T10DIF is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_DECOMPRESS_GZIP=y
+CONFIG_DECOMPRESS_BZIP2=y
+CONFIG_DECOMPRESS_LZMA=y
+CONFIG_DECOMPRESS_LZO=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_DMA=y
+CONFIG_NLATTR=y
+CONFIG_GENERIC_ATOMIC64=y
diff --git a/recipes/linux/linux_2.6.35.bb b/recipes/linux/linux_2.6.35.bb
index 5089521d6d..8765846a06 100644
--- a/recipes/linux/linux_2.6.35.bb
+++ b/recipes/linux/linux_2.6.35.bb
@@ -13,6 +13,13 @@ SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/${P}.tar.bz2;name=kernel \
file://defconfig "
SRC_URI_append_dockstar = "file://dockstar.patch"
+SRC_URI_append_rx1950 = "file://0001-s3c2410_ts-add-fake-pressure-events.patch \
+ file://0002-s3c2410_udc-2440-dual-packet-workaround.patch \
+ file://0003-rx1950-add-battery-device.patch \
+ file://0004-rx1950-add-LEDs-support.patch \
+ file://0005-s3c24xx-DMA-don-t-use-autoreload-feature.patch \
+ file://0006-s3cmci-minor-fixups.patch \
+ file://0007-Add-s3c-adc-battery-driver.patch"
SRC_URI[kernel.md5sum] = "091abeb4684ce03d1d936851618687b6"
SRC_URI[kernel.sha256sum] = "18b2e2c336032e366c942622b77302cb05fc034fb19018f086a4ebc9ed41bfcf"