Add support for DMS-BA16 board

Signed-off-by: Ken Lin <[email protected]>
---
Changes in v2:
- Remove the old kernel 4.1 and DO_CONFIG variable
- Update the copyright info 

 .../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 --
 ...-Add-Q7-SUS_S3_OUT-control-support-during.patch |   85 --
 ...16-watchdog-enable-external-wdog_b-signal.patch |   89 --
 ...support-for-the-Advantech-DMS-BA16-Board.patch} |   58 +-
 ...002-mfd-da9063-Add-wakeup-source-support.patch} |    8 +-
 ...-PMIC-qurk-to-support-system-suspend-res.patch} |   41 +-
 .../defconfig                                      |  247 ++---
 recipes-kernel/linux/linux-advantech_4.1.bb        |   27 -
 recipes-kernel/linux/linux-advantech_4.9.bb        |   18 +
 14 files changed, 180 insertions(+), 2032 deletions(-)
 delete mode 100644 
recipes-kernel/linux/linux-advantech-4.1/0001-rtc-rx8010-Add-driver-to-kernel.patch
 delete mode 100644 
recipes-kernel/linux/linux-advantech-4.1/0002-ahci_imx-Make-receive-DPLL-mode-configurable.patch
 delete mode 100644 
recipes-kernel/linux/linux-advantech-4.1/0003-PCI-imx6-Add-DT-bindings-to-configure-PHY-Tx-driver-.patch
 delete mode 100644 
recipes-kernel/linux/linux-advantech-4.1/0004-input-da9063_onkey-Add-driver.patch
 delete mode 100644 
recipes-kernel/linux/linux-advantech-4.1/0005-mfd-da9063-Add-support-for-OnKey-driver.patch
 delete mode 100644 
recipes-kernel/linux/linux-advantech-4.1/0006-add-usb-hub_test-suport.patch
 delete mode 100644 
recipes-kernel/linux/linux-advantech-4.1/0010-ARM-dts-imx-Add-Q7-SUS_S3_OUT-control-support-during.patch
 delete mode 100644 
recipes-kernel/linux/linux-advantech-4.1/0011-dms-ba16-watchdog-enable-external-wdog_b-signal.patch
 rename 
recipes-kernel/linux/{linux-advantech-4.1/0007-ARM-dts-imx-Add-support-for-Advantech-DMS-BA16.patch
 => 
linux-advantech-4.9/0001-Add-support-for-the-Advantech-DMS-BA16-Board.patch} 
(94%)
 rename 
recipes-kernel/linux/{linux-advantech-4.1/0009-mfd-da9063-Add-wakeup-source-support.patch
 => linux-advantech-4.9/0002-mfd-da9063-Add-wakeup-source-support.patch} (76%)
 rename 
recipes-kernel/linux/{linux-advantech-4.1/0008-da9063-Add-a-PMIC-qurk-to-support-system-suspend-res.patch
 => 
linux-advantech-4.9/0003-da9063-Add-a-PMIC-qurk-to-support-system-suspend-res.patch}
 (84%)
 rename recipes-kernel/linux/{linux-advantech-4.1 => 
linux-advantech-4.9}/defconfig (64%)
 delete mode 100644 recipes-kernel/linux/linux-advantech_4.1.bb
 create mode 100644 recipes-kernel/linux/linux-advantech_4.9.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
