All of lore.kernel.org
 help / color / mirror / Atom feed
* [meta-fsl-arm-extra krogoth][PATCH 0/5] Rename imx6q-elo board and bump u-boot/kernel version
@ 2016-08-09 18:00 Akshay Bhat
  2016-08-09 18:00 ` [meta-fsl-arm-extra krogoth][PATCH 1/5] u-boot-advantech: Add u-boot recipe for Advantech i.MX6 boards Akshay Bhat
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Akshay Bhat @ 2016-08-09 18:00 UTC (permalink / raw)
  To: meta-freescale

Hi,

This patch series:
- renames imx6q-elo machine to imx6q-dms-ba16
- updates imx6q-dms-ba16 board to use u-boot-advantech and linux-advantech
- add support for linux-advantech kernel based on 4.1-1.0.x-imx linux-fslc with imx6q-dms-ba16 specific patches
- add support for u-boot-advantech based on u-boot-fslc 2016.07
- removes old linux-ge and u-boot-ge recipes

Thanks,
Akshay

Akshay Bhat (5):
  u-boot-advantech: Add u-boot recipe for Advantech i.MX6 boards
  linux-advantech: Add linux kernel recipe for Advantech i.MX6 boards
  imx6q-elo: Rename board and update kernel, U-Boot provider
  linux-ge: Remove old kernel recipe
  u-boot-ge: Remove old u-boot recipe

 conf/machine/imx6q-dms-ba16.conf                   |   23 +
 conf/machine/imx6q-elo.conf                        |   23 -
 recipes-bsp/u-boot/u-boot-advantech_2016.07.bb     |   14 +
 ...-arm-imx-Add-support-for-GE-Bx50v3-boards.patch | 1245 --------------------
 ...0002-board-ge-bx50v3-Update-display-setup.patch |  293 -----
 ...dd-support-for-FSL-Community-Yocto-images.patch |  128 --
 ...board-ge-bx50v3-Add-support-for-ELO-board.patch |  222 ----
 ...oard-ge-bx50v3-Fix-bootargs-for-ELO-board.patch |   37 -
 .../0006-mx6q_ba16-Add-1G-DDR-support.patch        |  343 ------
 ...board-ge-bx50v3-Add-correct-SATA-settings.patch |   59 -
 recipes-bsp/u-boot/u-boot-ge_2015.10.bb            |   22 -
 .../0001-rtc-rx8010-Add-driver-to-kernel.patch     | 1020 ++++++++++++++++
 ...i_imx-Make-receive-DPLL-mode-configurable.patch |   50 +
 ...d-DT-bindings-to-configure-PHY-Tx-driver-.patch |  112 ++
 .../0004-input-da9063_onkey-Add-driver.patch       |  277 +++++
 ...5-mfd-da9063-Add-support-for-OnKey-driver.patch |  114 ++
 .../0006-add-usb-hub_test-suport.patch             |   66 ++
 ...ts-imx-Add-support-for-Advantech-DMS-BA16.patch |  817 +++++++++++++
 ...a-PMIC-qurk-to-support-system-suspend-res.patch |  218 ++++
 ...0009-mfd-da9063-Add-wakeup-source-support.patch |   28 +
 ...-Add-Q7-SUS_S3_OUT-control-support-during.patch |   85 ++
 recipes-kernel/linux/linux-advantech-4.1/defconfig |  451 +++++++
 recipes-kernel/linux/linux-advantech_4.1.bb        |   27 +
 .../0001-rtc-rx8010-Add-driver-to-kernel.patch     | 1020 ----------------
 ...Add-support-for-production-silicon-varian.patch |  101 --
 ...Upgrade-of-register-definitions-to-suppor.patch |  257 ----
 .../linux-ge-3.14/0004-rtc-da9063-RTC-driver.patch |  399 -------
 ...da9063-Add-support-for-AD-silicon-variant.patch |  582 ---------
 ...Get-irq-base-dynamically-before-registeri.patch |   42 -
 ...7-mfd-da9063-Add-support-for-OnKey-driver.patch |  114 --
 ...i_imx-Make-receive-DPLL-mode-configurable.patch |   51 -
 ...d-DT-bindings-to-configure-PHY-Tx-driver-.patch |  112 --
 ...-dts-imx-Add-support-for-Advantech-GE-ELO.patch |  817 -------------
 recipes-kernel/linux/linux-ge-3.14/defconfig       |  453 -------
 recipes-kernel/linux/linux-ge_3.14.bb              |   25 -
 35 files changed, 3302 insertions(+), 6345 deletions(-)
 create mode 100644 conf/machine/imx6q-dms-ba16.conf
 delete mode 100644 conf/machine/imx6q-elo.conf
 create mode 100644 recipes-bsp/u-boot/u-boot-advantech_2016.07.bb
 delete mode 100644 recipes-bsp/u-boot/u-boot-ge-2015.10/0001-arm-imx-Add-support-for-GE-Bx50v3-boards.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot-ge-2015.10/0002-board-ge-bx50v3-Update-display-setup.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot-ge-2015.10/0003-ge_bx50v3-Add-support-for-FSL-Community-Yocto-images.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot-ge-2015.10/0004-board-ge-bx50v3-Add-support-for-ELO-board.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot-ge-2015.10/0005-board-ge-bx50v3-Fix-bootargs-for-ELO-board.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot-ge-2015.10/0006-mx6q_ba16-Add-1G-DDR-support.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot-ge-2015.10/0007-board-ge-bx50v3-Add-correct-SATA-settings.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot-ge_2015.10.bb
 create mode 100644 recipes-kernel/linux/linux-advantech-4.1/0001-rtc-rx8010-Add-driver-to-kernel.patch
 create mode 100644 recipes-kernel/linux/linux-advantech-4.1/0002-ahci_imx-Make-receive-DPLL-mode-configurable.patch
 create mode 100644 recipes-kernel/linux/linux-advantech-4.1/0003-PCI-imx6-Add-DT-bindings-to-configure-PHY-Tx-driver-.patch
 create mode 100644 recipes-kernel/linux/linux-advantech-4.1/0004-input-da9063_onkey-Add-driver.patch
 create mode 100644 recipes-kernel/linux/linux-advantech-4.1/0005-mfd-da9063-Add-support-for-OnKey-driver.patch
 create mode 100644 recipes-kernel/linux/linux-advantech-4.1/0006-add-usb-hub_test-suport.patch
 create mode 100644 recipes-kernel/linux/linux-advantech-4.1/0007-ARM-dts-imx-Add-support-for-Advantech-DMS-BA16.patch
 create mode 100644 recipes-kernel/linux/linux-advantech-4.1/0008-da9063-Add-a-PMIC-qurk-to-support-system-suspend-res.patch
 create mode 100644 recipes-kernel/linux/linux-advantech-4.1/0009-mfd-da9063-Add-wakeup-source-support.patch
 create mode 100644 recipes-kernel/linux/linux-advantech-4.1/0010-ARM-dts-imx-Add-Q7-SUS_S3_OUT-control-support-during.patch
 create mode 100644 recipes-kernel/linux/linux-advantech-4.1/defconfig
 create mode 100644 recipes-kernel/linux/linux-advantech_4.1.bb
 delete mode 100644 recipes-kernel/linux/linux-ge-3.14/0001-rtc-rx8010-Add-driver-to-kernel.patch
 delete mode 100644 recipes-kernel/linux/linux-ge-3.14/0002-mfd-da9063-Add-support-for-production-silicon-varian.patch
 delete mode 100644 recipes-kernel/linux/linux-ge-3.14/0003-mfd-da9063-Upgrade-of-register-definitions-to-suppor.patch
 delete mode 100644 recipes-kernel/linux/linux-ge-3.14/0004-rtc-da9063-RTC-driver.patch
 delete mode 100644 recipes-kernel/linux/linux-ge-3.14/0005-mfd-da9063-Add-support-for-AD-silicon-variant.patch
 delete mode 100644 recipes-kernel/linux/linux-ge-3.14/0006-mfd-da9063-Get-irq-base-dynamically-before-registeri.patch
 delete mode 100644 recipes-kernel/linux/linux-ge-3.14/0007-mfd-da9063-Add-support-for-OnKey-driver.patch
 delete mode 100644 recipes-kernel/linux/linux-ge-3.14/0008-ahci_imx-Make-receive-DPLL-mode-configurable.patch
 delete mode 100644 recipes-kernel/linux/linux-ge-3.14/0009-PCI-imx6-Add-DT-bindings-to-configure-PHY-Tx-driver-.patch
 delete mode 100644 recipes-kernel/linux/linux-ge-3.14/0010-ARM-dts-imx-Add-support-for-Advantech-GE-ELO.patch
 delete mode 100644 recipes-kernel/linux/linux-ge-3.14/defconfig
 delete mode 100644 recipes-kernel/linux/linux-ge_3.14.bb

-- 
2.8.1



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [meta-fsl-arm-extra krogoth][PATCH 1/5] u-boot-advantech: Add u-boot recipe for Advantech i.MX6 boards
  2016-08-09 18:00 [meta-fsl-arm-extra krogoth][PATCH 0/5] Rename imx6q-elo board and bump u-boot/kernel version Akshay Bhat
@ 2016-08-09 18:00 ` Akshay Bhat
  2016-08-09 18:00 ` [meta-fsl-arm-extra krogoth][PATCH 2/5] linux-advantech: Add linux kernel " Akshay Bhat
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Akshay Bhat @ 2016-08-09 18:00 UTC (permalink / raw)
  To: meta-freescale

This recipe utilizes 2016.07 u-boot-fslc which supports imx6q-dms-ba16 board.

This recipe is intended to be a stop-gap until Krogoth branch adopts 2016.07 u-boot-fslc.

Signed-off-by: Akshay Bhat <akshay.bhat@timesys.com>
---
 recipes-bsp/u-boot/u-boot-advantech_2016.07.bb | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
 create mode 100644 recipes-bsp/u-boot/u-boot-advantech_2016.07.bb

diff --git a/recipes-bsp/u-boot/u-boot-advantech_2016.07.bb b/recipes-bsp/u-boot/u-boot-advantech_2016.07.bb
new file mode 100644
index 0000000..5a9cd87
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-advantech_2016.07.bb
@@ -0,0 +1,14 @@
+require recipes-bsp/u-boot/u-boot.inc
+
+DESCRIPTION = "U-Boot for Advantech i.MX6 DMS-BA16 based platforms"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://Licenses/README;md5=a2c678cfd4a4d97135585cad908541c6"
+DEPENDS = "u-boot-mkimage-native"
+
+PROVIDES = "u-boot"
+
+SRCREV = "16a26705252aac106e196d2f9593845539c73837"
+SRC_URI = "git://github.com/Freescale/u-boot-fslc.git;branch=2016.07+fslc"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+COMPATIBLE_MACHINE = "(imx6q-dms-ba16)"
-- 
2.8.1



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [meta-fsl-arm-extra krogoth][PATCH 2/5] linux-advantech: Add linux kernel recipe for Advantech i.MX6 boards
  2016-08-09 18:00 [meta-fsl-arm-extra krogoth][PATCH 0/5] Rename imx6q-elo board and bump u-boot/kernel version Akshay Bhat
  2016-08-09 18:00 ` [meta-fsl-arm-extra krogoth][PATCH 1/5] u-boot-advantech: Add u-boot recipe for Advantech i.MX6 boards Akshay Bhat
@ 2016-08-09 18:00 ` Akshay Bhat
  2016-08-09 18:00 ` [meta-fsl-arm-extra krogoth][PATCH 3/5] imx6q-elo: Rename board and update kernel, U-Boot provider Akshay Bhat
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Akshay Bhat @ 2016-08-09 18:00 UTC (permalink / raw)
  To: meta-freescale

This recipe is a fork of linux-fslc 4.1-1.0.x-imx kernel with patches for
supporting imx6q-dms-ba16 platform.

Signed-off-by: Akshay Bhat <akshay.bhat@timesys.com>
---
 .../0001-rtc-rx8010-Add-driver-to-kernel.patch     | 1020 ++++++++++++++++++++
 ...i_imx-Make-receive-DPLL-mode-configurable.patch |   50 +
 ...d-DT-bindings-to-configure-PHY-Tx-driver-.patch |  112 +++
 .../0004-input-da9063_onkey-Add-driver.patch       |  277 ++++++
 ...5-mfd-da9063-Add-support-for-OnKey-driver.patch |  114 +++
 .../0006-add-usb-hub_test-suport.patch             |   66 ++
 ...ts-imx-Add-support-for-Advantech-DMS-BA16.patch |  817 ++++++++++++++++
 ...a-PMIC-qurk-to-support-system-suspend-res.patch |  218 +++++
 ...0009-mfd-da9063-Add-wakeup-source-support.patch |   28 +
 ...-Add-Q7-SUS_S3_OUT-control-support-during.patch |   85 ++
 recipes-kernel/linux/linux-advantech-4.1/defconfig |  451 +++++++++
 recipes-kernel/linux/linux-advantech_4.1.bb        |   27 +
 12 files changed, 3265 insertions(+)
 create mode 100644 recipes-kernel/linux/linux-advantech-4.1/0001-rtc-rx8010-Add-driver-to-kernel.patch
 create mode 100644 recipes-kernel/linux/linux-advantech-4.1/0002-ahci_imx-Make-receive-DPLL-mode-configurable.patch
 create mode 100644 recipes-kernel/linux/linux-advantech-4.1/0003-PCI-imx6-Add-DT-bindings-to-configure-PHY-Tx-driver-.patch
 create mode 100644 recipes-kernel/linux/linux-advantech-4.1/0004-input-da9063_onkey-Add-driver.patch
 create mode 100644 recipes-kernel/linux/linux-advantech-4.1/0005-mfd-da9063-Add-support-for-OnKey-driver.patch
 create mode 100644 recipes-kernel/linux/linux-advantech-4.1/0006-add-usb-hub_test-suport.patch
 create mode 100644 recipes-kernel/linux/linux-advantech-4.1/0007-ARM-dts-imx-Add-support-for-Advantech-DMS-BA16.patch
 create mode 100644 recipes-kernel/linux/linux-advantech-4.1/0008-da9063-Add-a-PMIC-qurk-to-support-system-suspend-res.patch
 create mode 100644 recipes-kernel/linux/linux-advantech-4.1/0009-mfd-da9063-Add-wakeup-source-support.patch
 create mode 100644 recipes-kernel/linux/linux-advantech-4.1/0010-ARM-dts-imx-Add-Q7-SUS_S3_OUT-control-support-during.patch
 create mode 100644 recipes-kernel/linux/linux-advantech-4.1/defconfig
 create mode 100644 recipes-kernel/linux/linux-advantech_4.1.bb

diff --git a/recipes-kernel/linux/linux-advantech-4.1/0001-rtc-rx8010-Add-driver-to-kernel.patch b/recipes-kernel/linux/linux-advantech-4.1/0001-rtc-rx8010-Add-driver-to-kernel.patch
new file mode 100644
index 0000000..63b0a33
--- /dev/null
+++ b/recipes-kernel/linux/linux-advantech-4.1/0001-rtc-rx8010-Add-driver-to-kernel.patch
@@ -0,0 +1,1020 @@
+From a7e5438cba40e5b6bada9842ff5533c5823793a7 Mon Sep 17 00:00:00 2001
+From: Justin Waters <justin.waters@timesys.com>
+Date: Mon, 22 Dec 2014 11:35:24 -0500
+Subject: [PATCH 1/7] rtc-rx8010: Add driver to kernel
+
+This is the rx810_k3.8-v1.3 version from the Epson support site:
+
+http://www5.epsondevice.com/en/quartz/tech/linux_for_rtc/software/rx8010_k3.8-v1.3.zip
+---
+ drivers/rtc/Kconfig      |   8 +
+ drivers/rtc/Makefile     |   1 +
+ drivers/rtc/rtc-rx8010.c | 965 +++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 974 insertions(+)
+ create mode 100644 drivers/rtc/rtc-rx8010.c
+
+diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
+index 0fe4ad8..0eaf003 100644
+--- a/drivers/rtc/Kconfig
++++ b/drivers/rtc/Kconfig
+@@ -551,6 +551,14 @@ config RTC_DRV_FM3130
+ 	  This driver can also be built as a module. If so the module
+ 	  will be called rtc-fm3130.
+ 
++config RTC_DRV_RX8010
++	tristate "Epson RX-8010SJ"
++	help
++	  If you say yes here you will get support for the Epson RX-8010SJ.
++
++	  This driver can also be built as a module. If so the module
++	  will be called rtc-rx8010.
++
+ config RTC_DRV_RX8581
+ 	tristate "Epson RX-8581"
+ 	help
+diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile
+index 2b82e2b..1287436 100644
+--- a/drivers/rtc/Makefile
++++ b/drivers/rtc/Makefile
+@@ -123,6 +123,7 @@ obj-$(CONFIG_RTC_DRV_RS5C348)	+= rtc-rs5c348.o
+ obj-$(CONFIG_RTC_DRV_RS5C372)	+= rtc-rs5c372.o
+ obj-$(CONFIG_RTC_DRV_RV3029C2)	+= rtc-rv3029c2.o
+ obj-$(CONFIG_RTC_DRV_RX4581)	+= rtc-rx4581.o
++obj-$(CONFIG_RTC_DRV_RX8010)	+= rtc-rx8010.o
+ obj-$(CONFIG_RTC_DRV_RX8025)	+= rtc-rx8025.o
+ obj-$(CONFIG_RTC_DRV_RX8581)	+= rtc-rx8581.o
+ obj-$(CONFIG_RTC_DRV_S35390A)	+= rtc-s35390a.o
+diff --git a/drivers/rtc/rtc-rx8010.c b/drivers/rtc/rtc-rx8010.c
+new file mode 100644
+index 0000000..80f7506
+--- /dev/null
++++ b/drivers/rtc/rtc-rx8010.c
+@@ -0,0 +1,965 @@
++//======================================================================
++// Driver for the Epson RTC module RX-8010 SJ
++// 
++// Copyright(C) SEIKO EPSON CORPORATION 2013. All rights reserved.
++// 
++// Derived from RX-8025 driver: 
++// Copyright (C) 2009 Wolfgang Grandegger <wg@grandegger.com>
++// 
++// Copyright (C) 2005 by Digi International Inc.
++// All rights reserved.
++// 
++// Modified by fengjh at rising.com.cn
++// <http://lists.lm-sensors.org/mailman/listinfo/lm-sensors>
++// 2006.11
++// 
++// Code cleanup by Sergei Poselenov, <sposelenov@emcraft.com>
++// Converted to new style by Wolfgang Grandegger <wg@grandegger.com>
++// Alarm and periodic interrupt added by Dmitry Rakhchev <rda@emcraft.com>
++//
++// 
++// This driver software is distributed as is, without any warranty of any kind,
++// either express or implied as further specified in the GNU Public License. This
++// software may be used and distributed according to the terms of the GNU Public
++// License, version 2 as published by the Free Software Foundation.
++// See the file COPYING in the main directory of this archive for more details.
++//
++// You should have received a copy of the GNU General Public License along with
++// this program. If not, see <http://www.gnu.org/licenses/>.
++//======================================================================
++
++#if 0
++#define DEBUG
++#include <linux/device.h>
++#undef DEBUG
++#endif 
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/slab.h>
++#include <linux/init.h>
++#include <linux/bcd.h>
++#include <linux/i2c.h>
++#include <linux/list.h>
++#include <linux/rtc.h>
++#include <linux/of_gpio.h>
++
++#include <linux/of.h>
++#include <linux/of_device.h>
++#include <linux/of_irq.h>
++#include <linux/interrupt.h>
++#include <linux/input.h>
++
++
++// RX-8010 Register definitions
++#define RX8010_REG_SEC		0x10
++#define RX8010_REG_MIN		0x11
++#define RX8010_REG_HOUR		0x12
++#define RX8010_REG_WDAY		0x13
++#define RX8010_REG_MDAY		0x14
++#define RX8010_REG_MONTH	0x15
++#define RX8010_REG_YEAR		0x16
++// 0x17 is reserved
++#define RX8010_REG_ALMIN	0x18
++#define RX8010_REG_ALHOUR	0x19
++#define RX8010_REG_ALWDAY	0x1A
++#define RX8010_REG_TCOUNT0	0x1B
++#define RX8010_REG_TCOUNT1	0x1C
++#define RX8010_REG_EXT		0x1D
++#define RX8010_REG_FLAG		0x1E
++#define RX8010_REG_CTRL		0x1F
++#define RX8010_REG_USER0	0x20
++#define RX8010_REG_USER1	0x21
++#define RX8010_REG_USER2	0x22
++#define RX8010_REG_USER3	0x23
++#define RX8010_REG_USER4	0x24
++#define RX8010_REG_USER5	0x25
++#define RX8010_REG_USER6	0x26
++#define RX8010_REG_USER7	0x27
++#define RX8010_REG_USER8	0x28
++#define RX8010_REG_USER9	0x29
++#define RX8010_REG_USERA	0x2A
++#define RX8010_REG_USERB	0x2B
++#define RX8010_REG_USERC	0x2C
++#define RX8010_REG_USERD	0x2D
++#define RX8010_REG_USERE	0x2E
++#define RX8010_REG_USERF	0x2F
++// 0x30 is reserved
++// 0x31 is reserved
++#define RX8010_REG_IRQ		0x32
++
++// Extension Register (1Dh) bit positions
++#define RX8010_BIT_EXT_TSEL		(7 << 0)
++#define RX8010_BIT_EXT_WADA		(1 << 3)
++#define RX8010_BIT_EXT_TE		(1 << 4)
++#define RX8010_BIT_EXT_USEL		(1 << 5)
++#define RX8010_BIT_EXT_FSEL		(3 << 6)
++
++// Flag Register (1Eh) bit positions
++#define RX8010_BIT_FLAG_VLF		(1 << 1)
++#define RX8010_BIT_FLAG_AF		(1 << 3)
++#define RX8010_BIT_FLAG_TF		(1 << 4)
++#define RX8010_BIT_FLAG_UF		(1 << 5)
++
++// Control Register (1Fh) bit positions
++#define RX8010_BIT_CTRL_TSTP	(1 << 2)
++#define RX8010_BIT_CTRL_AIE		(1 << 3)
++#define RX8010_BIT_CTRL_TIE		(1 << 4)
++#define RX8010_BIT_CTRL_UIE		(1 << 5)
++#define RX8010_BIT_CTRL_STOP	(1 << 6)
++#define RX8010_BIT_CTRL_TEST	(1 << 7)
++
++
++static const struct i2c_device_id rx8010_id[] = {
++	{ "rx8010", 0 },
++	{ }
++};
++MODULE_DEVICE_TABLE(i2c, rx8010_id);
++
++struct rx8010_data {
++	struct i2c_client *client;
++	struct rtc_device *rtc;
++	struct work_struct work_1;
++	struct work_struct work_2;
++	u8 ctrlreg;
++	int irq_1;
++	int irq_2;
++	unsigned exiting:1;
++};
++
++typedef struct {
++	u8 number;
++	u8 value;
++}reg_data;
++
++#define SE_RTC_REG_READ		_IOWR('p', 0x20, reg_data)		
++#define SE_RTC_REG_WRITE	_IOW('p',  0x21, reg_data)	
++
++//----------------------------------------------------------------------
++// rx8010_read_reg()
++// reads a rx8010 register (see Register defines)
++// See also rx8010_read_regs() to read multiple registers.
++//
++//----------------------------------------------------------------------
++static int rx8010_read_reg(struct i2c_client *client, int number, u8 *value)
++{
++	int ret = i2c_smbus_read_byte_data(client, number) ;
++
++	//check for error
++	if (ret < 0) {
++		dev_err(&client->dev, "Unable to read register #%d\n", number);
++		return ret;
++	}
++
++	*value = ret;
++	return 0;
++}
++
++//----------------------------------------------------------------------
++// rx8010_read_regs()
++// reads a specified number of rx8010 registers (see Register defines)
++// See also rx8010_read_reg() to read single register.
++//
++//----------------------------------------------------------------------
++static int rx8010_read_regs(struct i2c_client *client, int number, u8 length, u8 *values)
++{
++	int ret = i2c_smbus_read_i2c_block_data(client, number, length, values);
++
++	//check for length error
++	if (ret != length) {
++		dev_err(&client->dev, "Unable to read registers #%d..#%d\n", number, number + length - 1);
++		return ret < 0 ? ret : -EIO;
++	}
++
++	return 0;
++}
++
++//----------------------------------------------------------------------
++// rx8010_write_reg()
++// writes a rx8010 register (see Register defines)
++// See also rx8010_write_regs() to write multiple registers.
++//
++//----------------------------------------------------------------------
++static int rx8010_write_reg(struct i2c_client *client, int number, u8 value)
++{
++	int ret = i2c_smbus_write_byte_data(client, number, value);
++
++	//check for error
++	if (ret)
++		dev_err(&client->dev, "Unable to write register #%d\n", number);
++
++	return ret;
++}
++
++//----------------------------------------------------------------------
++// rx8010_write_regs()
++// writes a specified number of rx8010 registers (see Register defines)
++// See also rx8010_write_reg() to write a single register.
++//
++//----------------------------------------------------------------------
++static int rx8010_write_regs(struct i2c_client *client, int number, u8 length, u8 *values)
++{
++	int ret = i2c_smbus_write_i2c_block_data(client, number, length, values);
++
++	//check for error
++	if (ret)
++		dev_err(&client->dev, "Unable to write registers #%d..#%d\n", number, number + length - 1);
++
++	return ret;
++}
++
++//----------------------------------------------------------------------
++// rx8010_irq_1()
++// irq handler
++//
++//----------------------------------------------------------------------
++static irqreturn_t rx8010_irq_1(int irq, void *dev_id)
++{
++	struct i2c_client *client = dev_id;
++	struct rx8010_data *rx8010 = i2c_get_clientdata(client);
++
++	disable_irq_nosync(irq);
++	schedule_work(&rx8010->work_1);
++
++
++	return IRQ_HANDLED;
++}
++
++//----------------------------------------------------------------------
++// rx8010_work_1()
++//
++//----------------------------------------------------------------------
++static void rx8010_work_1(struct work_struct *work)
++{
++	struct rx8010_data *rx8010 = container_of(work, struct rx8010_data, work_1);
++	struct i2c_client *client = rx8010->client;
++	struct mutex *lock = &rx8010->rtc->ops_lock;
++	u8 status;
++
++	mutex_lock(lock);
++	
++	if (rx8010_read_reg(client, RX8010_REG_FLAG, &status))
++		goto out;
++
++	// check VLF
++	if ((status & RX8010_BIT_FLAG_VLF))
++		dev_warn(&client->dev, "Frequency stop was detected, probably due to a supply voltage drop\n");
++			 
++	dev_dbg(&client->dev, "%s: RX8010_REG_FLAG: %xh\n", __func__, status);
++
++	// periodic "fixed-cycle" timer
++	if (status & RX8010_BIT_FLAG_TF) {
++		status &= ~RX8010_BIT_FLAG_TF;
++		local_irq_disable();
++		rtc_update_irq(rx8010->rtc, 1, RTC_PF | RTC_IRQF);
++		local_irq_enable();
++	}
++
++	// alarm function
++	if (status & RX8010_BIT_FLAG_AF) {
++		status &= ~RX8010_BIT_FLAG_AF;
++		local_irq_disable();
++		rtc_update_irq(rx8010->rtc, 1, RTC_AF | RTC_IRQF);
++		local_irq_enable();
++	}
++	
++	// time update function
++	if (status & RX8010_BIT_FLAG_UF) {
++		status &= ~RX8010_BIT_FLAG_UF;
++		local_irq_disable();
++		rtc_update_irq(rx8010->rtc, 1, RTC_UF | RTC_IRQF);
++		local_irq_enable();
++	}
++
++	// acknowledge IRQ (clear flags)
++	rx8010_write_reg(client, RX8010_REG_FLAG, status);		
++
++out:
++	if (!rx8010->exiting)
++	{
++		if (rx8010->irq_1 > 0)
++			enable_irq(rx8010->irq_1);
++		else
++			enable_irq(client->irq);
++	}	
++
++	mutex_unlock(lock);
++}
++
++//----------------------------------------------------------------------
++// rx8010_irq_2()
++// irq handler
++//
++//----------------------------------------------------------------------
++static irqreturn_t rx8010_irq_2(int irq, void *dev_id)
++{
++	struct i2c_client *client = dev_id;
++	struct rx8010_data *rx8010 = i2c_get_clientdata(client);
++
++	disable_irq_nosync(irq);
++	schedule_work(&rx8010->work_2);
++
++
++	return IRQ_HANDLED;
++}
++
++//----------------------------------------------------------------------
++// rx8010_work_2()
++//
++//----------------------------------------------------------------------
++static void rx8010_work_2(struct work_struct *work)
++{
++	struct rx8010_data *rx8010 = container_of(work, struct rx8010_data, work_2);
++	struct i2c_client *client = rx8010->client;
++	struct mutex *lock = &rx8010->rtc->ops_lock;
++	u8 status;
++
++	mutex_lock(lock);
++	
++	if (rx8010_read_reg(client, RX8010_REG_FLAG, &status))
++		goto out;
++
++	// check VLF
++	if ((status & RX8010_BIT_FLAG_VLF))
++		dev_warn(&client->dev, "Frequency stop was detected, \
++								probably due to a supply voltage drop\n");
++			 
++	dev_dbg(&client->dev, "%s: RX8010_REG_FLAG: %xh\n", __func__, status);
++
++	// periodic "fixed-cycle" timer
++	if (status & RX8010_BIT_FLAG_TF) {
++		status &= ~RX8010_BIT_FLAG_TF;
++		local_irq_disable();
++		rtc_update_irq(rx8010->rtc, 1, RTC_PF | RTC_IRQF);
++		local_irq_enable();
++	}
++
++	// acknowledge IRQ (clear flags)
++	rx8010_write_reg(client, RX8010_REG_FLAG, status);		
++
++out:
++	if (!rx8010->exiting)
++	{
++		if (rx8010->irq_2 > 0)
++			enable_irq(rx8010->irq_2);
++		else
++			enable_irq(client->irq);
++	}	
++
++	mutex_unlock(lock);
++}
++
++//----------------------------------------------------------------------
++// rx8010_get_time()
++// gets the current time from the rx8010 registers
++//
++//----------------------------------------------------------------------
++static int rx8010_get_time(struct device *dev, struct rtc_time *dt)
++{
++	struct rx8010_data *rx8010 = dev_get_drvdata(dev);
++	u8 date[7];
++	int err;
++
++	err = rx8010_read_regs(rx8010->client, RX8010_REG_SEC, 7, date);
++	if (err)
++		return err;
++
++	dev_dbg(dev, "%s: read 0x%02x 0x%02x "
++		"0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\n", __func__,
++		date[0], date[1], date[2], date[3], date[4], date[5], date[6]);
++
++	//Note: need to subtract 0x10 for index as register offset starts at 0x10
++	dt->tm_sec = bcd2bin(date[RX8010_REG_SEC-0x10] & 0x7f);
++	dt->tm_min = bcd2bin(date[RX8010_REG_MIN-0x10] & 0x7f);
++	dt->tm_hour = bcd2bin(date[RX8010_REG_HOUR-0x10] & 0x3f);	//only 24-hour clock
++	dt->tm_mday = bcd2bin(date[RX8010_REG_MDAY-0x10] & 0x3f);
++	dt->tm_mon = bcd2bin(date[RX8010_REG_MONTH-0x10] & 0x1f) - 1;
++	dt->tm_year = bcd2bin(date[RX8010_REG_YEAR-0x10]);
++	dt->tm_wday = bcd2bin(date[RX8010_REG_WDAY-0x10] & 0x7f);
++
++	if (dt->tm_year < 70)
++		dt->tm_year += 100;
++
++	dev_dbg(dev, "%s: date %ds %dm %dh %dmd %dm %dy\n", __func__,
++		dt->tm_sec, dt->tm_min, dt->tm_hour,
++		dt->tm_mday, dt->tm_mon, dt->tm_year);
++
++	return rtc_valid_tm(dt);
++}
++
++//----------------------------------------------------------------------
++// rx8010_set_time()
++// Sets the current time in the rx8010 registers
++//
++// BUG: The HW assumes every year that is a multiple of 4 to be a leap
++// year. Next time this is wrong is 2100, which will not be a leap year
++//
++// Note: If STOP is not set/cleared, the clock will start when the seconds
++//       register is written
++//
++//----------------------------------------------------------------------
++static int rx8010_set_time(struct device *dev, struct rtc_time *dt)
++{
++	struct rx8010_data *rx8010 = dev_get_drvdata(dev);
++	u8 date[7];
++	u8 ctrl;
++	int ret;
++
++	//set STOP bit before changing clock/calendar
++	rx8010_read_reg(rx8010->client, RX8010_REG_CTRL, &ctrl);
++	rx8010->ctrlreg = ctrl | RX8010_BIT_CTRL_STOP;
++	rx8010_write_reg(rx8010->client, RX8010_REG_CTRL, rx8010->ctrlreg);
++	
++	//Note: need to subtract 0x10 for index as register offset starts at 0x10
++	date[RX8010_REG_SEC-0x10] = bin2bcd(dt->tm_sec);
++	date[RX8010_REG_MIN-0x10] = bin2bcd(dt->tm_min);
++	date[RX8010_REG_HOUR-0x10] = bin2bcd(dt->tm_hour);		//only 24hr time
++
++	date[RX8010_REG_MDAY-0x10] = bin2bcd(dt->tm_mday);
++	date[RX8010_REG_MONTH-0x10] = bin2bcd(dt->tm_mon + 1);
++	date[RX8010_REG_YEAR-0x10] = bin2bcd(dt->tm_year % 100);
++	date[RX8010_REG_WDAY-0x10] = bin2bcd(dt->tm_wday);
++
++	dev_dbg(dev, "%s: write 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\n",
++		__func__, date[0], date[1], date[2], date[3], date[4], date[5], date[6]);
++
++	ret =  rx8010_write_regs(rx8010->client, RX8010_REG_SEC, 7, date);
++
++	//clear STOP bit after changing clock/calendar
++	rx8010_read_reg(rx8010->client, RX8010_REG_CTRL, &ctrl);
++	rx8010->ctrlreg = ctrl & ~RX8010_BIT_CTRL_STOP;
++	rx8010_write_reg(rx8010->client, RX8010_REG_CTRL, rx8010->ctrlreg);
++
++	return ret;
++}
++
++//----------------------------------------------------------------------
++// rx8010_init_client()
++// initializes the rx8010
++//
++//----------------------------------------------------------------------
++static int rx8010_init_client(struct i2c_client *client, int *need_reset)
++{
++	struct rx8010_data *rx8010 = i2c_get_clientdata(client);
++	u8 ctrl[3];
++	int need_clear = 0;
++	int err;
++
++	//set reserved register 0x17 with specified value of 0xD8
++	err = rx8010_write_reg(client, 0x17, 0xD8);
++	if (err)
++		goto out;
++	
++	//set reserved register 0x30 with specified value of 0x00
++	err = rx8010_write_reg(client, 0x30, 0x00);
++	if (err)
++		goto out;
++
++	//set reserved register 0x31 with specified value of 0x08
++	err = rx8010_write_reg(client, 0x31, 0x08);
++	if (err)
++		goto out;
++		
++	//set reserved register 0x32 with default value
++	err = rx8010_write_reg(client, RX8010_REG_IRQ, 0x00);
++	if (err)
++		goto out;		
++		
++
++	//get current extension, flag, control register values
++	err = rx8010_read_regs(rx8010->client, RX8010_REG_EXT, 3, ctrl);
++	if (err)
++		goto out;
++	
++	//check for VLF Flag (set at power-on)
++	if ((ctrl[1] & RX8010_BIT_FLAG_VLF)) {
++		dev_warn(&client->dev, "Frequency stop was detected, probably due to a supply voltage drop\n");
++		*need_reset = 1;
++	}
++
++	//check for Alarm Flag
++	if (ctrl[1] & RX8010_BIT_FLAG_AF) {
++		dev_warn(&client->dev, "Alarm was detected\n");
++		need_clear = 1;
++	}
++
++	//check for Periodic Timer Flag
++	if (ctrl[1] & RX8010_BIT_FLAG_TF) {
++		dev_warn(&client->dev, "Periodic timer was detected\n");
++		need_clear = 1;
++	}
++	
++	//check for Update Timer Flag
++	if (ctrl[1] & RX8010_BIT_FLAG_UF) {
++		dev_warn(&client->dev, "Update timer was detected\n");
++		need_clear = 1;
++	}
++
++	//reset or clear needed?
++	if (*need_reset) {
++		//clear 1d, 1e, 1f registers
++		ctrl[0] = ctrl[1] = ctrl[2] = 0;
++		err = rx8010_write_regs(client, RX8010_REG_EXT, 3, ctrl);
++		if (err)
++			goto out;
++	}
++	else if(need_clear){
++		//clear flag register
++		err = rx8010_write_reg(client, RX8010_REG_FLAG, 0x00);
++		if (err)
++			goto out;
++	}
++	
++	//set "test bit" and reserved bits of control register zero
++	rx8010->ctrlreg = (ctrl[2] & ~RX8010_BIT_CTRL_TEST);		
++out:
++	return err;
++}
++
++//----------------------------------------------------------------------
++// rx8010_read_alarm()
++// reads current Alarm 
++//
++// Notes: - currently filters the AE bits (bit 7)
++//        - assumes WADA setting is week (week/day) 
++//----------------------------------------------------------------------
++static int rx8010_read_alarm(struct device *dev, struct rtc_wkalrm *t)
++{
++	struct rx8010_data *rx8010 = dev_get_drvdata(dev);
++	struct i2c_client *client = rx8010->client;
++	u8 alarmvals[3];		//minute, hour, week/day values
++	u8 ctrl[3];				//extension, flag, control values
++	int err;
++
++	if (client->irq <= 0)
++		return -EINVAL;
++
++	//get current minute, hour, week/day alarm values
++	err = rx8010_read_regs(client, RX8010_REG_ALMIN, 3, alarmvals);
++	if (err)
++		return err;
++	dev_dbg(dev, "%s: minutes:0x%02x hours:0x%02x week/day:0x%02x\n",
++		__func__, alarmvals[0], alarmvals[1], alarmvals[2]);
++
++	
++	//get current extension, flag, control register values
++	err = rx8010_read_regs(client, RX8010_REG_EXT, 3, ctrl);
++	if (err)
++		return err;
++	dev_dbg(dev, "%s: extension:0x%02x flag:0x%02x control:0x%02x \n",
++		__func__, ctrl[0], ctrl[1], ctrl[2]);
++
++	// Hardware alarm precision is 1 minute
++	t->time.tm_sec = 0;
++	t->time.tm_min = bcd2bin(alarmvals[0] & 0x7f);		//0x7f filters AE bit currently
++	t->time.tm_hour = bcd2bin(alarmvals[1] & 0x3f);		//0x3f filters AE bit currently, also 24hr only
++
++	t->time.tm_wday = -1;
++	t->time.tm_mday = -1;
++	t->time.tm_mon = -1;
++	t->time.tm_year = -1;
++
++	dev_dbg(dev, "%s: date: %ds %dm %dh %dmd %dm %dy\n",
++		__func__,
++		t->time.tm_sec, t->time.tm_min, t->time.tm_hour,
++		t->time.tm_mday, t->time.tm_mon, t->time.tm_year);
++		
++	t->enabled = !!(rx8010->ctrlreg & RX8010_BIT_CTRL_AIE);		//check if interrupt is enabled
++	t->pending = (ctrl[1] & RX8010_BIT_FLAG_AF) && t->enabled;	//check if flag is triggered
++
++	return err;
++}
++
++//----------------------------------------------------------------------
++// rx8010_set_alarm()
++// sets Alarm 
++//
++// Notes: - currently filters the AE bits (bit 7)
++//        - assumes WADA setting is week (week/day) 
++//----------------------------------------------------------------------
++static int rx8010_set_alarm(struct device *dev, struct rtc_wkalrm *t)
++{
++	struct i2c_client *client = to_i2c_client(dev);
++	struct rx8010_data *rx8010 = dev_get_drvdata(dev);
++	u8 alarmvals[3];		//minute, hour, day
++	u8 extreg;				//extension register
++	u8 flagreg;				//flag register
++	int err;
++	 
++	if (client->irq <= 0)
++		return -EINVAL;
++		
++	//get current extension register
++	err = rx8010_read_reg(client, RX8010_REG_EXT, &extreg);
++	if (err <0)
++		return err;
++	
++	//get current flag register
++	err = rx8010_read_reg(client, RX8010_REG_FLAG, &flagreg);
++	if (err <0)
++		return err;
++
++	// Hardware alarm precision is 1 minute
++	alarmvals[0] = bin2bcd(t->time.tm_min);
++	alarmvals[1] = bin2bcd(t->time.tm_hour);
++	alarmvals[2] = bin2bcd(t->time.tm_mday);
++	dev_dbg(dev, "%s: write 0x%02x 0x%02x 0x%02x\n", __func__, alarmvals[0], alarmvals[1], alarmvals[2]);
++
++	//check interrupt enable and disable
++	if (rx8010->ctrlreg & RX8010_BIT_CTRL_AIE) {
++		rx8010->ctrlreg &= ~RX8010_BIT_CTRL_AIE;
++		err = rx8010_write_reg(rx8010->client, RX8010_REG_CTRL, rx8010->ctrlreg);
++		if (err)
++			return err;
++	}
++	
++	//write the new minute and hour values
++	//Note:assume minute and hour values will be enabled. Bit 7 of each of the
++	//     minute, hour, week/day register can be set which will "disable" the
++	//     register from triggering an alarm. See the RX8010 spec for more information
++	err = rx8010_write_regs(rx8010->client, RX8010_REG_ALMIN, 2, alarmvals);
++	if (err)
++		return err;
++
++	//set Week/Day bit
++	// Week setting is typically not used, so we will assume "day" setting
++	extreg |= RX8010_BIT_EXT_WADA;		//set to "day of month"
++	err = rx8010_write_reg(rx8010->client, RX8010_REG_EXT, extreg);
++	if (err)
++		return err;
++
++	//set Day of Month register
++	if (alarmvals[2] == 0) {
++		alarmvals[2] |= 0x80;	//turn on AE bit to ignore day of month (no zero day)
++		err = rx8010_write_reg(rx8010->client, RX8010_REG_ALWDAY, alarmvals[2]);
++	}
++	else {
++		err = rx8010_write_reg(rx8010->client, RX8010_REG_ALWDAY, alarmvals[2]);
++	}
++	if (err)
++		return err;
++
++	//clear Alarm Flag
++	flagreg &= ~RX8010_BIT_FLAG_AF;
++	err = rx8010_write_reg(rx8010->client, RX8010_REG_FLAG, flagreg);
++	if (err)
++		return err;
++
++	//re-enable interrupt if required
++	if (t->enabled) {
++
++		if ( rx8010->rtc->uie_rtctimer.enabled )
++			rx8010->ctrlreg |= RX8010_BIT_CTRL_UIE;								//set update interrupt enable
++		if ( rx8010->rtc->aie_timer.enabled )
++			rx8010->ctrlreg |= (RX8010_BIT_CTRL_AIE | RX8010_BIT_CTRL_UIE);		//set alarm interrupt enable
++			
++		err = rx8010_write_reg(rx8010->client, RX8010_REG_CTRL, rx8010->ctrlreg);
++		if (err)
++			return err;
++	}
++
++	return 0;
++}
++
++//----------------------------------------------------------------------
++// rx8010_alarm_irq_enable()
++// sets enables Alarm IRQ
++//
++// Todo: - 
++//
++//----------------------------------------------------------------------
++static int rx8010_alarm_irq_enable(struct device *dev, unsigned int enabled)
++{
++	struct i2c_client *client = to_i2c_client(dev);
++	struct rx8010_data *rx8010 = dev_get_drvdata(dev);
++	u8 flagreg;
++	u8 ctrl;
++	int err;
++	
++	//get the current ctrl settings
++	ctrl = rx8010->ctrlreg;
++
++	if (enabled)
++	{
++		if ( rx8010->rtc->uie_rtctimer.enabled )
++			ctrl |= RX8010_BIT_CTRL_UIE;								//set update interrupt enable
++		if ( rx8010->rtc->aie_timer.enabled )
++			ctrl |= (RX8010_BIT_CTRL_AIE | RX8010_BIT_CTRL_UIE);		//set alarm interrupt enable		
++	}
++	else
++	{
++		if ( ! rx8010->rtc->uie_rtctimer.enabled )
++			ctrl &= ~RX8010_BIT_CTRL_UIE;								//clear update interrupt enable
++		if ( ! rx8010->rtc->aie_timer.enabled )
++		{
++			if ( rx8010->rtc->uie_rtctimer.enabled )
++				ctrl &= ~RX8010_BIT_CTRL_AIE;
++			else
++				ctrl &= ~(RX8010_BIT_CTRL_AIE | RX8010_BIT_CTRL_UIE);	//clear alarm interrupt enable
++		}		
++	}
++
++	//clear alarm flag
++	err = rx8010_read_reg(client, RX8010_REG_FLAG, &flagreg);
++	if (err <0)
++		return err;
++	flagreg &= ~RX8010_BIT_FLAG_AF;
++	err = rx8010_write_reg(rx8010->client, RX8010_REG_FLAG, flagreg);
++	if (err)
++		return err;
++	
++	//update the Control register if the setting changed
++	if (ctrl != rx8010->ctrlreg) {
++		rx8010->ctrlreg = ctrl;
++		err = rx8010_write_reg(rx8010->client, RX8010_REG_CTRL, rx8010->ctrlreg);
++		if (err)
++			return err;
++	}
++	
++	return 0;
++}
++
++//---------------------------------------------------------------------------
++// rx8010_ioctl()
++//
++//---------------------------------------------------------------------------
++static int rx8010_ioctl(struct device *dev, unsigned int cmd, unsigned long arg)
++{
++	struct i2c_client *client = to_i2c_client(dev);
++	//struct rx8010_data *rx8010 = dev_get_drvdata(dev);
++	//struct mutex *lock = &rx8010->rtc->ops_lock;
++	int ret = 0;
++	int tmp;
++	void __user *argp = (void __user *)arg;
++	reg_data reg;
++	
++	dev_dbg(dev, "%s: cmd=%x\n", __func__, cmd);
++
++	switch (cmd) {
++		case SE_RTC_REG_READ:
++			if (copy_from_user(&reg, argp, sizeof(reg)))
++				return -EFAULT;
++			if ( reg.number < RX8010_REG_SEC || reg.number > RX8010_REG_IRQ )
++				return -EFAULT;
++			//mutex_lock(lock);
++			ret = rx8010_read_reg(client, reg.number, &reg.value);
++			//mutex_unlock(lock);
++			if (! ret )				
++				return copy_to_user(argp, &reg, sizeof(reg)) ? -EFAULT : 0;
++			break;
++			
++		case SE_RTC_REG_WRITE:
++			if (copy_from_user(&reg, argp, sizeof(reg)))
++				return -EFAULT;
++			if ( reg.number < RX8010_REG_SEC || reg.number > RX8010_REG_IRQ )
++				return -EFAULT;				
++			//mutex_lock(lock);
++			ret = rx8010_write_reg(client, reg.number, reg.value);
++			//mutex_unlock(lock);
++			break;
++	
++		case RTC_VL_READ:
++			//mutex_lock(lock);
++			ret = rx8010_read_reg(client, RX8010_REG_FLAG, &reg.value);
++			//mutex_unlock(lock);
++			if (! ret)	
++			{
++				tmp = !!(reg.value & RX8010_BIT_FLAG_VLF);
++				return copy_to_user(argp, &tmp, sizeof(tmp)) ? -EFAULT : 0;
++			}			
++			break;			
++				
++		case RTC_VL_CLR:
++			//mutex_lock(lock);
++			ret = rx8010_read_reg(client, RX8010_REG_FLAG, &reg.value);
++			if (! ret)
++			{
++				reg.value &= ~RX8010_BIT_FLAG_VLF;
++				ret = rx8010_write_reg(client, RX8010_REG_FLAG, reg.value);
++			}
++			//mutex_unlock(lock);
++			break;
++			
++		default:
++			return -ENOIOCTLCMD;			
++	}
++	
++	return ret;
++}
++
++static struct rtc_class_ops rx8010_rtc_ops = {
++	.read_time = rx8010_get_time,
++	.set_time = rx8010_set_time,
++	.read_alarm = rx8010_read_alarm,
++	.set_alarm = rx8010_set_alarm,
++	.alarm_irq_enable = rx8010_alarm_irq_enable,
++	.ioctl = rx8010_ioctl,
++};
++
++//----------------------------------------------------------------------
++// rx8010_probe()
++// probe routine for the rx8010 driver
++//
++//----------------------------------------------------------------------
++static int rx8010_probe(struct i2c_client *client, const struct i2c_device_id *id)
++{
++	struct device_node *np = client->dev.of_node; 
++	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
++	struct rx8010_data *rx8010;
++	int err, gpio, i, irqs_success = 0, need_reset = 0;
++	const char * irq_name[2] = {"rx8010-irq_1", "rx8010-irq_2"};
++
++	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_I2C_BLOCK)) {
++		dev_err(&adapter->dev, "doesn't support required functionality\n");
++		err = -EIO;
++		goto errout;
++	}
++
++	rx8010 = devm_kzalloc(&client->dev, sizeof(struct rx8010_data), GFP_KERNEL);
++	if (!rx8010) {
++		dev_err(&adapter->dev, "failed to alloc memory\n");
++		err = -ENOMEM;
++		goto errout;
++	}
++
++	rx8010->client = client;
++	i2c_set_clientdata(client, rx8010);
++
++	err = rx8010_init_client(client, &need_reset);
++	if (err)
++		goto errout;
++
++
++	if (need_reset) {
++		struct rtc_time tm;
++		rtc_time_to_tm(0, &tm);		// set to 1970/1/1
++		rx8010_set_time(&client->dev, &tm);
++		dev_warn(&client->dev, " - time reset to 1970/1/1\n");
++	}
++
++	rx8010->rtc = rtc_device_register(client->name, &client->dev, &rx8010_rtc_ops, THIS_MODULE);
++	
++	if (IS_ERR(rx8010->rtc)) {
++		err = PTR_ERR(rx8010->rtc);
++		dev_err(&client->dev, "unable to register the class device\n");
++		goto errout;
++	}
++
++	// get interrupts
++	rx8010->irq_1 = rx8010->irq_2 = -1;
++	for ( i=0; i < 2; i++ )
++	{
++		gpio = of_get_named_gpio(np, irq_name[i], 0);
++		if (gpio_is_valid(gpio)) {
++			int irq;
++			err = devm_gpio_request_one(&client->dev, gpio, GPIOF_DIR_IN, 
++															irq_name[i]);
++			if (err) {
++				dev_err(&client->dev, "cannot request %s\n", irq_name[i]);
++				goto errout_reg;
++			}
++			irq = gpio_to_irq(gpio);
++			dev_dbg(&client->dev, "%s %d\n", irq_name[i], irq);
++			if (irq <= 0) {
++				dev_warn(&client->dev, "Failed to "
++					"convert gpio #%d to %s\n",
++					gpio, irq_name[i]);
++				goto errout_reg;
++			}
++			err = devm_request_threaded_irq(&client->dev,irq, NULL, 
++											i==0 ? rx8010_irq_1 : rx8010_irq_2, 
++											IRQF_TRIGGER_LOW | IRQF_ONESHOT,
++											irq_name[i], 
++											client);	
++			if (err) {
++				dev_err(&client->dev, "unable to request %s\n", irq_name[i]);
++				goto errout_reg;
++			}
++			if (i == 0)
++			{
++				rx8010->irq_1 = irq;
++				INIT_WORK(&rx8010->work_1, rx8010_work_1);
++			}
++			else
++			{
++				rx8010->irq_2 = irq;
++				INIT_WORK(&rx8010->work_2, rx8010_work_2);
++			}
++			irqs_success++;		
++		} else {
++				dev_warn(&client->dev, "%s missing or invalid\n", 
++										irq_name[i]);
++		}
++	}
++	
++	// another irq request try if one failed above
++	if ( ! irqs_success && client->irq > 0 ){
++		dev_info(&client->dev, "IRQ %d supplied\n", client->irq);
++		err = devm_request_threaded_irq(&client->dev,client->irq, NULL, 
++										rx8010_irq_1, 
++										IRQF_TRIGGER_LOW | IRQF_ONESHOT,
++										"rx8010", client);
++		
++		if (err) {
++			dev_err(&client->dev, "unable to request IRQ\n");
++			goto errout_reg;
++		}
++		INIT_WORK(&rx8010->work_1, rx8010_work_1);	
++	}
++		
++
++	rx8010->rtc->irq_freq = 1;
++	rx8010->rtc->max_user_freq = 1;
++		
++	return 0;
++
++errout_reg:
++	rtc_device_unregister(rx8010->rtc);
++
++errout:
++	dev_err(&adapter->dev, "probing for rx8010 failed\n");
++	return err;
++}
++
++//----------------------------------------------------------------------
++// rx8010_remove()
++// remove routine for the rx8010 driver
++//
++//----------------------------------------------------------------------
++static int rx8010_remove(struct i2c_client *client)
++{
++	struct rx8010_data *rx8010 = i2c_get_clientdata(client);
++	struct mutex *lock = &rx8010->rtc->ops_lock;
++
++	if (client->irq > 0 || rx8010->irq_1 > 0 || rx8010->irq_2 > 0) {
++		mutex_lock(lock);
++		rx8010->exiting = 1;
++		mutex_unlock(lock);
++
++		//cancel_work
++		if (rx8010->irq_1 > 0 || client->irq > 0)
++			cancel_work_sync(&rx8010->work_1);
++		if (rx8010->irq_2 > 0)
++			cancel_work_sync(&rx8010->work_2);
++	}
++
++	rtc_device_unregister(rx8010->rtc);
++	
++	return 0;
++}
++
++static struct i2c_driver rx8010_driver = {
++	.driver = {
++		.name = "rtc-rx8010",
++		.owner = THIS_MODULE,
++	},
++	.probe		= rx8010_probe,
++	.remove		= rx8010_remove,
++	.id_table	= rx8010_id,
++};
++
++module_i2c_driver(rx8010_driver);
++
++MODULE_AUTHOR("Dennis Henderson <henderson.dennis@erd.epson.com>");
++MODULE_DESCRIPTION("RX-8010 SJ RTC driver");
++MODULE_LICENSE("GPL");
+-- 
+2.8.1
+
diff --git a/recipes-kernel/linux/linux-advantech-4.1/0002-ahci_imx-Make-receive-DPLL-mode-configurable.patch b/recipes-kernel/linux/linux-advantech-4.1/0002-ahci_imx-Make-receive-DPLL-mode-configurable.patch
new file mode 100644
index 0000000..1557e68
--- /dev/null
+++ b/recipes-kernel/linux/linux-advantech-4.1/0002-ahci_imx-Make-receive-DPLL-mode-configurable.patch
@@ -0,0 +1,50 @@
+From 6f2dae2ee19cfc972335511053a5b94cc30879f7 Mon Sep 17 00:00:00 2001
+From: Justin Waters <justin.waters@timesys.com>
+Date: Wed, 2 Mar 2016 11:47:13 -0500
+Subject: [PATCH 2/7] ahci_imx: Make receive DPLL mode configurable
+
+---
+ drivers/ata/ahci_imx.c | 13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/ata/ahci_imx.c b/drivers/ata/ahci_imx.c
+index 3fccbed..4a91fe3 100644
+--- a/drivers/ata/ahci_imx.c
++++ b/drivers/ata/ahci_imx.c
+@@ -472,6 +472,13 @@ static const struct reg_value gpr13_rx_eq[] = {
+ 	{ 4000, IMX6Q_GPR13_SATA_RX_EQ_VAL_4_0_DB },
+ };
+ 
++static const struct reg_value gpr13_rx_dpll[] = {
++	{ 0, IMX6Q_GPR13_SATA_RX_DPLL_MODE_1P_1F },
++	{ 1, IMX6Q_GPR13_SATA_RX_DPLL_MODE_2P_2F },
++	{ 2, IMX6Q_GPR13_SATA_RX_DPLL_MODE_1P_4F },
++	{ 3, IMX6Q_GPR13_SATA_RX_DPLL_MODE_2P_4F },
++};
++
+ static const struct reg_property gpr13_props[] = {
+ 	{
+ 		.name = "fsl,transmit-level-mV",
+@@ -497,6 +504,11 @@ static const struct reg_property gpr13_props[] = {
+ 		.name = "fsl,no-spread-spectrum",
+ 		.def_value = IMX6Q_GPR13_SATA_MPLL_SS_EN,
+ 		.set_value = 0,
++	}, {
++		.name = "fsl,receive-dpll-mode",
++		.values = gpr13_rx_dpll,
++		.num_values = ARRAY_SIZE(gpr13_rx_dpll),
++		.def_value = IMX6Q_GPR13_SATA_RX_DPLL_MODE_2P_4F,
+ 	},
+ };
+ 
+@@ -604,7 +616,6 @@ static int imx_ahci_probe(struct platform_device *pdev)
+ 
+ 		imxpriv->phy_params =
+ 				   IMX6Q_GPR13_SATA_RX_LOS_LVL_SATA2M |
+-				   IMX6Q_GPR13_SATA_RX_DPLL_MODE_2P_4F |
+ 				   IMX6Q_GPR13_SATA_SPD_MODE_3P0G |
+ 				   reg_value;
+ 	}
+-- 
+2.8.1
+
diff --git a/recipes-kernel/linux/linux-advantech-4.1/0003-PCI-imx6-Add-DT-bindings-to-configure-PHY-Tx-driver-.patch b/recipes-kernel/linux/linux-advantech-4.1/0003-PCI-imx6-Add-DT-bindings-to-configure-PHY-Tx-driver-.patch
new file mode 100644
index 0000000..147b736
--- /dev/null
+++ b/recipes-kernel/linux/linux-advantech-4.1/0003-PCI-imx6-Add-DT-bindings-to-configure-PHY-Tx-driver-.patch
@@ -0,0 +1,112 @@
+From 03857322243162663a3b760c92b3fab837ba9820 Mon Sep 17 00:00:00 2001
+From: Justin Waters <justin.waters@timesys.com>
+Date: Fri, 15 Jan 2016 10:24:35 -0500
+Subject: [PATCH 3/7] PCI: imx6: Add DT bindings to configure PHY Tx driver
+ settings
+
+The settings in GPR8 are dependent upon the particular layout of the
+hardware platform.  As such, they should be configurable via the device
+tree.
+
+Look up PHY Tx driver settings from the device tree.  Fall back to the
+original hard-coded values if they are not specified in the device tree.
+
+Signed-off-by: Justin Waters <justin.waters@timesys.com>
+Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
+Acked-by: Lucas Stach <l.stach@pengutronix.de>
+---
+ .../devicetree/bindings/pci/fsl,imx6q-pcie.txt     |  7 ++++
+ drivers/pci/host/pci-imx6.c                        | 41 +++++++++++++++++++---
+ 2 files changed, 43 insertions(+), 5 deletions(-)
+
+diff --git a/Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.txt b/Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.txt
+index 6fbba53..97f863e 100644
+--- a/Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.txt
++++ b/Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.txt
+@@ -13,6 +13,13 @@ Required properties:
+ - clock-names: Must include the following additional entries:
+ 	- "pcie_phy"
+ 
++Optional properties:
++- fsl,tx-deemph-gen1: Gen1 De-emphasis value. Default: 20
++- fsl,tx-deemph-gen2-3p5db: Gen2 (3.5db) De-emphasis value. Default: 20
++- fsl,tx-deemph-gen2-6db: Gen2 (6db) De-emphasis value. Default: 20
++- fsl,tx-swing-full: Gen2 TX SWING FULL value. Default: 115
++- fsl,tx-swing-low: TX launch amplitude swing_low value. Default: 115
++
+ Example:
+ 
+ 	pcie@0x01000000 {
+diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c
+index 75f15ce..3bec59a 100644
+--- a/drivers/pci/host/pci-imx6.c
++++ b/drivers/pci/host/pci-imx6.c
+@@ -59,6 +59,11 @@ struct imx6_pcie {
+ 	struct regmap		*reg_src;
+ 	void __iomem		*mem_base;
+ 	struct regulator	*pcie_phy_regulator;
++	u32			tx_deemph_gen1;
++	u32			tx_deemph_gen2_3p5db;
++	u32			tx_deemph_gen2_6db;
++	u32			tx_swing_full;
++	u32			tx_swing_low;
+ };
+ 
+ /* PCIe Root Complex registers (memory-mapped) */
+@@ -477,15 +482,20 @@ static void imx6_pcie_init_phy(struct pcie_port *pp)
+ 				IMX6Q_GPR12_LOS_LEVEL, IMX6Q_GPR12_LOS_LEVEL_9);
+ 
+ 		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR8,
+-				IMX6Q_GPR8_TX_DEEMPH_GEN1, 0 << 0);
++				IMX6Q_GPR8_TX_DEEMPH_GEN1,
++				imx6_pcie->tx_deemph_gen1 << 0);
+ 		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR8,
+-				IMX6Q_GPR8_TX_DEEMPH_GEN2_3P5DB, 0 << 6);
++				IMX6Q_GPR8_TX_DEEMPH_GEN2_3P5DB,
++				imx6_pcie->tx_deemph_gen2_3p5db << 6);
+ 		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR8,
+-				IMX6Q_GPR8_TX_DEEMPH_GEN2_6DB, 20 << 12);
++				IMX6Q_GPR8_TX_DEEMPH_GEN2_6DB,
++				imx6_pcie->tx_deemph_gen2_6db << 12);
+ 		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR8,
+-				IMX6Q_GPR8_TX_SWING_FULL, 127 << 18);
++				IMX6Q_GPR8_TX_SWING_FULL,
++				imx6_pcie->tx_swing_full << 18);
+ 		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR8,
+-				IMX6Q_GPR8_TX_SWING_LOW, 127 << 25);
++				IMX6Q_GPR8_TX_SWING_LOW,
++				imx6_pcie->tx_swing_low << 25);
+ 	}
+ 
+ 	/* configure the device type */
+@@ -1212,6 +1222,27 @@ static int __init imx6_pcie_probe(struct platform_device *pdev)
+ 		return PTR_ERR(imx6_pcie->iomuxc_gpr);
+ 	}
+ 
++	/* Grab PCIe PHY Tx Settings */
++	if (of_property_read_u32(np, "fsl,tx-deemph-gen1",
++				 &imx6_pcie->tx_deemph_gen1))
++		imx6_pcie->tx_deemph_gen1 = 20;
++
++	if (of_property_read_u32(np, "fsl,tx-deemph-gen2-3p5db",
++				 &imx6_pcie->tx_deemph_gen2_3p5db))
++		imx6_pcie->tx_deemph_gen2_3p5db = 20;
++
++	if (of_property_read_u32(np, "fsl,tx-deemph-gen2-6db",
++				 &imx6_pcie->tx_deemph_gen2_6db))
++		imx6_pcie->tx_deemph_gen2_6db = 20;
++
++	if (of_property_read_u32(np, "fsl,tx-swing-full",
++				 &imx6_pcie->tx_swing_full))
++		imx6_pcie->tx_swing_full = 115;
++
++	if (of_property_read_u32(np, "fsl,tx-swing-low",
++				 &imx6_pcie->tx_swing_low))
++		imx6_pcie->tx_swing_low = 115;
++
+ 	if (IS_ENABLED(CONFIG_EP_MODE_IN_EP_RC_SYS)) {
+ 		int i;
+ 		void *test_reg1, *test_reg2;
+-- 
+2.8.1
+
diff --git a/recipes-kernel/linux/linux-advantech-4.1/0004-input-da9063_onkey-Add-driver.patch b/recipes-kernel/linux/linux-advantech-4.1/0004-input-da9063_onkey-Add-driver.patch
new file mode 100644
index 0000000..0067df4
--- /dev/null
+++ b/recipes-kernel/linux/linux-advantech-4.1/0004-input-da9063_onkey-Add-driver.patch
@@ -0,0 +1,277 @@
+From 25b18dc1f1a91fbbb697fc3fa362f8f2d1709a7f Mon Sep 17 00:00:00 2001
+From: "Opensource [Steve Twiss]" <stwiss.opensource@diasemi.com>
+Date: Mon, 2 Feb 2015 01:32:27 -0500
+Subject: [PATCH 4/7] input: da9063_onkey: Add driver
+
+https://lkml.org/lkml/2014/3/10/424
+---
+ drivers/input/misc/Kconfig        |  10 ++
+ drivers/input/misc/Makefile       |   1 +
+ drivers/input/misc/da9063-onkey.c | 209 ++++++++++++++++++++++++++++++++++++++
+ include/linux/mfd/da9063/pdata.h  |   1 +
+ 4 files changed, 221 insertions(+)
+ create mode 100644 drivers/input/misc/da9063-onkey.c
+
+diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig
+index 5d3fc34..336d273 100644
+--- a/drivers/input/misc/Kconfig
++++ b/drivers/input/misc/Kconfig
+@@ -610,6 +610,16 @@ config INPUT_DA9055_ONKEY
+ 	  To compile this driver as a module, choose M here: the module
+ 	  will be called da9055_onkey.
+ 
++config INPUT_DA9063_ONKEY
++	tristate "Dialog DA9063 OnKey"
++	depends on MFD_DA9063
++	help
++	  Support the ONKEY of Dialog DA9063 Power Management IC as an
++	  input device reporting power button statue.
++
++	  To compile this driver as a module, choose M here: the module
++	  will be called da9063-onkey.
++
+ config INPUT_DM355EVM
+ 	tristate "TI DaVinci DM355 EVM Keypad and IR Remote"
+ 	depends on MFD_DM355EVM_MSP
+diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile
+index 361e086..d37fb32 100644
+--- a/drivers/input/misc/Makefile
++++ b/drivers/input/misc/Makefile
+@@ -25,6 +25,7 @@ obj-$(CONFIG_INPUT_CMA3000_I2C)		+= cma3000_d0x_i2c.o
+ obj-$(CONFIG_INPUT_COBALT_BTNS)		+= cobalt_btns.o
+ obj-$(CONFIG_INPUT_DA9052_ONKEY)	+= da9052_onkey.o
+ obj-$(CONFIG_INPUT_DA9055_ONKEY)	+= da9055_onkey.o
++obj-$(CONFIG_INPUT_DA9063_ONKEY)	+= da9063-onkey.o
+ obj-$(CONFIG_INPUT_DM355EVM)		+= dm355evm_keys.o
+ obj-$(CONFIG_INPUT_E3X0_BUTTON)		+= e3x0-button.o
+ obj-$(CONFIG_INPUT_DRV260X_HAPTICS)	+= drv260x.o
+diff --git a/drivers/input/misc/da9063-onkey.c b/drivers/input/misc/da9063-onkey.c
+new file mode 100644
+index 0000000..ce08954
+--- /dev/null
++++ b/drivers/input/misc/da9063-onkey.c
+@@ -0,0 +1,209 @@
++/* da9063-onkey.c - Onkey device driver for DA9063
++ * Copyright (C) 2013  Dialog Semiconductor Ltd.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++ * Library General Public License for more details.
++ */
++
++#include <linux/module.h>
++#include <linux/errno.h>
++#include <linux/input.h>
++#include <linux/interrupt.h>
++#include <linux/platform_device.h>
++#include <linux/workqueue.h>
++#include <linux/regmap.h>
++
++#include <linux/mfd/da9063/core.h>
++#include <linux/mfd/da9063/pdata.h>
++#include <linux/mfd/da9063/registers.h>
++
++struct da9063_onkey {
++	struct	da9063 *hw;
++	struct delayed_work work;
++	struct	input_dev *input;
++	int irq;
++	bool key_power;
++};
++
++static void da9063_poll_on(struct work_struct *work)
++{
++	struct da9063_onkey *onkey = container_of(work, struct da9063_onkey,
++						  work.work);
++	unsigned int val;
++	bool poll = true;
++	int ret;
++
++	/* poll to see when the pin is released */
++	ret = regmap_read(onkey->hw->regmap, DA9063_REG_STATUS_A, &val);
++	if (ret < 0) {
++		dev_err(&onkey->input->dev,
++			"Failed to read ON status: %d\n", ret);
++		goto err_poll;
++	}
++
++	if (!(val & DA9063_NONKEY)) {
++		ret = regmap_update_bits(onkey->hw->regmap,
++					 DA9063_REG_CONTROL_B,
++					 DA9063_NONKEY_LOCK, 0);
++		if (ret < 0) {
++			dev_err(&onkey->input->dev,
++				"Failed to reset the Key Delay %d\n", ret);
++			goto err_poll;
++		}
++
++		/* unmask the onkey interrupt again */
++		ret = regmap_update_bits(onkey->hw->regmap,
++					 DA9063_REG_IRQ_MASK_A,
++					 DA9063_NONKEY, 0);
++		if (ret < 0) {
++			dev_err(&onkey->input->dev,
++				"Failed to unmask the onkey IRQ: %d\n", ret);
++			goto err_poll;
++		}
++
++		input_report_key(onkey->input, KEY_POWER, 0);
++		input_sync(onkey->input);
++
++		poll = false;
++	}
++
++err_poll:
++	if (poll)
++		schedule_delayed_work(&onkey->work, 50);
++}
++
++static irqreturn_t da9063_onkey_irq_handler(int irq, void *data)
++{
++	struct da9063_onkey *onkey = data;
++	unsigned int val;
++	int ret;
++
++	ret = regmap_read(onkey->hw->regmap, DA9063_REG_STATUS_A, &val);
++	if (onkey->key_power && (ret >= 0) && (val & DA9063_NONKEY)) {
++		ret = regmap_update_bits(onkey->hw->regmap,
++					 DA9063_REG_IRQ_MASK_A,
++					 DA9063_NONKEY, 1);
++		if (ret < 0)
++			dev_err(&onkey->input->dev,
++				"Failed to mask the onkey IRQ: %d\n", ret);
++
++		input_report_key(onkey->input, KEY_POWER, 1);
++		input_sync(onkey->input);
++
++		schedule_delayed_work(&onkey->work, 0);
++		dev_dbg(&onkey->input->dev, "KEY_POWER pressed.\n");
++	} else {
++		input_report_key(onkey->input, KEY_SLEEP, 1);
++		input_sync(onkey->input);
++		input_report_key(onkey->input, KEY_SLEEP, 0);
++		input_sync(onkey->input);
++		dev_dbg(&onkey->input->dev, "KEY_SLEEP pressed.\n");
++	}
++
++	return IRQ_HANDLED;
++}
++
++static int da9063_onkey_probe(struct platform_device *pdev)
++{
++	struct da9063 *da9063 = dev_get_drvdata(pdev->dev.parent);
++	struct da9063_pdata *pdata = dev_get_platdata(da9063->dev);
++	struct da9063_onkey *onkey;
++	bool kp_tmp = true;
++	int ret = 0;
++
++	if (pdata)
++		kp_tmp = pdata->key_power;
++
++	onkey = devm_kzalloc(&pdev->dev, sizeof(struct da9063_onkey),
++			     GFP_KERNEL);
++	if (!onkey) {
++		dev_err(&pdev->dev, "Failed to allocate memory.\n");
++		ret = -ENOMEM;
++		goto err;
++	}
++
++	INIT_DELAYED_WORK(&onkey->work, da9063_poll_on);
++
++	onkey->input = devm_input_allocate_device(&pdev->dev);
++	if (!onkey->input) {
++		dev_err(&pdev->dev, "Failed to allocated input device.\n");
++		ret = -ENOMEM;
++		goto err;
++	}
++
++	ret = platform_get_irq_byname(pdev, "ONKEY");
++	if (ret < 0) {
++		dev_err(&pdev->dev, "Failed to get platform IRQ.\n");
++		goto err;
++	}
++	onkey->irq = ret;
++
++	ret = request_threaded_irq(onkey->irq, NULL,
++				   da9063_onkey_irq_handler,
++				   IRQF_TRIGGER_LOW | IRQF_ONESHOT,
++				   "ONKEY", onkey);
++	if (ret) {
++		dev_err(&pdev->dev,
++			"Failed to request input device IRQ.\n");
++		goto err;
++	}
++
++	onkey->hw = da9063;
++	onkey->key_power = kp_tmp;
++	onkey->input->evbit[0] = BIT_MASK(EV_KEY);
++	onkey->input->name = DA9063_DRVNAME_ONKEY;
++	onkey->input->phys = DA9063_DRVNAME_ONKEY "/input0";
++	onkey->input->dev.parent = &pdev->dev;
++
++	if (onkey->key_power)
++		input_set_capability(onkey->input, EV_KEY, KEY_POWER);
++	input_set_capability(onkey->input, EV_KEY, KEY_SLEEP);
++
++	ret = input_register_device(onkey->input);
++	if (ret) {
++		dev_err(&pdev->dev,
++			"Failed to register input device.\n");
++		goto err_irq;
++	}
++
++	platform_set_drvdata(pdev, onkey);
++	return 0;
++
++err_irq:
++	free_irq(onkey->irq, onkey);
++	cancel_delayed_work_sync(&onkey->work);
++err:
++	return ret;
++}
++
++static int da9063_onkey_remove(struct platform_device *pdev)
++{
++	struct	da9063_onkey *onkey = platform_get_drvdata(pdev);
++	free_irq(onkey->irq, onkey);
++	cancel_delayed_work_sync(&onkey->work);
++	input_unregister_device(onkey->input);
++	return 0;
++}
++
++static struct platform_driver da9063_onkey_driver = {
++	.probe	= da9063_onkey_probe,
++	.remove	= da9063_onkey_remove,
++	.driver	= {
++		.name	= DA9063_DRVNAME_ONKEY,
++		.owner	= THIS_MODULE,
++	},
++};
++
++module_platform_driver(da9063_onkey_driver);
++
++MODULE_AUTHOR("S Twiss <stwiss.opensource@diasemi.com>");
++MODULE_DESCRIPTION("Onkey device driver for Dialog DA9063");
++MODULE_LICENSE("GPL v2");
++MODULE_ALIAS("platform:" DA9063_DRVNAME_ONKEY);
+diff --git a/include/linux/mfd/da9063/pdata.h b/include/linux/mfd/da9063/pdata.h
+index 95c8742..612383b 100644
+--- a/include/linux/mfd/da9063/pdata.h
++++ b/include/linux/mfd/da9063/pdata.h
+@@ -103,6 +103,7 @@ struct da9063;
+ struct da9063_pdata {
+ 	int				(*init)(struct da9063 *da9063);
+ 	int				irq_base;
++	bool				key_power;
+ 	unsigned			flags;
+ 	struct da9063_regulators_pdata	*regulators_pdata;
+ 	struct led_platform_data	*leds_pdata;
+-- 
+2.8.1
+
diff --git a/recipes-kernel/linux/linux-advantech-4.1/0005-mfd-da9063-Add-support-for-OnKey-driver.patch b/recipes-kernel/linux/linux-advantech-4.1/0005-mfd-da9063-Add-support-for-OnKey-driver.patch
new file mode 100644
index 0000000..c9007bf
--- /dev/null
+++ b/recipes-kernel/linux/linux-advantech-4.1/0005-mfd-da9063-Add-support-for-OnKey-driver.patch
@@ -0,0 +1,114 @@
+From 18fe0924c45d803967a304abe4fb7b143a0a0296 Mon Sep 17 00:00:00 2001
+From: Steve Twiss <stwiss.opensource@diasemi.com>
+Date: Tue, 19 May 2015 11:32:45 +0100
+Subject: [PATCH 5/7] mfd: da9063: Add support for OnKey driver
+
+Add MFD support for the DA9063 OnKey driver
+
+The function da9063_clear_fault_log() is added to mitigate the case of a
+hardware power-cut after a long-long OnKey press. Although there is no
+software intervention in this case (by definition) such a shutdown would
+cause persistent information within the DA9063 FAULT_LOG that would be
+available during the next device restart.
+
+Clearance of this persistent register must be completed after such a
+hardware power-cut operation has happened so that the FAULT_LOG does not
+continue with previous values. The clearance function has been added here
+in the kernel driver because wiping the fault-log cannot be counted on
+outside the Linux kernel.
+
+Signed-off-by: Steve Twiss <stwiss.opensource@diasemi.com>
+[Lee: Removed 'key_power' for Dmitry to take through the Input Tree]
+Signed-off-by: Lee Jones <lee.jones@linaro.org>
+---
+ drivers/mfd/da9063-core.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 54 insertions(+)
+
+diff --git a/drivers/mfd/da9063-core.c b/drivers/mfd/da9063-core.c
+index facd361..af841c1 100644
+--- a/drivers/mfd/da9063-core.c
++++ b/drivers/mfd/da9063-core.c
+@@ -60,6 +60,7 @@ static struct resource da9063_rtc_resources[] = {
+ 
+ static struct resource da9063_onkey_resources[] = {
+ 	{
++		.name	= "ONKEY",
+ 		.start	= DA9063_IRQ_ONKEY,
+ 		.end	= DA9063_IRQ_ONKEY,
+ 		.flags	= IORESOURCE_IRQ,
+@@ -97,6 +98,7 @@ static const struct mfd_cell da9063_devs[] = {
+ 		.name		= DA9063_DRVNAME_ONKEY,
+ 		.num_resources	= ARRAY_SIZE(da9063_onkey_resources),
+ 		.resources	= da9063_onkey_resources,
++		.of_compatible = "dlg,da9063-onkey",
+ 	},
+ 	{
+ 		.name		= DA9063_DRVNAME_RTC,
+@@ -109,12 +111,64 @@ static const struct mfd_cell da9063_devs[] = {
+ 	},
+ };
+ 
++static int da9063_clear_fault_log(struct da9063 *da9063)
++{
++	int ret = 0;
++	int fault_log = 0;
++
++	ret = regmap_read(da9063->regmap, DA9063_REG_FAULT_LOG, &fault_log);
++	if (ret < 0) {
++		dev_err(da9063->dev, "Cannot read FAULT_LOG.\n");
++		return -EIO;
++	}
++
++	if (fault_log) {
++		if (fault_log & DA9063_TWD_ERROR)
++			dev_dbg(da9063->dev,
++				"Fault log entry detected: DA9063_TWD_ERROR\n");
++		if (fault_log & DA9063_POR)
++			dev_dbg(da9063->dev,
++				"Fault log entry detected: DA9063_POR\n");
++		if (fault_log & DA9063_VDD_FAULT)
++			dev_dbg(da9063->dev,
++				"Fault log entry detected: DA9063_VDD_FAULT\n");
++		if (fault_log & DA9063_VDD_START)
++			dev_dbg(da9063->dev,
++				"Fault log entry detected: DA9063_VDD_START\n");
++		if (fault_log & DA9063_TEMP_CRIT)
++			dev_dbg(da9063->dev,
++				"Fault log entry detected: DA9063_TEMP_CRIT\n");
++		if (fault_log & DA9063_KEY_RESET)
++			dev_dbg(da9063->dev,
++				"Fault log entry detected: DA9063_KEY_RESET\n");
++		if (fault_log & DA9063_NSHUTDOWN)
++			dev_dbg(da9063->dev,
++				"Fault log entry detected: DA9063_NSHUTDOWN\n");
++		if (fault_log & DA9063_WAIT_SHUT)
++			dev_dbg(da9063->dev,
++				"Fault log entry detected: DA9063_WAIT_SHUT\n");
++	}
++
++	ret = regmap_write(da9063->regmap,
++			   DA9063_REG_FAULT_LOG,
++			   fault_log);
++	if (ret < 0)
++		dev_err(da9063->dev,
++			"Cannot reset FAULT_LOG values %d\n", ret);
++
++	return ret;
++}
++
+ int da9063_device_init(struct da9063 *da9063, unsigned int irq)
+ {
+ 	struct da9063_pdata *pdata = da9063->dev->platform_data;
+ 	int model, variant_id, variant_code;
+ 	int ret;
+ 
++	ret = da9063_clear_fault_log(da9063);
++	if (ret < 0)
++		dev_err(da9063->dev, "Cannot clear fault log\n");
++
+ 	if (pdata) {
+ 		da9063->flags = pdata->flags;
+ 		da9063->irq_base = pdata->irq_base;
+-- 
+2.8.1
+
diff --git a/recipes-kernel/linux/linux-advantech-4.1/0006-add-usb-hub_test-suport.patch b/recipes-kernel/linux/linux-advantech-4.1/0006-add-usb-hub_test-suport.patch
new file mode 100644
index 0000000..27b5c62
--- /dev/null
+++ b/recipes-kernel/linux/linux-advantech-4.1/0006-add-usb-hub_test-suport.patch
@@ -0,0 +1,66 @@
+From b555459597027af3362d93020162dfbb30e0eddd Mon Sep 17 00:00:00 2001
+From: Ken Lin <ken.lin@advantech.com.tw>
+Date: Sun, 13 Sep 2015 10:38:29 +0800
+Subject: [PATCH 6/7] add usb hub_test suport
+
+---
+ drivers/usb/core/sysfs.c | 29 +++++++++++++++++++++++++++++
+ 1 file changed, 29 insertions(+)
+
+diff --git a/drivers/usb/core/sysfs.c b/drivers/usb/core/sysfs.c
+index d269738..e78188d 100644
+--- a/drivers/usb/core/sysfs.c
++++ b/drivers/usb/core/sysfs.c
+@@ -16,6 +16,8 @@
+ #include <linux/usb/quirks.h>
+ #include "usb.h"
+ 
++#include <uapi/linux/usb/ch11.h>
++
+ /* Active configuration fields */
+ #define usb_actconfig_show(field, format_string)			\
+ static ssize_t field##_show(struct device *dev,				\
+@@ -677,6 +679,30 @@ static ssize_t remove_store(struct device *dev, struct device_attribute *attr,
+ static DEVICE_ATTR_IGNORE_LOCKDEP(remove, S_IWUSR, NULL, remove_store);
+ 
+ 
++
++static ssize_t usbhub_testmode_store(struct device *dev,
++               struct device_attribute *attr,
++               const char *buf, size_t count)
++{
++       int port, testmode;
++       struct usb_device *udev = to_usb_device(dev);
++
++       sscanf(buf, "%d %d\n", &port, &testmode);
++        printk(KERN_ERR "[Advantech]%s ,port:%d testmode:%d %d\n",  __func__, port, testmode, udev->portnum);
++
++       usb_control_msg(udev, usb_sndctrlpipe(udev, 0), USB_REQ_SET_FEATURE,
++                       USB_RT_PORT, USB_PORT_FEAT_SUSPEND,
++                       port, NULL, 0, 1000);
++       usb_control_msg(udev, usb_sndctrlpipe(udev, 0), USB_REQ_SET_FEATURE,
++                       USB_RT_PORT, USB_PORT_FEAT_TEST,
++                       (testmode << 8) | port, NULL, 0, 1000);
++	   
++			 return count;
++}
++
++static DEVICE_ATTR(hub_test, 0200, NULL, usbhub_testmode_store);
++
++
+ static struct attribute *dev_attrs[] = {
+ 	/* current configuration's attributes */
+ 	&dev_attr_configuration.attr,
+@@ -706,6 +732,9 @@ static struct attribute *dev_attrs[] = {
+ 	&dev_attr_remove.attr,
+ 	&dev_attr_removable.attr,
+ 	&dev_attr_ltm_capable.attr,
++        
++	&dev_attr_hub_test.attr,
++
+ 	NULL,
+ };
+ static struct attribute_group dev_attr_grp = {
+-- 
+2.8.1
+
diff --git a/recipes-kernel/linux/linux-advantech-4.1/0007-ARM-dts-imx-Add-support-for-Advantech-DMS-BA16.patch b/recipes-kernel/linux/linux-advantech-4.1/0007-ARM-dts-imx-Add-support-for-Advantech-DMS-BA16.patch
new file mode 100644
index 0000000..89cf759
--- /dev/null
+++ b/recipes-kernel/linux/linux-advantech-4.1/0007-ARM-dts-imx-Add-support-for-Advantech-DMS-BA16.patch
@@ -0,0 +1,817 @@
+From b65cedb176959d126e062e437a58738a2b31f724 Mon Sep 17 00:00:00 2001
+From: Justin Waters <justin.waters@timesys.com>
+Date: Fri, 12 Dec 2014 17:12:24 -0500
+Subject: [PATCH 7/7] ARM: dts: imx: Add support for Advantech DMS-BA16
+
+Add support for the Advantech DMS-BA16 Board.
+
+Signed-off-by: Justin Waters <justin.waters@timesys.com>
+---
+ arch/arm/boot/dts/imx6q-dms-ba16.dts | 795 +++++++++++++++++++++++++++++++++++
+ 1 file changed, 795 insertions(+)
+ create mode 100644 arch/arm/boot/dts/imx6q-dms-ba16.dts
+
+diff --git a/arch/arm/boot/dts/imx6q-dms-ba16.dts b/arch/arm/boot/dts/imx6q-dms-ba16.dts
+new file mode 100644
+index 0000000..533d536
+--- /dev/null
++++ b/arch/arm/boot/dts/imx6q-dms-ba16.dts
+@@ -0,0 +1,795 @@
++/*
++ * Copyright 2016 Timesys Corporation
++ * Copyright 2016 Advantech Corporation
++ *
++ * The code contained herein is licensed under the GNU General Public
++ * License. You may obtain a copy of the GNU General Public License
++ * Version 2 or later at the following locations:
++ *
++ * http://www.opensource.org/licenses/gpl-license.html
++ * http://www.gnu.org/copyleft/gpl.html
++ */
++
++/dts-v1/;
++
++#include <dt-bindings/gpio/gpio.h>
++#include "imx6q.dtsi"
++
++/ {
++	model = "Advantech DMS-BA16";
++	compatible = "fsl,imx6q-dms-ba16", "fsl,imx6q";
++
++	aliases {
++		mxcfb0 = &mxcfb1;
++		mxcfb1 = &mxcfb2;
++		mmc0 = &usdhc2;
++		mmc1 = &usdhc3;
++		mmc2 = &usdhc4;
++	};
++
++	memory {
++		reg = <0x10000000 0x40000000>;
++	};
++
++	clocks {
++		clk24m: clk24m {
++			compatible = "fixed-clock";
++			#clock-cells = <0>;
++			clock-frequency = <24000000>;
++		};
++	};
++
++	regulators {
++		compatible = "simple-bus";
++
++		reg_usb_otg_vbus: usb_otg_vbus {
++			compatible = "regulator-fixed";
++			regulator-name = "usb_otg_vbus";
++			regulator-min-microvolt = <5000000>;
++			regulator-max-microvolt = <5000000>;
++		};
++
++		reg_usb_h1_vbus: usb_h1_vbus {
++			compatible = "regulator-fixed";
++			regulator-name = "usb_h1_vbus";
++			regulator-min-microvolt = <5000000>;
++			regulator-max-microvolt = <5000000>;
++		};
++
++		reg_1p8v: 1p8v {
++			compatible = "regulator-fixed";
++			regulator-name = "1P8V";
++			regulator-min-microvolt = <1800000>;
++			regulator-max-microvolt = <1800000>;
++			regulator-always-on;
++		};
++
++		reg_3p3v: 3p3v {
++			compatible = "regulator-fixed";
++			regulator-name = "3P3V";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			regulator-always-on;
++		};
++
++		reg_lvds: regulator-lvds {
++			compatible = "regulator-fixed";
++			regulator-name = "lvds_ppen";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			regulator-boot-on;
++			gpio = <&gpio3 22 GPIO_ACTIVE_HIGH>;
++			enable-active-high;
++		};
++	};
++
++	sound {
++		compatible = "fsl,imx6q-ba16-sgtl5000",
++			     "fsl,imx-audio-sgtl5000";
++		model = "imx6q-ba16-sgtl5000";
++		ssi-controller = <&ssi1>;
++		audio-codec = <&codec>;
++		audio-routing =
++			"MIC_IN", "Mic Jack",
++			"Mic Jack", "Mic Bias",
++			"Headphone Jack", "HP_OUT";
++		mux-int-port = <1>;
++		mux-ext-port = <4>;
++	};
++
++	sound-hdmi {
++		compatible = "fsl,imx6q-audio-hdmi",
++			     "fsl,imx-audio-hdmi"; model = "imx-audio-hdmi";
++		hdmi-controller = <&hdmi_audio>;
++	};
++
++	mxcfb1: fb@0 {
++		compatible = "fsl,mxc_sdc_fb";
++		disp_dev = "ldb";
++		interface_pix_fmt = "RGB24";
++		default_bpp = <32>;
++		int_clk = <0>;
++		late_init = <0>;
++		status = "okay";
++	};
++
++	mxcfb2: fb@1 {
++		compatible = "fsl,mxc_sdc_fb";
++		disp_dev = "hdmi";
++		interface_pix_fmt = "RGB24";
++		mode_str ="1920x1080M@60";
++		default_bpp = <24>;
++		int_clk = <0>;
++		late_init = <0>;
++		status = "okay";
++	};
++
++	backlight {
++		compatible = "pwm-backlight";
++		pwms = <&pwm1 0 5000000>;
++		brightness-levels = <  0   1   2   3   4   5   6   7   8   9
++				      10  11  12  13  14  15  16  17  18  19
++				      20  21  22  23  24  25  26  27  28  29
++				      30  31  32  33  34  35  36  37  38  39
++				      40  41  42  43  44  45  46  47  48  49
++				      50  51  52  53  54  55  56  57  58  59
++				      60  61  62  63  64  65  66  67  68  69
++				      70  71  72  73  74  75  76  77  78  79
++				      80  81  82  83  84  85  86  87  88  89
++				      90  91  92  93  94  95  96  97  98  99
++				     100 101 102 103 104 105 106 107 108 109
++				     110 111 112 113 114 115 116 117 118 119
++				     120 121 122 123 124 125 126 127 128 129
++				     130 131 132 133 134 135 136 137 138 139
++				     140 141 142 143 144 145 146 147 148 149
++				     150 151 152 153 154 155 156 157 158 159
++				     160 161 162 163 164 165 166 167 168 169
++				     170 171 172 173 174 175 176 177 178 179
++				     180 181 182 183 184 185 186 187 188 189
++				     190 191 192 193 194 195 196 197 198 199
++				     200 201 202 203 204 205 206 207 208 209
++				     210 211 212 213 214 215 216 217 218 219
++				     220 221 222 223 224 225 226 227 228 229
++				     230 231 232 233 234 235 236 237 238 239
++				     240 241 242 243 244 245 246 247 248 249
++				     250 251 252 253 254 255>;
++		default-brightness-level = <255>;
++		power-supply = <&reg_lvds>;
++		enable-gpios = <&gpio1 0 GPIO_ACTIVE_HIGH>;
++	};
++
++	v4l2_out {
++		compatible = "fsl,mxc_v4l2_output";
++		status = "okay";
++	};
++};
++
++&audmux {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_audmux>;
++	status = "okay";
++};
++
++&clks {
++	fsl,ldb-di0-parent = <&clks IMX6QDL_CLK_PLL2_PFD0_352M>;
++	fsl,ldb-di1-parent = <&clks IMX6QDL_CLK_PLL2_PFD0_352M>;
++};
++
++&ecspi1 {
++	fsl,spi-num-chipselects = <1>;
++	cs-gpios = <&gpio2 30 0>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_ecspi1>;
++	status = "okay";
++
++	flash: n25q032@0 {
++		#address-cells = <1>;
++		#size-cells = <1>;
++		compatible = "st,n25q032";
++		spi-max-frequency = <20000000>;
++		reg = <0>;
++		partition@0 {
++			label = "U-Boot";
++			reg = <0x0 0xC0000>;
++		};
++		partition@C0000 {
++			label = "env";
++			reg = <0xC0000 0x10000>;
++		};
++		partition@D0000 {
++			label = "spare";
++			reg = <0xD0000 0x130000>;
++		};
++	};
++};
++
++&ecspi5 {
++	fsl,spi-num-chipselects = <1>;
++	cs-gpios = <&gpio1 17 0>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_ecspi5>;
++	status = "okay";
++
++	m25_eeprom: m25p80@0 {
++		compatible = "atmel,at25";
++		spi-max-frequency = <20000000>;
++		size = <0x8000>;
++		pagesize = <64>;
++		reg = <0>;
++		address-width = <16>;
++	};
++};
++
++&fec {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_enet>;
++	phy-mode = "rgmii";
++	status = "okay";
++};
++
++&cpu0 {
++	arm-supply = <&reg_arm>;
++	soc-supply = <&reg_soc>;
++	pu-supply = <&reg_pu>;
++};
++
++&dcic1 {
++	dcic_id = <0>;
++	dcic_mux = "dcic-hdmi";
++	status = "okay";
++};
++
++&dcic2 {
++	dcic_id = <1>;
++	dcic_mux = "dcic-lvds1";
++	status = "okay";
++};
++
++
++&gpc {
++	fsl,cpu_pupscr_sw2iso = <0xf>;
++	fsl,cpu_pupscr_sw = <0xf>;
++	fsl,cpu_pdnscr_iso2sw = <0x1>;
++	fsl,cpu_pdnscr_iso = <0x1>;
++	fsl,ldo-bypass = <0>;
++	fsl,wdog-reset = <1>; /* watchdog select of reset source */
++	pu-supply = <&reg_pu>;
++};
++
++&hdmi_audio {
++	status = "okay";
++};
++
++&hdmi_cec {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_hdmi_cec>;
++	status = "okay";
++};
++
++&hdmi_core {
++	ipu_id = <1>;
++	disp_id = <0>;
++	status = "okay";
++};
++
++&hdmi_video {
++	fsl,phy_reg_vlev = <0x01ad>;
++	fsl,phy_reg_cksymtx = <0x800d>;
++	status = "okay";
++};
++
++&i2c1 {
++	clock-frequency = <100000>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_i2c1>;
++	status = "okay";
++
++	codec: sgtl5000@0a {
++		compatible = "fsl,sgtl5000";
++		reg = <0x0a>;
++		clocks = <&clks 201>;
++		VDDA-supply = <&reg_1p8v>;
++		VDDIO-supply = <&reg_3p3v>;
++	};
++};
++
++&i2c2 {
++	clock-frequency = <100000>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_i2c2>;
++	status = "okay";
++
++	hdmi: edid@50 {
++		compatible = "fsl,imx6-hdmi-i2c";
++		reg = <0x50>;
++	};
++};
++
++&i2c3 {
++        clock-frequency = <100000>;
++        pinctrl-names = "default";
++        pinctrl-0 = <&pinctrl_i2c3>;
++        status = "okay";
++
++	pmic@58 {
++		compatible = "dialog,da9063";
++		reg = <0x58>;
++		interrupt-parent = <&gpio7>;
++		interrupts = <13 0x8>; /* active-low GPIO7_13 */
++
++		regulators {
++			bcore1 {
++				regulator-min-microvolt = <1420000>;
++				regulator-max-microvolt = <1420000>;
++				regulator-always-on;
++				regulator-boot-on;
++			};
++
++			bcore2 {
++				regulator-min-microvolt = <1420000>;
++				regulator-max-microvolt = <1420000>;
++				regulator-always-on;
++				regulator-boot-on;
++			};
++
++			bpro {
++				regulator-min-microvolt = <1500000>;
++				regulator-max-microvolt = <1500000>;
++				regulator-always-on;
++				regulator-boot-on;
++			};
++
++			bmem {
++				regulator-min-microvolt = <1800000>;
++				regulator-max-microvolt = <1800000>;
++				regulator-always-on;
++				regulator-boot-on;
++			};
++
++			bio: bio {
++				regulator-min-microvolt = <1800000>;
++				regulator-max-microvolt = <1800000>;
++				regulator-always-on;
++				regulator-boot-on;
++			};
++
++			bperi: bperi {
++				regulator-min-microvolt = <3300000>;
++				regulator-max-microvolt = <3300000>;
++				regulator-always-on;
++				regulator-boot-on;
++			};
++
++			ldo1 {
++				regulator-min-microvolt = <600000>;
++				regulator-max-microvolt = <1860000>;
++			};
++
++			ldo2 {
++				regulator-min-microvolt = <600000>;
++				regulator-max-microvolt = <1860000>;
++			};
++
++			ldo3 {
++				regulator-min-microvolt = <900000>;
++				regulator-max-microvolt = <3440000>;
++			};
++
++			ldo4 {
++				regulator-min-microvolt = <900000>;
++				regulator-max-microvolt = <3440000>;
++			};
++
++			ldo5 {
++				regulator-min-microvolt = <900000>;
++				regulator-max-microvolt = <3600000>;
++				regulator-always-on;
++				regulator-boot-on;
++			};
++
++			ldo6 {
++				regulator-min-microvolt = <900000>;
++				regulator-max-microvolt = <3600000>;
++				regulator-always-on;
++				regulator-boot-on;
++			};
++
++			ldo7 {
++				regulator-min-microvolt = <900000>;
++				regulator-max-microvolt = <3600000>;
++				regulator-always-on;
++				regulator-boot-on;
++			};
++
++			ldo8 {
++				regulator-min-microvolt = <900000>;
++				regulator-max-microvolt = <3600000>;
++				regulator-always-on;
++				regulator-boot-on;
++			};
++
++			ldo9 {
++				regulator-min-microvolt = <950000>;
++				regulator-max-microvolt = <3600000>;
++				regulator-always-on;
++				regulator-boot-on;
++			};
++
++			ldo10 {
++				regulator-min-microvolt = <900000>;
++				regulator-max-microvolt = <3600000>;
++				regulator-always-on;
++				regulator-boot-on;
++			};
++
++			ldo11 {
++				regulator-min-microvolt = <900000>;
++				regulator-max-microvolt = <3600000>;
++				regulator-always-on;
++				regulator-boot-on;
++			};
++		};
++	};
++
++	rtc@32 {
++		compatible = "epson,rx8010";
++		reg = <0x32>;
++		interrupt-parent = <&gpio4>;
++		interrupts = <10>;
++		rx8010-irq_1 = <&gpio4 10 0>;
++	};
++};
++
++&iomuxc {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_hog>;
++
++	hog {
++		pinctrl_hog: hoggrp-1 {
++			fsl,pins = <
++				MX6QDL_PAD_GPIO_4__GPIO1_IO04    0x80000000	/* uSDHC2 CD */
++				MX6QDL_PAD_NANDF_CS0__GPIO6_IO11 0x80000000	/* uSDHC4 CD */
++				MX6QDL_PAD_NANDF_CS1__GPIO6_IO14 0x80000000	/* uSDHC4 SDIO PWR */
++				MX6QDL_PAD_NANDF_CS2__GPIO6_IO15 0x80000000	/* uSDHC4 SDIO WP */
++				MX6QDL_PAD_NANDF_CS3__GPIO6_IO16 0x80000000	/* uSDHC4 SDIO LED */
++				MX6QDL_PAD_EIM_EB2__GPIO2_IO30   0x80000000	/* SPI1 CS */
++				MX6QDL_PAD_ENET_TX_EN__GPIO1_IO28 0x80000000	/* FEC Reset */
++				MX6QDL_PAD_NANDF_D0__GPIO2_IO00 0x80000000	/* GPIO0 */
++				MX6QDL_PAD_NANDF_D1__GPIO2_IO01 0x80000000	/* GPIO1 */
++				MX6QDL_PAD_NANDF_D2__GPIO2_IO02 0x80000000	/* GPIO2 */
++				MX6QDL_PAD_NANDF_D3__GPIO2_IO03 0x80000000	/* GPIO3 */
++				MX6QDL_PAD_NANDF_D4__GPIO2_IO04 0x80000000	/* GPIO4 */
++				MX6QDL_PAD_NANDF_D5__GPIO2_IO05 0x80000000	/* GPIO5 */
++				MX6QDL_PAD_NANDF_D6__GPIO2_IO06 0x80000000	/* GPIO6 */
++				MX6QDL_PAD_NANDF_D7__GPIO2_IO07 0x80000000	/* GPIO7 */
++				MX6QDL_PAD_NANDF_CLE__GPIO6_IO07 0x80000000	/* CAM_PWDN */
++				MX6QDL_PAD_GPIO_2__GPIO1_IO02 0x80000000	/* CAM_RST */
++				MX6QDL_PAD_GPIO_9__WDOG1_B 0x80000000		/* Watchdog out */
++				MX6QDL_PAD_GPIO_16__GPIO7_IO11   0x80000000	/* HUB_RESET */
++				MX6QDL_PAD_GPIO_18__GPIO7_IO13   0x80000000	/* PMIC Interrupt */
++				MX6QDL_PAD_GPIO_19__GPIO4_IO05   0x80000000	/* AR8033 Interrupt */
++				MX6QDL_PAD_GPIO_0__GPIO1_IO00  0x80000000	/* BLEN_OUT */
++				MX6QDL_PAD_EIM_D22__GPIO3_IO22   0x80000000	/* LVDS_PPEN_OUT */
++				MX6QDL_PAD_KEY_COL2__GPIO4_IO10  0x80000000	/* RTC_INT */
++			>;
++		};
++	};
++
++	usdhc3 {
++		pinctrl_usdhc3_reset: usdhc3grp-reset {
++			fsl,pins = <
++				MX6QDL_PAD_SD3_RST__SD3_RESET   0x170F9
++			>;
++		};
++	};
++
++	audmux {
++		pinctrl_audmux: audmuxgrp {
++			fsl,pins = <
++				MX6QDL_PAD_DISP0_DAT20__AUD4_TXC  0x130b0
++				MX6QDL_PAD_DISP0_DAT21__AUD4_TXD  0x130b0
++				MX6QDL_PAD_DISP0_DAT22__AUD4_TXFS  0x130b0
++				MX6QDL_PAD_DISP0_DAT23__AUD4_RXD  0x130b0
++			>;
++		};
++	};
++
++	ecspi1 {
++		pinctrl_ecspi1: ecspi1grp {
++			fsl,pins = <
++				MX6QDL_PAD_EIM_D17__ECSPI1_MISO 0x100b1
++				MX6QDL_PAD_EIM_D18__ECSPI1_MOSI 0x100b1
++				MX6QDL_PAD_EIM_D16__ECSPI1_SCLK 0x100b1
++			>;
++		};
++	};
++
++	ecspi5 {
++		pinctrl_ecspi5: ecspi5grp {
++			fsl,pins = <
++				MX6QDL_PAD_SD1_DAT0__ECSPI5_MISO	0x1b0b0
++				MX6QDL_PAD_SD1_CMD__ECSPI5_MOSI		0x1b0b0
++				MX6QDL_PAD_SD1_CLK__ECSPI5_SCLK		0x1b0b0
++				MX6QDL_PAD_SD1_DAT1__GPIO1_IO17		0x1b0b0
++			>;
++		};
++	};
++
++	hdmi_cec {
++		pinctrl_hdmi_cec: hdmicecgrp {
++			fsl,pins = <
++				MX6QDL_PAD_KEY_ROW2__HDMI_TX_CEC_LINE 0x1f8b0
++			>;
++		};
++	};
++
++	usbotg {
++		pinctrl_usbotg: usbotggrp {
++			fsl,pins = <
++				MX6QDL_PAD_ENET_RX_ER__USB_OTG_ID 0x17059
++			>;
++		};
++	};
++
++	usdhc2 {
++		pinctrl_usdhc2: usdhc2grp {
++			fsl,pins = <
++				MX6QDL_PAD_SD2_CMD__SD2_CMD    0x17059
++				MX6QDL_PAD_SD2_CLK__SD2_CLK    0x10059
++				MX6QDL_PAD_SD2_DAT0__SD2_DATA0 0x17059
++				MX6QDL_PAD_SD2_DAT1__SD2_DATA1 0x17059
++				MX6QDL_PAD_SD2_DAT2__SD2_DATA2 0x17059
++				MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x17059
++			>;
++		};
++	};
++
++	usdhc3 {
++		pinctrl_usdhc3: usdhc3grp {
++			fsl,pins = <
++				MX6QDL_PAD_SD3_CMD__SD3_CMD    0x17059
++				MX6QDL_PAD_SD3_CLK__SD3_CLK    0x10059
++				MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
++				MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
++				MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
++				MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
++				MX6QDL_PAD_SD3_DAT4__SD3_DATA4 0x17059
++				MX6QDL_PAD_SD3_DAT5__SD3_DATA5 0x17059
++				MX6QDL_PAD_SD3_DAT6__SD3_DATA6 0x17059
++				MX6QDL_PAD_SD3_DAT7__SD3_DATA7 0x17059
++			>;
++		};
++	};
++
++	usdhc4 {
++		pinctrl_usdhc4: usdhc4grp {
++			fsl,pins = <
++				MX6QDL_PAD_SD4_CMD__SD4_CMD    0x17059
++				MX6QDL_PAD_SD4_CLK__SD4_CLK    0x10059
++				MX6QDL_PAD_SD4_DAT0__SD4_DATA0 0x17059
++				MX6QDL_PAD_SD4_DAT1__SD4_DATA1 0x17059
++				MX6QDL_PAD_SD4_DAT2__SD4_DATA2 0x17059
++				MX6QDL_PAD_SD4_DAT3__SD4_DATA3 0x17059
++				MX6QDL_PAD_SD4_DAT4__SD4_DATA4 0x17059
++				MX6QDL_PAD_SD4_DAT5__SD4_DATA5 0x17059
++				MX6QDL_PAD_SD4_DAT6__SD4_DATA6 0x17059
++				MX6QDL_PAD_SD4_DAT7__SD4_DATA7 0x17059
++			>;
++		};
++	};
++
++	i2c1 {
++		pinctrl_i2c1: i2c1grp {
++			fsl,pins = <
++				MX6QDL_PAD_CSI0_DAT8__I2C1_SDA 0x4001b8b1
++				MX6QDL_PAD_CSI0_DAT9__I2C1_SCL 0x4001b8b1
++			>;
++		};
++	};
++
++	i2c2 {
++		pinctrl_i2c2: i2c2grp {
++			fsl,pins = <
++				MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1
++				MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1
++			>;
++		};
++	};
++
++	i2c3 {
++		pinctrl_i2c3: i2c3grp {
++			fsl,pins = <
++				MX6QDL_PAD_GPIO_3__I2C3_SCL 0x4001b8b1
++				MX6QDL_PAD_GPIO_6__I2C3_SDA 0x4001b8b1
++			>;
++		};
++	};
++
++	pwm1 {
++		pinctrl_pwm1: pwm1grp {
++			fsl,pins = <
++				MX6QDL_PAD_SD1_DAT3__PWM1_OUT 0x1b0b1
++			>;
++		};
++	};
++
++	pwm2 {
++		pinctrl_pwm2: pwm2grp {
++			fsl,pins = <
++				MX6QDL_PAD_GPIO_1__PWM2_OUT 0x1b0b1
++			>;
++		};
++	};
++
++	enet {
++		pinctrl_enet: enetgrp {
++			fsl,pins = <
++				MX6QDL_PAD_ENET_MDIO__ENET_MDIO       0x100b0
++				MX6QDL_PAD_ENET_MDC__ENET_MDC         0x100b0
++				MX6QDL_PAD_RGMII_TXC__RGMII_TXC       0x100b0
++				MX6QDL_PAD_RGMII_TD0__RGMII_TD0       0x100b0
++				MX6QDL_PAD_RGMII_TD1__RGMII_TD1       0x100b0
++				MX6QDL_PAD_RGMII_TD2__RGMII_TD2       0x100b0
++				MX6QDL_PAD_RGMII_TD3__RGMII_TD3       0x100b0
++				MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x100b0
++				MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK  0x100b0
++				MX6QDL_PAD_RGMII_RXC__RGMII_RXC       0x1b0b0
++				MX6QDL_PAD_RGMII_RD0__RGMII_RD0       0x1b0b0
++				MX6QDL_PAD_RGMII_RD1__RGMII_RD1       0x1b0b0
++				MX6QDL_PAD_RGMII_RD2__RGMII_RD2       0x1b0b0
++				MX6QDL_PAD_RGMII_RD3__RGMII_RD3       0x1b0b0
++				MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
++			>;
++		};
++	};
++
++	uart3 {
++		pinctrl_uart3: uart3grp {
++			fsl,pins = <
++				MX6QDL_PAD_EIM_D25__UART3_RX_DATA 0x1b0b1
++				MX6QDL_PAD_EIM_D24__UART3_TX_DATA 0x1b0b1
++				MX6QDL_PAD_EIM_D23__UART3_CTS_B   0x1b0b1
++				MX6QDL_PAD_EIM_D31__UART3_RTS_B   0x1b0b1
++			>;
++		};
++	};
++
++	uart4 {
++		pinctrl_uart4: uart4grp {
++			fsl,pins = <
++				MX6QDL_PAD_KEY_COL0__UART4_TX_DATA 0x1b0b1
++				MX6QDL_PAD_KEY_ROW0__UART4_RX_DATA 0x1b0b1
++			>;
++		};
++	};
++};
++
++&ldb {
++	split-mode;
++	status = "okay";
++
++	lvds-channel@0 {
++		fsl,data-mapping = "spwg";
++		fsl,data-width = <24>;
++		crtc = "ipu1-di0";
++		status = "okay";
++
++		display-timings {
++			native-mode = <&timing0>;
++			timing0: SHARP-LQ156M1LG21 {
++				clock-frequency = <65000000>;
++				hactive = <1920>;
++				vactive = <1080>;
++				hback-porch = <100>;
++				hfront-porch = <40>;
++				vback-porch = <30>;
++				vfront-porch = <3>;
++				hsync-len = <10>;
++				vsync-len = <2>;
++			};
++		};
++	};
++
++	lvds-channel@1 {
++		status = "disabled";
++	};
++};
++
++&pcie {
++	reset-gpio = <&gpio7 12 0>;
++	fsl,tx-deemph-gen1 = <0>;
++	fsl,tx-deemph-gen2-3p5db = <0>;
++	fsl,tx-deemph-gen2-6db = <20>;
++	fsl,tx-swing-full = <103>;
++	fsl,tx-swing-low = <103>;
++	status = "okay";
++};
++
++
++&pwm1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_pwm1>;
++	status = "okay";
++};
++
++&pwm2 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_pwm2>;
++	status = "okay";
++};
++
++&ssi1 {
++	status = "okay";
++};
++
++&uart3 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_uart3>;
++	fsl,uart-has-rtscts;
++	status = "okay";
++};
++
++&uart4 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_uart4>;
++	status = "okay";
++};
++
++&usbh1 {
++	vbus-supply = <&reg_usb_h1_vbus>;
++	reset-gpios = <&gpio7 11 0>;
++	status = "okay";
++};
++
++&usbotg {
++	vbus-supply = <&reg_usb_otg_vbus>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usbotg>;
++	disable-over-current;
++	status = "okay";
++};
++
++&usdhc2 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usdhc2>;
++	cd-gpios = <&gpio1 4 1>;
++	no-1-8-v;
++	keep-power-in-suspend;
++	enable-sdio-wakeup;
++	status = "okay";
++};
++
++&usdhc3 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usdhc3 &pinctrl_usdhc3_reset>;
++	bus-width = <8>;
++	vmmc-supply = <&bperi>;
++	no-1-8-v;
++	non-removable;
++	keep-power-in-suspend;
++	status = "okay";
++};
++
++&usdhc4 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usdhc4>;
++	bus-width = <8>;
++	cd-gpios = <&gpio6 11 1>;
++	no-1-8-v;
++	keep-power-in-suspend;
++	enable-sdio-wakeup;
++	status = "okay";
++};
++
++&vpu {
++	pu-supply = <&reg_pu>;
++};
++
++&sata {
++	fsl,no-spread-spectrum;
++	fsl,transmit-atten-16ths = <12>;
++	fsl,transmit-boost-mdB = <3330>;
++	fsl,transmit-level-mV = <1133>;
++	fsl,receive-dpll-mode = <1>;
++	status = "okay";
++};
+-- 
+2.8.1
+
diff --git a/recipes-kernel/linux/linux-advantech-4.1/0008-da9063-Add-a-PMIC-qurk-to-support-system-suspend-res.patch b/recipes-kernel/linux/linux-advantech-4.1/0008-da9063-Add-a-PMIC-qurk-to-support-system-suspend-res.patch
new file mode 100644
index 0000000..17261be
--- /dev/null
+++ b/recipes-kernel/linux/linux-advantech-4.1/0008-da9063-Add-a-PMIC-qurk-to-support-system-suspend-res.patch
@@ -0,0 +1,218 @@
+From f08d25fce37274bb7ff7862ed380b998500b739c Mon Sep 17 00:00:00 2001
+From: Ken Lin <ken.lin@advantech.com.tw>
+Date: Tue, 26 Jul 2016 11:30:25 +0800
+Subject: [PATCH 1/3] da9063: Add a PMIC qurk to support system suspend/resume and shutdown
+
+Add a platfrom specific qurik to adjust PMIC power rails during suspend/resume and shutdown
+---
+ arch/arm/mach-imx/Makefile        |   2 +-
+ arch/arm/mach-imx/mach-dms-ba16.c | 184 ++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 185 insertions(+), 1 deletion(-)
+ create mode 100644 arch/arm/mach-imx/mach-dms-ba16.c
+
+diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile
+index d973b16..dfa25b4 100644
+--- a/arch/arm/mach-imx/Makefile
++++ b/arch/arm/mach-imx/Makefile
+@@ -102,7 +102,7 @@ AFLAGS_ddr3_freq_imx6.o :=-Wa,-march=armv7-a
+ AFLAGS_smp_wfe_imx6.o :=-Wa,-march=armv7-a
+ AFLAGS_lpddr2_freq_imx6q.o :=-Wa,-march=armv7-a
+ obj-$(CONFIG_SOC_IMX6Q) += clk-imx6q.o mach-imx6q.o ddr3_freq_imx6.o \
+-			smp_wfe_imx6.o lpddr2_freq_imx6q.o
++			smp_wfe_imx6.o lpddr2_freq_imx6q.o mach-dms-ba16.o
+ AFLAGS_lpddr2_freq_imx6.o :=-Wa,-march=armv7-a
+ obj-$(CONFIG_SOC_IMX6SL) += clk-imx6sl.o mach-imx6sl.o lpddr2_freq_imx6.o
+ AFLAGS_ddr3_freq_imx6sx.o :=-Wa,-march=armv7-a
+diff --git a/arch/arm/mach-imx/mach-dms-ba16.c b/arch/arm/mach-imx/mach-dms-ba16.c
+new file mode 100644
+index 0000000..bc327d5
+--- /dev/null
++++ b/arch/arm/mach-imx/mach-dms-ba16.c
+@@ -0,0 +1,184 @@
++/*
++ * Platform suspend/resume/poweroff quirk example
++ *
++ * Copyright (C) 2015 Dialog Semiconductor Ltd
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; version 2 of the License.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ */
++
++#include <linux/device.h>
++#include <linux/i2c.h>
++#include <linux/init.h>
++#include <linux/io.h>
++#include <linux/notifier.h>
++#include <linux/of.h>
++#include <linux/mfd/da9063/registers.h>
++#include <linux/pm.h>
++#include <linux/suspend.h>
++#include <linux/reboot.h>
++#include <linux/delay.h>
++#include <linux/regulator/machine.h>
++
++static struct i2c_client *da9063_client;
++
++static int dms_ba16_suspend_pm_cb(struct notifier_block *nb,
++				unsigned long action, void *ptr)
++{
++	switch (action) {
++	case PM_SUSPEND_PREPARE:
++	case PM_HIBERNATION_PREPARE:
++		/*
++		 * E.G. ADJUST PMIC SEQUENCER FOR SUSPEND
++		 * E.G. MANIPULATE CONTROL LINE USAGE
++		 * i2c_smbus_write_byte_data(dms_ba16_client, <REGISTER>, <VALUE>);
++		 */
++
++
++
++		break;
++	case PM_POST_SUSPEND:
++	case PM_POST_HIBERNATION:
++		/*
++		 * RESTORE PMIC SEQUENCER / CONTROL LINES
++		 * i2c_smbus_write_byte_data(dms_ba16_client, <REGISTER>, <VALUE>);
++		 */
++                i2c_smbus_write_byte_data(da9063_client,0xA4,0x70); // VBCORE1_A(1.42V)
++                i2c_smbus_write_byte_data(da9063_client,0xA3,0x70); // VBCORE2_A(1.42V)
++                i2c_smbus_write_byte_data(da9063_client,0xA5,0x61); // VBPRO_A(1.5V)
++                i2c_smbus_write_byte_data(da9063_client,0xA6,0x32); // VBMEM_A(1.8V)
++                i2c_smbus_write_byte_data(da9063_client,0xA7,0x32); // VBIO_A(1.8V)
++                i2c_smbus_write_byte_data(da9063_client,0xA8,0x7d); // VBPERI_A(3.3V)
++
++
++
++
++		break;
++	default:
++		return NOTIFY_DONE;
++	}
++	return NOTIFY_OK;
++}
++
++static void dms_ba16_poweroff_quirk(void)
++{
++	/*
++	 * Do nothing - this must be assigned as pm_power_off callback, or
++	 * otherwise /kernel/reboot.c : SYSCALL_DEFINE4(reboot, ... reduces
++	 * LINUX_REBOOT_CMD_POWER_OFF to LINUX_REBOOT_CMD_HALT
++	 * and so the pm_power_off_prepare callback would never be used!
++	 *
++	 * This callback is now apparently too late in the power off process
++	 * for dms_ba16 I2C work, as it caused a stack dump with the message:
++	 *      WARNING: CPU: 0 PID: 50 at kernel/workqueue.c:1958
++	 *      process_one_work+0x3bc/0x424()
++	 */
++}
++static void da9063_poweroff_prepare_quirk(void)
++{
++	/* E.G. SET PMIC MODE AND POWER OFF */
++	u8 val = 0;
++
++
++	printk(KERN_ALERT "Poweroff DA9063\n");
++
++
++	i2c_smbus_write_byte_data(da9063_client, DA9063_REG_CONTROL_F,DA9063_SHUTDOWN);
++
++
++	while (1);
++
++	return;
++}
++
++static int dms_ba16_reboot_notify(struct notifier_block *nb,
++				unsigned long action, void *data)
++{
++	switch (action) {
++	case SYS_POWER_OFF:
++		break;
++	case SYS_HALT:
++	case SYS_RESTART:
++		/*
++		 * E.G. RESTORE PMIC SEQUENCER
++		 * E.G. MODIFY GPIO TO RESET SLAVE DEVICE
++		 * i2c_smbus_write_byte_data(dms_ba16_client, <REGISTER>, <VALUE>);
++		 */
++		break;
++	default:
++		break;
++	}
++	return 0;
++}
++
++static struct notifier_block dms_ba16_reboot_nb = {
++	.notifier_call = dms_ba16_reboot_notify
++};
++
++static int platform_i2c_bus_notify(struct notifier_block *nb,
++				   unsigned long action, void *data)
++{
++	struct device *dev = data;
++	struct i2c_client *client;
++
++	if ((action != BUS_NOTIFY_ADD_DEVICE) ||
++	    (dev->type == &i2c_adapter_type))
++		 return 0;
++
++	client = to_i2c_client(dev);
++
++	if ((client->addr == 0x58 && !strcmp(client->name, "da9063"))) {
++		da9063_client = client;
++
++		/*
++		 * E.G. SET IRQ MASKS
++		 * i2c_smbus_write_byte_data(dms_ba16_client, <REGISTER>, <VALUE>);
++		 */
++
++		/*
++		 * Register PM notifier for suspend/resume switchovers
++		 * of control
++		 */
++
++                 i2c_smbus_write_byte_data(da9063_client,0x0B,0xF7); /*IRQ_MASK_B*/
++                 i2c_smbus_write_byte_data(da9063_client,0x25,0x9);  /*BPERI_CONT keep BPERI_B voltage when supsend*/
++                 i2c_smbus_write_byte_data(da9063_client,0x24,0x1);  /*BIO_CONT let BIO_B off when supsend*/
++
++
++
++		pm_notifier(dms_ba16_suspend_pm_cb, 0);
++
++		/* Register reboot notifier */
++		register_reboot_notifier(&dms_ba16_reboot_nb);
++
++		/* Establish poweroff callback */
++		printk(KERN_INFO "Installing DA9063 poweroff control\n");
++		pm_power_off_prepare = da9063_poweroff_prepare_quirk;
++		pm_power_off = dms_ba16_poweroff_quirk;
++
++		/* Get rid of this notification */
++		bus_unregister_notifier(&i2c_bus_type, nb);
++	}
++
++	return 0;
++}
++
++static struct notifier_block platform_i2c_bus_nb = {
++	.notifier_call = platform_i2c_bus_notify
++};
++
++static int __init platform_quirk(void)
++{
++	da9063_client = NULL;
++	bus_register_notifier(&i2c_bus_type, &platform_i2c_bus_nb);
++	return 0;
++}
++
++arch_initcall(platform_quirk);
++
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-advantech-4.1/0009-mfd-da9063-Add-wakeup-source-support.patch b/recipes-kernel/linux/linux-advantech-4.1/0009-mfd-da9063-Add-wakeup-source-support.patch
new file mode 100644
index 0000000..2085d54
--- /dev/null
+++ b/recipes-kernel/linux/linux-advantech-4.1/0009-mfd-da9063-Add-wakeup-source-support.patch
@@ -0,0 +1,28 @@
+From 93b8c33148ae69e4e060f1fbe66e21c59c91e368 Mon Sep 17 00:00:00 2001
+From: Ken Lin <ken.lin@advantech.com.tw>
+Date: Tue, 26 Jul 2016 11:36:19 +0800
+Subject: [PATCH 2/3] mfd: da9063: Add wakeup source support
+
+Configure da9063 IRQ as a iMx6 wakeup source
+---
+ drivers/mfd/da9063-core.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/drivers/mfd/da9063-core.c b/drivers/mfd/da9063-core.c
+index af841c1..7ea00a5 100644
+--- a/drivers/mfd/da9063-core.c
++++ b/drivers/mfd/da9063-core.c
+@@ -232,6 +232,10 @@ int da9063_device_init(struct da9063 *da9063, unsigned int irq)
+ 	if (ret)
+ 		dev_err(da9063->dev, "Cannot add MFD cells\n");
+ 
++
++	enable_irq_wake(da9063->chip_irq);
++
++
+ 	return ret;
+ }
+ 
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-advantech-4.1/0010-ARM-dts-imx-Add-Q7-SUS_S3_OUT-control-support-during.patch b/recipes-kernel/linux/linux-advantech-4.1/0010-ARM-dts-imx-Add-Q7-SUS_S3_OUT-control-support-during.patch
new file mode 100644
index 0000000..95ee76b
--- /dev/null
+++ b/recipes-kernel/linux/linux-advantech-4.1/0010-ARM-dts-imx-Add-Q7-SUS_S3_OUT-control-support-during.patch
@@ -0,0 +1,85 @@
+From d2b1dd5c8591c6e87b955329615683d0431cfb6e Mon Sep 17 00:00:00 2001
+From: Ken Lin <ken.lin@advantech.com.tw>
+Date: Tue, 26 Jul 2016 11:48:57 +0800
+Subject: [PATCH 3/3] ARM: dts: imx: Add Q7 SUS_S3_OUT control support during
+ suspend/resume
+
+configure Q7 SUS_S3_OUT as GPO and set the correct level during suspend/resume
+---
+ arch/arm/boot/dts/imx6q-dms-ba16.dts | 6 +++++-
+ arch/arm/mach-imx/mach-dms-ba16.c    | 8 ++++++--
+ 2 files changed, 11 insertions(+), 3 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6q-dms-ba16.dts b/arch/arm/boot/dts/imx6q-dms-ba16.dts
+index 533d536..9805aca 100644
+--- a/arch/arm/boot/dts/imx6q-dms-ba16.dts
++++ b/arch/arm/boot/dts/imx6q-dms-ba16.dts
+@@ -260,12 +260,14 @@
+ 	status = "okay";
+ };
+ 
++
+ &hdmi_cec {
+ 	pinctrl-names = "default";
+ 	pinctrl-0 = <&pinctrl_hdmi_cec>;
+-	status = "okay";
++	status = "disabled";
+ };
+ 
++
+ &hdmi_core {
+ 	ipu_id = <1>;
+ 	disp_id = <0>;
+@@ -471,6 +473,8 @@
+ 				MX6QDL_PAD_GPIO_0__GPIO1_IO00  0x80000000	/* BLEN_OUT */
+ 				MX6QDL_PAD_EIM_D22__GPIO3_IO22   0x80000000	/* LVDS_PPEN_OUT */
+ 				MX6QDL_PAD_KEY_COL2__GPIO4_IO10  0x80000000	/* RTC_INT */
++                        	MX6QDL_PAD_KEY_ROW2__GPIO4_IO11  0x1b0b0 	/*SUS_S3_OUT*/
++
+ 			>;
+ 		};
+ 	};
+diff --git a/arch/arm/mach-imx/mach-dms-ba16.c b/arch/arm/mach-imx/mach-dms-ba16.c
+index bc327d5..ac6e6a0 100644
+--- a/arch/arm/mach-imx/mach-dms-ba16.c
++++ b/arch/arm/mach-imx/mach-dms-ba16.c
+@@ -25,7 +25,10 @@
+ #include <linux/reboot.h>
+ #include <linux/delay.h>
+ #include <linux/regulator/machine.h>
++#include <linux/gpio.h>
++#include "hardware.h"
+ 
++#define SUS_S3_OUT      IMX_GPIO_NR(4, 11)
+ static struct i2c_client *da9063_client;
+ 
+ static int dms_ba16_suspend_pm_cb(struct notifier_block *nb,
+@@ -40,7 +43,7 @@ static int dms_ba16_suspend_pm_cb(struct notifier_block *nb,
+ 		 * i2c_smbus_write_byte_data(dms_ba16_client, <REGISTER>, <VALUE>);
+ 		 */
+ 
+-
++		gpio_direction_output(SUS_S3_OUT, 0); /*Set SUS_S3 low during suspend*/
+ 
+ 		break;
+ 	case PM_POST_SUSPEND:
+@@ -57,7 +60,7 @@ static int dms_ba16_suspend_pm_cb(struct notifier_block *nb,
+                 i2c_smbus_write_byte_data(da9063_client,0xA8,0x7d); // VBPERI_A(3.3V)
+ 
+ 
+-
++		gpio_direction_output(SUS_S3_OUT, 1); /*Set SUS_S3 high during resume*/
+ 
+ 		break;
+ 	default:
+@@ -151,6 +154,7 @@ static int platform_i2c_bus_notify(struct notifier_block *nb,
+                  i2c_smbus_write_byte_data(da9063_client,0x24,0x1);  /*BIO_CONT let BIO_B off when supsend*/
+ 
+ 
++		gpio_direction_output(SUS_S3_OUT, 1); /*Set SUS_S3 high when power on*/
+ 
+ 		pm_notifier(dms_ba16_suspend_pm_cb, 0);
+ 
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-advantech-4.1/defconfig b/recipes-kernel/linux/linux-advantech-4.1/defconfig
new file mode 100644
index 0000000..c02b3c3
--- /dev/null
+++ b/recipes-kernel/linux/linux-advantech-4.1/defconfig
@@ -0,0 +1,451 @@
+CONFIG_KERNEL_LZO=y
+CONFIG_SYSVIPC=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=18
+CONFIG_CGROUPS=y
+CONFIG_RELAY=y
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_EXPERT=y
+CONFIG_KALLSYMS_ALL=y
+CONFIG_PERF_EVENTS=y
+# CONFIG_SLUB_DEBUG is not set
+# CONFIG_COMPAT_BRK is not set
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+CONFIG_MODULE_SRCVERSION_ALL=y
+# CONFIG_BLK_DEV_BSG is not set
+CONFIG_ARCH_MXC=y
+CONFIG_SOC_IMX50=y
+CONFIG_SOC_IMX53=y
+CONFIG_SOC_IMX6Q=y
+CONFIG_SOC_IMX6SL=y
+CONFIG_SOC_IMX6SX=y
+CONFIG_SOC_IMX6UL=y
+CONFIG_SOC_IMX7D=y
+CONFIG_SOC_VF610=y
+# CONFIG_SWP_EMULATE is not set
+CONFIG_PCI=y
+CONFIG_PCI_MSI=y
+CONFIG_PCI_IMX6=y
+CONFIG_SMP=y
+CONFIG_HAVE_ARM_ARCH_TIMER=y
+CONFIG_VMSPLIT_2G=y
+CONFIG_PREEMPT=y
+CONFIG_AEABI=y
+CONFIG_HIGHMEM=y
+CONFIG_CMA=y
+CONFIG_CMDLINE="noinitrd console=ttymxc0,115200"
+CONFIG_KEXEC=y
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_ARM_IMX6Q_CPUFREQ=y
+CONFIG_ARM_IMX7D_CPUFREQ=y
+CONFIG_CPU_IDLE=y
+CONFIG_VFP=y
+CONFIG_NEON=y
+CONFIG_BINFMT_MISC=m
+CONFIG_PM_DEBUG=y
+CONFIG_PM_TEST_SUSPEND=y
+CONFIG_NET=y
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+CONFIG_INET=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=y
+CONFIG_NETFILTER=y
+CONFIG_VLAN_8021Q=y
+CONFIG_LLC2=y
+CONFIG_CAN=y
+CONFIG_CAN_FLEXCAN=y
+CONFIG_CAN_M_CAN=y
+CONFIG_BT=y
+CONFIG_BT_RFCOMM=y
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=y
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=y
+CONFIG_BT_HCIBTUSB=y
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIUART_ATH3K=y
+CONFIG_BT_HCIBCM203X=y
+CONFIG_BT_ATH3K=y
+CONFIG_CFG80211=y
+CONFIG_MAC80211=y
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+# CONFIG_STANDALONE is not set
+CONFIG_DMA_CMA=y
+CONFIG_CMA_SIZE_MBYTES=320
+CONFIG_IMX_WEIM=y
+CONFIG_CONNECTOR=y
+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_CFI_STAA=y
+CONFIG_MTD_PHYSMAP_OF=y
+CONFIG_MTD_DATAFLASH=y
+CONFIG_MTD_M25P80=y
+CONFIG_MTD_SST25L=y
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_GPMI_NAND=y
+CONFIG_MTD_NAND_MXC=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_SPI_FSL_QUADSPI=y
+CONFIG_MTD_UBI=y
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_SIZE=65536
+CONFIG_SENSORS_FXOS8700=y
+CONFIG_SENSORS_FXAS2100X=y
+CONFIG_EEPROM_AT24=y
+CONFIG_EEPROM_AT25=y
+# CONFIG_SCSI_PROC_FS is not set
+CONFIG_BLK_DEV_SD=y
+CONFIG_SCSI_CONSTANTS=y
+CONFIG_SCSI_LOGGING=y
+CONFIG_SCSI_SCAN_ASYNC=y
+# CONFIG_SCSI_LOWLEVEL is not set
+CONFIG_ATA=y
+CONFIG_SATA_AHCI_PLATFORM=y
+CONFIG_AHCI_IMX=y
+CONFIG_PATA_IMX=y
+CONFIG_NETDEVICES=y
+# CONFIG_NET_VENDOR_BROADCOM is not set
+CONFIG_CS89x0=y
+CONFIG_CS89x0_PLATFORM=y
+# CONFIG_NET_VENDOR_FARADAY is not set
+CONFIG_IGB=y
+# CONFIG_NET_VENDOR_MARVELL is not set
+# CONFIG_NET_VENDOR_MICREL is not set
+# CONFIG_NET_VENDOR_MICROCHIP is not set
+# CONFIG_NET_VENDOR_NATSEMI is not set
+# CONFIG_NET_VENDOR_SEEQ is not set
+CONFIG_SMC91X=y
+CONFIG_SMC911X=y
+CONFIG_SMSC911X=y
+# CONFIG_NET_VENDOR_STMICRO is not set
+CONFIG_MICREL_PHY=y
+CONFIG_ATH_CARDS=m
+CONFIG_ATH9K=m
+CONFIG_ATH6KL=m
+CONFIG_ATH6KL_SDIO=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_RTL8152=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_CDC_EEM=m
+CONFIG_BCMDHD=m
+CONFIG_BCMDHD_SDIO=y
+CONFIG_BCMDHD_FW_PATH="/lib/firmware/bcm/fw_bcmdhd.bin"
+CONFIG_BCMDHD_NVRAM_PATH="/lib/firmware/bcm/bcmdhd.cal"
+# CONFIG_RTL_CARDS is not set
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_EVDEV=y
+CONFIG_INPUT_EVBUG=m
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_KEYBOARD_IMX=y
+CONFIG_MOUSE_PS2=m
+CONFIG_MOUSE_PS2_ELANTECH=y
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=y
+CONFIG_TOUCHSCREEN_EGALAX=y
+CONFIG_TOUCHSCREEN_ELAN=y
+CONFIG_TOUCHSCREEN_MAX11801=y
+CONFIG_TOUCHSCREEN_IMX6UL_TSC=y
+CONFIG_TOUCHSCREEN_MC13783=y
+CONFIG_TOUCHSCREEN_TSC2007=y
+CONFIG_TOUCHSCREEN_STMPE=y
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_DA9063_ONKEY=y
+CONFIG_INPUT_MMA8450=y
+CONFIG_INPUT_MPL3115=y
+CONFIG_SENSOR_FXLS8471=y
+CONFIG_INPUT_ISL29023=y
+CONFIG_SERIO_SERPORT=m
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_DEVKMEM is not set
+CONFIG_SERIAL_IMX=y
+CONFIG_SERIAL_IMX_CONSOLE=y
+CONFIG_SERIAL_FSL_LPUART=y
+CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
+CONFIG_FSL_OTP=y
+# CONFIG_I2C_COMPAT is not set
+CONFIG_I2C_CHARDEV=y
+# CONFIG_I2C_HELPER_AUTO is not set
+CONFIG_I2C_ALGOPCF=m
+CONFIG_I2C_ALGOPCA=m
+CONFIG_I2C_IMX=y
+CONFIG_SPI=y
+CONFIG_SPI_GPIO=y
+CONFIG_SPI_IMX=y
+CONFIG_GPIO_SYSFS=y
+CONFIG_GPIO_MAX732X=y
+CONFIG_GPIO_PCA953X=y
+CONFIG_GPIO_74X164=y
+CONFIG_POWER_SUPPLY=y
+CONFIG_SABRESD_MAX8903=y
+CONFIG_SENSORS_MAX17135=y
+CONFIG_SENSORS_MAG3110=y
+CONFIG_THERMAL=y
+CONFIG_CPU_THERMAL=y
+CONFIG_IMX_THERMAL=y
+CONFIG_DEVICE_THERMAL=y
+CONFIG_WATCHDOG=y
+CONFIG_IMX2_WDT=y
+CONFIG_MFD_DA9052_I2C=y
+CONFIG_MFD_DA9063=y
+CONFIG_MFD_MC13XXX_SPI=y
+CONFIG_MFD_MC13XXX_I2C=y
+CONFIG_MFD_MAX17135=y
+CONFIG_MFD_SI476X_CORE=y
+CONFIG_MFD_STMPE=y
+CONFIG_REGULATOR=y
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
+CONFIG_REGULATOR_ANATOP=y
+CONFIG_REGULATOR_DA9052=y
+CONFIG_REGULATOR_DA9063=y
+CONFIG_REGULATOR_GPIO=y
+CONFIG_REGULATOR_MAX17135=y
+CONFIG_REGULATOR_MC13783=y
+CONFIG_REGULATOR_MC13892=y
+CONFIG_REGULATOR_PFUZE100=y
+CONFIG_MEDIA_SUPPORT=y
+CONFIG_MEDIA_CAMERA_SUPPORT=y
+CONFIG_MEDIA_RADIO_SUPPORT=y
+CONFIG_MEDIA_RC_SUPPORT=y
+CONFIG_RC_DEVICES=y
+CONFIG_IR_GPIO_CIR=y
+CONFIG_MEDIA_USB_SUPPORT=y
+CONFIG_USB_VIDEO_CLASS=m
+CONFIG_V4L_PLATFORM_DRIVERS=y
+CONFIG_VIDEO_MXC_OUTPUT=y
+CONFIG_VIDEO_MXC_CAPTURE=m
+CONFIG_MXC_CAMERA_OV5640=m
+CONFIG_MXC_CAMERA_OV5642=m
+CONFIG_MXC_CAMERA_OV5640_MIPI=m
+CONFIG_MXC_TVIN_ADV7180=m
+CONFIG_MXC_IPU_DEVICE_QUEUE_SDC=m
+CONFIG_VIDEO_MXC_IPU_OUTPUT=y
+CONFIG_VIDEO_MXC_PXP_V4L2=y
+CONFIG_VIDEO_MXC_CSI_CAMERA=m
+CONFIG_MXC_VADC=m
+CONFIG_MXC_MIPI_CSI=m
+CONFIG_MXC_CAMERA_OV5647_MIPI=m
+CONFIG_SOC_CAMERA=y
+CONFIG_VIDEO_MX3=y
+CONFIG_V4L_MEM2MEM_DRIVERS=y
+CONFIG_VIDEO_CODA=y
+CONFIG_RADIO_SI476X=y
+CONFIG_SOC_CAMERA_OV2640=y
+CONFIG_DRM=y
+CONFIG_DRM_VIVANTE=y
+CONFIG_FB=y
+CONFIG_FB_MXS=y
+CONFIG_FB_MXC_SYNC_PANEL=y
+CONFIG_FB_MXC_MIPI_DSI=y
+CONFIG_FB_MXC_MIPI_DSI_SAMSUNG=y
+CONFIG_FB_MXC_TRULY_WVGA_SYNC_PANEL=y
+CONFIG_FB_MXC_LDB=y
+CONFIG_FB_MXC_HDMI=y
+CONFIG_FB_MXS_SII902X=y
+CONFIG_FB_MXC_DCIC=m
+CONFIG_HANNSTAR_CABC=y
+CONFIG_FB_MXC_EINK_PANEL=y
+CONFIG_FB_MXC_EINK_V2_PANEL=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_L4F00242T03=y
+CONFIG_LCD_PLATFORM=y
+CONFIG_BACKLIGHT_PWM=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
+CONFIG_LOGO=y
+CONFIG_SOUND=y
+CONFIG_SND=y
+CONFIG_SND_USB_AUDIO=m
+CONFIG_SND_SOC=y
+CONFIG_SND_IMX_SOC=y
+CONFIG_SND_SOC_EUKREA_TLV320=y
+CONFIG_SND_SOC_IMX_WM8960=y
+CONFIG_SND_SOC_IMX_SII902X=y
+CONFIG_SND_SOC_IMX_WM8958=y
+CONFIG_SND_SOC_IMX_CS42888=y
+CONFIG_SND_SOC_IMX_WM8962=y
+CONFIG_SND_SOC_IMX_SGTL5000=y
+CONFIG_SND_SOC_IMX_MQS=y
+CONFIG_SND_SOC_IMX_SPDIF=y
+CONFIG_SND_SOC_IMX_MC13783=y
+CONFIG_SND_SOC_IMX_SI476X=y
+CONFIG_SND_SOC_IMX_HDMI=y
+CONFIG_USB=y
+CONFIG_USB_OTG_WHITELIST=y
+CONFIG_USB_OTG_FSM=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_MXC=y
+CONFIG_USB_HCD_TEST_MODE=y
+CONFIG_USB_ACM=m
+CONFIG_USB_STORAGE=y
+CONFIG_USB_CHIPIDEA=y
+CONFIG_USB_CHIPIDEA_UDC=y
+CONFIG_USB_CHIPIDEA_HOST=y
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_EHSET_TEST_FIXTURE=y
+CONFIG_NOP_USB_XCEIV=y
+CONFIG_USB_MXS_PHY=y
+CONFIG_USB_GADGET=y
+CONFIG_USB_CONFIGFS=m
+CONFIG_USB_CONFIGFS_SERIAL=y
+CONFIG_USB_CONFIGFS_ACM=y
+CONFIG_USB_CONFIGFS_OBEX=y
+CONFIG_USB_CONFIGFS_NCM=y
+CONFIG_USB_CONFIGFS_ECM=y
+CONFIG_USB_CONFIGFS_ECM_SUBSET=y
+CONFIG_USB_CONFIGFS_RNDIS=y
+CONFIG_USB_CONFIGFS_EEM=y
+CONFIG_USB_CONFIGFS_MASS_STORAGE=y
+CONFIG_USB_CONFIGFS_F_LB_SS=y
+CONFIG_USB_CONFIGFS_F_FS=y
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_G_NCM=m
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_MASS_STORAGE=m
+CONFIG_USB_G_SERIAL=m
+CONFIG_MMC=y
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_PLTFM=y
+CONFIG_MMC_SDHCI_ESDHC_IMX=y
+CONFIG_MXC_IPU=y
+CONFIG_MXC_IPU_V3_PRE=y
+CONFIG_MXC_GPU_VIV=y
+CONFIG_MXC_SIM=y
+CONFIG_MXC_MIPI_CSI2=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_ONESHOT=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_BACKLIGHT=y
+CONFIG_LEDS_TRIGGER_GPIO=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_INTF_DEV_UIE_EMUL=y
+CONFIG_RTC_DRV_RX8010=y
+CONFIG_RTC_DRV_DA9063=y
+CONFIG_RTC_DRV_MC13XXX=y
+CONFIG_RTC_DRV_MXC=y
+CONFIG_RTC_DRV_SNVS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc1"
+CONFIG_DMADEVICES=y
+CONFIG_MXC_PXP_V2=y
+CONFIG_MXC_PXP_V3=y
+CONFIG_IMX_SDMA=y
+CONFIG_MXS_DMA=y
+CONFIG_STAGING=y
+CONFIG_STAGING_MEDIA=y
+# CONFIG_IOMMU_SUPPORT is not set
+CONFIG_IIO=y
+CONFIG_VF610_ADC=y
+CONFIG_PWM=y
+CONFIG_PWM_IMX=y
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_FS_POSIX_ACL=y
+CONFIG_EXT4_FS_SECURITY=y
+CONFIG_QUOTA=y
+CONFIG_QUOTA_NETLINK_INTERFACE=y
+# CONFIG_PRINT_QUOTA_WARNING is not set
+CONFIG_AUTOFS4_FS=y
+CONFIG_FUSE_FS=y
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=y
+CONFIG_TMPFS=y
+CONFIG_JFFS2_FS=y
+CONFIG_UBIFS_FS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+CONFIG_ROOT_NFS=y
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_ASCII=y
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_UTF8=y
+CONFIG_DEBUG_FS=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_FTRACE is not set
+CONFIG_CORESIGHT=y
+CONFIG_CORESIGHT_LINK_AND_SINK_TMC=y
+CONFIG_CORESIGHT_SINK_TPIU=y
+CONFIG_CORESIGHT_SINK_ETBV10=y
+CONFIG_CORESIGHT_SOURCE_ETM3X=y
+CONFIG_SECURITYFS=y
+CONFIG_CRYPTO_USER=y
+CONFIG_CRYPTO_TEST=m
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_CTS=y
+CONFIG_CRYPTO_LRW=y
+CONFIG_CRYPTO_XTS=y
+CONFIG_CRYPTO_MD4=y
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_MICHAEL_MIC=y
+CONFIG_CRYPTO_RMD128=y
+CONFIG_CRYPTO_RMD160=y
+CONFIG_CRYPTO_RMD256=y
+CONFIG_CRYPTO_RMD320=y
+CONFIG_CRYPTO_SHA1=y
+CONFIG_CRYPTO_SHA512=y
+CONFIG_CRYPTO_TGR192=y
+CONFIG_CRYPTO_WP512=y
+CONFIG_CRYPTO_BLOWFISH=y
+CONFIG_CRYPTO_CAMELLIA=y
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_TWOFISH=y
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+CONFIG_CRYPTO_DEV_FSL_CAAM=y
+CONFIG_CRYPTO_DEV_FSL_CAAM_SM=y
+CONFIG_CRYPTO_DEV_FSL_CAAM_SM_TEST=y
+CONFIG_CRYPTO_DEV_FSL_CAAM_SECVIO=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC_T10DIF=y
+CONFIG_CRC7=m
+CONFIG_LIBCRC32C=m
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
diff --git a/recipes-kernel/linux/linux-advantech_4.1.bb b/recipes-kernel/linux/linux-advantech_4.1.bb
new file mode 100644
index 0000000..635d29b
--- /dev/null
+++ b/recipes-kernel/linux/linux-advantech_4.1.bb
@@ -0,0 +1,27 @@
+# Copyright (C) 2016 Timesys Corporation
+# Copyright (C) 2016 Advantech Corporation
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+include recipes-kernel/linux/linux-imx.inc
+include recipes-kernel/linux/linux-dtb.inc
+
+DEPENDS += "lzop-native bc-native"
+
+SRCBRANCH = "4.1-1.0.x-imx"
+SRCREV = "8eaed11bf59476b24c46a41036b34e969c40d165"
+LOCALVERSION = "-${SRCBRANCH}-dms-ba16"
+
+SRC_URI = "git://github.com/Freescale/linux-fslc.git;branch=${SRCBRANCH} \
+           file://0001-rtc-rx8010-Add-driver-to-kernel.patch \
+           file://0002-ahci_imx-Make-receive-DPLL-mode-configurable.patch \
+           file://0003-PCI-imx6-Add-DT-bindings-to-configure-PHY-Tx-driver-.patch \
+           file://0004-input-da9063_onkey-Add-driver.patch \
+           file://0005-mfd-da9063-Add-support-for-OnKey-driver.patch \
+           file://0006-add-usb-hub_test-suport.patch \
+           file://0007-ARM-dts-imx-Add-support-for-Advantech-DMS-BA16.patch \
+           file://0008-da9063-Add-a-PMIC-qurk-to-support-system-suspend-res.patch \
+           file://0009-mfd-da9063-Add-wakeup-source-support.patch \
+           file://0010-ARM-dts-imx-Add-Q7-SUS_S3_OUT-control-support-during.patch \
+           file://defconfig"
+
+COMPATIBLE_MACHINE = "(imx6q-dms-ba16)"
-- 
2.8.1



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [meta-fsl-arm-extra krogoth][PATCH 3/5] imx6q-elo: Rename board and update kernel, U-Boot provider
  2016-08-09 18:00 [meta-fsl-arm-extra krogoth][PATCH 0/5] Rename imx6q-elo board and bump u-boot/kernel version Akshay Bhat
  2016-08-09 18:00 ` [meta-fsl-arm-extra krogoth][PATCH 1/5] u-boot-advantech: Add u-boot recipe for Advantech i.MX6 boards Akshay Bhat
  2016-08-09 18:00 ` [meta-fsl-arm-extra krogoth][PATCH 2/5] linux-advantech: Add linux kernel " Akshay Bhat
@ 2016-08-09 18:00 ` Akshay Bhat
  2016-08-09 18:00 ` [meta-fsl-arm-extra krogoth][PATCH 4/5] linux-ge: Remove old kernel recipe Akshay Bhat
  2016-08-09 18:00 ` [meta-fsl-arm-extra krogoth][PATCH 5/5] u-boot-ge: Remove old u-boot recipe Akshay Bhat
  4 siblings, 0 replies; 6+ messages in thread
From: Akshay Bhat @ 2016-08-09 18:00 UTC (permalink / raw)
  To: meta-freescale

Rename imx6q-elo machine to imx6q-dms-ba16. 'elo' was a internal
name used by GE for Advantech dms-ba16 board. Since the board is a
generic Advantech board and not GE specific, rename the machine.

Also update the board to use u-boot-advantech and linux-advantech
kernel.

Signed-off-by: Akshay Bhat <akshay.bhat@timesys.com>
---
 conf/machine/imx6q-dms-ba16.conf | 23 +++++++++++++++++++++++
 conf/machine/imx6q-elo.conf      | 23 -----------------------
 2 files changed, 23 insertions(+), 23 deletions(-)
 create mode 100644 conf/machine/imx6q-dms-ba16.conf
 delete mode 100644 conf/machine/imx6q-elo.conf

diff --git a/conf/machine/imx6q-dms-ba16.conf b/conf/machine/imx6q-dms-ba16.conf
new file mode 100644
index 0000000..c91329d
--- /dev/null
+++ b/conf/machine/imx6q-dms-ba16.conf
@@ -0,0 +1,23 @@
+#@TYPE: Machine
+#@NAME: Advantech DMS BA16
+#@SOC: i.MX6Q
+#@DESCRIPTION: Machine configuration for Advantech DMS BA16 board
+#@MAINTAINER: Akshay Bhat <akshay.bhat@timesys.com>
+
+include conf/machine/include/imx-base.inc
+include conf/machine/include/tune-cortexa9.inc
+
+SOC_FAMILY = "mx6:mx6q"
+
+PREFERRED_PROVIDER_virtual/bootloader = "u-boot-advantech"
+PREFERRED_PROVIDER_u-boot = "u-boot-advantech"
+UBOOT_MACHINE = "dms-ba16_defconfig"
+
+PREFERRED_PROVIDER_virtual/kernel = "linux-advantech"
+PREFERRED_PROVIDER_kernel = "linux-advantech"
+KERNEL_DEVICETREE = "imx6q-dms-ba16.dtb"
+KERNEL_IMAGETYPE = "uImage"
+
+MACHINE_FEATURES += "pci"
+
+SERIAL_CONSOLE = "115200 ttymxc3"
diff --git a/conf/machine/imx6q-elo.conf b/conf/machine/imx6q-elo.conf
deleted file mode 100644
index 88c4c9f..0000000
--- a/conf/machine/imx6q-elo.conf
+++ /dev/null
@@ -1,23 +0,0 @@
-#@TYPE: Machine
-#@NAME: General Electric ELO
-#@SOC: i.MX6Q
-#@DESCRIPTION: Machine configuration for Advantech/GE ELO system
-#@MAINTAINER: Justin Waters <justin.waters@timesys.com>
-
-include conf/machine/include/imx-base.inc
-include conf/machine/include/tune-cortexa9.inc
-
-SOC_FAMILY = "mx6:mx6q"
-
-PREFERRED_PROVIDER_virtual/bootloader = "u-boot-ge"
-PREFERRED_PROVIDER_u-boot = "u-boot-ge"
-UBOOT_MACHINE = "ge_elo_yocto_defconfig"
-
-PREFERRED_PROVIDER_virtual/kernel = "linux-ge"
-PREFERRED_PROVIDER_kernel = "linux-ge"
-KERNEL_DEVICETREE = "imx6q-elo.dtb"
-KERNEL_IMAGETYPE = "uImage"
-
-MACHINE_FEATURES += "pci"
-
-SERIAL_CONSOLE = "115200 ttymxc3"
-- 
2.8.1



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [meta-fsl-arm-extra krogoth][PATCH 4/5] linux-ge: Remove old kernel recipe
  2016-08-09 18:00 [meta-fsl-arm-extra krogoth][PATCH 0/5] Rename imx6q-elo board and bump u-boot/kernel version Akshay Bhat
                   ` (2 preceding siblings ...)
  2016-08-09 18:00 ` [meta-fsl-arm-extra krogoth][PATCH 3/5] imx6q-elo: Rename board and update kernel, U-Boot provider Akshay Bhat
@ 2016-08-09 18:00 ` Akshay Bhat
  2016-08-09 18:00 ` [meta-fsl-arm-extra krogoth][PATCH 5/5] u-boot-ge: Remove old u-boot recipe Akshay Bhat
  4 siblings, 0 replies; 6+ messages in thread
From: Akshay Bhat @ 2016-08-09 18:00 UTC (permalink / raw)
  To: meta-freescale

linux-ge was used by imx6q-elo board. The imxq-elo board has been
renamed to imx6q-dms-ba16 and now uses linux-advantech kernel.
Hence remove old linux-ge recipe.

Signed-off-by: Akshay Bhat <akshay.bhat@timesys.com>
---
 .../0001-rtc-rx8010-Add-driver-to-kernel.patch     | 1020 --------------------
 ...Add-support-for-production-silicon-varian.patch |  101 --
 ...Upgrade-of-register-definitions-to-suppor.patch |  257 -----
 .../linux-ge-3.14/0004-rtc-da9063-RTC-driver.patch |  399 --------
 ...da9063-Add-support-for-AD-silicon-variant.patch |  582 -----------
 ...Get-irq-base-dynamically-before-registeri.patch |   42 -
 ...7-mfd-da9063-Add-support-for-OnKey-driver.patch |  114 ---
 ...i_imx-Make-receive-DPLL-mode-configurable.patch |   51 -
 ...d-DT-bindings-to-configure-PHY-Tx-driver-.patch |  112 ---
 ...-dts-imx-Add-support-for-Advantech-GE-ELO.patch |  817 ----------------
 recipes-kernel/linux/linux-ge-3.14/defconfig       |  453 ---------
 recipes-kernel/linux/linux-ge_3.14.bb              |   25 -
 12 files changed, 3973 deletions(-)
 delete mode 100644 recipes-kernel/linux/linux-ge-3.14/0001-rtc-rx8010-Add-driver-to-kernel.patch
 delete mode 100644 recipes-kernel/linux/linux-ge-3.14/0002-mfd-da9063-Add-support-for-production-silicon-varian.patch
 delete mode 100644 recipes-kernel/linux/linux-ge-3.14/0003-mfd-da9063-Upgrade-of-register-definitions-to-suppor.patch
 delete mode 100644 recipes-kernel/linux/linux-ge-3.14/0004-rtc-da9063-RTC-driver.patch
 delete mode 100644 recipes-kernel/linux/linux-ge-3.14/0005-mfd-da9063-Add-support-for-AD-silicon-variant.patch
 delete mode 100644 recipes-kernel/linux/linux-ge-3.14/0006-mfd-da9063-Get-irq-base-dynamically-before-registeri.patch
 delete mode 100644 recipes-kernel/linux/linux-ge-3.14/0007-mfd-da9063-Add-support-for-OnKey-driver.patch
 delete mode 100644 recipes-kernel/linux/linux-ge-3.14/0008-ahci_imx-Make-receive-DPLL-mode-configurable.patch
 delete mode 100644 recipes-kernel/linux/linux-ge-3.14/0009-PCI-imx6-Add-DT-bindings-to-configure-PHY-Tx-driver-.patch
 delete mode 100644 recipes-kernel/linux/linux-ge-3.14/0010-ARM-dts-imx-Add-support-for-Advantech-GE-ELO.patch
 delete mode 100644 recipes-kernel/linux/linux-ge-3.14/defconfig
 delete mode 100644 recipes-kernel/linux/linux-ge_3.14.bb

diff --git a/recipes-kernel/linux/linux-ge-3.14/0001-rtc-rx8010-Add-driver-to-kernel.patch b/recipes-kernel/linux/linux-ge-3.14/0001-rtc-rx8010-Add-driver-to-kernel.patch
deleted file mode 100644
index e88b71b..0000000
--- a/recipes-kernel/linux/linux-ge-3.14/0001-rtc-rx8010-Add-driver-to-kernel.patch
+++ /dev/null
@@ -1,1020 +0,0 @@
-From fc70b949055cfcf19914e9ab1a6ab21d9e7e9634 Mon Sep 17 00:00:00 2001
-From: Justin Waters <justin.waters@timesys.com>
-Date: Mon, 22 Dec 2014 11:35:24 -0500
-Subject: [PATCH 01/10] rtc-rx8010: Add driver to kernel
-
-This is the rx810_k3.8-v1.3 version from the Epson support site:
-
-http://www5.epsondevice.com/en/quartz/tech/linux_for_rtc/software/rx8010_k3.8-v1.3.zip
----
- drivers/rtc/Kconfig      |   8 +
- drivers/rtc/Makefile     |   1 +
- drivers/rtc/rtc-rx8010.c | 965 +++++++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 974 insertions(+)
- create mode 100644 drivers/rtc/rtc-rx8010.c
-
-diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
-index db933de..87ed3a3 100644
---- a/drivers/rtc/Kconfig
-+++ b/drivers/rtc/Kconfig
-@@ -494,6 +494,14 @@ config RTC_DRV_FM3130
- 	  This driver can also be built as a module. If so the module
- 	  will be called rtc-fm3130.
- 
-+config RTC_DRV_RX8010
-+	tristate "Epson RX-8010SJ"
-+	help
-+	  If you say yes here you will get support for the Epson RX-8010SJ.
-+
-+	  This driver can also be built as a module. If so the module
-+	  will be called rtc-rx8010.
-+
- config RTC_DRV_RX8581
- 	tristate "Epson RX-8581"
- 	help
-diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile
-index b427bf7..1512f48 100644
---- a/drivers/rtc/Makefile
-+++ b/drivers/rtc/Makefile
-@@ -106,6 +106,7 @@ obj-$(CONFIG_RTC_DRV_RS5C348)	+= rtc-rs5c348.o
- obj-$(CONFIG_RTC_DRV_RS5C372)	+= rtc-rs5c372.o
- obj-$(CONFIG_RTC_DRV_RV3029C2)	+= rtc-rv3029c2.o
- obj-$(CONFIG_RTC_DRV_RX4581)	+= rtc-rx4581.o
-+obj-$(CONFIG_RTC_DRV_RX8010)	+= rtc-rx8010.o
- obj-$(CONFIG_RTC_DRV_RX8025)	+= rtc-rx8025.o
- obj-$(CONFIG_RTC_DRV_RX8581)	+= rtc-rx8581.o
- obj-$(CONFIG_RTC_DRV_S35390A)	+= rtc-s35390a.o
-diff --git a/drivers/rtc/rtc-rx8010.c b/drivers/rtc/rtc-rx8010.c
-new file mode 100644
-index 0000000..80f7506
---- /dev/null
-+++ b/drivers/rtc/rtc-rx8010.c
-@@ -0,0 +1,965 @@
-+//======================================================================
-+// Driver for the Epson RTC module RX-8010 SJ
-+// 
-+// Copyright(C) SEIKO EPSON CORPORATION 2013. All rights reserved.
-+// 
-+// Derived from RX-8025 driver: 
-+// Copyright (C) 2009 Wolfgang Grandegger <wg@grandegger.com>
-+// 
-+// Copyright (C) 2005 by Digi International Inc.
-+// All rights reserved.
-+// 
-+// Modified by fengjh at rising.com.cn
-+// <http://lists.lm-sensors.org/mailman/listinfo/lm-sensors>
-+// 2006.11
-+// 
-+// Code cleanup by Sergei Poselenov, <sposelenov@emcraft.com>
-+// Converted to new style by Wolfgang Grandegger <wg@grandegger.com>
-+// Alarm and periodic interrupt added by Dmitry Rakhchev <rda@emcraft.com>
-+//
-+// 
-+// This driver software is distributed as is, without any warranty of any kind,
-+// either express or implied as further specified in the GNU Public License. This
-+// software may be used and distributed according to the terms of the GNU Public
-+// License, version 2 as published by the Free Software Foundation.
-+// See the file COPYING in the main directory of this archive for more details.
-+//
-+// You should have received a copy of the GNU General Public License along with
-+// this program. If not, see <http://www.gnu.org/licenses/>.
-+//======================================================================
-+
-+#if 0
-+#define DEBUG
-+#include <linux/device.h>
-+#undef DEBUG
-+#endif 
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/slab.h>
-+#include <linux/init.h>
-+#include <linux/bcd.h>
-+#include <linux/i2c.h>
-+#include <linux/list.h>
-+#include <linux/rtc.h>
-+#include <linux/of_gpio.h>
-+
-+#include <linux/of.h>
-+#include <linux/of_device.h>
-+#include <linux/of_irq.h>
-+#include <linux/interrupt.h>
-+#include <linux/input.h>
-+
-+
-+// RX-8010 Register definitions
-+#define RX8010_REG_SEC		0x10
-+#define RX8010_REG_MIN		0x11
-+#define RX8010_REG_HOUR		0x12
-+#define RX8010_REG_WDAY		0x13
-+#define RX8010_REG_MDAY		0x14
-+#define RX8010_REG_MONTH	0x15
-+#define RX8010_REG_YEAR		0x16
-+// 0x17 is reserved
-+#define RX8010_REG_ALMIN	0x18
-+#define RX8010_REG_ALHOUR	0x19
-+#define RX8010_REG_ALWDAY	0x1A
-+#define RX8010_REG_TCOUNT0	0x1B
-+#define RX8010_REG_TCOUNT1	0x1C
-+#define RX8010_REG_EXT		0x1D
-+#define RX8010_REG_FLAG		0x1E
-+#define RX8010_REG_CTRL		0x1F
-+#define RX8010_REG_USER0	0x20
-+#define RX8010_REG_USER1	0x21
-+#define RX8010_REG_USER2	0x22
-+#define RX8010_REG_USER3	0x23
-+#define RX8010_REG_USER4	0x24
-+#define RX8010_REG_USER5	0x25
-+#define RX8010_REG_USER6	0x26
-+#define RX8010_REG_USER7	0x27
-+#define RX8010_REG_USER8	0x28
-+#define RX8010_REG_USER9	0x29
-+#define RX8010_REG_USERA	0x2A
-+#define RX8010_REG_USERB	0x2B
-+#define RX8010_REG_USERC	0x2C
-+#define RX8010_REG_USERD	0x2D
-+#define RX8010_REG_USERE	0x2E
-+#define RX8010_REG_USERF	0x2F
-+// 0x30 is reserved
-+// 0x31 is reserved
-+#define RX8010_REG_IRQ		0x32
-+
-+// Extension Register (1Dh) bit positions
-+#define RX8010_BIT_EXT_TSEL		(7 << 0)
-+#define RX8010_BIT_EXT_WADA		(1 << 3)
-+#define RX8010_BIT_EXT_TE		(1 << 4)
-+#define RX8010_BIT_EXT_USEL		(1 << 5)
-+#define RX8010_BIT_EXT_FSEL		(3 << 6)
-+
-+// Flag Register (1Eh) bit positions
-+#define RX8010_BIT_FLAG_VLF		(1 << 1)
-+#define RX8010_BIT_FLAG_AF		(1 << 3)
-+#define RX8010_BIT_FLAG_TF		(1 << 4)
-+#define RX8010_BIT_FLAG_UF		(1 << 5)
-+
-+// Control Register (1Fh) bit positions
-+#define RX8010_BIT_CTRL_TSTP	(1 << 2)
-+#define RX8010_BIT_CTRL_AIE		(1 << 3)
-+#define RX8010_BIT_CTRL_TIE		(1 << 4)
-+#define RX8010_BIT_CTRL_UIE		(1 << 5)
-+#define RX8010_BIT_CTRL_STOP	(1 << 6)
-+#define RX8010_BIT_CTRL_TEST	(1 << 7)
-+
-+
-+static const struct i2c_device_id rx8010_id[] = {
-+	{ "rx8010", 0 },
-+	{ }
-+};
-+MODULE_DEVICE_TABLE(i2c, rx8010_id);
-+
-+struct rx8010_data {
-+	struct i2c_client *client;
-+	struct rtc_device *rtc;
-+	struct work_struct work_1;
-+	struct work_struct work_2;
-+	u8 ctrlreg;
-+	int irq_1;
-+	int irq_2;
-+	unsigned exiting:1;
-+};
-+
-+typedef struct {
-+	u8 number;
-+	u8 value;
-+}reg_data;
-+
-+#define SE_RTC_REG_READ		_IOWR('p', 0x20, reg_data)		
-+#define SE_RTC_REG_WRITE	_IOW('p',  0x21, reg_data)	
-+
-+//----------------------------------------------------------------------
-+// rx8010_read_reg()
-+// reads a rx8010 register (see Register defines)
-+// See also rx8010_read_regs() to read multiple registers.
-+//
-+//----------------------------------------------------------------------
-+static int rx8010_read_reg(struct i2c_client *client, int number, u8 *value)
-+{
-+	int ret = i2c_smbus_read_byte_data(client, number) ;
-+
-+	//check for error
-+	if (ret < 0) {
-+		dev_err(&client->dev, "Unable to read register #%d\n", number);
-+		return ret;
-+	}
-+
-+	*value = ret;
-+	return 0;
-+}
-+
-+//----------------------------------------------------------------------
-+// rx8010_read_regs()
-+// reads a specified number of rx8010 registers (see Register defines)
-+// See also rx8010_read_reg() to read single register.
-+//
-+//----------------------------------------------------------------------
-+static int rx8010_read_regs(struct i2c_client *client, int number, u8 length, u8 *values)
-+{
-+	int ret = i2c_smbus_read_i2c_block_data(client, number, length, values);
-+
-+	//check for length error
-+	if (ret != length) {
-+		dev_err(&client->dev, "Unable to read registers #%d..#%d\n", number, number + length - 1);
-+		return ret < 0 ? ret : -EIO;
-+	}
-+
-+	return 0;
-+}
-+
-+//----------------------------------------------------------------------
-+// rx8010_write_reg()
-+// writes a rx8010 register (see Register defines)
-+// See also rx8010_write_regs() to write multiple registers.
-+//
-+//----------------------------------------------------------------------
-+static int rx8010_write_reg(struct i2c_client *client, int number, u8 value)
-+{
-+	int ret = i2c_smbus_write_byte_data(client, number, value);
-+
-+	//check for error
-+	if (ret)
-+		dev_err(&client->dev, "Unable to write register #%d\n", number);
-+
-+	return ret;
-+}
-+
-+//----------------------------------------------------------------------
-+// rx8010_write_regs()
-+// writes a specified number of rx8010 registers (see Register defines)
-+// See also rx8010_write_reg() to write a single register.
-+//
-+//----------------------------------------------------------------------
-+static int rx8010_write_regs(struct i2c_client *client, int number, u8 length, u8 *values)
-+{
-+	int ret = i2c_smbus_write_i2c_block_data(client, number, length, values);
-+
-+	//check for error
-+	if (ret)
-+		dev_err(&client->dev, "Unable to write registers #%d..#%d\n", number, number + length - 1);
-+
-+	return ret;
-+}
-+
-+//----------------------------------------------------------------------
-+// rx8010_irq_1()
-+// irq handler
-+//
-+//----------------------------------------------------------------------
-+static irqreturn_t rx8010_irq_1(int irq, void *dev_id)
-+{
-+	struct i2c_client *client = dev_id;
-+	struct rx8010_data *rx8010 = i2c_get_clientdata(client);
-+
-+	disable_irq_nosync(irq);
-+	schedule_work(&rx8010->work_1);
-+
-+
-+	return IRQ_HANDLED;
-+}
-+
-+//----------------------------------------------------------------------
-+// rx8010_work_1()
-+//
-+//----------------------------------------------------------------------
-+static void rx8010_work_1(struct work_struct *work)
-+{
-+	struct rx8010_data *rx8010 = container_of(work, struct rx8010_data, work_1);
-+	struct i2c_client *client = rx8010->client;
-+	struct mutex *lock = &rx8010->rtc->ops_lock;
-+	u8 status;
-+
-+	mutex_lock(lock);
-+	
-+	if (rx8010_read_reg(client, RX8010_REG_FLAG, &status))
-+		goto out;
-+
-+	// check VLF
-+	if ((status & RX8010_BIT_FLAG_VLF))
-+		dev_warn(&client->dev, "Frequency stop was detected, probably due to a supply voltage drop\n");
-+			 
-+	dev_dbg(&client->dev, "%s: RX8010_REG_FLAG: %xh\n", __func__, status);
-+
-+	// periodic "fixed-cycle" timer
-+	if (status & RX8010_BIT_FLAG_TF) {
-+		status &= ~RX8010_BIT_FLAG_TF;
-+		local_irq_disable();
-+		rtc_update_irq(rx8010->rtc, 1, RTC_PF | RTC_IRQF);
-+		local_irq_enable();
-+	}
-+
-+	// alarm function
-+	if (status & RX8010_BIT_FLAG_AF) {
-+		status &= ~RX8010_BIT_FLAG_AF;
-+		local_irq_disable();
-+		rtc_update_irq(rx8010->rtc, 1, RTC_AF | RTC_IRQF);
-+		local_irq_enable();
-+	}
-+	
-+	// time update function
-+	if (status & RX8010_BIT_FLAG_UF) {
-+		status &= ~RX8010_BIT_FLAG_UF;
-+		local_irq_disable();
-+		rtc_update_irq(rx8010->rtc, 1, RTC_UF | RTC_IRQF);
-+		local_irq_enable();
-+	}
-+
-+	// acknowledge IRQ (clear flags)
-+	rx8010_write_reg(client, RX8010_REG_FLAG, status);		
-+
-+out:
-+	if (!rx8010->exiting)
-+	{
-+		if (rx8010->irq_1 > 0)
-+			enable_irq(rx8010->irq_1);
-+		else
-+			enable_irq(client->irq);
-+	}	
-+
-+	mutex_unlock(lock);
-+}
-+
-+//----------------------------------------------------------------------
-+// rx8010_irq_2()
-+// irq handler
-+//
-+//----------------------------------------------------------------------
-+static irqreturn_t rx8010_irq_2(int irq, void *dev_id)
-+{
-+	struct i2c_client *client = dev_id;
-+	struct rx8010_data *rx8010 = i2c_get_clientdata(client);
-+
-+	disable_irq_nosync(irq);
-+	schedule_work(&rx8010->work_2);
-+
-+
-+	return IRQ_HANDLED;
-+}
-+
-+//----------------------------------------------------------------------
-+// rx8010_work_2()
-+//
-+//----------------------------------------------------------------------
-+static void rx8010_work_2(struct work_struct *work)
-+{
-+	struct rx8010_data *rx8010 = container_of(work, struct rx8010_data, work_2);
-+	struct i2c_client *client = rx8010->client;
-+	struct mutex *lock = &rx8010->rtc->ops_lock;
-+	u8 status;
-+
-+	mutex_lock(lock);
-+	
-+	if (rx8010_read_reg(client, RX8010_REG_FLAG, &status))
-+		goto out;
-+
-+	// check VLF
-+	if ((status & RX8010_BIT_FLAG_VLF))
-+		dev_warn(&client->dev, "Frequency stop was detected, \
-+								probably due to a supply voltage drop\n");
-+			 
-+	dev_dbg(&client->dev, "%s: RX8010_REG_FLAG: %xh\n", __func__, status);
-+
-+	// periodic "fixed-cycle" timer
-+	if (status & RX8010_BIT_FLAG_TF) {
-+		status &= ~RX8010_BIT_FLAG_TF;
-+		local_irq_disable();
-+		rtc_update_irq(rx8010->rtc, 1, RTC_PF | RTC_IRQF);
-+		local_irq_enable();
-+	}
-+
-+	// acknowledge IRQ (clear flags)
-+	rx8010_write_reg(client, RX8010_REG_FLAG, status);		
-+
-+out:
-+	if (!rx8010->exiting)
-+	{
-+		if (rx8010->irq_2 > 0)
-+			enable_irq(rx8010->irq_2);
-+		else
-+			enable_irq(client->irq);
-+	}	
-+
-+	mutex_unlock(lock);
-+}
-+
-+//----------------------------------------------------------------------
-+// rx8010_get_time()
-+// gets the current time from the rx8010 registers
-+//
-+//----------------------------------------------------------------------
-+static int rx8010_get_time(struct device *dev, struct rtc_time *dt)
-+{
-+	struct rx8010_data *rx8010 = dev_get_drvdata(dev);
-+	u8 date[7];
-+	int err;
-+
-+	err = rx8010_read_regs(rx8010->client, RX8010_REG_SEC, 7, date);
-+	if (err)
-+		return err;
-+
-+	dev_dbg(dev, "%s: read 0x%02x 0x%02x "
-+		"0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\n", __func__,
-+		date[0], date[1], date[2], date[3], date[4], date[5], date[6]);
-+
-+	//Note: need to subtract 0x10 for index as register offset starts at 0x10
-+	dt->tm_sec = bcd2bin(date[RX8010_REG_SEC-0x10] & 0x7f);
-+	dt->tm_min = bcd2bin(date[RX8010_REG_MIN-0x10] & 0x7f);
-+	dt->tm_hour = bcd2bin(date[RX8010_REG_HOUR-0x10] & 0x3f);	//only 24-hour clock
-+	dt->tm_mday = bcd2bin(date[RX8010_REG_MDAY-0x10] & 0x3f);
-+	dt->tm_mon = bcd2bin(date[RX8010_REG_MONTH-0x10] & 0x1f) - 1;
-+	dt->tm_year = bcd2bin(date[RX8010_REG_YEAR-0x10]);
-+	dt->tm_wday = bcd2bin(date[RX8010_REG_WDAY-0x10] & 0x7f);
-+
-+	if (dt->tm_year < 70)
-+		dt->tm_year += 100;
-+
-+	dev_dbg(dev, "%s: date %ds %dm %dh %dmd %dm %dy\n", __func__,
-+		dt->tm_sec, dt->tm_min, dt->tm_hour,
-+		dt->tm_mday, dt->tm_mon, dt->tm_year);
-+
-+	return rtc_valid_tm(dt);
-+}
-+
-+//----------------------------------------------------------------------
-+// rx8010_set_time()
-+// Sets the current time in the rx8010 registers
-+//
-+// BUG: The HW assumes every year that is a multiple of 4 to be a leap
-+// year. Next time this is wrong is 2100, which will not be a leap year
-+//
-+// Note: If STOP is not set/cleared, the clock will start when the seconds
-+//       register is written
-+//
-+//----------------------------------------------------------------------
-+static int rx8010_set_time(struct device *dev, struct rtc_time *dt)
-+{
-+	struct rx8010_data *rx8010 = dev_get_drvdata(dev);
-+	u8 date[7];
-+	u8 ctrl;
-+	int ret;
-+
-+	//set STOP bit before changing clock/calendar
-+	rx8010_read_reg(rx8010->client, RX8010_REG_CTRL, &ctrl);
-+	rx8010->ctrlreg = ctrl | RX8010_BIT_CTRL_STOP;
-+	rx8010_write_reg(rx8010->client, RX8010_REG_CTRL, rx8010->ctrlreg);
-+	
-+	//Note: need to subtract 0x10 for index as register offset starts at 0x10
-+	date[RX8010_REG_SEC-0x10] = bin2bcd(dt->tm_sec);
-+	date[RX8010_REG_MIN-0x10] = bin2bcd(dt->tm_min);
-+	date[RX8010_REG_HOUR-0x10] = bin2bcd(dt->tm_hour);		//only 24hr time
-+
-+	date[RX8010_REG_MDAY-0x10] = bin2bcd(dt->tm_mday);
-+	date[RX8010_REG_MONTH-0x10] = bin2bcd(dt->tm_mon + 1);
-+	date[RX8010_REG_YEAR-0x10] = bin2bcd(dt->tm_year % 100);
-+	date[RX8010_REG_WDAY-0x10] = bin2bcd(dt->tm_wday);
-+
-+	dev_dbg(dev, "%s: write 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\n",
-+		__func__, date[0], date[1], date[2], date[3], date[4], date[5], date[6]);
-+
-+	ret =  rx8010_write_regs(rx8010->client, RX8010_REG_SEC, 7, date);
-+
-+	//clear STOP bit after changing clock/calendar
-+	rx8010_read_reg(rx8010->client, RX8010_REG_CTRL, &ctrl);
-+	rx8010->ctrlreg = ctrl & ~RX8010_BIT_CTRL_STOP;
-+	rx8010_write_reg(rx8010->client, RX8010_REG_CTRL, rx8010->ctrlreg);
-+
-+	return ret;
-+}
-+
-+//----------------------------------------------------------------------
-+// rx8010_init_client()
-+// initializes the rx8010
-+//
-+//----------------------------------------------------------------------
-+static int rx8010_init_client(struct i2c_client *client, int *need_reset)
-+{
-+	struct rx8010_data *rx8010 = i2c_get_clientdata(client);
-+	u8 ctrl[3];
-+	int need_clear = 0;
-+	int err;
-+
-+	//set reserved register 0x17 with specified value of 0xD8
-+	err = rx8010_write_reg(client, 0x17, 0xD8);
-+	if (err)
-+		goto out;
-+	
-+	//set reserved register 0x30 with specified value of 0x00
-+	err = rx8010_write_reg(client, 0x30, 0x00);
-+	if (err)
-+		goto out;
-+
-+	//set reserved register 0x31 with specified value of 0x08
-+	err = rx8010_write_reg(client, 0x31, 0x08);
-+	if (err)
-+		goto out;
-+		
-+	//set reserved register 0x32 with default value
-+	err = rx8010_write_reg(client, RX8010_REG_IRQ, 0x00);
-+	if (err)
-+		goto out;		
-+		
-+
-+	//get current extension, flag, control register values
-+	err = rx8010_read_regs(rx8010->client, RX8010_REG_EXT, 3, ctrl);
-+	if (err)
-+		goto out;
-+	
-+	//check for VLF Flag (set at power-on)
-+	if ((ctrl[1] & RX8010_BIT_FLAG_VLF)) {
-+		dev_warn(&client->dev, "Frequency stop was detected, probably due to a supply voltage drop\n");
-+		*need_reset = 1;
-+	}
-+
-+	//check for Alarm Flag
-+	if (ctrl[1] & RX8010_BIT_FLAG_AF) {
-+		dev_warn(&client->dev, "Alarm was detected\n");
-+		need_clear = 1;
-+	}
-+
-+	//check for Periodic Timer Flag
-+	if (ctrl[1] & RX8010_BIT_FLAG_TF) {
-+		dev_warn(&client->dev, "Periodic timer was detected\n");
-+		need_clear = 1;
-+	}
-+	
-+	//check for Update Timer Flag
-+	if (ctrl[1] & RX8010_BIT_FLAG_UF) {
-+		dev_warn(&client->dev, "Update timer was detected\n");
-+		need_clear = 1;
-+	}
-+
-+	//reset or clear needed?
-+	if (*need_reset) {
-+		//clear 1d, 1e, 1f registers
-+		ctrl[0] = ctrl[1] = ctrl[2] = 0;
-+		err = rx8010_write_regs(client, RX8010_REG_EXT, 3, ctrl);
-+		if (err)
-+			goto out;
-+	}
-+	else if(need_clear){
-+		//clear flag register
-+		err = rx8010_write_reg(client, RX8010_REG_FLAG, 0x00);
-+		if (err)
-+			goto out;
-+	}
-+	
-+	//set "test bit" and reserved bits of control register zero
-+	rx8010->ctrlreg = (ctrl[2] & ~RX8010_BIT_CTRL_TEST);		
-+out:
-+	return err;
-+}
-+
-+//----------------------------------------------------------------------
-+// rx8010_read_alarm()
-+// reads current Alarm 
-+//
-+// Notes: - currently filters the AE bits (bit 7)
-+//        - assumes WADA setting is week (week/day) 
-+//----------------------------------------------------------------------
-+static int rx8010_read_alarm(struct device *dev, struct rtc_wkalrm *t)
-+{
-+	struct rx8010_data *rx8010 = dev_get_drvdata(dev);
-+	struct i2c_client *client = rx8010->client;
-+	u8 alarmvals[3];		//minute, hour, week/day values
-+	u8 ctrl[3];				//extension, flag, control values
-+	int err;
-+
-+	if (client->irq <= 0)
-+		return -EINVAL;
-+
-+	//get current minute, hour, week/day alarm values
-+	err = rx8010_read_regs(client, RX8010_REG_ALMIN, 3, alarmvals);
-+	if (err)
-+		return err;
-+	dev_dbg(dev, "%s: minutes:0x%02x hours:0x%02x week/day:0x%02x\n",
-+		__func__, alarmvals[0], alarmvals[1], alarmvals[2]);
-+
-+	
-+	//get current extension, flag, control register values
-+	err = rx8010_read_regs(client, RX8010_REG_EXT, 3, ctrl);
-+	if (err)
-+		return err;
-+	dev_dbg(dev, "%s: extension:0x%02x flag:0x%02x control:0x%02x \n",
-+		__func__, ctrl[0], ctrl[1], ctrl[2]);
-+
-+	// Hardware alarm precision is 1 minute
-+	t->time.tm_sec = 0;
-+	t->time.tm_min = bcd2bin(alarmvals[0] & 0x7f);		//0x7f filters AE bit currently
-+	t->time.tm_hour = bcd2bin(alarmvals[1] & 0x3f);		//0x3f filters AE bit currently, also 24hr only
-+
-+	t->time.tm_wday = -1;
-+	t->time.tm_mday = -1;
-+	t->time.tm_mon = -1;
-+	t->time.tm_year = -1;
-+
-+	dev_dbg(dev, "%s: date: %ds %dm %dh %dmd %dm %dy\n",
-+		__func__,
-+		t->time.tm_sec, t->time.tm_min, t->time.tm_hour,
-+		t->time.tm_mday, t->time.tm_mon, t->time.tm_year);
-+		
-+	t->enabled = !!(rx8010->ctrlreg & RX8010_BIT_CTRL_AIE);		//check if interrupt is enabled
-+	t->pending = (ctrl[1] & RX8010_BIT_FLAG_AF) && t->enabled;	//check if flag is triggered
-+
-+	return err;
-+}
-+
-+//----------------------------------------------------------------------
-+// rx8010_set_alarm()
-+// sets Alarm 
-+//
-+// Notes: - currently filters the AE bits (bit 7)
-+//        - assumes WADA setting is week (week/day) 
-+//----------------------------------------------------------------------
-+static int rx8010_set_alarm(struct device *dev, struct rtc_wkalrm *t)
-+{
-+	struct i2c_client *client = to_i2c_client(dev);
-+	struct rx8010_data *rx8010 = dev_get_drvdata(dev);
-+	u8 alarmvals[3];		//minute, hour, day
-+	u8 extreg;				//extension register
-+	u8 flagreg;				//flag register
-+	int err;
-+	 
-+	if (client->irq <= 0)
-+		return -EINVAL;
-+		
-+	//get current extension register
-+	err = rx8010_read_reg(client, RX8010_REG_EXT, &extreg);
-+	if (err <0)
-+		return err;
-+	
-+	//get current flag register
-+	err = rx8010_read_reg(client, RX8010_REG_FLAG, &flagreg);
-+	if (err <0)
-+		return err;
-+
-+	// Hardware alarm precision is 1 minute
-+	alarmvals[0] = bin2bcd(t->time.tm_min);
-+	alarmvals[1] = bin2bcd(t->time.tm_hour);
-+	alarmvals[2] = bin2bcd(t->time.tm_mday);
-+	dev_dbg(dev, "%s: write 0x%02x 0x%02x 0x%02x\n", __func__, alarmvals[0], alarmvals[1], alarmvals[2]);
-+
-+	//check interrupt enable and disable
-+	if (rx8010->ctrlreg & RX8010_BIT_CTRL_AIE) {
-+		rx8010->ctrlreg &= ~RX8010_BIT_CTRL_AIE;
-+		err = rx8010_write_reg(rx8010->client, RX8010_REG_CTRL, rx8010->ctrlreg);
-+		if (err)
-+			return err;
-+	}
-+	
-+	//write the new minute and hour values
-+	//Note:assume minute and hour values will be enabled. Bit 7 of each of the
-+	//     minute, hour, week/day register can be set which will "disable" the
-+	//     register from triggering an alarm. See the RX8010 spec for more information
-+	err = rx8010_write_regs(rx8010->client, RX8010_REG_ALMIN, 2, alarmvals);
-+	if (err)
-+		return err;
-+
-+	//set Week/Day bit
-+	// Week setting is typically not used, so we will assume "day" setting
-+	extreg |= RX8010_BIT_EXT_WADA;		//set to "day of month"
-+	err = rx8010_write_reg(rx8010->client, RX8010_REG_EXT, extreg);
-+	if (err)
-+		return err;
-+
-+	//set Day of Month register
-+	if (alarmvals[2] == 0) {
-+		alarmvals[2] |= 0x80;	//turn on AE bit to ignore day of month (no zero day)
-+		err = rx8010_write_reg(rx8010->client, RX8010_REG_ALWDAY, alarmvals[2]);
-+	}
-+	else {
-+		err = rx8010_write_reg(rx8010->client, RX8010_REG_ALWDAY, alarmvals[2]);
-+	}
-+	if (err)
-+		return err;
-+
-+	//clear Alarm Flag
-+	flagreg &= ~RX8010_BIT_FLAG_AF;
-+	err = rx8010_write_reg(rx8010->client, RX8010_REG_FLAG, flagreg);
-+	if (err)
-+		return err;
-+
-+	//re-enable interrupt if required
-+	if (t->enabled) {
-+
-+		if ( rx8010->rtc->uie_rtctimer.enabled )
-+			rx8010->ctrlreg |= RX8010_BIT_CTRL_UIE;								//set update interrupt enable
-+		if ( rx8010->rtc->aie_timer.enabled )
-+			rx8010->ctrlreg |= (RX8010_BIT_CTRL_AIE | RX8010_BIT_CTRL_UIE);		//set alarm interrupt enable
-+			
-+		err = rx8010_write_reg(rx8010->client, RX8010_REG_CTRL, rx8010->ctrlreg);
-+		if (err)
-+			return err;
-+	}
-+
-+	return 0;
-+}
-+
-+//----------------------------------------------------------------------
-+// rx8010_alarm_irq_enable()
-+// sets enables Alarm IRQ
-+//
-+// Todo: - 
-+//
-+//----------------------------------------------------------------------
-+static int rx8010_alarm_irq_enable(struct device *dev, unsigned int enabled)
-+{
-+	struct i2c_client *client = to_i2c_client(dev);
-+	struct rx8010_data *rx8010 = dev_get_drvdata(dev);
-+	u8 flagreg;
-+	u8 ctrl;
-+	int err;
-+	
-+	//get the current ctrl settings
-+	ctrl = rx8010->ctrlreg;
-+
-+	if (enabled)
-+	{
-+		if ( rx8010->rtc->uie_rtctimer.enabled )
-+			ctrl |= RX8010_BIT_CTRL_UIE;								//set update interrupt enable
-+		if ( rx8010->rtc->aie_timer.enabled )
-+			ctrl |= (RX8010_BIT_CTRL_AIE | RX8010_BIT_CTRL_UIE);		//set alarm interrupt enable		
-+	}
-+	else
-+	{
-+		if ( ! rx8010->rtc->uie_rtctimer.enabled )
-+			ctrl &= ~RX8010_BIT_CTRL_UIE;								//clear update interrupt enable
-+		if ( ! rx8010->rtc->aie_timer.enabled )
-+		{
-+			if ( rx8010->rtc->uie_rtctimer.enabled )
-+				ctrl &= ~RX8010_BIT_CTRL_AIE;
-+			else
-+				ctrl &= ~(RX8010_BIT_CTRL_AIE | RX8010_BIT_CTRL_UIE);	//clear alarm interrupt enable
-+		}		
-+	}
-+
-+	//clear alarm flag
-+	err = rx8010_read_reg(client, RX8010_REG_FLAG, &flagreg);
-+	if (err <0)
-+		return err;
-+	flagreg &= ~RX8010_BIT_FLAG_AF;
-+	err = rx8010_write_reg(rx8010->client, RX8010_REG_FLAG, flagreg);
-+	if (err)
-+		return err;
-+	
-+	//update the Control register if the setting changed
-+	if (ctrl != rx8010->ctrlreg) {
-+		rx8010->ctrlreg = ctrl;
-+		err = rx8010_write_reg(rx8010->client, RX8010_REG_CTRL, rx8010->ctrlreg);
-+		if (err)
-+			return err;
-+	}
-+	
-+	return 0;
-+}
-+
-+//---------------------------------------------------------------------------
-+// rx8010_ioctl()
-+//
-+//---------------------------------------------------------------------------
-+static int rx8010_ioctl(struct device *dev, unsigned int cmd, unsigned long arg)
-+{
-+	struct i2c_client *client = to_i2c_client(dev);
-+	//struct rx8010_data *rx8010 = dev_get_drvdata(dev);
-+	//struct mutex *lock = &rx8010->rtc->ops_lock;
-+	int ret = 0;
-+	int tmp;
-+	void __user *argp = (void __user *)arg;
-+	reg_data reg;
-+	
-+	dev_dbg(dev, "%s: cmd=%x\n", __func__, cmd);
-+
-+	switch (cmd) {
-+		case SE_RTC_REG_READ:
-+			if (copy_from_user(&reg, argp, sizeof(reg)))
-+				return -EFAULT;
-+			if ( reg.number < RX8010_REG_SEC || reg.number > RX8010_REG_IRQ )
-+				return -EFAULT;
-+			//mutex_lock(lock);
-+			ret = rx8010_read_reg(client, reg.number, &reg.value);
-+			//mutex_unlock(lock);
-+			if (! ret )				
-+				return copy_to_user(argp, &reg, sizeof(reg)) ? -EFAULT : 0;
-+			break;
-+			
-+		case SE_RTC_REG_WRITE:
-+			if (copy_from_user(&reg, argp, sizeof(reg)))
-+				return -EFAULT;
-+			if ( reg.number < RX8010_REG_SEC || reg.number > RX8010_REG_IRQ )
-+				return -EFAULT;				
-+			//mutex_lock(lock);
-+			ret = rx8010_write_reg(client, reg.number, reg.value);
-+			//mutex_unlock(lock);
-+			break;
-+	
-+		case RTC_VL_READ:
-+			//mutex_lock(lock);
-+			ret = rx8010_read_reg(client, RX8010_REG_FLAG, &reg.value);
-+			//mutex_unlock(lock);
-+			if (! ret)	
-+			{
-+				tmp = !!(reg.value & RX8010_BIT_FLAG_VLF);
-+				return copy_to_user(argp, &tmp, sizeof(tmp)) ? -EFAULT : 0;
-+			}			
-+			break;			
-+				
-+		case RTC_VL_CLR:
-+			//mutex_lock(lock);
-+			ret = rx8010_read_reg(client, RX8010_REG_FLAG, &reg.value);
-+			if (! ret)
-+			{
-+				reg.value &= ~RX8010_BIT_FLAG_VLF;
-+				ret = rx8010_write_reg(client, RX8010_REG_FLAG, reg.value);
-+			}
-+			//mutex_unlock(lock);
-+			break;
-+			
-+		default:
-+			return -ENOIOCTLCMD;			
-+	}
-+	
-+	return ret;
-+}
-+
-+static struct rtc_class_ops rx8010_rtc_ops = {
-+	.read_time = rx8010_get_time,
-+	.set_time = rx8010_set_time,
-+	.read_alarm = rx8010_read_alarm,
-+	.set_alarm = rx8010_set_alarm,
-+	.alarm_irq_enable = rx8010_alarm_irq_enable,
-+	.ioctl = rx8010_ioctl,
-+};
-+
-+//----------------------------------------------------------------------
-+// rx8010_probe()
-+// probe routine for the rx8010 driver
-+//
-+//----------------------------------------------------------------------
-+static int rx8010_probe(struct i2c_client *client, const struct i2c_device_id *id)
-+{
-+	struct device_node *np = client->dev.of_node; 
-+	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
-+	struct rx8010_data *rx8010;
-+	int err, gpio, i, irqs_success = 0, need_reset = 0;
-+	const char * irq_name[2] = {"rx8010-irq_1", "rx8010-irq_2"};
-+
-+	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_I2C_BLOCK)) {
-+		dev_err(&adapter->dev, "doesn't support required functionality\n");
-+		err = -EIO;
-+		goto errout;
-+	}
-+
-+	rx8010 = devm_kzalloc(&client->dev, sizeof(struct rx8010_data), GFP_KERNEL);
-+	if (!rx8010) {
-+		dev_err(&adapter->dev, "failed to alloc memory\n");
-+		err = -ENOMEM;
-+		goto errout;
-+	}
-+
-+	rx8010->client = client;
-+	i2c_set_clientdata(client, rx8010);
-+
-+	err = rx8010_init_client(client, &need_reset);
-+	if (err)
-+		goto errout;
-+
-+
-+	if (need_reset) {
-+		struct rtc_time tm;
-+		rtc_time_to_tm(0, &tm);		// set to 1970/1/1
-+		rx8010_set_time(&client->dev, &tm);
-+		dev_warn(&client->dev, " - time reset to 1970/1/1\n");
-+	}
-+
-+	rx8010->rtc = rtc_device_register(client->name, &client->dev, &rx8010_rtc_ops, THIS_MODULE);
-+	
-+	if (IS_ERR(rx8010->rtc)) {
-+		err = PTR_ERR(rx8010->rtc);
-+		dev_err(&client->dev, "unable to register the class device\n");
-+		goto errout;
-+	}
-+
-+	// get interrupts
-+	rx8010->irq_1 = rx8010->irq_2 = -1;
-+	for ( i=0; i < 2; i++ )
-+	{
-+		gpio = of_get_named_gpio(np, irq_name[i], 0);
-+		if (gpio_is_valid(gpio)) {
-+			int irq;
-+			err = devm_gpio_request_one(&client->dev, gpio, GPIOF_DIR_IN, 
-+															irq_name[i]);
-+			if (err) {
-+				dev_err(&client->dev, "cannot request %s\n", irq_name[i]);
-+				goto errout_reg;
-+			}
-+			irq = gpio_to_irq(gpio);
-+			dev_dbg(&client->dev, "%s %d\n", irq_name[i], irq);
-+			if (irq <= 0) {
-+				dev_warn(&client->dev, "Failed to "
-+					"convert gpio #%d to %s\n",
-+					gpio, irq_name[i]);
-+				goto errout_reg;
-+			}
-+			err = devm_request_threaded_irq(&client->dev,irq, NULL, 
-+											i==0 ? rx8010_irq_1 : rx8010_irq_2, 
-+											IRQF_TRIGGER_LOW | IRQF_ONESHOT,
-+											irq_name[i], 
-+											client);	
-+			if (err) {
-+				dev_err(&client->dev, "unable to request %s\n", irq_name[i]);
-+				goto errout_reg;
-+			}
-+			if (i == 0)
-+			{
-+				rx8010->irq_1 = irq;
-+				INIT_WORK(&rx8010->work_1, rx8010_work_1);
-+			}
-+			else
-+			{
-+				rx8010->irq_2 = irq;
-+				INIT_WORK(&rx8010->work_2, rx8010_work_2);
-+			}
-+			irqs_success++;		
-+		} else {
-+				dev_warn(&client->dev, "%s missing or invalid\n", 
-+										irq_name[i]);
-+		}
-+	}
-+	
-+	// another irq request try if one failed above
-+	if ( ! irqs_success && client->irq > 0 ){
-+		dev_info(&client->dev, "IRQ %d supplied\n", client->irq);
-+		err = devm_request_threaded_irq(&client->dev,client->irq, NULL, 
-+										rx8010_irq_1, 
-+										IRQF_TRIGGER_LOW | IRQF_ONESHOT,
-+										"rx8010", client);
-+		
-+		if (err) {
-+			dev_err(&client->dev, "unable to request IRQ\n");
-+			goto errout_reg;
-+		}
-+		INIT_WORK(&rx8010->work_1, rx8010_work_1);	
-+	}
-+		
-+
-+	rx8010->rtc->irq_freq = 1;
-+	rx8010->rtc->max_user_freq = 1;
-+		
-+	return 0;
-+
-+errout_reg:
-+	rtc_device_unregister(rx8010->rtc);
-+
-+errout:
-+	dev_err(&adapter->dev, "probing for rx8010 failed\n");
-+	return err;
-+}
-+
-+//----------------------------------------------------------------------
-+// rx8010_remove()
-+// remove routine for the rx8010 driver
-+//
-+//----------------------------------------------------------------------
-+static int rx8010_remove(struct i2c_client *client)
-+{
-+	struct rx8010_data *rx8010 = i2c_get_clientdata(client);
-+	struct mutex *lock = &rx8010->rtc->ops_lock;
-+
-+	if (client->irq > 0 || rx8010->irq_1 > 0 || rx8010->irq_2 > 0) {
-+		mutex_lock(lock);
-+		rx8010->exiting = 1;
-+		mutex_unlock(lock);
-+
-+		//cancel_work
-+		if (rx8010->irq_1 > 0 || client->irq > 0)
-+			cancel_work_sync(&rx8010->work_1);
-+		if (rx8010->irq_2 > 0)
-+			cancel_work_sync(&rx8010->work_2);
-+	}
-+
-+	rtc_device_unregister(rx8010->rtc);
-+	
-+	return 0;
-+}
-+
-+static struct i2c_driver rx8010_driver = {
-+	.driver = {
-+		.name = "rtc-rx8010",
-+		.owner = THIS_MODULE,
-+	},
-+	.probe		= rx8010_probe,
-+	.remove		= rx8010_remove,
-+	.id_table	= rx8010_id,
-+};
-+
-+module_i2c_driver(rx8010_driver);
-+
-+MODULE_AUTHOR("Dennis Henderson <henderson.dennis@erd.epson.com>");
-+MODULE_DESCRIPTION("RX-8010 SJ RTC driver");
-+MODULE_LICENSE("GPL");
--- 
-2.5.0
-
diff --git a/recipes-kernel/linux/linux-ge-3.14/0002-mfd-da9063-Add-support-for-production-silicon-varian.patch b/recipes-kernel/linux/linux-ge-3.14/0002-mfd-da9063-Add-support-for-production-silicon-varian.patch
deleted file mode 100644
index 1866b02..0000000
--- a/recipes-kernel/linux/linux-ge-3.14/0002-mfd-da9063-Add-support-for-production-silicon-varian.patch
+++ /dev/null
@@ -1,101 +0,0 @@
-From 19c444fc1fcc26077437e3fd5acef9fcf6044b9c Mon Sep 17 00:00:00 2001
-From: "Opensource [Steve Twiss]" <stwiss.opensource@diasemi.com>
-Date: Fri, 14 Feb 2014 14:08:11 +0000
-Subject: [PATCH 02/10] mfd: da9063: Add support for production silicon variant
- code
-
-Add the correct silicon variant code ID (0x5) to the driver. This
-new code is the 'production' variant code ID for DA9063.
-
-This patch will remove the older variant code ID which matches the
-pre-production silicon ID (0x3) for the DA9063 chip.
-
-There is also some small amount of correction done in this patch:
-it splits the revision code and correctly names it according to
-the hardware specification and moves the dev_info() call before
-the variant ID test.
-
-Signed-off-by: Opensource [Steve Twiss] <stwiss.opensource@diasemi.com>
-Signed-off-by: Lee Jones <lee.jones@linaro.org>
----
- drivers/mfd/da9063-core.c       | 25 ++++++++++++++-----------
- include/linux/mfd/da9063/core.h |  6 +++++-
- 2 files changed, 19 insertions(+), 12 deletions(-)
-
-diff --git a/drivers/mfd/da9063-core.c b/drivers/mfd/da9063-core.c
-index 26937cd..e70ae31 100644
---- a/drivers/mfd/da9063-core.c
-+++ b/drivers/mfd/da9063-core.c
-@@ -110,7 +110,7 @@ static const struct mfd_cell da9063_devs[] = {
- int da9063_device_init(struct da9063 *da9063, unsigned int irq)
- {
- 	struct da9063_pdata *pdata = da9063->dev->platform_data;
--	int model, revision;
-+	int model, variant_id, variant_code;
- 	int ret;
- 
- 	if (pdata) {
-@@ -141,23 +141,26 @@ int da9063_device_init(struct da9063 *da9063, unsigned int irq)
- 		return -ENODEV;
- 	}
- 
--	ret = regmap_read(da9063->regmap, DA9063_REG_CHIP_VARIANT, &revision);
-+	ret = regmap_read(da9063->regmap, DA9063_REG_CHIP_VARIANT, &variant_id);
- 	if (ret < 0) {
--		dev_err(da9063->dev, "Cannot read chip revision id.\n");
-+		dev_err(da9063->dev, "Cannot read chip variant id.\n");
- 		return -EIO;
- 	}
--	revision >>= DA9063_CHIP_VARIANT_SHIFT;
--	if (revision != 3) {
--		dev_err(da9063->dev, "Unknown chip revision: %d\n", revision);
-+
-+	variant_code = variant_id >> DA9063_CHIP_VARIANT_SHIFT;
-+
-+	dev_info(da9063->dev,
-+		 "Device detected (chip-ID: 0x%02X, var-ID: 0x%02X)\n",
-+		 model, variant_id);
-+
-+	if (variant_code != PMIC_DA9063_BB) {
-+		dev_err(da9063->dev, "Unknown chip variant code: 0x%02X\n",
-+				variant_code);
- 		return -ENODEV;
- 	}
- 
- 	da9063->model = model;
--	da9063->revision = revision;
--
--	dev_info(da9063->dev,
--		 "Device detected (model-ID: 0x%02X  rev-ID: 0x%02X)\n",
--		 model, revision);
-+	da9063->variant_code = variant_code;
- 
- 	ret = da9063_irq_init(da9063);
- 	if (ret) {
-diff --git a/include/linux/mfd/da9063/core.h b/include/linux/mfd/da9063/core.h
-index 2d2a0af..00a9aac 100644
---- a/include/linux/mfd/da9063/core.h
-+++ b/include/linux/mfd/da9063/core.h
-@@ -33,6 +33,10 @@ enum da9063_models {
- 	PMIC_DA9063 = 0x61,
- };
- 
-+enum da9063_variant_codes {
-+	PMIC_DA9063_BB = 0x5
-+};
-+
- /* Interrupts */
- enum da9063_irqs {
- 	DA9063_IRQ_ONKEY = 0,
-@@ -72,7 +76,7 @@ struct da9063 {
- 	/* Device */
- 	struct device	*dev;
- 	unsigned short	model;
--	unsigned short	revision;
-+	unsigned char	variant_code;
- 	unsigned int	flags;
- 
- 	/* Control interface */
--- 
-2.5.0
-
diff --git a/recipes-kernel/linux/linux-ge-3.14/0003-mfd-da9063-Upgrade-of-register-definitions-to-suppor.patch b/recipes-kernel/linux/linux-ge-3.14/0003-mfd-da9063-Upgrade-of-register-definitions-to-suppor.patch
deleted file mode 100644
index 0e22385..0000000
--- a/recipes-kernel/linux/linux-ge-3.14/0003-mfd-da9063-Upgrade-of-register-definitions-to-suppor.patch
+++ /dev/null
@@ -1,257 +0,0 @@
-From b7085a60a9784fce6e0a01c333f875cc7ee9826d Mon Sep 17 00:00:00 2001
-From: "Opensource [Steve Twiss]" <stwiss.opensource@diasemi.com>
-Date: Thu, 6 Mar 2014 16:40:02 +0000
-Subject: [PATCH 03/10] mfd: da9063: Upgrade of register definitions to support
- production silicon
-
-This patch updates the register definitions for DA9063 to support the
-production silicon variant code ID (0x5). These changes are not backwards
-compatible with the previous register definitions and can only be used
-with the production variant of DA9063.
-
-Signed-off-by: Opensource [Steve Twiss] <stwiss.opensource@diasemi.com>
-Signed-off-by: Lee Jones <lee.jones@linaro.org>
----
- include/linux/mfd/da9063/registers.h | 120 ++++++++++++++++++-----------------
- 1 file changed, 62 insertions(+), 58 deletions(-)
-
-diff --git a/include/linux/mfd/da9063/registers.h b/include/linux/mfd/da9063/registers.h
-index 5834813..09a85c6 100644
---- a/include/linux/mfd/da9063/registers.h
-+++ b/include/linux/mfd/da9063/registers.h
-@@ -17,11 +17,7 @@
- #define	_DA9063_REG_H
- 
- #define DA9063_I2C_PAGE_SEL_SHIFT	1
--
- #define	DA9063_EVENT_REG_NUM		4
--#define	DA9210_EVENT_REG_NUM		2
--#define	DA9063_EXT_EVENT_REG_NUM	(DA9063_EVENT_REG_NUM + \
--						DA9210_EVENT_REG_NUM)
- 
- /* Page selection I2C or SPI always in the begining of any page. */
- /* Page 0 : I2C access 0x000 - 0x0FF	SPI access 0x000 - 0x07F */
-@@ -61,9 +57,9 @@
- #define	DA9063_REG_GPIO_10_11		0x1A
- #define	DA9063_REG_GPIO_12_13		0x1B
- #define	DA9063_REG_GPIO_14_15		0x1C
--#define	DA9063_REG_GPIO_MODE_0_7	0x1D
--#define	DA9063_REG_GPIO_MODE_8_15	0x1E
--#define	DA9063_REG_GPIO_SWITCH_CONT	0x1F
-+#define	DA9063_REG_GPIO_MODE0_7		0x1D
-+#define	DA9063_REG_GPIO_MODE8_15	0x1E
-+#define	DA9063_REG_SWITCH_CONT		0x1F
- 
- /* Regulator Control Registers */
- #define	DA9063_REG_BCORE2_CONT		0x20
-@@ -83,7 +79,7 @@
- #define	DA9063_REG_LDO9_CONT		0x2E
- #define	DA9063_REG_LDO10_CONT		0x2F
- #define	DA9063_REG_LDO11_CONT		0x30
--#define	DA9063_REG_VIB			0x31
-+#define	DA9063_REG_SUPPLIES		0x31
- #define	DA9063_REG_DVC_1		0x32
- #define	DA9063_REG_DVC_2		0x33
- 
-@@ -97,9 +93,9 @@
- #define	DA9063_REG_ADCIN1_RES		0x3A
- #define	DA9063_REG_ADCIN2_RES		0x3B
- #define	DA9063_REG_ADCIN3_RES		0x3C
--#define	DA9063_REG_MON1_RES		0x3D
--#define	DA9063_REG_MON2_RES		0x3E
--#define	DA9063_REG_MON3_RES		0x3F
-+#define	DA9063_REG_MON_A8_RES		0x3D
-+#define	DA9063_REG_MON_A9_RES		0x3E
-+#define	DA9063_REG_MON_A10_RES		0x3F
- 
- /* RTC Calendar and Alarm Registers */
- #define	DA9063_REG_COUNT_S		0x40
-@@ -108,15 +104,16 @@
- #define	DA9063_REG_COUNT_D		0x43
- #define	DA9063_REG_COUNT_MO		0x44
- #define	DA9063_REG_COUNT_Y		0x45
--#define	DA9063_REG_ALARM_MI		0x46
--#define	DA9063_REG_ALARM_H		0x47
--#define	DA9063_REG_ALARM_D		0x48
--#define	DA9063_REG_ALARM_MO		0x49
--#define	DA9063_REG_ALARM_Y		0x4A
--#define	DA9063_REG_SECOND_A		0x4B
--#define	DA9063_REG_SECOND_B		0x4C
--#define	DA9063_REG_SECOND_C		0x4D
--#define	DA9063_REG_SECOND_D		0x4E
-+#define	DA9063_REG_ALARM_S		0x46
-+#define	DA9063_REG_ALARM_MI		0x47
-+#define	DA9063_REG_ALARM_H		0x48
-+#define	DA9063_REG_ALARM_D		0x49
-+#define	DA9063_REG_ALARM_MO		0x4A
-+#define	DA9063_REG_ALARM_Y		0x4B
-+#define	DA9063_REG_SECOND_A		0x4C
-+#define	DA9063_REG_SECOND_B		0x4D
-+#define	DA9063_REG_SECOND_C		0x4E
-+#define	DA9063_REG_SECOND_D		0x4F
- 
- /* Sequencer Control Registers */
- #define	DA9063_REG_SEQ			0x81
-@@ -226,35 +223,37 @@
- #define	DA9063_REG_CONFIG_J		0x10F
- #define	DA9063_REG_CONFIG_K		0x110
- #define	DA9063_REG_CONFIG_L		0x111
--#define	DA9063_REG_MON_REG_1		0x112
--#define	DA9063_REG_MON_REG_2		0x113
--#define	DA9063_REG_MON_REG_3		0x114
--#define	DA9063_REG_MON_REG_4		0x115
--#define	DA9063_REG_MON_REG_5		0x116
--#define	DA9063_REG_MON_REG_6		0x117
--#define	DA9063_REG_TRIM_CLDR		0x118
--
-+#define	DA9063_REG_CONFIG_M		0x112
-+#define	DA9063_REG_CONFIG_N		0x113
-+
-+#define	DA9063_REG_MON_REG_1		0x114
-+#define	DA9063_REG_MON_REG_2		0x115
-+#define	DA9063_REG_MON_REG_3		0x116
-+#define	DA9063_REG_MON_REG_4		0x117
-+#define	DA9063_REG_MON_REG_5		0x11E
-+#define	DA9063_REG_MON_REG_6		0x11F
-+#define	DA9063_REG_TRIM_CLDR		0x120
- /* General Purpose Registers */
--#define	DA9063_REG_GP_ID_0		0x119
--#define	DA9063_REG_GP_ID_1		0x11A
--#define	DA9063_REG_GP_ID_2		0x11B
--#define	DA9063_REG_GP_ID_3		0x11C
--#define	DA9063_REG_GP_ID_4		0x11D
--#define	DA9063_REG_GP_ID_5		0x11E
--#define	DA9063_REG_GP_ID_6		0x11F
--#define	DA9063_REG_GP_ID_7		0x120
--#define	DA9063_REG_GP_ID_8		0x121
--#define	DA9063_REG_GP_ID_9		0x122
--#define	DA9063_REG_GP_ID_10		0x123
--#define	DA9063_REG_GP_ID_11		0x124
--#define	DA9063_REG_GP_ID_12		0x125
--#define	DA9063_REG_GP_ID_13		0x126
--#define	DA9063_REG_GP_ID_14		0x127
--#define	DA9063_REG_GP_ID_15		0x128
--#define	DA9063_REG_GP_ID_16		0x129
--#define	DA9063_REG_GP_ID_17		0x12A
--#define	DA9063_REG_GP_ID_18		0x12B
--#define	DA9063_REG_GP_ID_19		0x12C
-+#define	DA9063_REG_GP_ID_0		0x121
-+#define	DA9063_REG_GP_ID_1		0x122
-+#define	DA9063_REG_GP_ID_2		0x123
-+#define	DA9063_REG_GP_ID_3		0x124
-+#define	DA9063_REG_GP_ID_4		0x125
-+#define	DA9063_REG_GP_ID_5		0x126
-+#define	DA9063_REG_GP_ID_6		0x127
-+#define	DA9063_REG_GP_ID_7		0x128
-+#define	DA9063_REG_GP_ID_8		0x129
-+#define	DA9063_REG_GP_ID_9		0x12A
-+#define	DA9063_REG_GP_ID_10		0x12B
-+#define	DA9063_REG_GP_ID_11		0x12C
-+#define	DA9063_REG_GP_ID_12		0x12D
-+#define	DA9063_REG_GP_ID_13		0x12E
-+#define	DA9063_REG_GP_ID_14		0x12F
-+#define	DA9063_REG_GP_ID_15		0x130
-+#define	DA9063_REG_GP_ID_16		0x131
-+#define	DA9063_REG_GP_ID_17		0x132
-+#define	DA9063_REG_GP_ID_18		0x133
-+#define	DA9063_REG_GP_ID_19		0x134
- 
- /* Chip ID and variant */
- #define	DA9063_REG_CHIP_ID		0x181
-@@ -405,8 +404,10 @@
- /* DA9063_REG_CONTROL_B (addr=0x0F) */
- #define	DA9063_CHG_SEL				0x01
- #define	DA9063_WATCHDOG_PD			0x02
-+#define	DA9063_RESET_BLINKING			0x04
- #define	DA9063_NRES_MODE			0x08
- #define	DA9063_NONKEY_LOCK			0x10
-+#define	DA9063_BUCK_SLOWSTART			0x80
- 
- /* DA9063_REG_CONTROL_C (addr=0x10) */
- #define	DA9063_DEBOUNCING_MASK			0x07
-@@ -466,6 +467,7 @@
- #define	DA9063_GPADC_PAUSE			0x02
- #define	DA9063_PMIF_DIS				0x04
- #define	DA9063_HS2WIRE_DIS			0x08
-+#define	DA9063_CLDR_PAUSE			0x10
- #define	DA9063_BBAT_DIS				0x20
- #define	DA9063_OUT_32K_PAUSE			0x40
- #define	DA9063_PMCONT_DIS			0x80
-@@ -660,7 +662,7 @@
- #define		DA9063_GPIO15_TYPE_GPO		0x04
- #define	DA9063_GPIO15_NO_WAKEUP			0x80
- 
--/* DA9063_REG_GPIO_MODE_0_7 (addr=0x1D) */
-+/* DA9063_REG_GPIO_MODE0_7 (addr=0x1D) */
- #define	DA9063_GPIO0_MODE			0x01
- #define	DA9063_GPIO1_MODE			0x02
- #define	DA9063_GPIO2_MODE			0x04
-@@ -670,7 +672,7 @@
- #define	DA9063_GPIO6_MODE			0x40
- #define	DA9063_GPIO7_MODE			0x80
- 
--/* DA9063_REG_GPIO_MODE_8_15 (addr=0x1E) */
-+/* DA9063_REG_GPIO_MODE8_15 (addr=0x1E) */
- #define	DA9063_GPIO8_MODE			0x01
- #define	DA9063_GPIO9_MODE			0x02
- #define	DA9063_GPIO10_MODE			0x04
-@@ -702,12 +704,12 @@
- #define		DA9063_SWITCH_SR_5MV		0x10
- #define		DA9063_SWITCH_SR_10MV		0x20
- #define		DA9063_SWITCH_SR_50MV		0x30
--#define	DA9063_SWITCH_SR_DIS			0x40
-+#define	DA9063_CORE_SW_INTERNAL			0x40
- #define	DA9063_CP_EN_MODE			0x80
- 
- /* DA9063_REGL_Bxxxx_CONT common bits (addr=0x20-0x25) */
- #define	DA9063_BUCK_EN				0x01
--#define DA9063_BUCK_GPI_MASK			0x06
-+#define	DA9063_BUCK_GPI_MASK			0x06
- #define		DA9063_BUCK_GPI_OFF		0x00
- #define		DA9063_BUCK_GPI_GPIO1		0x02
- #define		DA9063_BUCK_GPI_GPIO2		0x04
-@@ -841,25 +843,27 @@
- #define DA9063_COUNT_YEAR_MASK			0x3F
- #define DA9063_MONITOR				0x40
- 
--/* DA9063_REG_ALARM_MI (addr=0x46) */
-+/* DA9063_REG_ALARM_S (addr=0x46) */
-+#define DA9063_ALARM_S_MASK			0x3F
- #define DA9063_ALARM_STATUS_ALARM		0x80
- #define DA9063_ALARM_STATUS_TICK		0x40
-+/* DA9063_REG_ALARM_MI (addr=0x47) */
- #define DA9063_ALARM_MIN_MASK			0x3F
- 
--/* DA9063_REG_ALARM_H (addr=0x47) */
-+/* DA9063_REG_ALARM_H (addr=0x48) */
- #define DA9063_ALARM_HOUR_MASK			0x1F
- 
--/* DA9063_REG_ALARM_D (addr=0x48) */
-+/* DA9063_REG_ALARM_D (addr=0x49) */
- #define DA9063_ALARM_DAY_MASK			0x1F
- 
--/* DA9063_REG_ALARM_MO (addr=0x49) */
-+/* DA9063_REG_ALARM_MO (addr=0x4A) */
- #define DA9063_TICK_WAKE			0x20
- #define DA9063_TICK_TYPE			0x10
- #define		DA9063_TICK_TYPE_SEC		0x00
- #define		DA9063_TICK_TYPE_MIN		0x10
- #define DA9063_ALARM_MONTH_MASK			0x0F
- 
--/* DA9063_REG_ALARM_Y (addr=0x4A) */
-+/* DA9063_REG_ALARM_Y (addr=0x4B) */
- #define DA9063_TICK_ON				0x80
- #define DA9063_ALARM_ON				0x40
- #define DA9063_ALARM_YEAR_MASK			0x3F
-@@ -906,7 +910,7 @@
- 
- /* DA9063_REG_Bxxxx_CFG common bits (addr=0x9D-0xA2) */
- #define DA9063_BUCK_FB_MASK			0x07
--#define DA9063_BUCK_PD_DIS_SHIFT		5
-+#define DA9063_BUCK_PD_DIS_MASK		0x20
- #define DA9063_BUCK_MODE_MASK			0xC0
- #define		DA9063_BUCK_MODE_MANUAL		0x00
- #define		DA9063_BUCK_MODE_SLEEP		0x40
--- 
-2.5.0
-
diff --git a/recipes-kernel/linux/linux-ge-3.14/0004-rtc-da9063-RTC-driver.patch b/recipes-kernel/linux/linux-ge-3.14/0004-rtc-da9063-RTC-driver.patch
deleted file mode 100644
index aadc66d..0000000
--- a/recipes-kernel/linux/linux-ge-3.14/0004-rtc-da9063-RTC-driver.patch
+++ /dev/null
@@ -1,399 +0,0 @@
-From 8115b46c6de0f3afb6e3cb8746a8729cf59cbf56 Mon Sep 17 00:00:00 2001
-From: "Opensource [Steve Twiss]" <stwiss.opensource@diasemi.com>
-Date: Fri, 6 Jun 2014 14:36:03 -0700
-Subject: [PATCH 04/10] rtc: da9063: RTC driver
-
-Add the RTC driver for DA9063.
-
-[akpm@linux-foundation.org: coding-style tweaks]
-Signed-off-by: Opensource [Steve Twiss] <stwiss.opensource@diasemi.com>
-Cc: Alessandro Zummo <a.zummo@towertech.it>
-Cc: Lee Jones <lee.jones@linaro.org>
-Cc: Mark Brown <broonie@linaro.org>
-Cc: Philipp Zabel <p.zabel@pengutronix.de>
-Cc: Samuel Ortiz <sameo@linux.intel.com>
-Cc: David Dajun Chen <david.chen@diasemi.com>
-Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
----
- drivers/rtc/Kconfig      |  10 ++
- drivers/rtc/Makefile     |   1 +
- drivers/rtc/rtc-da9063.c | 333 +++++++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 344 insertions(+)
- create mode 100644 drivers/rtc/rtc-da9063.c
-
-diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
-index 87ed3a3..dbafefe 100644
---- a/drivers/rtc/Kconfig
-+++ b/drivers/rtc/Kconfig
-@@ -754,6 +754,16 @@ config RTC_DRV_DA9055
- 	  This driver can also be built as a module. If so, the module
- 	  will be called rtc-da9055
- 
-+config RTC_DRV_DA9063
-+	tristate "Dialog Semiconductor DA9063 RTC"
-+	depends on MFD_DA9063
-+	help
-+	  If you say yes here you will get support for the RTC subsystem
-+	  of the Dialog Semiconductor DA9063.
-+
-+	  This driver can also be built as a module. If so, the module
-+	  will be called "rtc-da9063".
-+
- config RTC_DRV_EFI
- 	tristate "EFI RTC"
- 	depends on IA64
-diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile
-index 1512f48..715be64 100644
---- a/drivers/rtc/Makefile
-+++ b/drivers/rtc/Makefile
-@@ -32,6 +32,7 @@ obj-$(CONFIG_RTC_DRV_CMOS)	+= rtc-cmos.o
- obj-$(CONFIG_RTC_DRV_COH901331)	+= rtc-coh901331.o
- obj-$(CONFIG_RTC_DRV_DA9052)	+= rtc-da9052.o
- obj-$(CONFIG_RTC_DRV_DA9055)	+= rtc-da9055.o
-+obj-$(CONFIG_RTC_DRV_DA9063)	+= rtc-da9063.o
- obj-$(CONFIG_RTC_DRV_DAVINCI)	+= rtc-davinci.o
- obj-$(CONFIG_RTC_DRV_DM355EVM)	+= rtc-dm355evm.o
- obj-$(CONFIG_RTC_DRV_VRTC)	+= rtc-mrst.o
-diff --git a/drivers/rtc/rtc-da9063.c b/drivers/rtc/rtc-da9063.c
-new file mode 100644
-index 0000000..5953930
---- /dev/null
-+++ b/drivers/rtc/rtc-da9063.c
-@@ -0,0 +1,333 @@
-+/* rtc-da9063.c - Real time clock device driver for DA9063
-+ * Copyright (C) 2013-14  Dialog Semiconductor Ltd.
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Library General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Library General Public License for more details.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/interrupt.h>
-+#include <linux/rtc.h>
-+#include <linux/slab.h>
-+#include <linux/delay.h>
-+#include <linux/regmap.h>
-+#include <linux/mfd/da9063/registers.h>
-+#include <linux/mfd/da9063/core.h>
-+
-+#define YEARS_TO_DA9063(year)		((year) - 100)
-+#define MONTHS_TO_DA9063(month)		((month) + 1)
-+#define YEARS_FROM_DA9063(year)		((year) + 100)
-+#define MONTHS_FROM_DA9063(month)	((month) - 1)
-+
-+#define RTC_DATA_LEN	(DA9063_REG_COUNT_Y - DA9063_REG_COUNT_S + 1)
-+#define RTC_SEC		0
-+#define RTC_MIN		1
-+#define RTC_HOUR	2
-+#define RTC_DAY		3
-+#define RTC_MONTH	4
-+#define RTC_YEAR	5
-+
-+struct da9063_rtc {
-+	struct rtc_device	*rtc_dev;
-+	struct da9063		*hw;
-+	struct rtc_time		alarm_time;
-+	bool			rtc_sync;
-+};
-+
-+static void da9063_data_to_tm(u8 *data, struct rtc_time *tm)
-+{
-+	tm->tm_sec  = data[RTC_SEC]  & DA9063_COUNT_SEC_MASK;
-+	tm->tm_min  = data[RTC_MIN]  & DA9063_COUNT_MIN_MASK;
-+	tm->tm_hour = data[RTC_HOUR] & DA9063_COUNT_HOUR_MASK;
-+	tm->tm_mday = data[RTC_DAY]  & DA9063_COUNT_DAY_MASK;
-+	tm->tm_mon  = MONTHS_FROM_DA9063(data[RTC_MONTH] &
-+					 DA9063_COUNT_MONTH_MASK);
-+	tm->tm_year = YEARS_FROM_DA9063(data[RTC_YEAR] &
-+					DA9063_COUNT_YEAR_MASK);
-+}
-+
-+static void da9063_tm_to_data(struct rtc_time *tm, u8 *data)
-+{
-+	data[RTC_SEC] &= ~DA9063_COUNT_SEC_MASK;
-+	data[RTC_SEC] |= tm->tm_sec & DA9063_COUNT_SEC_MASK;
-+
-+	data[RTC_MIN] &= ~DA9063_COUNT_MIN_MASK;
-+	data[RTC_MIN] |= tm->tm_min & DA9063_COUNT_MIN_MASK;
-+
-+	data[RTC_HOUR] &= ~DA9063_COUNT_HOUR_MASK;
-+	data[RTC_HOUR] |= tm->tm_hour & DA9063_COUNT_HOUR_MASK;
-+
-+	data[RTC_DAY] &= ~DA9063_COUNT_DAY_MASK;
-+	data[RTC_DAY] |= tm->tm_mday & DA9063_COUNT_DAY_MASK;
-+
-+	data[RTC_MONTH] &= ~DA9063_COUNT_MONTH_MASK;
-+	data[RTC_MONTH] |= MONTHS_TO_DA9063(tm->tm_mon) &
-+				DA9063_COUNT_MONTH_MASK;
-+
-+	data[RTC_YEAR] &= ~DA9063_COUNT_YEAR_MASK;
-+	data[RTC_YEAR] |= YEARS_TO_DA9063(tm->tm_year) &
-+				DA9063_COUNT_YEAR_MASK;
-+}
-+
-+static int da9063_rtc_stop_alarm(struct device *dev)
-+{
-+	struct da9063_rtc *rtc = dev_get_drvdata(dev);
-+
-+	return regmap_update_bits(rtc->hw->regmap, DA9063_REG_ALARM_Y,
-+				  DA9063_ALARM_ON, 0);
-+}
-+
-+static int da9063_rtc_start_alarm(struct device *dev)
-+{
-+	struct da9063_rtc *rtc = dev_get_drvdata(dev);
-+
-+	return regmap_update_bits(rtc->hw->regmap, DA9063_REG_ALARM_Y,
-+				  DA9063_ALARM_ON, DA9063_ALARM_ON);
-+}
-+
-+static int da9063_rtc_read_time(struct device *dev, struct rtc_time *tm)
-+{
-+	struct da9063_rtc *rtc = dev_get_drvdata(dev);
-+	unsigned long tm_secs;
-+	unsigned long al_secs;
-+	u8 data[RTC_DATA_LEN];
-+	int ret;
-+
-+	ret = regmap_bulk_read(rtc->hw->regmap, DA9063_REG_COUNT_S,
-+			       data, RTC_DATA_LEN);
-+	if (ret < 0) {
-+		dev_err(dev, "Failed to read RTC time data: %d\n", ret);
-+		return ret;
-+	}
-+
-+	if (!(data[RTC_SEC] & DA9063_RTC_READ)) {
-+		dev_dbg(dev, "RTC not yet ready to be read by the host\n");
-+		return -EINVAL;
-+	}
-+
-+	da9063_data_to_tm(data, tm);
-+
-+	rtc_tm_to_time(tm, &tm_secs);
-+	rtc_tm_to_time(&rtc->alarm_time, &al_secs);
-+
-+	/* handle the rtc synchronisation delay */
-+	if (rtc->rtc_sync == true && al_secs - tm_secs == 1)
-+		memcpy(tm, &rtc->alarm_time, sizeof(struct rtc_time));
-+	else
-+		rtc->rtc_sync = false;
-+
-+	return rtc_valid_tm(tm);
-+}
-+
-+static int da9063_rtc_set_time(struct device *dev, struct rtc_time *tm)
-+{
-+	struct da9063_rtc *rtc = dev_get_drvdata(dev);
-+	u8 data[RTC_DATA_LEN];
-+	int ret;
-+
-+	da9063_tm_to_data(tm, data);
-+	ret = regmap_bulk_write(rtc->hw->regmap, DA9063_REG_COUNT_S,
-+				data, RTC_DATA_LEN);
-+	if (ret < 0)
-+		dev_err(dev, "Failed to set RTC time data: %d\n", ret);
-+
-+	return ret;
-+}
-+
-+static int da9063_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
-+{
-+	struct da9063_rtc *rtc = dev_get_drvdata(dev);
-+	u8 data[RTC_DATA_LEN];
-+	int ret;
-+	unsigned int val;
-+
-+	ret = regmap_bulk_read(rtc->hw->regmap, DA9063_REG_ALARM_S,
-+			       &data[RTC_SEC], RTC_DATA_LEN);
-+	if (ret < 0)
-+		return ret;
-+
-+	da9063_data_to_tm(data, &alrm->time);
-+
-+	alrm->enabled = !!(data[RTC_YEAR] & DA9063_ALARM_ON);
-+
-+	ret = regmap_read(rtc->hw->regmap, DA9063_REG_EVENT_A, &val);
-+	if (ret < 0)
-+		return ret;
-+
-+	if (val & (DA9063_E_ALARM))
-+		alrm->pending = 1;
-+	else
-+		alrm->pending = 0;
-+
-+	return 0;
-+}
-+
-+static int da9063_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
-+{
-+	struct da9063_rtc *rtc = dev_get_drvdata(dev);
-+	u8 data[RTC_DATA_LEN];
-+	int ret;
-+
-+	da9063_tm_to_data(&alrm->time, data);
-+
-+	ret = da9063_rtc_stop_alarm(dev);
-+	if (ret < 0) {
-+		dev_err(dev, "Failed to stop alarm: %d\n", ret);
-+		return ret;
-+	}
-+
-+	ret = regmap_bulk_write(rtc->hw->regmap, DA9063_REG_ALARM_S,
-+				data, RTC_DATA_LEN);
-+	if (ret < 0) {
-+		dev_err(dev, "Failed to write alarm: %d\n", ret);
-+		return ret;
-+	}
-+
-+	rtc->alarm_time = alrm->time;
-+
-+	if (alrm->enabled) {
-+		ret = da9063_rtc_start_alarm(dev);
-+		if (ret < 0) {
-+			dev_err(dev, "Failed to start alarm: %d\n", ret);
-+			return ret;
-+		}
-+	}
-+
-+	return ret;
-+}
-+
-+static int da9063_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)
-+{
-+	if (enabled)
-+		return da9063_rtc_start_alarm(dev);
-+	else
-+		return da9063_rtc_stop_alarm(dev);
-+}
-+
-+static irqreturn_t da9063_alarm_event(int irq, void *data)
-+{
-+	struct da9063_rtc *rtc = data;
-+
-+	regmap_update_bits(rtc->hw->regmap, DA9063_REG_ALARM_Y,
-+			   DA9063_ALARM_ON, 0);
-+
-+	rtc->rtc_sync = true;
-+	rtc_update_irq(rtc->rtc_dev, 1, RTC_IRQF | RTC_AF);
-+
-+	return IRQ_HANDLED;
-+}
-+
-+static const struct rtc_class_ops da9063_rtc_ops = {
-+	.read_time = da9063_rtc_read_time,
-+	.set_time = da9063_rtc_set_time,
-+	.read_alarm = da9063_rtc_read_alarm,
-+	.set_alarm = da9063_rtc_set_alarm,
-+	.alarm_irq_enable = da9063_rtc_alarm_irq_enable,
-+};
-+
-+static int da9063_rtc_probe(struct platform_device *pdev)
-+{
-+	struct da9063 *da9063 = dev_get_drvdata(pdev->dev.parent);
-+	struct da9063_rtc *rtc;
-+	int irq_alarm;
-+	u8 data[RTC_DATA_LEN];
-+	int ret;
-+
-+	ret = regmap_update_bits(da9063->regmap, DA9063_REG_CONTROL_E,
-+				 DA9063_RTC_EN, DA9063_RTC_EN);
-+	if (ret < 0) {
-+		dev_err(&pdev->dev, "Failed to enable RTC\n");
-+		goto err;
-+	}
-+
-+	ret = regmap_update_bits(da9063->regmap, DA9063_REG_EN_32K,
-+				 DA9063_CRYSTAL, DA9063_CRYSTAL);
-+	if (ret < 0) {
-+		dev_err(&pdev->dev, "Failed to run 32kHz oscillator\n");
-+		goto err;
-+	}
-+
-+	ret = regmap_update_bits(da9063->regmap, DA9063_REG_ALARM_S,
-+			DA9063_ALARM_STATUS_TICK | DA9063_ALARM_STATUS_ALARM,
-+			0);
-+	if (ret < 0) {
-+		dev_err(&pdev->dev, "Failed to access RTC alarm register\n");
-+		goto err;
-+	}
-+
-+	ret = regmap_update_bits(da9063->regmap, DA9063_REG_ALARM_S,
-+				 DA9063_ALARM_STATUS_ALARM,
-+				 DA9063_ALARM_STATUS_ALARM);
-+	if (ret < 0) {
-+		dev_err(&pdev->dev, "Failed to access RTC alarm register\n");
-+		goto err;
-+	}
-+
-+	ret = regmap_update_bits(da9063->regmap, DA9063_REG_ALARM_Y,
-+				 DA9063_TICK_ON, 0);
-+	if (ret < 0) {
-+		dev_err(&pdev->dev, "Failed to disable TICKs\n");
-+		goto err;
-+	}
-+
-+	ret = regmap_bulk_read(da9063->regmap, DA9063_REG_ALARM_S,
-+			       data, RTC_DATA_LEN);
-+	if (ret < 0) {
-+		dev_err(&pdev->dev, "Failed to read initial alarm data: %d\n",
-+			ret);
-+		goto err;
-+	}
-+
-+	rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL);
-+	if (!rtc)
-+		return -ENOMEM;
-+
-+	platform_set_drvdata(pdev, rtc);
-+
-+	irq_alarm = platform_get_irq_byname(pdev, "ALARM");
-+	ret = devm_request_threaded_irq(&pdev->dev, irq_alarm, NULL,
-+					da9063_alarm_event,
-+					IRQF_TRIGGER_LOW | IRQF_ONESHOT,
-+					"ALARM", rtc);
-+	if (ret) {
-+		dev_err(&pdev->dev, "Failed to request ALARM IRQ %d: %d\n",
-+			irq_alarm, ret);
-+		goto err;
-+	}
-+
-+	rtc->hw = da9063;
-+	rtc->rtc_dev = devm_rtc_device_register(&pdev->dev, DA9063_DRVNAME_RTC,
-+					   &da9063_rtc_ops, THIS_MODULE);
-+	if (IS_ERR(rtc->rtc_dev))
-+		return PTR_ERR(rtc->rtc_dev);
-+
-+	da9063_data_to_tm(data, &rtc->alarm_time);
-+	rtc->rtc_sync = false;
-+err:
-+	return ret;
-+}
-+
-+static struct platform_driver da9063_rtc_driver = {
-+	.probe		= da9063_rtc_probe,
-+	.driver		= {
-+		.name	= DA9063_DRVNAME_RTC,
-+		.owner	= THIS_MODULE,
-+	},
-+};
-+
-+module_platform_driver(da9063_rtc_driver);
-+
-+MODULE_AUTHOR("S Twiss <stwiss.opensource@diasemi.com>");
-+MODULE_DESCRIPTION("Real time clock device driver for Dialog DA9063");
-+MODULE_LICENSE("GPL v2");
-+MODULE_ALIAS("platform:" DA9063_DRVNAME_RTC);
--- 
-2.5.0
-
diff --git a/recipes-kernel/linux/linux-ge-3.14/0005-mfd-da9063-Add-support-for-AD-silicon-variant.patch b/recipes-kernel/linux/linux-ge-3.14/0005-mfd-da9063-Add-support-for-AD-silicon-variant.patch
deleted file mode 100644
index 0a7e161..0000000
--- a/recipes-kernel/linux/linux-ge-3.14/0005-mfd-da9063-Add-support-for-AD-silicon-variant.patch
+++ /dev/null
@@ -1,582 +0,0 @@
-From bdc0b750279f006abb80a60b288761e9674c51a3 Mon Sep 17 00:00:00 2001
-From: "Opensource [Steve Twiss]" <stwiss.opensource@diasemi.com>
-Date: Mon, 21 Jul 2014 11:39:33 +0100
-Subject: [PATCH 05/10] mfd: da9063: Add support for AD silicon variant
-
-Add register definitions for DA9063 AD (0x3) silicon variant ID
-the ability to choose the silicon variant at run-time using regmap
-configuration. This patch also adds RTC support for the AD silicon
-changes.
-
-It adds both BB and AD support as regmap ranges and then makes the
-distinction between the two tables at run-time. This allows both AD
-and BB silicon variants to be supported at the same time.
-
-Suggested-by: Philipp Zabel <p.zabel@pengutronix.de>
-Signed-off-by: Opensource [Steve Twiss] <stwiss.opensource@diasemi.com>
-Signed-off-by: Lee Jones <lee.jones@linaro.org>
----
- drivers/mfd/da9063-core.c            |   6 +-
- drivers/mfd/da9063-i2c.c             | 134 ++++++++++++++++++++++++++++-------
- drivers/rtc/rtc-da9063.c             |  54 +++++++++-----
- include/linux/mfd/da9063/core.h      |   3 +-
- include/linux/mfd/da9063/registers.h | 129 +++++++++++++++++++++------------
- 5 files changed, 236 insertions(+), 90 deletions(-)
-
-diff --git a/drivers/mfd/da9063-core.c b/drivers/mfd/da9063-core.c
-index e70ae31..93db8bb 100644
---- a/drivers/mfd/da9063-core.c
-+++ b/drivers/mfd/da9063-core.c
-@@ -153,9 +153,9 @@ int da9063_device_init(struct da9063 *da9063, unsigned int irq)
- 		 "Device detected (chip-ID: 0x%02X, var-ID: 0x%02X)\n",
- 		 model, variant_id);
- 
--	if (variant_code != PMIC_DA9063_BB) {
--		dev_err(da9063->dev, "Unknown chip variant code: 0x%02X\n",
--				variant_code);
-+	if (variant_code < PMIC_DA9063_BB && variant_code != PMIC_DA9063_AD) {
-+		dev_err(da9063->dev,
-+			"Cannot support variant code: 0x%02X\n", variant_code);
- 		return -ENODEV;
- 	}
- 
-diff --git a/drivers/mfd/da9063-i2c.c b/drivers/mfd/da9063-i2c.c
-index 8db5c805..21fd8d9 100644
---- a/drivers/mfd/da9063-i2c.c
-+++ b/drivers/mfd/da9063-i2c.c
-@@ -25,10 +25,10 @@
- #include <linux/mfd/da9063/pdata.h>
- #include <linux/mfd/da9063/registers.h>
- 
--static const struct regmap_range da9063_readable_ranges[] = {
-+static const struct regmap_range da9063_ad_readable_ranges[] = {
- 	{
- 		.range_min = DA9063_REG_PAGE_CON,
--		.range_max = DA9063_REG_SECOND_D,
-+		.range_max = DA9063_AD_REG_SECOND_D,
- 	}, {
- 		.range_min = DA9063_REG_SEQ,
- 		.range_max = DA9063_REG_ID_32_31,
-@@ -37,14 +37,14 @@ static const struct regmap_range da9063_readable_ranges[] = {
- 		.range_max = DA9063_REG_AUTO3_LOW,
- 	}, {
- 		.range_min = DA9063_REG_T_OFFSET,
--		.range_max = DA9063_REG_GP_ID_19,
-+		.range_max = DA9063_AD_REG_GP_ID_19,
- 	}, {
- 		.range_min = DA9063_REG_CHIP_ID,
- 		.range_max = DA9063_REG_CHIP_VARIANT,
- 	},
- };
- 
--static const struct regmap_range da9063_writeable_ranges[] = {
-+static const struct regmap_range da9063_ad_writeable_ranges[] = {
- 	{
- 		.range_min = DA9063_REG_PAGE_CON,
- 		.range_max = DA9063_REG_PAGE_CON,
-@@ -53,7 +53,7 @@ static const struct regmap_range da9063_writeable_ranges[] = {
- 		.range_max = DA9063_REG_VSYS_MON,
- 	}, {
- 		.range_min = DA9063_REG_COUNT_S,
--		.range_max = DA9063_REG_ALARM_Y,
-+		.range_max = DA9063_AD_REG_ALARM_Y,
- 	}, {
- 		.range_min = DA9063_REG_SEQ,
- 		.range_max = DA9063_REG_ID_32_31,
-@@ -62,14 +62,14 @@ static const struct regmap_range da9063_writeable_ranges[] = {
- 		.range_max = DA9063_REG_AUTO3_LOW,
- 	}, {
- 		.range_min = DA9063_REG_CONFIG_I,
--		.range_max = DA9063_REG_MON_REG_4,
-+		.range_max = DA9063_AD_REG_MON_REG_4,
- 	}, {
--		.range_min = DA9063_REG_GP_ID_0,
--		.range_max = DA9063_REG_GP_ID_19,
-+		.range_min = DA9063_AD_REG_GP_ID_0,
-+		.range_max = DA9063_AD_REG_GP_ID_19,
- 	},
- };
- 
--static const struct regmap_range da9063_volatile_ranges[] = {
-+static const struct regmap_range da9063_ad_volatile_ranges[] = {
- 	{
- 		.range_min = DA9063_REG_STATUS_A,
- 		.range_max = DA9063_REG_EVENT_D,
-@@ -81,26 +81,104 @@ static const struct regmap_range da9063_volatile_ranges[] = {
- 		.range_max = DA9063_REG_ADC_MAN,
- 	}, {
- 		.range_min = DA9063_REG_ADC_RES_L,
--		.range_max = DA9063_REG_SECOND_D,
-+		.range_max = DA9063_AD_REG_SECOND_D,
- 	}, {
--		.range_min = DA9063_REG_MON_REG_5,
--		.range_max = DA9063_REG_MON_REG_6,
-+		.range_min = DA9063_AD_REG_MON_REG_5,
-+		.range_max = DA9063_AD_REG_MON_REG_6,
- 	},
- };
- 
--static const struct regmap_access_table da9063_readable_table = {
--	.yes_ranges = da9063_readable_ranges,
--	.n_yes_ranges = ARRAY_SIZE(da9063_readable_ranges),
-+static const struct regmap_access_table da9063_ad_readable_table = {
-+	.yes_ranges = da9063_ad_readable_ranges,
-+	.n_yes_ranges = ARRAY_SIZE(da9063_ad_readable_ranges),
- };
- 
--static const struct regmap_access_table da9063_writeable_table = {
--	.yes_ranges = da9063_writeable_ranges,
--	.n_yes_ranges = ARRAY_SIZE(da9063_writeable_ranges),
-+static const struct regmap_access_table da9063_ad_writeable_table = {
-+	.yes_ranges = da9063_ad_writeable_ranges,
-+	.n_yes_ranges = ARRAY_SIZE(da9063_ad_writeable_ranges),
- };
- 
--static const struct regmap_access_table da9063_volatile_table = {
--	.yes_ranges = da9063_volatile_ranges,
--	.n_yes_ranges = ARRAY_SIZE(da9063_volatile_ranges),
-+static const struct regmap_access_table da9063_ad_volatile_table = {
-+	.yes_ranges = da9063_ad_volatile_ranges,
-+	.n_yes_ranges = ARRAY_SIZE(da9063_ad_volatile_ranges),
-+};
-+
-+static const struct regmap_range da9063_bb_readable_ranges[] = {
-+	{
-+		.range_min = DA9063_REG_PAGE_CON,
-+		.range_max = DA9063_BB_REG_SECOND_D,
-+	}, {
-+		.range_min = DA9063_REG_SEQ,
-+		.range_max = DA9063_REG_ID_32_31,
-+	}, {
-+		.range_min = DA9063_REG_SEQ_A,
-+		.range_max = DA9063_REG_AUTO3_LOW,
-+	}, {
-+		.range_min = DA9063_REG_T_OFFSET,
-+		.range_max = DA9063_BB_REG_GP_ID_19,
-+	}, {
-+		.range_min = DA9063_REG_CHIP_ID,
-+		.range_max = DA9063_REG_CHIP_VARIANT,
-+	},
-+};
-+
-+static const struct regmap_range da9063_bb_writeable_ranges[] = {
-+	{
-+		.range_min = DA9063_REG_PAGE_CON,
-+		.range_max = DA9063_REG_PAGE_CON,
-+	}, {
-+		.range_min = DA9063_REG_FAULT_LOG,
-+		.range_max = DA9063_REG_VSYS_MON,
-+	}, {
-+		.range_min = DA9063_REG_COUNT_S,
-+		.range_max = DA9063_BB_REG_ALARM_Y,
-+	}, {
-+		.range_min = DA9063_REG_SEQ,
-+		.range_max = DA9063_REG_ID_32_31,
-+	}, {
-+		.range_min = DA9063_REG_SEQ_A,
-+		.range_max = DA9063_REG_AUTO3_LOW,
-+	}, {
-+		.range_min = DA9063_REG_CONFIG_I,
-+		.range_max = DA9063_BB_REG_MON_REG_4,
-+	}, {
-+		.range_min = DA9063_BB_REG_GP_ID_0,
-+		.range_max = DA9063_BB_REG_GP_ID_19,
-+	},
-+};
-+
-+static const struct regmap_range da9063_bb_volatile_ranges[] = {
-+	{
-+		.range_min = DA9063_REG_STATUS_A,
-+		.range_max = DA9063_REG_EVENT_D,
-+	}, {
-+		.range_min = DA9063_REG_CONTROL_F,
-+		.range_max = DA9063_REG_CONTROL_F,
-+	}, {
-+		.range_min = DA9063_REG_ADC_MAN,
-+		.range_max = DA9063_REG_ADC_MAN,
-+	}, {
-+		.range_min = DA9063_REG_ADC_RES_L,
-+		.range_max = DA9063_BB_REG_SECOND_D,
-+	}, {
-+		.range_min = DA9063_BB_REG_MON_REG_5,
-+		.range_max = DA9063_BB_REG_MON_REG_6,
-+	},
-+};
-+
-+static const struct regmap_access_table da9063_bb_readable_table = {
-+	.yes_ranges = da9063_bb_readable_ranges,
-+	.n_yes_ranges = ARRAY_SIZE(da9063_bb_readable_ranges),
-+};
-+
-+static const struct regmap_access_table da9063_bb_writeable_table = {
-+	.yes_ranges = da9063_bb_writeable_ranges,
-+	.n_yes_ranges = ARRAY_SIZE(da9063_bb_writeable_ranges),
-+};
-+
-+static const struct regmap_access_table da9063_bb_volatile_table = {
-+	.yes_ranges = da9063_bb_volatile_ranges,
-+	.n_yes_ranges = ARRAY_SIZE(da9063_bb_volatile_ranges),
- };
- 
- static const struct regmap_range_cfg da9063_range_cfg[] = {
-@@ -123,10 +201,6 @@ static struct regmap_config da9063_regmap_config = {
- 	.max_register = DA9063_REG_CHIP_VARIANT,
- 
- 	.cache_type = REGCACHE_RBTREE,
--
--	.rd_table = &da9063_readable_table,
--	.wr_table = &da9063_writeable_table,
--	.volatile_table = &da9063_volatile_table,
- };
- 
- static int da9063_i2c_probe(struct i2c_client *i2c,
-@@ -143,6 +217,16 @@ static int da9063_i2c_probe(struct i2c_client *i2c,
- 	da9063->dev = &i2c->dev;
- 	da9063->chip_irq = i2c->irq;
- 
-+	if (da9063->variant_code == PMIC_DA9063_AD) {
-+		da9063_regmap_config.rd_table = &da9063_ad_readable_table;
-+		da9063_regmap_config.wr_table = &da9063_ad_writeable_table;
-+		da9063_regmap_config.volatile_table = &da9063_ad_volatile_table;
-+	} else {
-+		da9063_regmap_config.rd_table = &da9063_bb_readable_table;
-+		da9063_regmap_config.wr_table = &da9063_bb_writeable_table;
-+		da9063_regmap_config.volatile_table = &da9063_bb_volatile_table;
-+	}
-+
- 	da9063->regmap = devm_regmap_init_i2c(i2c, &da9063_regmap_config);
- 	if (IS_ERR(da9063->regmap)) {
- 		ret = PTR_ERR(da9063->regmap);
-diff --git a/drivers/rtc/rtc-da9063.c b/drivers/rtc/rtc-da9063.c
-index 5953930..731ed1a 100644
---- a/drivers/rtc/rtc-da9063.c
-+++ b/drivers/rtc/rtc-da9063.c
-@@ -29,6 +29,8 @@
- #define YEARS_FROM_DA9063(year)		((year) + 100)
- #define MONTHS_FROM_DA9063(month)	((month) - 1)
- 
-+#define RTC_ALARM_DATA_LEN (DA9063_AD_REG_ALARM_Y - DA9063_AD_REG_ALARM_MI + 1)
-+
- #define RTC_DATA_LEN	(DA9063_REG_COUNT_Y - DA9063_REG_COUNT_S + 1)
- #define RTC_SEC		0
- #define RTC_MIN		1
-@@ -42,6 +44,10 @@ struct da9063_rtc {
- 	struct da9063		*hw;
- 	struct rtc_time		alarm_time;
- 	bool			rtc_sync;
-+	int			alarm_year;
-+	int			alarm_start;
-+	int			alarm_len;
-+	int			data_start;
- };
- 
- static void da9063_data_to_tm(u8 *data, struct rtc_time *tm)
-@@ -83,7 +89,7 @@ static int da9063_rtc_stop_alarm(struct device *dev)
- {
- 	struct da9063_rtc *rtc = dev_get_drvdata(dev);
- 
--	return regmap_update_bits(rtc->hw->regmap, DA9063_REG_ALARM_Y,
-+	return regmap_update_bits(rtc->hw->regmap, rtc->alarm_year,
- 				  DA9063_ALARM_ON, 0);
- }
- 
-@@ -91,7 +97,7 @@ static int da9063_rtc_start_alarm(struct device *dev)
- {
- 	struct da9063_rtc *rtc = dev_get_drvdata(dev);
- 
--	return regmap_update_bits(rtc->hw->regmap, DA9063_REG_ALARM_Y,
-+	return regmap_update_bits(rtc->hw->regmap, rtc->alarm_year,
- 				  DA9063_ALARM_ON, DA9063_ALARM_ON);
- }
- 
-@@ -151,8 +157,9 @@ static int da9063_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
- 	int ret;
- 	unsigned int val;
- 
--	ret = regmap_bulk_read(rtc->hw->regmap, DA9063_REG_ALARM_S,
--			       &data[RTC_SEC], RTC_DATA_LEN);
-+	data[RTC_SEC] = 0;
-+	ret = regmap_bulk_read(rtc->hw->regmap, rtc->alarm_start,
-+			       &data[rtc->data_start], rtc->alarm_len);
- 	if (ret < 0)
- 		return ret;
- 
-@@ -186,14 +193,14 @@ static int da9063_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
- 		return ret;
- 	}
- 
--	ret = regmap_bulk_write(rtc->hw->regmap, DA9063_REG_ALARM_S,
--				data, RTC_DATA_LEN);
-+	ret = regmap_bulk_write(rtc->hw->regmap, rtc->alarm_start,
-+			       &data[rtc->data_start], rtc->alarm_len);
- 	if (ret < 0) {
- 		dev_err(dev, "Failed to write alarm: %d\n", ret);
- 		return ret;
- 	}
- 
--	rtc->alarm_time = alrm->time;
-+	da9063_data_to_tm(data, &rtc->alarm_time);
- 
- 	if (alrm->enabled) {
- 		ret = da9063_rtc_start_alarm(dev);
-@@ -218,7 +225,7 @@ static irqreturn_t da9063_alarm_event(int irq, void *data)
- {
- 	struct da9063_rtc *rtc = data;
- 
--	regmap_update_bits(rtc->hw->regmap, DA9063_REG_ALARM_Y,
-+	regmap_update_bits(rtc->hw->regmap, rtc->alarm_year,
- 			   DA9063_ALARM_ON, 0);
- 
- 	rtc->rtc_sync = true;
-@@ -257,7 +264,23 @@ static int da9063_rtc_probe(struct platform_device *pdev)
- 		goto err;
- 	}
- 
--	ret = regmap_update_bits(da9063->regmap, DA9063_REG_ALARM_S,
-+	rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL);
-+	if (!rtc)
-+		return -ENOMEM;
-+
-+	if (da9063->variant_code == PMIC_DA9063_AD) {
-+		rtc->alarm_year = DA9063_AD_REG_ALARM_Y;
-+		rtc->alarm_start = DA9063_AD_REG_ALARM_MI;
-+		rtc->alarm_len = RTC_ALARM_DATA_LEN;
-+		rtc->data_start = RTC_MIN;
-+	} else {
-+		rtc->alarm_year = DA9063_BB_REG_ALARM_Y;
-+		rtc->alarm_start = DA9063_BB_REG_ALARM_S;
-+		rtc->alarm_len = RTC_DATA_LEN;
-+		rtc->data_start = RTC_SEC;
-+	}
-+
-+	ret = regmap_update_bits(da9063->regmap, rtc->alarm_start,
- 			DA9063_ALARM_STATUS_TICK | DA9063_ALARM_STATUS_ALARM,
- 			0);
- 	if (ret < 0) {
-@@ -265,7 +288,7 @@ static int da9063_rtc_probe(struct platform_device *pdev)
- 		goto err;
- 	}
- 
--	ret = regmap_update_bits(da9063->regmap, DA9063_REG_ALARM_S,
-+	ret = regmap_update_bits(da9063->regmap, rtc->alarm_start,
- 				 DA9063_ALARM_STATUS_ALARM,
- 				 DA9063_ALARM_STATUS_ALARM);
- 	if (ret < 0) {
-@@ -273,25 +296,22 @@ static int da9063_rtc_probe(struct platform_device *pdev)
- 		goto err;
- 	}
- 
--	ret = regmap_update_bits(da9063->regmap, DA9063_REG_ALARM_Y,
-+	ret = regmap_update_bits(da9063->regmap, rtc->alarm_year,
- 				 DA9063_TICK_ON, 0);
- 	if (ret < 0) {
- 		dev_err(&pdev->dev, "Failed to disable TICKs\n");
- 		goto err;
- 	}
- 
--	ret = regmap_bulk_read(da9063->regmap, DA9063_REG_ALARM_S,
--			       data, RTC_DATA_LEN);
-+	data[RTC_SEC] = 0;
-+	ret = regmap_bulk_read(da9063->regmap, rtc->alarm_start,
-+			       &data[rtc->data_start], rtc->alarm_len);
- 	if (ret < 0) {
- 		dev_err(&pdev->dev, "Failed to read initial alarm data: %d\n",
- 			ret);
- 		goto err;
- 	}
- 
--	rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL);
--	if (!rtc)
--		return -ENOMEM;
--
- 	platform_set_drvdata(pdev, rtc);
- 
- 	irq_alarm = platform_get_irq_byname(pdev, "ALARM");
-diff --git a/include/linux/mfd/da9063/core.h b/include/linux/mfd/da9063/core.h
-index 00a9aac..b92a326 100644
---- a/include/linux/mfd/da9063/core.h
-+++ b/include/linux/mfd/da9063/core.h
-@@ -34,7 +34,8 @@ enum da9063_models {
- };
- 
- enum da9063_variant_codes {
--	PMIC_DA9063_BB = 0x5
-+	PMIC_DA9063_AD = 0x3,
-+	PMIC_DA9063_BB = 0x5,
- };
- 
- /* Interrupts */
-diff --git a/include/linux/mfd/da9063/registers.h b/include/linux/mfd/da9063/registers.h
-index 09a85c6..2e0ba6d5 100644
---- a/include/linux/mfd/da9063/registers.h
-+++ b/include/linux/mfd/da9063/registers.h
-@@ -104,16 +104,27 @@
- #define	DA9063_REG_COUNT_D		0x43
- #define	DA9063_REG_COUNT_MO		0x44
- #define	DA9063_REG_COUNT_Y		0x45
--#define	DA9063_REG_ALARM_S		0x46
--#define	DA9063_REG_ALARM_MI		0x47
--#define	DA9063_REG_ALARM_H		0x48
--#define	DA9063_REG_ALARM_D		0x49
--#define	DA9063_REG_ALARM_MO		0x4A
--#define	DA9063_REG_ALARM_Y		0x4B
--#define	DA9063_REG_SECOND_A		0x4C
--#define	DA9063_REG_SECOND_B		0x4D
--#define	DA9063_REG_SECOND_C		0x4E
--#define	DA9063_REG_SECOND_D		0x4F
-+
-+#define	DA9063_AD_REG_ALARM_MI		0x46
-+#define	DA9063_AD_REG_ALARM_H		0x47
-+#define	DA9063_AD_REG_ALARM_D		0x48
-+#define	DA9063_AD_REG_ALARM_MO		0x49
-+#define	DA9063_AD_REG_ALARM_Y		0x4A
-+#define	DA9063_AD_REG_SECOND_A		0x4B
-+#define	DA9063_AD_REG_SECOND_B		0x4C
-+#define	DA9063_AD_REG_SECOND_C		0x4D
-+#define	DA9063_AD_REG_SECOND_D		0x4E
-+
-+#define	DA9063_BB_REG_ALARM_S		0x46
-+#define	DA9063_BB_REG_ALARM_MI		0x47
-+#define	DA9063_BB_REG_ALARM_H		0x48
-+#define	DA9063_BB_REG_ALARM_D		0x49
-+#define	DA9063_BB_REG_ALARM_MO		0x4A
-+#define	DA9063_BB_REG_ALARM_Y		0x4B
-+#define	DA9063_BB_REG_SECOND_A		0x4C
-+#define	DA9063_BB_REG_SECOND_B		0x4D
-+#define	DA9063_BB_REG_SECOND_C		0x4E
-+#define	DA9063_BB_REG_SECOND_D		0x4F
- 
- /* Sequencer Control Registers */
- #define	DA9063_REG_SEQ			0x81
-@@ -223,37 +234,67 @@
- #define	DA9063_REG_CONFIG_J		0x10F
- #define	DA9063_REG_CONFIG_K		0x110
- #define	DA9063_REG_CONFIG_L		0x111
--#define	DA9063_REG_CONFIG_M		0x112
--#define	DA9063_REG_CONFIG_N		0x113
--
--#define	DA9063_REG_MON_REG_1		0x114
--#define	DA9063_REG_MON_REG_2		0x115
--#define	DA9063_REG_MON_REG_3		0x116
--#define	DA9063_REG_MON_REG_4		0x117
--#define	DA9063_REG_MON_REG_5		0x11E
--#define	DA9063_REG_MON_REG_6		0x11F
--#define	DA9063_REG_TRIM_CLDR		0x120
-+
-+#define	DA9063_AD_REG_MON_REG_1		0x112
-+#define	DA9063_AD_REG_MON_REG_2		0x113
-+#define	DA9063_AD_REG_MON_REG_3		0x114
-+#define	DA9063_AD_REG_MON_REG_4		0x115
-+#define	DA9063_AD_REG_MON_REG_5		0x116
-+#define	DA9063_AD_REG_MON_REG_6		0x117
-+#define	DA9063_AD_REG_TRIM_CLDR		0x118
-+
-+#define	DA9063_AD_REG_GP_ID_0		0x119
-+#define	DA9063_AD_REG_GP_ID_1		0x11A
-+#define	DA9063_AD_REG_GP_ID_2		0x11B
-+#define	DA9063_AD_REG_GP_ID_3		0x11C
-+#define	DA9063_AD_REG_GP_ID_4		0x11D
-+#define	DA9063_AD_REG_GP_ID_5		0x11E
-+#define	DA9063_AD_REG_GP_ID_6		0x11F
-+#define	DA9063_AD_REG_GP_ID_7		0x120
-+#define	DA9063_AD_REG_GP_ID_8		0x121
-+#define	DA9063_AD_REG_GP_ID_9		0x122
-+#define	DA9063_AD_REG_GP_ID_10		0x123
-+#define	DA9063_AD_REG_GP_ID_11		0x124
-+#define	DA9063_AD_REG_GP_ID_12		0x125
-+#define	DA9063_AD_REG_GP_ID_13		0x126
-+#define	DA9063_AD_REG_GP_ID_14		0x127
-+#define	DA9063_AD_REG_GP_ID_15		0x128
-+#define	DA9063_AD_REG_GP_ID_16		0x129
-+#define	DA9063_AD_REG_GP_ID_17		0x12A
-+#define	DA9063_AD_REG_GP_ID_18		0x12B
-+#define	DA9063_AD_REG_GP_ID_19		0x12C
-+
-+#define	DA9063_BB_REG_CONFIG_M		0x112
-+#define	DA9063_BB_REG_CONFIG_N		0x113
-+
-+#define	DA9063_BB_REG_MON_REG_1		0x114
-+#define	DA9063_BB_REG_MON_REG_2		0x115
-+#define	DA9063_BB_REG_MON_REG_3		0x116
-+#define	DA9063_BB_REG_MON_REG_4		0x117
-+#define	DA9063_BB_REG_MON_REG_5		0x11E
-+#define	DA9063_BB_REG_MON_REG_6		0x11F
-+#define	DA9063_BB_REG_TRIM_CLDR		0x120
- /* General Purpose Registers */
--#define	DA9063_REG_GP_ID_0		0x121
--#define	DA9063_REG_GP_ID_1		0x122
--#define	DA9063_REG_GP_ID_2		0x123
--#define	DA9063_REG_GP_ID_3		0x124
--#define	DA9063_REG_GP_ID_4		0x125
--#define	DA9063_REG_GP_ID_5		0x126
--#define	DA9063_REG_GP_ID_6		0x127
--#define	DA9063_REG_GP_ID_7		0x128
--#define	DA9063_REG_GP_ID_8		0x129
--#define	DA9063_REG_GP_ID_9		0x12A
--#define	DA9063_REG_GP_ID_10		0x12B
--#define	DA9063_REG_GP_ID_11		0x12C
--#define	DA9063_REG_GP_ID_12		0x12D
--#define	DA9063_REG_GP_ID_13		0x12E
--#define	DA9063_REG_GP_ID_14		0x12F
--#define	DA9063_REG_GP_ID_15		0x130
--#define	DA9063_REG_GP_ID_16		0x131
--#define	DA9063_REG_GP_ID_17		0x132
--#define	DA9063_REG_GP_ID_18		0x133
--#define	DA9063_REG_GP_ID_19		0x134
-+#define	DA9063_BB_REG_GP_ID_0		0x121
-+#define	DA9063_BB_REG_GP_ID_1		0x122
-+#define	DA9063_BB_REG_GP_ID_2		0x123
-+#define	DA9063_BB_REG_GP_ID_3		0x124
-+#define	DA9063_BB_REG_GP_ID_4		0x125
-+#define	DA9063_BB_REG_GP_ID_5		0x126
-+#define	DA9063_BB_REG_GP_ID_6		0x127
-+#define	DA9063_BB_REG_GP_ID_7		0x128
-+#define	DA9063_BB_REG_GP_ID_8		0x129
-+#define	DA9063_BB_REG_GP_ID_9		0x12A
-+#define	DA9063_BB_REG_GP_ID_10		0x12B
-+#define	DA9063_BB_REG_GP_ID_11		0x12C
-+#define	DA9063_BB_REG_GP_ID_12		0x12D
-+#define	DA9063_BB_REG_GP_ID_13		0x12E
-+#define	DA9063_BB_REG_GP_ID_14		0x12F
-+#define	DA9063_BB_REG_GP_ID_15		0x130
-+#define	DA9063_BB_REG_GP_ID_16		0x131
-+#define	DA9063_BB_REG_GP_ID_17		0x132
-+#define	DA9063_BB_REG_GP_ID_18		0x133
-+#define	DA9063_BB_REG_GP_ID_19		0x134
- 
- /* Chip ID and variant */
- #define	DA9063_REG_CHIP_ID		0x181
-@@ -404,10 +445,10 @@
- /* DA9063_REG_CONTROL_B (addr=0x0F) */
- #define	DA9063_CHG_SEL				0x01
- #define	DA9063_WATCHDOG_PD			0x02
--#define	DA9063_RESET_BLINKING			0x04
-+#define	DA9063_BB_RESET_BLINKING		0x04
- #define	DA9063_NRES_MODE			0x08
- #define	DA9063_NONKEY_LOCK			0x10
--#define	DA9063_BUCK_SLOWSTART			0x80
-+#define	DA9063_BB_BUCK_SLOWSTART		0x80
- 
- /* DA9063_REG_CONTROL_C (addr=0x10) */
- #define	DA9063_DEBOUNCING_MASK			0x07
-@@ -467,7 +508,7 @@
- #define	DA9063_GPADC_PAUSE			0x02
- #define	DA9063_PMIF_DIS				0x04
- #define	DA9063_HS2WIRE_DIS			0x08
--#define	DA9063_CLDR_PAUSE			0x10
-+#define	DA9063_BB_CLDR_PAUSE			0x10
- #define	DA9063_BBAT_DIS				0x20
- #define	DA9063_OUT_32K_PAUSE			0x40
- #define	DA9063_PMCONT_DIS			0x80
-@@ -844,7 +885,7 @@
- #define DA9063_MONITOR				0x40
- 
- /* DA9063_REG_ALARM_S (addr=0x46) */
--#define DA9063_ALARM_S_MASK			0x3F
-+#define DA9063_BB_ALARM_S_MASK			0x3F
- #define DA9063_ALARM_STATUS_ALARM		0x80
- #define DA9063_ALARM_STATUS_TICK		0x40
- /* DA9063_REG_ALARM_MI (addr=0x47) */
--- 
-2.5.0
-
diff --git a/recipes-kernel/linux/linux-ge-3.14/0006-mfd-da9063-Get-irq-base-dynamically-before-registeri.patch b/recipes-kernel/linux/linux-ge-3.14/0006-mfd-da9063-Get-irq-base-dynamically-before-registeri.patch
deleted file mode 100644
index 4870138..0000000
--- a/recipes-kernel/linux/linux-ge-3.14/0006-mfd-da9063-Get-irq-base-dynamically-before-registeri.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From f996ed516921512ab7a13db776f66420e07e6b90 Mon Sep 17 00:00:00 2001
-From: Dmitry Lavnikevich <d.lavnikevich@sam-solutions.com>
-Date: Fri, 21 Nov 2014 18:29:07 +0300
-Subject: [PATCH 06/10] mfd: da9063: Get irq base dynamically before
- registering device
-
-After registering mfd device with proper irq_base
-platform_get_irq_byname() calls will return VIRQ instead of local IRQ.
-This fixes da9063 rtc registration issue:
-da9063-rtc da9063-rtc: Failed to request ALARM IRQ 1: -22
-
-Signed-off-by: Dmitry Lavnikevich <d.lavnikevich@sam-solutions.com>
-Signed-off-by: Lee Jones <lee.jones@linaro.org>
----
- drivers/mfd/da9063-core.c | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/mfd/da9063-core.c b/drivers/mfd/da9063-core.c
-index 93db8bb..f38bc98 100644
---- a/drivers/mfd/da9063-core.c
-+++ b/drivers/mfd/da9063-core.c
-@@ -118,7 +118,7 @@ int da9063_device_init(struct da9063 *da9063, unsigned int irq)
- 		da9063->irq_base = pdata->irq_base;
- 	} else {
- 		da9063->flags = 0;
--		da9063->irq_base = 0;
-+		da9063->irq_base = -1;
- 	}
- 	da9063->chip_irq = irq;
- 
-@@ -168,6 +168,8 @@ int da9063_device_init(struct da9063 *da9063, unsigned int irq)
- 		return ret;
- 	}
- 
-+	da9063->irq_base = regmap_irq_chip_get_base(da9063->regmap_irq);
-+
- 	ret = mfd_add_devices(da9063->dev, -1, da9063_devs,
- 			      ARRAY_SIZE(da9063_devs), NULL, da9063->irq_base,
- 			      NULL);
--- 
-2.5.0
-
diff --git a/recipes-kernel/linux/linux-ge-3.14/0007-mfd-da9063-Add-support-for-OnKey-driver.patch b/recipes-kernel/linux/linux-ge-3.14/0007-mfd-da9063-Add-support-for-OnKey-driver.patch
deleted file mode 100644
index b5b9216..0000000
--- a/recipes-kernel/linux/linux-ge-3.14/0007-mfd-da9063-Add-support-for-OnKey-driver.patch
+++ /dev/null
@@ -1,114 +0,0 @@
-From 9d4ceb72253709f7ae6fe02b65eed40053a94902 Mon Sep 17 00:00:00 2001
-From: Steve Twiss <stwiss.opensource@diasemi.com>
-Date: Tue, 19 May 2015 11:32:45 +0100
-Subject: [PATCH 07/10] mfd: da9063: Add support for OnKey driver
-
-Add MFD support for the DA9063 OnKey driver
-
-The function da9063_clear_fault_log() is added to mitigate the case of a
-hardware power-cut after a long-long OnKey press. Although there is no
-software intervention in this case (by definition) such a shutdown would
-cause persistent information within the DA9063 FAULT_LOG that would be
-available during the next device restart.
-
-Clearance of this persistent register must be completed after such a
-hardware power-cut operation has happened so that the FAULT_LOG does not
-continue with previous values. The clearance function has been added here
-in the kernel driver because wiping the fault-log cannot be counted on
-outside the Linux kernel.
-
-Signed-off-by: Steve Twiss <stwiss.opensource@diasemi.com>
-[Lee: Removed 'key_power' for Dmitry to take through the Input Tree]
-Signed-off-by: Lee Jones <lee.jones@linaro.org>
----
- drivers/mfd/da9063-core.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 54 insertions(+)
-
-diff --git a/drivers/mfd/da9063-core.c b/drivers/mfd/da9063-core.c
-index f38bc98..141c2df 100644
---- a/drivers/mfd/da9063-core.c
-+++ b/drivers/mfd/da9063-core.c
-@@ -60,6 +60,7 @@ static struct resource da9063_rtc_resources[] = {
- 
- static struct resource da9063_onkey_resources[] = {
- 	{
-+		.name	= "ONKEY",
- 		.start	= DA9063_IRQ_ONKEY,
- 		.end	= DA9063_IRQ_ONKEY,
- 		.flags	= IORESOURCE_IRQ,
-@@ -96,6 +97,7 @@ static const struct mfd_cell da9063_devs[] = {
- 		.name		= DA9063_DRVNAME_ONKEY,
- 		.num_resources	= ARRAY_SIZE(da9063_onkey_resources),
- 		.resources	= da9063_onkey_resources,
-+		.of_compatible = "dlg,da9063-onkey",
- 	},
- 	{
- 		.name		= DA9063_DRVNAME_RTC,
-@@ -107,12 +109,64 @@ static const struct mfd_cell da9063_devs[] = {
- 	},
- };
- 
-+static int da9063_clear_fault_log(struct da9063 *da9063)
-+{
-+	int ret = 0;
-+	int fault_log = 0;
-+
-+	ret = regmap_read(da9063->regmap, DA9063_REG_FAULT_LOG, &fault_log);
-+	if (ret < 0) {
-+		dev_err(da9063->dev, "Cannot read FAULT_LOG.\n");
-+		return -EIO;
-+	}
-+
-+	if (fault_log) {
-+		if (fault_log & DA9063_TWD_ERROR)
-+			dev_dbg(da9063->dev,
-+				"Fault log entry detected: DA9063_TWD_ERROR\n");
-+		if (fault_log & DA9063_POR)
-+			dev_dbg(da9063->dev,
-+				"Fault log entry detected: DA9063_POR\n");
-+		if (fault_log & DA9063_VDD_FAULT)
-+			dev_dbg(da9063->dev,
-+				"Fault log entry detected: DA9063_VDD_FAULT\n");
-+		if (fault_log & DA9063_VDD_START)
-+			dev_dbg(da9063->dev,
-+				"Fault log entry detected: DA9063_VDD_START\n");
-+		if (fault_log & DA9063_TEMP_CRIT)
-+			dev_dbg(da9063->dev,
-+				"Fault log entry detected: DA9063_TEMP_CRIT\n");
-+		if (fault_log & DA9063_KEY_RESET)
-+			dev_dbg(da9063->dev,
-+				"Fault log entry detected: DA9063_KEY_RESET\n");
-+		if (fault_log & DA9063_NSHUTDOWN)
-+			dev_dbg(da9063->dev,
-+				"Fault log entry detected: DA9063_NSHUTDOWN\n");
-+		if (fault_log & DA9063_WAIT_SHUT)
-+			dev_dbg(da9063->dev,
-+				"Fault log entry detected: DA9063_WAIT_SHUT\n");
-+	}
-+
-+	ret = regmap_write(da9063->regmap,
-+			   DA9063_REG_FAULT_LOG,
-+			   fault_log);
-+	if (ret < 0)
-+		dev_err(da9063->dev,
-+			"Cannot reset FAULT_LOG values %d\n", ret);
-+
-+	return ret;
-+}
-+
- int da9063_device_init(struct da9063 *da9063, unsigned int irq)
- {
- 	struct da9063_pdata *pdata = da9063->dev->platform_data;
- 	int model, variant_id, variant_code;
- 	int ret;
- 
-+	ret = da9063_clear_fault_log(da9063);
-+	if (ret < 0)
-+		dev_err(da9063->dev, "Cannot clear fault log\n");
-+
- 	if (pdata) {
- 		da9063->flags = pdata->flags;
- 		da9063->irq_base = pdata->irq_base;
--- 
-2.5.0
-
diff --git a/recipes-kernel/linux/linux-ge-3.14/0008-ahci_imx-Make-receive-DPLL-mode-configurable.patch b/recipes-kernel/linux/linux-ge-3.14/0008-ahci_imx-Make-receive-DPLL-mode-configurable.patch
deleted file mode 100644
index 6d39784..0000000
--- a/recipes-kernel/linux/linux-ge-3.14/0008-ahci_imx-Make-receive-DPLL-mode-configurable.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 50473c9e2f1db391699e3240a05215ccdb4e81aa Mon Sep 17 00:00:00 2001
-From: Justin Waters <justin.waters@timesys.com>
-Date: Wed, 2 Mar 2016 11:47:13 -0500
-Subject: [PATCH 08/10] ahci_imx: Make receive DPLL mode configurable
-
-Signed-off-by: Justin Waters <justin.waters@timesys.com>
----
- drivers/ata/ahci_imx.c | 13 ++++++++++++-
- 1 file changed, 12 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/ata/ahci_imx.c b/drivers/ata/ahci_imx.c
-index 69422dc..176ca1f 100644
---- a/drivers/ata/ahci_imx.c
-+++ b/drivers/ata/ahci_imx.c
-@@ -475,6 +475,13 @@ static const struct reg_value gpr13_rx_eq[] = {
- 	{ 4000, IMX6Q_GPR13_SATA_RX_EQ_VAL_4_0_DB },
- };
- 
-+static const struct reg_value gpr13_rx_dpll[] = {
-+	{ 0, IMX6Q_GPR13_SATA_RX_DPLL_MODE_1P_1F },
-+	{ 1, IMX6Q_GPR13_SATA_RX_DPLL_MODE_2P_2F },
-+	{ 2, IMX6Q_GPR13_SATA_RX_DPLL_MODE_1P_4F },
-+	{ 3, IMX6Q_GPR13_SATA_RX_DPLL_MODE_2P_4F },
-+};
-+
- static const struct reg_property gpr13_props[] = {
- 	{
- 		.name = "fsl,transmit-level-mV",
-@@ -500,6 +507,11 @@ static const struct reg_property gpr13_props[] = {
- 		.name = "fsl,no-spread-spectrum",
- 		.def_value = IMX6Q_GPR13_SATA_MPLL_SS_EN,
- 		.set_value = 0,
-+	}, {
-+		.name = "fsl,receive-dpll-mode",
-+		.values = gpr13_rx_dpll,
-+		.num_values = ARRAY_SIZE(gpr13_rx_dpll),
-+		.def_value = IMX6Q_GPR13_SATA_RX_DPLL_MODE_2P_4F,
- 	},
- };
- 
-@@ -603,7 +615,6 @@ static int imx_ahci_probe(struct platform_device *pdev)
- 
- 		imxpriv->phy_params =
- 				   IMX6Q_GPR13_SATA_RX_LOS_LVL_SATA2M |
--				   IMX6Q_GPR13_SATA_RX_DPLL_MODE_2P_4F |
- 				   IMX6Q_GPR13_SATA_SPD_MODE_3P0G |
- 				   reg_value;
- 	}
--- 
-2.5.0
-
diff --git a/recipes-kernel/linux/linux-ge-3.14/0009-PCI-imx6-Add-DT-bindings-to-configure-PHY-Tx-driver-.patch b/recipes-kernel/linux/linux-ge-3.14/0009-PCI-imx6-Add-DT-bindings-to-configure-PHY-Tx-driver-.patch
deleted file mode 100644
index ef12179..0000000
--- a/recipes-kernel/linux/linux-ge-3.14/0009-PCI-imx6-Add-DT-bindings-to-configure-PHY-Tx-driver-.patch
+++ /dev/null
@@ -1,112 +0,0 @@
-From 4227f47441830cf8f639ae7875dc64ced854b068 Mon Sep 17 00:00:00 2001
-From: Justin Waters <justin.waters@timesys.com>
-Date: Fri, 15 Jan 2016 10:24:35 -0500
-Subject: [PATCH 09/10] PCI: imx6: Add DT bindings to configure PHY Tx driver
- settings
-
-The settings in GPR8 are dependent upon the particular layout of the
-hardware platform.  As such, they should be configurable via the device
-tree.
-
-Look up PHY Tx driver settings from the device tree.  Fall back to the
-original hard-coded values if they are not specified in the device tree.
-
-Signed-off-by: Justin Waters <justin.waters@timesys.com>
-Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
-Acked-by: Lucas Stach <l.stach@pengutronix.de>
----
- .../devicetree/bindings/pci/fsl,imx6q-pcie.txt     |  7 ++++
- drivers/pci/host/pci-imx6.c                        | 41 +++++++++++++++++++---
- 2 files changed, 43 insertions(+), 5 deletions(-)
-
-diff --git a/Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.txt b/Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.txt
-index ad81179..e2f26ff 100644
---- a/Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.txt
-+++ b/Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.txt
-@@ -19,6 +19,13 @@ Additional required properties for imx6sx-pcie:
- - power supplies:
- 	- pcie-phy-supply: regulator used to power the PCIe PHY
- 
-+Optional properties:
-+- fsl,tx-deemph-gen1: Gen1 De-emphasis value. Default: 20
-+- fsl,tx-deemph-gen2-3p5db: Gen2 (3.5db) De-emphasis value. Default: 20
-+- fsl,tx-deemph-gen2-6db: Gen2 (6db) De-emphasis value. Default: 20
-+- fsl,tx-swing-full: Gen2 TX SWING FULL value. Default: 115
-+- fsl,tx-swing-low: TX launch amplitude swing_low value. Default: 115
-+
- Example:
- 
- 	pcie@0x01000000 {
-diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c
-index e48091f..cfc51fb 100644
---- a/drivers/pci/host/pci-imx6.c
-+++ b/drivers/pci/host/pci-imx6.c
-@@ -58,6 +58,11 @@ struct imx6_pcie {
- 	struct regmap		*iomuxc_gpr;
- 	struct regmap		*reg_src;
- 	struct regulator	*pcie_phy_regulator;
-+	u32			tx_deemph_gen1;
-+	u32			tx_deemph_gen2_3p5db;
-+	u32			tx_deemph_gen2_6db;
-+	u32			tx_swing_full;
-+	u32			tx_swing_low;
- };
- 
- /* PCIe Root Complex registers (memory-mapped) */
-@@ -522,15 +527,20 @@ static int imx6_pcie_init_phy(struct pcie_port *pp)
- 				IMX6Q_GPR12_LOS_LEVEL, IMX6Q_GPR12_LOS_LEVEL_9);
- 
- 		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR8,
--				IMX6Q_GPR8_TX_DEEMPH_GEN1, 20 << 0);
-+			   IMX6Q_GPR8_TX_DEEMPH_GEN1,
-+			   imx6_pcie->tx_deemph_gen1 << 0);
- 		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR8,
--				IMX6Q_GPR8_TX_DEEMPH_GEN2_3P5DB, 20 << 6);
-+			   IMX6Q_GPR8_TX_DEEMPH_GEN2_3P5DB,
-+			   imx6_pcie->tx_deemph_gen2_3p5db << 6);
- 		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR8,
--				IMX6Q_GPR8_TX_DEEMPH_GEN2_6DB, 20 << 12);
-+			   IMX6Q_GPR8_TX_DEEMPH_GEN2_6DB,
-+			   imx6_pcie->tx_deemph_gen2_6db << 12);
- 		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR8,
--				IMX6Q_GPR8_TX_SWING_FULL, 115 << 18);
-+			   IMX6Q_GPR8_TX_SWING_FULL,
-+			   imx6_pcie->tx_swing_full << 18);
- 		regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR8,
--				IMX6Q_GPR8_TX_SWING_LOW, 115 << 25);
-+			   IMX6Q_GPR8_TX_SWING_LOW,
-+			   imx6_pcie->tx_swing_low << 25);
- 	}
- 
- 	return 0;
-@@ -1320,6 +1330,27 @@ static int __init imx6_pcie_probe(struct platform_device *pdev)
- 		return PTR_ERR(imx6_pcie->iomuxc_gpr);
- 	}
- 
-+	/* Grab PCIe PHY Tx Settings */
-+	if (of_property_read_u32(np, "fsl,tx-deemph-gen1",
-+				 &imx6_pcie->tx_deemph_gen1))
-+		imx6_pcie->tx_deemph_gen1 = 20;
-+
-+	if (of_property_read_u32(np, "fsl,tx-deemph-gen2-3p5db",
-+				 &imx6_pcie->tx_deemph_gen2_3p5db))
-+		imx6_pcie->tx_deemph_gen2_3p5db = 20;
-+
-+	if (of_property_read_u32(np, "fsl,tx-deemph-gen2-6db",
-+				 &imx6_pcie->tx_deemph_gen2_6db))
-+		imx6_pcie->tx_deemph_gen2_6db = 20;
-+
-+	if (of_property_read_u32(np, "fsl,tx-swing-full",
-+				 &imx6_pcie->tx_swing_full))
-+		imx6_pcie->tx_swing_full = 115;
-+
-+	if (of_property_read_u32(np, "fsl,tx-swing-low",
-+				 &imx6_pcie->tx_swing_low))
-+		imx6_pcie->tx_swing_low = 115;
-+
- 	if (IS_ENABLED(CONFIG_EP_MODE_IN_EP_RC_SYS)) {
- 		int i;
- 		void *test_reg1, *test_reg2;
--- 
-2.5.0
-
diff --git a/recipes-kernel/linux/linux-ge-3.14/0010-ARM-dts-imx-Add-support-for-Advantech-GE-ELO.patch b/recipes-kernel/linux/linux-ge-3.14/0010-ARM-dts-imx-Add-support-for-Advantech-GE-ELO.patch
deleted file mode 100644
index d0b56ef..0000000
--- a/recipes-kernel/linux/linux-ge-3.14/0010-ARM-dts-imx-Add-support-for-Advantech-GE-ELO.patch
+++ /dev/null
@@ -1,817 +0,0 @@
-From 382cafd78e69c6e6a51a8908d3fa787779791e64 Mon Sep 17 00:00:00 2001
-From: Justin Waters <justin.waters@timesys.com>
-Date: Fri, 12 Dec 2014 17:12:24 -0500
-Subject: [PATCH 10/10] ARM: dts: imx: Add support for Advantech/GE ELO
-
-Add support for the Advantech/GE ELO Board.
-
-Signed-off-by: Justin Waters <justin.waters@timesys.com>
----
- arch/arm/boot/dts/imx6q-elo.dts | 795 ++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 795 insertions(+)
- create mode 100644 arch/arm/boot/dts/imx6q-elo.dts
-
-diff --git a/arch/arm/boot/dts/imx6q-elo.dts b/arch/arm/boot/dts/imx6q-elo.dts
-new file mode 100644
-index 0000000..7442e2c
---- /dev/null
-+++ b/arch/arm/boot/dts/imx6q-elo.dts
-@@ -0,0 +1,795 @@
-+/*
-+ * Copyright 2016 Timesys Corporation
-+ * Copyright 2016 General Electric Company
-+ *
-+ * The code contained herein is licensed under the GNU General Public
-+ * License. You may obtain a copy of the GNU General Public License
-+ * Version 2 or later at the following locations:
-+ *
-+ * http://www.opensource.org/licenses/gpl-license.html
-+ * http://www.gnu.org/copyleft/gpl.html
-+ */
-+
-+/dts-v1/;
-+
-+#include "imx6q.dtsi"
-+
-+/ {
-+	model = "General Electric ELO";
-+	compatible = "fsl,imx6q-elo", "fsl,imx6q";
-+
-+	aliases {
-+		mxcfb0 = &mxcfb1;
-+		mxcfb1 = &mxcfb2;
-+		mmc0 = &usdhc2;
-+		mmc1 = &usdhc3;
-+		mmc2 = &usdhc4;
-+	};
-+
-+	memory {
-+		reg = <0x10000000 0x40000000>;
-+	};
-+
-+	clocks {
-+		clk24m: clk24m {
-+			compatible = "fixed-clock";
-+			#clock-cells = <0>;
-+			clock-frequency = <24000000>;
-+		};
-+	};
-+
-+	regulators {
-+		compatible = "simple-bus";
-+
-+		reg_usb_otg_vbus: usb_otg_vbus {
-+			compatible = "regulator-fixed";
-+			regulator-name = "usb_otg_vbus";
-+			regulator-min-microvolt = <5000000>;
-+			regulator-max-microvolt = <5000000>;
-+		};
-+
-+		reg_usb_h1_vbus: usb_h1_vbus {
-+			compatible = "regulator-fixed";
-+			regulator-name = "usb_h1_vbus";
-+			regulator-min-microvolt = <5000000>;
-+			regulator-max-microvolt = <5000000>;
-+		};
-+
-+		reg_1p8v: 1p8v {
-+			compatible = "regulator-fixed";
-+			regulator-name = "1P8V";
-+			regulator-min-microvolt = <1800000>;
-+			regulator-max-microvolt = <1800000>;
-+			regulator-always-on;
-+		};
-+
-+		reg_3p3v: 3p3v {
-+			compatible = "regulator-fixed";
-+			regulator-name = "3P3V";
-+			regulator-min-microvolt = <3300000>;
-+			regulator-max-microvolt = <3300000>;
-+			regulator-always-on;
-+		};
-+
-+		reg_lvds: regulator-lvds {
-+			compatible = "regulator-fixed";
-+			regulator-name = "lvds_ppen";
-+			regulator-min-microvolt = <3300000>;
-+			regulator-max-microvolt = <3300000>;
-+			regulator-boot-on;
-+			gpio = <&gpio3 22 GPIO_ACTIVE_HIGH>;
-+			enable-active-high;
-+		};
-+	};
-+
-+	sound {
-+		compatible = "fsl,imx6q-ba16-sgtl5000",
-+			     "fsl,imx-audio-sgtl5000";
-+		model = "imx6q-ba16-sgtl5000";
-+		cpu-dai = <&ssi1>;
-+		audio-codec = <&codec>;
-+		audio-routing =
-+			"MIC_IN", "Mic Jack",
-+			"Mic Jack", "Mic Bias",
-+			"Headphone Jack", "HP_OUT";
-+		mux-int-port = <1>;
-+		mux-ext-port = <4>;
-+	};
-+
-+	sound-hdmi {
-+		compatible = "fsl,imx6q-audio-hdmi",
-+			     "fsl,imx-audio-hdmi"; model = "imx-audio-hdmi";
-+		hdmi-controller = <&hdmi_audio>;
-+	};
-+
-+	mxcfb1: fb@0 {
-+		compatible = "fsl,mxc_sdc_fb";
-+		disp_dev = "ldb";
-+		interface_pix_fmt = "RGB24";
-+		default_bpp = <32>;
-+		int_clk = <0>;
-+		late_init = <0>;
-+		status = "okay";
-+	};
-+
-+	mxcfb2: fb@1 {
-+		compatible = "fsl,mxc_sdc_fb";
-+		disp_dev = "hdmi";
-+		interface_pix_fmt = "RGB24";
-+		mode_str ="1920x1080M@60";
-+		default_bpp = <24>;
-+		int_clk = <0>;
-+		late_init = <0>;
-+		status = "okay";
-+	};
-+
-+	backlight {
-+		compatible = "pwm-backlight";
-+		pwms = <&pwm1 0 5000000>;
-+		brightness-levels = <  0   1   2   3   4   5   6   7   8   9
-+				      10  11  12  13  14  15  16  17  18  19
-+				      20  21  22  23  24  25  26  27  28  29
-+				      30  31  32  33  34  35  36  37  38  39
-+				      40  41  42  43  44  45  46  47  48  49
-+				      50  51  52  53  54  55  56  57  58  59
-+				      60  61  62  63  64  65  66  67  68  69
-+				      70  71  72  73  74  75  76  77  78  79
-+				      80  81  82  83  84  85  86  87  88  89
-+				      90  91  92  93  94  95  96  97  98  99
-+				     100 101 102 103 104 105 106 107 108 109
-+				     110 111 112 113 114 115 116 117 118 119
-+				     120 121 122 123 124 125 126 127 128 129
-+				     130 131 132 133 134 135 136 137 138 139
-+				     140 141 142 143 144 145 146 147 148 149
-+				     150 151 152 153 154 155 156 157 158 159
-+				     160 161 162 163 164 165 166 167 168 169
-+				     170 171 172 173 174 175 176 177 178 179
-+				     180 181 182 183 184 185 186 187 188 189
-+				     190 191 192 193 194 195 196 197 198 199
-+				     200 201 202 203 204 205 206 207 208 209
-+				     210 211 212 213 214 215 216 217 218 219
-+				     220 221 222 223 224 225 226 227 228 229
-+				     230 231 232 233 234 235 236 237 238 239
-+				     240 241 242 243 244 245 246 247 248 249
-+				     250 251 252 253 254 255>;
-+		default-brightness-level = <255>;
-+		power-supply = <&reg_lvds>;
-+		enable-gpios = <&gpio1 0 GPIO_ACTIVE_HIGH>;
-+	};
-+
-+	v4l2_out {
-+		compatible = "fsl,mxc_v4l2_output";
-+		status = "okay";
-+	};
-+};
-+
-+&audmux {
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&pinctrl_audmux>;
-+	status = "okay";
-+};
-+
-+&clks {
-+	fsl,ldb-di0-parent = <&clks IMX6QDL_CLK_PLL2_PFD0_352M>;
-+	fsl,ldb-di1-parent = <&clks IMX6QDL_CLK_PLL2_PFD0_352M>;
-+};
-+
-+&ecspi1 {
-+	fsl,spi-num-chipselects = <1>;
-+	cs-gpios = <&gpio2 30 0>;
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&pinctrl_ecspi1>;
-+	status = "okay";
-+
-+	flash: n25q032@0 {
-+		#address-cells = <1>;
-+		#size-cells = <1>;
-+		compatible = "st,n25q032";
-+		spi-max-frequency = <20000000>;
-+		reg = <0>;
-+		partition@0 {
-+			label = "U-Boot";
-+			reg = <0x0 0xC0000>;
-+		};
-+		partition@C0000 {
-+			label = "env";
-+			reg = <0xC0000 0x10000>;
-+		};
-+		partition@D0000 {
-+			label = "spare";
-+			reg = <0xD0000 0x130000>;
-+		};
-+	};
-+};
-+
-+&ecspi5 {
-+	fsl,spi-num-chipselects = <1>;
-+	cs-gpios = <&gpio1 17 0>;
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&pinctrl_ecspi5>;
-+	status = "okay";
-+
-+	m25_eeprom: m25p80@0 {
-+		compatible = "atmel,at25";
-+		spi-max-frequency = <20000000>;
-+		size = <0x8000>;
-+		pagesize = <64>;
-+		reg = <0>;
-+		address-width = <16>;
-+	};
-+};
-+
-+&fec {
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&pinctrl_enet>;
-+	phy-mode = "rgmii";
-+	status = "okay";
-+};
-+
-+&cpu0 {
-+	arm-supply = <&reg_arm>;
-+	soc-supply = <&reg_soc>;
-+	pu-supply = <&reg_pu>;
-+};
-+
-+&dcic1 {
-+	dcic_id = <0>;
-+	dcic_mux = "dcic-hdmi";
-+	status = "okay";
-+};
-+
-+&dcic2 {
-+	dcic_id = <1>;
-+	dcic_mux = "dcic-lvds1";
-+	status = "okay";
-+};
-+
-+
-+&gpc {
-+	fsl,cpu_pupscr_sw2iso = <0xf>;
-+	fsl,cpu_pupscr_sw = <0xf>;
-+	fsl,cpu_pdnscr_iso2sw = <0x1>;
-+	fsl,cpu_pdnscr_iso = <0x1>;
-+	fsl,ldo-bypass = <0>;
-+	fsl,wdog-reset = <1>; /* watchdog select of reset source */
-+	pu-supply = <&reg_pu>;
-+};
-+
-+&hdmi_audio {
-+	status = "okay";
-+};
-+
-+&hdmi_cec {
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&pinctrl_hdmi_cec>;
-+	status = "okay";
-+};
-+
-+&hdmi_core {
-+	ipu_id = <1>;
-+	disp_id = <0>;
-+	status = "okay";
-+};
-+
-+&hdmi_video {
-+	fsl,phy_reg_vlev = <0x01ad>;
-+	fsl,phy_reg_cksymtx = <0x800d>;
-+	status = "okay";
-+};
-+
-+&i2c1 {
-+	clock-frequency = <100000>;
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&pinctrl_i2c1>;
-+	status = "okay";
-+
-+	codec: sgtl5000@0a {
-+		compatible = "fsl,sgtl5000";
-+		reg = <0x0a>;
-+		clocks = <&clks 201>;
-+		VDDA-supply = <&reg_1p8v>;
-+		VDDIO-supply = <&reg_3p3v>;
-+	};
-+};
-+
-+&i2c2 {
-+	clock-frequency = <100000>;
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&pinctrl_i2c2>;
-+	status = "okay";
-+
-+	hdmi: edid@50 {
-+		compatible = "fsl,imx6-hdmi-i2c";
-+		reg = <0x50>;
-+	};
-+};
-+
-+&i2c3 {
-+        clock-frequency = <100000>;
-+        pinctrl-names = "default";
-+        pinctrl-0 = <&pinctrl_i2c3>;
-+        status = "okay";
-+
-+	pmic@58 {
-+		compatible = "dialog,da9063";
-+		reg = <0x58>;
-+		interrupt-parent = <&gpio7>;
-+		interrupts = <13 0x8>; /* active-low GPIO7_13 */
-+
-+		regulators {
-+			bcore1 {
-+				regulator-min-microvolt = <1420000>;
-+				regulator-max-microvolt = <1420000>;
-+				regulator-always-on;
-+				regulator-boot-on;
-+			};
-+
-+			bcore2 {
-+				regulator-min-microvolt = <1420000>;
-+				regulator-max-microvolt = <1420000>;
-+				regulator-always-on;
-+				regulator-boot-on;
-+			};
-+
-+			bpro {
-+				regulator-min-microvolt = <1500000>;
-+				regulator-max-microvolt = <1500000>;
-+				regulator-always-on;
-+				regulator-boot-on;
-+			};
-+
-+			bmem {
-+				regulator-min-microvolt = <1800000>;
-+				regulator-max-microvolt = <1800000>;
-+				regulator-always-on;
-+				regulator-boot-on;
-+			};
-+
-+			bio: bio {
-+				regulator-min-microvolt = <1800000>;
-+				regulator-max-microvolt = <1800000>;
-+				regulator-always-on;
-+				regulator-boot-on;
-+			};
-+
-+			bperi: bperi {
-+				regulator-min-microvolt = <3300000>;
-+				regulator-max-microvolt = <3300000>;
-+				regulator-always-on;
-+				regulator-boot-on;
-+			};
-+
-+			ldo1 {
-+				regulator-min-microvolt = <600000>;
-+				regulator-max-microvolt = <1860000>;
-+			};
-+
-+			ldo2 {
-+				regulator-min-microvolt = <600000>;
-+				regulator-max-microvolt = <1860000>;
-+			};
-+
-+			ldo3 {
-+				regulator-min-microvolt = <900000>;
-+				regulator-max-microvolt = <3440000>;
-+			};
-+
-+			ldo4 {
-+				regulator-min-microvolt = <900000>;
-+				regulator-max-microvolt = <3440000>;
-+			};
-+
-+			ldo5 {
-+				regulator-min-microvolt = <900000>;
-+				regulator-max-microvolt = <3600000>;
-+				regulator-always-on;
-+				regulator-boot-on;
-+			};
-+
-+			ldo6 {
-+				regulator-min-microvolt = <900000>;
-+				regulator-max-microvolt = <3600000>;
-+				regulator-always-on;
-+				regulator-boot-on;
-+			};
-+
-+			ldo7 {
-+				regulator-min-microvolt = <900000>;
-+				regulator-max-microvolt = <3600000>;
-+				regulator-always-on;
-+				regulator-boot-on;
-+			};
-+
-+			ldo8 {
-+				regulator-min-microvolt = <900000>;
-+				regulator-max-microvolt = <3600000>;
-+				regulator-always-on;
-+				regulator-boot-on;
-+			};
-+
-+			ldo9 {
-+				regulator-min-microvolt = <950000>;
-+				regulator-max-microvolt = <3600000>;
-+				regulator-always-on;
-+				regulator-boot-on;
-+			};
-+
-+			ldo10 {
-+				regulator-min-microvolt = <900000>;
-+				regulator-max-microvolt = <3600000>;
-+				regulator-always-on;
-+				regulator-boot-on;
-+			};
-+
-+			ldo11 {
-+				regulator-min-microvolt = <900000>;
-+				regulator-max-microvolt = <3600000>;
-+				regulator-always-on;
-+				regulator-boot-on;
-+			};
-+		};
-+	};
-+
-+	rtc@32 {
-+		compatible = "epson,rx8010";
-+		reg = <0x32>;
-+		interrupt-parent = <&gpio4>;
-+		interrupts = <10>;
-+		rx8010-irq_1 = <&gpio4 10 0>;
-+	};
-+};
-+
-+&iomuxc {
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&pinctrl_hog>;
-+
-+	hog {
-+		pinctrl_hog: hoggrp-1 {
-+			fsl,pins = <
-+				MX6QDL_PAD_GPIO_4__GPIO1_IO04    0x80000000	/* uSDHC2 CD */
-+				MX6QDL_PAD_NANDF_CS0__GPIO6_IO11 0x80000000	/* uSDHC4 CD */
-+				MX6QDL_PAD_NANDF_CS1__GPIO6_IO14 0x80000000	/* uSDHC4 SDIO PWR */
-+				MX6QDL_PAD_NANDF_CS2__GPIO6_IO15 0x80000000	/* uSDHC4 SDIO WP */
-+				MX6QDL_PAD_NANDF_CS3__GPIO6_IO16 0x80000000	/* uSDHC4 SDIO LED */
-+				MX6QDL_PAD_EIM_EB2__GPIO2_IO30   0x80000000	/* SPI1 CS */
-+				MX6QDL_PAD_ENET_TX_EN__GPIO1_IO28 0x80000000	/* FEC Reset */
-+				MX6QDL_PAD_NANDF_D0__GPIO2_IO00 0x80000000	/* GPIO0 */
-+				MX6QDL_PAD_NANDF_D1__GPIO2_IO01 0x80000000	/* GPIO1 */
-+				MX6QDL_PAD_NANDF_D2__GPIO2_IO02 0x80000000	/* GPIO2 */
-+				MX6QDL_PAD_NANDF_D3__GPIO2_IO03 0x80000000	/* GPIO3 */
-+				MX6QDL_PAD_NANDF_D4__GPIO2_IO04 0x80000000	/* GPIO4 */
-+				MX6QDL_PAD_NANDF_D5__GPIO2_IO05 0x80000000	/* GPIO5 */
-+				MX6QDL_PAD_NANDF_D6__GPIO2_IO06 0x80000000	/* GPIO6 */
-+				MX6QDL_PAD_NANDF_D7__GPIO2_IO07 0x80000000	/* GPIO7 */
-+				MX6QDL_PAD_NANDF_CLE__GPIO6_IO07 0x80000000	/* CAM_PWDN */
-+				MX6QDL_PAD_GPIO_2__GPIO1_IO02 0x80000000	/* CAM_RST */
-+				MX6QDL_PAD_GPIO_9__WDOG1_B 0x80000000		/* Watchdog out */
-+				MX6QDL_PAD_GPIO_16__GPIO7_IO11   0x80000000	/* HUB_RESET */
-+				MX6QDL_PAD_GPIO_18__GPIO7_IO13   0x80000000	/* PMIC Interrupt */
-+				MX6QDL_PAD_GPIO_19__GPIO4_IO05   0x80000000	/* AR8033 Interrupt */
-+				MX6QDL_PAD_GPIO_0__GPIO1_IO00  0x80000000	/* BLEN_OUT */
-+				MX6QDL_PAD_EIM_D22__GPIO3_IO22   0x80000000	/* LVDS_PPEN_OUT */
-+				MX6QDL_PAD_KEY_COL2__GPIO4_IO10  0x80000000	/* RTC_INT */
-+			>;
-+		};
-+	};
-+
-+	usdhc3 {
-+		pinctrl_usdhc3_reset: usdhc3grp-reset {
-+			fsl,pins = <
-+				MX6QDL_PAD_SD3_RST__SD3_RESET   0x170F9
-+			>;
-+		};
-+	};
-+
-+	audmux {
-+		pinctrl_audmux: audmuxgrp {
-+			fsl,pins = <
-+				MX6QDL_PAD_DISP0_DAT20__AUD4_TXC  0x130b0
-+				MX6QDL_PAD_DISP0_DAT21__AUD4_TXD  0x130b0
-+				MX6QDL_PAD_DISP0_DAT22__AUD4_TXFS  0x130b0
-+				MX6QDL_PAD_DISP0_DAT23__AUD4_RXD  0x130b0
-+			>;
-+		};
-+	};
-+
-+	ecspi1 {
-+		pinctrl_ecspi1: ecspi1grp {
-+			fsl,pins = <
-+				MX6QDL_PAD_EIM_D17__ECSPI1_MISO 0x100b1
-+				MX6QDL_PAD_EIM_D18__ECSPI1_MOSI 0x100b1
-+				MX6QDL_PAD_EIM_D16__ECSPI1_SCLK 0x100b1
-+			>;
-+		};
-+	};
-+
-+	ecspi5 {
-+		pinctrl_ecspi5: ecspi5grp {
-+			fsl,pins = <
-+				MX6QDL_PAD_SD1_DAT0__ECSPI5_MISO	0x1b0b0
-+				MX6QDL_PAD_SD1_CMD__ECSPI5_MOSI		0x1b0b0
-+				MX6QDL_PAD_SD1_CLK__ECSPI5_SCLK		0x1b0b0
-+				MX6QDL_PAD_SD1_DAT1__GPIO1_IO17		0x1b0b0
-+			>;
-+		};
-+	};
-+
-+	hdmi_cec {
-+		pinctrl_hdmi_cec: hdmicecgrp {
-+			fsl,pins = <
-+				MX6QDL_PAD_KEY_ROW2__HDMI_TX_CEC_LINE 0x1f8b0
-+			>;
-+		};
-+	};
-+
-+	usbotg {
-+		pinctrl_usbotg: usbotggrp {
-+			fsl,pins = <
-+				MX6QDL_PAD_ENET_RX_ER__USB_OTG_ID 0x17059
-+			>;
-+		};
-+	};
-+
-+	usdhc2 {
-+		pinctrl_usdhc2: usdhc2grp {
-+			fsl,pins = <
-+				MX6QDL_PAD_SD2_CMD__SD2_CMD    0x17059
-+				MX6QDL_PAD_SD2_CLK__SD2_CLK    0x10059
-+				MX6QDL_PAD_SD2_DAT0__SD2_DATA0 0x17059
-+				MX6QDL_PAD_SD2_DAT1__SD2_DATA1 0x17059
-+				MX6QDL_PAD_SD2_DAT2__SD2_DATA2 0x17059
-+				MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x17059
-+			>;
-+		};
-+	};
-+
-+	usdhc3 {
-+		pinctrl_usdhc3: usdhc3grp {
-+			fsl,pins = <
-+				MX6QDL_PAD_SD3_CMD__SD3_CMD    0x17059
-+				MX6QDL_PAD_SD3_CLK__SD3_CLK    0x10059
-+				MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
-+				MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
-+				MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
-+				MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
-+				MX6QDL_PAD_SD3_DAT4__SD3_DATA4 0x17059
-+				MX6QDL_PAD_SD3_DAT5__SD3_DATA5 0x17059
-+				MX6QDL_PAD_SD3_DAT6__SD3_DATA6 0x17059
-+				MX6QDL_PAD_SD3_DAT7__SD3_DATA7 0x17059
-+			>;
-+		};
-+	};
-+
-+	usdhc4 {
-+		pinctrl_usdhc4: usdhc4grp {
-+			fsl,pins = <
-+				MX6QDL_PAD_SD4_CMD__SD4_CMD    0x17059
-+				MX6QDL_PAD_SD4_CLK__SD4_CLK    0x10059
-+				MX6QDL_PAD_SD4_DAT0__SD4_DATA0 0x17059
-+				MX6QDL_PAD_SD4_DAT1__SD4_DATA1 0x17059
-+				MX6QDL_PAD_SD4_DAT2__SD4_DATA2 0x17059
-+				MX6QDL_PAD_SD4_DAT3__SD4_DATA3 0x17059
-+				MX6QDL_PAD_SD4_DAT4__SD4_DATA4 0x17059
-+				MX6QDL_PAD_SD4_DAT5__SD4_DATA5 0x17059
-+				MX6QDL_PAD_SD4_DAT6__SD4_DATA6 0x17059
-+				MX6QDL_PAD_SD4_DAT7__SD4_DATA7 0x17059
-+			>;
-+		};
-+	};
-+
-+	i2c1 {
-+		pinctrl_i2c1: i2c1grp {
-+			fsl,pins = <
-+				MX6QDL_PAD_CSI0_DAT8__I2C1_SDA 0x4001b8b1
-+				MX6QDL_PAD_CSI0_DAT9__I2C1_SCL 0x4001b8b1
-+			>;
-+		};
-+	};
-+
-+	i2c2 {
-+		pinctrl_i2c2: i2c2grp {
-+			fsl,pins = <
-+				MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1
-+				MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1
-+			>;
-+		};
-+	};
-+
-+	i2c3 {
-+		pinctrl_i2c3: i2c3grp {
-+			fsl,pins = <
-+				MX6QDL_PAD_GPIO_3__I2C3_SCL 0x4001b8b1
-+				MX6QDL_PAD_GPIO_6__I2C3_SDA 0x4001b8b1
-+			>;
-+		};
-+	};
-+
-+	pwm1 {
-+		pinctrl_pwm1: pwm1grp {
-+			fsl,pins = <
-+				MX6QDL_PAD_SD1_DAT3__PWM1_OUT 0x1b0b1
-+			>;
-+		};
-+	};
-+
-+	pwm2 {
-+		pinctrl_pwm2: pwm2grp {
-+			fsl,pins = <
-+				MX6QDL_PAD_GPIO_1__PWM2_OUT 0x1b0b1
-+			>;
-+		};
-+	};
-+
-+	enet {
-+		pinctrl_enet: enetgrp {
-+			fsl,pins = <
-+				MX6QDL_PAD_ENET_MDIO__ENET_MDIO       0x100b0
-+				MX6QDL_PAD_ENET_MDC__ENET_MDC         0x100b0
-+				MX6QDL_PAD_RGMII_TXC__RGMII_TXC       0x100b0
-+				MX6QDL_PAD_RGMII_TD0__RGMII_TD0       0x100b0
-+				MX6QDL_PAD_RGMII_TD1__RGMII_TD1       0x100b0
-+				MX6QDL_PAD_RGMII_TD2__RGMII_TD2       0x100b0
-+				MX6QDL_PAD_RGMII_TD3__RGMII_TD3       0x100b0
-+				MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x100b0
-+				MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK  0x100b0
-+				MX6QDL_PAD_RGMII_RXC__RGMII_RXC       0x1b0b0
-+				MX6QDL_PAD_RGMII_RD0__RGMII_RD0       0x1b0b0
-+				MX6QDL_PAD_RGMII_RD1__RGMII_RD1       0x1b0b0
-+				MX6QDL_PAD_RGMII_RD2__RGMII_RD2       0x1b0b0
-+				MX6QDL_PAD_RGMII_RD3__RGMII_RD3       0x1b0b0
-+				MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
-+			>;
-+		};
-+	};
-+
-+	uart3 {
-+		pinctrl_uart3: uart3grp {
-+			fsl,pins = <
-+				MX6QDL_PAD_EIM_D25__UART3_RX_DATA 0x1b0b1
-+				MX6QDL_PAD_EIM_D24__UART3_TX_DATA 0x1b0b1
-+				MX6QDL_PAD_EIM_D23__UART3_CTS_B   0x1b0b1
-+				MX6QDL_PAD_EIM_D31__UART3_RTS_B   0x1b0b1
-+			>;
-+		};
-+	};
-+
-+	uart4 {
-+		pinctrl_uart4: uart4grp {
-+			fsl,pins = <
-+				MX6QDL_PAD_KEY_COL0__UART4_TX_DATA 0x1b0b1
-+				MX6QDL_PAD_KEY_ROW0__UART4_RX_DATA 0x1b0b1
-+			>;
-+		};
-+	};
-+};
-+
-+&ldb {
-+	split-mode;
-+	status = "okay";
-+
-+	lvds-channel@0 {
-+		fsl,data-mapping = "spwg";
-+		fsl,data-width = <24>;
-+		crtc = "ipu1-di0";
-+		status = "okay";
-+
-+		display-timings {
-+			native-mode = <&timing0>;
-+			timing0: SHARP-LQ156M1LG21 {
-+				clock-frequency = <65000000>;
-+				hactive = <1920>;
-+				vactive = <1080>;
-+				hback-porch = <100>;
-+				hfront-porch = <40>;
-+				vback-porch = <30>;
-+				vfront-porch = <3>;
-+				hsync-len = <10>;
-+				vsync-len = <2>;
-+			};
-+		};
-+	};
-+
-+	lvds-channel@1 {
-+		status = "disabled";
-+	};
-+};
-+
-+&pcie {
-+	reset-gpio = <&gpio7 12 0>;
-+	fsl,tx-deemph-gen1 = <0>;
-+	fsl,tx-deemph-gen2-3p5db = <0>;
-+	fsl,tx-deemph-gen2-6db = <20>;
-+	fsl,tx-swing-full = <103>;
-+	fsl,tx-swing-low = <103>;
-+	status = "okay";
-+};
-+
-+
-+&pwm1 {
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&pinctrl_pwm1>;
-+	status = "okay";
-+};
-+
-+&pwm2 {
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&pinctrl_pwm2>;
-+	status = "okay";
-+};
-+
-+&ssi1 {
-+	fsl,mode = "i2s-master";
-+	status = "okay";
-+};
-+
-+&uart3 {
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&pinctrl_uart3>;
-+	fsl,uart-has-rtscts;
-+	status = "okay";
-+};
-+
-+&uart4 {
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&pinctrl_uart4>;
-+	status = "okay";
-+};
-+
-+&usbh1 {
-+	vbus-supply = <&reg_usb_h1_vbus>;
-+	reset-gpios = <&gpio7 11 0>;
-+	status = "okay";
-+};
-+
-+&usbotg {
-+	vbus-supply = <&reg_usb_otg_vbus>;
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&pinctrl_usbotg>;
-+	disable-over-current;
-+	status = "okay";
-+};
-+
-+&usdhc2 {
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&pinctrl_usdhc2>;
-+	cd-gpios = <&gpio1 4 0>;
-+	no-1-8-v;
-+	keep-power-in-suspend;
-+	enable-sdio-wakeup;
-+	status = "okay";
-+};
-+
-+&usdhc3 {
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&pinctrl_usdhc3 &pinctrl_usdhc3_reset>;
-+	bus-width = <8>;
-+	vmmc-supply = <&bperi>;
-+	no-1-8-v;
-+	non-removable;
-+	keep-power-in-suspend;
-+	status = "okay";
-+};
-+
-+&usdhc4 {
-+        pinctrl-names = "default";
-+        pinctrl-0 = <&pinctrl_usdhc4>;
-+        bus-width = <8>;
-+	cd-gpios = <&gpio6 11 0>;
-+        no-1-8-v;
-+	keep-power-in-suspend;
-+	enable-sdio-wakeup;
-+        status = "okay";
-+};
-+
-+&vpu {
-+	pu-supply = <&reg_pu>;
-+};
-+
-+&sata {
-+	fsl,no-spread-spectrum;
-+	fsl,transmit-atten-16ths = <12>;
-+	fsl,transmit-boost-mdB = <3330>;
-+	fsl,transmit-level-mV = <1133>;
-+	fsl,receive-dpll-mode = <1>;
-+	status = "okay";
-+};
--- 
-2.5.0
-
diff --git a/recipes-kernel/linux/linux-ge-3.14/defconfig b/recipes-kernel/linux/linux-ge-3.14/defconfig
deleted file mode 100644
index 86c6caf..0000000
--- a/recipes-kernel/linux/linux-ge-3.14/defconfig
+++ /dev/null
@@ -1,453 +0,0 @@
-CONFIG_KERNEL_LZO=y
-CONFIG_SYSVIPC=y
-CONFIG_NO_HZ=y
-CONFIG_HIGH_RES_TIMERS=y
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_LOG_BUF_SHIFT=18
-CONFIG_CGROUPS=y
-CONFIG_RELAY=y
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_EXPERT=y
-CONFIG_KALLSYMS_ALL=y
-CONFIG_PERF_EVENTS=y
-# CONFIG_SLUB_DEBUG is not set
-# CONFIG_COMPAT_BRK is not set
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODVERSIONS=y
-CONFIG_MODULE_SRCVERSION_ALL=y
-# CONFIG_BLK_DEV_BSG is not set
-CONFIG_GPIO_PCA953X=y
-CONFIG_ARCH_MXC=y
-CONFIG_MACH_IMX51_DT=y
-CONFIG_MACH_EUKREA_CPUIMX51SD=y
-CONFIG_SOC_IMX50=y
-CONFIG_SOC_IMX53=y
-CONFIG_SOC_IMX6Q=y
-CONFIG_SOC_IMX6SL=y
-CONFIG_SOC_IMX6SX=y
-CONFIG_SOC_IMX6UL=y
-CONFIG_SOC_IMX7D=y
-CONFIG_SOC_VF610=y
-# CONFIG_SWP_EMULATE is not set
-CONFIG_PCI=y
-CONFIG_PCI_IMX6=y
-CONFIG_SMP=y
-CONFIG_HAVE_ARM_ARCH_TIMER=y
-CONFIG_VMSPLIT_2G=y
-CONFIG_PREEMPT=y
-CONFIG_AEABI=y
-CONFIG_HIGHMEM=y
-CONFIG_CMA=y
-CONFIG_CMDLINE="noinitrd console=ttymxc0,115200"
-CONFIG_KEXEC=y
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-CONFIG_ARM_IMX6Q_CPUFREQ=y
-CONFIG_ARM_IMX7D_CPUFREQ=y
-CONFIG_CPU_IDLE=y
-CONFIG_VFP=y
-CONFIG_NEON=y
-CONFIG_BINFMT_MISC=m
-CONFIG_PM_RUNTIME=y
-CONFIG_PM_DEBUG=y
-CONFIG_PM_TEST_SUSPEND=y
-CONFIG_NET=y
-CONFIG_PACKET=y
-CONFIG_UNIX=y
-CONFIG_INET=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=y
-CONFIG_NETFILTER=y
-CONFIG_VLAN_8021Q=y
-CONFIG_LLC2=y
-CONFIG_CAN=y
-CONFIG_CAN_FLEXCAN=y
-CONFIG_CAN_M_CAN=y
-CONFIG_BT=y
-CONFIG_BT_RFCOMM=y
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=y
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=y
-CONFIG_BT_HCIBTUSB=y
-CONFIG_BT_HCIUART=y
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIUART_ATH3K=y
-CONFIG_BT_HCIBCM203X=y
-CONFIG_BT_ATH3K=y
-CONFIG_CFG80211=y
-CONFIG_MAC80211=y
-CONFIG_DEVTMPFS=y
-CONFIG_DEVTMPFS_MOUNT=y
-# CONFIG_STANDALONE is not set
-CONFIG_DMA_CMA=y
-CONFIG_CMA_SIZE_MBYTES=320
-CONFIG_IMX_WEIM=y
-CONFIG_CONNECTOR=y
-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_CFI_STAA=y
-CONFIG_MTD_PHYSMAP_OF=y
-CONFIG_MTD_DATAFLASH=y
-CONFIG_MTD_M25P80=y
-CONFIG_MTD_SST25L=y
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_GPMI_NAND=y
-CONFIG_MTD_NAND_MXC=y
-CONFIG_MTD_SPI_NOR=y
-CONFIG_SPI_FSL_QUADSPI=y
-CONFIG_MTD_UBI=y
-CONFIG_BLK_DEV_LOOP=y
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_SIZE=65536
-CONFIG_SENSORS_FXOS8700=y
-CONFIG_SENSORS_FXAS2100X=y
-CONFIG_EEPROM_AT24=y
-CONFIG_EEPROM_AT25=y
-# CONFIG_SCSI_PROC_FS is not set
-CONFIG_BLK_DEV_SD=y
-CONFIG_SCSI_MULTI_LUN=y
-CONFIG_SCSI_CONSTANTS=y
-CONFIG_SCSI_LOGGING=y
-CONFIG_SCSI_SCAN_ASYNC=y
-# CONFIG_SCSI_LOWLEVEL is not set
-CONFIG_ATA=y
-CONFIG_SATA_AHCI_PLATFORM=y
-CONFIG_AHCI_IMX=y
-CONFIG_PATA_IMX=y
-CONFIG_NETDEVICES=y
-# CONFIG_NET_VENDOR_BROADCOM is not set
-CONFIG_CS89x0=y
-CONFIG_CS89x0_PLATFORM=y
-# CONFIG_NET_VENDOR_FARADAY is not set
-CONFIG_IGB=y
-# CONFIG_NET_VENDOR_MARVELL is not set
-# CONFIG_NET_VENDOR_MICREL is not set
-# CONFIG_NET_VENDOR_MICROCHIP is not set
-# CONFIG_NET_VENDOR_NATSEMI is not set
-# CONFIG_NET_VENDOR_SEEQ is not set
-CONFIG_SMC91X=y
-CONFIG_SMC911X=y
-CONFIG_SMSC911X=y
-# CONFIG_NET_VENDOR_STMICRO is not set
-CONFIG_MICREL_PHY=y
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_RTL8152=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_CDC_EEM=m
-CONFIG_BCMDHD=m
-CONFIG_BCMDHD_SDIO=y
-CONFIG_BCMDHD_FW_PATH="/lib/firmware/bcm/fw_bcmdhd.bin"
-CONFIG_BCMDHD_NVRAM_PATH="/lib/firmware/bcm/bcmdhd.cal"
-# CONFIG_RTL_CARDS is not set
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_EVDEV=y
-CONFIG_INPUT_EVBUG=m
-CONFIG_KEYBOARD_GPIO=y
-CONFIG_KEYBOARD_IMX=y
-CONFIG_MOUSE_PS2=m
-CONFIG_MOUSE_PS2_ELANTECH=y
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_ADS7846=y
-CONFIG_TOUCHSCREEN_EGALAX=y
-CONFIG_TOUCHSCREEN_ELAN=y
-CONFIG_TOUCHSCREEN_MAX11801=y
-CONFIG_TOUCHSCREEN_IMX6UL_TSC=y
-CONFIG_TOUCHSCREEN_MC13783=y
-CONFIG_TOUCHSCREEN_TSC2007=y
-CONFIG_TOUCHSCREEN_STMPE=y
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_MMA8450=y
-CONFIG_INPUT_ISL29023=y
-CONFIG_INPUT_MPL3115=y
-CONFIG_SENSOR_FXLS8471=y
-CONFIG_SERIO_SERPORT=m
-# CONFIG_LEGACY_PTYS is not set
-# CONFIG_DEVKMEM is not set
-CONFIG_SERIAL_IMX=y
-CONFIG_SERIAL_IMX_CONSOLE=y
-CONFIG_SERIAL_FSL_LPUART=y
-CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
-CONFIG_FSL_OTP=y
-# CONFIG_I2C_COMPAT is not set
-CONFIG_I2C_CHARDEV=y
-# CONFIG_I2C_HELPER_AUTO is not set
-CONFIG_I2C_ALGOPCF=m
-CONFIG_I2C_ALGOPCA=m
-CONFIG_I2C_IMX=y
-CONFIG_SPI=y
-CONFIG_SPI_GPIO=y
-CONFIG_SPI_IMX=y
-CONFIG_GPIO_SYSFS=y
-CONFIG_GPIO_MAX732X=y
-CONFIG_GPIO_74X164=y
-CONFIG_POWER_SUPPLY=y
-CONFIG_SABRESD_MAX8903=y
-CONFIG_SENSORS_MAX17135=y
-CONFIG_SENSORS_MAG3110=y
-CONFIG_THERMAL=y
-CONFIG_CPU_THERMAL=y
-CONFIG_IMX_THERMAL=y
-CONFIG_DEVICE_THERMAL=y
-CONFIG_WATCHDOG=y
-CONFIG_IMX2_WDT=y
-CONFIG_MFD_DA9052_I2C=y
-CONFIG_MFD_DA9063=y
-CONFIG_MFD_MC13XXX_SPI=y
-CONFIG_MFD_MC13XXX_I2C=y
-CONFIG_MFD_MAX17135=y
-CONFIG_MFD_SI476X_CORE=y
-CONFIG_MFD_STMPE=y
-CONFIG_REGULATOR=y
-CONFIG_REGULATOR_FIXED_VOLTAGE=y
-CONFIG_REGULATOR_ANATOP=y
-CONFIG_REGULATOR_DA9052=y
-CONFIG_REGULATOR_DA9063=y
-CONFIG_REGULATOR_GPIO=y
-CONFIG_REGULATOR_MAX17135=y
-CONFIG_REGULATOR_MC13783=y
-CONFIG_REGULATOR_MC13892=y
-CONFIG_REGULATOR_PFUZE100=y
-CONFIG_MEDIA_SUPPORT=y
-CONFIG_MEDIA_CAMERA_SUPPORT=y
-CONFIG_MEDIA_RADIO_SUPPORT=y
-CONFIG_MEDIA_RC_SUPPORT=y
-CONFIG_RC_DEVICES=y
-CONFIG_IR_GPIO_CIR=y
-CONFIG_MEDIA_USB_SUPPORT=y
-CONFIG_USB_VIDEO_CLASS=m
-CONFIG_V4L_PLATFORM_DRIVERS=y
-CONFIG_VIDEO_MXC_OUTPUT=y
-CONFIG_VIDEO_MXC_CAPTURE=m
-CONFIG_MXC_CAMERA_OV5640=m
-CONFIG_MXC_CAMERA_OV5642=m
-CONFIG_MXC_CAMERA_OV5640_MIPI=m
-CONFIG_MXC_TVIN_ADV7180=m
-CONFIG_MXC_IPU_DEVICE_QUEUE_SDC=m
-CONFIG_VIDEO_MXC_IPU_OUTPUT=y
-CONFIG_VIDEO_MXC_PXP_V4L2=y
-CONFIG_VIDEO_MXC_CSI_CAMERA=m
-CONFIG_MXC_VADC=m
-CONFIG_MXC_MIPI_CSI=m
-CONFIG_MXC_CAMERA_OV5647_MIPI=m
-CONFIG_SOC_CAMERA=y
-CONFIG_VIDEO_MX3=y
-CONFIG_V4L_MEM2MEM_DRIVERS=y
-CONFIG_VIDEO_CODA=y
-CONFIG_RADIO_SI476X=y
-CONFIG_SOC_CAMERA_OV2640=y
-CONFIG_DRM=y
-CONFIG_DRM_VIVANTE=y
-CONFIG_FB=y
-CONFIG_FB_MXS=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_L4F00242T03=y
-CONFIG_LCD_PLATFORM=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_PWM=y
-CONFIG_FB_MXC_SYNC_PANEL=y
-CONFIG_FB_MXC_LDB=y
-CONFIG_FB_MXC_MIPI_DSI=y
-CONFIG_FB_MXC_MIPI_DSI_SAMSUNG=y
-CONFIG_FB_MXC_TRULY_WVGA_SYNC_PANEL=y
-CONFIG_FB_MXC_HDMI=y
-CONFIG_FB_MXC_EINK_PANEL=y
-CONFIG_FB_MXC_EINK_V2_PANEL=y
-CONFIG_FB_MXS_SII902X=y
-CONFIG_FB_MXC_DCIC=m
-CONFIG_HANNSTAR_CABC=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
-CONFIG_LOGO=y
-CONFIG_SOUND=y
-CONFIG_SND=y
-CONFIG_SND_USB_AUDIO=m
-CONFIG_SND_SOC=y
-CONFIG_SND_IMX_SOC=y
-CONFIG_SND_SOC_EUKREA_TLV320=y
-CONFIG_SND_SOC_IMX_CS42888=y
-CONFIG_SND_SOC_IMX_SII902X=y
-CONFIG_SND_SOC_IMX_WM8958=y
-CONFIG_SND_SOC_IMX_WM8960=y
-CONFIG_SND_SOC_IMX_WM8962=y
-CONFIG_SND_SOC_IMX_SGTL5000=y
-CONFIG_SND_SOC_IMX_MQS=y
-CONFIG_SND_SOC_IMX_SPDIF=y
-CONFIG_SND_SOC_IMX_MC13783=y
-CONFIG_SND_SOC_IMX_HDMI=y
-CONFIG_SND_SOC_IMX_SI476X=y
-CONFIG_USB=y
-CONFIG_USB_OTG_WHITELIST=y
-CONFIG_USB_OTG_FSM=y
-CONFIG_USB_EHCI_HCD=y
-CONFIG_USB_EHCI_MXC=y
-CONFIG_USB_HCD_TEST_MODE=y
-CONFIG_USB_ACM=m
-CONFIG_USB_STORAGE=y
-CONFIG_USB_CHIPIDEA=y
-CONFIG_USB_CHIPIDEA_UDC=y
-CONFIG_USB_CHIPIDEA_HOST=y
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_OPTION=m
-CONFIG_USB_EHSET_TEST_FIXTURE=y
-CONFIG_NOP_USB_XCEIV=y
-CONFIG_USB_MXS_PHY=y
-CONFIG_USB_GADGET=y
-CONFIG_USB_CONFIGFS=m
-CONFIG_USB_CONFIGFS_SERIAL=y
-CONFIG_USB_CONFIGFS_ACM=y
-CONFIG_USB_CONFIGFS_OBEX=y
-CONFIG_USB_CONFIGFS_NCM=y
-CONFIG_USB_CONFIGFS_ECM=y
-CONFIG_USB_CONFIGFS_ECM_SUBSET=y
-CONFIG_USB_CONFIGFS_RNDIS=y
-CONFIG_USB_CONFIGFS_EEM=y
-CONFIG_USB_CONFIGFS_MASS_STORAGE=y
-CONFIG_USB_CONFIGFS_F_LB_SS=y
-CONFIG_USB_CONFIGFS_F_FS=y
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_G_NCM=m
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_MASS_STORAGE=m
-CONFIG_USB_G_SERIAL=m
-CONFIG_MMC=y
-CONFIG_MMC_UNSAFE_RESUME=y
-CONFIG_MMC_SDHCI=y
-CONFIG_MMC_SDHCI_PLTFM=y
-CONFIG_MMC_SDHCI_ESDHC_IMX=y
-CONFIG_MXC_IPU=y
-CONFIG_MXC_GPU_VIV=y
-CONFIG_MXC_IPU_V3_PRE=y
-CONFIG_MXC_MIPI_CSI2=y
-CONFIG_MXC_SIM=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_ONESHOT=y
-CONFIG_LEDS_TRIGGER_HEARTBEAT=y
-CONFIG_LEDS_TRIGGER_BACKLIGHT=y
-CONFIG_LEDS_TRIGGER_GPIO=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_INTF_DEV_UIE_EMUL=y
-CONFIG_RTC_DRV_DA9063=y
-CONFIG_RTC_DRV_MC13XXX=y
-CONFIG_RTC_DRV_MXC=y
-CONFIG_RTC_DRV_SNVS=y
-CONFIG_DMADEVICES=y
-CONFIG_MXC_PXP_V2=y
-CONFIG_MXC_PXP_V3=y
-CONFIG_IMX_SDMA=y
-CONFIG_MXS_DMA=y
-CONFIG_STAGING=y
-CONFIG_STAGING_MEDIA=y
-# CONFIG_IOMMU_SUPPORT is not set
-CONFIG_IIO=y
-CONFIG_VF610_ADC=y
-CONFIG_AD2802A=y
-CONFIG_PWM=y
-CONFIG_PWM_IMX=y
-CONFIG_EXT2_FS=y
-CONFIG_EXT2_FS_XATTR=y
-CONFIG_EXT2_FS_POSIX_ACL=y
-CONFIG_EXT2_FS_SECURITY=y
-CONFIG_EXT3_FS=y
-CONFIG_EXT3_FS_POSIX_ACL=y
-CONFIG_EXT3_FS_SECURITY=y
-CONFIG_EXT4_FS=y
-CONFIG_EXT4_FS_POSIX_ACL=y
-CONFIG_EXT4_FS_SECURITY=y
-CONFIG_QUOTA=y
-CONFIG_QUOTA_NETLINK_INTERFACE=y
-# CONFIG_PRINT_QUOTA_WARNING is not set
-CONFIG_AUTOFS4_FS=y
-CONFIG_FUSE_FS=y
-CONFIG_ISO9660_FS=m
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-CONFIG_UDF_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=y
-CONFIG_TMPFS=y
-CONFIG_JFFS2_FS=y
-CONFIG_UBIFS_FS=y
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3_ACL=y
-CONFIG_NFS_V4=y
-CONFIG_ROOT_NFS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_ASCII=y
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_UTF8=y
-CONFIG_DEBUG_FS=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_SCHED_DEBUG is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_FTRACE is not set
-CONFIG_CORESIGHT=y
-CONFIG_CORESIGHT_LINK_AND_SINK_TMC=y
-CONFIG_CORESIGHT_SINK_TPIU=y
-CONFIG_CORESIGHT_SINK_ETBV10=y
-CONFIG_CORESIGHT_SOURCE_ETM3X=y
-CONFIG_SECURITYFS=y
-CONFIG_CRYPTO_USER=y
-CONFIG_CRYPTO_TEST=m
-CONFIG_CRYPTO_GCM=y
-CONFIG_CRYPTO_CBC=y
-CONFIG_CRYPTO_CTS=y
-CONFIG_CRYPTO_LRW=y
-CONFIG_CRYPTO_XTS=y
-CONFIG_CRYPTO_MD4=y
-CONFIG_CRYPTO_MD5=y
-CONFIG_CRYPTO_MICHAEL_MIC=y
-CONFIG_CRYPTO_RMD128=y
-CONFIG_CRYPTO_RMD160=y
-CONFIG_CRYPTO_RMD256=y
-CONFIG_CRYPTO_RMD320=y
-CONFIG_CRYPTO_SHA1=y
-CONFIG_CRYPTO_SHA512=y
-CONFIG_CRYPTO_TGR192=y
-CONFIG_CRYPTO_WP512=y
-CONFIG_CRYPTO_BLOWFISH=y
-CONFIG_CRYPTO_CAMELLIA=y
-CONFIG_CRYPTO_DES=y
-CONFIG_CRYPTO_TWOFISH=y
-# CONFIG_CRYPTO_ANSI_CPRNG is not set
-CONFIG_CRYPTO_DEV_FSL_CAAM=y
-CONFIG_CRYPTO_DEV_FSL_CAAM_SM=y
-CONFIG_CRYPTO_DEV_FSL_CAAM_SM_TEST=y
-CONFIG_CRYPTO_DEV_FSL_CAAM_SECVIO=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC_T10DIF=y
-CONFIG_CRC7=m
-CONFIG_LIBCRC32C=m
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
diff --git a/recipes-kernel/linux/linux-ge_3.14.bb b/recipes-kernel/linux/linux-ge_3.14.bb
deleted file mode 100644
index 6ccf0ab..0000000
--- a/recipes-kernel/linux/linux-ge_3.14.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright (C) 2016 Timesys Corporation
-# Copyright (C) 2016 General Electric Company
-# Released under the MIT license (see COPYING.MIT for the terms)
-
-include recipes-kernel/linux/linux-imx.inc
-include recipes-kernel/linux/linux-dtb.inc
-
-DEPENDS += "lzop-native bc-native"
-
-SRCREV = "5668cd93fe86889e121142440b42d4615afae984"
-LOCALVERSION = "-1.1.x-fslc-imx-elo"
-SRC_URI = "git://github.com/Freescale/linux-fslc.git;branch=3.14-1.1.x-imx \
-           file://0001-rtc-rx8010-Add-driver-to-kernel.patch \
-           file://0002-mfd-da9063-Add-support-for-production-silicon-varian.patch \
-           file://0003-mfd-da9063-Upgrade-of-register-definitions-to-suppor.patch \
-           file://0004-rtc-da9063-RTC-driver.patch \
-           file://0005-mfd-da9063-Add-support-for-AD-silicon-variant.patch \
-           file://0006-mfd-da9063-Get-irq-base-dynamically-before-registeri.patch \
-           file://0007-mfd-da9063-Add-support-for-OnKey-driver.patch \
-           file://0008-ahci_imx-Make-receive-DPLL-mode-configurable.patch \
-           file://0009-PCI-imx6-Add-DT-bindings-to-configure-PHY-Tx-driver-.patch \
-           file://0010-ARM-dts-imx-Add-support-for-Advantech-GE-ELO.patch \
-           file://defconfig"
-
-COMPATIBLE_MACHINE = "(imx6q-elo)"
-- 
2.8.1



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [meta-fsl-arm-extra krogoth][PATCH 5/5] u-boot-ge: Remove old u-boot recipe
  2016-08-09 18:00 [meta-fsl-arm-extra krogoth][PATCH 0/5] Rename imx6q-elo board and bump u-boot/kernel version Akshay Bhat
                   ` (3 preceding siblings ...)
  2016-08-09 18:00 ` [meta-fsl-arm-extra krogoth][PATCH 4/5] linux-ge: Remove old kernel recipe Akshay Bhat
@ 2016-08-09 18:00 ` Akshay Bhat
  4 siblings, 0 replies; 6+ messages in thread
From: Akshay Bhat @ 2016-08-09 18:00 UTC (permalink / raw)
  To: meta-freescale

u-boot-ge was used by imx6q-elo board. The imxq-elo board has been
renamed to imx6q-dms-ba16 and now uses u-boot-fslc. Hence remove
old u-boot-ge recipe.

Signed-off-by: Akshay Bhat <akshay.bhat@timesys.com>
---
 ...-arm-imx-Add-support-for-GE-Bx50v3-boards.patch | 1245 --------------------
 ...0002-board-ge-bx50v3-Update-display-setup.patch |  293 -----
 ...dd-support-for-FSL-Community-Yocto-images.patch |  128 --
 ...board-ge-bx50v3-Add-support-for-ELO-board.patch |  222 ----
 ...oard-ge-bx50v3-Fix-bootargs-for-ELO-board.patch |   37 -
 .../0006-mx6q_ba16-Add-1G-DDR-support.patch        |  343 ------
 ...board-ge-bx50v3-Add-correct-SATA-settings.patch |   59 -
 recipes-bsp/u-boot/u-boot-ge_2015.10.bb            |   22 -
 8 files changed, 2349 deletions(-)
 delete mode 100644 recipes-bsp/u-boot/u-boot-ge-2015.10/0001-arm-imx-Add-support-for-GE-Bx50v3-boards.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot-ge-2015.10/0002-board-ge-bx50v3-Update-display-setup.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot-ge-2015.10/0003-ge_bx50v3-Add-support-for-FSL-Community-Yocto-images.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot-ge-2015.10/0004-board-ge-bx50v3-Add-support-for-ELO-board.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot-ge-2015.10/0005-board-ge-bx50v3-Fix-bootargs-for-ELO-board.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot-ge-2015.10/0006-mx6q_ba16-Add-1G-DDR-support.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot-ge-2015.10/0007-board-ge-bx50v3-Add-correct-SATA-settings.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot-ge_2015.10.bb

diff --git a/recipes-bsp/u-boot/u-boot-ge-2015.10/0001-arm-imx-Add-support-for-GE-Bx50v3-boards.patch b/recipes-bsp/u-boot/u-boot-ge-2015.10/0001-arm-imx-Add-support-for-GE-Bx50v3-boards.patch
deleted file mode 100644
index 9696a4a..0000000
--- a/recipes-bsp/u-boot/u-boot-ge-2015.10/0001-arm-imx-Add-support-for-GE-Bx50v3-boards.patch
+++ /dev/null
@@ -1,1245 +0,0 @@
-From b887466cde24f9bedd11af567e9dae02112f55ae Mon Sep 17 00:00:00 2001
-From: Akshay Bhat <akshay.bhat@timesys.com>
-Date: Wed, 9 Dec 2015 17:43:17 -0500
-Subject: [PATCH 1/7] arm: imx: Add support for GE Bx50v3 boards
-
-Add support for GE B450v3, B650v3 and B850v3 boards. The boards
-are based on Advantech BA16 module which has a i.MX6D processor.
-The boards support:
- - FEC Ethernet
- - USB Ports
- - SDHC and MMC boot
- - SPI NOR
- - LVDS and HDMI display
-
-Basic information about the module:
- - Module manufacturer: Advantech
- - CPU: Freescale ARM Cortex-A9 i.MX6D
- - SPECS:
-     Up to 2GB Onboard DDR3 Memory;
-     Up to 16GB Onboard eMMC NAND Flash
-     Supports OpenGL ES 2.0 and OpenVG 1.1
-     HDMI, 24-bit LVDS
-     1x UART, 2x I2C, 8x GPIO,
-     4x Host USB 2.0 port, 1x USB OTG port,
-     1x micro SD (SDHC),1x SDIO, 1x SATA II,
-     1x 10/100/1000 Mbps Ethernet, 1x PCIe X1 Gen2
-
-Signed-off-by: Akshay Bhat <akshay.bhat@timesys.com>
-Series-to: u-boot@lists.denx.de
-Series-cc: justin.waters@timesys.com
-Series-cc: sbabic@denx.de
-Series-cc: van.freenix@gmail.com
-Series-version: 2
-Series-changes: 2
-- Address comments from Peng Fan:
-- Use static for iomux definitions and imx6_rgmii_rework()
-- Use IS_ENABLED instead of ifdef in detect_baseboard()
-- Remove unused BMODE cmd
-- Get rid of CONFIG_SYS_EXTRA_OPTIONS and use Kconfig
-- Get rid of unused CONFIG_SYS_RECOVERY and CONFIG_ENV_IS_IN_MMC
-- Cleanup incorrect comments
-- Move gpio and display setup from board_early_init_f to board_init
-
-Upstream-Status: Submitted [u-boot@lists.denx.de]
----
- arch/arm/cpu/armv7/mx6/Kconfig |  13 +
- board/ge/bx50v3/Kconfig        |  18 ++
- board/ge/bx50v3/MAINTAINERS    |   8 +
- board/ge/bx50v3/Makefile       |   8 +
- board/ge/bx50v3/bx50v3.c       | 533 +++++++++++++++++++++++++++++++++++++++++
- board/ge/bx50v3/bx50v3.cfg     | 151 ++++++++++++
- configs/ge_b450v3_defconfig    |   8 +
- configs/ge_b650v3_defconfig    |   8 +
- configs/ge_b850v3_defconfig    |   8 +
- include/configs/ge_bx50v3.h    | 349 +++++++++++++++++++++++++++
- 10 files changed, 1104 insertions(+)
- create mode 100644 board/ge/bx50v3/Kconfig
- create mode 100644 board/ge/bx50v3/MAINTAINERS
- create mode 100644 board/ge/bx50v3/Makefile
- create mode 100644 board/ge/bx50v3/bx50v3.c
- create mode 100644 board/ge/bx50v3/bx50v3.cfg
- create mode 100644 configs/ge_b450v3_defconfig
- create mode 100644 configs/ge_b650v3_defconfig
- create mode 100644 configs/ge_b850v3_defconfig
- create mode 100644 include/configs/ge_bx50v3.h
-
-diff --git a/arch/arm/cpu/armv7/mx6/Kconfig b/arch/arm/cpu/armv7/mx6/Kconfig
-index 8489182..722e0d0 100644
---- a/arch/arm/cpu/armv7/mx6/Kconfig
-+++ b/arch/arm/cpu/armv7/mx6/Kconfig
-@@ -60,6 +60,18 @@ config TARGET_CM_FX6
- config TARGET_EMBESTMX6BOARDS
- 	bool "embestmx6boards"
- 
-+config TARGET_GE_B450V3
-+	bool "General Electric B450v3"
-+	select MX6Q
-+
-+config TARGET_GE_B650V3
-+	bool "General Electric B650v3"
-+	select MX6Q
-+
-+config TARGET_GE_B850V3
-+	bool "General Electric B850v3"
-+	select MX6Q
-+
- config TARGET_GW_VENTANA
- 	bool "gw_ventana"
- 	select SUPPORT_SPL
-@@ -153,6 +165,7 @@ endchoice
- config SYS_SOC
- 	default "mx6"
- 
-+source "board/ge/bx50v3/Kconfig"
- source "board/aristainetos/Kconfig"
- source "board/bachmann/ot1200/Kconfig"
- source "board/barco/platinum/Kconfig"
-diff --git a/board/ge/bx50v3/Kconfig b/board/ge/bx50v3/Kconfig
-new file mode 100644
-index 0000000..d50dece
---- /dev/null
-+++ b/board/ge/bx50v3/Kconfig
-@@ -0,0 +1,18 @@
-+if TARGET_GE_B450V3 || TARGET_GE_B650V3 || TARGET_GE_B850V3
-+
-+config IMX_CONFIG
-+	default "board/ge/bx50v3/bx50v3.cfg"
-+
-+config SYS_BOARD
-+	default "bx50v3"
-+
-+config SYS_VENDOR
-+	default "ge"
-+
-+config SYS_SOC
-+	default "mx6"
-+
-+config SYS_CONFIG_NAME
-+	default "ge_bx50v3"
-+
-+endif
-diff --git a/board/ge/bx50v3/MAINTAINERS b/board/ge/bx50v3/MAINTAINERS
-new file mode 100644
-index 0000000..8e60791
---- /dev/null
-+++ b/board/ge/bx50v3/MAINTAINERS
-@@ -0,0 +1,8 @@
-+GE_BX50V3 BOARD
-+M:	Martin Donnelly <martin.donnelly@ge.com>
-+S:	Maintained
-+F:	board/ge/bx50v3/
-+F:	include/configs/ge_bx50v3.h
-+F:	configs/ge_b450v3_defconfig
-+F:	configs/ge_b650v3_defconfig
-+F:	configs/ge_b850v3_defconfig
-diff --git a/board/ge/bx50v3/Makefile b/board/ge/bx50v3/Makefile
-new file mode 100644
-index 0000000..bcd149f
---- /dev/null
-+++ b/board/ge/bx50v3/Makefile
-@@ -0,0 +1,8 @@
-+#
-+# Copyright 2015 Timesys Corporation
-+# Copyright 2015 General Electric Company
-+#
-+# SPDX-License-Identifier:	GPL-2.0+
-+#
-+
-+obj-y  := bx50v3.o
-diff --git a/board/ge/bx50v3/bx50v3.c b/board/ge/bx50v3/bx50v3.c
-new file mode 100644
-index 0000000..70c298d
---- /dev/null
-+++ b/board/ge/bx50v3/bx50v3.c
-@@ -0,0 +1,533 @@
-+/*
-+ * Copyright 2015 Timesys Corporation
-+ * Copyright 2015 General Electric Company
-+ * Copyright 2012 Freescale Semiconductor, Inc.
-+ *
-+ * SPDX-License-Identifier:	GPL-2.0+
-+ */
-+
-+#include <asm/arch/clock.h>
-+#include <asm/arch/imx-regs.h>
-+#include <asm/arch/iomux.h>
-+#include <asm/arch/mx6-pins.h>
-+#include <asm/errno.h>
-+#include <asm/gpio.h>
-+#include <asm/imx-common/mxc_i2c.h>
-+#include <asm/imx-common/iomux-v3.h>
-+#include <asm/imx-common/boot_mode.h>
-+#include <asm/imx-common/video.h>
-+#include <mmc.h>
-+#include <fsl_esdhc.h>
-+#include <miiphy.h>
-+#include <netdev.h>
-+#include <asm/arch/mxc_hdmi.h>
-+#include <asm/arch/crm_regs.h>
-+#include <asm/io.h>
-+#include <asm/arch/sys_proto.h>
-+#include <i2c.h>
-+DECLARE_GLOBAL_DATA_PTR;
-+
-+#define UART_PAD_CTRL  (PAD_CTL_PUS_100K_UP |			\
-+	PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm |			\
-+	PAD_CTL_SRE_FAST  | PAD_CTL_HYS)
-+
-+#define USDHC_PAD_CTRL (PAD_CTL_PUS_47K_UP |			\
-+	PAD_CTL_SPEED_LOW | PAD_CTL_DSE_80ohm |			\
-+	PAD_CTL_SRE_FAST  | PAD_CTL_HYS)
-+
-+#define ENET_PAD_CTRL  (PAD_CTL_PUS_100K_UP | PAD_CTL_PUE |	\
-+	PAD_CTL_SPEED_HIGH | PAD_CTL_DSE_48ohm | PAD_CTL_SRE_FAST)
-+
-+#define ENET_CLK_PAD_CTRL (PAD_CTL_SPEED_MED | \
-+	PAD_CTL_DSE_120ohm | PAD_CTL_SRE_FAST)
-+
-+#define ENET_RX_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \
-+	PAD_CTL_SPEED_HIGH   | PAD_CTL_SRE_FAST)
-+
-+#define SPI_PAD_CTRL (PAD_CTL_HYS | PAD_CTL_SPEED_MED | \
-+		      PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST)
-+
-+#define I2C_PAD_CTRL  (PAD_CTL_PUS_100K_UP |			\
-+	PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS |	\
-+	PAD_CTL_ODE | PAD_CTL_SRE_FAST)
-+
-+#define I2C_PAD MUX_PAD_CTRL(I2C_PAD_CTRL)
-+
-+int dram_init(void)
-+{
-+	gd->ram_size = get_ram_size((void *)PHYS_SDRAM, PHYS_SDRAM_SIZE);
-+
-+	return 0;
-+}
-+
-+static iomux_v3_cfg_t const uart3_pads[] = {
-+	MX6_PAD_EIM_D31__UART3_RTS_B | MUX_PAD_CTRL(UART_PAD_CTRL),
-+	MX6_PAD_EIM_D23__UART3_CTS_B | MUX_PAD_CTRL(UART_PAD_CTRL),
-+	MX6_PAD_EIM_D24__UART3_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),
-+	MX6_PAD_EIM_D25__UART3_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),
-+};
-+
-+static iomux_v3_cfg_t const uart4_pads[] = {
-+	MX6_PAD_KEY_COL0__UART4_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),
-+	MX6_PAD_KEY_ROW0__UART4_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),
-+};
-+
-+static iomux_v3_cfg_t const enet_pads[] = {
-+	MX6_PAD_ENET_MDIO__ENET_MDIO | MUX_PAD_CTRL(ENET_PAD_CTRL),
-+	MX6_PAD_ENET_MDC__ENET_MDC   | MUX_PAD_CTRL(ENET_PAD_CTRL),
-+	MX6_PAD_RGMII_TXC__RGMII_TXC | MUX_PAD_CTRL(ENET_PAD_CTRL),
-+	MX6_PAD_RGMII_TD0__RGMII_TD0 | MUX_PAD_CTRL(ENET_PAD_CTRL),
-+	MX6_PAD_RGMII_TD1__RGMII_TD1 | MUX_PAD_CTRL(ENET_PAD_CTRL),
-+	MX6_PAD_RGMII_TD2__RGMII_TD2 | MUX_PAD_CTRL(ENET_PAD_CTRL),
-+	MX6_PAD_RGMII_TD3__RGMII_TD3 | MUX_PAD_CTRL(ENET_PAD_CTRL),
-+	MX6_PAD_RGMII_TX_CTL__RGMII_TX_CTL | MUX_PAD_CTRL(ENET_PAD_CTRL),
-+	MX6_PAD_ENET_REF_CLK__ENET_TX_CLK  | MUX_PAD_CTRL(ENET_CLK_PAD_CTRL),
-+	MX6_PAD_RGMII_RXC__RGMII_RXC | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
-+	MX6_PAD_RGMII_RD0__RGMII_RD0 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
-+	MX6_PAD_RGMII_RD1__RGMII_RD1 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
-+	MX6_PAD_RGMII_RD2__RGMII_RD2 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
-+	MX6_PAD_RGMII_RD3__RGMII_RD3 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
-+	MX6_PAD_RGMII_RX_CTL__RGMII_RX_CTL | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
-+	/* AR8033 PHY Reset */
-+	MX6_PAD_ENET_TX_EN__GPIO1_IO28 | MUX_PAD_CTRL(NO_PAD_CTRL),
-+};
-+
-+static void setup_iomux_enet(void)
-+{
-+	imx_iomux_v3_setup_multiple_pads(enet_pads, ARRAY_SIZE(enet_pads));
-+
-+	/* Reset AR8033 PHY */
-+	gpio_direction_output(IMX_GPIO_NR(1, 28), 0);
-+	udelay(500);
-+	gpio_set_value(IMX_GPIO_NR(1, 28), 1);
-+}
-+
-+static iomux_v3_cfg_t const usdhc2_pads[] = {
-+	MX6_PAD_SD2_CLK__SD2_CLK	| MUX_PAD_CTRL(USDHC_PAD_CTRL),
-+	MX6_PAD_SD2_CMD__SD2_CMD	| MUX_PAD_CTRL(USDHC_PAD_CTRL),
-+	MX6_PAD_SD2_DAT0__SD2_DATA0	| MUX_PAD_CTRL(USDHC_PAD_CTRL),
-+	MX6_PAD_SD2_DAT1__SD2_DATA1	| MUX_PAD_CTRL(USDHC_PAD_CTRL),
-+	MX6_PAD_SD2_DAT2__SD2_DATA2	| MUX_PAD_CTRL(USDHC_PAD_CTRL),
-+	MX6_PAD_SD2_DAT3__SD2_DATA3	| MUX_PAD_CTRL(USDHC_PAD_CTRL),
-+	MX6_PAD_GPIO_4__GPIO1_IO04	| MUX_PAD_CTRL(NO_PAD_CTRL),
-+};
-+
-+static iomux_v3_cfg_t const usdhc3_pads[] = {
-+	MX6_PAD_SD3_CLK__SD3_CLK   | MUX_PAD_CTRL(USDHC_PAD_CTRL),
-+	MX6_PAD_SD3_CMD__SD3_CMD   | MUX_PAD_CTRL(USDHC_PAD_CTRL),
-+	MX6_PAD_SD3_RST__SD3_RESET | MUX_PAD_CTRL(USDHC_PAD_CTRL),
-+	MX6_PAD_SD3_DAT0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
-+	MX6_PAD_SD3_DAT1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
-+	MX6_PAD_SD3_DAT2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
-+	MX6_PAD_SD3_DAT3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
-+	MX6_PAD_SD3_DAT4__SD3_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
-+	MX6_PAD_SD3_DAT5__SD3_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
-+	MX6_PAD_SD3_DAT6__SD3_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
-+	MX6_PAD_SD3_DAT7__SD3_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
-+};
-+
-+static iomux_v3_cfg_t const usdhc4_pads[] = {
-+	MX6_PAD_SD4_CLK__SD4_CLK   | MUX_PAD_CTRL(USDHC_PAD_CTRL),
-+	MX6_PAD_SD4_CMD__SD4_CMD   | MUX_PAD_CTRL(USDHC_PAD_CTRL),
-+	MX6_PAD_SD4_DAT0__SD4_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
-+	MX6_PAD_SD4_DAT1__SD4_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
-+	MX6_PAD_SD4_DAT2__SD4_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
-+	MX6_PAD_SD4_DAT3__SD4_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
-+	MX6_PAD_SD4_DAT4__SD4_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
-+	MX6_PAD_SD4_DAT5__SD4_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
-+	MX6_PAD_SD4_DAT6__SD4_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
-+	MX6_PAD_SD4_DAT7__SD4_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
-+	MX6_PAD_NANDF_CS0__GPIO6_IO11 | MUX_PAD_CTRL(NO_PAD_CTRL),
-+	MX6_PAD_NANDF_CS1__GPIO6_IO14 | MUX_PAD_CTRL(NO_PAD_CTRL),
-+};
-+
-+static iomux_v3_cfg_t const ecspi1_pads[] = {
-+	MX6_PAD_EIM_D16__ECSPI1_SCLK | MUX_PAD_CTRL(SPI_PAD_CTRL),
-+	MX6_PAD_EIM_D17__ECSPI1_MISO | MUX_PAD_CTRL(SPI_PAD_CTRL),
-+	MX6_PAD_EIM_D18__ECSPI1_MOSI | MUX_PAD_CTRL(SPI_PAD_CTRL),
-+	MX6_PAD_EIM_EB2__GPIO2_IO30 | MUX_PAD_CTRL(NO_PAD_CTRL),
-+};
-+
-+static struct i2c_pads_info i2c_pad_info1 = {
-+	.scl = {
-+		.i2c_mode = MX6_PAD_CSI0_DAT9__I2C1_SCL | I2C_PAD,
-+		.gpio_mode = MX6_PAD_CSI0_DAT9__GPIO5_IO27 | I2C_PAD,
-+		.gp = IMX_GPIO_NR(5, 27)
-+	},
-+	.sda = {
-+		.i2c_mode = MX6_PAD_CSI0_DAT8__I2C1_SDA | I2C_PAD,
-+		.gpio_mode = MX6_PAD_CSI0_DAT8__GPIO5_IO26 | I2C_PAD,
-+		.gp = IMX_GPIO_NR(5, 26)
-+	}
-+};
-+
-+static struct i2c_pads_info i2c_pad_info2 = {
-+	.scl = {
-+		.i2c_mode = MX6_PAD_KEY_COL3__I2C2_SCL | I2C_PAD,
-+		.gpio_mode = MX6_PAD_KEY_COL3__GPIO4_IO12 | I2C_PAD,
-+		.gp = IMX_GPIO_NR(4, 12)
-+	},
-+	.sda = {
-+		.i2c_mode = MX6_PAD_KEY_ROW3__I2C2_SDA | I2C_PAD,
-+		.gpio_mode = MX6_PAD_KEY_ROW3__GPIO4_IO13 | I2C_PAD,
-+		.gp = IMX_GPIO_NR(4, 13)
-+	}
-+};
-+
-+static struct i2c_pads_info i2c_pad_info3 = {
-+	.scl = {
-+		.i2c_mode = MX6_PAD_GPIO_3__I2C3_SCL | I2C_PAD,
-+		.gpio_mode = MX6_PAD_GPIO_3__GPIO1_IO03 | I2C_PAD,
-+		.gp = IMX_GPIO_NR(1, 3)
-+	},
-+	.sda = {
-+		.i2c_mode = MX6_PAD_GPIO_6__I2C3_SDA | I2C_PAD,
-+		.gpio_mode = MX6_PAD_GPIO_6__GPIO1_IO06 | I2C_PAD,
-+		.gp = IMX_GPIO_NR(1, 6)
-+	}
-+};
-+
-+#ifdef CONFIG_MXC_SPI
-+int board_spi_cs_gpio(unsigned bus, unsigned cs)
-+{
-+	return (bus == 0 && cs == 0) ? (IMX_GPIO_NR(2, 30)) : -1;
-+}
-+
-+static void setup_spi(void)
-+{
-+	imx_iomux_v3_setup_multiple_pads(ecspi1_pads, ARRAY_SIZE(ecspi1_pads));
-+}
-+#endif
-+
-+static iomux_v3_cfg_t const pcie_pads[] = {
-+	MX6_PAD_GPIO_5__GPIO1_IO05 | MUX_PAD_CTRL(NO_PAD_CTRL),
-+	MX6_PAD_GPIO_17__GPIO7_IO12 | MUX_PAD_CTRL(NO_PAD_CTRL),
-+};
-+
-+static void setup_pcie(void)
-+{
-+	imx_iomux_v3_setup_multiple_pads(pcie_pads, ARRAY_SIZE(pcie_pads));
-+}
-+
-+static void setup_iomux_uart(void)
-+{
-+	imx_iomux_v3_setup_multiple_pads(uart3_pads, ARRAY_SIZE(uart3_pads));
-+	imx_iomux_v3_setup_multiple_pads(uart4_pads, ARRAY_SIZE(uart4_pads));
-+}
-+
-+#ifdef CONFIG_FSL_ESDHC
-+struct fsl_esdhc_cfg usdhc_cfg[3] = {
-+	{USDHC2_BASE_ADDR},
-+	{USDHC3_BASE_ADDR},
-+	{USDHC4_BASE_ADDR},
-+};
-+
-+#define USDHC2_CD_GPIO	IMX_GPIO_NR(1, 4)
-+#define USDHC4_CD_GPIO	IMX_GPIO_NR(6, 11)
-+
-+int board_mmc_getcd(struct mmc *mmc)
-+{
-+	struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
-+	int ret = 0;
-+
-+	switch (cfg->esdhc_base) {
-+	case USDHC2_BASE_ADDR:
-+		ret = !gpio_get_value(USDHC2_CD_GPIO);
-+		break;
-+	case USDHC3_BASE_ADDR:
-+		ret = 1; /* eMMC is always present */
-+		break;
-+	case USDHC4_BASE_ADDR:
-+		ret = !gpio_get_value(USDHC4_CD_GPIO);
-+		break;
-+	}
-+
-+	return ret;
-+}
-+
-+int board_mmc_init(bd_t *bis)
-+{
-+	int ret;
-+	int i;
-+
-+	for (i = 0; i < CONFIG_SYS_FSL_USDHC_NUM; i++) {
-+		switch (i) {
-+		case 0:
-+			imx_iomux_v3_setup_multiple_pads(
-+				usdhc2_pads, ARRAY_SIZE(usdhc2_pads));
-+			gpio_direction_input(USDHC2_CD_GPIO);
-+			usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK);
-+			break;
-+		case 1:
-+			imx_iomux_v3_setup_multiple_pads(
-+				usdhc3_pads, ARRAY_SIZE(usdhc3_pads));
-+			usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
-+			break;
-+		case 2:
-+			imx_iomux_v3_setup_multiple_pads(
-+				usdhc4_pads, ARRAY_SIZE(usdhc4_pads));
-+			gpio_direction_input(USDHC4_CD_GPIO);
-+			usdhc_cfg[2].sdhc_clk = mxc_get_clock(MXC_ESDHC4_CLK);
-+			break;
-+		default:
-+			printf("Warning: you configured more USDHC controllers\n"
-+			       "(%d) then supported by the board (%d)\n",
-+			       i + 1, CONFIG_SYS_FSL_USDHC_NUM);
-+			return -EINVAL;
-+		}
-+
-+		ret = fsl_esdhc_initialize(bis, &usdhc_cfg[i]);
-+		if (ret)
-+			return ret;
-+	}
-+
-+	return 0;
-+}
-+#endif
-+
-+static int mx6_rgmii_rework(struct phy_device *phydev)
-+{
-+	/* Configure AR8033 to ouput a 125MHz clk from CLK_25M */
-+	/* set device address 0x7 */
-+	phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x7);
-+	/* offset 0x8016: CLK_25M Clock Select */
-+	phy_write(phydev, MDIO_DEVAD_NONE, 0xe, 0x8016);
-+	/* enable register write, no post increment, address 0x7 */
-+	phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x4007);
-+	/* set to 125 MHz from local PLL source */
-+	phy_write(phydev, MDIO_DEVAD_NONE, 0xe, 0x18);
-+
-+	/* rgmii tx clock delay enable */
-+	/* set debug port address: SerDes Test and System Mode Control */
-+	phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x05);
-+	/* enable rgmii tx clock delay */
-+	phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x100);
-+
-+	return 0;
-+}
-+
-+int board_phy_config(struct phy_device *phydev)
-+{
-+	mx6_rgmii_rework(phydev);
-+
-+	if (phydev->drv->config)
-+		phydev->drv->config(phydev);
-+
-+	return 0;
-+}
-+
-+#if defined(CONFIG_VIDEO_IPUV3)
-+static iomux_v3_cfg_t const backlight_pads[] = {
-+	/* Power for LVDS Display */
-+	MX6_PAD_EIM_D22__GPIO3_IO22 | MUX_PAD_CTRL(NO_PAD_CTRL),
-+#define LVDS_POWER_GP IMX_GPIO_NR(3, 22)
-+	/* Backlight enable for LVDS display */
-+	MX6_PAD_GPIO_0__GPIO1_IO00 | MUX_PAD_CTRL(NO_PAD_CTRL),
-+#define LVDS_BACKLIGHT_GP IMX_GPIO_NR(1, 0)
-+};
-+
-+static void do_enable_hdmi(struct display_info_t const *dev)
-+{
-+	imx_enable_hdmi_phy();
-+}
-+
-+int board_cfb_skip(void)
-+{
-+	gpio_direction_output(LVDS_POWER_GP, 1);
-+
-+	return 0;
-+}
-+
-+static int detect_baseboard(struct display_info_t const *dev)
-+{
-+	if (IS_ENABLED(CONFIG_TARGET_GE_B450V3) ||
-+	    IS_ENABLED(CONFIG_TARGET_GE_B650V3))
-+		return 1;
-+
-+	return 0;
-+}
-+
-+struct display_info_t const displays[] = {{
-+	.bus	= -1,
-+	.addr	= -1,
-+	.pixfmt	= IPU_PIX_FMT_RGB24,
-+	.detect	= detect_baseboard,
-+	.enable	= NULL,
-+	.mode	= {
-+		.name           = "G121X1-L03",
-+		.refresh        = 60,
-+		.xres           = 1024,
-+		.yres           = 768,
-+		.pixclock       = 15385,
-+		.left_margin    = 20,
-+		.right_margin   = 300,
-+		.upper_margin   = 30,
-+		.lower_margin   = 8,
-+		.hsync_len      = 1,
-+		.vsync_len      = 1,
-+		.sync           = FB_SYNC_EXT,
-+		.vmode          = FB_VMODE_NONINTERLACED
-+} }, {
-+	.bus	= -1,
-+	.addr	= 3,
-+	.pixfmt	= IPU_PIX_FMT_RGB24,
-+	.detect	= detect_hdmi,
-+	.enable	= do_enable_hdmi,
-+	.mode	= {
-+		.name           = "HDMI",
-+		.refresh        = 60,
-+		.xres           = 1024,
-+		.yres           = 768,
-+		.pixclock       = 15385,
-+		.left_margin    = 220,
-+		.right_margin   = 40,
-+		.upper_margin   = 21,
-+		.lower_margin   = 7,
-+		.hsync_len      = 60,
-+		.vsync_len      = 10,
-+		.sync           = FB_SYNC_EXT,
-+		.vmode          = FB_VMODE_NONINTERLACED
-+} } };
-+size_t display_count = ARRAY_SIZE(displays);
-+
-+static void setup_display(void)
-+{
-+	struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
-+	struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR;
-+	int reg;
-+
-+	enable_ipu_clock();
-+	imx_setup_hdmi();
-+
-+	reg = readl(&mxc_ccm->CCGR3);
-+	reg |=  MXC_CCM_CCGR3_LDB_DI0_MASK;
-+	writel(reg, &mxc_ccm->CCGR3);
-+
-+	reg = readl(&mxc_ccm->cs2cdr);
-+	reg &= ~(MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_MASK |
-+		 MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_MASK);
-+	reg |= (3 << MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_OFFSET) |
-+	       (3 << MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_OFFSET);
-+	writel(reg, &mxc_ccm->cs2cdr);
-+
-+	reg = readl(&mxc_ccm->cscmr2);
-+	reg |= (MXC_CCM_CSCMR2_LDB_DI0_IPU_DIV);
-+	writel(reg, &mxc_ccm->cscmr2);
-+
-+	reg = readl(&mxc_ccm->chsccdr);
-+	reg |= (CHSCCDR_CLK_SEL_LDB_DI0
-+		<< MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_OFFSET);
-+	writel(reg, &mxc_ccm->chsccdr);
-+
-+	reg = IOMUXC_GPR2_BGREF_RRMODE_EXTERNAL_RES
-+	     | IOMUXC_GPR2_DI1_VS_POLARITY_ACTIVE_HIGH
-+	     | IOMUXC_GPR2_DI0_VS_POLARITY_ACTIVE_LOW
-+	     | IOMUXC_GPR2_BIT_MAPPING_CH1_SPWG
-+	     | IOMUXC_GPR2_DATA_WIDTH_CH1_24BIT
-+	     | IOMUXC_GPR2_BIT_MAPPING_CH0_SPWG
-+	     | IOMUXC_GPR2_DATA_WIDTH_CH0_24BIT
-+	     | IOMUXC_GPR2_LVDS_CH1_MODE_ENABLED_DI0
-+	     | IOMUXC_GPR2_LVDS_CH0_MODE_ENABLED_DI0;
-+	writel(reg, &iomux->gpr[2]);
-+
-+	reg = readl(&iomux->gpr[3]);
-+	reg = (reg & ~(IOMUXC_GPR3_LVDS0_MUX_CTL_MASK |
-+		       IOMUXC_GPR3_LVDS1_MUX_CTL_MASK |
-+		       IOMUXC_GPR3_HDMI_MUX_CTL_MASK))
-+	    | (IOMUXC_GPR3_MUX_SRC_IPU1_DI0
-+	       << IOMUXC_GPR3_LVDS0_MUX_CTL_OFFSET)
-+	    | (IOMUXC_GPR3_MUX_SRC_IPU1_DI0
-+	       << IOMUXC_GPR3_LVDS1_MUX_CTL_OFFSET);
-+	writel(reg, &iomux->gpr[3]);
-+
-+	/* backlights off until needed */
-+	imx_iomux_v3_setup_multiple_pads(backlight_pads,
-+					 ARRAY_SIZE(backlight_pads));
-+	gpio_direction_input(LVDS_POWER_GP);
-+	gpio_direction_input(LVDS_BACKLIGHT_GP);
-+}
-+#endif /* CONFIG_VIDEO_IPUV3 */
-+
-+/*
-+ * Do not overwrite the console
-+ * Use always serial for U-Boot console
-+ */
-+int overwrite_console(void)
-+{
-+	return 1;
-+}
-+
-+int board_eth_init(bd_t *bis)
-+{
-+	setup_iomux_enet();
-+	setup_pcie();
-+
-+	return cpu_eth_init(bis);
-+}
-+
-+static iomux_v3_cfg_t const misc_pads[] = {
-+	MX6_PAD_KEY_ROW2__GPIO4_IO11	| MUX_PAD_CTRL(NO_PAD_CTRL),
-+};
-+#define SUS_S3_OUT	IMX_GPIO_NR(4, 11)
-+#define WIFI_EN	IMX_GPIO_NR(6, 14)
-+
-+int board_early_init_f(void)
-+{
-+	imx_iomux_v3_setup_multiple_pads(misc_pads,
-+					 ARRAY_SIZE(misc_pads));
-+
-+	setup_iomux_uart();
-+
-+
-+	return 0;
-+}
-+
-+int board_init(void)
-+{
-+	gpio_direction_output(SUS_S3_OUT, 1);
-+	gpio_direction_output(WIFI_EN, 1);
-+#if defined(CONFIG_VIDEO_IPUV3)
-+	setup_display();
-+#endif
-+	/* address of boot parameters */
-+	gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
-+
-+#ifdef CONFIG_MXC_SPI
-+	setup_spi();
-+#endif
-+	setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info1);
-+	setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info2);
-+	setup_i2c(3, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info3);
-+
-+	return 0;
-+}
-+
-+#ifdef CONFIG_CMD_BMODE
-+static const struct boot_mode board_boot_modes[] = {
-+	/* 4 bit bus width */
-+	{"sd2",	 MAKE_CFGVAL(0x40, 0x28, 0x00, 0x00)},
-+	{"sd3",	 MAKE_CFGVAL(0x40, 0x30, 0x00, 0x00)},
-+	{NULL,	 0},
-+};
-+#endif
-+
-+int board_late_init(void)
-+{
-+#ifdef CONFIG_CMD_BMODE
-+	add_board_boot_modes(board_boot_modes);
-+#endif
-+	/* We need at least 200ms between power on and backlight on
-+	 * as per specifications from CHI MEI */
-+	mdelay(250);
-+
-+	/* Backlight Power */
-+	gpio_direction_output(LVDS_BACKLIGHT_GP, 1);
-+
-+	return 0;
-+}
-+
-+int checkboard(void)
-+{
-+	printf("BOARD: %s\n", CONFIG_BOARD_NAME);
-+	return 0;
-+}
-diff --git a/board/ge/bx50v3/bx50v3.cfg b/board/ge/bx50v3/bx50v3.cfg
-new file mode 100644
-index 0000000..de88769
---- /dev/null
-+++ b/board/ge/bx50v3/bx50v3.cfg
-@@ -0,0 +1,151 @@
-+/*
-+ *
-+ * Copyright 2015 Timesys Corporation.
-+ * Copyright 2015 General Electric Company
-+ *
-+ * SPDX-License-Identifier:    GPL-2.0+
-+ *
-+ * Refer doc/README.imximage for more details about how-to configure
-+ * and create imximage boot image
-+ *
-+ * The syntax is taken as close as possible with the kwbimage
-+ */
-+
-+IMAGE_VERSION 2
-+BOOT_FROM sd
-+
-+#define __ASSEMBLY__
-+#include <config.h>
-+#include "asm/arch/mx6-ddr.h"
-+#include "asm/arch/iomux.h"
-+#include "asm/arch/crm_regs.h"
-+
-+/* DDR IO */
-+DATA 4, MX6_IOM_GRP_DDR_TYPE,	0x000c0000
-+DATA 4, MX6_IOM_GRP_DDRPKE,	0x00000000
-+DATA 4, MX6_IOM_DRAM_SDCLK_0,	0x00000030
-+DATA 4, MX6_IOM_DRAM_SDCLK_1,	0x00000030
-+DATA 4, MX6_IOM_DRAM_CAS,	0x00000030
-+DATA 4, MX6_IOM_DRAM_RAS,	0x00000030
-+DATA 4, MX6_IOM_GRP_ADDDS,	0x00000030
-+DATA 4, MX6_IOM_DRAM_RESET,	0x00000030
-+DATA 4, MX6_IOM_DRAM_SDBA2,	0x00000000
-+DATA 4, MX6_IOM_DRAM_SDODT0,	0x00000030
-+DATA 4, MX6_IOM_DRAM_SDODT1,	0x00000030
-+DATA 4, MX6_IOM_GRP_CTLDS,	0x00000030
-+DATA 4, MX6_IOM_DDRMODE_CTL,	0x00020000
-+DATA 4, MX6_IOM_DRAM_SDQS0,	0x00000030
-+DATA 4, MX6_IOM_DRAM_SDQS1,	0x00000030
-+DATA 4, MX6_IOM_DRAM_SDQS2,	0x00000030
-+DATA 4, MX6_IOM_DRAM_SDQS3,	0x00000030
-+DATA 4, MX6_IOM_DRAM_SDQS4,	0x00000030
-+DATA 4, MX6_IOM_DRAM_SDQS5,	0x00000030
-+DATA 4, MX6_IOM_DRAM_SDQS6,	0x00000030
-+DATA 4, MX6_IOM_DRAM_SDQS7,	0x00000030
-+DATA 4, MX6_IOM_GRP_DDRMODE,	0x00020000
-+DATA 4, MX6_IOM_GRP_B0DS,	0x00000030
-+DATA 4, MX6_IOM_GRP_B1DS,	0x00000030
-+DATA 4, MX6_IOM_GRP_B2DS,	0x00000030
-+DATA 4, MX6_IOM_GRP_B3DS,	0x00000030
-+DATA 4, MX6_IOM_GRP_B4DS,	0x00000030
-+DATA 4, MX6_IOM_GRP_B5DS,	0x00000030
-+DATA 4, MX6_IOM_GRP_B6DS,	0x00000030
-+DATA 4, MX6_IOM_GRP_B7DS,	0x00000030
-+DATA 4, MX6_IOM_DRAM_DQM0,	0x00000030
-+DATA 4, MX6_IOM_DRAM_DQM1,	0x00000030
-+DATA 4, MX6_IOM_DRAM_DQM2,	0x00000030
-+DATA 4, MX6_IOM_DRAM_DQM3,	0x00000030
-+DATA 4, MX6_IOM_DRAM_DQM4,	0x00000030
-+DATA 4, MX6_IOM_DRAM_DQM5,	0x00000030
-+DATA 4, MX6_IOM_DRAM_DQM6,	0x00000030
-+DATA 4, MX6_IOM_DRAM_DQM7,	0x00000030
-+
-+/* Calibrations */
-+/* ZQ */
-+DATA 4, MX6_MMDC_P0_MPZQHWCTRL,  0xa1390003
-+/* write leveling */
-+DATA 4, MX6_MMDC_P0_MPWLDECTRL0, 0x001F001F
-+DATA 4, MX6_MMDC_P0_MPWLDECTRL1, 0x001F001F
-+DATA 4, MX6_MMDC_P1_MPWLDECTRL0, 0x001F001F
-+DATA 4, MX6_MMDC_P1_MPWLDECTRL1, 0x001F001F
-+/* Read DQS Gating calibration */
-+DATA 4, MX6_MMDC_P0_MPDGCTRL0,	0x45380544
-+DATA 4, MX6_MMDC_P0_MPDGCTRL1,	0x05280530
-+DATA 4, MX6_MMDC_P1_MPDGCTRL0,	0x4530053C
-+DATA 4, MX6_MMDC_P1_MPDGCTRL1,	0x0530050C
-+/* Read calibration */
-+DATA 4, MX6_MMDC_P0_MPRDDLCTL,	0x36303032
-+DATA 4, MX6_MMDC_P1_MPRDDLCTL,	0x38363042
-+/* Write calibration */
-+DATA 4, MX6_MMDC_P0_MPWRDLCTL,	0x3A3A423E
-+DATA 4, MX6_MMDC_P1_MPWRDLCTL,	0x4A38483E
-+/* read data bit delay */
-+DATA 4, MX6_MMDC_P0_MPRDDQBY0DL, 0x33333333
-+DATA 4, MX6_MMDC_P0_MPRDDQBY1DL, 0x33333333
-+DATA 4, MX6_MMDC_P0_MPRDDQBY2DL, 0x33333333
-+DATA 4, MX6_MMDC_P0_MPRDDQBY3DL, 0x33333333
-+DATA 4, MX6_MMDC_P1_MPRDDQBY0DL, 0x33333333
-+DATA 4, MX6_MMDC_P1_MPRDDQBY1DL, 0x33333333
-+DATA 4, MX6_MMDC_P1_MPRDDQBY2DL, 0x33333333
-+DATA 4, MX6_MMDC_P1_MPRDDQBY3DL, 0x33333333
-+
-+/* Complete calibration by forced measurment */
-+DATA 4, MX6_MMDC_P0_MPMUR0,	0x00000800
-+DATA 4, MX6_MMDC_P1_MPMUR0,	0x00000800
-+
-+/* MMDC init */
-+DATA 4, MX6_MMDC_P0_MDPDC,	0x00020036
-+DATA 4, MX6_MMDC_P0_MDOTC,	0x09444040
-+DATA 4, MX6_MMDC_P0_MDCFG0,	0x8A8F79A4
-+DATA 4, MX6_MMDC_P0_MDCFG1,	0xDB538E64
-+DATA 4, MX6_MMDC_P0_MDCFG2,	0x01ff00db
-+DATA 4, MX6_MMDC_P0_MDMISC,	0x00001740
-+DATA 4, MX6_MMDC_P0_MDSCR,	0x00008000
-+DATA 4, MX6_MMDC_P0_MDRWD,	0x000026d2
-+DATA 4, MX6_MMDC_P0_MDOR,	0x008F1023
-+DATA 4, MX6_MMDC_P0_MDASP,	0x00000047
-+DATA 4, MX6_MMDC_P0_MDCTL,	0x841a0000
-+
-+/* Initialize Micron MT41J128M */
-+DATA 4, MX6_MMDC_P0_MDSCR,	0x04088032
-+DATA 4, MX6_MMDC_P0_MDSCR,	0x0408803a
-+DATA 4, MX6_MMDC_P0_MDSCR,	0x00008033
-+DATA 4, MX6_MMDC_P0_MDSCR,	0x0000803b
-+DATA 4, MX6_MMDC_P0_MDSCR,	0x00408031
-+DATA 4, MX6_MMDC_P0_MDSCR,	0x00408039
-+DATA 4, MX6_MMDC_P0_MDSCR,	0x09408030
-+DATA 4, MX6_MMDC_P0_MDSCR,	0x09408038
-+DATA 4, MX6_MMDC_P0_MDSCR,	0x04008040
-+DATA 4, MX6_MMDC_P0_MDSCR,	0x04008048
-+DATA 4, MX6_MMDC_P0_MDREF,	0x00005800
-+DATA 4, MX6_MMDC_P0_MPODTCTRL,	0x00011117
-+DATA 4, MX6_MMDC_P1_MPODTCTRL,	0x00011117
-+DATA 4, MX6_MMDC_P0_MDPDC,	0x00025576
-+DATA 4, MX6_MMDC_P0_MAPSR,	0x00011006
-+DATA 4, MX6_MMDC_P0_MDSCR,	0x00000000
-+
-+/* set the default clock gate to save power */
-+DATA 4, CCM_CCGR0, 0x00C03F3F
-+DATA 4, CCM_CCGR1, 0x0030FC03
-+DATA 4, CCM_CCGR2, 0x0FFFC000
-+DATA 4, CCM_CCGR3, 0x3FF00000
-+DATA 4, CCM_CCGR4, 0x00FFF300
-+DATA 4, CCM_CCGR5, 0x0F0000C3
-+DATA 4, CCM_CCGR6, 0x000003FF
-+
-+/* enable AXI cache for VDOA/VPU/IPU */
-+DATA 4, MX6_IOMUXC_GPR4, 0xF00000CF
-+/* set IPU AXI-id0 Qos=0xf(bypass) AXI-id1 Qos=0x7 */
-+DATA 4, MX6_IOMUXC_GPR6, 0x007F007F
-+DATA 4, MX6_IOMUXC_GPR7, 0x007F007F
-+
-+/*
-+ * Setup CCM_CCOSR register as follows:
-+ *
-+ * cko1_en  1	   --> CKO1 enabled
-+ * cko1_div 111  --> divide by 8
-+ * cko1_sel 1011 --> ahb_clk_root
-+ *
-+ * This sets CKO1 at ahb_clk_root/8 132/8 16.5 MHz
-+ */
-+DATA 4, CCM_CCOSR, 0x000000fb
-diff --git a/configs/ge_b450v3_defconfig b/configs/ge_b450v3_defconfig
-new file mode 100644
-index 0000000..02873ce
---- /dev/null
-+++ b/configs/ge_b450v3_defconfig
-@@ -0,0 +1,8 @@
-+CONFIG_ARM=y
-+CONFIG_ARCH_MX6=y
-+CONFIG_TARGET_GE_B450V3=y
-+# CONFIG_CMD_IMLS is not set
-+# CONFIG_CMD_FLASH is not set
-+CONFIG_CMD_GPIO=y
-+CONFIG_SPI_FLASH=y
-+CONFIG_SPI_FLASH_STMICRO=y
-diff --git a/configs/ge_b650v3_defconfig b/configs/ge_b650v3_defconfig
-new file mode 100644
-index 0000000..3d10b35
---- /dev/null
-+++ b/configs/ge_b650v3_defconfig
-@@ -0,0 +1,8 @@
-+CONFIG_ARM=y
-+CONFIG_ARCH_MX6=y
-+CONFIG_TARGET_GE_B650V3=y
-+# CONFIG_CMD_IMLS is not set
-+# CONFIG_CMD_FLASH is not set
-+CONFIG_CMD_GPIO=y
-+CONFIG_SPI_FLASH=y
-+CONFIG_SPI_FLASH_STMICRO=y
-diff --git a/configs/ge_b850v3_defconfig b/configs/ge_b850v3_defconfig
-new file mode 100644
-index 0000000..e3f4a0a
---- /dev/null
-+++ b/configs/ge_b850v3_defconfig
-@@ -0,0 +1,8 @@
-+CONFIG_ARM=y
-+CONFIG_ARCH_MX6=y
-+CONFIG_TARGET_GE_B850V3=y
-+# CONFIG_CMD_IMLS is not set
-+# CONFIG_CMD_FLASH is not set
-+CONFIG_CMD_GPIO=y
-+CONFIG_SPI_FLASH=y
-+CONFIG_SPI_FLASH_STMICRO=y
-diff --git a/include/configs/ge_bx50v3.h b/include/configs/ge_bx50v3.h
-new file mode 100644
-index 0000000..6fa4a9a
---- /dev/null
-+++ b/include/configs/ge_bx50v3.h
-@@ -0,0 +1,349 @@
-+/*
-+ * Copyright (C) 2015 Timesys Corporation
-+ * Copyright (C) 2015 General Electric Company
-+ * Copyright (C) 2014 Advantech
-+ * Copyright (C) 2012 Freescale Semiconductor, Inc.
-+ *
-+ * Configuration settings for the GE MX6Q Bx50v3 boards.
-+ *
-+ * SPDX-License-Identifier:	GPL-2.0+
-+ */
-+
-+#ifndef __GE_BX50V3_CONFIG_H
-+#define __GE_BX50V3_CONFIG_H
-+
-+#include <asm/arch/imx-regs.h>
-+#include <asm/imx-common/gpio.h>
-+
-+#if defined(CONFIG_TARGET_GE_B450V3)
-+#define CONFIG_BOARD_NAME	"General Electric B450v3"
-+#define CONFIG_DEFAULT_FDT_FILE	"/boot/imx6q-b450v3.dtb"
-+#elif defined(CONFIG_TARGET_GE_B650V3)
-+#define CONFIG_BOARD_NAME	"General Electric B650v3"
-+#define CONFIG_DEFAULT_FDT_FILE	"/boot/imx6q-b650v3.dtb"
-+#elif defined(CONFIG_TARGET_GE_B850V3)
-+#define CONFIG_BOARD_NAME	"General Electric B850v3"
-+#define CONFIG_DEFAULT_FDT_FILE	"/boot/imx6q-b850v3.dtb"
-+#else
-+#define CONFIG_BOARD_NAME	"General Electric BA16 Generic"
-+#define CONFIG_DEFAULT_FDT_FILE	"/boot/imx6q-ba16.dtb"
-+#endif
-+
-+#define CONFIG_MXC_UART_BASE	UART3_BASE
-+#define CONFIG_CONSOLE_DEV	"ttymxc2"
-+
-+#define PHYS_SDRAM_SIZE		(2u * 1024 * 1024 * 1024)
-+
-+#define CONFIG_SUPPORT_EMMC_BOOT
-+
-+#define CONFIG_BOOTDELAY               1
-+
-+#include "mx6_common.h"
-+#include <linux/sizes.h>
-+
-+#define CONFIG_DISPLAY_CPUINFO
-+#define CONFIG_DISPLAY_BOARDINFO
-+
-+#define CONFIG_CMDLINE_TAG
-+#define CONFIG_SETUP_MEMORY_TAGS
-+#define CONFIG_INITRD_TAG
-+#define CONFIG_REVISION_TAG
-+#define CONFIG_SYS_MALLOC_LEN		(10 * SZ_1M)
-+
-+#define CONFIG_BOARD_EARLY_INIT_F
-+#define CONFIG_BOARD_LATE_INIT
-+
-+#define CONFIG_MXC_GPIO
-+#define CONFIG_MXC_UART
-+
-+#define CONFIG_CMD_FUSE
-+#define CONFIG_MXC_OCOTP
-+
-+/* SATA Configs */
-+#define CONFIG_CMD_SATA
-+#define CONFIG_DWC_AHSATA
-+#define CONFIG_SYS_SATA_MAX_DEVICE	1
-+#define CONFIG_DWC_AHSATA_PORT_ID	0
-+#define CONFIG_DWC_AHSATA_BASE_ADDR	SATA_ARB_BASE_ADDR
-+#define CONFIG_LBA48
-+#define CONFIG_LIBATA
-+
-+/* MMC Configs */
-+#define CONFIG_FSL_ESDHC
-+#define CONFIG_FSL_USDHC
-+#define CONFIG_SYS_FSL_ESDHC_ADDR      0
-+#define CONFIG_MMC
-+#define CONFIG_CMD_MMC
-+#define CONFIG_GENERIC_MMC
-+#define CONFIG_BOUNCE_BUFFER
-+#define CONFIG_CMD_EXT2
-+#define CONFIG_CMD_FAT
-+#define CONFIG_DOS_PARTITION
-+
-+/* USB Configs */
-+#define CONFIG_CMD_USB
-+#define CONFIG_CMD_FAT
-+#define CONFIG_USB_EHCI
-+#define CONFIG_USB_EHCI_MX6
-+#define CONFIG_USB_STORAGE
-+#define CONFIG_USB_MAX_CONTROLLER_COUNT 2
-+#define CONFIG_EHCI_HCD_INIT_AFTER_RESET
-+#define CONFIG_MXC_USB_PORTSC	(PORT_PTS_UTMI | PORT_PTS_PTW)
-+#define CONFIG_MXC_USB_FLAGS	0
-+#define CONFIG_USB_KEYBOARD
-+#define CONFIG_SYS_USB_EVENT_POLL_VIA_CONTROL_EP
-+
-+#define CONFIG_CI_UDC
-+#define CONFIG_USBD_HS
-+#define CONFIG_USB_GADGET_DUALSPEED
-+#define CONFIG_USB_GADGET
-+#define CONFIG_USB_GADGET_DOWNLOAD
-+#define CONFIG_CMD_USB_MASS_STORAGE
-+#define CONFIG_USB_GADGET_MASS_STORAGE
-+#define CONFIG_USB_FUNCTION_MASS_STORAGE
-+#define CONFIG_USB_GADGET_VBUS_DRAW 2
-+#define CONFIG_G_DNL_VENDOR_NUM   0x0525
-+#define CONFIG_G_DNL_PRODUCT_NUM  0xa4a5
-+#define CONFIG_G_DNL_MANUFACTURER "Advantech"
-+
-+/* Networking Configs */
-+#define CONFIG_CMD_PING
-+#define CONFIG_CMD_DHCP
-+#define CONFIG_CMD_MII
-+#define CONFIG_FEC_MXC
-+#define CONFIG_MII
-+#define IMX_FEC_BASE			ENET_BASE_ADDR
-+#define CONFIG_FEC_XCV_TYPE		RGMII
-+#define CONFIG_ETHPRIME		"FEC"
-+#define CONFIG_FEC_MXC_PHYADDR		4
-+#define CONFIG_PHYLIB
-+#define CONFIG_PHY_ATHEROS
-+
-+/* Serial Flash */
-+#define CONFIG_CMD_SF
-+#ifdef CONFIG_CMD_SF
-+#define CONFIG_MXC_SPI
-+#define CONFIG_SF_DEFAULT_BUS		0
-+#define CONFIG_SF_DEFAULT_CS		0
-+#define CONFIG_SF_DEFAULT_SPEED	20000000
-+#define CONFIG_SF_DEFAULT_MODE		SPI_MODE_0
-+#endif
-+
-+/* allow to overwrite serial and ethaddr */
-+#define CONFIG_ENV_OVERWRITE
-+#define CONFIG_CONS_INDEX	1
-+#define CONFIG_BAUDRATE	115200
-+
-+/* Command definition */
-+#define CONFIG_CMD_BMODE
-+#define CONFIG_CMD_BOOTZ
-+#undef CONFIG_CMD_IMLS
-+
-+#define CONFIG_LOADADDR	0x12000000
-+#define CONFIG_SYS_TEXT_BASE	0x17800000
-+
-+#define CONFIG_EXTRA_ENV_SETTINGS \
-+	"script=boot.scr\0" \
-+	"image=/boot/uImage\0" \
-+	"uboot=u-boot.imx\0" \
-+	"fdt_file=" CONFIG_DEFAULT_FDT_FILE "\0" \
-+	"fdt_addr=0x18000000\0" \
-+	"boot_fdt=yes\0" \
-+	"ip_dyn=yes\0" \
-+	"console=" CONFIG_CONSOLE_DEV "\0" \
-+	"fdt_high=0xffffffff\0"	  \
-+	"initrd_high=0xffffffff\0" \
-+	"sddev=0\0" \
-+	"emmcdev=1\0" \
-+	"partnum=1\0" \
-+	"update_sd_firmware=" \
-+		"if test ${ip_dyn} = yes; then " \
-+			"setenv get_cmd dhcp; " \
-+		"else " \
-+			"setenv get_cmd tftp; " \
-+		"fi; " \
-+		"if mmc dev ${mmcdev}; then "	\
-+			"if ${get_cmd} ${update_sd_firmware_filename}; then " \
-+				"setexpr fw_sz ${filesize} / 0x200; " \
-+				"setexpr fw_sz ${fw_sz} + 1; "	\
-+				"mmc write ${loadaddr} 0x2 ${fw_sz}; " \
-+			"fi; "	\
-+		"fi\0" \
-+	"update_sf_uboot=" \
-+		"if tftp $loadaddr $uboot; then " \
-+			"sf probe; " \
-+			"sf erase 0 0xC0000; " \
-+			"sf write $loadaddr 0x400 $filesize; " \
-+			"echo 'U-Boot upgraded. Please reset'; " \
-+		"fi\0" \
-+	"setargs=setenv bootargs console=${console},${baudrate} " \
-+		"root=/dev/${rootdev} rw rootwait cma=128M\0" \
-+	"loadbootscript=" \
-+		"ext2load ${dev} ${devnum}:${partnum} ${loadaddr} ${script};\0" \
-+	"bootscript=echo Running bootscript from ${dev}:${devnum}:${partnum};" \
-+		" source\0" \
-+	"loadimage=" \
-+		"ext2load ${dev} ${devnum}:${partnum} ${loadaddr} ${image}\0" \
-+	"loadfdt=ext2load ${dev} ${devnum}:${partnum} ${fdt_addr} ${fdt_file}\0" \
-+	"tryboot=" \
-+		"if run loadbootscript; then " \
-+			"run bootscript; " \
-+		"else " \
-+			"if run loadimage; then " \
-+				"run doboot; " \
-+			"fi; " \
-+		"fi;\0" \
-+	"doboot=echo Booting from ${dev}:${devnum}:${partnum} ...; " \
-+		"run setargs; " \
-+		"if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
-+			"if run loadfdt; then " \
-+				"bootm ${loadaddr} - ${fdt_addr}; " \
-+			"else " \
-+				"if test ${boot_fdt} = try; then " \
-+					"bootm; " \
-+				"else " \
-+					"echo WARN: Cannot load the DT; " \
-+				"fi; " \
-+			"fi; " \
-+		"else " \
-+			"bootm; " \
-+		"fi;\0" \
-+	"netargs=setenv bootargs console=${console},${baudrate} " \
-+		"root=/dev/nfs " \
-+		"ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp\0" \
-+	"netboot=echo Booting from net ...; " \
-+		"run netargs; " \
-+		"if test ${ip_dyn} = yes; then " \
-+			"setenv get_cmd dhcp; " \
-+		"else " \
-+			"setenv get_cmd tftp; " \
-+		"fi; " \
-+		"${get_cmd} ${image}; " \
-+		"if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
-+			"if ${get_cmd} ${fdt_addr} ${fdt_file}; then " \
-+				"bootm ${loadaddr} - ${fdt_addr}; " \
-+			"else " \
-+				"if test ${boot_fdt} = try; then " \
-+					"bootm; " \
-+				"else " \
-+					"echo WARN: Cannot load the DT; " \
-+				"fi; " \
-+			"fi; " \
-+		"else " \
-+			"bootm; " \
-+		"fi;\0" \
-+
-+#define CONFIG_BOOTCOMMAND \
-+	"usb start; " \
-+	"setenv dev usb; " \
-+	"setenv devnum 0; " \
-+	"setenv rootdev sda1; " \
-+	"run tryboot; " \
-+	\
-+	"setenv dev mmc; " \
-+	"setenv rootdev mmcblk0p1; " \
-+	\
-+	"setenv devnum ${sddev}; " \
-+	"if mmc dev ${devnum}; then " \
-+		"run tryboot; " \
-+		"setenv rootdev mmcblk1p1; " \
-+	"fi; " \
-+	\
-+	"setenv devnum ${emmcdev}; " \
-+	"if mmc dev ${devnum}; then " \
-+		"run tryboot; " \
-+	"fi; " \
-+	\
-+	"bmode usb; " \
-+
-+#define CONFIG_ARP_TIMEOUT     200UL
-+
-+/* Miscellaneous configurable options */
-+#define CONFIG_SYS_LONGHELP
-+#define CONFIG_SYS_HUSH_PARSER
-+#define CONFIG_SYS_PROMPT_HUSH_PS2     "> "
-+#define CONFIG_AUTO_COMPLETE
-+
-+/* Print Buffer Size */
-+#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
-+#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE
-+
-+#define CONFIG_SYS_MEMTEST_START       0x10000000
-+#define CONFIG_SYS_MEMTEST_END         0x10010000
-+#define CONFIG_SYS_MEMTEST_SCRATCH     0x10800000
-+
-+#define CONFIG_SYS_LOAD_ADDR           CONFIG_LOADADDR
-+
-+#define CONFIG_CMDLINE_EDITING
-+#define CONFIG_STACKSIZE               (128 * 1024)
-+
-+/* Physical Memory Map */
-+#define CONFIG_NR_DRAM_BANKS           1
-+#define PHYS_SDRAM                     MMDC0_ARB_BASE_ADDR
-+
-+#define CONFIG_SYS_SDRAM_BASE          PHYS_SDRAM
-+#define CONFIG_SYS_INIT_RAM_ADDR       IRAM_BASE_ADDR
-+#define CONFIG_SYS_INIT_RAM_SIZE       IRAM_SIZE
-+
-+#define CONFIG_SYS_INIT_SP_OFFSET \
-+	(CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE)
-+#define CONFIG_SYS_INIT_SP_ADDR \
-+	(CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET)
-+
-+/* FLASH and environment organization */
-+#define CONFIG_SYS_NO_FLASH
-+
-+#define CONFIG_ENV_IS_IN_SPI_FLASH
-+#define CONFIG_ENV_SIZE		(8 * 1024)
-+#define CONFIG_ENV_OFFSET		(768 * 1024)
-+#define CONFIG_ENV_SECT_SIZE		(64 * 1024)
-+#define CONFIG_ENV_SPI_BUS		CONFIG_SF_DEFAULT_BUS
-+#define CONFIG_ENV_SPI_CS		CONFIG_SF_DEFAULT_CS
-+#define CONFIG_ENV_SPI_MODE		CONFIG_SF_DEFAULT_MODE
-+#define CONFIG_ENV_SPI_MAX_HZ		CONFIG_SF_DEFAULT_SPEED
-+
-+#define CONFIG_OF_LIBFDT
-+
-+#ifndef CONFIG_SYS_DCACHE_OFF
-+#define CONFIG_CMD_CACHE
-+#endif
-+
-+#define CONFIG_SYS_FSL_USDHC_NUM	3
-+
-+/* Framebuffer */
-+#define CONFIG_VIDEO
-+#define CONFIG_VIDEO_IPUV3
-+#define CONFIG_CFB_CONSOLE
-+#define CONFIG_VGA_AS_SINGLE_DEVICE
-+#define CONFIG_SYS_CONSOLE_IS_IN_ENV
-+#define CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE
-+#define CONFIG_VIDEO_BMP_RLE8
-+#define CONFIG_SPLASH_SCREEN
-+#define CONFIG_SPLASH_SCREEN_ALIGN
-+#define CONFIG_BMP_16BPP
-+#define CONFIG_VIDEO_LOGO
-+#define CONFIG_VIDEO_BMP_LOGO
-+#define CONFIG_IPUV3_CLK 260000000
-+#define CONFIG_IMX_HDMI
-+#define CONFIG_IMX_VIDEO_SKIP
-+
-+#undef CONFIG_CMD_PCI
-+#ifdef CONFIG_CMD_PCI
-+#define CONFIG_PCI
-+#define CONFIG_PCI_PNP
-+#define CONFIG_PCI_SCAN_SHOW
-+#define CONFIG_PCIE_IMX
-+#define CONFIG_PCIE_IMX_PERST_GPIO	IMX_GPIO_NR(7, 12)
-+#define CONFIG_PCIE_IMX_POWER_GPIO	IMX_GPIO_NR(1, 5)
-+#endif
-+
-+/* I2C Configs */
-+#define CONFIG_CMD_I2C
-+#define CONFIG_SYS_I2C
-+#define CONFIG_SYS_I2C_MXC
-+#define CONFIG_SYS_I2C_SPEED		  100000
-+#define CONFIG_SYS_I2C_MXC_I2C1
-+#define CONFIG_SYS_I2C_MXC_I2C2
-+#define CONFIG_SYS_I2C_MXC_I2C3
-+
-+#endif	/* __GE_BX50V3_CONFIG_H */
--- 
-2.5.0
-
diff --git a/recipes-bsp/u-boot/u-boot-ge-2015.10/0002-board-ge-bx50v3-Update-display-setup.patch b/recipes-bsp/u-boot/u-boot-ge-2015.10/0002-board-ge-bx50v3-Update-display-setup.patch
deleted file mode 100644
index 2ee2b31..0000000
--- a/recipes-bsp/u-boot/u-boot-ge-2015.10/0002-board-ge-bx50v3-Update-display-setup.patch
+++ /dev/null
@@ -1,293 +0,0 @@
-From 047844511f92e9e9ea089f019318280cb4c3a75a Mon Sep 17 00:00:00 2001
-From: Akshay Bhat <akshay.bhat@timesys.com>
-Date: Thu, 4 Feb 2016 12:22:52 -0500
-Subject: [PATCH 2/7] board: ge: bx50v3: Update display setup
-
-- Disable LVDS1 on B450v3/B650v3 boards since they no longer have
-connectors for it.
-- Implement imx6 MLK-10782-3 or ERR009219 errata for LVDS clock switch.
-This patch was ported from Freescale 3.10.17_1.0.0_ga kernel to u-boot.
-- Split the display setup into 2 different functions. One for B850v3 that
-does a setup of LVDS and HDMI with clock source for LVDS/IPU_DI set to
-video PLL. The other for B450v3/B650v3 that does a setup of LVDS only with
-clock source for LVDS/IPU_DI set to USB PLL.
-
-Upstream-Status: Pending
-
-Waiting on v2 patch to get accepted.
-http://lists.denx.de/pipermail/u-boot/2016-January/243985.html
-
-Signed-off-by: Akshay Bhat <akshay.bhat@timesys.com>
----
- board/ge/bx50v3/bx50v3.c | 240 ++++++++++++++++++++++++++++++++++++++---------
- 1 file changed, 198 insertions(+), 42 deletions(-)
-
-diff --git a/board/ge/bx50v3/bx50v3.c b/board/ge/bx50v3/bx50v3.c
-index 70c298d..cf2cd1a 100644
---- a/board/ge/bx50v3/bx50v3.c
-+++ b/board/ge/bx50v3/bx50v3.c
-@@ -390,55 +390,208 @@ struct display_info_t const displays[] = {{
- } } };
- size_t display_count = ARRAY_SIZE(displays);
- 
--static void setup_display(void)
-+static void enable_videopll(void)
-+{
-+	struct mxc_ccm_reg *ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
-+	s32 timeout = 100000;
-+
-+	setbits_le32(&ccm->analog_pll_video, BM_ANADIG_PLL_VIDEO_POWERDOWN);
-+
-+	/* set video pll to 910MHz (24MHz * (37+11/12))
-+	 * video pll post div to 910/4 = 227.5MHz
-+	 */
-+	clrsetbits_le32(&ccm->analog_pll_video,
-+			BM_ANADIG_PLL_VIDEO_DIV_SELECT |
-+			BM_ANADIG_PLL_VIDEO_POST_DIV_SELECT,
-+			BF_ANADIG_PLL_VIDEO_DIV_SELECT(37) |
-+			BF_ANADIG_PLL_VIDEO_POST_DIV_SELECT(0));
-+
-+	writel(BF_ANADIG_PLL_VIDEO_NUM_A(11), &ccm->analog_pll_video_num);
-+	writel(BF_ANADIG_PLL_VIDEO_DENOM_B(12), &ccm->analog_pll_video_denom);
-+
-+	clrbits_le32(&ccm->analog_pll_video, BM_ANADIG_PLL_VIDEO_POWERDOWN);
-+
-+	while (timeout--)
-+		if (readl(&ccm->analog_pll_video) & BM_ANADIG_PLL_VIDEO_LOCK)
-+			break;
-+	if (timeout < 0)
-+		printf("Warning: video pll lock timeout!\n");
-+
-+	clrsetbits_le32(&ccm->analog_pll_video,
-+			BM_ANADIG_PLL_VIDEO_BYPASS,
-+			BM_ANADIG_PLL_VIDEO_ENABLE);
-+}
-+
-+static void set_ldb_clock_source(u8 source)
- {
- 	struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
--	struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR;
- 	int reg;
-+	/*
-+	 * Need to follow a strict procedure when changing the LDB
-+	 * clock, else we can introduce a glitch. Things to keep in
-+	 * mind:
-+	 * 1. The current and new parent clocks must be disabled.
-+	 * 2. The default clock for ldb_dio_clk is mmdc_ch1 which has
-+	 * no CG bit.
-+	 * 3. In the RTL implementation of the LDB_DI_CLK_SEL mux
-+	 * the top four options are in one mux and the PLL3 option along
-+	 * with another option is in the second mux. There is third mux
-+	 * used to decide between the first and second mux.
-+	 * The code below switches the parent to the bottom mux first
-+	 * and then manipulates the top mux. This ensures that no glitch
-+	 * will enter the divider.
-+	 *
-+	 * Need to disable MMDC_CH1 clock manually as there is no CG bit
-+	 * for this clock. The only way to disable this clock is to move
-+	 * it to pll3_sw_clk and then to disable pll3_sw_clk
-+	 * Make sure periph2_clk2_sel is set to pll3_sw_clk
-+	 */
-+	/* Set MMDC_CH1 mask bit */
-+	reg = readl(&mxc_ccm->ccdr);
-+	reg |= MXC_CCM_CCDR_MMDC_CH1_HS_MASK;
-+	writel(reg, &mxc_ccm->ccdr);
-+
-+	/* Set periph2_clk2_sel to be sourced from PLL3_sw_clk */
-+	reg = readl(&mxc_ccm->cbcmr);
-+	reg &= ~MXC_CCM_CBCMR_PERIPH2_CLK2_SEL;
-+	writel(reg, &mxc_ccm->cbcmr);
-+
-+	/*
-+	 * Set the periph2_clk_sel to the top mux so that
-+	 * mmdc_ch1 is from pll3_sw_clk.
-+	 */
-+	reg = readl(&mxc_ccm->cbcdr);
-+	reg |= MXC_CCM_CBCDR_PERIPH2_CLK_SEL;
-+	writel(reg, &mxc_ccm->cbcdr);
-+
-+	/* Wait for the clock switch */
-+	while (readl(&mxc_ccm->cdhipr))
-+		;
-+	/* Disable pll3_sw_clk by selecting bypass clock source */
-+	reg = readl(&mxc_ccm->ccsr);
-+	reg |= MXC_CCM_CCSR_PLL3_SW_CLK_SEL;
-+	writel(reg, &mxc_ccm->ccsr);
-+
-+	/* Set the ldb_di0_clk and ldb_di1_clk to 111b */
-+	reg = readl(&mxc_ccm->cs2cdr);
-+	reg |= ((7 << MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_OFFSET)
-+	      | (7 << MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_OFFSET));
-+	writel(reg, &mxc_ccm->cs2cdr);
- 
--	enable_ipu_clock();
--	imx_setup_hdmi();
--
--	reg = readl(&mxc_ccm->CCGR3);
--	reg |=  MXC_CCM_CCGR3_LDB_DI0_MASK;
--	writel(reg, &mxc_ccm->CCGR3);
-+	/* Set the ldb_di0_clk and ldb_di1_clk to 100b */
-+	reg = readl(&mxc_ccm->cs2cdr);
-+	reg &= ~(MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_MASK
-+	      | MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_MASK);
-+	reg |= ((4 << MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_OFFSET)
-+	      | (4 << MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_OFFSET));
-+	writel(reg, &mxc_ccm->cs2cdr);
- 
-+	/* Set the ldb_di0_clk and ldb_di1_clk to desired source */
- 	reg = readl(&mxc_ccm->cs2cdr);
--	reg &= ~(MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_MASK |
--		 MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_MASK);
--	reg |= (3 << MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_OFFSET) |
--	       (3 << MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_OFFSET);
-+	reg &= ~(MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_MASK
-+	      | MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_MASK);
-+	reg |= ((source << MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_OFFSET)
-+	      | (source << MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_OFFSET));
- 	writel(reg, &mxc_ccm->cs2cdr);
- 
--	reg = readl(&mxc_ccm->cscmr2);
--	reg |= (MXC_CCM_CSCMR2_LDB_DI0_IPU_DIV);
--	writel(reg, &mxc_ccm->cscmr2);
--
--	reg = readl(&mxc_ccm->chsccdr);
--	reg |= (CHSCCDR_CLK_SEL_LDB_DI0
--		<< MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_OFFSET);
--	writel(reg, &mxc_ccm->chsccdr);
--
--	reg = IOMUXC_GPR2_BGREF_RRMODE_EXTERNAL_RES
--	     | IOMUXC_GPR2_DI1_VS_POLARITY_ACTIVE_HIGH
--	     | IOMUXC_GPR2_DI0_VS_POLARITY_ACTIVE_LOW
--	     | IOMUXC_GPR2_BIT_MAPPING_CH1_SPWG
--	     | IOMUXC_GPR2_DATA_WIDTH_CH1_24BIT
--	     | IOMUXC_GPR2_BIT_MAPPING_CH0_SPWG
--	     | IOMUXC_GPR2_DATA_WIDTH_CH0_24BIT
--	     | IOMUXC_GPR2_LVDS_CH1_MODE_ENABLED_DI0
--	     | IOMUXC_GPR2_LVDS_CH0_MODE_ENABLED_DI0;
--	writel(reg, &iomux->gpr[2]);
--
--	reg = readl(&iomux->gpr[3]);
--	reg = (reg & ~(IOMUXC_GPR3_LVDS0_MUX_CTL_MASK |
--		       IOMUXC_GPR3_LVDS1_MUX_CTL_MASK |
--		       IOMUXC_GPR3_HDMI_MUX_CTL_MASK))
--	    | (IOMUXC_GPR3_MUX_SRC_IPU1_DI0
--	       << IOMUXC_GPR3_LVDS0_MUX_CTL_OFFSET)
--	    | (IOMUXC_GPR3_MUX_SRC_IPU1_DI0
--	       << IOMUXC_GPR3_LVDS1_MUX_CTL_OFFSET);
--	writel(reg, &iomux->gpr[3]);
-+	/* Unbypass pll3_sw_clk */
-+	reg = readl(&mxc_ccm->ccsr);
-+	reg &= ~MXC_CCM_CCSR_PLL3_SW_CLK_SEL;
-+	writel(reg, &mxc_ccm->ccsr);
-+
-+	/*
-+	 * Set the periph2_clk_sel back to the bottom mux so that
-+	 * mmdc_ch1 is from its original parent.
-+	 */
-+	reg = readl(&mxc_ccm->cbcdr);
-+	reg &= ~MXC_CCM_CBCDR_PERIPH2_CLK_SEL;
-+	writel(reg, &mxc_ccm->cbcdr);
-+
-+	/* Wait for the clock switch */
-+	while (readl(&mxc_ccm->cdhipr))
-+		;
-+	/* Clear MMDC_CH1 mask bit */
-+	reg = readl(&mxc_ccm->ccdr);
-+	reg &= ~MXC_CCM_CCDR_MMDC_CH1_HS_MASK;
-+	writel(reg, &mxc_ccm->ccdr);
-+}
-+
-+static void setup_display_b850v3(void)
-+{
-+	struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
-+	struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR;
-+
-+	/* Set LDB clock to Video PLL */
-+	set_ldb_clock_source(0);
-+	enable_videopll();
-+
-+	/* IPU1 D0 clock is 227.5 / 3.5 = 65MHz */
-+	clrbits_le32(&mxc_ccm->cscmr2, MXC_CCM_CSCMR2_LDB_DI0_IPU_DIV);
-+
-+	imx_setup_hdmi();
-+
-+	/* Set LDB_DI0 as clock source for IPU_DI0 */
-+	clrsetbits_le32(&mxc_ccm->chsccdr,
-+			MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_MASK,
-+			(CHSCCDR_CLK_SEL_LDB_DI0 <<
-+			 MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_OFFSET));
-+
-+	/* Turn on IPU LDB DI0 clocks */
-+	setbits_le32(&mxc_ccm->CCGR3, MXC_CCM_CCGR3_LDB_DI0_MASK);
-+
-+	enable_ipu_clock();
-+
-+	writel(IOMUXC_GPR2_BGREF_RRMODE_EXTERNAL_RES |
-+	       IOMUXC_GPR2_DI1_VS_POLARITY_ACTIVE_LOW |
-+	       IOMUXC_GPR2_DI0_VS_POLARITY_ACTIVE_LOW |
-+	       IOMUXC_GPR2_BIT_MAPPING_CH1_SPWG |
-+	       IOMUXC_GPR2_DATA_WIDTH_CH1_24BIT |
-+	       IOMUXC_GPR2_BIT_MAPPING_CH0_SPWG |
-+	       IOMUXC_GPR2_DATA_WIDTH_CH0_24BIT |
-+	       IOMUXC_GPR2_SPLIT_MODE_EN_MASK |
-+	       IOMUXC_GPR2_LVDS_CH0_MODE_ENABLED_DI0 |
-+	       IOMUXC_GPR2_LVDS_CH1_MODE_ENABLED_DI0,
-+	       &iomux->gpr[2]);
-+
-+	clrbits_le32(&iomux->gpr[3],
-+		     IOMUXC_GPR3_LVDS0_MUX_CTL_MASK |
-+		     IOMUXC_GPR3_LVDS1_MUX_CTL_MASK |
-+		     IOMUXC_GPR3_HDMI_MUX_CTL_MASK);
-+}
-+
-+static void setup_display_bx50v3(void)
-+{
-+	struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
-+	struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR;
-+
-+	/* Set LDB clock to USB PLL */
-+	set_ldb_clock_source(4);
-+
-+	/* IPU1 DI0 clock is 480/7 = 68.5 MHz */
-+	setbits_le32(&mxc_ccm->cscmr2, MXC_CCM_CSCMR2_LDB_DI0_IPU_DIV);
-+
-+	/* Set LDB_DI0 as clock source for IPU_DI0 */
-+	clrsetbits_le32(&mxc_ccm->chsccdr,
-+			MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_MASK,
-+			(CHSCCDR_CLK_SEL_LDB_DI0 <<
-+			MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_OFFSET));
-+
-+	/* Turn on IPU LDB DI0 clocks */
-+	setbits_le32(&mxc_ccm->CCGR3, MXC_CCM_CCGR3_LDB_DI0_MASK);
-+
-+	enable_ipu_clock();
-+
-+	writel(IOMUXC_GPR2_BGREF_RRMODE_EXTERNAL_RES |
-+	       IOMUXC_GPR2_DI0_VS_POLARITY_ACTIVE_LOW |
-+	       IOMUXC_GPR2_BIT_MAPPING_CH0_SPWG |
-+	       IOMUXC_GPR2_DATA_WIDTH_CH0_24BIT |
-+	       IOMUXC_GPR2_LVDS_CH0_MODE_ENABLED_DI0,
-+	       &iomux->gpr[2]);
-+
-+	clrsetbits_le32(&iomux->gpr[3],
-+			IOMUXC_GPR3_LVDS0_MUX_CTL_MASK,
-+		       (IOMUXC_GPR3_MUX_SRC_IPU1_DI0 <<
-+			IOMUXC_GPR3_LVDS0_MUX_CTL_OFFSET));
- 
- 	/* backlights off until needed */
- 	imx_iomux_v3_setup_multiple_pads(backlight_pads,
-@@ -487,7 +640,10 @@ int board_init(void)
- 	gpio_direction_output(SUS_S3_OUT, 1);
- 	gpio_direction_output(WIFI_EN, 1);
- #if defined(CONFIG_VIDEO_IPUV3)
--	setup_display();
-+	if (IS_ENABLED(CONFIG_TARGET_GE_B850V3))
-+		setup_display_b850v3();
-+	else
-+		setup_display_bx50v3();
- #endif
- 	/* address of boot parameters */
- 	gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
--- 
-2.5.0
-
diff --git a/recipes-bsp/u-boot/u-boot-ge-2015.10/0003-ge_bx50v3-Add-support-for-FSL-Community-Yocto-images.patch b/recipes-bsp/u-boot/u-boot-ge-2015.10/0003-ge_bx50v3-Add-support-for-FSL-Community-Yocto-images.patch
deleted file mode 100644
index b5e3a52..0000000
--- a/recipes-bsp/u-boot/u-boot-ge-2015.10/0003-ge_bx50v3-Add-support-for-FSL-Community-Yocto-images.patch
+++ /dev/null
@@ -1,128 +0,0 @@
-From 6b0a4665c760d25362752cc57ee239bb19e4f87d Mon Sep 17 00:00:00 2001
-From: Justin Waters <justin.waters@timesys.com>
-Date: Wed, 9 Mar 2016 13:16:39 -0500
-Subject: [PATCH 3/7] ge_bx50v3: Add support for FSL Community Yocto images
-
-The Freescale community images use two partitions: one for
-boot files, the other for the RFS. This option makes the default
-configurable at build time.
-
-Signed-off-by: Justin Waters <justin.waters@timesys.com>
----
- board/ge/bx50v3/Kconfig     |  4 ++++
- include/configs/ge_bx50v3.h | 36 ++++++++++++++++++++++++------------
- 2 files changed, 28 insertions(+), 12 deletions(-)
-
-diff --git a/board/ge/bx50v3/Kconfig b/board/ge/bx50v3/Kconfig
-index d50dece..320b3b8 100644
---- a/board/ge/bx50v3/Kconfig
-+++ b/board/ge/bx50v3/Kconfig
-@@ -15,4 +15,8 @@ config SYS_SOC
- config SYS_CONFIG_NAME
- 	default "ge_bx50v3"
- 
-+config YOCTO_IMAGE
-+	bool "Use yocto image layout"
-+        default n
-+
- endif
-diff --git a/include/configs/ge_bx50v3.h b/include/configs/ge_bx50v3.h
-index 6fa4a9a..4b3c25e 100644
---- a/include/configs/ge_bx50v3.h
-+++ b/include/configs/ge_bx50v3.h
-@@ -17,21 +17,31 @@
- 
- #if defined(CONFIG_TARGET_GE_B450V3)
- #define CONFIG_BOARD_NAME	"General Electric B450v3"
--#define CONFIG_DEFAULT_FDT_FILE	"/boot/imx6q-b450v3.dtb"
-+#define CONFIG_DEFAULT_FDT_FILE	"imx6q-b450v3.dtb"
- #elif defined(CONFIG_TARGET_GE_B650V3)
- #define CONFIG_BOARD_NAME	"General Electric B650v3"
--#define CONFIG_DEFAULT_FDT_FILE	"/boot/imx6q-b650v3.dtb"
-+#define CONFIG_DEFAULT_FDT_FILE	"imx6q-b650v3.dtb"
- #elif defined(CONFIG_TARGET_GE_B850V3)
- #define CONFIG_BOARD_NAME	"General Electric B850v3"
--#define CONFIG_DEFAULT_FDT_FILE	"/boot/imx6q-b850v3.dtb"
-+#define CONFIG_DEFAULT_FDT_FILE	"mx6q-b850v3.dtb"
- #else
- #define CONFIG_BOARD_NAME	"General Electric BA16 Generic"
--#define CONFIG_DEFAULT_FDT_FILE	"/boot/imx6q-ba16.dtb"
-+#define CONFIG_DEFAULT_FDT_FILE	"imx6q-ba16.dtb"
- #endif
- 
- #define CONFIG_MXC_UART_BASE	UART3_BASE
- #define CONFIG_CONSOLE_DEV	"ttymxc2"
- 
-+#ifdef CONFIG_YOCTO_IMAGE
-+#define CONFIG_BOOT_DIR	""
-+#define CONFIG_LOADCMD "fatload"
-+#define CONFIG_RFSPART "2"
-+#else
-+#define CONFIG_BOOT_DIR	"/boot"
-+#define CONFIG_LOADCMD "ext2load"
-+#define CONFIG_RFSPART "1"
-+#endif
-+
- #define PHYS_SDRAM_SIZE		(2u * 1024 * 1024 * 1024)
- 
- #define CONFIG_SUPPORT_EMMC_BOOT
-@@ -144,9 +154,9 @@
- 
- #define CONFIG_EXTRA_ENV_SETTINGS \
- 	"script=boot.scr\0" \
--	"image=/boot/uImage\0" \
-+	"image=" CONFIG_BOOT_DIR "/uImage\0" \
- 	"uboot=u-boot.imx\0" \
--	"fdt_file=" CONFIG_DEFAULT_FDT_FILE "\0" \
-+	"fdt_file=" CONFIG_BOOT_DIR "/" CONFIG_DEFAULT_FDT_FILE "\0" \
- 	"fdt_addr=0x18000000\0" \
- 	"boot_fdt=yes\0" \
- 	"ip_dyn=yes\0" \
-@@ -156,6 +166,8 @@
- 	"sddev=0\0" \
- 	"emmcdev=1\0" \
- 	"partnum=1\0" \
-+	"loadcmd=" CONFIG_LOADCMD "\0" \
-+	"rfspart=" CONFIG_RFSPART "\0" \
- 	"update_sd_firmware=" \
- 		"if test ${ip_dyn} = yes; then " \
- 			"setenv get_cmd dhcp; " \
-@@ -179,12 +191,12 @@
- 	"setargs=setenv bootargs console=${console},${baudrate} " \
- 		"root=/dev/${rootdev} rw rootwait cma=128M\0" \
- 	"loadbootscript=" \
--		"ext2load ${dev} ${devnum}:${partnum} ${loadaddr} ${script};\0" \
-+		"${loadcmd} ${dev} ${devnum}:${partnum} ${loadaddr} ${script};\0" \
- 	"bootscript=echo Running bootscript from ${dev}:${devnum}:${partnum};" \
- 		" source\0" \
- 	"loadimage=" \
--		"ext2load ${dev} ${devnum}:${partnum} ${loadaddr} ${image}\0" \
--	"loadfdt=ext2load ${dev} ${devnum}:${partnum} ${fdt_addr} ${fdt_file}\0" \
-+		"${loadcmd} ${dev} ${devnum}:${partnum} ${loadaddr} ${image}\0" \
-+	"loadfdt=${loadcmd} ${dev} ${devnum}:${partnum} ${fdt_addr} ${fdt_file}\0" \
- 	"tryboot=" \
- 		"if run loadbootscript; then " \
- 			"run bootscript; " \
-@@ -237,16 +249,16 @@
- 	"usb start; " \
- 	"setenv dev usb; " \
- 	"setenv devnum 0; " \
--	"setenv rootdev sda1; " \
-+	"setenv rootdev sda${rfspart}; " \
- 	"run tryboot; " \
- 	\
- 	"setenv dev mmc; " \
--	"setenv rootdev mmcblk0p1; " \
-+	"setenv rootdev mmcblk0p${rfspart}; " \
- 	\
- 	"setenv devnum ${sddev}; " \
- 	"if mmc dev ${devnum}; then " \
- 		"run tryboot; " \
--		"setenv rootdev mmcblk1p1; " \
-+		"setenv rootdev mmcblk1p${rfspart}; " \
- 	"fi; " \
- 	\
- 	"setenv devnum ${emmcdev}; " \
--- 
-2.5.0
-
diff --git a/recipes-bsp/u-boot/u-boot-ge-2015.10/0004-board-ge-bx50v3-Add-support-for-ELO-board.patch b/recipes-bsp/u-boot/u-boot-ge-2015.10/0004-board-ge-bx50v3-Add-support-for-ELO-board.patch
deleted file mode 100644
index cabe809..0000000
--- a/recipes-bsp/u-boot/u-boot-ge-2015.10/0004-board-ge-bx50v3-Add-support-for-ELO-board.patch
+++ /dev/null
@@ -1,222 +0,0 @@
-From 51606911d456bbcbdb85337a87dd35ce059bed4f Mon Sep 17 00:00:00 2001
-From: Justin Waters <justin.waters@timesys.com>
-Date: Wed, 9 Mar 2016 13:19:14 -0500
-Subject: [PATCH 4/7] board: ge: bx50v3: Add support for ELO board
-
-The ELO board uses the same Q7 module as the bx50v3 boards, but with
-a different baseboard. However, there are only two main differences
-that affect U-boot:
-
-1) Dual channel LVDS display
-2) Serial console
-
-Signed-off-by: Justin Waters <justin.waters@timesys.com>
----
- arch/arm/cpu/armv7/mx6/Kconfig |  4 +++
- board/ge/bx50v3/Kconfig        |  2 +-
- board/ge/bx50v3/bx50v3.c       | 76 ++++++++++++++++++++++++++++++++++++++++++
- configs/ge_elo_defconfig       |  8 +++++
- configs/ge_elo_yocto_defconfig |  9 +++++
- include/configs/ge_bx50v3.h    |  8 +++++
- 6 files changed, 106 insertions(+), 1 deletion(-)
- create mode 100644 configs/ge_elo_defconfig
- create mode 100644 configs/ge_elo_yocto_defconfig
-
-diff --git a/arch/arm/cpu/armv7/mx6/Kconfig b/arch/arm/cpu/armv7/mx6/Kconfig
-index 722e0d0..b93c661 100644
---- a/arch/arm/cpu/armv7/mx6/Kconfig
-+++ b/arch/arm/cpu/armv7/mx6/Kconfig
-@@ -60,6 +60,10 @@ config TARGET_CM_FX6
- config TARGET_EMBESTMX6BOARDS
- 	bool "embestmx6boards"
- 
-+config TARGET_GE_ELO
-+	bool "General Electric ELO"
-+	select MX6Q
-+
- config TARGET_GE_B450V3
- 	bool "General Electric B450v3"
- 	select MX6Q
-diff --git a/board/ge/bx50v3/Kconfig b/board/ge/bx50v3/Kconfig
-index 320b3b8..c88058b 100644
---- a/board/ge/bx50v3/Kconfig
-+++ b/board/ge/bx50v3/Kconfig
-@@ -1,4 +1,4 @@
--if TARGET_GE_B450V3 || TARGET_GE_B650V3 || TARGET_GE_B850V3
-+if TARGET_GE_ELO || TARGET_GE_B450V3 || TARGET_GE_B650V3 || TARGET_GE_B850V3
- 
- config IMX_CONFIG
- 	default "board/ge/bx50v3/bx50v3.cfg"
-diff --git a/board/ge/bx50v3/bx50v3.c b/board/ge/bx50v3/bx50v3.c
-index cf2cd1a..8d3e47a 100644
---- a/board/ge/bx50v3/bx50v3.c
-+++ b/board/ge/bx50v3/bx50v3.c
-@@ -324,6 +324,8 @@ static iomux_v3_cfg_t const backlight_pads[] = {
- 	/* Backlight enable for LVDS display */
- 	MX6_PAD_GPIO_0__GPIO1_IO00 | MUX_PAD_CTRL(NO_PAD_CTRL),
- #define LVDS_BACKLIGHT_GP IMX_GPIO_NR(1, 0)
-+	/* Set PWM to GPIO so backlight is full strength */
-+	MX6_PAD_SD1_DAT3__GPIO1_IO21 | MUX_PAD_CTRL(NO_PAD_CTRL),
- };
- 
- static void do_enable_hdmi(struct display_info_t const *dev)
-@@ -344,6 +346,9 @@ static int detect_baseboard(struct display_info_t const *dev)
- 	    IS_ENABLED(CONFIG_TARGET_GE_B650V3))
- 		return 1;
- 
-+	if (IS_ENABLED(CONFIG_TARGET_GE_ELO))
-+		return (0 == dev->addr);
-+
- 	return 0;
- }
- 
-@@ -369,6 +374,26 @@ struct display_info_t const displays[] = {{
- 		.vmode          = FB_VMODE_NONINTERLACED
- } }, {
- 	.bus	= -1,
-+	.addr	= 0,
-+	.pixfmt	= IPU_PIX_FMT_RGB24,
-+	.detect	= detect_baseboard,
-+	.enable	= NULL,
-+	.mode	= {
-+		.name           = "SHARP-LQ156M1LG21",
-+		.refresh        = 60,
-+		.xres           = 1920,
-+		.yres           = 1080,
-+		.pixclock       = 7851,
-+		.left_margin    = 100,
-+		.right_margin   = 40,
-+		.upper_margin   = 30,
-+		.lower_margin   = 3,
-+		.hsync_len      = 10,
-+		.vsync_len      = 2,
-+		.sync           = FB_SYNC_EXT,
-+		.vmode          = FB_VMODE_NONINTERLACED
-+} }, {
-+	.bus	= -1,
- 	.addr	= 3,
- 	.pixfmt	= IPU_PIX_FMT_RGB24,
- 	.detect	= detect_hdmi,
-@@ -559,6 +584,55 @@ static void setup_display_b850v3(void)
- 		     IOMUXC_GPR3_HDMI_MUX_CTL_MASK);
- }
- 
-+static void setup_display_elo(void)
-+{
-+	struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
-+	struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR;
-+
-+	set_ldb_clock_source(1);
-+
-+	clrbits_le32(&mxc_ccm->cscmr2, MXC_CCM_CSCMR2_LDB_DI0_IPU_DIV);
-+
-+	imx_setup_hdmi();
-+
-+	/* Set LDB_DI0 as clock source for IPU_DI0 */
-+	clrsetbits_le32(&mxc_ccm->chsccdr,
-+			MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_MASK,
-+			(CHSCCDR_CLK_SEL_LDB_DI0 <<
-+			 MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_OFFSET));
-+
-+	/* Turn on IPU LDB DI0 clocks */
-+	setbits_le32(&mxc_ccm->CCGR3, MXC_CCM_CCGR3_LDB_DI0_MASK);
-+
-+	enable_ipu_clock();
-+
-+	writel(IOMUXC_GPR2_BGREF_RRMODE_EXTERNAL_RES |
-+	       IOMUXC_GPR2_DI1_VS_POLARITY_ACTIVE_HIGH |
-+	       IOMUXC_GPR2_DI0_VS_POLARITY_ACTIVE_LOW |
-+	       IOMUXC_GPR2_BIT_MAPPING_CH1_SPWG |
-+	       IOMUXC_GPR2_DATA_WIDTH_CH1_24BIT |
-+	       IOMUXC_GPR2_BIT_MAPPING_CH0_SPWG |
-+	       IOMUXC_GPR2_DATA_WIDTH_CH0_24BIT |
-+	       IOMUXC_GPR2_SPLIT_MODE_EN_MASK |
-+	       IOMUXC_GPR2_LVDS_CH0_MODE_ENABLED_DI0 |
-+	       IOMUXC_GPR2_LVDS_CH1_MODE_ENABLED_DI0,
-+	       &iomux->gpr[2]);
-+
-+	clrsetbits_le32(&iomux->gpr[3],
-+			IOMUXC_GPR3_LVDS0_MUX_CTL_MASK |
-+			IOMUXC_GPR3_LVDS1_MUX_CTL_MASK |
-+			IOMUXC_GPR3_HDMI_MUX_CTL_MASK,
-+		       (IOMUXC_GPR3_MUX_SRC_IPU1_DI0 <<
-+			IOMUXC_GPR3_LVDS0_MUX_CTL_OFFSET));
-+
-+	/* backlights off until needed */
-+	imx_iomux_v3_setup_multiple_pads(backlight_pads,
-+					 ARRAY_SIZE(backlight_pads));
-+
-+	gpio_direction_input(LVDS_POWER_GP);
-+	gpio_direction_input(LVDS_BACKLIGHT_GP);
-+}
-+
- static void setup_display_bx50v3(void)
- {
- 	struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
-@@ -642,6 +716,8 @@ int board_init(void)
- #if defined(CONFIG_VIDEO_IPUV3)
- 	if (IS_ENABLED(CONFIG_TARGET_GE_B850V3))
- 		setup_display_b850v3();
-+	else if (IS_ENABLED(CONFIG_TARGET_GE_ELO))
-+		setup_display_elo();
- 	else
- 		setup_display_bx50v3();
- #endif
-diff --git a/configs/ge_elo_defconfig b/configs/ge_elo_defconfig
-new file mode 100644
-index 0000000..51835ce
---- /dev/null
-+++ b/configs/ge_elo_defconfig
-@@ -0,0 +1,8 @@
-+CONFIG_ARM=y
-+CONFIG_ARCH_MX6=y
-+CONFIG_TARGET_GE_ELO=y
-+# CONFIG_CMD_IMLS is not set
-+# CONFIG_CMD_FLASH is not set
-+CONFIG_CMD_GPIO=y
-+CONFIG_SPI_FLASH=y
-+CONFIG_SPI_FLASH_STMICRO=y
-diff --git a/configs/ge_elo_yocto_defconfig b/configs/ge_elo_yocto_defconfig
-new file mode 100644
-index 0000000..1cd475c
---- /dev/null
-+++ b/configs/ge_elo_yocto_defconfig
-@@ -0,0 +1,9 @@
-+CONFIG_ARM=y
-+CONFIG_ARCH_MX6=y
-+CONFIG_TARGET_GE_ELO=y
-+# CONFIG_CMD_IMLS is not set
-+# CONFIG_CMD_FLASH is not set
-+CONFIG_CMD_GPIO=y
-+CONFIG_SPI_FLASH=y
-+CONFIG_SPI_FLASH_STMICRO=y
-+CONFIG_YOCTO_IMAGE=y
-diff --git a/include/configs/ge_bx50v3.h b/include/configs/ge_bx50v3.h
-index 4b3c25e..8be4350 100644
---- a/include/configs/ge_bx50v3.h
-+++ b/include/configs/ge_bx50v3.h
-@@ -24,13 +24,21 @@
- #elif defined(CONFIG_TARGET_GE_B850V3)
- #define CONFIG_BOARD_NAME	"General Electric B850v3"
- #define CONFIG_DEFAULT_FDT_FILE	"mx6q-b850v3.dtb"
-+#elif defined(CONFIG_TARGET_GE_ELO)
-+#define CONFIG_BOARD_NAME	"General Electric ELO"
-+#define CONFIG_DEFAULT_FDT_FILE	"imx6q-elo.dtb"
- #else
- #define CONFIG_BOARD_NAME	"General Electric BA16 Generic"
- #define CONFIG_DEFAULT_FDT_FILE	"imx6q-ba16.dtb"
- #endif
- 
-+#if defined(CONFIG_TARGET_GE_ELO)
-+#define CONFIG_MXC_UART_BASE	UART4_BASE
-+#define CONFIG_CONSOLE_DEV	"ttymxc3"
-+#else
- #define CONFIG_MXC_UART_BASE	UART3_BASE
- #define CONFIG_CONSOLE_DEV	"ttymxc2"
-+#endif
- 
- #ifdef CONFIG_YOCTO_IMAGE
- #define CONFIG_BOOT_DIR	""
--- 
-2.5.0
-
diff --git a/recipes-bsp/u-boot/u-boot-ge-2015.10/0005-board-ge-bx50v3-Fix-bootargs-for-ELO-board.patch b/recipes-bsp/u-boot/u-boot-ge-2015.10/0005-board-ge-bx50v3-Fix-bootargs-for-ELO-board.patch
deleted file mode 100644
index bf6d5c0..0000000
--- a/recipes-bsp/u-boot/u-boot-ge-2015.10/0005-board-ge-bx50v3-Fix-bootargs-for-ELO-board.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 17d0da9815466516a8daae8e6d5c6d797caa75fc Mon Sep 17 00:00:00 2001
-From: Justin Waters <justin.waters@timesys.com>
-Date: Thu, 10 Mar 2016 15:26:30 -0500
-Subject: [PATCH 5/7] board: ge: bx50v3: Fix bootargs for ELO board
-
----
- include/configs/ge_bx50v3.h | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/include/configs/ge_bx50v3.h b/include/configs/ge_bx50v3.h
-index 8be4350..5219746 100644
---- a/include/configs/ge_bx50v3.h
-+++ b/include/configs/ge_bx50v3.h
-@@ -35,9 +35,11 @@
- #if defined(CONFIG_TARGET_GE_ELO)
- #define CONFIG_MXC_UART_BASE	UART4_BASE
- #define CONFIG_CONSOLE_DEV	"ttymxc3"
-+#define CONFIG_EXTRA_BOOTARGS	"panic=10"
- #else
- #define CONFIG_MXC_UART_BASE	UART3_BASE
- #define CONFIG_CONSOLE_DEV	"ttymxc2"
-+#define CONFIG_EXTRA_BOOTARGS	"cma=128M"
- #endif
- 
- #ifdef CONFIG_YOCTO_IMAGE
-@@ -197,7 +199,7 @@
- 			"echo 'U-Boot upgraded. Please reset'; " \
- 		"fi\0" \
- 	"setargs=setenv bootargs console=${console},${baudrate} " \
--		"root=/dev/${rootdev} rw rootwait cma=128M\0" \
-+		"root=/dev/${rootdev} rw rootwait " CONFIG_EXTRA_BOOTARGS "\0" \
- 	"loadbootscript=" \
- 		"${loadcmd} ${dev} ${devnum}:${partnum} ${loadaddr} ${script};\0" \
- 	"bootscript=echo Running bootscript from ${dev}:${devnum}:${partnum};" \
--- 
-2.5.0
-
diff --git a/recipes-bsp/u-boot/u-boot-ge-2015.10/0006-mx6q_ba16-Add-1G-DDR-support.patch b/recipes-bsp/u-boot/u-boot-ge-2015.10/0006-mx6q_ba16-Add-1G-DDR-support.patch
deleted file mode 100644
index 55853e1..0000000
--- a/recipes-bsp/u-boot/u-boot-ge-2015.10/0006-mx6q_ba16-Add-1G-DDR-support.patch
+++ /dev/null
@@ -1,343 +0,0 @@
-From 4fe4dc9cab80b3d61df30cb883081a3189b6660a Mon Sep 17 00:00:00 2001
-From: Ken Lin <ken.lin@advantech.com.tw>
-Date: Thu, 31 Mar 2016 12:45:11 +0800
-Subject: [PATCH 6/7] mx6q_ba16: Add 1G DDR support
-
----
- board/ge/bx50v3/Kconfig           |  15 ++-
- board/ge/bx50v3/ddr_1g.cfg        | 262 ++++++++++++++++++++++++++++++++++++++
- configs/ge_elo_yocto_1g_defconfig |  10 ++
- include/configs/ge_bx50v3.h       |   4 +
- 4 files changed, 290 insertions(+), 1 deletion(-)
- create mode 100644 board/ge/bx50v3/ddr_1g.cfg
- create mode 100644 configs/ge_elo_yocto_1g_defconfig
-
-diff --git a/board/ge/bx50v3/Kconfig b/board/ge/bx50v3/Kconfig
-index c88058b..05cc07a 100644
---- a/board/ge/bx50v3/Kconfig
-+++ b/board/ge/bx50v3/Kconfig
-@@ -1,7 +1,20 @@
- if TARGET_GE_ELO || TARGET_GE_B450V3 || TARGET_GE_B650V3 || TARGET_GE_B850V3
- 
-+choice
-+        prompt "DDR Size"
-+	default SYS_DDR_2G
-+
-+config SYS_DDR_1G
-+	bool "1GiB"
-+
-+config SYS_DDR_2G
-+	bool "2GiB"
-+
-+endchoice
-+
- config IMX_CONFIG
--	default "board/ge/bx50v3/bx50v3.cfg"
-+	default "board/ge/bx50v3/bx50v3.cfg" if SYS_DDR_2G
-+	default "board/ge/bx50v3/ddr_1g.cfg" if SYS_DDR_1G
- 
- config SYS_BOARD
- 	default "bx50v3"
-diff --git a/board/ge/bx50v3/ddr_1g.cfg b/board/ge/bx50v3/ddr_1g.cfg
-new file mode 100644
-index 0000000..967082d
---- /dev/null
-+++ b/board/ge/bx50v3/ddr_1g.cfg
-@@ -0,0 +1,262 @@
-+/*
-+ * Copyright (C) 2011 Freescale Semiconductor, Inc.
-+ * Jason Liu <r64343@freescale.com>
-+ *
-+ * SPDX-License-Identifier:    GPL-2.0+
-+ *
-+ * Refer doc/README.imximage for more details about how-to configure
-+ * and create imximage boot image
-+ *
-+ * The syntax is taken as close as possible with the kwbimage
-+ */
-+
-+
-+IMAGE_VERSION 2
-+BOOT_FROM sd
-+
-+//*================================================================================================
-+// Disable WDOG
-+//*================================================================================================
-+//setmem /16 0x020bc000 = 0x30
-+
-+
-+//*================================================================================================
-+// Enable all clocks (they are disabled by ROM code)
-+//*================================================================================================
-+DATA 4 0x020c4068  0xffffffff
-+DATA 4 0x020c406c  0xffffffff
-+DATA 4 0x020c4070  0xffffffff
-+DATA 4 0x020c4074  0xffffffff
-+DATA 4 0x020c4078  0xffffffff
-+DATA 4 0x020c407c  0xffffffff
-+DATA 4 0x020c4080  0xffffffff
-+DATA 4 0x020c4084  0xffffffff
-+
-+
-+//*
-+// Initialize 64-bit DDR3 
-+//*
-+
-+//######################################################
-+// IOMUX 
-+//######################################################
-+
-+//DDR IO TYPE:
-+DATA 4 0x020e0798  0x000c0000 // IOMUXC_SW_PAD_CTL_GRP_DDR_TYPE - DDR_SEL11 
-+DATA 4 0x020e0758  0x00000000 // IOMUXC_SW_PAD_CTL_GRP_DDRPKE - PKE0 , Pull disabled for all, except DQS.
-+
-+//CLOCK:
-+DATA 4 0x020e0588  0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_0 - DSE101, DDR_INPUT0, HYS0
-+DATA 4 0x020e0594  0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_1 - DSE101, DDR_INPUT0, HYS0
-+
-+//ADDRESS:
-+DATA 4 0x020e056c  0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_CAS - DSE110, DDR_INPUT1, HYS0
-+DATA 4 0x020e0578  0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_RAS - DSE110, DDR_INPUT1, HYS0
-+DATA 4 0x020e074c  0x00000030 // IOMUXC_SW_PAD_CTL_GRP_ADDDS - DSE110
-+
-+//CONTROL:
-+DATA 4 0x020e057c  0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_RESET - DSE110, DDR_INPUT1, HYS0, DDR_SEL00
-+
-+DATA 4 0x020e058c  0x00000000 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDBA2
-+DATA 4 0x020e059c  0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT0
-+DATA 4 0x020e05a0  0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT1
-+DATA 4 0x020e078c  0x00000030 // IOMUXC_SW_PAD_CTL_GRP_CTLDS - DSE110
-+
-+
-+//DATA STROBE:
-+DATA 4 0x020e0750  0x00020000 // IOMUXC_SW_PAD_CTL_GRP_DDRMODE_CTL - DDR_INPUT1
-+
-+DATA 4 0x020e05a8  0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS0 - DSE110
-+DATA 4 0x020e05b0  0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS1 - DSE110
-+DATA 4 0x020e0524  0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS2 - DSE110
-+DATA 4 0x020e051c  0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS3 - DSE110
-+DATA 4 0x020e0518  0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS4 - DSE110
-+DATA 4 0x020e050c  0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS5 - DSE110
-+DATA 4 0x020e05b8  0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS6 - DSE110
-+DATA 4 0x020e05c0  0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS7 - DSE110
-+
-+//DATA:
-+DATA 4 0x020e0774  0x00020000 // IOMUXC_SW_PAD_CTL_GRP_DDRMODE- DDR_INPUT 1,diff
-+
-+DATA 4 0x020e0784  0x00000030 // IOMUXC_SW_PAD_CTL_GRP_B0DS - DSE110
-+DATA 4 0x020e0788  0x00000030 // IOMUXC_SW_PAD_CTL_GRP_B1DS - DSE110
-+DATA 4 0x020e0794  0x00000030 // IOMUXC_SW_PAD_CTL_GRP_B2DS - DSE110
-+DATA 4 0x020e079c  0x00000030 // IOMUXC_SW_PAD_CTL_GRP_B3DS - DSE110
-+DATA 4 0x020e07a0  0x00000030 // IOMUXC_SW_PAD_CTL_GRP_B4DS - DSE110
-+DATA 4 0x020e07a4  0x00000030 // IOMUXC_SW_PAD_CTL_GRP_B5DS - DSE110
-+DATA 4 0x020e07a8  0x00000030 // IOMUXC_SW_PAD_CTL_GRP_B6DS - DSE110
-+DATA 4 0x020e0748  0x00000030 // IOMUXC_SW_PAD_CTL_GRP_B7DS - DSE110
-+
-+DATA 4 0x020e05ac  0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM0 - DSE110, DDR_INPUT1, HYS0
-+DATA 4 0x020e05b4  0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM1 - DSE110, DDR_INPUT1, HYS0
-+DATA 4 0x020e0528  0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM2 - DSE110, DDR_INPUT1, HYS0
-+DATA 4 0x020e0520  0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM3 - DSE110, DDR_INPUT1, HYS0
-+DATA 4 0x020e0514  0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM4 - DSE110, DDR_INPUT1, HYS0
-+DATA 4 0x020e0510  0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM5 - DSE110, DDR_INPUT1, HYS0
-+DATA 4 0x020e05bc  0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM6 - DSE110, DDR_INPUT1, HYS0
-+DATA 4 0x020e05c4  0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM7 - DSE110, DDR_INPUT1, HYS0
-+
-+
-+
-+//######################################################
-+//Calibrations:
-+//######################################################
-+// ZQ:
-+DATA 4 0x021b0800  0xa1390003      // DDR_PHY_P0_MPZQHWCTRL, enable both one-time & periodic HW ZQ calibration.
-+
-+// write leveling
-+DATA 4 0x021b080c  0x001F001F
-+DATA 4 0x021b0810  0x001F001F
-+
-+DATA 4 0x021b480c  0x001F001F
-+DATA 4 0x021b4810  0x001F001F
-+
-+//DQS gating, read delay, write delay calibration values based on calibration compare of 0x00ffff00:
-+// It is highly recommended for the user to run calibration code on her/his specific board 
-+//and replace following delay values accordingly: 
-+
-+
-+
-+//Read DQS Gating calibration
-+DATA 4 0x021b083c  0x43480350
-+DATA 4 0x021b0840  0x033C0340
-+DATA 4 0x021b483c  0x43480350
-+DATA 4 0x021b4840  0x03340314
-+
-+//Read calibration
-+DATA 4 0x021b0848  0x382E2C32
-+DATA 4 0x021b4848  0x38363044
-+
-+//Write calibration
-+DATA 4 0x021b0850  0x3A38403A
-+DATA 4 0x021b4850  0x4432483E
-+
-+
-+
-+//read data bit delay: (3 is the reccommended default value, although out of reset value is 0):
-+DATA 4 0x021b081c  0x33333333      // DDR_PHY_P0_MPREDQBY0DL3
-+DATA 4 0x021b0820  0x33333333      // DDR_PHY_P0_MPREDQBY1DL3
-+DATA 4 0x021b0824  0x33333333      // DDR_PHY_P0_MPREDQBY2DL3
-+DATA 4 0x021b0828  0x33333333      // DDR_PHY_P0_MPREDQBY3DL3
-+DATA 4 0x021b481c  0x33333333      // DDR_PHY_P1_MPREDQBY0DL3
-+DATA 4 0x021b4820  0x33333333      // DDR_PHY_P1_MPREDQBY1DL3
-+DATA 4 0x021b4824  0x33333333      // DDR_PHY_P1_MPREDQBY2DL3
-+DATA 4 0x021b4828  0x33333333      // DDR_PHY_P1_MPREDQBY3DL3
-+
-+
-+//DATA 4	0x021b082c 	0xf3333333 	// wr bit delay, byte 0
-+//DATA 4	0x021b0830 	0xf3333333 	// wr bit delay, byte 1
-+//DATA 4	0x021b0834 	0xf3333333 	// wr bit delay, byte 2
-+//DATA 4	0x021b0838 	0xf3333333 	// wr bit delay, byte 3
-+//DATA 4	0x021b482c 	0xf3333333 	// wr bit delay, byte 4
-+//DATA 4	0x021b4830 	0xf3333333 	// wr bit delay, byte 5
-+//DATA 4	0x021b4834 	0xf3333333 	// wr bit delay, byte 6
-+//DATA 4	0x021b4838 	0xf3333333 	// wr bit delay, byte 7
-+
-+
-+//For i.mx6qd parts of versions A & B (v1.0, v1.1), uncomment the following lines. For version C (v1.2), keep commented
-+//DATA 4	0x021b08c0 	0x24911492	// fine tune SDCLK duty cyc to low - seen to improve measured duty cycle of i.mx6
-+//DATA 4	0x021b48c0 	0x24911492	
-+
-+//######################################################
-+// Complete calibration by forced measurment:
-+//######################################################
-+DATA 4 0x021b08b8  0x00000800      // DDR_PHY_P0_MPMUR0, frc_msr
-+DATA 4 0x021b48b8  0x00000800      // DDR_PHY_P0_MPMUR0, frc_msr
-+
-+//######################################################
-+//MMDC init:
-+
-+
-+//528MHz
-+//in DDR3, 64-bit mode, only MMDC0 is initiated:
-+DATA 4 0x021b0004  0x00020036		// MMDC0_MDPDC see spread sheet for timings
-+DATA 4 0x021b0008  0x09444040		// MMDC0_MDOTC see spread sheet for timings
-+DATA 4 0x021b000c  0x555A79A5		// MMDC0_MDCFG0 see spread sheet for timings. CL8
-+DATA 4 0x021b0010  0xDB538E64		// MMDC0_MDCFG1 see spread sheet for timings
-+DATA 4 0x021b0014  0x01ff00db      // MMDC0_MDCFG2 - tRRD - 4ck; tWTR - 4ck; tRTP - 4ck; tDLLK - 512ck
-+DATA 4 0x021b0018  0x00001740      // MMDC0_MDMISC, RALAT0x5
-+//MDMISC: RALAT kept to the high level of 5. 
-+//MDMISC: consider reducing RALAT if your 528MHz board design allow that. Lower RALAT benefits: 
-+//a. better operation at low frequency
-+//b. Small performence improvment
-+
-+DATA 4 0x021b001c  0x00008000      // MMDC0_MDSCR
-+
-+DATA 4 0x021b002c  0x000026d2      // MMDC0_MDRWD
-+DATA 4 0x021b0030  0x005a1023      // MMDC0_MDOR - tXPR - 91ck; SDE_to_RST - 13ck; RST_to_CKE - 32ck                                //jimmy
-+DATA 4 0x021b0040  0x00000027      // CS0_END - 0x4fffffff 
-+
-+
-+
-+
-+DATA 4 0x021b0000  0x831a0000      // MMDC0_MDCTL - row - 14bits; col  10bits; burst length 8; 64-bit data bus
-+
-+
-+
-+//######################################################
-+// Initialize 2GB DDR3 - Micron MT41J128M , but fit wide range of other DDR3 devices
-+//MR2:
-+DATA 4 0x021b001c  0x04088032      // MMDC0_MDSCR
-+DATA 4 0x021b001c  0x0408803a      // MMDC0_MDSCR
-+
-+
-+//MR3:
-+DATA 4 0x021b001c  0x00008033      // MMDC0_MDSCR
-+DATA 4 0x021b001c  0x0000803b      // MMDC0_MDSCR
-+//MR1:
-+DATA 4 0x021b001c  0x00048031      // MMDC0_MDSCR
-+DATA 4 0x021b001c  0x00048039      // MMDC0_MDSCR
-+//MR0:
-+
-+DATA 4 0x021b001c  0x09408030      // MMDC0_MDSCR, 
-+DATA 4 0x021b001c  0x09408038      // MMDC0_MDSCR, 
-+
-+//DDR device ZQ calibration:
-+DATA 4 0x021b001c  0x04008040      // MMDC0_MDSCR, 
-+DATA 4 0x021b001c  0x04008048      // MMDC0_MDSCR
-+//######################################################
-+//final DDR setup, before operation start:
-+
-+DATA 4 0x021b0020  0x00005800      // MMDC0_MDREF, enable auto refresh, set refresh rate.
-+
-+//Following ODT setup (0x11117) represents(along with obove DDR device configs) : i.mx_ODTDDR_device_ODT120OHm.
-+//User might to also interested in trying the value of 0x00000007,which represents: i.mx_ODT disabled, DDR_device_ODT120Ohm.
-+//0x00000007 saves more power, and seen to run very well with Freescale RDKs. Still, running with no ODT has it's implications 
-+// of signal integrity and should be carefully simulated during board design.
-+
-+DATA 4 0x021b0818  0x00033337      // DDR_PHY_P0_MPODTCTRL, ODT enable
-+DATA 4 0x021b4818  0x00033337      // DDR_PHY_P1_MPODTCTRL
-+
-+DATA 4 0x021b0004  0x00025576		// MMDC0_MDPDC see spread sheet for timings, SDCTL power down enabled
-+
-+DATA 4 0x021b0404  0x00011006      //MMDC0_MAPSR ADOPT power down enabled
-+
-+DATA 4 0x021b001c  0x00000000      // MMDC0_MDSCR
-+
-+
-+/* set the default clock gate to save power */
-+DATA 4  0x020c4068  0x00C03F3F
-+DATA 4  0x020c406c  0x0030FC03
-+DATA 4  0x020c4070  0x0FFFC000
-+DATA 4  0x020c4074  0x3FF00000
-+DATA 4  0x020c4078  0x00FFF300
-+DATA 4  0x020c407c  0x0F0000C3
-+DATA 4  0x020c4080  0x000003FF
-+
-+/* enable AXI cache for VDOA/VPU/IPU */
-+DATA 4  0x020e0010  0xF00000CF
-+/* set IPU AXI-id0 Qos=0xf(bypass) AXI-id1 Qos=0x7 */
-+DATA 4  0x020e0018  0x007F007F
-+DATA 4  0x020e001c  0x007F007F
-+
-+/*
-+ * Setup CCM_CCOSR register as follows:
-+ *
-+ * cko1_en  1	   --> CKO1 enabled
-+ * cko1_div 111  --> divide by 8
-+ * cko1_sel 1011 --> ahb_clk_root
-+ *
-+ * This sets CKO1 at ahb_clk_root/8 132/8 16.5 MHz
-+ */
-+DATA 4  0x020c4060  0x000000fb
-diff --git a/configs/ge_elo_yocto_1g_defconfig b/configs/ge_elo_yocto_1g_defconfig
-new file mode 100644
-index 0000000..978b336
---- /dev/null
-+++ b/configs/ge_elo_yocto_1g_defconfig
-@@ -0,0 +1,10 @@
-+CONFIG_ARM=y
-+CONFIG_ARCH_MX6=y
-+CONFIG_TARGET_GE_ELO=y
-+CONFIG_SYS_DDR_1G=y
-+# CONFIG_CMD_IMLS is not set
-+# CONFIG_CMD_FLASH is not set
-+CONFIG_CMD_GPIO=y
-+CONFIG_SPI_FLASH=y
-+CONFIG_SPI_FLASH_STMICRO=y
-+CONFIG_YOCTO_IMAGE=y
-diff --git a/include/configs/ge_bx50v3.h b/include/configs/ge_bx50v3.h
-index 5219746..4aaccaa 100644
---- a/include/configs/ge_bx50v3.h
-+++ b/include/configs/ge_bx50v3.h
-@@ -52,7 +52,11 @@
- #define CONFIG_RFSPART "1"
- #endif
- 
-+#ifdef CONFIG_SYS_DDR_1G
-+#define PHYS_SDRAM_SIZE		(1u * 1024 * 1024 * 1024)
-+#else
- #define PHYS_SDRAM_SIZE		(2u * 1024 * 1024 * 1024)
-+#endif
- 
- #define CONFIG_SUPPORT_EMMC_BOOT
- 
--- 
-2.5.0
-
diff --git a/recipes-bsp/u-boot/u-boot-ge-2015.10/0007-board-ge-bx50v3-Add-correct-SATA-settings.patch b/recipes-bsp/u-boot/u-boot-ge-2015.10/0007-board-ge-bx50v3-Add-correct-SATA-settings.patch
deleted file mode 100644
index 5d2b01d..0000000
--- a/recipes-bsp/u-boot/u-boot-ge-2015.10/0007-board-ge-bx50v3-Add-correct-SATA-settings.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From 660d9fe934bd3dcb0dde077d6f51adf8fc4fc779 Mon Sep 17 00:00:00 2001
-From: Justin Waters <justin.waters@timesys.com>
-Date: Tue, 19 Apr 2016 14:36:16 -0400
-Subject: [PATCH 7/7] board: ge: bx50v3: Add correct SATA settings
-
-Signed-off-by: Justin Waters <justin.waters@timesys.com>
----
- board/ge/bx50v3/bx50v3.c | 28 ++++++++++++++++++++++++++++
- 1 file changed, 28 insertions(+)
-
-diff --git a/board/ge/bx50v3/bx50v3.c b/board/ge/bx50v3/bx50v3.c
-index 8d3e47a..18cac38 100644
---- a/board/ge/bx50v3/bx50v3.c
-+++ b/board/ge/bx50v3/bx50v3.c
-@@ -698,6 +698,30 @@ static iomux_v3_cfg_t const misc_pads[] = {
- #define SUS_S3_OUT	IMX_GPIO_NR(4, 11)
- #define WIFI_EN	IMX_GPIO_NR(6, 14)
- 
-+int setup_ba16_sata(void)
-+{
-+	struct iomuxc *const iomuxc_regs = (struct iomuxc *)IOMUXC_BASE_ADDR;
-+	int ret;
-+
-+	ret = enable_sata_clock();
-+	if (ret)
-+		return ret;
-+
-+	clrsetbits_le32(&iomuxc_regs->gpr[13],
-+			IOMUXC_GPR13_SATA_MASK,
-+			IOMUXC_GPR13_SATA_PHY_8_RXEQ_3P0DB
-+			|IOMUXC_GPR13_SATA_PHY_7_SATA2M
-+			|IOMUXC_GPR13_SATA_SPEED_3G
-+			|(1<<IOMUXC_GPR13_SATA_PHY_6_SHIFT)
-+			|IOMUXC_GPR13_SATA_SATA_PHY_5_SS_DISABLED
-+			|IOMUXC_GPR13_SATA_SATA_PHY_4_ATTEN_12_16
-+			|IOMUXC_GPR13_SATA_PHY_3_TXBOOST_3P33_DB
-+			|IOMUXC_GPR13_SATA_PHY_2_TX_1P133V
-+			|IOMUXC_GPR13_SATA_PHY_1_SLOW);
-+
-+	return 0;
-+}
-+
- int board_early_init_f(void)
- {
- 	imx_iomux_v3_setup_multiple_pads(misc_pads,
-@@ -755,6 +779,10 @@ int board_late_init(void)
- 	/* Backlight Power */
- 	gpio_direction_output(LVDS_BACKLIGHT_GP, 1);
- 
-+#ifdef CONFIG_CMD_SATA
-+	setup_ba16_sata();
-+#endif
-+
- 	return 0;
- }
- 
--- 
-2.5.0
-
diff --git a/recipes-bsp/u-boot/u-boot-ge_2015.10.bb b/recipes-bsp/u-boot/u-boot-ge_2015.10.bb
deleted file mode 100644
index 901744b..0000000
--- a/recipes-bsp/u-boot/u-boot-ge_2015.10.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-require recipes-bsp/u-boot/u-boot.inc
-
-DESCRIPTION = "U-Boot for GE i.MX6 BA16 based platforms"
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://Licenses/README;md5=0507cd7da8e7ad6d6701926ec9b84c95"
-DEPENDS = "u-boot-mkimage-native"
-
-PROVIDES = "u-boot"
-
-SRCREV = "1b6aee73e60023ae4ba16b11ce7bc23e0e8552f7"
-SRC_URI = "git://github.com/Freescale/u-boot-fslc.git;branch=2015.10+fslc \
-           file://0001-arm-imx-Add-support-for-GE-Bx50v3-boards.patch \
-           file://0002-board-ge-bx50v3-Update-display-setup.patch \
-           file://0003-ge_bx50v3-Add-support-for-FSL-Community-Yocto-images.patch \
-           file://0004-board-ge-bx50v3-Add-support-for-ELO-board.patch \
-           file://0005-board-ge-bx50v3-Fix-bootargs-for-ELO-board.patch \
-           file://0006-mx6q_ba16-Add-1G-DDR-support.patch \
-           file://0007-board-ge-bx50v3-Add-correct-SATA-settings.patch \
-"
-
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-COMPATIBLE_MACHINE = "(imx6q-elo)"
-- 
2.8.1



^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2016-08-09 18:01 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-09 18:00 [meta-fsl-arm-extra krogoth][PATCH 0/5] Rename imx6q-elo board and bump u-boot/kernel version Akshay Bhat
2016-08-09 18:00 ` [meta-fsl-arm-extra krogoth][PATCH 1/5] u-boot-advantech: Add u-boot recipe for Advantech i.MX6 boards Akshay Bhat
2016-08-09 18:00 ` [meta-fsl-arm-extra krogoth][PATCH 2/5] linux-advantech: Add linux kernel " Akshay Bhat
2016-08-09 18:00 ` [meta-fsl-arm-extra krogoth][PATCH 3/5] imx6q-elo: Rename board and update kernel, U-Boot provider Akshay Bhat
2016-08-09 18:00 ` [meta-fsl-arm-extra krogoth][PATCH 4/5] linux-ge: Remove old kernel recipe Akshay Bhat
2016-08-09 18:00 ` [meta-fsl-arm-extra krogoth][PATCH 5/5] u-boot-ge: Remove old u-boot recipe Akshay Bhat

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.