aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrea Adami <andrea.adami@gmail.com>2015-04-23 00:26:47 +0200
committerAndrea Adami <andrea.adami@gmail.com>2015-04-23 00:32:52 +0200
commit2fe256495cbc7cc477d67fe5de5693884e8591b6 (patch)
tree172add987e2a45f9190701c494b6e64b5c722725
parentdd8a5c0df939e8142c10d1aa719f6f1ccd331abe (diff)
downloadmeta-handheld-2fe256495cbc7cc477d67fe5de5693884e8591b6.tar.gz
meta-handheld-2fe256495cbc7cc477d67fe5de5693884e8591b6.tar.bz2
meta-handheld-2fe256495cbc7cc477d67fe5de5693884e8591b6.zip
linux-handheld_4.0: add ipaq h1940 patches and defconfig
Patches provided and tested by Vasily Khoruzhick <anarsoul@gmail.com> Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com> Signed-off-by: Andrea Adami <andrea.adami@gmail.com>
-rw-r--r--recipes-kernel/linux/linux-handheld-4.0/h1940/0001-rfkill-add-IR-type.patch59
-rw-r--r--recipes-kernel/linux/linux-handheld-4.0/h1940/0002-ARM-s3c24xx-add-dma_coherent_mask-for-DMA-devices.patch35
-rw-r--r--recipes-kernel/linux/linux-handheld-4.0/h1940/0003-ARM-s3c24xx-Add-DMA-resources-for-SDI-and-I2S.patch34
-rw-r--r--recipes-kernel/linux/linux-handheld-4.0/h1940/0004-ARM-s3c24xx-drop-RFKILL-driver-for-H1940-bluetooth.patch202
-rw-r--r--recipes-kernel/linux/linux-handheld-4.0/h1940/0005-ARM-s3c24xx-h1940-Add-nand-device.patch121
-rw-r--r--recipes-kernel/linux/linux-handheld-4.0/h1940/0006-ARM-s3c24xx-h1940-don-t-touch-UPLLCON.patch41
-rw-r--r--recipes-kernel/linux/linux-handheld-4.0/h1940/0007-ARM-s3c24xx-h1940-unlock-reset-button.patch52
-rw-r--r--recipes-kernel/linux/linux-handheld-4.0/h1940/0008-ARM-s3c24xx-h1940-increase-oversampling-shift.patch29
-rw-r--r--recipes-kernel/linux/linux-handheld-4.0/h1940/0009-ARM-s3c24xx-h1940-Add-DMA-device.patch27
-rw-r--r--recipes-kernel/linux/linux-handheld-4.0/h1940/0010-ARM-s3c24xx-h1940-add-bluetooth-RF-kill-switch.patch107
-rw-r--r--recipes-kernel/linux/linux-handheld-4.0/h1940/0011-ARM-s3c24xx-h1940-add-IR-switch.patch76
-rw-r--r--recipes-kernel/linux/linux-handheld-4.0/h1940/0012-ARM-s3c24xx-ADC-port-to-common-clock-framework.patch37
-rw-r--r--recipes-kernel/linux/linux-handheld-4.0/h1940/0013-ARM-s3c24xx-H1940-Move-gpiochip_add-call-into-core_i.patch38
-rw-r--r--recipes-kernel/linux/linux-handheld-4.0/h1940/0014-i2c-s3c2410-fix-oops-in-suspend-callback-for-non-dt-.patch28
-rw-r--r--recipes-kernel/linux/linux-handheld-4.0/h1940/0015-ASoC-uda1380-Avoid-accessing-i2c-bus-when-codec-is-d.patch31
-rw-r--r--recipes-kernel/linux/linux-handheld-4.0/h1940/defconfig200
-rw-r--r--recipes-kernel/linux/linux-handheld_4.0.bb21
17 files changed, 1137 insertions, 1 deletions
diff --git a/recipes-kernel/linux/linux-handheld-4.0/h1940/0001-rfkill-add-IR-type.patch b/recipes-kernel/linux/linux-handheld-4.0/h1940/0001-rfkill-add-IR-type.patch
new file mode 100644
index 0000000..bc2b855
--- /dev/null
+++ b/recipes-kernel/linux/linux-handheld-4.0/h1940/0001-rfkill-add-IR-type.patch
@@ -0,0 +1,59 @@
+From 332ef0e6aaf772b94cceb46b26fec393e829efa0 Mon Sep 17 00:00:00 2001
+From: Vasily Khoruzhick <anarsoul@gmail.com>
+Date: Thu, 17 Oct 2013 12:19:47 +0300
+Subject: [PATCH 01/15] rfkill: add IR type
+
+Infrared receivers/transmitters can also be disabled,
+so add IR type to rfkill subsystem
+
+Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
+---
+ include/uapi/linux/rfkill.h | 2 ++
+ net/rfkill/core.c | 4 +++-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/include/uapi/linux/rfkill.h b/include/uapi/linux/rfkill.h
+index 058757f..d4ae526 100644
+--- a/include/uapi/linux/rfkill.h
++++ b/include/uapi/linux/rfkill.h
+@@ -38,6 +38,7 @@
+ * @RFKILL_TYPE_GPS: switch is on a GPS device.
+ * @RFKILL_TYPE_FM: switch is on a FM radio device.
+ * @RFKILL_TYPE_NFC: switch is on an NFC device.
++ * @RFKILL_TYPE_IR: switch is on an IR device.
+ * @NUM_RFKILL_TYPES: number of defined rfkill types
+ */
+ enum rfkill_type {
+@@ -50,6 +51,7 @@ enum rfkill_type {
+ RFKILL_TYPE_GPS,
+ RFKILL_TYPE_FM,
+ RFKILL_TYPE_NFC,
++ RFKILL_TYPE_IR,
+ NUM_RFKILL_TYPES,
+ };
+
+diff --git a/net/rfkill/core.c b/net/rfkill/core.c
+index fa7cd79..62f90fa 100644
+--- a/net/rfkill/core.c
++++ b/net/rfkill/core.c
+@@ -585,7 +585,7 @@ static DEVICE_ATTR_RO(name);
+
+ static const char *rfkill_get_type_str(enum rfkill_type type)
+ {
+- BUILD_BUG_ON(NUM_RFKILL_TYPES != RFKILL_TYPE_NFC + 1);
++ BUILD_BUG_ON(NUM_RFKILL_TYPES != RFKILL_TYPE_IR + 1);
+
+ switch (type) {
+ case RFKILL_TYPE_WLAN:
+@@ -604,6 +604,8 @@ static const char *rfkill_get_type_str(enum rfkill_type type)
+ return "fm";
+ case RFKILL_TYPE_NFC:
+ return "nfc";
++ case RFKILL_TYPE_IR:
++ return "ir";
+ default:
+ BUG();
+ }
+--
+2.3.5
+
diff --git a/recipes-kernel/linux/linux-handheld-4.0/h1940/0002-ARM-s3c24xx-add-dma_coherent_mask-for-DMA-devices.patch b/recipes-kernel/linux/linux-handheld-4.0/h1940/0002-ARM-s3c24xx-add-dma_coherent_mask-for-DMA-devices.patch
new file mode 100644
index 0000000..93dbb1c
--- /dev/null
+++ b/recipes-kernel/linux/linux-handheld-4.0/h1940/0002-ARM-s3c24xx-add-dma_coherent_mask-for-DMA-devices.patch
@@ -0,0 +1,35 @@
+From 22ea8a2a006bc62235d25dacfc5e51dfa4db9e53 Mon Sep 17 00:00:00 2001
+From: Vasily Khoruzhick <anarsoul@gmail.com>
+Date: Sun, 18 May 2014 12:44:52 +0300
+Subject: [PATCH 02/15] ARM: s3c24xx: add dma_coherent_mask for DMA devices
+
+Otherwise dma_alloc_coherent() fails.
+
+Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
+---
+ arch/arm/mach-s3c24xx/common.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/arch/arm/mach-s3c24xx/common.c b/arch/arm/mach-s3c24xx/common.c
+index bf50328..7ed0853 100644
+--- a/arch/arm/mach-s3c24xx/common.c
++++ b/arch/arm/mach-s3c24xx/common.c
+@@ -355,6 +355,7 @@ struct platform_device s3c2410_device_dma = {
+ .resource = s3c2410_dma_resource,
+ .dev = {
+ .platform_data = &s3c2410_dma_platdata,
++ .coherent_dma_mask = ~0,
+ },
+ };
+ #endif
+@@ -452,6 +453,7 @@ struct platform_device s3c2440_device_dma = {
+ .resource = s3c2410_dma_resource,
+ .dev = {
+ .platform_data = &s3c2440_dma_platdata,
++ .coherent_dma_mask = ~0,
+ },
+ };
+ #endif
+--
+2.3.5
+
diff --git a/recipes-kernel/linux/linux-handheld-4.0/h1940/0003-ARM-s3c24xx-Add-DMA-resources-for-SDI-and-I2S.patch b/recipes-kernel/linux/linux-handheld-4.0/h1940/0003-ARM-s3c24xx-Add-DMA-resources-for-SDI-and-I2S.patch
new file mode 100644
index 0000000..829181e
--- /dev/null
+++ b/recipes-kernel/linux/linux-handheld-4.0/h1940/0003-ARM-s3c24xx-Add-DMA-resources-for-SDI-and-I2S.patch
@@ -0,0 +1,34 @@
+From 95a5c5066e062d919aa7f07bf3727b5825d2fe71 Mon Sep 17 00:00:00 2001
+From: Vasily Khoruzhick <anarsoul@gmail.com>
+Date: Sun, 18 May 2014 12:45:39 +0300
+Subject: [PATCH 03/15] ARM: s3c24xx: Add DMA resources for SDI and I2S
+
+Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
+---
+ arch/arm/plat-samsung/devs.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/arch/arm/plat-samsung/devs.c b/arch/arm/plat-samsung/devs.c
+index 83c7d15..62edcab 100644
+--- a/arch/arm/plat-samsung/devs.c
++++ b/arch/arm/plat-samsung/devs.c
+@@ -564,6 +564,8 @@ void __init s3c_i2c7_set_platdata(struct s3c2410_platform_i2c *pd)
+ #ifdef CONFIG_PLAT_S3C24XX
+ static struct resource s3c_iis_resource[] = {
+ [0] = DEFINE_RES_MEM(S3C24XX_PA_IIS, S3C24XX_SZ_IIS),
++ [1] = DEFINE_RES_DMA(DMACH_I2S_OUT),
++ [2] = DEFINE_RES_DMA(DMACH_I2S_IN),
+ };
+
+ struct platform_device s3c_device_iis = {
+@@ -863,6 +865,7 @@ struct platform_device s3c_device_rtc = {
+ static struct resource s3c_sdi_resource[] = {
+ [0] = DEFINE_RES_MEM(S3C24XX_PA_SDI, S3C24XX_SZ_SDI),
+ [1] = DEFINE_RES_IRQ(IRQ_SDI),
++ [2] = DEFINE_RES_DMA(DMACH_SDI),
+ };
+
+ struct platform_device s3c_device_sdi = {
+--
+2.3.5
+
diff --git a/recipes-kernel/linux/linux-handheld-4.0/h1940/0004-ARM-s3c24xx-drop-RFKILL-driver-for-H1940-bluetooth.patch b/recipes-kernel/linux/linux-handheld-4.0/h1940/0004-ARM-s3c24xx-drop-RFKILL-driver-for-H1940-bluetooth.patch
new file mode 100644
index 0000000..30bc380
--- /dev/null
+++ b/recipes-kernel/linux/linux-handheld-4.0/h1940/0004-ARM-s3c24xx-drop-RFKILL-driver-for-H1940-bluetooth.patch
@@ -0,0 +1,202 @@
+From 8c0f1380edceb7de9b006ad96780394ed6bca884 Mon Sep 17 00:00:00 2001
+From: Vasily Khoruzhick <anarsoul@gmail.com>
+Date: Thu, 17 Oct 2013 12:09:19 +0300
+Subject: [PATCH 04/15] ARM: s3c24xx: drop RFKILL driver for H1940 bluetooth
+
+rfkill-gpio can do it's job easily.
+
+Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
+---
+ arch/arm/mach-s3c24xx/Kconfig | 8 --
+ arch/arm/mach-s3c24xx/Makefile | 1 -
+ arch/arm/mach-s3c24xx/h1940-bluetooth.c | 147 --------------------------------
+ 3 files changed, 156 deletions(-)
+ delete mode 100644 arch/arm/mach-s3c24xx/h1940-bluetooth.c
+
+diff --git a/arch/arm/mach-s3c24xx/Kconfig b/arch/arm/mach-s3c24xx/Kconfig
+index 79c49ff..cc0474f 100644
+--- a/arch/arm/mach-s3c24xx/Kconfig
++++ b/arch/arm/mach-s3c24xx/Kconfig
+@@ -220,14 +220,6 @@ config ARCH_H1940
+ help
+ Say Y here if you are using the HP IPAQ H1940
+
+-config H1940BT
+- tristate "Control the state of H1940 bluetooth chip"
+- depends on ARCH_H1940
+- select RFKILL
+- help
+- This is a simple driver that is able to control
+- the state of built in bluetooth chip on h1940.
+-
+ config PM_H1940
+ bool
+ help
+diff --git a/arch/arm/mach-s3c24xx/Makefile b/arch/arm/mach-s3c24xx/Makefile
+index b40a22f..8f6e809 100644
+--- a/arch/arm/mach-s3c24xx/Makefile
++++ b/arch/arm/mach-s3c24xx/Makefile
+@@ -50,7 +50,6 @@ obj-$(CONFIG_MACH_AML_M5900) += mach-amlm5900.o
+ obj-$(CONFIG_ARCH_BAST) += mach-bast.o
+ obj-$(CONFIG_BAST_PC104_IRQ) += bast-irq.o
+ obj-$(CONFIG_ARCH_H1940) += mach-h1940.o
+-obj-$(CONFIG_H1940BT) += h1940-bluetooth.o
+ obj-$(CONFIG_PM_H1940) += pm-h1940.o
+ obj-$(CONFIG_MACH_N30) += mach-n30.o
+ obj-$(CONFIG_MACH_OTOM) += mach-otom.o
+diff --git a/arch/arm/mach-s3c24xx/h1940-bluetooth.c b/arch/arm/mach-s3c24xx/h1940-bluetooth.c
+deleted file mode 100644
+index 9c8b127..0000000
+--- a/arch/arm/mach-s3c24xx/h1940-bluetooth.c
++++ /dev/null
+@@ -1,147 +0,0 @@
+-/*
+- * arch/arm/mach-s3c2410/h1940-bluetooth.c
+- * Copyright (c) Arnaud Patard <arnaud.patard@rtp-net.org>
+- *
+- * 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.
+- *
+- * S3C2410 bluetooth "driver"
+- *
+- */
+-
+-#include <linux/module.h>
+-#include <linux/platform_device.h>
+-#include <linux/delay.h>
+-#include <linux/string.h>
+-#include <linux/ctype.h>
+-#include <linux/leds.h>
+-#include <linux/gpio.h>
+-#include <linux/rfkill.h>
+-
+-#include <plat/gpio-cfg.h>
+-#include <mach/hardware.h>
+-#include <mach/regs-gpio.h>
+-#include <mach/gpio-samsung.h>
+-
+-#include "h1940.h"
+-
+-#define DRV_NAME "h1940-bt"
+-
+-/* Bluetooth control */
+-static void h1940bt_enable(int on)
+-{
+- if (on) {
+- /* Power on the chip */
+- gpio_set_value(H1940_LATCH_BLUETOOTH_POWER, 1);
+- /* Reset the chip */
+- mdelay(10);
+-
+- gpio_set_value(S3C2410_GPH(1), 1);
+- mdelay(10);
+- gpio_set_value(S3C2410_GPH(1), 0);
+-
+- h1940_led_blink_set(NULL, GPIO_LED_BLINK, NULL, NULL);
+- }
+- else {
+- gpio_set_value(S3C2410_GPH(1), 1);
+- mdelay(10);
+- gpio_set_value(S3C2410_GPH(1), 0);
+- mdelay(10);
+- gpio_set_value(H1940_LATCH_BLUETOOTH_POWER, 0);
+-
+- h1940_led_blink_set(NULL, GPIO_LED_NO_BLINK_LOW, NULL, NULL);
+- }
+-}
+-
+-static int h1940bt_set_block(void *data, bool blocked)
+-{
+- h1940bt_enable(!blocked);
+- return 0;
+-}
+-
+-static const struct rfkill_ops h1940bt_rfkill_ops = {
+- .set_block = h1940bt_set_block,
+-};
+-
+-static int h1940bt_probe(struct platform_device *pdev)
+-{
+- struct rfkill *rfk;
+- int ret = 0;
+-
+- ret = gpio_request(S3C2410_GPH(1), dev_name(&pdev->dev));
+- if (ret) {
+- dev_err(&pdev->dev, "could not get GPH1\n");
+- return ret;
+- }
+-
+- ret = gpio_request(H1940_LATCH_BLUETOOTH_POWER, dev_name(&pdev->dev));
+- if (ret) {
+- gpio_free(S3C2410_GPH(1));
+- dev_err(&pdev->dev, "could not get BT_POWER\n");
+- return ret;
+- }
+-
+- /* Configures BT serial port GPIOs */
+- s3c_gpio_cfgpin(S3C2410_GPH(0), S3C2410_GPH0_nCTS0);
+- s3c_gpio_setpull(S3C2410_GPH(0), S3C_GPIO_PULL_NONE);
+- s3c_gpio_cfgpin(S3C2410_GPH(1), S3C2410_GPIO_OUTPUT);
+- s3c_gpio_setpull(S3C2410_GPH(1), S3C_GPIO_PULL_NONE);
+- s3c_gpio_cfgpin(S3C2410_GPH(2), S3C2410_GPH2_TXD0);
+- s3c_gpio_setpull(S3C2410_GPH(2), S3C_GPIO_PULL_NONE);
+- s3c_gpio_cfgpin(S3C2410_GPH(3), S3C2410_GPH3_RXD0);
+- s3c_gpio_setpull(S3C2410_GPH(3), S3C_GPIO_PULL_NONE);
+-
+- rfk = rfkill_alloc(DRV_NAME, &pdev->dev, RFKILL_TYPE_BLUETOOTH,
+- &h1940bt_rfkill_ops, NULL);
+- if (!rfk) {
+- ret = -ENOMEM;
+- goto err_rfk_alloc;
+- }
+-
+- ret = rfkill_register(rfk);
+- if (ret)
+- goto err_rfkill;
+-
+- platform_set_drvdata(pdev, rfk);
+-
+- return 0;
+-
+-err_rfkill:
+- rfkill_destroy(rfk);
+-err_rfk_alloc:
+- return ret;
+-}
+-
+-static int h1940bt_remove(struct platform_device *pdev)
+-{
+- struct rfkill *rfk = platform_get_drvdata(pdev);
+-
+- platform_set_drvdata(pdev, NULL);
+- gpio_free(S3C2410_GPH(1));
+-
+- if (rfk) {
+- rfkill_unregister(rfk);
+- rfkill_destroy(rfk);
+- }
+- rfk = NULL;
+-
+- h1940bt_enable(0);
+-
+- return 0;
+-}
+-
+-
+-static struct platform_driver h1940bt_driver = {
+- .driver = {
+- .name = DRV_NAME,
+- },
+- .probe = h1940bt_probe,
+- .remove = h1940bt_remove,
+-};
+-
+-module_platform_driver(h1940bt_driver);
+-
+-MODULE_AUTHOR("Arnaud Patard <arnaud.patard@rtp-net.org>");
+-MODULE_DESCRIPTION("Driver for the iPAQ H1940 bluetooth chip");
+-MODULE_LICENSE("GPL");
+--
+2.3.5
+
diff --git a/recipes-kernel/linux/linux-handheld-4.0/h1940/0005-ARM-s3c24xx-h1940-Add-nand-device.patch b/recipes-kernel/linux/linux-handheld-4.0/h1940/0005-ARM-s3c24xx-h1940-Add-nand-device.patch
new file mode 100644
index 0000000..5a7f6e3
--- /dev/null
+++ b/recipes-kernel/linux/linux-handheld-4.0/h1940/0005-ARM-s3c24xx-h1940-Add-nand-device.patch
@@ -0,0 +1,121 @@
+From 8ea33d882cda31e97a2dd17e635c45434cc69bdd Mon Sep 17 00:00:00 2001
+From: Vasily Khoruzhick <anarsoul@gmail.com>
+Date: Thu, 17 Oct 2013 12:13:29 +0300
+Subject: [PATCH 05/15] ARM: s3c24xx: h1940: Add nand device
+
+Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
+---
+ arch/arm/mach-s3c24xx/mach-h1940.c | 69 ++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 69 insertions(+)
+
+diff --git a/arch/arm/mach-s3c24xx/mach-h1940.c b/arch/arm/mach-s3c24xx/mach-h1940.c
+index d40d4f5..bdb99e5 100644
+--- a/arch/arm/mach-s3c24xx/mach-h1940.c
++++ b/arch/arm/mach-s3c24xx/mach-h1940.c
+@@ -32,6 +32,9 @@
+ #include <linux/s3c_adc_battery.h>
+ #include <linux/delay.h>
+
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/partitions.h>
++
+ #include <video/platform_lcd.h>
+
+ #include <linux/mmc/host.h>
+@@ -47,6 +50,7 @@
+ #include <linux/platform_data/mmc-s3cmci.h>
+ #include <linux/platform_data/touchscreen-s3c2410.h>
+ #include <linux/platform_data/usb-s3c2410_udc.h>
++#include <linux/platform_data/mtd-nand-s3c2410.h>
+
+ #include <sound/uda1380.h>
+
+@@ -469,6 +473,69 @@ static struct s3c24xx_mci_pdata h1940_mmc_cfg __initdata = {
+ .ocr_avail = MMC_VDD_32_33,
+ };
+
++static struct mtd_partition h1940_nand_part[] = {
++ [0] = {
++ .name = "Boot0",
++ .offset = 0,
++ .size = SZ_16K,
++ .mask_flags = MTD_WRITEABLE,
++ },
++ [1] = {
++ .name = "Boot1",
++ .offset = MTDPART_OFS_APPEND,
++ .size = SZ_1K * 240,
++ .mask_flags = 0,
++ },
++ [2] = {
++ .name = "Env",
++ .offset = MTDPART_OFS_APPEND,
++ .size = SZ_16K,
++ .mask_flags = 0,
++ },
++ [3] = {
++ .name = "Opts",
++ .offset = MTDPART_OFS_APPEND,
++ .size = SZ_32K,
++ .mask_flags = 0,
++ },
++ [4] = {
++ .name = "Kernel",
++ .offset = MTDPART_OFS_APPEND,
++ .size = SZ_1M * 3,
++ .mask_flags = 0,
++ },
++ [5] = {
++ .name = "Filesystem",
++ .offset = MTDPART_OFS_APPEND,
++ .size = MTDPART_SIZ_FULL,
++ .mask_flags = 0,
++ },
++};
++
++static struct nand_ecclayout h1940_ecc_layout = {
++ .eccbytes = 3,
++ .eccpos = {8, 9, 10},
++ .oobfree = {{2, 6}, {11, 5}}
++};
++
++static struct s3c2410_nand_set h1940_nand_sets[] = {
++ [0] = {
++ .name = "Internal",
++ .nr_chips = 1,
++ .nr_partitions = ARRAY_SIZE(h1940_nand_part),
++ .partitions = h1940_nand_part,
++ .ecc_layout = &h1940_ecc_layout,
++ },
++};
++
++static struct s3c2410_platform_nand h1940_nand_info = {
++ .tacls = 14,
++ .twrph0 = 44,
++ .twrph1 = 20,
++ .nr_sets = ARRAY_SIZE(h1940_nand_sets),
++ .sets = h1940_nand_sets,
++};
++
+ static int h1940_backlight_init(struct device *dev)
+ {
+ gpio_request(S3C2410_GPB(0), "Backlight");
+@@ -637,6 +704,7 @@ static struct platform_device *h1940_devices[] __initdata = {
+ &h1940_device_bluetooth,
+ &s3c_device_sdi,
+ &s3c_device_rtc,
++ &s3c_device_nand,
+ &samsung_device_pwm,
+ &h1940_backlight,
+ &h1940_lcd_powerdev,
+@@ -686,6 +754,7 @@ static void __init h1940_init(void)
+ s3c24xx_udc_set_platdata(&h1940_udc_cfg);
+ s3c24xx_ts_set_platdata(&h1940_ts_cfg);
+ s3c_i2c0_set_platdata(NULL);
++ s3c_nand_set_platdata(&h1940_nand_info);
+
+ /* Turn off suspend on both USB ports, and switch the
+ * selectable USB port to USB device mode. */
+--
+2.3.5
+
diff --git a/recipes-kernel/linux/linux-handheld-4.0/h1940/0006-ARM-s3c24xx-h1940-don-t-touch-UPLLCON.patch b/recipes-kernel/linux/linux-handheld-4.0/h1940/0006-ARM-s3c24xx-h1940-don-t-touch-UPLLCON.patch
new file mode 100644
index 0000000..0de15a4
--- /dev/null
+++ b/recipes-kernel/linux/linux-handheld-4.0/h1940/0006-ARM-s3c24xx-h1940-don-t-touch-UPLLCON.patch
@@ -0,0 +1,41 @@
+From 5cba96ec146e83a2e321609e431e047e7b97b6ea Mon Sep 17 00:00:00 2001
+From: Vasily Khoruzhick <anarsoul@gmail.com>
+Date: Thu, 17 Oct 2013 12:15:16 +0300
+Subject: [PATCH 06/15] ARM: s3c24xx: h1940: don't touch UPLLCON
+
+It's a bit late to modify UPLLCON in board init,
+anyway bootloader already puts correct value in it.
+
+Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
+---
+ arch/arm/mach-s3c24xx/mach-h1940.c | 7 -------
+ 1 file changed, 7 deletions(-)
+
+diff --git a/arch/arm/mach-s3c24xx/mach-h1940.c b/arch/arm/mach-s3c24xx/mach-h1940.c
+index bdb99e5..0f2648c 100644
+--- a/arch/arm/mach-s3c24xx/mach-h1940.c
++++ b/arch/arm/mach-s3c24xx/mach-h1940.c
+@@ -747,8 +747,6 @@ static void __init h1940_reserve(void)
+
+ static void __init h1940_init(void)
+ {
+- u32 tmp;
+-
+ s3c24xx_fb_set_platdata(&h1940_fb_info);
+ s3c24xx_mci_set_platdata(&h1940_mmc_cfg);
+ s3c24xx_udc_set_platdata(&h1940_udc_cfg);
+@@ -763,11 +761,6 @@ static void __init h1940_init(void)
+ S3C2410_MISCCR_USBSUSPND0 |
+ S3C2410_MISCCR_USBSUSPND1, 0x0);
+
+- tmp = (0x78 << S3C24XX_PLL_MDIV_SHIFT)
+- | (0x02 << S3C24XX_PLL_PDIV_SHIFT)
+- | (0x03 << S3C24XX_PLL_SDIV_SHIFT);
+- writel(tmp, S3C2410_UPLLCON);
+-
+ gpio_request(S3C2410_GPC(0), "LCD power");
+ gpio_request(S3C2410_GPC(1), "LCD power");
+ gpio_request(S3C2410_GPC(4), "LCD power");
+--
+2.3.5
+
diff --git a/recipes-kernel/linux/linux-handheld-4.0/h1940/0007-ARM-s3c24xx-h1940-unlock-reset-button.patch b/recipes-kernel/linux/linux-handheld-4.0/h1940/0007-ARM-s3c24xx-h1940-unlock-reset-button.patch
new file mode 100644
index 0000000..1ec8f37
--- /dev/null
+++ b/recipes-kernel/linux/linux-handheld-4.0/h1940/0007-ARM-s3c24xx-h1940-unlock-reset-button.patch
@@ -0,0 +1,52 @@
+From b909cde86ea2b4327c5deac71756ee7a6bff89d6 Mon Sep 17 00:00:00 2001
+From: Vasily Khoruzhick <anarsoul@gmail.com>
+Date: Sat, 3 Dec 2011 12:12:21 +0300
+Subject: [PATCH 07/15] ARM: s3c24xx: h1940: unlock reset button
+
+Reset button can be left locked by bootloader and in case of kernel panic
+user won't be able to reset a device by pressing reset button.
+
+Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
+---
+ arch/arm/mach-s3c24xx/mach-h1940.c | 17 +++++++++++++++--
+ 1 file changed, 15 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/mach-s3c24xx/mach-h1940.c b/arch/arm/mach-s3c24xx/mach-h1940.c
+index 0f2648c..55653e8 100644
+--- a/arch/arm/mach-s3c24xx/mach-h1940.c
++++ b/arch/arm/mach-s3c24xx/mach-h1940.c
+@@ -221,9 +221,9 @@ static struct s3c2410fb_mach_info h1940_fb_info __initdata = {
+ .gpcup = 0x0000ffff,
+ .gpcup_mask = 0xffffffff,
+ .gpdcon = 0xaa84aaa0,
+- .gpdcon_mask = 0xffffffff,
++ .gpdcon_mask = 0xfffffff3,
+ .gpdup = 0x0000faff,
+- .gpdup_mask = 0xffffffff,
++ .gpdup_mask = 0xfffffffd,
+ };
+
+ static int power_supply_init(struct device *dev)
+@@ -798,6 +798,19 @@ static void __init h1940_init(void)
+ gpio_direction_output(S3C2410_GPA(7), 0);
+ gpio_direction_output(H1940_LATCH_LED_FLASH, 0);
+
++ gpio_request(S3C2410_GPD(1), "Reset sense");
++ gpio_request(S3C2410_GPA(14), "Reset reset");
++ gpio_request(S3C2410_GPB(6), "Reset lock");
++ gpio_direction_input(S3C2410_GPD(1));
++ gpio_direction_output(S3C2410_GPA(14), 0);
++ if (gpio_get_value(S3C2410_GPD(1)))
++ gpio_set_value(S3C2410_GPA(14), 0);
++
++ gpio_direction_output(S3C2410_GPA(14), 1);
++ mdelay(100);
++ gpio_direction_output(S3C2410_GPB(6), 1);
++ gpio_direction_output(S3C2410_GPB(6), 0);
++
+ i2c_register_board_info(0, h1940_i2c_devices,
+ ARRAY_SIZE(h1940_i2c_devices));
+ }
+--
+2.3.5
+
diff --git a/recipes-kernel/linux/linux-handheld-4.0/h1940/0008-ARM-s3c24xx-h1940-increase-oversampling-shift.patch b/recipes-kernel/linux/linux-handheld-4.0/h1940/0008-ARM-s3c24xx-h1940-increase-oversampling-shift.patch
new file mode 100644
index 0000000..769f0cc
--- /dev/null
+++ b/recipes-kernel/linux/linux-handheld-4.0/h1940/0008-ARM-s3c24xx-h1940-increase-oversampling-shift.patch
@@ -0,0 +1,29 @@
+From db8a6e9ceb1e9d5b72c3c7f08ef5f576e7cb873c Mon Sep 17 00:00:00 2001
+From: Vasily Khoruzhick <anarsoul@gmail.com>
+Date: Sun, 18 Dec 2011 11:47:03 +0300
+Subject: [PATCH 08/15] ARM: s3c24xx: h1940: increase oversampling shift
+
+4 samples seems to be not enough for touchscreen driver
+to work accurately
+
+Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
+---
+ arch/arm/mach-s3c24xx/mach-h1940.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/mach-s3c24xx/mach-h1940.c b/arch/arm/mach-s3c24xx/mach-h1940.c
+index 55653e8..0ecd849 100644
+--- a/arch/arm/mach-s3c24xx/mach-h1940.c
++++ b/arch/arm/mach-s3c24xx/mach-h1940.c
+@@ -183,7 +183,7 @@ static struct s3c2410_udc_mach_info h1940_udc_cfg __initdata = {
+ static struct s3c2410_ts_mach_info h1940_ts_cfg __initdata = {
+ .delay = 10000,
+ .presc = 49,
+- .oversampling_shift = 2,
++ .oversampling_shift = 5,
+ .cfg_gpio = s3c24xx_ts_cfg_gpio,
+ };
+
+--
+2.3.5
+
diff --git a/recipes-kernel/linux/linux-handheld-4.0/h1940/0009-ARM-s3c24xx-h1940-Add-DMA-device.patch b/recipes-kernel/linux/linux-handheld-4.0/h1940/0009-ARM-s3c24xx-h1940-Add-DMA-device.patch
new file mode 100644
index 0000000..924c221
--- /dev/null
+++ b/recipes-kernel/linux/linux-handheld-4.0/h1940/0009-ARM-s3c24xx-h1940-Add-DMA-device.patch
@@ -0,0 +1,27 @@
+From 5bc33329474a43df520f405f1b4974400635a1e8 Mon Sep 17 00:00:00 2001
+From: Vasily Khoruzhick <anarsoul@gmail.com>
+Date: Sun, 18 May 2014 12:46:09 +0300
+Subject: [PATCH 09/15] ARM: s3c24xx: h1940: Add DMA device
+
+To use new s3c24xx-dma driver we need to add appropriate platform device.
+
+Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
+---
+ arch/arm/mach-s3c24xx/mach-h1940.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/arm/mach-s3c24xx/mach-h1940.c b/arch/arm/mach-s3c24xx/mach-h1940.c
+index 0ecd849..d87824e 100644
+--- a/arch/arm/mach-s3c24xx/mach-h1940.c
++++ b/arch/arm/mach-s3c24xx/mach-h1940.c
+@@ -694,6 +694,7 @@ static struct platform_device h1940_dev_buttons = {
+
+ static struct platform_device *h1940_devices[] __initdata = {
+ &h1940_dev_buttons,
++ &s3c2410_device_dma,
+ &s3c_device_ohci,
+ &s3c_device_lcd,
+ &s3c_device_wdt,
+--
+2.3.5
+
diff --git a/recipes-kernel/linux/linux-handheld-4.0/h1940/0010-ARM-s3c24xx-h1940-add-bluetooth-RF-kill-switch.patch b/recipes-kernel/linux/linux-handheld-4.0/h1940/0010-ARM-s3c24xx-h1940-add-bluetooth-RF-kill-switch.patch
new file mode 100644
index 0000000..cba086d
--- /dev/null
+++ b/recipes-kernel/linux/linux-handheld-4.0/h1940/0010-ARM-s3c24xx-h1940-add-bluetooth-RF-kill-switch.patch
@@ -0,0 +1,107 @@
+From 910bb9afd79a00d707c9eb603fabf092dd6368d6 Mon Sep 17 00:00:00 2001
+From: Vasily Khoruzhick <anarsoul@gmail.com>
+Date: Sat, 17 Dec 2011 13:14:51 +0300
+Subject: [PATCH 10/15] ARM: s3c24xx: h1940: add bluetooth RF kill switch
+
+Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
+---
+ arch/arm/mach-s3c24xx/h1940.h | 4 +++-
+ arch/arm/mach-s3c24xx/mach-h1940.c | 39 ++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 42 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/mach-s3c24xx/h1940.h b/arch/arm/mach-s3c24xx/h1940.h
+index 596d9f6..899176c 100644
+--- a/arch/arm/mach-s3c24xx/h1940.h
++++ b/arch/arm/mach-s3c24xx/h1940.h
+@@ -48,7 +48,9 @@ extern int h1940_led_blink_set(struct gpio_desc *desc, int state,
+ #define H1940_LATCH_SM803_ENABLE H1940_LATCH_GPIO(10)
+ #define H1940_LATCH_LCD_P4 H1940_LATCH_GPIO(11)
+ #define H1940_LATCH_SD_POWER H1940_LATCH_GPIO(12)
+-#define H1940_LATCH_BLUETOOTH_POWER H1940_LATCH_GPIO(13)
++#define H1940_LATCH_BT_POWER_IDX 13
++#define H1940_LATCH_BLUETOOTH_POWER \
++ H1940_LATCH_GPIO(H1940_LATCH_BT_POWER_IDX)
+ #define H1940_LATCH_LED_GREEN H1940_LATCH_GPIO(14)
+ #define H1940_LATCH_LED_FLASH H1940_LATCH_GPIO(15)
+
+diff --git a/arch/arm/mach-s3c24xx/mach-h1940.c b/arch/arm/mach-s3c24xx/mach-h1940.c
+index d87824e..067be00 100644
+--- a/arch/arm/mach-s3c24xx/mach-h1940.c
++++ b/arch/arm/mach-s3c24xx/mach-h1940.c
+@@ -31,6 +31,7 @@
+ #include <linux/pda_power.h>
+ #include <linux/s3c_adc_battery.h>
+ #include <linux/delay.h>
++#include <linux/rfkill-gpio.h>
+
+ #include <linux/mtd/mtd.h>
+ #include <linux/mtd/partitions.h>
+@@ -40,6 +41,8 @@
+ #include <linux/mmc/host.h>
+ #include <linux/export.h>
+
++#include <linux/gpio/machine.h>
++
+ #include <asm/irq.h>
+ #include <asm/mach-types.h>
+ #include <asm/mach/arch.h>
+@@ -692,6 +695,27 @@ static struct platform_device h1940_dev_buttons = {
+ }
+ };
+
++static struct rfkill_gpio_platform_data h1940_bt_rfkill_pdata = {
++ .name = "h1940-bt",
++ .type = RFKILL_TYPE_BLUETOOTH,
++};
++
++static struct platform_device h1940_bluetooth = {
++ .name = "rfkill_gpio",
++ .id = 0,
++ .dev = {
++ .platform_data = &h1940_bt_rfkill_pdata,
++ },
++};
++
++static struct gpiod_lookup_table bt_gpio_lookup = {
++ .dev_id = "h1940-bt",
++ .table = {
++ GPIO_LOOKUP_IDX("H1940_LATCH", 13, NULL, 0, 0),
++ { },
++ },
++};
++
+ static struct platform_device *h1940_devices[] __initdata = {
+ &h1940_dev_buttons,
+ &s3c2410_device_dma,
+@@ -713,6 +737,7 @@ static struct platform_device *h1940_devices[] __initdata = {
+ &s3c_device_ts,
+ &power_supply,
+ &h1940_battery,
++ &h1940_bluetooth,
+ };
+
+ static void __init h1940_map_io(void)
+@@ -788,6 +813,20 @@ static void __init h1940_init(void)
+ gpio_request(H1940_LATCH_SD_POWER, "SD power");
+ gpio_direction_output(H1940_LATCH_SD_POWER, 0);
+
++ /* Configures BT serial port GPIOs */
++ s3c_gpio_cfgpin(S3C2410_GPH(0), S3C2410_GPH0_nCTS0);
++ s3c_gpio_setpull(S3C2410_GPH(0), S3C_GPIO_PULL_NONE);
++ s3c_gpio_cfgpin(S3C2410_GPH(1), S3C2410_GPH1_nRTS0);
++ s3c_gpio_setpull(S3C2410_GPH(1), S3C_GPIO_PULL_NONE);
++ s3c_gpio_cfgpin(S3C2410_GPH(2), S3C2410_GPH2_TXD0);
++ s3c_gpio_setpull(S3C2410_GPH(2), S3C_GPIO_PULL_NONE);
++ s3c_gpio_cfgpin(S3C2410_GPH(3), S3C2410_GPH3_RXD0);
++ s3c_gpio_setpull(S3C2410_GPH(3), S3C_GPIO_PULL_NONE);
++
++ gpio_request(S3C2410_GPC(9), "BT reset");
++ gpio_direction_output(S3C2410_GPC(9), 1);
++
++ gpiod_add_lookup_table(&bt_gpio_lookup);
+ platform_add_devices(h1940_devices, ARRAY_SIZE(h1940_devices));
+
+ gpio_request(S3C2410_GPA(1), "Red LED blink");
+--
+2.3.5
+
diff --git a/recipes-kernel/linux/linux-handheld-4.0/h1940/0011-ARM-s3c24xx-h1940-add-IR-switch.patch b/recipes-kernel/linux/linux-handheld-4.0/h1940/0011-ARM-s3c24xx-h1940-add-IR-switch.patch
new file mode 100644
index 0000000..75edb79
--- /dev/null
+++ b/recipes-kernel/linux/linux-handheld-4.0/h1940/0011-ARM-s3c24xx-h1940-add-IR-switch.patch
@@ -0,0 +1,76 @@
+From 55f97c828986e04d71a6182ef03330ef47085206 Mon Sep 17 00:00:00 2001
+From: Vasily Khoruzhick <anarsoul@gmail.com>
+Date: Sun, 18 Dec 2011 11:29:30 +0300
+Subject: [PATCH 11/15] ARM: s3c24xx: h1940: add IR switch
+
+Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
+---
+ arch/arm/mach-s3c24xx/mach-h1940.c | 33 +++++++++++++++++++++++++++++++--
+ 1 file changed, 31 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/mach-s3c24xx/mach-h1940.c b/arch/arm/mach-s3c24xx/mach-h1940.c
+index 067be00..86d9ec7 100644
+--- a/arch/arm/mach-s3c24xx/mach-h1940.c
++++ b/arch/arm/mach-s3c24xx/mach-h1940.c
+@@ -709,9 +709,30 @@ static struct platform_device h1940_bluetooth = {
+ };
+
+ static struct gpiod_lookup_table bt_gpio_lookup = {
+- .dev_id = "h1940-bt",
++ .dev_id = "rfkill_gpio.0",
+ .table = {
+- GPIO_LOOKUP_IDX("H1940_LATCH", 13, NULL, 0, 0),
++ GPIO_LOOKUP_IDX("H1940_LATCH", 13, NULL, 1, 0),
++ { },
++ },
++};
++
++static struct rfkill_gpio_platform_data h1940_ir_rfkill_pdata = {
++ .name = "h1940-ir",
++ .type = RFKILL_TYPE_IR,
++};
++
++static struct platform_device h1940_irda = {
++ .name = "rfkill_gpio",
++ .id = 1,
++ .dev = {
++ .platform_data = &h1940_ir_rfkill_pdata,
++ },
++};
++
++static struct gpiod_lookup_table ir_gpio_lookup = {
++ .dev_id = "rfkill_gpio.1",
++ .table = {
++ GPIO_LOOKUP_IDX("GPIOB", 9, NULL, 1, GPIO_ACTIVE_LOW),
+ { },
+ },
+ };
+@@ -738,6 +759,7 @@ static struct platform_device *h1940_devices[] __initdata = {
+ &power_supply,
+ &h1940_battery,
+ &h1940_bluetooth,
++ &h1940_irda,
+ };
+
+ static void __init h1940_map_io(void)
+@@ -823,10 +845,17 @@ static void __init h1940_init(void)
+ s3c_gpio_cfgpin(S3C2410_GPH(3), S3C2410_GPH3_RXD0);
+ s3c_gpio_setpull(S3C2410_GPH(3), S3C_GPIO_PULL_NONE);
+
++ /* Configure IR serial port GPIOs */
++ s3c_gpio_cfgpin(S3C2410_GPH(6), S3C2410_GPH6_TXD2);
++ s3c_gpio_setpull(S3C2410_GPH(6), S3C_GPIO_PULL_NONE);
++ s3c_gpio_cfgpin(S3C2410_GPH(7), S3C2410_GPH7_RXD2);
++ s3c_gpio_setpull(S3C2410_GPH(7), S3C_GPIO_PULL_NONE);
++
+ gpio_request(S3C2410_GPC(9), "BT reset");
+ gpio_direction_output(S3C2410_GPC(9), 1);
+
+ gpiod_add_lookup_table(&bt_gpio_lookup);
++ gpiod_add_lookup_table(&ir_gpio_lookup);
+ platform_add_devices(h1940_devices, ARRAY_SIZE(h1940_devices));
+
+ gpio_request(S3C2410_GPA(1), "Red LED blink");
+--
+2.3.5
+
diff --git a/recipes-kernel/linux/linux-handheld-4.0/h1940/0012-ARM-s3c24xx-ADC-port-to-common-clock-framework.patch b/recipes-kernel/linux/linux-handheld-4.0/h1940/0012-ARM-s3c24xx-ADC-port-to-common-clock-framework.patch
new file mode 100644
index 0000000..aa203d4
--- /dev/null
+++ b/recipes-kernel/linux/linux-handheld-4.0/h1940/0012-ARM-s3c24xx-ADC-port-to-common-clock-framework.patch
@@ -0,0 +1,37 @@
+From 9a55093973be59c1ae7364b4c59cee36103937d2 Mon Sep 17 00:00:00 2001
+From: Vasily Khoruzhick <anarsoul@gmail.com>
+Date: Tue, 21 Apr 2015 21:05:32 +0300
+Subject: [PATCH 12/15] ARM: s3c24xx: ADC: port to common clock framework
+
+Replace clk_enable/clk_disable with clk_prepare_enable/clk_disable_unprepare
+
+Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
+---
+ arch/arm/plat-samsung/adc.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/plat-samsung/adc.c b/arch/arm/plat-samsung/adc.c
+index e2be70d..38444b9 100644
+--- a/arch/arm/plat-samsung/adc.c
++++ b/arch/arm/plat-samsung/adc.c
+@@ -389,7 +389,7 @@ static int s3c_adc_probe(struct platform_device *pdev)
+ if (ret)
+ return ret;
+
+- clk_enable(adc->clk);
++ clk_prepare_enable(adc->clk);
+
+ tmp = adc->prescale | S3C2410_ADCCON_PRSCEN;
+
+@@ -413,7 +413,7 @@ static int s3c_adc_remove(struct platform_device *pdev)
+ {
+ struct adc_device *adc = platform_get_drvdata(pdev);
+
+- clk_disable(adc->clk);
++ clk_disable_unprepare(adc->clk);
+ regulator_disable(adc->vdd);
+
+ return 0;
+--
+2.3.5
+
diff --git a/recipes-kernel/linux/linux-handheld-4.0/h1940/0013-ARM-s3c24xx-H1940-Move-gpiochip_add-call-into-core_i.patch b/recipes-kernel/linux/linux-handheld-4.0/h1940/0013-ARM-s3c24xx-H1940-Move-gpiochip_add-call-into-core_i.patch
new file mode 100644
index 0000000..9e4fea1
--- /dev/null
+++ b/recipes-kernel/linux/linux-handheld-4.0/h1940/0013-ARM-s3c24xx-H1940-Move-gpiochip_add-call-into-core_i.patch
@@ -0,0 +1,38 @@
+From 0158609a5f514b85e8c40885954f2607f76ae431 Mon Sep 17 00:00:00 2001
+From: Vasily Khoruzhick <anarsoul@gmail.com>
+Date: Tue, 21 Apr 2015 21:06:54 +0300
+Subject: [PATCH 13/15] ARM: s3c24xx: H1940: Move gpiochip_add call into
+ core_init() callback
+
+gpiochip_add() allocates memory, however it's not possible anymore from
+machine map_io() callback thus it failed and prevented machine from booting
+properly.
+
+Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
+---
+ arch/arm/mach-s3c24xx/mach-h1940.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/mach-s3c24xx/mach-h1940.c b/arch/arm/mach-s3c24xx/mach-h1940.c
+index 86d9ec7..744aa4f 100644
+--- a/arch/arm/mach-s3c24xx/mach-h1940.c
++++ b/arch/arm/mach-s3c24xx/mach-h1940.c
+@@ -777,9 +777,14 @@ static void __init h1940_map_io(void)
+
+ /* Add latch gpio chip, set latch initial value */
+ h1940_latch_control(0, 0);
+- WARN_ON(gpiochip_add(&h1940_latch_gpiochip));
+ }
+
++static __init int h1940_gpiolib_init(void)
++{
++ return gpiochip_add(&h1940_latch_gpiochip);
++}
++core_initcall(h1940_gpiolib_init);
++
+ static void __init h1940_init_time(void)
+ {
+ s3c2410_init_clocks(12000000);
+--
+2.3.5
+
diff --git a/recipes-kernel/linux/linux-handheld-4.0/h1940/0014-i2c-s3c2410-fix-oops-in-suspend-callback-for-non-dt-.patch b/recipes-kernel/linux/linux-handheld-4.0/h1940/0014-i2c-s3c2410-fix-oops-in-suspend-callback-for-non-dt-.patch
new file mode 100644
index 0000000..c785092
--- /dev/null
+++ b/recipes-kernel/linux/linux-handheld-4.0/h1940/0014-i2c-s3c2410-fix-oops-in-suspend-callback-for-non-dt-.patch
@@ -0,0 +1,28 @@
+From 2854395d914a51fe0fff926effee9d75b66352c7 Mon Sep 17 00:00:00 2001
+From: Vasily Khoruzhick <anarsoul@gmail.com>
+Date: Wed, 22 Apr 2015 22:54:12 +0300
+Subject: [PATCH 14/15] i2c: s3c2410: fix oops in suspend callback for non-dt
+ platforms
+
+Initialize sysreg by default, otherwise driver will crash in suspend callback.
+
+Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
+---
+ drivers/i2c/busses/i2c-s3c2410.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/i2c/busses/i2c-s3c2410.c b/drivers/i2c/busses/i2c-s3c2410.c
+index 958c8db..297e9c9 100644
+--- a/drivers/i2c/busses/i2c-s3c2410.c
++++ b/drivers/i2c/busses/i2c-s3c2410.c
+@@ -1143,6 +1143,7 @@ static int s3c24xx_i2c_probe(struct platform_device *pdev)
+ return -ENOMEM;
+
+ i2c->quirks = s3c24xx_get_device_quirks(pdev);
++ i2c->sysreg = ERR_PTR(-ENOENT);
+ if (pdata)
+ memcpy(i2c->pdata, pdata, sizeof(*pdata));
+ else
+--
+2.3.5
+
diff --git a/recipes-kernel/linux/linux-handheld-4.0/h1940/0015-ASoC-uda1380-Avoid-accessing-i2c-bus-when-codec-is-d.patch b/recipes-kernel/linux/linux-handheld-4.0/h1940/0015-ASoC-uda1380-Avoid-accessing-i2c-bus-when-codec-is-d.patch
new file mode 100644
index 0000000..ce9b401
--- /dev/null
+++ b/recipes-kernel/linux/linux-handheld-4.0/h1940/0015-ASoC-uda1380-Avoid-accessing-i2c-bus-when-codec-is-d.patch
@@ -0,0 +1,31 @@
+From 7c045b05856e68edd5a871960a1bebf522aaf635 Mon Sep 17 00:00:00 2001
+From: Vasily Khoruzhick <anarsoul@gmail.com>
+Date: Wed, 22 Apr 2015 22:56:22 +0300
+Subject: [PATCH 15/15] ASoC: uda1380: Avoid accessing i2c bus when codec is
+ disabled
+
+set_dai_fmt_both() callback is called from snd_soc_runtime_set_dai_fmt()
+which is called from snd_soc_register_card(), but at this time codec
+is not powered on yet. Replace direct i2c write with regcache write.
+
+Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
+---
+ sound/soc/codecs/uda1380.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/sound/soc/codecs/uda1380.c b/sound/soc/codecs/uda1380.c
+index dc7778b..c3c33bd 100644
+--- a/sound/soc/codecs/uda1380.c
++++ b/sound/soc/codecs/uda1380.c
+@@ -437,7 +437,7 @@ static int uda1380_set_dai_fmt_both(struct snd_soc_dai *codec_dai,
+ if ((fmt & SND_SOC_DAIFMT_MASTER_MASK) != SND_SOC_DAIFMT_CBS_CFS)
+ return -EINVAL;
+
+- uda1380_write(codec, UDA1380_IFACE, iface);
++ uda1380_write_reg_cache(codec, UDA1380_IFACE, iface);
+
+ return 0;
+ }
+--
+2.3.5
+
diff --git a/recipes-kernel/linux/linux-handheld-4.0/h1940/defconfig b/recipes-kernel/linux/linux-handheld-4.0/h1940/defconfig
new file mode 100644
index 0000000..3e797d6
--- /dev/null
+++ b/recipes-kernel/linux/linux-handheld-4.0/h1940/defconfig
@@ -0,0 +1,200 @@
+CONFIG_LOCALVERSION="-yocto-standard"
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SYSVIPC=y
+CONFIG_NO_HZ_IDLE=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=18
+CONFIG_CGROUPS=y
+CONFIG_CGROUP_DEBUG=y
+CONFIG_CGROUP_FREEZER=y
+CONFIG_CGROUP_DEVICE=y
+CONFIG_CPUSETS=y
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_MEMCG=y
+CONFIG_MEMCG_SWAP=y
+# CONFIG_MEMCG_SWAP_ENABLED is not set
+CONFIG_MEMCG_KMEM=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_BLK_CGROUP=y
+# CONFIG_UTS_NS is not set
+# CONFIG_IPC_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_NET_NS is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+# CONFIG_COMPAT_BRK is not set
+CONFIG_SLAB=y
+CONFIG_MODULES=y
+CONFIG_MODULE_FORCE_LOAD=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_BLK_DEV_BSG is not set
+CONFIG_PARTITION_ADVANCED=y
+CONFIG_BSD_DISKLABEL=y
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_ARCH_S3C24XX=y
+CONFIG_CPU_S3C2442=y
+CONFIG_ARCH_H1940=y
+CONFIG_S3C24XX_PWM=y
+CONFIG_PREEMPT_VOLUNTARY=y
+CONFIG_AEABI=y
+# CONFIG_COMPACTION is not set
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CPU_IDLE=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_APM_EMULATION=y
+CONFIG_NET=y
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+# CONFIG_IPV6 is not set
+CONFIG_IRDA=m
+CONFIG_IRCOMM=m
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRTTY_SIR=m
+CONFIG_BT=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIUART_ATH3K=y
+CONFIG_BT_HCIUART_LL=y
+CONFIG_CFG80211=m
+CONFIG_CFG80211_WEXT=y
+CONFIG_MAC80211=m
+CONFIG_RFKILL=m
+CONFIG_RFKILL_GPIO=m
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+# CONFIG_FIRMWARE_IN_KERNEL is not set
+CONFIG_MTD=y
+CONFIG_MTD_CMDLINE_PARTS=y
+CONFIG_MTD_BLOCK=y
+CONFIG_MTD_CFI=y
+CONFIG_MTD_JEDECPROBE=y
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_CFI_AMDSTD=y
+CONFIG_MTD_ROM=y
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_S3C2410=y
+CONFIG_MTD_NAND_S3C2410_HWECC=y
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=1
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_NETDEVICES=y
+# CONFIG_ETHERNET is not set
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
+CONFIG_INPUT_EVDEV=y
+# CONFIG_KEYBOARD_ATKBD is not set
+CONFIG_KEYBOARD_GPIO=y
+# CONFIG_INPUT_MOUSE is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_S3C2410=y
+# CONFIG_LEGACY_PTYS is not set
+CONFIG_SERIAL_SAMSUNG=y
+CONFIG_SERIAL_SAMSUNG_CONSOLE=y
+# CONFIG_HW_RANDOM is not set
+CONFIG_I2C=y
+# CONFIG_I2C_COMPAT is not set
+CONFIG_I2C_CHARDEV=m
+CONFIG_I2C_S3C2410=m
+CONFIG_GPIO_SYSFS=y
+CONFIG_POWER_SUPPLY=y
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+CONFIG_BATTERY_S3C_ADC=y
+# CONFIG_HWMON is not set
+CONFIG_WATCHDOG=y
+CONFIG_S3C2410_WATCHDOG=y
+CONFIG_FB=y
+CONFIG_FB_S3C2410=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_PLATFORM=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_BACKLIGHT_GENERIC is not set
+CONFIG_BACKLIGHT_PWM=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_SOUND=m
+# CONFIG_SOUND_OSS_CORE_PRECLAIM is not set
+CONFIG_SND=m
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+# CONFIG_SND_DRIVERS is not set
+# CONFIG_SND_ARM is not set
+CONFIG_SND_SOC=m
+CONFIG_SND_SOC_SAMSUNG=m
+CONFIG_SND_SOC_SAMSUNG_H1940_UDA1380=m
+CONFIG_USB_GADGET=y
+CONFIG_USB_GADGET_VBUS_DRAW=250
+CONFIG_USB_S3C2410=y
+CONFIG_USB_ETH=y
+CONFIG_MMC=y
+CONFIG_MMC_S3C=y
+CONFIG_MMC_S3C_DMA=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_CPU=y
+CONFIG_RTC_CLASS=y
+# CONFIG_RTC_INTF_PROC is not set
+CONFIG_RTC_DRV_S3C=y
+CONFIG_DMADEVICES=y
+CONFIG_S3C24XX_DMAC=y
+CONFIG_STAGING=y
+# CONFIG_IOMMU_SUPPORT is not set
+CONFIG_EXT2_FS=y
+CONFIG_EXT3_FS=m
+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
+CONFIG_FUSE_FS=m
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=866
+CONFIG_FAT_DEFAULT_IOCHARSET="utf8"
+CONFIG_TMPFS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V4=y
+CONFIG_ROOT_NFS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_866=y
+CONFIG_NLS_CODEPAGE_1251=y
+CONFIG_NLS_UTF8=y
+CONFIG_PRINTK_TIME=y
+CONFIG_DEBUG_INFO=y
+CONFIG_DEBUG_FS=y
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_FTRACE is not set
+CONFIG_DEBUG_USER=y
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_ECB=y
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_MICHAEL_MIC=y
+CONFIG_CRYPTO_ARC4=y
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_ANSI_CPRNG=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC16=y
+CONFIG_FONTS=y
+CONFIG_FONT_MINI_4x6=y
diff --git a/recipes-kernel/linux/linux-handheld_4.0.bb b/recipes-kernel/linux/linux-handheld_4.0.bb
index fdf43bd..b5884f1 100644
--- a/recipes-kernel/linux/linux-handheld_4.0.bb
+++ b/recipes-kernel/linux/linux-handheld_4.0.bb
@@ -3,7 +3,7 @@ SECTION = "kernel"
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7"
-COMPATIBLE_MACHINE .= "|akita|c7x0|collie|h3600|hx4700|poodle|spitz|tosa"
+COMPATIBLE_MACHINE .= "|akita|c7x0|collie|h1940|h3600|hx4700|poodle|spitz|tosa"
SRC_URI = "${KERNELORG_MIRROR}/linux/kernel/v4.x/linux-4.0.tar.xz;name=kernel"
SRC_URI[kernel.md5sum] = "a86916bd12798220da9eb4a1eec3616d"
@@ -45,6 +45,25 @@ SRC_URI_append_collie = " \
file://defconfig \
file://OE-qvga-logo.patch \
"
+SRC_URI_append_h1940 = " \
+ file://defconfig \
+ file://OE-qvga-logo.patch \
+ file://0001-rfkill-add-IR-type.patch \
+ file://0002-ARM-s3c24xx-add-dma_coherent_mask-for-DMA-devices.patch \
+ file://0003-ARM-s3c24xx-Add-DMA-resources-for-SDI-and-I2S.patch \
+ file://0004-ARM-s3c24xx-drop-RFKILL-driver-for-H1940-bluetooth.patch \
+ file://0005-ARM-s3c24xx-h1940-Add-nand-device.patch \
+ file://0006-ARM-s3c24xx-h1940-don-t-touch-UPLLCON.patch \
+ file://0007-ARM-s3c24xx-h1940-unlock-reset-button.patch \
+ file://0008-ARM-s3c24xx-h1940-increase-oversampling-shift.patch \
+ file://0009-ARM-s3c24xx-h1940-Add-DMA-device.patch \
+ file://0010-ARM-s3c24xx-h1940-add-bluetooth-RF-kill-switch.patch \
+ file://0011-ARM-s3c24xx-h1940-add-IR-switch.patch \
+ file://0012-ARM-s3c24xx-ADC-port-to-common-clock-framework.patch \
+ file://0013-ARM-s3c24xx-H1940-Move-gpiochip_add-call-into-core_i.patch \
+ file://0014-i2c-s3c2410-fix-oops-in-suspend-callback-for-non-dt-.patch \
+ file://0015-ASoC-uda1380-Avoid-accessing-i2c-bus-when-codec-is-d.patch \
+ "
SRC_URI_append_h3600 = " \
file://defconfig \
file://OE-qvga-logo.patch \