deleted file mode 100644
index 63b0a33..0000000
--- 
a/recipes-kernel/linux/linux-advantech-4.1/0001-rtc-rx8010-Add-driver-to-kernel.patch
+++ /dev/null
@@ -1,1020 +0,0 @@
-From a7e5438cba40e5b6bada9842ff5533c5823793a7 Mon Sep 17 00:00:00 2001
-From: Justin Waters <[email protected]>
-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 <[email protected]>
-+// 
-+// 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, <[email protected]>
-+// Converted to new style by Wolfgang Grandegger <[email protected]>
-+// Alarm and periodic interrupt added by Dmitry Rakhchev <[email protected]>
-+//
-+// 
-+// 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 <[email protected]>");
-+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
deleted file mode 100644
index 1557e68..0000000
--- 
a/recipes-kernel/linux/linux-advantech-4.1/0002-ahci_imx-Make-receive-DPLL-mode-configurable.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From 6f2dae2ee19cfc972335511053a5b94cc30879f7 Mon Sep 17 00:00:00 2001
-From: Justin Waters <[email protected]>
-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
deleted file mode 100644
index 147b736..0000000
--- 
a/recipes-kernel/linux/linux-advantech-4.1/0003-PCI-imx6-Add-DT-bindings-to-configure-PHY-Tx-driver-.patch
+++ /dev/null
@@ -1,112 +0,0 @@
-From 03857322243162663a3b760c92b3fab837ba9820 Mon Sep 17 00:00:00 2001
-From: Justin Waters <[email protected]>
-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 <[email protected]>
-Signed-off-by: Bjorn Helgaas <[email protected]>
-Acked-by: Lucas Stach <[email protected]>
----
- .../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
deleted file mode 100644
index 0067df4..0000000
--- 
a/recipes-kernel/linux/linux-advantech-4.1/0004-input-da9063_onkey-Add-driver.patch
+++ /dev/null
@@ -1,277 +0,0 @@
-From 25b18dc1f1a91fbbb697fc3fa362f8f2d1709a7f Mon Sep 17 00:00:00 2001
-From: "Opensource [Steve Twiss]" <[email protected]>
-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 <[email protected]>");
-+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
deleted file mode 100644
index c9007bf..0000000
--- 
a/recipes-kernel/linux/linux-advantech-4.1/0005-mfd-da9063-Add-support-for-OnKey-driver.patch
+++ /dev/null
@@ -1,114 +0,0 @@
-From 18fe0924c45d803967a304abe4fb7b143a0a0296 Mon Sep 17 00:00:00 2001
-From: Steve Twiss <[email protected]>
-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 <[email protected]>
-[Lee: Removed 'key_power' for Dmitry to take through the Input Tree]
-Signed-off-by: Lee Jones <[email protected]>
----
- 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
deleted file mode 100644
index 27b5c62..0000000
--- 
a/recipes-kernel/linux/linux-advantech-4.1/0006-add-usb-hub_test-suport.patch
+++ /dev/null
@@ -1,66 +0,0 @@
-From b555459597027af3362d93020162dfbb30e0eddd Mon Sep 17 00:00:00 2001
-From: Ken Lin <[email protected]>
-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/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
deleted file mode 100644
index 95ee76b..0000000
--- 
a/recipes-kernel/linux/linux-advantech-4.1/0010-ARM-dts-imx-Add-Q7-SUS_S3_OUT-control-support-during.patch
+++ /dev/null
@@ -1,85 +0,0 @@
-From d2b1dd5c8591c6e87b955329615683d0431cfb6e Mon Sep 17 00:00:00 2001
-From: Ken Lin <[email protected]>
-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/0011-dms-ba16-watchdog-enable-external-wdog_b-signal.patch
 
b/recipes-kernel/linux/linux-advantech-4.1/0011-dms-ba16-watchdog-enable-external-wdog_b-signal.patch
deleted file mode 100644
index dcb4bad..0000000
--- 
a/recipes-kernel/linux/linux-advantech-4.1/0011-dms-ba16-watchdog-enable-external-wdog_b-signal.patch
+++ /dev/null
@@ -1,89 +0,0 @@
-From d9ff4244846537ccff192c8d10cc5a389193143a Mon Sep 17 00:00:00 2001
-From: Ken Lin <[email protected]>
-Date: Thu, 14 Sep 2017 07:51:52 +0800
-Subject: [PATCH] dms-ba16: watchdog: enable external wdog_b signal
-
-Enable the external wdog_b singal in Q7 to support the platform system reset
-
-Signed-off-by: Ken Lin <[email protected]>
----
- arch/arm/boot/dts/imx6q-dms-ba16.dts | 14 +++++++++++++-
- drivers/watchdog/imx2_wdt.c          | 12 ++++++++++--
- 2 files changed, 23 insertions(+), 3 deletions(-)
-
-diff --git a/arch/arm/boot/dts/imx6q-dms-ba16.dts 
b/arch/arm/boot/dts/imx6q-dms-ba16.dts
-index 570e4ab5c531..154aa77e4c91 100644
---- a/arch/arm/boot/dts/imx6q-dms-ba16.dts
-+++ b/arch/arm/boot/dts/imx6q-dms-ba16.dts
-@@ -466,7 +466,6 @@
-                               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 */
-@@ -666,6 +665,13 @@
-                       >;
-               };
-       };
-+      wdog {
-+              pinctrl_wdog: wdoggrp {
-+                      fsl,pins = <
-+                              MX6QDL_PAD_GPIO_9__WDOG1_B 0x1b0b0              
/* Watchdog out */
-+                      >;
-+              };
-+      };
- };
- 
- &ldb {
-@@ -797,3 +803,9 @@
-       fsl,receive-dpll-mode = <1>;
-       status = "okay";
- };
-+
-+&wdog1 {
-+      pinctrl-names = "default";
-+      pinctrl-0 = <&pinctrl_wdog>;
-+      fsl,wdog_b;
-+};
-diff --git a/drivers/watchdog/imx2_wdt.c b/drivers/watchdog/imx2_wdt.c
-index 805df6b33625..decfef3ecd41 100644
---- a/drivers/watchdog/imx2_wdt.c
-+++ b/drivers/watchdog/imx2_wdt.c
-@@ -43,6 +43,8 @@
- 
- #define IMX2_WDT_WCR          0x00            /* Control Register */
- #define IMX2_WDT_WCR_WT               (0xFF << 8)     /* -> Watchdog Timeout 
Field */
-+#define IMX2_WDT_WCR_WDA      (1 << 5)        /* -> WDOG_B assertion */
-+#define IMX2_WDT_WCR_SRS      (1 << 4)        /* -> Software Reset Signal */
- #define IMX2_WDT_WCR_WRE      (1 << 3)        /* -> WDOG Reset Enable */
- #define IMX2_WDT_WCR_WDE      (1 << 2)        /* -> Watchdog Enable */
- #define IMX2_WDT_WCR_WDZST    (1 << 0)        /* -> Watchdog timer Suspend */
-@@ -102,7 +104,9 @@ static int imx2_restart_handler(struct notifier_block 
*this, unsigned long mode,
-                                                   restart_handler);
-       /* Assert WDOG_B signal */
-       if (wdev->wdog_b)
--              wcr_enable = 0x14;
-+              wcr_enable |= IMX2_WDT_WCR_SRS;
-+      else
-+              wcr_enable |= IMX2_WDT_WCR_WDA;
- 
-       regmap_write(wdev->regmap, 0, wcr_enable);
-       /*
-@@ -133,7 +137,11 @@ static inline void imx2_wdt_setup(struct watchdog_device 
*wdog)
-       /* Strip the old watchdog Time-Out value */
-       val &= ~IMX2_WDT_WCR_WT;
-       /* Generate reset if WDOG times out */
--      val &= ~IMX2_WDT_WCR_WRE;
-+      if (!wdev->wdog_b)
-+              val &= ~IMX2_WDT_WCR_WRE;
-+      /* Or if external-reset assert WDOG_B reset only on time-out */
-+      else
-+              val |= IMX2_WDT_WCR_WRE;
-       /* Keep Watchdog Disabled */
-       val &= ~IMX2_WDT_WCR_WDE;
-       /* Set the watchdog's Time-Out value */
--- 
-2.11.0
-
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.9/0001-Add-support-for-the-Advantech-DMS-BA16-Board.patch
similarity index 94%
rename from 
recipes-kernel/linux/linux-advantech-4.1/0007-ARM-dts-imx-Add-support-for-Advantech-DMS-BA16.patch
rename to 
recipes-kernel/linux/linux-advantech-4.9/0001-Add-support-for-the-Advantech-DMS-BA16-Board.patch
index 89cf759..fe995d8 100644
--- 
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.9/0001-Add-support-for-the-Advantech-DMS-BA16-Board.patch
@@ -1,25 +1,22 @@
-From b65cedb176959d126e062e437a58738a2b31f724 Mon Sep 17 00:00:00 2001
-From: Justin Waters <[email protected]>
-Date: Fri, 12 Dec 2014 17:12:24 -0500
-Subject: [PATCH 7/7] ARM: dts: imx: Add support for Advantech DMS-BA16
+From 65b84fc181347ae04b1e38dbaa1672751050a5f5 Mon Sep 17 00:00:00 2001
+From: Ken Lin <[email protected]>
+Date: Thu, 7 Jun 2018 07:20:32 +0800
+Subject: [PATCH] Add support for the Advantech DMS-BA16 Board
 
-Add support for the Advantech DMS-BA16 Board.
-
-Signed-off-by: Justin Waters <[email protected]>
+Signed-off-by: Ken Lin <[email protected]>
 ---
- 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
+ arch/arm/boot/dts/imx6q-dms-ba16.dts | 815 +++++++++++++++++++++++++++++++++++
+ 1 file changed, 815 insertions(+)
+ create mode 100755 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
+new file mode 100755
+index 000000000000..fb5c9ae6579f
 --- /dev/null
 +++ b/arch/arm/boot/dts/imx6q-dms-ba16.dts
-@@ -0,0 +1,795 @@
+@@ -0,0 +1,815 @@
 +/*
-+ * Copyright 2016 Timesys Corporation
-+ * Copyright 2016 Advantech Corporation
++ * Copyright 2018 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
@@ -279,12 +276,14 @@ index 0000000..533d536
 +      status = "okay";
 +};
 +
++
 +&hdmi_cec {
 +      pinctrl-names = "default";
 +      pinctrl-0 = <&pinctrl_hdmi_cec>;
-+      status = "okay";
++      status = "disabled";
 +};
 +
++
 +&hdmi_core {
 +      ipu_id = <1>;
 +      disp_id = <0>;
@@ -318,10 +317,12 @@ index 0000000..533d536
 +      pinctrl-0 = <&pinctrl_i2c2>;
 +      status = "okay";
 +
-+      hdmi: edid@50 {
++
++      hdmi_edid: edid@50 {
 +              compatible = "fsl,imx6-hdmi-i2c";
 +              reg = <0x50>;
 +      };
++
 +};
 +
 +&i2c3 {
@@ -334,7 +335,11 @@ index 0000000..533d536
 +              compatible = "dialog,da9063";
 +              reg = <0x58>;
 +              interrupt-parent = <&gpio7>;
-+              interrupts = <13 0x8>; /* active-low GPIO7_13 */
++              interrupts = <13 IRQ_TYPE_LEVEL_LOW>; /* active-low GPIO7_13 */
++
++                onkey {
++                        compatible = "dlg,da9063-onkey";
++                };
 +
 +              regulators {
 +                      bcore1 {
@@ -483,13 +488,14 @@ index 0000000..533d536
 +                              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 */
++                              MX6QDL_PAD_KEY_ROW2__GPIO4_IO11  0x1b0b0        
/*SUS_S3_OUT*/
++
 +                      >;
 +              };
 +      };
@@ -681,6 +687,13 @@ index 0000000..533d536
 +                      >;
 +              };
 +      };
++      wdog {
++              pinctrl_wdog: wdoggrp {
++                      fsl,pins = <
++                              MX6QDL_PAD_GPIO_9__WDOG1_B 0x1b0b0              
/* Watchdog out */
++                      >;
++              };
++      };
 +};
 +
 +&ldb {
@@ -812,6 +825,11 @@ index 0000000..533d536
 +      fsl,receive-dpll-mode = <1>;
 +      status = "okay";
 +};
++&wdog1 {
++      pinctrl-names = "default";
++      pinctrl-0 = <&pinctrl_wdog>;
++      fsl,wdog_b;
++};
 -- 
-2.8.1
+2.11.0
 
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.9/0002-mfd-da9063-Add-wakeup-source-support.patch
similarity index 76%
rename from 
recipes-kernel/linux/linux-advantech-4.1/0009-mfd-da9063-Add-wakeup-source-support.patch
rename to 
recipes-kernel/linux/linux-advantech-4.9/0002-mfd-da9063-Add-wakeup-source-support.patch
index 2085d54..d911273 100644
--- 
a/recipes-kernel/linux/linux-advantech-4.1/0009-mfd-da9063-Add-wakeup-source-support.patch
+++ 
b/recipes-kernel/linux/linux-advantech-4.9/0002-mfd-da9063-Add-wakeup-source-support.patch
@@ -1,7 +1,7 @@
-From 93b8c33148ae69e4e060f1fbe66e21c59c91e368 Mon Sep 17 00:00:00 2001
+From e330be67b1dd357fdc9676c72315eb0b8a9fd911 Mon Sep 17 00:00:00 2001
 From: Ken Lin <[email protected]>
 Date: Tue, 26 Jul 2016 11:36:19 +0800
-Subject: [PATCH 2/3] mfd: da9063: Add wakeup source support
+Subject: [PATCH 3/4] mfd: da9063: Add wakeup source support
 
 Configure da9063 IRQ as a iMx6 wakeup source
 ---
@@ -9,7 +9,7 @@ Configure da9063 IRQ as a iMx6 wakeup source
  1 file changed, 4 insertions(+)
 
 diff --git a/drivers/mfd/da9063-core.c b/drivers/mfd/da9063-core.c
-index af841c1..7ea00a5 100644
+index 6c2870d4e754..72c303be2568 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)
@@ -24,5 +24,5 @@ index af841c1..7ea00a5 100644
  }
  
 -- 
-1.9.1
+2.11.0
 
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.9/0003-da9063-Add-a-PMIC-qurk-to-support-system-suspend-res.patch
similarity index 84%
rename from 
recipes-kernel/linux/linux-advantech-4.1/0008-da9063-Add-a-PMIC-qurk-to-support-system-suspend-res.patch
rename to 
recipes-kernel/linux/linux-advantech-4.9/0003-da9063-Add-a-PMIC-qurk-to-support-system-suspend-res.patch
index 17261be..411aa73 100644
--- 
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.9/0003-da9063-Add-a-PMIC-qurk-to-support-system-suspend-res.patch
@@ -1,34 +1,35 @@
-From f08d25fce37274bb7ff7862ed380b998500b739c Mon Sep 17 00:00:00 2001
-From: Ken Lin <[email protected]>
-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
+From f4d37d3abc522e72bebc2310d478cb5ebed24a4a Mon Sep 17 00:00:00 2001
+From: Ken Lin <[email protected]>
+Date: Thu, 1 Mar 2018 08:16:47 +0800
+Subject: [PATCH 4/4] 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(-)
+ arch/arm/mach-imx/mach-dms-ba16.c | 188 ++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 189 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
+index 5d43296bdbe4..6bae5db72870 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
+@@ -93,7 +93,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
+ obj-$(CONFIG_SOC_IMX6Q) += mach-imx6q.o ddr3_freq_imx6.o smp_wfe_imx6.o \
+-                         lpddr2_freq_imx6q.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
+ obj-$(CONFIG_SOC_IMX6SL) += mach-imx6sl.o lpddr2_freq_imx6.o
+ AFLAGS_lpddr2_freq_imx6sll.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
+index 000000000000..ac6e6a0ca7a0
 --- /dev/null
 +++ b/arch/arm/mach-imx/mach-dms-ba16.c
-@@ -0,0 +1,184 @@
+@@ -0,0 +1,188 @@
 +/*
 + * Platform suspend/resume/poweroff quirk example
 + *
@@ -56,7 +57,10 @@ index 0000000..bc327d5
 +#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,
@@ -71,7 +75,7 @@ index 0000000..bc327d5
 +               * 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:
@@ -88,7 +92,7 @@ index 0000000..bc327d5
 +                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:
@@ -182,6 +186,7 @@ index 0000000..bc327d5
 +                 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);
 +
@@ -214,5 +219,5 @@ index 0000000..bc327d5
 +arch_initcall(platform_quirk);
 +
 -- 
-1.9.1
+2.11.0
 
diff --git a/recipes-kernel/linux/linux-advantech-4.1/defconfig 
b/recipes-kernel/linux/linux-advantech-4.9/defconfig
similarity index 64%
rename from recipes-kernel/linux/linux-advantech-4.1/defconfig
rename to recipes-kernel/linux/linux-advantech-4.9/defconfig
index c02b3c3..a648981 100644
--- a/recipes-kernel/linux/linux-advantech-4.1/defconfig
+++ b/recipes-kernel/linux/linux-advantech-4.9/defconfig
@@ -9,7 +9,6 @@ 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
@@ -18,37 +17,45 @@ CONFIG_MODULE_UNLOAD=y
 CONFIG_MODVERSIONS=y
 CONFIG_MODULE_SRCVERSION_ALL=y
 # CONFIG_BLK_DEV_BSG is not set
+CONFIG_ARCH_MULTI_V6=y
 CONFIG_ARCH_MXC=y
+CONFIG_MACH_MX31LILLY=y
+CONFIG_MACH_MX31LITE=y
+CONFIG_MACH_PCM037=y
+CONFIG_MACH_PCM037_EET=y
+CONFIG_MACH_MX31_3DS=y
+CONFIG_MACH_MX31MOBOARD=y
+CONFIG_MACH_QONG=y
+CONFIG_MACH_ARMADILLO5X0=y
+CONFIG_MACH_KZM_ARM11_01=y
+CONFIG_MACH_IMX31_DT=y
+CONFIG_MACH_IMX35_DT=y
+CONFIG_MACH_PCM043=y
+CONFIG_MACH_MX35_3DS=y
+CONFIG_MACH_VPR200=y
 CONFIG_SOC_IMX50=y
+CONFIG_SOC_IMX51=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_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_ARM_PSCI=y
+CONFIG_PREEMPT_VOLUNTARY=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_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
 CONFIG_ARM_IMX6Q_CPUFREQ=y
-CONFIG_ARM_IMX7D_CPUFREQ=y
 CONFIG_CPU_IDLE=y
 CONFIG_VFP=y
 CONFIG_NEON=y
@@ -64,34 +71,21 @@ 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_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_LL=y
 CONFIG_CFG80211=y
 CONFIG_MAC80211=y
+CONFIG_RFKILL=y
+CONFIG_RFKILL_INPUT=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
@@ -108,15 +102,16 @@ CONFIG_MTD_M25P80=y
 CONFIG_MTD_SST25L=y
 CONFIG_MTD_NAND=y
 CONFIG_MTD_NAND_GPMI_NAND=y
+CONFIG_MTD_NAND_VF610_NFC=y
 CONFIG_MTD_NAND_MXC=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_SPI_FSL_QUADSPI=y
 CONFIG_MTD_UBI=y
+CONFIG_MTD_UBI_FASTMAP=y
+CONFIG_MTD_UBI_BLOCK=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
@@ -134,7 +129,7 @@ CONFIG_NETDEVICES=y
 CONFIG_CS89x0=y
 CONFIG_CS89x0_PLATFORM=y
 # CONFIG_NET_VENDOR_FARADAY is not set
-CONFIG_IGB=y
+# CONFIG_NET_VENDOR_INTEL is not set
 # CONFIG_NET_VENDOR_MARVELL is not set
 # CONFIG_NET_VENDOR_MICREL is not set
 # CONFIG_NET_VENDOR_MICROCHIP is not set
@@ -144,21 +139,17 @@ CONFIG_SMC91X=y
 CONFIG_SMC911X=y
 CONFIG_SMSC911X=y
 # CONFIG_NET_VENDOR_STMICRO is not set
+CONFIG_AT803X_PHY=y
 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_USBNET=y
 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_BRCMFMAC=m
+CONFIG_WL12XX=m
+CONFIG_WLCORE_SDIO=m
+# CONFIG_WILINK_PLATFORM_DATA is not set
 # CONFIG_INPUT_MOUSEDEV_PSAUX is not set
 CONFIG_INPUT_EVDEV=y
 CONFIG_INPUT_EVBUG=m
@@ -169,18 +160,17 @@ 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_EDT_FT5X06=y
 CONFIG_TOUCHSCREEN_MC13783=y
+CONFIG_TOUCHSCREEN_TSC2004=y
 CONFIG_TOUCHSCREEN_TSC2007=y
 CONFIG_TOUCHSCREEN_STMPE=y
+CONFIG_TOUCHSCREEN_SX8654=y
+CONFIG_TOUCHSCREEN_COLIBRI_VF50=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_INPUT_DA9063_ONKEY=y
 CONFIG_SERIO_SERPORT=m
 # CONFIG_LEGACY_PTYS is not set
 # CONFIG_DEVKMEM is not set
@@ -188,36 +178,38 @@ 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_MUX_GPIO=y
 # CONFIG_I2C_HELPER_AUTO is not set
 CONFIG_I2C_ALGOPCF=m
 CONFIG_I2C_ALGOPCA=m
+CONFIG_I2C_GPIO=y
 CONFIG_I2C_IMX=y
 CONFIG_SPI=y
-CONFIG_SPI_GPIO=y
 CONFIG_SPI_IMX=y
+CONFIG_SPI_FSL_DSPI=y
 CONFIG_GPIO_SYSFS=y
-CONFIG_GPIO_MAX732X=y
+CONFIG_GPIO_MC9S08DZ60=y
 CONFIG_GPIO_PCA953X=y
-CONFIG_GPIO_74X164=y
+CONFIG_GPIO_STMPE=y
+CONFIG_POWER_RESET=y
+CONFIG_POWER_RESET_GPIO=y
+CONFIG_POWER_RESET_IMX=y
+CONFIG_POWER_RESET_SYSCON=y
+CONFIG_POWER_RESET_SYSCON_POWEROFF=y
 CONFIG_POWER_SUPPLY=y
-CONFIG_SABRESD_MAX8903=y
-CONFIG_SENSORS_MAX17135=y
-CONFIG_SENSORS_MAG3110=y
+CONFIG_SENSORS_GPIO_FAN=y
+CONFIG_SENSORS_IIO_HWMON=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
@@ -225,84 +217,59 @@ 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_IMX_IPUV3_CORE=y
 CONFIG_DRM=y
-CONFIG_DRM_VIVANTE=y
-CONFIG_FB=y
+CONFIG_DRM_PANEL_SIMPLE=y
+CONFIG_DRM_DW_HDMI_AHB_AUDIO=m
+CONFIG_DRM_IMX=y
+CONFIG_DRM_IMX_PARALLEL_DISPLAY=y
+CONFIG_DRM_IMX_TVE=y
+CONFIG_DRM_IMX_LDB=y
+CONFIG_DRM_IMX_HDMI=y
+CONFIG_DRM_ETNAVIV=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_BACKLIGHT_GPIO=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_SOC_FSL_ASRC=y
 CONFIG_SND_IMX_SOC=y
+CONFIG_SND_SOC_PHYCORE_AC97=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_SND_SOC_FSL_ASOC_CARD=y
+CONFIG_SND_SOC_CS42XX8_I2C=y
+CONFIG_SND_SOC_TLV320AIC3X=y
+CONFIG_SND_SOC_WM8960=y
+CONFIG_SND_SIMPLE_CARD=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
@@ -311,10 +278,12 @@ 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_USB_TEST=m
+CONFIG_USB_EHSET_TEST_FIXTURE=m
 CONFIG_NOP_USB_XCEIV=y
 CONFIG_USB_MXS_PHY=y
 CONFIG_USB_GADGET=y
+CONFIG_USB_FSL_USB2=y
 CONFIG_USB_CONFIGFS=m
 CONFIG_USB_CONFIGFS_SERIAL=y
 CONFIG_USB_CONFIGFS_ACM=y
@@ -327,24 +296,28 @@ 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_CONFIGFS_F_UAC1=y
+CONFIG_USB_CONFIGFS_F_UAC2=y
+CONFIG_USB_CONFIGFS_F_MIDI=y
+CONFIG_USB_CONFIGFS_F_HID=y
+CONFIG_USB_CONFIGFS_F_UVC=y
+CONFIG_USB_CONFIGFS_F_PRINTER=y
 CONFIG_USB_ZERO=m
+CONFIG_USB_AUDIO=m
 CONFIG_USB_ETH=m
 CONFIG_USB_G_NCM=m
 CONFIG_USB_GADGETFS=m
+CONFIG_USB_FUNCTIONFS=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_PWM=y
 CONFIG_LEDS_TRIGGERS=y
 CONFIG_LEDS_TRIGGER_TIMER=y
 CONFIG_LEDS_TRIGGER_ONESHOT=y
@@ -353,24 +326,27 @@ CONFIG_LEDS_TRIGGER_BACKLIGHT=y
 CONFIG_LEDS_TRIGGER_GPIO=y
 CONFIG_RTC_CLASS=y
 CONFIG_RTC_INTF_DEV_UIE_EMUL=y
+CONFIG_RTC_DRV_DS1307=y
+CONFIG_RTC_DRV_ISL1208=y
+CONFIG_RTC_DRV_PCF8523=y
+CONFIG_RTC_DRV_PCF8563=y
+CONFIG_RTC_DRV_M41T80=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_FSL_EDMA=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_MPL3115=y
 CONFIG_PWM=y
+CONFIG_PWM_FSL_FTM=y
 CONFIG_PWM_IMX=y
+CONFIG_NVMEM_IMX_OCOTP=y
 CONFIG_EXT2_FS=y
 CONFIG_EXT2_FS_XATTR=y
 CONFIG_EXT2_FS_POSIX_ACL=y
@@ -378,9 +354,6 @@ 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
@@ -392,7 +365,6 @@ 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
@@ -405,43 +377,18 @@ CONFIG_NLS_ASCII=y
 CONFIG_NLS_ISO8859_1=y
 CONFIG_NLS_ISO8859_15=m
 CONFIG_NLS_UTF8=y
+CONFIG_PRINTK_TIME=y
 CONFIG_DEBUG_FS=y
 CONFIG_MAGIC_SYSRQ=y
+CONFIG_PANIC_TIMEOUT=3
 # CONFIG_SCHED_DEBUG is not set
+CONFIG_PROVE_LOCKING=y
 # 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_ARM_UNWIND is not set
 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_CRYPTO_DEV_SAHARA=y
 CONFIG_CRC_CCITT=m
 CONFIG_CRC_T10DIF=y
 CONFIG_CRC7=m
diff --git a/recipes-kernel/linux/linux-advantech_4.1.bb 
b/recipes-kernel/linux/linux-advantech_4.1.bb
deleted file mode 100644
index 05d3806..0000000
--- a/recipes-kernel/linux/linux-advantech_4.1.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-# 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
-
-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://0011-dms-ba16-watchdog-enable-external-wdog_b-signal.patch \
-           file://defconfig"
-
-COMPATIBLE_MACHINE = "(imx6q-dms-ba16)"
diff --git a/recipes-kernel/linux/linux-advantech_4.9.bb 
b/recipes-kernel/linux/linux-advantech_4.9.bb
new file mode 100644
index 0000000..352e5b6
--- /dev/null
+++ b/recipes-kernel/linux/linux-advantech_4.9.bb
@@ -0,0 +1,18 @@
+# Copyright (C) 2018 Advantech Corporation
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+include recipes-kernel/linux/linux-imx.inc
+DEPENDS += "lzop-native bc-native"
+
+SRCBRANCH = "4.9-1.0.x-imx"
+SRCREV = "0e674a64b86e2bb00ab43f56104d3ea85dda0066"
+LOCALVERSION = "-${SRCBRANCH}-dms-ba16"
+
+SRC_URI = "git://github.com/Freescale/linux-fslc.git;branch=${SRCBRANCH} \
+           file://0001-Add-support-for-the-Advantech-DMS-BA16-Board.patch \
+           file://0002-mfd-da9063-Add-wakeup-source-support.patch \
+           
file://0003-da9063-Add-a-PMIC-qurk-to-support-system-suspend-res.patch \
+           file://defconfig \
+         "
+
+COMPATIBLE_MACHINE = "(imx6q-dms-ba16)"
-- 
2.11.0

-- 
_______________________________________________
meta-freescale mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/meta-freescale

Reply via email to