[meta-freescale] [meta-fsl-arm-extra][PATCH 2/5] linux-compulab: add 4.1.15 kernel configuration files

Valentin Raevsky valentin at compulab.co.il
Thu Jul 7 06:16:11 PDT 2016


Add cm-fx6 and cl-som-imx6ul kernel configuration files.
This is a fork of the linux-imx 4.1.15.ga with the CompuLab patches
for cm-fx6 and cl-som-imx6ul boards.

Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
---
 ...001-platform-add-depends-property-handler.patch |   77 +
 ...-dts-Add-initial-support-for-cl-som-imx6u.patch |  524 +++++++
 ...M-i.MX6UL-add-defconfig-for-cl-som-imx6ul.patch |  473 +++++++
 ...i.MX6UL-Add-cl-som-imx6ul-platform-driver.patch |  127 ++
 .../0004-Bluetooth-Add-tty-HCI-driver.patch        |  603 ++++++++
 ...-btwilink-add-minimal-device-tree-support.patch |   57 +
 ...6UL-cl-som-imx6ul-add-support-for-WiLink8.patch |  184 +++
 ...-update-cl-som-imx6ul-defconfig-for-wilin.patch | 1154 +++++++++++++++
 ....MX6UL-update-defconfig-for-cl-som-imx6ul.patch |   38 +
 ...-sil164-add-dvi-transmitter-simple-driver.patch |  315 ++++
 ...imx6ul-dvi-enable-dvi-output-on-cl-sb-som.patch |   68 +
 ...-update-cl-som-imx6ul-defconfig-for-sil16.patch |   33 +
 ...-update-cl-som-imx6ul-defconfig-for-mcs78.patch |   39 +
 ...6UL-rename-the-dts-files-of-cl-som-imx6ul.patch | 1427 +++++++++++++++++++
 ...-update-cl-som-imx6ul-defconfig-for-syste.patch |   72 +
 ...-update-cl-som-imx6ul-defconfig-for-ads78.patch |   30 +
 ...-update-cl-som-imx6ul-defconfig-for-WiFi-.patch |  115 ++
 ....MX6UL-add-nand-support-for-cl-som-imx6ul.patch |  101 ++
 ...i.MX6UL-enable-cl-som-imx6ul-in-defconfig.patch |   27 +
 ...-dts-fix-the-spi-flash-compatibility-stri.patch |   30 +
 ...i.MX6UL-add-depends-property-to-gpmi-nand.patch |   30 +
 ...X6UL-dts-set-timing1-as-default-for-lcdif.patch |   26 +
 ...RM-i.MX6UL-update-cl-som-imx6ul-defconfig.patch |  320 +++++
 ...M-i.MX6UL-dts-fix-u-boot-environment-size.patch |   29 +
 ...6UL-dts-update-cl-som-imx6ul-model-string.patch |   54 +
 ...RM-i.MX6UL-fix-usdhc1-cd-wp-gpio-settings.patch |   28 +
 ...RM-i.MX6UL-move-tsc2046-to-the-ecspi4-bus.patch |  132 ++
 ...i.MX6UL-enable-flexcan1-for-cl-som-imx6ul.patch |   45 +
 ...6UL-add-aliases-for-cl-som-imx6ul-devices.patch |   32 +
 ...ARM-i.MX6UL-adjust-usdhc2-pad-conf-values.patch |   44 +
 ...ARM-i.MX6UL-adjust-usdhc1-pad-conf-values.patch |   38 +
 ...L-audio-0-add-analog-audio-support-switch.patch |   38 +
 ...-i.MX6UL-audio-1-add-analog-audio-support.patch |  113 ++
 ....MX6UL-audio-2-adjust-sai2.MCLK-direction.patch |   63 +
 ...-audio-3-update-defconfig-for-analog-audi.patch |   28 +
 ...35-ARM-i.MX6UL-update-defconfig-for-lcdif.patch |  284 ++++
 .../0036-ARM-i.MX6UL-enable-sdma.patch             |   30 +
 .../0037-ARM-i.MX6UL-fix-gpmi-depends-string.patch |   28 +
 ...0038-ARM-i.MX6UL-disable-ocotp-for-wilink.patch |   34 +
 .../0039-ARM-i.MX6UL-wm8731-refactoring.patch      |   53 +
 .../linux-compulab-4.1.15/cl-som-imx6ul/defconfig  |  551 +++++++
 .../0001-ARM-dts-update-support-for-cm-fx6.patch   | 1497 ++++++++++++++++++++
 ...M-i.MX6-cm-fx6-add-cm-fx6-platform-driver.patch |  173 +++
 .../0003-ARM-i.MX6-cm-fx6-Add-defconfig.patch      |  486 +++++++
 .../0004-ARM-i.MX6-cm-fx6-add-gpc-node.patch       |   31 +
 ...-ARM-i.MX6-audio-add-analog-audio-support.patch |  172 +++
 ...M-i.MX6-add-depends-property-to-gpmi-nand.patch |   31 +
 .../0007-ARM-i.MX6-update-defconfig-for-nand.patch |  271 ++++
 .../cm-fx6/0008-ARM-i.MX6-add-mxc_dvi-driver.patch |  479 +++++++
 ...ts-refactoring-of-the-second-video-output.patch |   38 +
 .../0010-ARM-i.MX6-dts-ldo-hdmi-changes.patch      |   35 +
 ...1-ARM-i.MX6-dts-udshc3-set-polarity-value.patch |   28 +
 .../0012-ARM-i.MX6-dts-sata-refactoring.patch      |   31 +
 .../0013-ARM-i.MX6-dts-ldb-refactoring.patch       |   92 ++
 .../0014-ARM-i.MX6-dts-enable-mipi_dsi.patch       |   85 ++
 .../cm-fx6/0015-ARM-i.MX6-pcie-refactoring.patch   |  169 +++
 ...16-ARM-i.MX6-dts-clean-up-unnecesary-code.patch |   53 +
 .../cm-fx6/0017-ARM-i.MX6-update-defconfig.patch   |   34 +
 ...luetooth-btmrvl-disable-SD8787-AMP-device.patch |   36 +
 ...019-ARM-i.MX6-HDMI-Fix-HDMI-PHY-init-hang.patch |   31 +
 .../linux/linux-compulab-4.1.15/cm-fx6/defconfig   |  438 ++++++
 recipes-kernel/linux/linux-compulab_4.1.15.bb      |   98 ++
 62 files changed, 11802 insertions(+)
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/0001-platform-add-depends-property-handler.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0001-ARM-i.MX6UL-dts-Add-initial-support-for-cl-som-imx6u.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0002-ARM-i.MX6UL-add-defconfig-for-cl-som-imx6ul.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0003-ARM-i.MX6UL-Add-cl-som-imx6ul-platform-driver.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0004-Bluetooth-Add-tty-HCI-driver.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0005-btwilink-add-minimal-device-tree-support.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0006-ARM-i.MX6UL-cl-som-imx6ul-add-support-for-WiLink8.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0007-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-wilin.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0008-ARM-i.MX6UL-update-defconfig-for-cl-som-imx6ul.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0009-sil164-add-dvi-transmitter-simple-driver.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0010-ARM-imx6ul-dvi-enable-dvi-output-on-cl-sb-som.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0011-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-sil16.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0012-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-mcs78.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0013-ARM-i.MX6UL-rename-the-dts-files-of-cl-som-imx6ul.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0014-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-syste.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0015-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-ads78.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0016-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-WiFi-.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0017-ARM-i.MX6UL-add-nand-support-for-cl-som-imx6ul.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0018-ARM-i.MX6UL-enable-cl-som-imx6ul-in-defconfig.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0019-ARM-i.MX6UL-dts-fix-the-spi-flash-compatibility-stri.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0020-ARM-i.MX6UL-add-depends-property-to-gpmi-nand.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0021-ARM-i.MX6UL-dts-set-timing1-as-default-for-lcdif.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0022-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0023-ARM-i.MX6UL-dts-fix-u-boot-environment-size.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0024-ARM-i.MX6UL-dts-update-cl-som-imx6ul-model-string.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0025-ARM-i.MX6UL-fix-usdhc1-cd-wp-gpio-settings.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0026-ARM-i.MX6UL-move-tsc2046-to-the-ecspi4-bus.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0027-ARM-i.MX6UL-enable-flexcan1-for-cl-som-imx6ul.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0028-ARM-i.MX6UL-add-aliases-for-cl-som-imx6ul-devices.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0029-ARM-i.MX6UL-adjust-usdhc2-pad-conf-values.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0030-ARM-i.MX6UL-adjust-usdhc1-pad-conf-values.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0031-ARM-i.MX6UL-audio-0-add-analog-audio-support-switch.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0032-ARM-i.MX6UL-audio-1-add-analog-audio-support.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0033-ARM-i.MX6UL-audio-2-adjust-sai2.MCLK-direction.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0034-ARM-i.MX6UL-audio-3-update-defconfig-for-analog-audi.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0035-ARM-i.MX6UL-update-defconfig-for-lcdif.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0036-ARM-i.MX6UL-enable-sdma.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0037-ARM-i.MX6UL-fix-gpmi-depends-string.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0038-ARM-i.MX6UL-disable-ocotp-for-wilink.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0039-ARM-i.MX6UL-wm8731-refactoring.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/defconfig
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0001-ARM-dts-update-support-for-cm-fx6.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0002-ARM-i.MX6-cm-fx6-add-cm-fx6-platform-driver.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0003-ARM-i.MX6-cm-fx6-Add-defconfig.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0004-ARM-i.MX6-cm-fx6-add-gpc-node.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0005-ARM-i.MX6-audio-add-analog-audio-support.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0006-ARM-i.MX6-add-depends-property-to-gpmi-nand.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0007-ARM-i.MX6-update-defconfig-for-nand.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0008-ARM-i.MX6-add-mxc_dvi-driver.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0009-ARM-i.MX6-dts-refactoring-of-the-second-video-output.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0010-ARM-i.MX6-dts-ldo-hdmi-changes.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0011-ARM-i.MX6-dts-udshc3-set-polarity-value.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0012-ARM-i.MX6-dts-sata-refactoring.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0013-ARM-i.MX6-dts-ldb-refactoring.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0014-ARM-i.MX6-dts-enable-mipi_dsi.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0015-ARM-i.MX6-pcie-refactoring.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0016-ARM-i.MX6-dts-clean-up-unnecesary-code.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0017-ARM-i.MX6-update-defconfig.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0018-Bluetooth-btmrvl-disable-SD8787-AMP-device.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0019-ARM-i.MX6-HDMI-Fix-HDMI-PHY-init-hang.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/defconfig
 create mode 100644 recipes-kernel/linux/linux-compulab_4.1.15.bb

diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/0001-platform-add-depends-property-handler.patch b/recipes-kernel/linux/linux-compulab-4.1.15/0001-platform-add-depends-property-handler.patch
new file mode 100644
index 0000000..3759a39
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/0001-platform-add-depends-property-handler.patch
@@ -0,0 +1,77 @@
+From 6651575b5a01d56c31c17a2aef1f9f76fa57b90a Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Mon, 13 Jun 2016 13:36:53 +0300
+Subject: [PATCH] platform: add 'depends' property handler
+
+Add 'depends' property handler.
+The purpose is to create a kind of dependency between devices.
+The field contains the name of the device that the loaded
+driver depends on. The device driver reads this property
+and decides either continue or postpone the device probing.
+This is an optional property. The fact that the device node does
+not have such the property makes no changes in the device probing.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ drivers/base/platform.c | 32 ++++++++++++++++++++++++++++++++
+ 1 file changed, 32 insertions(+)
+
+diff --git a/drivers/base/platform.c b/drivers/base/platform.c
+index 7403de9..89db6d7 100644
+--- a/drivers/base/platform.c
++++ b/drivers/base/platform.c
+@@ -23,6 +23,7 @@
+ #include <linux/pm_runtime.h>
+ #include <linux/pm_domain.h>
+ #include <linux/idr.h>
++#include <linux/i2c.h>
+ #include <linux/acpi.h>
+ #include <linux/clk/clk-conf.h>
+ #include <linux/limits.h>
+@@ -502,12 +503,43 @@ err_alloc:
+ }
+ EXPORT_SYMBOL_GPL(platform_device_register_full);
+ 
++static int platform_drv_check_dep(struct device_node *of_node)
++{
++	struct device_node *np;
++	struct platform_device *pdev;
++	struct i2c_client *client;
++	const char *depends;
++	int ret;
++
++	depends = of_get_property(of_node, "depends", NULL);
++	if (!depends)
++		return 0;
++
++	np = of_find_node_by_path(depends);
++	if (!np)
++		return 1;
++
++	pdev=of_find_device_by_node(np);
++	if (!pdev) {
++		client = of_find_i2c_device_by_node(np);
++		ret = (!client || !client->dev.driver);
++	} else {
++		ret = (!pdev || !pdev->dev.driver);
++	}
++
++	of_node_put(np);
++	return ret;
++}
++
+ static int platform_drv_probe(struct device *_dev)
+ {
+ 	struct platform_driver *drv = to_platform_driver(_dev->driver);
+ 	struct platform_device *dev = to_platform_device(_dev);
+ 	int ret;
+ 
++	if (platform_drv_check_dep(dev->dev.of_node))
++		return -EPROBE_DEFER;
++
+ 	ret = of_clk_set_defaults(_dev->of_node, false);
+ 	if (ret < 0)
+ 		return ret;
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0001-ARM-i.MX6UL-dts-Add-initial-support-for-cl-som-imx6u.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0001-ARM-i.MX6UL-dts-Add-initial-support-for-cl-som-imx6u.patch
new file mode 100644
index 0000000..1305838
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0001-ARM-i.MX6UL-dts-Add-initial-support-for-cl-som-imx6u.patch
@@ -0,0 +1,524 @@
+From 9cea4970c370c85525ec536e4a5aef1ed057dee9 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Wed, 28 Oct 2015 18:00:34 +0200
+Subject: [PATCH 01/39] ARM: i.MX6UL: dts: Add initial support for
+ cl-som-imx6ul
+
+Add initial support for cl-som-imx6ul.
+
+This patch configures:
+1) serial console
+2) hearbeat led
+3) RTC: svns, em3027
+4) FreeScale NIC
+5) MMC
+6) eMMC
+7) USB
+8) OTG
+9) SPI
+10) LCDIF
+11) touch screen
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/cl-som-imx6ul.dts | 488 ++++++++++++++++++++++++++++++++++++
+ 1 file changed, 488 insertions(+)
+ create mode 100644 arch/arm/boot/dts/cl-som-imx6ul.dts
+
+diff --git a/arch/arm/boot/dts/cl-som-imx6ul.dts b/arch/arm/boot/dts/cl-som-imx6ul.dts
+new file mode 100644
+index 0000000..29a3713e
+--- /dev/null
++++ b/arch/arm/boot/dts/cl-som-imx6ul.dts
+@@ -0,0 +1,488 @@
++/*
++ * Copyright (C) 2015 CompuLab LTD.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++/dts-v1/;
++
++#include <dt-bindings/input/input.h>
++#include "imx6ul.dtsi"
++
++/ {
++	model = "CompuLab i.MX6 UltraLite SoM";
++	compatible = "fsl,imx6ul";
++
++	memory {
++		reg = <0x80000000 0x20000000>;
++	};
++
++	chosen {
++		stdout-path = &uart3;
++	};
++
++	backlight {
++		compatible = "pwm-backlight";
++		pwms = <&pwm1 0 5000000>;
++		brightness-levels = <0 4 8 16 32 64 128 255>;
++		default-brightness-level = <6>;
++		status = "okay";
++	};
++
++	pu_dummy: pudummy_reg {
++		compatible = "fsl,imx6-dummy-pureg";
++	};
++
++	regulators {
++		compatible = "simple-bus";
++		#address-cells = <1>;
++		#size-cells = <0>;
++
++		reg_sd2_vmmc: regulator at 0 {
++			compatible = "regulator-fixed";
++			regulator-name = "VSD_3V3";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			gpio = <&gpio4 10 GPIO_ACTIVE_HIGH>;
++			enable-active-high;
++		};
++
++		reg_usb_otg1_vbus: regulator at 1 {
++			compatible = "regulator-fixed";
++			pinctrl-names = "default";
++			pinctrl-0 = <&pinctrl_usb_otg1>;
++			regulator-name = "usb_otg1_vbus";
++			regulator-min-microvolt = <5000000>;
++			regulator-max-microvolt = <5000000>;
++			gpio = <&gpio1 4 GPIO_ACTIVE_HIGH>;
++			enable-active-high;
++		};
++
++		reg_phy_nreset: regulator at 2 {
++			compatible = "regulator-fixed";
++			regulator-name = "phy_nreset";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			gpio = <&gpio5 8 GPIO_ACTIVE_HIGH>;
++			enable-active-high;
++			regulator-always-on;
++		};
++
++		reg_div_en_3v3: div_en_3v3 {
++			compatible = "regulator-fixed";
++			regulator-name = "dvi_en_3v3";
++			gpio = <&pca9555 13 0>;
++			enable-active-high;
++		};
++
++		reg_lcd_nstby_3v3: lcd_nstby_3v3 {
++			compatible = "regulator-fixed";
++			regulator-name = "lcd_nstby_3v3";
++			gpio = <&pca9555 14 0>;
++			enable-active-high;
++			regulator-always-on;
++		};
++
++		tsc2046reg: tsc2046-reg {
++			compatible = "regulator-fixed";
++			regulator-name = "tsc2046-reg";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			regulator-always-on;
++		};
++	};
++
++	leds {
++		compatible = "gpio-leds";
++
++		debug-led {
++			label = "Heartbeat";
++			gpios = <&gpio5 4 0>;
++			linux,default-trigger = "heartbeat";
++		};
++	};
++};
++
++&iomuxc {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_hog_1>;
++	imx6ul-som-compulab {
++		pinctrl_hog_1: hoggrp-1 {
++			fsl,pins = <
++				/* Heartbeat */
++				MX6UL_PAD_SNVS_TAMPER4__GPIO5_IO04 0x17059
++				/* eMMC nReset */
++				MX6UL_PAD_NAND_ALE__GPIO4_IO10	0x17059
++				/* Phy nReset */
++				MX6UL_PAD_SNVS_TAMPER8__GPIO5_IO08	0x17059
++			>;
++		};
++
++		pinctrl_enet1: enet1grp {
++			fsl,pins = <
++				MX6UL_PAD_GPIO1_IO07__ENET1_MDC		0x1b0b0
++				MX6UL_PAD_GPIO1_IO06__ENET1_MDIO	0x1b0b0
++				MX6UL_PAD_ENET1_RX_EN__ENET1_RX_EN	0x1b0b0
++				MX6UL_PAD_ENET1_RX_ER__ENET1_RX_ER	0x1b0b0
++				MX6UL_PAD_ENET1_RX_DATA0__ENET1_RDATA00	0x1b0b0
++				MX6UL_PAD_ENET1_RX_DATA1__ENET1_RDATA01	0x1b0b0
++				MX6UL_PAD_ENET1_TX_EN__ENET1_TX_EN	0x1b0b0
++				MX6UL_PAD_ENET1_TX_DATA0__ENET1_TDATA00	0x1b0b0
++				MX6UL_PAD_ENET1_TX_DATA1__ENET1_TDATA01	0x1b0b0
++				MX6UL_PAD_ENET1_TX_CLK__ENET1_REF_CLK1	0x4001b031
++				MX6UL_PAD_SNVS_TAMPER5__GPIO5_IO05	0x80000000
++			>;
++		};
++
++		pinctrl_uart3: uart3grp {
++			fsl,pins = <
++				MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX 0x1b0b1
++				MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX 0x1b0b1
++			>;
++		};
++
++		pinctrl_usdhc1: usdhc1grp {
++			fsl,pins = <
++				MX6UL_PAD_SD1_CMD__USDHC1_CMD     0x17059
++				MX6UL_PAD_SD1_CLK__USDHC1_CLK     0x17059
++				MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x17059
++				MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x17059
++				MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x17059
++				MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x17059
++				MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059
++				MX6UL_PAD_UART1_CTS_B__GPIO1_IO18 0x17059
++			>;
++		};
++
++		pinctrl_usdhc2: usdhc2grp {
++			fsl,pins = <
++				MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x17059
++				MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x17059
++				MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x17059
++				MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x17059
++				MX6UL_PAD_NAND_DATA04__USDHC2_DATA4 0x17059
++				MX6UL_PAD_NAND_DATA05__USDHC2_DATA5 0x17059
++				MX6UL_PAD_NAND_DATA06__USDHC2_DATA6 0x17059
++				MX6UL_PAD_NAND_DATA07__USDHC2_DATA7 0x17059
++				MX6UL_PAD_NAND_WE_B__USDHC2_CMD	0x17059
++				MX6UL_PAD_NAND_RE_B__USDHC2_CLK	0x17059
++			>;
++		};
++
++		/* pins for spi */
++		pinctrl_ecspi2_cs: ecspi2_cs_grp {
++			fsl,pins = <
++				MX6UL_PAD_LCD_RESET__GPIO3_IO04  0x17059
++			>;
++		};
++
++		pinctrl_ecspi2: ecspi2grp {
++			fsl,pins = <
++				MX6UL_PAD_UART5_TX_DATA__ECSPI2_MOSI	0x1b0b1
++				MX6UL_PAD_UART5_RX_DATA__ECSPI2_MISO	0x1b0b1
++				MX6UL_PAD_UART4_TX_DATA__ECSPI2_SCLK	0x1b0b1
++			>;
++		};
++
++		pinctrl_ecspi4_cs: ecspi4_cs_grp {
++			fsl,pins = <
++				MX6UL_PAD_ENET2_RX_ER__GPIO2_IO15	0x17059
++			>;
++		};
++
++		pinctrl_ecspi4: ecspi4grp {
++			fsl,pins = <
++				MX6UL_PAD_ENET2_TX_EN__ECSPI4_MOSI	0x1b0b1
++				MX6UL_PAD_ENET2_TX_CLK__ECSPI4_MISO	0x1b0b1
++				MX6UL_PAD_ENET2_TX_DATA1__ECSPI4_SCLK	0x1b0b1
++			>;
++		};
++
++		pinctrl_i2c1: i2c1grp {
++			fsl,pins = <
++				MX6UL_PAD_GPIO1_IO02__I2C1_SCL	0x4001b8b0
++				MX6UL_PAD_GPIO1_IO03__I2C1_SDA	0x4001b8b0
++			>;
++		};
++
++		pinctrl_i2c3: i2c3grp {
++			fsl,pins = <
++				MX6UL_PAD_UART1_TX_DATA__I2C3_SCL 0x4001b8b0
++				MX6UL_PAD_UART1_RX_DATA__I2C3_SDA 0x4001b8b0
++			>;
++		};
++
++		pinctrl_usb_otg1_id: usbotg1idgrp {
++			fsl,pins = <
++				MX6UL_PAD_GPIO1_IO00__ANATOP_OTG1_ID	0x17059
++			>;
++		};
++
++		pinctrl_usb_otg1: usbotg1grp {
++			fsl,pins = <
++				MX6UL_PAD_GPIO1_IO04__GPIO1_IO04        0x10b0
++			>;
++		};
++
++		pinctrl_lcdif_dat: lcdifdatgrp {
++			fsl,pins = <
++				MX6UL_PAD_LCD_DATA00__LCDIF_DATA00  0x79
++				MX6UL_PAD_LCD_DATA01__LCDIF_DATA01  0x79
++				MX6UL_PAD_LCD_DATA02__LCDIF_DATA02  0x79
++				MX6UL_PAD_LCD_DATA03__LCDIF_DATA03  0x79
++				MX6UL_PAD_LCD_DATA04__LCDIF_DATA04  0x79
++				MX6UL_PAD_LCD_DATA05__LCDIF_DATA05  0x79
++				MX6UL_PAD_LCD_DATA06__LCDIF_DATA06  0x79
++				MX6UL_PAD_LCD_DATA07__LCDIF_DATA07  0x79
++				MX6UL_PAD_LCD_DATA08__LCDIF_DATA08  0x79
++				MX6UL_PAD_LCD_DATA09__LCDIF_DATA09  0x79
++				MX6UL_PAD_LCD_DATA10__LCDIF_DATA10  0x79
++				MX6UL_PAD_LCD_DATA11__LCDIF_DATA11  0x79
++				MX6UL_PAD_LCD_DATA12__LCDIF_DATA12  0x79
++				MX6UL_PAD_LCD_DATA13__LCDIF_DATA13  0x79
++				MX6UL_PAD_LCD_DATA14__LCDIF_DATA14  0x79
++				MX6UL_PAD_LCD_DATA15__LCDIF_DATA15  0x79
++				MX6UL_PAD_LCD_DATA16__LCDIF_DATA16  0x79
++				MX6UL_PAD_LCD_DATA17__LCDIF_DATA17  0x79
++				MX6UL_PAD_LCD_DATA18__LCDIF_DATA18  0x79
++				MX6UL_PAD_LCD_DATA19__LCDIF_DATA19  0x79
++				MX6UL_PAD_LCD_DATA20__LCDIF_DATA20  0x79
++				MX6UL_PAD_LCD_DATA21__LCDIF_DATA21  0x79
++				MX6UL_PAD_LCD_DATA22__LCDIF_DATA22  0x79
++				MX6UL_PAD_LCD_DATA23__LCDIF_DATA23  0x79
++			>;
++		};
++
++		pinctrl_lcdif_ctrl: lcdifctrlgrp {
++			fsl,pins = <
++				MX6UL_PAD_LCD_CLK__LCDIF_CLK	    0x79
++				MX6UL_PAD_LCD_ENABLE__LCDIF_ENABLE  0x79
++				MX6UL_PAD_LCD_HSYNC__LCDIF_HSYNC    0x79
++				MX6UL_PAD_LCD_VSYNC__LCDIF_VSYNC    0x79
++			>;
++		};
++
++		pinctrl_pwm1: pwm1grp {
++			fsl,pins = <
++				MX6UL_PAD_GPIO1_IO08__PWM1_OUT   0x110b0
++			>;
++		};
++
++		pinctrl_tsc2046: tsc2046grp {
++			fsl,pins = <
++				/* tsc2046 PENDOWN */
++				MX6UL_PAD_GPIO1_IO01__GPIO1_IO01  0x80000000
++			>;
++		};
++	};
++};
++
++&uart3 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_uart3>;
++	status = "okay";
++};
++
++&usdhc1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usdhc1>;
++        cd-gpios = <&gpio1 19 0>;
++        wp-gpios = <&gpio1 18 0>;
++	keep-power-in-suspend;
++	enable-sdio-wakeup;
++	status = "okay";
++};
++
++&usdhc2 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usdhc2>;
++	keep-power-in-suspend;
++	enable-sdio-wakeup;
++	non-removable;
++	vmmc-supply = <&reg_sd2_vmmc>;
++	status = "okay";
++};
++
++&ecspi2 {
++	fsl,spi-num-chipselects = <1>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_ecspi2 &pinctrl_ecspi2_cs>;
++	cs-gpios = <&gpio3 4 0>;
++	status = "okay";
++
++	/* touch controller */
++	touch:	tsc2046 at 0 {
++		pinctrl-names = "default";
++		pinctrl-0 = <&pinctrl_tsc2046>;
++
++		compatible = "ti,tsc2046";
++		vcc-supply = <&tsc2046reg>;
++
++		reg = <0>;
++		spi-max-frequency = <1500000>;
++
++		interrupt-parent = <&gpio1>;
++		interrupts = <1 0>;
++		pendown-gpio = <&gpio1 1 0>;
++
++		ti,x-min = /bits/ 16 <0x0>;
++		ti,x-max = /bits/ 16 <0x0fff>;
++		ti,y-min = /bits/ 16 <0x0>;
++		ti,y-max = /bits/ 16 <0x0fff>;
++
++		ti,x-plate-ohms = /bits/ 16 <180>;
++		ti,pressure-max = /bits/ 16 <255>;
++
++		ti,debounce-max = /bits/ 16 <30>;
++		ti,debounce-tol = /bits/ 16 <10>;
++		ti,debounce-rep = /bits/ 16 <1>;
++
++		linux,wakeup;
++	};
++};
++
++&ecspi4 {
++	fsl,spi-num-chipselects = <1>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_ecspi4 &pinctrl_ecspi4_cs>;
++	cs-gpios = <&gpio2 15 0>;
++	status = "okay";
++
++	m25px16 at 0 {
++		#address-cells = <1>;
++		#size-cells = <1>;
++		compatible = "st,m25px16", "st,m25p";
++		spi-max-frequency = <20000000>;
++		reg = <0>;
++
++		partition at 0 {
++			label = "uboot";
++			reg = <0x0 0xc0000>;
++		};
++
++		partition at c0000 {
++			label = "uboot environment";
++			reg = <0xc0000 0x40000>;
++		};
++
++		partition at 100000 {
++			label = "splash";
++			reg = <0x100000 0x100000>;
++		};
++	};
++};
++
++&fec1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_enet1>;
++	phy-mode = "rmii";
++	phy-handle = <&ethphy0>;
++	status = "okay";
++
++	mdio {
++		#address-cells = <1>;
++		#size-cells = <0>;
++
++		ethphy0: ethernet-phy at 0 {
++			compatible = "ethernet-phy-ieee802.3-c22";
++			reg = <0>;
++		};
++	};
++};
++
++&i2c1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_i2c1>;
++	status = "okay";
++
++	eeprom at 54 {
++		compatible = "at24,24c02";
++		reg = <0x54>;
++		pagesize = <16>;
++	};
++
++	pca9555: pca9555 at 20 {
++		compatible = "nxp,pca9555";
++		gpio-controller;
++		#gpio-cells = <2>;
++		reg = <0x20>;
++	};
++
++	dvicape {
++		compatible = "sil164";
++		reg = <0x39>;
++		powerdn-gpio = <&pca9555 13 0>;
++	};
++};
++
++&i2c3 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_i2c3>;
++	status = "okay";
++
++	eeprom at 50 {
++		compatible = "at24,24c02";
++		reg = <0x50>;
++		pagesize = <16>;
++	};
++
++	rtc at 56 {
++		compatible = "emmicro,em3027";
++		reg = <0x56>;
++	};
++};
++
++&usbotg1 {
++	vbus-supply = <&reg_usb_otg1_vbus>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usb_otg1_id>;
++	dr_mode = "otg";
++	status = "okay";
++};
++
++&usbotg2 {
++	dr_mode = "host";
++	disable-over-current;
++	status = "okay";
++};
++
++&pwm1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_pwm1>;
++	status = "okay";
++};
++
++&lcdif {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_lcdif_dat
++		     &pinctrl_lcdif_ctrl>;
++	display = <&display0>;
++	status = "okay";
++
++	display0: display {
++		bits-per-pixel = <16>;
++		bus-width = <24>;
++
++		display-timings {
++			native-mode = <&timing0>;
++			timing0: timing0 {
++				clock-frequency = <29580000>;
++				hactive = <800>;
++				vactive = <480>;
++				hfront-porch = <16>;
++				hback-porch = <1>;
++				hsync-len = <80>;
++				vback-porch = <13>;
++				vfront-porch = <16>;
++				vsync-len = <16>;
++
++				hsync-active = <0>;
++				vsync-active = <0>;
++				de-active = <1>;
++				pixelclk-active = <0>;
++			};
++		};
++	};
++};
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0002-ARM-i.MX6UL-add-defconfig-for-cl-som-imx6ul.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0002-ARM-i.MX6UL-add-defconfig-for-cl-som-imx6ul.patch
new file mode 100644
index 0000000..23bf0fb
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0002-ARM-i.MX6UL-add-defconfig-for-cl-som-imx6ul.patch
@@ -0,0 +1,473 @@
+From 9878086b73690690f50119665d4779e2418e2adc Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Tue, 17 Nov 2015 15:33:18 +0200
+Subject: [PATCH 02/39] ARM: i.MX6UL: add defconfig for cl-som-imx6ul
+
+Add default configuration file for the CompuLab cl-som-imx6ul.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/configs/cl_som_imx6ul_defconfig | 451 +++++++++++++++++++++++++++++++
+ 1 file changed, 451 insertions(+)
+ create mode 100644 arch/arm/configs/cl_som_imx6ul_defconfig
+
+diff --git a/arch/arm/configs/cl_som_imx6ul_defconfig b/arch/arm/configs/cl_som_imx6ul_defconfig
+new file mode 100644
+index 0000000..da1a9fd
+--- /dev/null
++++ b/arch/arm/configs/cl_som_imx6ul_defconfig
+@@ -0,0 +1,451 @@
++CONFIG_LOCALVERSION="-6UL_ga"
++CONFIG_KERNEL_LZO=y
++CONFIG_SYSVIPC=y
++CONFIG_NO_HZ=y
++CONFIG_HIGH_RES_TIMERS=y
++CONFIG_IKCONFIG=y
++CONFIG_IKCONFIG_PROC=y
++CONFIG_LOG_BUF_SHIFT=18
++CONFIG_CGROUPS=y
++CONFIG_RELAY=y
++CONFIG_BLK_DEV_INITRD=y
++CONFIG_EXPERT=y
++CONFIG_KALLSYMS_ALL=y
++CONFIG_PERF_EVENTS=y
++# CONFIG_SLUB_DEBUG is not set
++# CONFIG_COMPAT_BRK is not set
++CONFIG_MODULES=y
++CONFIG_MODULE_UNLOAD=y
++CONFIG_MODVERSIONS=y
++CONFIG_MODULE_SRCVERSION_ALL=y
++# CONFIG_BLK_DEV_BSG is not set
++CONFIG_GPIO_PCA953X=y
++CONFIG_ARCH_MXC=y
++CONFIG_MACH_IMX51_DT=y
++CONFIG_MACH_EUKREA_CPUIMX51SD=y
++CONFIG_SOC_IMX50=y
++CONFIG_SOC_IMX53=y
++CONFIG_SOC_IMX6Q=y
++CONFIG_SOC_IMX6SL=y
++CONFIG_SOC_IMX6SX=y
++CONFIG_SOC_IMX6UL=y
++CONFIG_SOC_IMX7D=y
++CONFIG_SOC_VF610=y
++# CONFIG_SWP_EMULATE is not set
++CONFIG_SMP=y
++CONFIG_HAVE_ARM_ARCH_TIMER=y
++CONFIG_VMSPLIT_2G=y
++CONFIG_PREEMPT=y
++CONFIG_AEABI=y
++CONFIG_HIGHMEM=y
++CONFIG_CMA=y
++CONFIG_CMDLINE="noinitrd console=ttymxc0,115200"
++CONFIG_CPU_FREQ=y
++CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
++CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
++CONFIG_CPU_FREQ_GOV_USERSPACE=y
++CONFIG_CPU_FREQ_GOV_ONDEMAND=y
++CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
++CONFIG_ARM_IMX6Q_CPUFREQ=y
++CONFIG_ARM_IMX7D_CPUFREQ=y
++CONFIG_CPU_IDLE=y
++CONFIG_VFP=y
++CONFIG_NEON=y
++CONFIG_BINFMT_MISC=m
++CONFIG_PM_RUNTIME=y
++CONFIG_PM_DEBUG=y
++CONFIG_PM_TEST_SUSPEND=y
++CONFIG_NET=y
++CONFIG_PACKET=y
++CONFIG_UNIX=y
++CONFIG_INET=y
++CONFIG_IP_PNP=y
++CONFIG_IP_PNP_DHCP=y
++# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
++# CONFIG_INET_XFRM_MODE_TUNNEL is not set
++# CONFIG_INET_XFRM_MODE_BEET is not set
++# CONFIG_INET_LRO is not set
++CONFIG_IPV6=y
++CONFIG_NETFILTER=y
++CONFIG_VLAN_8021Q=y
++CONFIG_LLC2=y
++CONFIG_CAN=y
++CONFIG_CAN_FLEXCAN=y
++CONFIG_CAN_M_CAN=y
++CONFIG_BT=y
++CONFIG_BT_RFCOMM=y
++CONFIG_BT_RFCOMM_TTY=y
++CONFIG_BT_BNEP=y
++CONFIG_BT_BNEP_MC_FILTER=y
++CONFIG_BT_BNEP_PROTO_FILTER=y
++CONFIG_BT_HIDP=y
++CONFIG_BT_HCIBTUSB=y
++CONFIG_BT_HCIUART=y
++CONFIG_BT_HCIUART_H4=y
++CONFIG_BT_HCIUART_BCSP=y
++CONFIG_BT_HCIUART_ATH3K=y
++CONFIG_BT_HCIBCM203X=y
++CONFIG_BT_ATH3K=y
++CONFIG_CFG80211=y
++CONFIG_MAC80211=y
++CONFIG_DEVTMPFS=y
++CONFIG_DEVTMPFS_MOUNT=y
++# CONFIG_STANDALONE is not set
++CONFIG_DMA_CMA=y
++CONFIG_CMA_SIZE_MBYTES=320
++CONFIG_IMX_WEIM=y
++CONFIG_CONNECTOR=y
++CONFIG_MTD=y
++CONFIG_MTD_CMDLINE_PARTS=y
++CONFIG_MTD_BLOCK=y
++CONFIG_MTD_CFI=y
++CONFIG_MTD_JEDECPROBE=y
++CONFIG_MTD_CFI_INTELEXT=y
++CONFIG_MTD_CFI_AMDSTD=y
++CONFIG_MTD_CFI_STAA=y
++CONFIG_MTD_PHYSMAP_OF=y
++CONFIG_MTD_DATAFLASH=y
++CONFIG_MTD_M25P80=y
++CONFIG_MTD_SST25L=y
++CONFIG_MTD_NAND=y
++CONFIG_MTD_NAND_GPMI_NAND=y
++CONFIG_MTD_NAND_MXC=y
++CONFIG_MTD_SPI_NOR=y
++CONFIG_SPI_FSL_QUADSPI=y
++CONFIG_MTD_UBI=y
++CONFIG_BLK_DEV_LOOP=y
++CONFIG_BLK_DEV_RAM=y
++CONFIG_BLK_DEV_RAM_SIZE=65536
++CONFIG_SENSORS_FXOS8700=y
++CONFIG_SENSORS_FXAS2100X=y
++CONFIG_EEPROM_AT24=y
++CONFIG_EEPROM_AT25=y
++# CONFIG_SCSI_PROC_FS is not set
++CONFIG_BLK_DEV_SD=y
++CONFIG_SCSI_MULTI_LUN=y
++CONFIG_SCSI_CONSTANTS=y
++CONFIG_SCSI_LOGGING=y
++CONFIG_SCSI_SCAN_ASYNC=y
++# CONFIG_SCSI_LOWLEVEL is not set
++CONFIG_ATA=y
++CONFIG_SATA_AHCI_PLATFORM=y
++CONFIG_AHCI_IMX=y
++CONFIG_PATA_IMX=y
++CONFIG_NETDEVICES=y
++# CONFIG_NET_VENDOR_BROADCOM is not set
++CONFIG_CS89x0=y
++CONFIG_CS89x0_PLATFORM=y
++# CONFIG_NET_VENDOR_FARADAY is not set
++# CONFIG_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
++# CONFIG_NET_VENDOR_NATSEMI is not set
++# CONFIG_NET_VENDOR_SEEQ is not set
++CONFIG_SMC91X=y
++CONFIG_SMC911X=y
++CONFIG_SMSC911X=y
++# CONFIG_NET_VENDOR_STMICRO is not set
++CONFIG_MICREL_PHY=y
++CONFIG_USB_PEGASUS=m
++CONFIG_USB_RTL8150=m
++CONFIG_USB_RTL8152=m
++CONFIG_USB_USBNET=m
++CONFIG_USB_NET_CDC_EEM=m
++CONFIG_ATH_CARDS=y
++CONFIG_ATH6KL=m
++CONFIG_ATH6KL_SDIO=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_INPUT_MOUSEDEV_PSAUX is not set
++CONFIG_INPUT_EVDEV=y
++CONFIG_INPUT_EVBUG=m
++CONFIG_KEYBOARD_GPIO=y
++CONFIG_KEYBOARD_SNVS_PWRKEY=y
++CONFIG_KEYBOARD_IMX=y
++CONFIG_MOUSE_PS2=m
++CONFIG_MOUSE_PS2_ELANTECH=y
++CONFIG_INPUT_TOUCHSCREEN=y
++CONFIG_TOUCHSCREEN_ADS7846=m
++CONFIG_TOUCHSCREEN_EGALAX=y
++CONFIG_TOUCHSCREEN_ELAN=y
++CONFIG_TOUCHSCREEN_MAX11801=y
++CONFIG_TOUCHSCREEN_IMX6UL_TSC=y
++CONFIG_TOUCHSCREEN_MC13783=y
++CONFIG_TOUCHSCREEN_TSC2007=y
++CONFIG_TOUCHSCREEN_STMPE=y
++CONFIG_INPUT_MISC=y
++CONFIG_INPUT_MMA8450=y
++CONFIG_INPUT_ISL29023=y
++CONFIG_INPUT_MPL3115=y
++CONFIG_SENSOR_FXLS8471=y
++CONFIG_SERIO_SERPORT=m
++# CONFIG_LEGACY_PTYS is not set
++# CONFIG_DEVKMEM is not set
++CONFIG_SERIAL_IMX=y
++CONFIG_SERIAL_IMX_CONSOLE=y
++CONFIG_SERIAL_FSL_LPUART=y
++CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
++CONFIG_FSL_OTP=y
++# CONFIG_I2C_COMPAT is not set
++CONFIG_I2C_CHARDEV=y
++# CONFIG_I2C_HELPER_AUTO is not set
++CONFIG_I2C_ALGOPCF=m
++CONFIG_I2C_ALGOPCA=m
++CONFIG_I2C_IMX=y
++CONFIG_SPI=y
++CONFIG_SPI_GPIO=y
++CONFIG_SPI_IMX=y
++CONFIG_GPIO_SYSFS=y
++CONFIG_GPIO_MAX732X=y
++CONFIG_GPIO_74X164=y
++CONFIG_POWER_SUPPLY=y
++CONFIG_SABRESD_MAX8903=y
++CONFIG_IMX6_USB_CHARGER=y
++CONFIG_SENSORS_MAX17135=y
++CONFIG_SENSORS_MAG3110=y
++CONFIG_THERMAL=y
++CONFIG_CPU_THERMAL=y
++CONFIG_IMX_THERMAL=y
++CONFIG_DEVICE_THERMAL=y
++CONFIG_WATCHDOG=y
++CONFIG_IMX2_WDT=y
++CONFIG_MFD_DA9052_I2C=y
++CONFIG_MFD_MC13XXX_SPI=y
++CONFIG_MFD_MC13XXX_I2C=y
++CONFIG_MFD_MAX17135=y
++CONFIG_MFD_SI476X_CORE=y
++CONFIG_MFD_STMPE=y
++CONFIG_REGULATOR=y
++CONFIG_REGULATOR_FIXED_VOLTAGE=y
++CONFIG_REGULATOR_ANATOP=y
++CONFIG_REGULATOR_DA9052=y
++CONFIG_REGULATOR_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_SOC_CAMERA=y
++CONFIG_VIDEO_MX3=y
++CONFIG_V4L_MEM2MEM_DRIVERS=y
++CONFIG_VIDEO_CODA=y
++CONFIG_RADIO_SI476X=y
++CONFIG_SOC_CAMERA_OV2640=y
++CONFIG_DRM=y
++CONFIG_DRM_VIVANTE=y
++CONFIG_FB=y
++CONFIG_FB_MXS=y
++CONFIG_BACKLIGHT_LCD_SUPPORT=y
++CONFIG_LCD_CLASS_DEVICE=y
++CONFIG_LCD_L4F00242T03=y
++CONFIG_LCD_PLATFORM=y
++CONFIG_BACKLIGHT_CLASS_DEVICE=y
++CONFIG_BACKLIGHT_PWM=y
++CONFIG_FB_MXC_SYNC_PANEL=y
++CONFIG_FB_MXC_LDB=y
++CONFIG_FB_MXC_MIPI_DSI_SAMSUNG=y
++CONFIG_FB_MXC_TRULY_WVGA_SYNC_PANEL=y
++CONFIG_FB_MXC_HDMI=y
++CONFIG_FB_MXC_EINK_PANEL=y
++CONFIG_FB_MXC_EINK_V2_PANEL=y
++CONFIG_FB_MXS_SII902X=y
++CONFIG_FB_MXC_DCIC=m
++CONFIG_HANNSTAR_CABC=y
++CONFIG_FRAMEBUFFER_CONSOLE=y
++CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
++CONFIG_LOGO=y
++CONFIG_SOUND=y
++CONFIG_SND=y
++CONFIG_SND_USB_AUDIO=m
++CONFIG_SND_SOC=y
++CONFIG_SND_IMX_SOC=y
++CONFIG_SND_SOC_EUKREA_TLV320=y
++CONFIG_SND_SOC_IMX_CS42888=y
++CONFIG_SND_SOC_IMX_SII902X=y
++CONFIG_SND_SOC_IMX_WM8958=y
++CONFIG_SND_SOC_IMX_WM8960=y
++CONFIG_SND_SOC_IMX_WM8962=y
++CONFIG_SND_SOC_IMX_SGTL5000=y
++CONFIG_SND_SOC_IMX_MQS=y
++CONFIG_SND_SOC_IMX_SPDIF=y
++CONFIG_SND_SOC_IMX_MC13783=y
++CONFIG_SND_SOC_IMX_HDMI=y
++CONFIG_SND_SOC_IMX_SI476X=y
++CONFIG_USB=y
++CONFIG_USB_OTG_WHITELIST=y
++CONFIG_USB_OTG_FSM=y
++CONFIG_USB_EHCI_HCD=y
++CONFIG_USB_EHCI_MXC=y
++CONFIG_USB_HCD_TEST_MODE=y
++CONFIG_USB_ACM=m
++CONFIG_USB_STORAGE=y
++CONFIG_USB_CHIPIDEA=y
++CONFIG_USB_CHIPIDEA_UDC=y
++CONFIG_USB_CHIPIDEA_HOST=y
++CONFIG_USB_SERIAL=m
++CONFIG_USB_SERIAL_GENERIC=y
++CONFIG_USB_SERIAL_FTDI_SIO=m
++CONFIG_USB_SERIAL_OPTION=m
++CONFIG_USB_EHSET_TEST_FIXTURE=y
++CONFIG_NOP_USB_XCEIV=y
++CONFIG_USB_MXS_PHY=y
++CONFIG_USB_GADGET=y
++CONFIG_USB_CONFIGFS=m
++CONFIG_USB_CONFIGFS_SERIAL=y
++CONFIG_USB_CONFIGFS_ACM=y
++CONFIG_USB_CONFIGFS_OBEX=y
++CONFIG_USB_CONFIGFS_NCM=y
++CONFIG_USB_CONFIGFS_ECM=y
++CONFIG_USB_CONFIGFS_ECM_SUBSET=y
++CONFIG_USB_CONFIGFS_RNDIS=y
++CONFIG_USB_CONFIGFS_EEM=y
++CONFIG_USB_CONFIGFS_MASS_STORAGE=y
++CONFIG_USB_CONFIGFS_F_LB_SS=y
++CONFIG_USB_CONFIGFS_F_FS=y
++CONFIG_USB_ZERO=m
++CONFIG_USB_ETH=m
++CONFIG_USB_G_NCM=m
++CONFIG_USB_GADGETFS=m
++CONFIG_USB_MASS_STORAGE=m
++CONFIG_USB_G_SERIAL=m
++CONFIG_MMC=y
++CONFIG_MMC_UNSAFE_RESUME=y
++CONFIG_MMC_SDHCI=y
++CONFIG_MMC_SDHCI_PLTFM=y
++CONFIG_MMC_SDHCI_ESDHC_IMX=y
++CONFIG_MXC_IPU=y
++CONFIG_MXC_GPU_VIV=y
++CONFIG_MXC_IPU_V3_PRE=y
++CONFIG_MXC_MIPI_CSI2=y
++CONFIG_MXC_MLB150=m
++CONFIG_MXC_SIM=y
++CONFIG_NEW_LEDS=y
++CONFIG_LEDS_CLASS=y
++CONFIG_LEDS_GPIO=y
++CONFIG_LEDS_TRIGGERS=y
++CONFIG_LEDS_TRIGGER_TIMER=y
++CONFIG_LEDS_TRIGGER_ONESHOT=y
++CONFIG_LEDS_TRIGGER_HEARTBEAT=y
++CONFIG_LEDS_TRIGGER_BACKLIGHT=y
++CONFIG_LEDS_TRIGGER_GPIO=y
++CONFIG_RTC_CLASS=y
++CONFIG_RTC_INTF_DEV_UIE_EMUL=y
++CONFIG_RTC_DRV_EM3027=y
++CONFIG_RTC_DRV_MC13XXX=y
++CONFIG_RTC_DRV_MXC=y
++CONFIG_RTC_DRV_SNVS=y
++CONFIG_DMADEVICES=y
++CONFIG_MXC_PXP_V2=y
++CONFIG_MXC_PXP_V3=y
++CONFIG_IMX_SDMA=y
++CONFIG_MXS_DMA=y
++CONFIG_STAGING=y
++CONFIG_STAGING_MEDIA=y
++# CONFIG_IOMMU_SUPPORT is not set
++CONFIG_IIO=y
++CONFIG_VF610_ADC=y
++CONFIG_AD2802A=y
++CONFIG_PWM=y
++CONFIG_PWM_IMX=y
++CONFIG_EXT2_FS=y
++CONFIG_EXT2_FS_XATTR=y
++CONFIG_EXT2_FS_POSIX_ACL=y
++CONFIG_EXT2_FS_SECURITY=y
++CONFIG_EXT3_FS=y
++CONFIG_EXT3_FS_POSIX_ACL=y
++CONFIG_EXT3_FS_SECURITY=y
++CONFIG_EXT4_FS=y
++CONFIG_EXT4_FS_POSIX_ACL=y
++CONFIG_EXT4_FS_SECURITY=y
++CONFIG_QUOTA=y
++CONFIG_QUOTA_NETLINK_INTERFACE=y
++# CONFIG_PRINT_QUOTA_WARNING is not set
++CONFIG_AUTOFS4_FS=y
++CONFIG_FUSE_FS=y
++CONFIG_ISO9660_FS=m
++CONFIG_JOLIET=y
++CONFIG_ZISOFS=y
++CONFIG_UDF_FS=m
++CONFIG_MSDOS_FS=m
++CONFIG_VFAT_FS=y
++CONFIG_TMPFS=y
++CONFIG_JFFS2_FS=y
++CONFIG_UBIFS_FS=y
++CONFIG_NFS_FS=y
++CONFIG_NFS_V3_ACL=y
++CONFIG_NFS_V4=y
++CONFIG_ROOT_NFS=y
++CONFIG_NLS_DEFAULT="cp437"
++CONFIG_NLS_CODEPAGE_437=y
++CONFIG_NLS_ASCII=y
++CONFIG_NLS_ISO8859_1=y
++CONFIG_NLS_ISO8859_15=m
++CONFIG_NLS_UTF8=y
++CONFIG_DEBUG_FS=y
++CONFIG_MAGIC_SYSRQ=y
++# CONFIG_SCHED_DEBUG is not set
++# CONFIG_DEBUG_BUGVERBOSE is not set
++# CONFIG_FTRACE is not set
++CONFIG_CORESIGHT=y
++CONFIG_CORESIGHT_LINK_AND_SINK_TMC=y
++CONFIG_CORESIGHT_SINK_TPIU=y
++CONFIG_CORESIGHT_SINK_ETBV10=y
++CONFIG_CORESIGHT_SOURCE_ETM3X=y
++CONFIG_SECURITYFS=y
++CONFIG_CRYPTO_USER=y
++CONFIG_CRYPTO_TEST=m
++CONFIG_CRYPTO_GCM=y
++CONFIG_CRYPTO_CBC=y
++CONFIG_CRYPTO_CTS=y
++CONFIG_CRYPTO_LRW=y
++CONFIG_CRYPTO_XTS=y
++CONFIG_CRYPTO_MD4=y
++CONFIG_CRYPTO_MD5=y
++CONFIG_CRYPTO_MICHAEL_MIC=y
++CONFIG_CRYPTO_RMD128=y
++CONFIG_CRYPTO_RMD160=y
++CONFIG_CRYPTO_RMD256=y
++CONFIG_CRYPTO_RMD320=y
++CONFIG_CRYPTO_SHA1=y
++CONFIG_CRYPTO_SHA512=y
++CONFIG_CRYPTO_TGR192=y
++CONFIG_CRYPTO_WP512=y
++CONFIG_CRYPTO_BLOWFISH=y
++CONFIG_CRYPTO_CAMELLIA=y
++CONFIG_CRYPTO_DES=y
++CONFIG_CRYPTO_TWOFISH=y
++# CONFIG_CRYPTO_ANSI_CPRNG is not set
++CONFIG_CRYPTO_DEV_FSL_CAAM=y
++CONFIG_CRYPTO_DEV_FSL_CAAM_SM=y
++CONFIG_CRYPTO_DEV_FSL_CAAM_SM_TEST=y
++CONFIG_CRYPTO_DEV_FSL_CAAM_SECVIO=y
++CONFIG_CRC_CCITT=m
++CONFIG_CRC_T10DIF=y
++CONFIG_CRC7=m
++CONFIG_LIBCRC32C=m
++CONFIG_FONTS=y
++CONFIG_FONT_8x8=y
++CONFIG_FONT_8x16=y
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0003-ARM-i.MX6UL-Add-cl-som-imx6ul-platform-driver.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0003-ARM-i.MX6UL-Add-cl-som-imx6ul-platform-driver.patch
new file mode 100644
index 0000000..8493be8
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0003-ARM-i.MX6UL-Add-cl-som-imx6ul-platform-driver.patch
@@ -0,0 +1,127 @@
+From cb175983db3deacf0f4b96f639b2cf4d932d91af Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Tue, 17 Nov 2015 14:04:48 +0200
+Subject: [PATCH 03/39] ARM: i.MX6UL: Add cl-som-imx6ul platform driver.
+
+Add cl-som-imx6ul platform driver.
+This patch sets a correct value of the ENET1 reference
+clock mode selection field (GPR1.13 = 1).
+It is required in order to make FEC and PHY work together
+with respect to the CompuLab board design.
+In cl-som-imx6ul boards, ENET ref clock source is a kzs8041 phy.
+Details in the IMX6ULRM.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+
+Conflicts:
+	arch/arm/mach-imx/Kconfig
+	arch/arm/mach-imx/Makefile
+
+Conflicts:
+	arch/arm/mach-imx/Kconfig
+	arch/arm/mach-imx/Makefile
+---
+ arch/arm/boot/dts/cl-som-imx6ul.dts    |  2 +-
+ arch/arm/mach-imx/Kconfig              |  7 ++++++
+ arch/arm/mach-imx/Makefile             |  1 +
+ arch/arm/mach-imx/mach-cl-som-imx6ul.c | 45 ++++++++++++++++++++++++++++++++++
+ 4 files changed, 54 insertions(+), 1 deletion(-)
+ create mode 100644 arch/arm/mach-imx/mach-cl-som-imx6ul.c
+
+diff --git a/arch/arm/boot/dts/cl-som-imx6ul.dts b/arch/arm/boot/dts/cl-som-imx6ul.dts
+index 29a3713e..d15b29d 100644
+--- a/arch/arm/boot/dts/cl-som-imx6ul.dts
++++ b/arch/arm/boot/dts/cl-som-imx6ul.dts
+@@ -13,7 +13,7 @@
+ 
+ / {
+ 	model = "CompuLab i.MX6 UltraLite SoM";
+-	compatible = "fsl,imx6ul";
++	compatible = "fsl,imx6ul", "compulab,cl-som-imx6ul";
+ 
+ 	memory {
+ 		reg = <0x80000000 0x20000000>;
+diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
+index dba87a4..08ee450 100644
+--- a/arch/arm/mach-imx/Kconfig
++++ b/arch/arm/mach-imx/Kconfig
+@@ -620,6 +620,13 @@ config SOC_IMX6UL
+ 	help
+ 	  This enables support for Freescale i.MX6 UltraLite processor.
+ 
++config CL_SOM_IMX6UL
++       bool "CompuLab SoM i.MX6ul board support"
++       depends on SOC_IMX6UL
++
++       help
++        This enables support for CompuLab SoM i.MX6ul board.
++
+ config SOC_IMX7
+ 	bool
+ 	select CPU_V7
+diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile
+index d973b16..e36b1f6 100644
+--- a/arch/arm/mach-imx/Makefile
++++ b/arch/arm/mach-imx/Makefile
+@@ -111,6 +111,7 @@ obj-$(CONFIG_SOC_IMX6SX) += clk-imx6sx.o mach-imx6sx.o ddr3_freq_imx6sx.o \
+ 			    lpddr2_freq_imx6sx.o
+ obj-$(CONFIG_SOC_IMX6UL) += clk-imx6ul.o mach-imx6ul.o ddr3_freq_imx6sx.o \
+ 			    lpddr2_freq_imx6sx.o
++obj-$(CONFIG_CL_SOM_IMX6UL) += mach-cl-som-imx6ul.o
+ obj-$(CONFIG_SOC_IMX7D) += clk-imx7d.o mach-imx7d.o
+ 
+ ifeq ($(CONFIG_SUSPEND),y)
+diff --git a/arch/arm/mach-imx/mach-cl-som-imx6ul.c b/arch/arm/mach-imx/mach-cl-som-imx6ul.c
+new file mode 100644
+index 0000000..c43db1a
+--- /dev/null
++++ b/arch/arm/mach-imx/mach-cl-som-imx6ul.c
+@@ -0,0 +1,45 @@
++/*
++ * Copyright (C) 2015 CompuLab LTD. 
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/of_address.h>
++#include <linux/of_platform.h>
++#include <linux/regmap.h>
++#include <linux/mfd/syscon.h>
++#include <linux/mfd/syscon/imx6q-iomuxc-gpr.h>
++#include <asm/mach/arch.h>
++#include <asm/mach/map.h>
++
++static void __init cl_som_imx6ul_enet_clk_init(void)
++{
++	struct regmap *gpr;
++
++	gpr = syscon_regmap_lookup_by_compatible("fsl,imx6ul-iomuxc-gpr");
++	if (!IS_ERR(gpr))
++		regmap_update_bits(gpr, IOMUXC_GPR1, IMX6UL_GPR1_ENET_CLK_DIR,
++				   1 << 13);
++	else
++		pr_err("failed to find fsl,imx6ul-iomux-gpr regmap\n");
++
++}
++
++static int __init cl_som_imx6ul_init(void)
++{
++	struct device_node *np;
++
++	np = of_find_compatible_node(NULL, NULL, "compulab,cl-som-imx6ul");
++
++	if (!np) {
++		pr_err("failed to find compulab,cl-som-imx6ul\n");
++		return -ENODEV;
++	}
++
++	cl_som_imx6ul_enet_clk_init();
++
++	return 0;
++}
++subsys_initcall(cl_som_imx6ul_init);
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0004-Bluetooth-Add-tty-HCI-driver.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0004-Bluetooth-Add-tty-HCI-driver.patch
new file mode 100644
index 0000000..9c2fef9
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0004-Bluetooth-Add-tty-HCI-driver.patch
@@ -0,0 +1,603 @@
+From 817ab209bd2a59e3a3bc3df9c8fe3cb0cae2fc48 Mon Sep 17 00:00:00 2001
+From: Pavan Savoy <pavan_savoy at ti.com>
+Date: Mon, 15 Oct 2012 17:47:35 -0500
+Subject: [PATCH 04/39] Bluetooth: Add tty HCI driver
+
+tty_hci driver exposes a /dev/hci_tty character device node, that intends to
+emulate a generic /dev/ttyX device that would be used by the user-space
+Bluetooth stacks to send/receive data to/from the WL combo-connectivity
+chipsets.
+
+The device driver has no internal logic of its own to intrepret data & all
+such logic is handled by the user-space stack.
+
+Change-Id: Ifa3860bbc7e252af210fde710bce14143239b552
+Signed-off-by: Pavan Savoy <pavan_savoy at ti.com>
+ [Fixed checkpatch warnings]
+Signed-off-by: Vishal Mahaveer <vishalm at ti.com>
+ [Fixed checkpatch --strict warnings]
+Signed-off-by: Eyal Reizer <eyalr at ti.com>
+---
+ drivers/misc/ti-st/Kconfig   |   8 +
+ drivers/misc/ti-st/Makefile  |   1 +
+ drivers/misc/ti-st/tty_hci.c | 542 +++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 551 insertions(+)
+ create mode 100644 drivers/misc/ti-st/tty_hci.c
+
+diff --git a/drivers/misc/ti-st/Kconfig b/drivers/misc/ti-st/Kconfig
+index f34dcc5..f2df2c7 100644
+--- a/drivers/misc/ti-st/Kconfig
++++ b/drivers/misc/ti-st/Kconfig
+@@ -14,4 +14,12 @@ config TI_ST
+ 	  are returned to relevant protocol drivers based on their
+ 	  packet types.
+ 
++config ST_HCI
++	tristate "HCI TTY emulation driver for Bluetooth"
++	depends on TI_ST
++	help
++	  This enables the TTY device like emulation for HCI used by
++	  user-space Bluetooth stacks.
++	  It will provide a character device for user space Bluetooth stack to
++	  send/receive data over shared transport.
+ endmenu
+diff --git a/drivers/misc/ti-st/Makefile b/drivers/misc/ti-st/Makefile
+index 78d7ebb..4546219 100644
+--- a/drivers/misc/ti-st/Makefile
++++ b/drivers/misc/ti-st/Makefile
+@@ -4,3 +4,4 @@
+ #
+ obj-$(CONFIG_TI_ST) 		+= st_drv.o
+ st_drv-objs			:= st_core.o st_kim.o st_ll.o
++obj-$(CONFIG_ST_HCI)		+= tty_hci.o
+diff --git a/drivers/misc/ti-st/tty_hci.c b/drivers/misc/ti-st/tty_hci.c
+new file mode 100644
+index 0000000..5b27b04
+--- /dev/null
++++ b/drivers/misc/ti-st/tty_hci.c
+@@ -0,0 +1,542 @@
++/*
++ *  TTY emulation for user-space Bluetooth stacks over HCI-H4
++ *  Copyright (C) 2011-2012 Texas Instruments
++ *  Author: Pavan Savoy <pavan_savoy at ti.com>
++ *
++ *  This program is free software; you can redistribute it and/or modify
++ *  it under the terms of the GNU General Public License version 2 as
++ *  published by the Free Software Foundation.
++ *
++ *  This program is distributed in the hope that it will be useful,
++ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *  GNU General Public License for more details.
++ */
++
++/** define one of the following for debugging
++#define DEBUG
++#define VERBOSE
++*/
++
++#define pr_fmt(fmt) "(hci_tty): " fmt
++#include <linux/module.h>
++#include <linux/cdev.h>
++#include <linux/fs.h>
++#include <linux/device.h>
++
++#include <linux/uaccess.h>
++#include <linux/tty.h>
++#include <linux/sched.h>
++
++#include <linux/delay.h>
++#include <linux/firmware.h>
++#include <linux/platform_device.h>
++#include <linux/poll.h>
++#include <linux/skbuff.h>
++#include <linux/interrupt.h>
++
++#include <linux/ti_wilink_st.h>
++
++/* Number of seconds to wait for registration completion
++ * when ST returns PENDING status.
++ */
++#define BT_REGISTER_TIMEOUT   6000	/* 6 sec */
++
++/**
++ * struct ti_st - driver operation structure
++ * @hdev: hci device pointer which binds to bt driver
++ * @reg_status: ST registration callback status
++ * @st_write: write function provided by the ST driver
++ *	to be used by the driver during send_frame.
++ * @wait_reg_completion - completion sync between ti_st_open
++ *	and st_reg_completion_cb.
++ */
++struct ti_st {
++	struct hci_dev *hdev;
++	char reg_status;
++	long (*st_write)(struct sk_buff *);
++	struct completion wait_reg_completion;
++	wait_queue_head_t data_q;
++	struct sk_buff_head rx_list;
++};
++
++#define DEVICE_NAME     "hci_tty"
++
++/***********Functions called from ST driver**********************************/
++/* Called by Shared Transport layer when receive data is
++ * available */
++static long st_receive(void *priv_data, struct sk_buff *skb)
++{
++	struct ti_st	*hst = (void *)priv_data;
++
++	pr_debug("@ %s", __func__);
++#ifdef VERBOSE
++	print_hex_dump(KERN_INFO, ">rx>", DUMP_PREFIX_NONE,
++		       16, 1, skb->data, skb->len, 0);
++#endif
++	skb_queue_tail(&hst->rx_list, skb);
++	wake_up_interruptible(&hst->data_q);
++	return 0;
++}
++
++/* Called by ST layer to indicate protocol registration completion
++ * status.ti_st_open() function will wait for signal from this
++ * API when st_register() function returns ST_PENDING.
++ */
++static void st_reg_completion_cb(void *priv_data, char data)
++{
++	struct ti_st	*lhst = (void *)priv_data;
++
++	pr_info("@ %s\n", __func__);
++	/* Save registration status for use in ti_st_open() */
++	lhst->reg_status = data;
++	/* complete the wait in ti_st_open() */
++	complete(&lhst->wait_reg_completion);
++}
++
++/* protocol structure registered with shared transport */
++#define MAX_BT_CHNL_IDS 3
++static struct st_proto_s ti_st_proto[MAX_BT_CHNL_IDS] = {
++	{
++		.chnl_id = 0x04, /* HCI Events */
++		.hdr_len = 2,
++		.offset_len_in_hdr = 1,
++		.len_size = 1, /* sizeof(plen) in struct hci_event_hdr */
++		.reserve = 8,
++	},
++	{
++		.chnl_id = 0x02, /* ACL */
++		.hdr_len = 4,
++		.offset_len_in_hdr = 2,
++		.len_size = 2,	/* sizeof(dlen) in struct hci_acl_hdr */
++		.reserve = 8,
++	},
++	{
++		.chnl_id = 0x03, /* SCO */
++		.hdr_len = 3,
++		.offset_len_in_hdr = 2,
++		.len_size = 1, /* sizeof(dlen) in struct hci_sco_hdr */
++		.reserve = 8,
++	},
++};
++/** hci_tty_open Function
++ *  This function will perform an register on ST driver.
++ *
++ *  Parameters :
++ *  @file  : File pointer for BT char driver
++ *  @inod  :
++ *  Returns  0 -  on success
++ *           else suitable error code
++ */
++int hci_tty_open(struct inode *inod, struct file *file)
++{
++	int i = 0, err = 0;
++	unsigned long timeleft;
++	struct ti_st *hst;
++
++	pr_info("inside %s (%p, %p)\n", __func__, inod, file);
++
++	hst = kzalloc(sizeof(*hst), GFP_KERNEL);
++	file->private_data = hst;
++	hst = file->private_data;
++
++	for (i = 0; i < MAX_BT_CHNL_IDS; i++) {
++		ti_st_proto[i].priv_data = hst;
++		ti_st_proto[i].max_frame_size = 1026;
++		ti_st_proto[i].recv = st_receive;
++		ti_st_proto[i].reg_complete_cb = st_reg_completion_cb;
++
++		/* Prepare wait-for-completion handler */
++		init_completion(&hst->wait_reg_completion);
++		/* Reset ST registration callback status flag,
++		 * this value will be updated in
++		 * st_reg_completion_cb()
++		 * function whenever it called from ST driver.
++		 */
++		hst->reg_status = -EINPROGRESS;
++
++		err = st_register(&ti_st_proto[i]);
++		if (!err)
++			goto done;
++
++		if (err != -EINPROGRESS) {
++			pr_err("st_register failed %d", err);
++			goto error;
++		}
++
++		/* ST is busy with either protocol
++		 * registration or firmware download.
++		 */
++		pr_debug("waiting for registration completion signal from ST");
++		timeleft = wait_for_completion_timeout
++			(&hst->wait_reg_completion,
++			 msecs_to_jiffies(BT_REGISTER_TIMEOUT));
++		if (!timeleft) {
++			pr_err("Timeout(%d sec),didn't get reg completion signal from ST",
++			       BT_REGISTER_TIMEOUT / 1000);
++			err = -ETIMEDOUT;
++			goto error;
++		}
++
++		/* Is ST registration callback
++		 * called with ERROR status? */
++		if (hst->reg_status != 0) {
++			pr_err("ST registration completed with invalid status %d",
++			       hst->reg_status);
++			err = -EAGAIN;
++			goto error;
++		}
++
++done:
++		hst->st_write = ti_st_proto[i].write;
++		if (!hst->st_write) {
++			pr_err("undefined ST write function");
++			for (i = 0; i < MAX_BT_CHNL_IDS; i++) {
++				/* Undo registration with ST */
++				err = st_unregister(&ti_st_proto[i]);
++				if (err)
++					pr_err("st_unregister() failed with error %d",
++					       err);
++				hst->st_write = NULL;
++			}
++			return -EIO;
++		}
++	}
++
++	skb_queue_head_init(&hst->rx_list);
++	init_waitqueue_head(&hst->data_q);
++
++	return 0;
++
++error:
++	kfree(hst);
++	return err;
++}
++
++/** hci_tty_release Function
++ *  This function will un-registers from the ST driver.
++ *
++ *  Parameters :
++ *  @file  : File pointer for BT char driver
++ *  @inod  :
++ *  Returns  0 -  on success
++ *           else suitable error code
++ */
++int hci_tty_release(struct inode *inod, struct file *file)
++{
++	int err, i;
++	struct ti_st *hst = file->private_data;
++
++	pr_info("inside %s (%p, %p)\n", __func__, inod, file);
++
++	for (i = 0; i < MAX_BT_CHNL_IDS; i++) {
++		err = st_unregister(&ti_st_proto[i]);
++		if (err)
++			pr_err("st_unregister(%d) failed with error %d",
++			       ti_st_proto[i].chnl_id, err);
++	}
++
++	hst->st_write = NULL;
++	skb_queue_purge(&hst->rx_list);
++	kfree(hst);
++	return err;
++}
++
++/** hci_tty_read Function
++ *
++ *  Parameters :
++ *  @file  : File pointer for BT char driver
++ *  @data  : Data which needs to be passed to APP
++ *  @size  : Length of the data passesd
++ *  offset :
++ *  Returns  Size of packet received -  on success
++ *           else suitable error code
++ */
++ssize_t hci_tty_read(struct file *file, char __user *data, size_t size,
++		loff_t *offset)
++{
++	int len = 0, tout;
++	struct sk_buff *skb = NULL, *rskb = NULL;
++	struct ti_st	*hst;
++
++	pr_debug("inside %s (%p, %p, %u, %p)\n",
++		 __func__, file, data, size, offset);
++
++	/* Validate input parameters */
++	if ((NULL == file) || (((NULL == data) || (0 == size)))) {
++		pr_err("Invalid input params passed to %s", __func__);
++		return -EINVAL;
++	}
++
++	hst = file->private_data;
++
++	/* cannot come here if poll-ed before reading
++	 * if not poll-ed wait on the same wait_q
++	 */
++	tout = wait_event_interruptible_timeout(hst->data_q,
++			!skb_queue_empty(&hst->rx_list),
++				msecs_to_jiffies(1000));
++	/* Check for timed out condition */
++	if (0 == tout) {
++		pr_err("Device Read timed out\n");
++		return -ETIMEDOUT;
++	}
++
++	/* hst->rx_list not empty skb already present */
++	skb = skb_dequeue(&hst->rx_list);
++	if (!skb) {
++		pr_err("dequed skb is null?\n");
++		return -EIO;
++	}
++
++#ifdef VERBOSE
++	print_hex_dump(KERN_INFO, ">in>", DUMP_PREFIX_NONE,
++		       16, 1, skb->data, skb->len, 0);
++#endif
++
++	/* Forward the data to the user */
++	if (skb->len >= size) {
++		pr_err("FIONREAD not done before read\n");
++		return -ENOMEM;
++	} else {
++		/* returning skb */
++		rskb = alloc_skb(size, GFP_KERNEL);
++		if (!rskb) {
++			pr_err("alloc_skb error\n");
++			return -ENOMEM;
++		}
++
++		/* cb[0] has the pkt_type 0x04 or 0x02 or 0x03 */
++		memcpy(skb_put(rskb, 1), &skb->cb[0], 1);
++		memcpy(skb_put(rskb, skb->len), skb->data, skb->len);
++
++		if (copy_to_user(data, rskb->data, rskb->len)) {
++			pr_err("unable to copy to user space\n");
++			/* Queue the skb back to head */
++			skb_queue_head(&hst->rx_list, skb);
++			kfree_skb(rskb);
++			return -EIO;
++		}
++	}
++
++	len = rskb->len;	/* len of returning skb */
++	kfree_skb(skb);
++	kfree_skb(rskb);
++	pr_debug("total size read= %d\n", len);
++	return len;
++}
++
++/* hci_tty_write Function
++ *
++ *  Parameters :
++ *  @file   : File pointer for BT char driver
++ *  @data   : packet data from BT application
++ *  @size   : Size of the packet data
++ *  @offset :
++ *  Returns  Size of packet on success
++ *           else suitable error code
++ */
++ssize_t hci_tty_write(struct file *file, const char __user *data,
++		size_t size, loff_t *offset)
++{
++	struct ti_st *hst = file->private_data;
++	struct	sk_buff *skb;
++
++	pr_debug("inside %s (%p, %p, %u, %p)\n",
++		 __func__, file, data, size, offset);
++
++	if (!hst->st_write) {
++		pr_err(" Can't write to ST, hhci_tty->st_write null ?");
++		return -EINVAL;
++	}
++
++	skb = alloc_skb(size, GFP_KERNEL);
++	/* Validate Created SKB */
++	if (NULL == skb) {
++		pr_err("Error aaloacting SKB");
++		return -ENOMEM;
++	}
++
++	/* Forward the data from the user space to ST core */
++	if (copy_from_user(skb_put(skb, size), data, size)) {
++		pr_err(" Unable to copy from user space");
++		kfree_skb(skb);
++		return -EIO;
++	}
++
++#ifdef VERBOSE
++	pr_debug("start data..");
++	print_hex_dump(KERN_INFO, "<out<", DUMP_PREFIX_NONE,
++		       16, 1, skb->data, size, 0);
++	pr_debug("\n..end data");
++#endif
++
++	hst->st_write(skb);
++	return size;
++}
++
++/** hci_tty_ioctl Function
++ *  This will peform the functions as directed by the command and command
++ *  argument.
++ *
++ *  Parameters :
++ *  @file  : File pointer for BT char driver
++ *  @cmd   : IOCTL Command
++ *  @arg   : Command argument for IOCTL command
++ *  Returns  0 on success
++ *           else suitable error code
++ */
++static long hci_tty_ioctl(struct file *file,
++		unsigned int cmd, unsigned long arg)
++{
++	struct sk_buff *skb = NULL;
++	int		retcode = 0;
++	struct ti_st	*hst;
++
++	pr_debug("inside %s (%p, %u, %lx)", __func__, file, cmd, arg);
++
++	/* Validate input parameters */
++	if ((NULL == file) || (0 == cmd)) {
++		pr_err("invalid input parameters passed to %s", __func__);
++		return -EINVAL;
++	}
++
++	hst = file->private_data;
++
++	switch (cmd) {
++	case FIONREAD:
++		/* Deque the SKB from the head if rx_list is not empty
++		 * update the argument with skb->len to provide amount of data
++		 * available in the available SKB +1 for the PKT_TYPE
++		 * field not provided in data by TI-ST.
++		 */
++		skb = skb_dequeue(&hst->rx_list);
++		if (skb != NULL) {
++			*(unsigned int *)arg = skb->len + 1;
++			/* Re-Store the SKB for furtur Read operations */
++			skb_queue_head(&hst->rx_list, skb);
++		} else {
++			*(unsigned int *)arg = 0;
++		}
++		pr_debug("returning %d\n", *(unsigned int *)arg);
++		break;
++	default:
++		pr_debug("Un-Identified IOCTL %d", cmd);
++		retcode = 0;
++		break;
++	}
++
++	return retcode;
++}
++
++/** hci_tty_poll Function
++ *  This function will wait till some data is received to the hci_tty driver from ST
++ *
++ *  Parameters :
++ *  @file  : File pointer for BT char driver
++ *  @wait  : POLL wait information
++ *  Returns  status of POLL on success
++ *           else suitable error code
++ */
++static unsigned int hci_tty_poll(struct file *file, poll_table *wait)
++{
++	struct ti_st	*hst = file->private_data;
++	unsigned long mask = 0;
++
++	pr_debug("@ %s\n", __func__);
++
++	/* wait to be completed by st_receive */
++	poll_wait(file, &hst->data_q, wait);
++	pr_debug("poll broke\n");
++
++	if (!skb_queue_empty(&hst->rx_list)) {
++		pr_debug("rx list que !empty\n");
++		mask |= POLLIN;	/* TODO: check app for mask */
++	}
++
++	return mask;
++}
++
++/* BT Char driver function pointers
++ * These functions are called from USER space by pefroming File Operations
++ * on /dev/hci_tty node exposed by this driver during init
++ */
++const struct file_operations hci_tty_chrdev_ops = {
++	.owner = THIS_MODULE,
++	.open = hci_tty_open,
++	.read = hci_tty_read,
++	.write = hci_tty_write,
++	.unlocked_ioctl = hci_tty_ioctl,
++	.poll = hci_tty_poll,
++	.release = hci_tty_release,
++};
++
++/*********Functions called during insmod and delmod****************************/
++
++static int hci_tty_major;		/* major number */
++static struct class *hci_tty_class;	/* class during class_create */
++static struct device *hci_tty_dev;	/* dev during device_create */
++/** hci_tty_init Function
++ *  This function Initializes the hci_tty driver parametes and exposes
++ *  /dev/hci_tty node to user space
++ *
++ *  Parameters : NULL
++ *  Returns  0 on success
++ *           else suitable error code
++ */
++static int __init hci_tty_init(void)
++{
++	pr_info("inside %s\n", __func__);
++
++	/* Expose the device DEVICE_NAME to user space
++	 * And obtain the major number for the device
++	 */
++	hci_tty_major = register_chrdev(0, DEVICE_NAME, &hci_tty_chrdev_ops);
++
++	if (0 > hci_tty_major) {
++		pr_err("Error when registering to char dev");
++		return hci_tty_major;
++	}
++
++	/*  udev */
++	hci_tty_class = class_create(THIS_MODULE, DEVICE_NAME);
++	if (IS_ERR(hci_tty_class)) {
++		pr_err("Something went wrong in class_create");
++		unregister_chrdev(hci_tty_major, DEVICE_NAME);
++		return -1;
++	}
++
++	hci_tty_dev =
++		device_create(hci_tty_class, NULL, MKDEV(hci_tty_major, 0),
++			      NULL, DEVICE_NAME);
++	if (IS_ERR(hci_tty_dev)) {
++		pr_err("Error in device create");
++		unregister_chrdev(hci_tty_major, DEVICE_NAME);
++		class_destroy(hci_tty_class);
++		return -1;
++	}
++	pr_info("allocated %d, %d\n", hci_tty_major, 0);
++	return 0;
++}
++
++/** hci_tty_exit Function
++ *  This function Destroys the hci_tty driver parametes and /dev/hci_tty node
++ *
++ *  Parameters : NULL
++ *  Returns   NULL
++ */
++static void __exit hci_tty_exit(void)
++{
++	pr_info("inside %s\n", __func__);
++	pr_info("bye.. freeing up %d\n", hci_tty_major);
++
++	device_destroy(hci_tty_class, MKDEV(hci_tty_major, 0));
++	class_destroy(hci_tty_class);
++	unregister_chrdev(hci_tty_major, DEVICE_NAME);
++}
++
++module_init(hci_tty_init);
++module_exit(hci_tty_exit);
++
++MODULE_AUTHOR("Pavan Savoy <pavan_savoy at ti.com>");
++MODULE_LICENSE("GPL");
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0005-btwilink-add-minimal-device-tree-support.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0005-btwilink-add-minimal-device-tree-support.patch
new file mode 100644
index 0000000..1da98ee
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0005-btwilink-add-minimal-device-tree-support.patch
@@ -0,0 +1,57 @@
+From 7be68826015748be0970e4bd50b833ed8923e142 Mon Sep 17 00:00:00 2001
+From: Eyal Reizer <eyalr at ti.com>
+Date: Thu, 23 May 2013 17:15:21 +0300
+Subject: [PATCH 05/39] btwilink: add minimal device tree support
+
+Add minimal device tree support to the btwilink driver that is used
+for binding bluetooth with the ti-st shared transport driver.
+
+Change-Id: I301c49d29046f20f8868bebb14347e82c12c8140
+Signed-off-by: Eyal Reizer <eyalr at ti.com>
+Signed-off-by: bvijay <bvijay at ti.com>
+
+Conflicts:
+	drivers/bluetooth/btwilink.c
+---
+ drivers/bluetooth/btwilink.c | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/drivers/bluetooth/btwilink.c b/drivers/bluetooth/btwilink.c
+index 55c135b..95adec3 100644
+--- a/drivers/bluetooth/btwilink.c
++++ b/drivers/bluetooth/btwilink.c
+@@ -30,6 +30,7 @@
+ 
+ #include <linux/ti_wilink_st.h>
+ #include <linux/module.h>
++#include <linux/of.h>
+ 
+ /* Bluetooth Driver Version */
+ #define VERSION               "1.0"
+@@ -286,6 +287,14 @@ static int ti_st_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
+ 	return 0;
+ }
+ 
++static const struct of_device_id btwilink_of_match[] = {
++{
++	.compatible = "btwilink",
++	},
++	{}
++};
++MODULE_DEVICE_TABLE(of, btwilink_of_match);
++
+ static int bt_ti_probe(struct platform_device *pdev)
+ {
+ 	static struct ti_st *hst;
+@@ -349,6 +358,8 @@ static struct platform_driver btwilink_driver = {
+ 	.remove = bt_ti_remove,
+ 	.driver = {
+ 		.name = "btwilink",
++		.owner = THIS_MODULE,
++		.of_match_table = of_match_ptr(btwilink_of_match),
+ 	},
+ };
+ 
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0006-ARM-i.MX6UL-cl-som-imx6ul-add-support-for-WiLink8.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0006-ARM-i.MX6UL-cl-som-imx6ul-add-support-for-WiLink8.patch
new file mode 100644
index 0000000..4266ea5
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0006-ARM-i.MX6UL-cl-som-imx6ul-add-support-for-WiLink8.patch
@@ -0,0 +1,184 @@
+From fd87171699bcb96746c48f38d3ee970c1e1ca928 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 22 Nov 2015 16:51:38 +0200
+Subject: [PATCH 06/39] ARM: i.MX6UL: cl-som-imx6ul: add support for WiLink8
+
+Add support for wilink8 wlan and bluetooth on cl-som-imx6ul.
+* enable uart2 used for bluetooth with wilink8 with flow control
+* configure usdhc1 to be used for sdio communication to WiLink8 wlan
+* configure gpios used for wlan/bt enables and wlan_irq
+* setup voltage regulator used for wl8 wlan power control
+
+WiLink8 shares the same mmc bus with the evaluation board mmc slot.
+In order to allow mmcboot the WiLink8 enabled device tree file has been created.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/cl-som-imx6ul-wilink.dts | 98 ++++++++++++++++++++++++++++++
+ arch/arm/boot/dts/cl-som-imx6ul.dts        | 17 +++++-
+ 2 files changed, 112 insertions(+), 3 deletions(-)
+ create mode 100644 arch/arm/boot/dts/cl-som-imx6ul-wilink.dts
+
+diff --git a/arch/arm/boot/dts/cl-som-imx6ul-wilink.dts b/arch/arm/boot/dts/cl-som-imx6ul-wilink.dts
+new file mode 100644
+index 0000000..48d44d0
+--- /dev/null
++++ b/arch/arm/boot/dts/cl-som-imx6ul-wilink.dts
+@@ -0,0 +1,98 @@
++/*
++ * Copyright (C) 2015 CompuLab LTD.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include "cl-som-imx6ul.dts"
++
++/ {
++	regulators {
++		compatible = "simple-bus";
++		#address-cells = <1>;
++		#size-cells = <0>;
++
++		wlan_en_reg: wlan_en-reg {
++			compatible = "regulator-fixed";
++			regulator-name = "wlan-en-regulator";
++			regulator-min-microvolt = <1800000>;
++			regulator-max-microvolt = <1800000>;
++			gpio = <&gpio5 1 GPIO_ACTIVE_HIGH>;
++			/* WLAN card specific delay */
++			startup-delay-us = <70000>;
++			enable-active-high;
++		};
++	};
++
++	kim {
++		compatible = "kim";
++		nshutdown_gpio = <128>;  /* GPIO5_IO00 */
++		dev_name = "/dev/ttymxc1";
++		flow_cntrl = <1>;
++		baud_rate = <3000000>;
++	};
++
++	btwilink {
++		compatible = "btwilink";
++	};
++};
++
++&iomuxc {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_hog_1 &pinctrl_hog_2>;
++	cl-som-imx6ul {
++		pinctrl_hog_2: hoggrp-2 {
++			fsl,pins = <
++				/* Wlan En */
++				MX6UL_PAD_SNVS_TAMPER1__GPIO5_IO01 0x17059
++				/* Wlan IRQ */
++				MX6UL_PAD_SNVS_TAMPER9__GPIO5_IO09 0x17059
++				/* Bt En */
++				MX6UL_PAD_SNVS_TAMPER0__GPIO5_IO00 0x17059
++			>;
++		};
++
++		pinctrl_uart2: uart2grp {
++			fsl,pins = <
++				MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX 0x1b0b1
++				MX6UL_PAD_UART2_RX_DATA__UART2_DCE_RX 0x1b0b1
++				MX6UL_PAD_UART2_CTS_B__UART2_DCE_CTS 0x1b0b1
++				MX6UL_PAD_UART2_RTS_B__UART2_DCE_RTS 0x1b0b1
++			>;
++		};
++	};
++};
++
++&uart2 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_uart2>;
++	status = "okay";
++
++	/* enable rts/cts usage on uart2 */
++	fsl,uart-has-rtscts;
++};
++
++&usdhc1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usdhc1>;
++	/* clean up the removable device fields */
++	cd-gpios = <>;
++	wp-gpios = <>;
++	no-1-8-v;
++	keep-power-in-suspend;
++	enable-sdio-wakeup;
++	vmmc-supply = <&wlan_en_reg>;
++	non-removable;
++	cap-power-off-card;
++	status = "okay";
++	#address-cells = <1>;
++	#size-cells = <0>;
++	wlcore: wlcore at 0 {
++		compatible = "ti,wl1835";
++		reg = <2>;
++		interrupt-parent = <&gpio5>;
++		interrupts = <9 IRQ_TYPE_LEVEL_HIGH>;
++	};
++};
+diff --git a/arch/arm/boot/dts/cl-som-imx6ul.dts b/arch/arm/boot/dts/cl-som-imx6ul.dts
+index d15b29d..34a66d6 100644
+--- a/arch/arm/boot/dts/cl-som-imx6ul.dts
++++ b/arch/arm/boot/dts/cl-som-imx6ul.dts
+@@ -9,6 +9,7 @@
+ /dts-v1/;
+ 
+ #include <dt-bindings/input/input.h>
++#include <dt-bindings/interrupt-controller/irq.h>
+ #include "imx6ul.dtsi"
+ 
+ / {
+@@ -92,6 +93,7 @@
+ 			regulator-max-microvolt = <3300000>;
+ 			regulator-always-on;
+ 		};
++
+ 	};
+ 
+ 	leds {
+@@ -108,7 +110,7 @@
+ &iomuxc {
+ 	pinctrl-names = "default";
+ 	pinctrl-0 = <&pinctrl_hog_1>;
+-	imx6ul-som-compulab {
++	cl-som-imx6ul {
+ 		pinctrl_hog_1: hoggrp-1 {
+ 			fsl,pins = <
+ 				/* Heartbeat */
+@@ -136,6 +138,15 @@
+ 			>;
+ 		};
+ 
++		pinctrl_uart2: uart2grp {
++			fsl,pins = <
++				MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX 0x1b0b1
++				MX6UL_PAD_UART2_RX_DATA__UART2_DCE_RX 0x1b0b1
++				MX6UL_PAD_UART2_CTS_B__UART2_DCE_CTS 0x1b0b1
++				MX6UL_PAD_UART2_RTS_B__UART2_DCE_RTS 0x1b0b1
++			>;
++		};
++
+ 		pinctrl_uart3: uart3grp {
+ 			fsl,pins = <
+ 				MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX 0x1b0b1
+@@ -288,8 +299,8 @@
+ &usdhc1 {
+ 	pinctrl-names = "default";
+ 	pinctrl-0 = <&pinctrl_usdhc1>;
+-        cd-gpios = <&gpio1 19 0>;
+-        wp-gpios = <&gpio1 18 0>;
++	cd-gpios = <&gpio1 19 0>;
++	wp-gpios = <&gpio1 18 0>;
+ 	keep-power-in-suspend;
+ 	enable-sdio-wakeup;
+ 	status = "okay";
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0007-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-wilin.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0007-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-wilin.patch
new file mode 100644
index 0000000..b21e9ba
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0007-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-wilin.patch
@@ -0,0 +1,1154 @@
+From 50a1b4cfe9a37e20c8503d4bdba30d3cea45f1a7 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Mon, 23 Nov 2015 09:57:21 +0200
+Subject: [PATCH 07/39] ARM: i.MX6UL: update cl-som-imx6ul defconfig for
+ wilink8
+
+Update cl-som-imx6ul defconfig for wilink8.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/cl-sb-som-imx6ul-wilink.dts |  11 +
+ arch/arm/boot/dts/cl-sb-som-imx6ul.dts        |  11 +
+ arch/arm/boot/dts/cl-sb-som-imx6ul.dtsi       |  45 +++
+ arch/arm/boot/dts/cl-som-imx6ul.dts           | 485 +-------------------------
+ arch/arm/boot/dts/cl-som-imx6ul.dtsi          | 460 ++++++++++++++++++++++++
+ arch/arm/configs/cl_som_imx6ul_defconfig      |  18 +-
+ 6 files changed, 545 insertions(+), 485 deletions(-)
+ create mode 100644 arch/arm/boot/dts/cl-sb-som-imx6ul-wilink.dts
+ create mode 100644 arch/arm/boot/dts/cl-sb-som-imx6ul.dts
+ create mode 100644 arch/arm/boot/dts/cl-sb-som-imx6ul.dtsi
+ create mode 100644 arch/arm/boot/dts/cl-som-imx6ul.dtsi
+
+diff --git a/arch/arm/boot/dts/cl-sb-som-imx6ul-wilink.dts b/arch/arm/boot/dts/cl-sb-som-imx6ul-wilink.dts
+new file mode 100644
+index 0000000..b4fe65c
+--- /dev/null
++++ b/arch/arm/boot/dts/cl-sb-som-imx6ul-wilink.dts
+@@ -0,0 +1,11 @@
++/*
++ * Suppport for CompuLab SB-SOM-iMX6UL baseboard
++ */
++
++#include "cl-som-imx6ul-wilink.dts"
++#include "cl-sb-som-imx6ul.dtsi"
++
++/ {
++	model = "Compulab iMX6UL on SB-SOM";
++	compatible = "fsl,imx6ul", "compulab,cl-som-imx6ul", "compulab,cl-sb-som-imx6ul";
++};
+diff --git a/arch/arm/boot/dts/cl-sb-som-imx6ul.dts b/arch/arm/boot/dts/cl-sb-som-imx6ul.dts
+new file mode 100644
+index 0000000..27b7c4e
+--- /dev/null
++++ b/arch/arm/boot/dts/cl-sb-som-imx6ul.dts
+@@ -0,0 +1,11 @@
++/*
++ * Suppport for CompuLab SB-SOM-iMX6UL baseboard
++ */
++
++#include "cl-som-imx6ul.dts"
++#include "cl-sb-som-imx6ul.dtsi"
++
++/ {
++	model = "Compulab iMX6UL on SB-SOM";
++	compatible = "fsl,imx6ul", "compulab,cl-som-imx6ul", "compulab,cl-sb-som-imx6ul";
++};
+diff --git a/arch/arm/boot/dts/cl-sb-som-imx6ul.dtsi b/arch/arm/boot/dts/cl-sb-som-imx6ul.dtsi
+new file mode 100644
+index 0000000..2a4f982
+--- /dev/null
++++ b/arch/arm/boot/dts/cl-sb-som-imx6ul.dtsi
+@@ -0,0 +1,45 @@
++/*
++ * Suppport for CompuLab SB-SOM baseboard
++ */
++
++/ {
++	reg_lcd_nstby_3v3: lcd_nstby_3v3 {
++		compatible = "regulator-fixed";
++		regulator-name = "lcd_nstby_3v3";
++		gpio = <&pca9555 14 0>;
++		enable-active-high;
++		regulator-always-on;
++	};
++
++	reg_div_en_3v3: div_en_3v3 {
++		compatible = "regulator-fixed";
++		regulator-name = "dvi_en_3v3";
++		gpio = <&pca9555 13 0>;
++		enable-active-high;
++		regulator-always-on;
++	};
++
++};
++
++&i2c1 {
++	status = "okay";
++
++	eeprom at 54 {
++		compatible = "at24,24c02";
++		reg = <0x54>;
++		pagesize = <16>;
++	};
++
++	pca9555: pca9555 at 20 {
++		compatible = "nxp,pca9555";
++		gpio-controller;
++		#gpio-cells = <2>;
++		reg = <0x20>;
++	};
++
++	dvicape {
++		compatible = "sil164";
++		reg = <0x39>;
++		powerdn-gpio = <&pca9555 13 0>;
++	};
++};
+diff --git a/arch/arm/boot/dts/cl-som-imx6ul.dts b/arch/arm/boot/dts/cl-som-imx6ul.dts
+index 34a66d6..dc7c696 100644
+--- a/arch/arm/boot/dts/cl-som-imx6ul.dts
++++ b/arch/arm/boot/dts/cl-som-imx6ul.dts
+@@ -8,492 +8,9 @@
+ 
+ /dts-v1/;
+ 
+-#include <dt-bindings/input/input.h>
+-#include <dt-bindings/interrupt-controller/irq.h>
+-#include "imx6ul.dtsi"
++#include "cl-som-imx6ul.dtsi"
+ 
+ / {
+ 	model = "CompuLab i.MX6 UltraLite SoM";
+ 	compatible = "fsl,imx6ul", "compulab,cl-som-imx6ul";
+-
+-	memory {
+-		reg = <0x80000000 0x20000000>;
+-	};
+-
+-	chosen {
+-		stdout-path = &uart3;
+-	};
+-
+-	backlight {
+-		compatible = "pwm-backlight";
+-		pwms = <&pwm1 0 5000000>;
+-		brightness-levels = <0 4 8 16 32 64 128 255>;
+-		default-brightness-level = <6>;
+-		status = "okay";
+-	};
+-
+-	pu_dummy: pudummy_reg {
+-		compatible = "fsl,imx6-dummy-pureg";
+-	};
+-
+-	regulators {
+-		compatible = "simple-bus";
+-		#address-cells = <1>;
+-		#size-cells = <0>;
+-
+-		reg_sd2_vmmc: regulator at 0 {
+-			compatible = "regulator-fixed";
+-			regulator-name = "VSD_3V3";
+-			regulator-min-microvolt = <3300000>;
+-			regulator-max-microvolt = <3300000>;
+-			gpio = <&gpio4 10 GPIO_ACTIVE_HIGH>;
+-			enable-active-high;
+-		};
+-
+-		reg_usb_otg1_vbus: regulator at 1 {
+-			compatible = "regulator-fixed";
+-			pinctrl-names = "default";
+-			pinctrl-0 = <&pinctrl_usb_otg1>;
+-			regulator-name = "usb_otg1_vbus";
+-			regulator-min-microvolt = <5000000>;
+-			regulator-max-microvolt = <5000000>;
+-			gpio = <&gpio1 4 GPIO_ACTIVE_HIGH>;
+-			enable-active-high;
+-		};
+-
+-		reg_phy_nreset: regulator at 2 {
+-			compatible = "regulator-fixed";
+-			regulator-name = "phy_nreset";
+-			regulator-min-microvolt = <3300000>;
+-			regulator-max-microvolt = <3300000>;
+-			gpio = <&gpio5 8 GPIO_ACTIVE_HIGH>;
+-			enable-active-high;
+-			regulator-always-on;
+-		};
+-
+-		reg_div_en_3v3: div_en_3v3 {
+-			compatible = "regulator-fixed";
+-			regulator-name = "dvi_en_3v3";
+-			gpio = <&pca9555 13 0>;
+-			enable-active-high;
+-		};
+-
+-		reg_lcd_nstby_3v3: lcd_nstby_3v3 {
+-			compatible = "regulator-fixed";
+-			regulator-name = "lcd_nstby_3v3";
+-			gpio = <&pca9555 14 0>;
+-			enable-active-high;
+-			regulator-always-on;
+-		};
+-
+-		tsc2046reg: tsc2046-reg {
+-			compatible = "regulator-fixed";
+-			regulator-name = "tsc2046-reg";
+-			regulator-min-microvolt = <3300000>;
+-			regulator-max-microvolt = <3300000>;
+-			regulator-always-on;
+-		};
+-
+-	};
+-
+-	leds {
+-		compatible = "gpio-leds";
+-
+-		debug-led {
+-			label = "Heartbeat";
+-			gpios = <&gpio5 4 0>;
+-			linux,default-trigger = "heartbeat";
+-		};
+-	};
+-};
+-
+-&iomuxc {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_hog_1>;
+-	cl-som-imx6ul {
+-		pinctrl_hog_1: hoggrp-1 {
+-			fsl,pins = <
+-				/* Heartbeat */
+-				MX6UL_PAD_SNVS_TAMPER4__GPIO5_IO04 0x17059
+-				/* eMMC nReset */
+-				MX6UL_PAD_NAND_ALE__GPIO4_IO10	0x17059
+-				/* Phy nReset */
+-				MX6UL_PAD_SNVS_TAMPER8__GPIO5_IO08	0x17059
+-			>;
+-		};
+-
+-		pinctrl_enet1: enet1grp {
+-			fsl,pins = <
+-				MX6UL_PAD_GPIO1_IO07__ENET1_MDC		0x1b0b0
+-				MX6UL_PAD_GPIO1_IO06__ENET1_MDIO	0x1b0b0
+-				MX6UL_PAD_ENET1_RX_EN__ENET1_RX_EN	0x1b0b0
+-				MX6UL_PAD_ENET1_RX_ER__ENET1_RX_ER	0x1b0b0
+-				MX6UL_PAD_ENET1_RX_DATA0__ENET1_RDATA00	0x1b0b0
+-				MX6UL_PAD_ENET1_RX_DATA1__ENET1_RDATA01	0x1b0b0
+-				MX6UL_PAD_ENET1_TX_EN__ENET1_TX_EN	0x1b0b0
+-				MX6UL_PAD_ENET1_TX_DATA0__ENET1_TDATA00	0x1b0b0
+-				MX6UL_PAD_ENET1_TX_DATA1__ENET1_TDATA01	0x1b0b0
+-				MX6UL_PAD_ENET1_TX_CLK__ENET1_REF_CLK1	0x4001b031
+-				MX6UL_PAD_SNVS_TAMPER5__GPIO5_IO05	0x80000000
+-			>;
+-		};
+-
+-		pinctrl_uart2: uart2grp {
+-			fsl,pins = <
+-				MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX 0x1b0b1
+-				MX6UL_PAD_UART2_RX_DATA__UART2_DCE_RX 0x1b0b1
+-				MX6UL_PAD_UART2_CTS_B__UART2_DCE_CTS 0x1b0b1
+-				MX6UL_PAD_UART2_RTS_B__UART2_DCE_RTS 0x1b0b1
+-			>;
+-		};
+-
+-		pinctrl_uart3: uart3grp {
+-			fsl,pins = <
+-				MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX 0x1b0b1
+-				MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX 0x1b0b1
+-			>;
+-		};
+-
+-		pinctrl_usdhc1: usdhc1grp {
+-			fsl,pins = <
+-				MX6UL_PAD_SD1_CMD__USDHC1_CMD     0x17059
+-				MX6UL_PAD_SD1_CLK__USDHC1_CLK     0x17059
+-				MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x17059
+-				MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x17059
+-				MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x17059
+-				MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x17059
+-				MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059
+-				MX6UL_PAD_UART1_CTS_B__GPIO1_IO18 0x17059
+-			>;
+-		};
+-
+-		pinctrl_usdhc2: usdhc2grp {
+-			fsl,pins = <
+-				MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x17059
+-				MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x17059
+-				MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x17059
+-				MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x17059
+-				MX6UL_PAD_NAND_DATA04__USDHC2_DATA4 0x17059
+-				MX6UL_PAD_NAND_DATA05__USDHC2_DATA5 0x17059
+-				MX6UL_PAD_NAND_DATA06__USDHC2_DATA6 0x17059
+-				MX6UL_PAD_NAND_DATA07__USDHC2_DATA7 0x17059
+-				MX6UL_PAD_NAND_WE_B__USDHC2_CMD	0x17059
+-				MX6UL_PAD_NAND_RE_B__USDHC2_CLK	0x17059
+-			>;
+-		};
+-
+-		/* pins for spi */
+-		pinctrl_ecspi2_cs: ecspi2_cs_grp {
+-			fsl,pins = <
+-				MX6UL_PAD_LCD_RESET__GPIO3_IO04  0x17059
+-			>;
+-		};
+-
+-		pinctrl_ecspi2: ecspi2grp {
+-			fsl,pins = <
+-				MX6UL_PAD_UART5_TX_DATA__ECSPI2_MOSI	0x1b0b1
+-				MX6UL_PAD_UART5_RX_DATA__ECSPI2_MISO	0x1b0b1
+-				MX6UL_PAD_UART4_TX_DATA__ECSPI2_SCLK	0x1b0b1
+-			>;
+-		};
+-
+-		pinctrl_ecspi4_cs: ecspi4_cs_grp {
+-			fsl,pins = <
+-				MX6UL_PAD_ENET2_RX_ER__GPIO2_IO15	0x17059
+-			>;
+-		};
+-
+-		pinctrl_ecspi4: ecspi4grp {
+-			fsl,pins = <
+-				MX6UL_PAD_ENET2_TX_EN__ECSPI4_MOSI	0x1b0b1
+-				MX6UL_PAD_ENET2_TX_CLK__ECSPI4_MISO	0x1b0b1
+-				MX6UL_PAD_ENET2_TX_DATA1__ECSPI4_SCLK	0x1b0b1
+-			>;
+-		};
+-
+-		pinctrl_i2c1: i2c1grp {
+-			fsl,pins = <
+-				MX6UL_PAD_GPIO1_IO02__I2C1_SCL	0x4001b8b0
+-				MX6UL_PAD_GPIO1_IO03__I2C1_SDA	0x4001b8b0
+-			>;
+-		};
+-
+-		pinctrl_i2c3: i2c3grp {
+-			fsl,pins = <
+-				MX6UL_PAD_UART1_TX_DATA__I2C3_SCL 0x4001b8b0
+-				MX6UL_PAD_UART1_RX_DATA__I2C3_SDA 0x4001b8b0
+-			>;
+-		};
+-
+-		pinctrl_usb_otg1_id: usbotg1idgrp {
+-			fsl,pins = <
+-				MX6UL_PAD_GPIO1_IO00__ANATOP_OTG1_ID	0x17059
+-			>;
+-		};
+-
+-		pinctrl_usb_otg1: usbotg1grp {
+-			fsl,pins = <
+-				MX6UL_PAD_GPIO1_IO04__GPIO1_IO04        0x10b0
+-			>;
+-		};
+-
+-		pinctrl_lcdif_dat: lcdifdatgrp {
+-			fsl,pins = <
+-				MX6UL_PAD_LCD_DATA00__LCDIF_DATA00  0x79
+-				MX6UL_PAD_LCD_DATA01__LCDIF_DATA01  0x79
+-				MX6UL_PAD_LCD_DATA02__LCDIF_DATA02  0x79
+-				MX6UL_PAD_LCD_DATA03__LCDIF_DATA03  0x79
+-				MX6UL_PAD_LCD_DATA04__LCDIF_DATA04  0x79
+-				MX6UL_PAD_LCD_DATA05__LCDIF_DATA05  0x79
+-				MX6UL_PAD_LCD_DATA06__LCDIF_DATA06  0x79
+-				MX6UL_PAD_LCD_DATA07__LCDIF_DATA07  0x79
+-				MX6UL_PAD_LCD_DATA08__LCDIF_DATA08  0x79
+-				MX6UL_PAD_LCD_DATA09__LCDIF_DATA09  0x79
+-				MX6UL_PAD_LCD_DATA10__LCDIF_DATA10  0x79
+-				MX6UL_PAD_LCD_DATA11__LCDIF_DATA11  0x79
+-				MX6UL_PAD_LCD_DATA12__LCDIF_DATA12  0x79
+-				MX6UL_PAD_LCD_DATA13__LCDIF_DATA13  0x79
+-				MX6UL_PAD_LCD_DATA14__LCDIF_DATA14  0x79
+-				MX6UL_PAD_LCD_DATA15__LCDIF_DATA15  0x79
+-				MX6UL_PAD_LCD_DATA16__LCDIF_DATA16  0x79
+-				MX6UL_PAD_LCD_DATA17__LCDIF_DATA17  0x79
+-				MX6UL_PAD_LCD_DATA18__LCDIF_DATA18  0x79
+-				MX6UL_PAD_LCD_DATA19__LCDIF_DATA19  0x79
+-				MX6UL_PAD_LCD_DATA20__LCDIF_DATA20  0x79
+-				MX6UL_PAD_LCD_DATA21__LCDIF_DATA21  0x79
+-				MX6UL_PAD_LCD_DATA22__LCDIF_DATA22  0x79
+-				MX6UL_PAD_LCD_DATA23__LCDIF_DATA23  0x79
+-			>;
+-		};
+-
+-		pinctrl_lcdif_ctrl: lcdifctrlgrp {
+-			fsl,pins = <
+-				MX6UL_PAD_LCD_CLK__LCDIF_CLK	    0x79
+-				MX6UL_PAD_LCD_ENABLE__LCDIF_ENABLE  0x79
+-				MX6UL_PAD_LCD_HSYNC__LCDIF_HSYNC    0x79
+-				MX6UL_PAD_LCD_VSYNC__LCDIF_VSYNC    0x79
+-			>;
+-		};
+-
+-		pinctrl_pwm1: pwm1grp {
+-			fsl,pins = <
+-				MX6UL_PAD_GPIO1_IO08__PWM1_OUT   0x110b0
+-			>;
+-		};
+-
+-		pinctrl_tsc2046: tsc2046grp {
+-			fsl,pins = <
+-				/* tsc2046 PENDOWN */
+-				MX6UL_PAD_GPIO1_IO01__GPIO1_IO01  0x80000000
+-			>;
+-		};
+-	};
+-};
+-
+-&uart3 {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_uart3>;
+-	status = "okay";
+-};
+-
+-&usdhc1 {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_usdhc1>;
+-	cd-gpios = <&gpio1 19 0>;
+-	wp-gpios = <&gpio1 18 0>;
+-	keep-power-in-suspend;
+-	enable-sdio-wakeup;
+-	status = "okay";
+-};
+-
+-&usdhc2 {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_usdhc2>;
+-	keep-power-in-suspend;
+-	enable-sdio-wakeup;
+-	non-removable;
+-	vmmc-supply = <&reg_sd2_vmmc>;
+-	status = "okay";
+-};
+-
+-&ecspi2 {
+-	fsl,spi-num-chipselects = <1>;
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_ecspi2 &pinctrl_ecspi2_cs>;
+-	cs-gpios = <&gpio3 4 0>;
+-	status = "okay";
+-
+-	/* touch controller */
+-	touch:	tsc2046 at 0 {
+-		pinctrl-names = "default";
+-		pinctrl-0 = <&pinctrl_tsc2046>;
+-
+-		compatible = "ti,tsc2046";
+-		vcc-supply = <&tsc2046reg>;
+-
+-		reg = <0>;
+-		spi-max-frequency = <1500000>;
+-
+-		interrupt-parent = <&gpio1>;
+-		interrupts = <1 0>;
+-		pendown-gpio = <&gpio1 1 0>;
+-
+-		ti,x-min = /bits/ 16 <0x0>;
+-		ti,x-max = /bits/ 16 <0x0fff>;
+-		ti,y-min = /bits/ 16 <0x0>;
+-		ti,y-max = /bits/ 16 <0x0fff>;
+-
+-		ti,x-plate-ohms = /bits/ 16 <180>;
+-		ti,pressure-max = /bits/ 16 <255>;
+-
+-		ti,debounce-max = /bits/ 16 <30>;
+-		ti,debounce-tol = /bits/ 16 <10>;
+-		ti,debounce-rep = /bits/ 16 <1>;
+-
+-		linux,wakeup;
+-	};
+-};
+-
+-&ecspi4 {
+-	fsl,spi-num-chipselects = <1>;
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_ecspi4 &pinctrl_ecspi4_cs>;
+-	cs-gpios = <&gpio2 15 0>;
+-	status = "okay";
+-
+-	m25px16 at 0 {
+-		#address-cells = <1>;
+-		#size-cells = <1>;
+-		compatible = "st,m25px16", "st,m25p";
+-		spi-max-frequency = <20000000>;
+-		reg = <0>;
+-
+-		partition at 0 {
+-			label = "uboot";
+-			reg = <0x0 0xc0000>;
+-		};
+-
+-		partition at c0000 {
+-			label = "uboot environment";
+-			reg = <0xc0000 0x40000>;
+-		};
+-
+-		partition at 100000 {
+-			label = "splash";
+-			reg = <0x100000 0x100000>;
+-		};
+-	};
+-};
+-
+-&fec1 {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_enet1>;
+-	phy-mode = "rmii";
+-	phy-handle = <&ethphy0>;
+-	status = "okay";
+-
+-	mdio {
+-		#address-cells = <1>;
+-		#size-cells = <0>;
+-
+-		ethphy0: ethernet-phy at 0 {
+-			compatible = "ethernet-phy-ieee802.3-c22";
+-			reg = <0>;
+-		};
+-	};
+-};
+-
+-&i2c1 {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_i2c1>;
+-	status = "okay";
+-
+-	eeprom at 54 {
+-		compatible = "at24,24c02";
+-		reg = <0x54>;
+-		pagesize = <16>;
+-	};
+-
+-	pca9555: pca9555 at 20 {
+-		compatible = "nxp,pca9555";
+-		gpio-controller;
+-		#gpio-cells = <2>;
+-		reg = <0x20>;
+-	};
+-
+-	dvicape {
+-		compatible = "sil164";
+-		reg = <0x39>;
+-		powerdn-gpio = <&pca9555 13 0>;
+-	};
+-};
+-
+-&i2c3 {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_i2c3>;
+-	status = "okay";
+-
+-	eeprom at 50 {
+-		compatible = "at24,24c02";
+-		reg = <0x50>;
+-		pagesize = <16>;
+-	};
+-
+-	rtc at 56 {
+-		compatible = "emmicro,em3027";
+-		reg = <0x56>;
+-	};
+-};
+-
+-&usbotg1 {
+-	vbus-supply = <&reg_usb_otg1_vbus>;
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_usb_otg1_id>;
+-	dr_mode = "otg";
+-	status = "okay";
+-};
+-
+-&usbotg2 {
+-	dr_mode = "host";
+-	disable-over-current;
+-	status = "okay";
+-};
+-
+-&pwm1 {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_pwm1>;
+-	status = "okay";
+-};
+-
+-&lcdif {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_lcdif_dat
+-		     &pinctrl_lcdif_ctrl>;
+-	display = <&display0>;
+-	status = "okay";
+-
+-	display0: display {
+-		bits-per-pixel = <16>;
+-		bus-width = <24>;
+-
+-		display-timings {
+-			native-mode = <&timing0>;
+-			timing0: timing0 {
+-				clock-frequency = <29580000>;
+-				hactive = <800>;
+-				vactive = <480>;
+-				hfront-porch = <16>;
+-				hback-porch = <1>;
+-				hsync-len = <80>;
+-				vback-porch = <13>;
+-				vfront-porch = <16>;
+-				vsync-len = <16>;
+-
+-				hsync-active = <0>;
+-				vsync-active = <0>;
+-				de-active = <1>;
+-				pixelclk-active = <0>;
+-			};
+-		};
+-	};
+ };
+diff --git a/arch/arm/boot/dts/cl-som-imx6ul.dtsi b/arch/arm/boot/dts/cl-som-imx6ul.dtsi
+new file mode 100644
+index 0000000..f9cfac8
+--- /dev/null
++++ b/arch/arm/boot/dts/cl-som-imx6ul.dtsi
+@@ -0,0 +1,460 @@
++/*
++ * Copyright (C) 2015 CompuLab LTD.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <dt-bindings/input/input.h>
++#include <dt-bindings/interrupt-controller/irq.h>
++#include "imx6ul.dtsi"
++
++/ {
++	memory {
++		reg = <0x80000000 0x20000000>;
++	};
++
++	chosen {
++		stdout-path = &uart3;
++	};
++
++	backlight {
++		compatible = "pwm-backlight";
++		pwms = <&pwm1 0 5000000>;
++		brightness-levels = <0 4 8 16 32 64 128 255>;
++		default-brightness-level = <6>;
++		status = "okay";
++	};
++
++	pu_dummy: pudummy_reg {
++		compatible = "fsl,imx6-dummy-pureg";
++	};
++
++	regulators {
++		compatible = "simple-bus";
++		#address-cells = <1>;
++		#size-cells = <0>;
++
++		reg_sd2_vmmc: regulator at 0 {
++			compatible = "regulator-fixed";
++			regulator-name = "VSD_3V3";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			gpio = <&gpio4 10 GPIO_ACTIVE_HIGH>;
++			enable-active-high;
++		};
++
++		reg_usb_otg1_vbus: regulator at 1 {
++			compatible = "regulator-fixed";
++			pinctrl-names = "default";
++			pinctrl-0 = <&pinctrl_usb_otg1>;
++			regulator-name = "usb_otg1_vbus";
++			regulator-min-microvolt = <5000000>;
++			regulator-max-microvolt = <5000000>;
++			gpio = <&gpio1 4 GPIO_ACTIVE_HIGH>;
++			enable-active-high;
++		};
++
++		reg_phy_nreset: regulator at 2 {
++			compatible = "regulator-fixed";
++			regulator-name = "phy_nreset";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			gpio = <&gpio5 8 GPIO_ACTIVE_HIGH>;
++			enable-active-high;
++			regulator-always-on;
++		};
++
++		tsc2046reg: tsc2046-reg {
++			compatible = "regulator-fixed";
++			regulator-name = "tsc2046-reg";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			regulator-always-on;
++		};
++
++	};
++
++	leds {
++		compatible = "gpio-leds";
++
++		debug-led {
++			label = "Heartbeat";
++			gpios = <&gpio5 4 0>;
++			linux,default-trigger = "heartbeat";
++		};
++	};
++};
++
++&iomuxc {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_hog_1>;
++	cl-som-imx6ul {
++		pinctrl_hog_1: hoggrp-1 {
++			fsl,pins = <
++				/* Heartbeat */
++				MX6UL_PAD_SNVS_TAMPER4__GPIO5_IO04 0x17059
++				/* eMMC nReset */
++				MX6UL_PAD_NAND_ALE__GPIO4_IO10	0x17059
++				/* Phy nReset */
++				MX6UL_PAD_SNVS_TAMPER8__GPIO5_IO08	0x17059
++			>;
++		};
++
++		pinctrl_enet1: enet1grp {
++			fsl,pins = <
++				MX6UL_PAD_GPIO1_IO07__ENET1_MDC		0x1b0b0
++				MX6UL_PAD_GPIO1_IO06__ENET1_MDIO	0x1b0b0
++				MX6UL_PAD_ENET1_RX_EN__ENET1_RX_EN	0x1b0b0
++				MX6UL_PAD_ENET1_RX_ER__ENET1_RX_ER	0x1b0b0
++				MX6UL_PAD_ENET1_RX_DATA0__ENET1_RDATA00	0x1b0b0
++				MX6UL_PAD_ENET1_RX_DATA1__ENET1_RDATA01	0x1b0b0
++				MX6UL_PAD_ENET1_TX_EN__ENET1_TX_EN	0x1b0b0
++				MX6UL_PAD_ENET1_TX_DATA0__ENET1_TDATA00	0x1b0b0
++				MX6UL_PAD_ENET1_TX_DATA1__ENET1_TDATA01	0x1b0b0
++				MX6UL_PAD_ENET1_TX_CLK__ENET1_REF_CLK1	0x4001b031
++				MX6UL_PAD_SNVS_TAMPER5__GPIO5_IO05	0x80000000
++			>;
++		};
++
++		pinctrl_uart2: uart2grp {
++			fsl,pins = <
++				MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX 0x1b0b1
++				MX6UL_PAD_UART2_RX_DATA__UART2_DCE_RX 0x1b0b1
++				MX6UL_PAD_UART2_CTS_B__UART2_DCE_CTS 0x1b0b1
++				MX6UL_PAD_UART2_RTS_B__UART2_DCE_RTS 0x1b0b1
++			>;
++		};
++
++		pinctrl_uart3: uart3grp {
++			fsl,pins = <
++				MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX 0x1b0b1
++				MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX 0x1b0b1
++			>;
++		};
++
++		pinctrl_usdhc1: usdhc1grp {
++			fsl,pins = <
++				MX6UL_PAD_SD1_CMD__USDHC1_CMD     0x17059
++				MX6UL_PAD_SD1_CLK__USDHC1_CLK     0x17059
++				MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x17059
++				MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x17059
++				MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x17059
++				MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x17059
++				MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059
++				MX6UL_PAD_UART1_CTS_B__GPIO1_IO18 0x17059
++			>;
++		};
++
++		pinctrl_usdhc2: usdhc2grp {
++			fsl,pins = <
++				MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x17059
++				MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x17059
++				MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x17059
++				MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x17059
++				MX6UL_PAD_NAND_DATA04__USDHC2_DATA4 0x17059
++				MX6UL_PAD_NAND_DATA05__USDHC2_DATA5 0x17059
++				MX6UL_PAD_NAND_DATA06__USDHC2_DATA6 0x17059
++				MX6UL_PAD_NAND_DATA07__USDHC2_DATA7 0x17059
++				MX6UL_PAD_NAND_WE_B__USDHC2_CMD	0x17059
++				MX6UL_PAD_NAND_RE_B__USDHC2_CLK	0x17059
++			>;
++		};
++
++		/* pins for spi */
++		pinctrl_ecspi2_cs: ecspi2_cs_grp {
++			fsl,pins = <
++				MX6UL_PAD_LCD_RESET__GPIO3_IO04  0x17059
++			>;
++		};
++
++		pinctrl_ecspi2: ecspi2grp {
++			fsl,pins = <
++				MX6UL_PAD_UART5_TX_DATA__ECSPI2_MOSI	0x1b0b1
++				MX6UL_PAD_UART5_RX_DATA__ECSPI2_MISO	0x1b0b1
++				MX6UL_PAD_UART4_TX_DATA__ECSPI2_SCLK	0x1b0b1
++			>;
++		};
++
++		pinctrl_ecspi4_cs: ecspi4_cs_grp {
++			fsl,pins = <
++				MX6UL_PAD_ENET2_RX_ER__GPIO2_IO15	0x17059
++			>;
++		};
++
++		pinctrl_ecspi4: ecspi4grp {
++			fsl,pins = <
++				MX6UL_PAD_ENET2_TX_EN__ECSPI4_MOSI	0x1b0b1
++				MX6UL_PAD_ENET2_TX_CLK__ECSPI4_MISO	0x1b0b1
++				MX6UL_PAD_ENET2_TX_DATA1__ECSPI4_SCLK	0x1b0b1
++			>;
++		};
++
++		pinctrl_i2c1: i2c1grp {
++			fsl,pins = <
++				MX6UL_PAD_GPIO1_IO02__I2C1_SCL	0x4001b8b0
++				MX6UL_PAD_GPIO1_IO03__I2C1_SDA	0x4001b8b0
++			>;
++		};
++
++		pinctrl_i2c3: i2c3grp {
++			fsl,pins = <
++				MX6UL_PAD_UART1_TX_DATA__I2C3_SCL 0x4001b8b0
++				MX6UL_PAD_UART1_RX_DATA__I2C3_SDA 0x4001b8b0
++			>;
++		};
++
++		pinctrl_usb_otg1_id: usbotg1idgrp {
++			fsl,pins = <
++				MX6UL_PAD_GPIO1_IO00__ANATOP_OTG1_ID	0x17059
++			>;
++		};
++
++		pinctrl_usb_otg1: usbotg1grp {
++			fsl,pins = <
++				MX6UL_PAD_GPIO1_IO04__GPIO1_IO04        0x10b0
++			>;
++		};
++
++		pinctrl_lcdif_dat: lcdifdatgrp {
++			fsl,pins = <
++				MX6UL_PAD_LCD_DATA00__LCDIF_DATA00  0x79
++				MX6UL_PAD_LCD_DATA01__LCDIF_DATA01  0x79
++				MX6UL_PAD_LCD_DATA02__LCDIF_DATA02  0x79
++				MX6UL_PAD_LCD_DATA03__LCDIF_DATA03  0x79
++				MX6UL_PAD_LCD_DATA04__LCDIF_DATA04  0x79
++				MX6UL_PAD_LCD_DATA05__LCDIF_DATA05  0x79
++				MX6UL_PAD_LCD_DATA06__LCDIF_DATA06  0x79
++				MX6UL_PAD_LCD_DATA07__LCDIF_DATA07  0x79
++				MX6UL_PAD_LCD_DATA08__LCDIF_DATA08  0x79
++				MX6UL_PAD_LCD_DATA09__LCDIF_DATA09  0x79
++				MX6UL_PAD_LCD_DATA10__LCDIF_DATA10  0x79
++				MX6UL_PAD_LCD_DATA11__LCDIF_DATA11  0x79
++				MX6UL_PAD_LCD_DATA12__LCDIF_DATA12  0x79
++				MX6UL_PAD_LCD_DATA13__LCDIF_DATA13  0x79
++				MX6UL_PAD_LCD_DATA14__LCDIF_DATA14  0x79
++				MX6UL_PAD_LCD_DATA15__LCDIF_DATA15  0x79
++				MX6UL_PAD_LCD_DATA16__LCDIF_DATA16  0x79
++				MX6UL_PAD_LCD_DATA17__LCDIF_DATA17  0x79
++				MX6UL_PAD_LCD_DATA18__LCDIF_DATA18  0x79
++				MX6UL_PAD_LCD_DATA19__LCDIF_DATA19  0x79
++				MX6UL_PAD_LCD_DATA20__LCDIF_DATA20  0x79
++				MX6UL_PAD_LCD_DATA21__LCDIF_DATA21  0x79
++				MX6UL_PAD_LCD_DATA22__LCDIF_DATA22  0x79
++				MX6UL_PAD_LCD_DATA23__LCDIF_DATA23  0x79
++			>;
++		};
++
++		pinctrl_lcdif_ctrl: lcdifctrlgrp {
++			fsl,pins = <
++				MX6UL_PAD_LCD_CLK__LCDIF_CLK	    0x79
++				MX6UL_PAD_LCD_ENABLE__LCDIF_ENABLE  0x79
++				MX6UL_PAD_LCD_HSYNC__LCDIF_HSYNC    0x79
++				MX6UL_PAD_LCD_VSYNC__LCDIF_VSYNC    0x79
++			>;
++		};
++
++		pinctrl_pwm1: pwm1grp {
++			fsl,pins = <
++				MX6UL_PAD_GPIO1_IO08__PWM1_OUT   0x110b0
++			>;
++		};
++
++		pinctrl_tsc2046: tsc2046grp {
++			fsl,pins = <
++				/* tsc2046 PENDOWN */
++				MX6UL_PAD_GPIO1_IO01__GPIO1_IO01  0x80000000
++			>;
++		};
++	};
++};
++
++&uart3 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_uart3>;
++	status = "okay";
++};
++
++&usdhc1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usdhc1>;
++	cd-gpios = <&gpio1 19 0>;
++	wp-gpios = <&gpio1 18 0>;
++	keep-power-in-suspend;
++	enable-sdio-wakeup;
++	status = "okay";
++};
++
++&usdhc2 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usdhc2>;
++	keep-power-in-suspend;
++	enable-sdio-wakeup;
++	non-removable;
++	vmmc-supply = <&reg_sd2_vmmc>;
++	status = "okay";
++};
++
++&ecspi2 {
++	fsl,spi-num-chipselects = <1>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_ecspi2 &pinctrl_ecspi2_cs>;
++	cs-gpios = <&gpio3 4 0>;
++	status = "okay";
++
++	/* touch controller */
++	touch:	tsc2046 at 0 {
++		pinctrl-names = "default";
++		pinctrl-0 = <&pinctrl_tsc2046>;
++
++		compatible = "ti,tsc2046";
++		vcc-supply = <&tsc2046reg>;
++
++		reg = <0>;
++		spi-max-frequency = <1500000>;
++
++		interrupt-parent = <&gpio1>;
++		interrupts = <1 0>;
++		pendown-gpio = <&gpio1 1 0>;
++
++		ti,x-min = /bits/ 16 <0x0>;
++		ti,x-max = /bits/ 16 <0x0fff>;
++		ti,y-min = /bits/ 16 <0x0>;
++		ti,y-max = /bits/ 16 <0x0fff>;
++
++		ti,x-plate-ohms = /bits/ 16 <180>;
++		ti,pressure-max = /bits/ 16 <255>;
++
++		ti,debounce-max = /bits/ 16 <30>;
++		ti,debounce-tol = /bits/ 16 <10>;
++		ti,debounce-rep = /bits/ 16 <1>;
++
++		linux,wakeup;
++	};
++};
++
++&ecspi4 {
++	fsl,spi-num-chipselects = <1>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_ecspi4 &pinctrl_ecspi4_cs>;
++	cs-gpios = <&gpio2 15 0>;
++	status = "okay";
++
++	m25px16 at 0 {
++		#address-cells = <1>;
++		#size-cells = <1>;
++		compatible = "st,m25px16", "st,m25p";
++		spi-max-frequency = <20000000>;
++		reg = <0>;
++
++		partition at 0 {
++			label = "uboot";
++			reg = <0x0 0xc0000>;
++		};
++
++		partition at c0000 {
++			label = "uboot environment";
++			reg = <0xc0000 0x40000>;
++		};
++
++		partition at 100000 {
++			label = "splash";
++			reg = <0x100000 0x100000>;
++		};
++	};
++};
++
++&fec1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_enet1>;
++	phy-mode = "rmii";
++	phy-handle = <&ethphy0>;
++	status = "okay";
++
++	mdio {
++		#address-cells = <1>;
++		#size-cells = <0>;
++
++		ethphy0: ethernet-phy at 0 {
++			compatible = "ethernet-phy-ieee802.3-c22";
++			reg = <0>;
++		};
++	};
++};
++
++&i2c1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_i2c1>;
++	status = "disabled";
++};
++
++&i2c3 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_i2c3>;
++	status = "okay";
++
++	eeprom at 50 {
++		compatible = "at24,24c02";
++		reg = <0x50>;
++		pagesize = <16>;
++	};
++
++	rtc at 56 {
++		compatible = "emmicro,em3027";
++		reg = <0x56>;
++	};
++};
++
++&usbotg1 {
++	vbus-supply = <&reg_usb_otg1_vbus>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usb_otg1_id>;
++	dr_mode = "otg";
++	status = "okay";
++};
++
++&usbotg2 {
++	dr_mode = "host";
++	disable-over-current;
++	status = "okay";
++};
++
++&pwm1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_pwm1>;
++	status = "okay";
++};
++
++&lcdif {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_lcdif_dat
++		     &pinctrl_lcdif_ctrl>;
++	display = <&display0>;
++	status = "okay";
++
++	display0: display {
++		bits-per-pixel = <16>;
++		bus-width = <24>;
++
++		display-timings {
++			native-mode = <&timing0>;
++			timing0: timing0 {
++				clock-frequency = <29580000>;
++				hactive = <800>;
++				vactive = <480>;
++				hfront-porch = <16>;
++				hback-porch = <1>;
++				hsync-len = <80>;
++				vback-porch = <13>;
++				vfront-porch = <16>;
++				vsync-len = <16>;
++
++				hsync-active = <0>;
++				vsync-active = <0>;
++				de-active = <1>;
++				pixelclk-active = <0>;
++			};
++		};
++	};
++};
+diff --git a/arch/arm/configs/cl_som_imx6ul_defconfig b/arch/arm/configs/cl_som_imx6ul_defconfig
+index da1a9fd..3b9d475 100644
+--- a/arch/arm/configs/cl_som_imx6ul_defconfig
++++ b/arch/arm/configs/cl_som_imx6ul_defconfig
+@@ -67,6 +67,10 @@ CONFIG_IP_PNP_DHCP=y
+ # CONFIG_INET_LRO is not set
+ CONFIG_IPV6=y
+ CONFIG_NETFILTER=y
++CONFIG_NF_CONNTRACK=y
++CONFIG_NF_CONNTRACK_IPV4=y
++CONFIG_IP_NF_IPTABLES=y
++CONFIG_IP_NF_FILTER=y
+ CONFIG_VLAN_8021Q=y
+ CONFIG_LLC2=y
+ CONFIG_CAN=y
+@@ -84,8 +88,10 @@ CONFIG_BT_HCIUART=y
+ CONFIG_BT_HCIUART_H4=y
+ CONFIG_BT_HCIUART_BCSP=y
+ CONFIG_BT_HCIUART_ATH3K=y
++CONFIG_BT_HCIUART_LL=y
+ CONFIG_BT_HCIBCM203X=y
+ CONFIG_BT_ATH3K=y
++CONFIG_BT_WILINK=m
+ CONFIG_CFG80211=y
+ CONFIG_MAC80211=y
+ CONFIG_DEVTMPFS=y
+@@ -113,6 +119,7 @@ CONFIG_MTD_NAND_MXC=y
+ CONFIG_MTD_SPI_NOR=y
+ CONFIG_SPI_FSL_QUADSPI=y
+ CONFIG_MTD_UBI=y
++CONFIG_PROC_DEVICETREE=y
+ CONFIG_BLK_DEV_LOOP=y
+ CONFIG_BLK_DEV_RAM=y
+ CONFIG_BLK_DEV_RAM_SIZE=65536
+@@ -120,6 +127,8 @@ CONFIG_SENSORS_FXOS8700=y
+ CONFIG_SENSORS_FXAS2100X=y
+ CONFIG_EEPROM_AT24=y
+ CONFIG_EEPROM_AT25=y
++CONFIG_TI_ST=y
++CONFIG_ST_HCI=y
+ # CONFIG_SCSI_PROC_FS is not set
+ CONFIG_BLK_DEV_SD=y
+ CONFIG_SCSI_MULTI_LUN=y
+@@ -159,6 +168,12 @@ 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_WL_TI=y
++CONFIG_WL1251=y
++CONFIG_WL1251_SDIO=y
++CONFIG_WL18XX=m
++CONFIG_WLCORE=y
++CONFIG_WLCORE_SDIO=y
+ # CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+ CONFIG_INPUT_EVDEV=y
+ CONFIG_INPUT_EVBUG=m
+@@ -178,6 +193,7 @@ CONFIG_TOUCHSCREEN_TSC2007=y
+ CONFIG_TOUCHSCREEN_STMPE=y
+ CONFIG_INPUT_MISC=y
+ CONFIG_INPUT_MMA8450=y
++CONFIG_INPUT_UINPUT=y
+ CONFIG_INPUT_ISL29023=y
+ CONFIG_INPUT_MPL3115=y
+ CONFIG_SENSOR_FXLS8471=y
+@@ -404,6 +420,7 @@ CONFIG_NLS_ASCII=y
+ CONFIG_NLS_ISO8859_1=y
+ CONFIG_NLS_ISO8859_15=m
+ CONFIG_NLS_UTF8=y
++CONFIG_DYNAMIC_DEBUG=y
+ CONFIG_DEBUG_FS=y
+ CONFIG_MAGIC_SYSRQ=y
+ # CONFIG_SCHED_DEBUG is not set
+@@ -444,7 +461,6 @@ CONFIG_CRYPTO_DEV_FSL_CAAM_SM_TEST=y
+ CONFIG_CRYPTO_DEV_FSL_CAAM_SECVIO=y
+ CONFIG_CRC_CCITT=m
+ CONFIG_CRC_T10DIF=y
+-CONFIG_CRC7=m
+ CONFIG_LIBCRC32C=m
+ CONFIG_FONTS=y
+ CONFIG_FONT_8x8=y
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0008-ARM-i.MX6UL-update-defconfig-for-cl-som-imx6ul.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0008-ARM-i.MX6UL-update-defconfig-for-cl-som-imx6ul.patch
new file mode 100644
index 0000000..c2967d3
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0008-ARM-i.MX6UL-update-defconfig-for-cl-som-imx6ul.patch
@@ -0,0 +1,38 @@
+From 049d49a6c02e5546525fc1471fe5cf1449bd8977 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Mon, 7 Dec 2015 17:00:35 +0200
+Subject: [PATCH 08/39] ARM: i.MX6UL: update defconfig for cl-som-imx6ul
+
+Update defconfig for cl-som-imx6ul.
+Solves:
+1) a systemd serial console init hang at boot.
+2) wlan0 "no wireless extensions."
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/configs/cl_som_imx6ul_defconfig | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/arch/arm/configs/cl_som_imx6ul_defconfig b/arch/arm/configs/cl_som_imx6ul_defconfig
+index 3b9d475..357f013 100644
+--- a/arch/arm/configs/cl_som_imx6ul_defconfig
++++ b/arch/arm/configs/cl_som_imx6ul_defconfig
+@@ -1,6 +1,7 @@
+ CONFIG_LOCALVERSION="-6UL_ga"
+ CONFIG_KERNEL_LZO=y
+ CONFIG_SYSVIPC=y
++CONFIG_FHANDLE=y
+ CONFIG_NO_HZ=y
+ CONFIG_HIGH_RES_TIMERS=y
+ CONFIG_IKCONFIG=y
+@@ -93,6 +94,7 @@ CONFIG_BT_HCIBCM203X=y
+ CONFIG_BT_ATH3K=y
+ CONFIG_BT_WILINK=m
+ CONFIG_CFG80211=y
++CONFIG_CFG80211_WEXT=y
+ CONFIG_MAC80211=y
+ CONFIG_DEVTMPFS=y
+ CONFIG_DEVTMPFS_MOUNT=y
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0009-sil164-add-dvi-transmitter-simple-driver.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0009-sil164-add-dvi-transmitter-simple-driver.patch
new file mode 100644
index 0000000..8658923
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0009-sil164-add-dvi-transmitter-simple-driver.patch
@@ -0,0 +1,315 @@
+From 2d5b08d8a1b2bf073ceab060c3f95cc1e58576cb Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Thu, 17 Dec 2015 10:56:48 +0200
+Subject: [PATCH 09/39] sil164: add dvi transmitter simple driver.
+
+Add dvi transmitter simple driver.
+cl-sb-som-imx6ul makes use of a sil164 dvi transmitter.
+The transmitter works in the i2c mode.
+The purpose of the driver is to turn on/off the transmitter and
+set the correct init values to the controls' registers.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ drivers/video/Kconfig                |   4 +
+ drivers/video/Makefile               |   1 +
+ drivers/video/si/Kconfig             |   6 +
+ drivers/video/si/Makefile            |   2 +
+ drivers/video/si/sil164_simple_drv.c | 241 +++++++++++++++++++++++++++++++++++
+ 5 files changed, 254 insertions(+)
+ create mode 100644 drivers/video/si/Kconfig
+ create mode 100644 drivers/video/si/Makefile
+ create mode 100644 drivers/video/si/sil164_simple_drv.c
+
+diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
+index 8bf495f..beff912 100644
+--- a/drivers/video/Kconfig
++++ b/drivers/video/Kconfig
+@@ -52,4 +52,8 @@ if FB || SGI_NEWPORT_CONSOLE
+ endif
+ 
+ 
++if CL_SOM_IMX6UL
++source "drivers/video/si/Kconfig"
++endif
++
+ endmenu
+diff --git a/drivers/video/Makefile b/drivers/video/Makefile
+index 9ad3c17..3b4f9bc 100644
+--- a/drivers/video/Makefile
++++ b/drivers/video/Makefile
+@@ -11,3 +11,4 @@ obj-$(CONFIG_VIDEOMODE_HELPERS) += display_timing.o videomode.o
+ ifeq ($(CONFIG_OF),y)
+ obj-$(CONFIG_VIDEOMODE_HELPERS) += of_display_timing.o of_videomode.o
+ endif
++obj-$(CONFIG_SIL164_SIMPLE)              += si/
+diff --git a/drivers/video/si/Kconfig b/drivers/video/si/Kconfig
+new file mode 100644
+index 0000000..300eae7
+--- /dev/null
++++ b/drivers/video/si/Kconfig
+@@ -0,0 +1,6 @@
++config SIL164_SIMPLE
++	tristate "Silicon Image sil164 TMDS transmitter simple"
++	depends on I2C
++	help
++	  Support for sil164 simple used in some cl-sb-som boards.
++
+diff --git a/drivers/video/si/Makefile b/drivers/video/si/Makefile
+new file mode 100644
+index 0000000..6836f96
+--- /dev/null
++++ b/drivers/video/si/Makefile
+@@ -0,0 +1,2 @@
++sil164_simple-y := sil164_simple_drv.o
++obj-$(CONFIG_SIL164_SIMPLE) += sil164_simple.o
+diff --git a/drivers/video/si/sil164_simple_drv.c b/drivers/video/si/sil164_simple_drv.c
+new file mode 100644
+index 0000000..90813f7
+--- /dev/null
++++ b/drivers/video/si/sil164_simple_drv.c
+@@ -0,0 +1,241 @@
++/*
++ * Copyright (C) 2015 CompuLab LTD.
++ * All Rights Reserved.
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/i2c.h>
++#include <linux/slab.h>
++
++struct sil164_encoder_params {
++	enum {
++		SIL164_INPUT_EDGE_FALLING = 0,
++		SIL164_INPUT_EDGE_RISING
++	} input_edge;
++
++	enum {
++		SIL164_INPUT_WIDTH_12BIT = 0,
++		SIL164_INPUT_WIDTH_24BIT
++	} input_width;
++
++	enum {
++		SIL164_INPUT_SINGLE_EDGE = 0,
++		SIL164_INPUT_DUAL_EDGE
++	} input_dual;
++
++	enum {
++		SIL164_PLL_FILTER_ON = 0,
++		SIL164_PLL_FILTER_OFF,
++	} pll_filter;
++
++	int input_skew; /** < Allowed range [-4, 3], use 0 for no de-skew. */
++	int duallink_skew; /** < Allowed range [-4, 3]. */
++};
++
++#define sil164_info(client, format, ...)		\
++	dev_info(&client->dev, format, __VA_ARGS__)
++#define sil164_err(client, format, ...)			\
++	dev_err(&client->dev, format, __VA_ARGS__)
++
++/* HW register definitions */
++
++#define SIL164_VENDOR_LO			0x0
++#define SIL164_VENDOR_HI			0x1
++#define SIL164_DEVICE_LO			0x2
++#define SIL164_DEVICE_HI			0x3
++#define SIL164_REVISION				0x4
++#define SIL164_FREQ_MIN				0x6
++#define SIL164_FREQ_MAX				0x7
++
++#define SIL164_CONTROL0				0x8
++#define SIL164_CONTROL0_POWER_ON		0x01
++#define SIL164_CONTROL0_EDGE_RISING		0x02
++#define SIL164_CONTROL0_INPUT_24BIT		0x04
++#define SIL164_CONTROL0_DUAL_EDGE		0x08
++#define SIL164_CONTROL0_HSYNC_ON		0x10
++#define SIL164_CONTROL0_VSYNC_ON		0x20
++
++#define SIL164_DETECT				0x9
++#define SIL164_DETECT_INTR_STAT			0x01
++#define SIL164_DETECT_HOTPLUG_STAT		0x02
++#define SIL164_DETECT_RECEIVER_STAT		0x04
++#define SIL164_DETECT_INTR_MODE_RECEIVER	0x00
++#define SIL164_DETECT_INTR_MODE_HOTPLUG		0x08
++#define SIL164_DETECT_OUT_MODE_HIGH		0x00
++#define SIL164_DETECT_OUT_MODE_INTR		0x10
++#define SIL164_DETECT_OUT_MODE_RECEIVER		0x20
++#define SIL164_DETECT_OUT_MODE_HOTPLUG		0x30
++#define SIL164_DETECT_VSWING_STAT		0x80
++
++#define SIL164_CONTROL1				0xa
++#define SIL164_CONTROL1_DESKEW_ENABLE		0x10
++#define SIL164_CONTROL1_DESKEW_INCR_SHIFT	5
++
++#define SIL164_GPIO				0xb
++
++#define SIL164_CONTROL2				0xc
++#define SIL164_CONTROL2_FILTER_ENABLE		0x01
++#define SIL164_CONTROL2_FILTER_SETTING_SHIFT	1
++#define SIL164_CONTROL2_DUALLINK_MASTER		0x40
++#define SIL164_CONTROL2_SYNC_CONT		0x80
++
++#define SIL164_DUALLINK				0xd
++#define SIL164_DUALLINK_ENABLE			0x10
++#define SIL164_DUALLINK_SKEW_SHIFT		5
++
++#define SIL164_PLLZONE				0xe
++#define SIL164_PLLZONE_STAT			0x08
++#define SIL164_PLLZONE_FORCE_ON			0x10
++#define SIL164_PLLZONE_FORCE_HIGH		0x20
++
++/* HW access functions */
++
++static void
++sil164_write(struct i2c_client *client, uint8_t addr, uint8_t val)
++{
++	uint8_t buf[] = {addr, val};
++	int ret;
++
++	ret = i2c_master_send(client, buf, ARRAY_SIZE(buf));
++	if (ret < 0)
++		sil164_err(client, "Error %d writing to subaddress 0x%x\n",
++			   ret, addr);
++}
++
++static uint8_t
++sil164_read(struct i2c_client *client, uint8_t addr)
++{
++	uint8_t val;
++	int ret;
++
++	ret = i2c_master_send(client, &addr, sizeof(addr));
++	if (ret < 0)
++		goto fail;
++
++	ret = i2c_master_recv(client, &val, sizeof(val));
++	if (ret < 0)
++		goto fail;
++
++	return val;
++
++fail:
++	sil164_err(client, "Error %d reading from subaddress 0x%x\n",
++		   ret, addr);
++	return 0;
++}
++
++static void
++sil164_set_power_state(struct i2c_client *client, bool on)
++{
++	uint8_t control0 = sil164_read(client, SIL164_CONTROL0);
++
++	if (on)
++		control0 |= SIL164_CONTROL0_POWER_ON;
++	else
++		control0 &= ~SIL164_CONTROL0_POWER_ON;
++
++	sil164_write(client, SIL164_CONTROL0, control0);
++}
++
++static void
++sil164_init_state(struct i2c_client *client,
++		  struct sil164_encoder_params *config,
++		  bool duallink)
++{
++	sil164_write(client, SIL164_CONTROL0,
++		     SIL164_CONTROL0_HSYNC_ON |
++		     SIL164_CONTROL0_VSYNC_ON |
++		     (config->input_edge ? SIL164_CONTROL0_EDGE_RISING : 0) |
++		     (config->input_width ? SIL164_CONTROL0_INPUT_24BIT : 0) |
++		     (config->input_dual ? SIL164_CONTROL0_DUAL_EDGE : 0));
++
++	sil164_write(client, SIL164_DETECT,
++		     SIL164_DETECT_INTR_STAT |
++		     SIL164_DETECT_OUT_MODE_RECEIVER);
++
++	sil164_write(client, SIL164_CONTROL1,
++		     (config->input_skew ? SIL164_CONTROL1_DESKEW_ENABLE : 0) |
++		     (((config->input_skew + 4) & 0x7)
++		      << SIL164_CONTROL1_DESKEW_INCR_SHIFT));
++
++	sil164_write(client, SIL164_CONTROL2,
++		     SIL164_CONTROL2_SYNC_CONT |
++		     (config->pll_filter ? 0 : SIL164_CONTROL2_FILTER_ENABLE) |
++		     (4 << SIL164_CONTROL2_FILTER_SETTING_SHIFT));
++
++	sil164_write(client, SIL164_PLLZONE, 0);
++
++	if (duallink)
++		sil164_write(client, SIL164_DUALLINK,
++			     SIL164_DUALLINK_ENABLE |
++			     (((config->duallink_skew + 4) & 0x7)
++			      << SIL164_DUALLINK_SKEW_SHIFT));
++	else
++		sil164_write(client, SIL164_DUALLINK, 0);
++}
++
++/* I2C driver functions */
++
++static int
++sil164_probe(struct i2c_client *client, const struct i2c_device_id *id)
++{
++	struct sil164_encoder_params *config;
++
++	int vendor = sil164_read(client, SIL164_VENDOR_HI) << 8 |
++		sil164_read(client, SIL164_VENDOR_LO);
++	int device = sil164_read(client, SIL164_DEVICE_HI) << 8 |
++		sil164_read(client, SIL164_DEVICE_LO);
++	int rev = sil164_read(client, SIL164_REVISION);
++
++	if (vendor != 0x1 || device != 0x6) {
++		sil164_info(client, "Unknown device %x:%x.%x\n",
++			   vendor, device, rev);
++		return -ENODEV;
++	}
++
++	config = kzalloc(sizeof(*config), GFP_KERNEL);
++	if (!config)
++		return -ENOMEM;
++
++	config->input_width = SIL164_CONTROL0_INPUT_24BIT;
++
++	sil164_init_state(client, config, 0);
++
++	sil164_set_power_state(client, 1); 
++
++	sil164_info(client, "Detected device %x:%x.%x\n",
++		    vendor, device, rev);
++
++	kfree(config);
++
++	return 0;
++}
++
++static int
++sil164_remove(struct i2c_client *client)
++{
++	sil164_set_power_state(client, 0); 
++	return 0;
++}
++
++static struct i2c_device_id sil164_ids[] = {
++	{ "sil164_simple", 0 },
++	{ }
++};
++MODULE_DEVICE_TABLE(i2c, sil164_ids);
++
++static struct i2c_driver sil164_simple_driver = {
++		.probe = sil164_probe,
++		.remove = sil164_remove,
++		.driver = {
++			.name = "sil164_simple",
++		},
++		.id_table = sil164_ids,
++};
++
++module_i2c_driver(sil164_simple_driver);
++
++MODULE_AUTHOR("CompuLab Ltd.");
++MODULE_DESCRIPTION("Silicon Image sil164 TMDS transmitter simple driver");
++MODULE_LICENSE("GPL and additional rights");
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0010-ARM-imx6ul-dvi-enable-dvi-output-on-cl-sb-som.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0010-ARM-imx6ul-dvi-enable-dvi-output-on-cl-sb-som.patch
new file mode 100644
index 0000000..cf024ce
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0010-ARM-imx6ul-dvi-enable-dvi-output-on-cl-sb-som.patch
@@ -0,0 +1,68 @@
+From 1c2555ebb633055dc8f5e703d99ca89d61634950 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Thu, 17 Dec 2015 11:00:31 +0200
+Subject: [PATCH 10/39] ARM: imx6ul: dvi: enable dvi output on cl-sb-som.
+
+Enable dvi output on cl-sb-som.
+1) Enable sil164 simple driver.
+2) Add dvi timings to device tree.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/cl-sb-som-imx6ul.dtsi |  2 +-
+ arch/arm/boot/dts/cl-som-imx6ul.dtsi    | 19 ++++++++++++++++++-
+ 2 files changed, 19 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/boot/dts/cl-sb-som-imx6ul.dtsi b/arch/arm/boot/dts/cl-sb-som-imx6ul.dtsi
+index 2a4f982..f52b4d1 100644
+--- a/arch/arm/boot/dts/cl-sb-som-imx6ul.dtsi
++++ b/arch/arm/boot/dts/cl-sb-som-imx6ul.dtsi
+@@ -38,7 +38,7 @@
+ 	};
+ 
+ 	dvicape {
+-		compatible = "sil164";
++		compatible = "sil164_simple";
+ 		reg = <0x39>;
+ 		powerdn-gpio = <&pca9555 13 0>;
+ 	};
+diff --git a/arch/arm/boot/dts/cl-som-imx6ul.dtsi b/arch/arm/boot/dts/cl-som-imx6ul.dtsi
+index f9cfac8..a52da93 100644
+--- a/arch/arm/boot/dts/cl-som-imx6ul.dtsi
++++ b/arch/arm/boot/dts/cl-som-imx6ul.dtsi
+@@ -439,7 +439,7 @@
+ 
+ 		display-timings {
+ 			native-mode = <&timing0>;
+-			timing0: timing0 {
++			timing0: lcd {
+ 				clock-frequency = <29580000>;
+ 				hactive = <800>;
+ 				vactive = <480>;
+@@ -455,6 +455,23 @@
+ 				de-active = <1>;
+ 				pixelclk-active = <0>;
+ 			};
++			timing1: dvi {
++				/* 1024x768p60 */
++				clock-frequency = <65000000>;
++				hactive = <1024>;
++				vactive = <768>;
++				hback-porch = <220>;
++				hfront-porch = <40>;
++				vback-porch = <21>;
++				vfront-porch = <7>;
++				hsync-len = <60>;
++				vsync-len = <10>;
++
++				hsync-active = <0>;
++				vsync-active = <0>;
++				de-active = <1>;
++				pixelclk-active = <0>;
++			};
+ 		};
+ 	};
+ };
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0011-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-sil16.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0011-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-sil16.patch
new file mode 100644
index 0000000..0e9cc6f
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0011-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-sil16.patch
@@ -0,0 +1,33 @@
+From 4e355c3c9a6fda0f565964ca270085fc6caa85b3 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Thu, 17 Dec 2015 11:05:45 +0200
+Subject: [PATCH 11/39] ARM: i.MX6UL: update cl-som-imx6ul defconfig for sil164
+
+Update cl-som-imx6ul defconfig for sil164.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/configs/cl_som_imx6ul_defconfig | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/configs/cl_som_imx6ul_defconfig b/arch/arm/configs/cl_som_imx6ul_defconfig
+index 357f013..326a9a7 100644
+--- a/arch/arm/configs/cl_som_imx6ul_defconfig
++++ b/arch/arm/configs/cl_som_imx6ul_defconfig
+@@ -1,4 +1,4 @@
+-CONFIG_LOCALVERSION="-6UL_ga"
++CONFIG_LOCALVERSION="-cl-som-imx6ul"
+ CONFIG_KERNEL_LZO=y
+ CONFIG_SYSVIPC=y
+ CONFIG_FHANDLE=y
+@@ -295,6 +295,7 @@ CONFIG_HANNSTAR_CABC=y
+ CONFIG_FRAMEBUFFER_CONSOLE=y
+ CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
+ CONFIG_LOGO=y
++CONFIG_SIL164_SIMPLE=y
+ CONFIG_SOUND=y
+ CONFIG_SND=y
+ CONFIG_SND_USB_AUDIO=m
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0012-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-mcs78.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0012-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-mcs78.patch
new file mode 100644
index 0000000..cce0b30
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0012-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-mcs78.patch
@@ -0,0 +1,39 @@
+From e8ebcd7d8cde5da84dcb7df28cce3b61bae54c50 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 27 Dec 2015 16:22:17 +0200
+Subject: [PATCH 12/39] ARM: i.MX6UL: update cl-som-imx6ul defconfig for
+ mcs7830
+
+Enable mcs7830 in defconfig.
+This allows using an nfs root in a non-FEC configuration.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/configs/cl_som_imx6ul_defconfig | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/configs/cl_som_imx6ul_defconfig b/arch/arm/configs/cl_som_imx6ul_defconfig
+index 326a9a7..486b9a6 100644
+--- a/arch/arm/configs/cl_som_imx6ul_defconfig
++++ b/arch/arm/configs/cl_som_imx6ul_defconfig
+@@ -161,8 +161,16 @@ CONFIG_MICREL_PHY=y
+ CONFIG_USB_PEGASUS=m
+ CONFIG_USB_RTL8150=m
+ CONFIG_USB_RTL8152=m
+-CONFIG_USB_USBNET=m
++CONFIG_USB_USBNET=y
++CONFIG_USB_NET_AX8817X=m
++CONFIG_USB_NET_AX88179_178A=m
++CONFIG_USB_NET_CDCETHER=m
+ CONFIG_USB_NET_CDC_EEM=m
++CONFIG_USB_NET_CDC_NCM=m
++CONFIG_USB_NET_NET1080=m
++CONFIG_USB_NET_MCS7830=y
++CONFIG_USB_NET_CDC_SUBSET=m
++CONFIG_USB_NET_ZAURUS=m
+ CONFIG_ATH_CARDS=y
+ CONFIG_ATH6KL=m
+ CONFIG_ATH6KL_SDIO=m
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0013-ARM-i.MX6UL-rename-the-dts-files-of-cl-som-imx6ul.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0013-ARM-i.MX6UL-rename-the-dts-files-of-cl-som-imx6ul.patch
new file mode 100644
index 0000000..5f844fe
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0013-ARM-i.MX6UL-rename-the-dts-files-of-cl-som-imx6ul.patch
@@ -0,0 +1,1427 @@
+From 2f2ace83b78ff9217150870a2611bcb081526e36 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Mon, 28 Dec 2015 15:50:02 +0200
+Subject: [PATCH 13/39] ARM: i.MX6UL: rename the dts files of cl-som-imx6ul
+
+Rename the dts files of cl-som-imx6ul in order to meet the
+CompuLab naming convention.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/cl-sb-som-imx6ul-wilink.dts     |  11 -
+ arch/arm/boot/dts/cl-sb-som-imx6ul.dts            |  11 -
+ arch/arm/boot/dts/cl-sb-som-imx6ul.dtsi           |  45 --
+ arch/arm/boot/dts/cl-som-imx6ul-wilink.dts        |  98 -----
+ arch/arm/boot/dts/cl-som-imx6ul.dts               |  16 -
+ arch/arm/boot/dts/cl-som-imx6ul.dtsi              | 477 ----------------------
+ arch/arm/boot/dts/imx6ul-cl-som-imx6ul-wilink.dts |  98 +++++
+ arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dts        |  16 +
+ arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi       | 477 ++++++++++++++++++++++
+ arch/arm/boot/dts/imx6ul-sb-som-imx6ul.dtsi       |  45 ++
+ arch/arm/boot/dts/imx6ul-sbc-imx6ul-wilink.dts    |  11 +
+ arch/arm/boot/dts/imx6ul-sbc-imx6ul.dts           |  11 +
+ 12 files changed, 658 insertions(+), 658 deletions(-)
+ delete mode 100644 arch/arm/boot/dts/cl-sb-som-imx6ul-wilink.dts
+ delete mode 100644 arch/arm/boot/dts/cl-sb-som-imx6ul.dts
+ delete mode 100644 arch/arm/boot/dts/cl-sb-som-imx6ul.dtsi
+ delete mode 100644 arch/arm/boot/dts/cl-som-imx6ul-wilink.dts
+ delete mode 100644 arch/arm/boot/dts/cl-som-imx6ul.dts
+ delete mode 100644 arch/arm/boot/dts/cl-som-imx6ul.dtsi
+ create mode 100644 arch/arm/boot/dts/imx6ul-cl-som-imx6ul-wilink.dts
+ create mode 100644 arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dts
+ create mode 100644 arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+ create mode 100644 arch/arm/boot/dts/imx6ul-sb-som-imx6ul.dtsi
+ create mode 100644 arch/arm/boot/dts/imx6ul-sbc-imx6ul-wilink.dts
+ create mode 100644 arch/arm/boot/dts/imx6ul-sbc-imx6ul.dts
+
+diff --git a/arch/arm/boot/dts/cl-sb-som-imx6ul-wilink.dts b/arch/arm/boot/dts/cl-sb-som-imx6ul-wilink.dts
+deleted file mode 100644
+index b4fe65c..0000000
+--- a/arch/arm/boot/dts/cl-sb-som-imx6ul-wilink.dts
++++ /dev/null
+@@ -1,11 +0,0 @@
+-/*
+- * Suppport for CompuLab SB-SOM-iMX6UL baseboard
+- */
+-
+-#include "cl-som-imx6ul-wilink.dts"
+-#include "cl-sb-som-imx6ul.dtsi"
+-
+-/ {
+-	model = "Compulab iMX6UL on SB-SOM";
+-	compatible = "fsl,imx6ul", "compulab,cl-som-imx6ul", "compulab,cl-sb-som-imx6ul";
+-};
+diff --git a/arch/arm/boot/dts/cl-sb-som-imx6ul.dts b/arch/arm/boot/dts/cl-sb-som-imx6ul.dts
+deleted file mode 100644
+index 27b7c4e..0000000
+--- a/arch/arm/boot/dts/cl-sb-som-imx6ul.dts
++++ /dev/null
+@@ -1,11 +0,0 @@
+-/*
+- * Suppport for CompuLab SB-SOM-iMX6UL baseboard
+- */
+-
+-#include "cl-som-imx6ul.dts"
+-#include "cl-sb-som-imx6ul.dtsi"
+-
+-/ {
+-	model = "Compulab iMX6UL on SB-SOM";
+-	compatible = "fsl,imx6ul", "compulab,cl-som-imx6ul", "compulab,cl-sb-som-imx6ul";
+-};
+diff --git a/arch/arm/boot/dts/cl-sb-som-imx6ul.dtsi b/arch/arm/boot/dts/cl-sb-som-imx6ul.dtsi
+deleted file mode 100644
+index f52b4d1..0000000
+--- a/arch/arm/boot/dts/cl-sb-som-imx6ul.dtsi
++++ /dev/null
+@@ -1,45 +0,0 @@
+-/*
+- * Suppport for CompuLab SB-SOM baseboard
+- */
+-
+-/ {
+-	reg_lcd_nstby_3v3: lcd_nstby_3v3 {
+-		compatible = "regulator-fixed";
+-		regulator-name = "lcd_nstby_3v3";
+-		gpio = <&pca9555 14 0>;
+-		enable-active-high;
+-		regulator-always-on;
+-	};
+-
+-	reg_div_en_3v3: div_en_3v3 {
+-		compatible = "regulator-fixed";
+-		regulator-name = "dvi_en_3v3";
+-		gpio = <&pca9555 13 0>;
+-		enable-active-high;
+-		regulator-always-on;
+-	};
+-
+-};
+-
+-&i2c1 {
+-	status = "okay";
+-
+-	eeprom at 54 {
+-		compatible = "at24,24c02";
+-		reg = <0x54>;
+-		pagesize = <16>;
+-	};
+-
+-	pca9555: pca9555 at 20 {
+-		compatible = "nxp,pca9555";
+-		gpio-controller;
+-		#gpio-cells = <2>;
+-		reg = <0x20>;
+-	};
+-
+-	dvicape {
+-		compatible = "sil164_simple";
+-		reg = <0x39>;
+-		powerdn-gpio = <&pca9555 13 0>;
+-	};
+-};
+diff --git a/arch/arm/boot/dts/cl-som-imx6ul-wilink.dts b/arch/arm/boot/dts/cl-som-imx6ul-wilink.dts
+deleted file mode 100644
+index 48d44d0..0000000
+--- a/arch/arm/boot/dts/cl-som-imx6ul-wilink.dts
++++ /dev/null
+@@ -1,98 +0,0 @@
+-/*
+- * Copyright (C) 2015 CompuLab LTD.
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 2 as
+- * published by the Free Software Foundation.
+- */
+-
+-#include "cl-som-imx6ul.dts"
+-
+-/ {
+-	regulators {
+-		compatible = "simple-bus";
+-		#address-cells = <1>;
+-		#size-cells = <0>;
+-
+-		wlan_en_reg: wlan_en-reg {
+-			compatible = "regulator-fixed";
+-			regulator-name = "wlan-en-regulator";
+-			regulator-min-microvolt = <1800000>;
+-			regulator-max-microvolt = <1800000>;
+-			gpio = <&gpio5 1 GPIO_ACTIVE_HIGH>;
+-			/* WLAN card specific delay */
+-			startup-delay-us = <70000>;
+-			enable-active-high;
+-		};
+-	};
+-
+-	kim {
+-		compatible = "kim";
+-		nshutdown_gpio = <128>;  /* GPIO5_IO00 */
+-		dev_name = "/dev/ttymxc1";
+-		flow_cntrl = <1>;
+-		baud_rate = <3000000>;
+-	};
+-
+-	btwilink {
+-		compatible = "btwilink";
+-	};
+-};
+-
+-&iomuxc {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_hog_1 &pinctrl_hog_2>;
+-	cl-som-imx6ul {
+-		pinctrl_hog_2: hoggrp-2 {
+-			fsl,pins = <
+-				/* Wlan En */
+-				MX6UL_PAD_SNVS_TAMPER1__GPIO5_IO01 0x17059
+-				/* Wlan IRQ */
+-				MX6UL_PAD_SNVS_TAMPER9__GPIO5_IO09 0x17059
+-				/* Bt En */
+-				MX6UL_PAD_SNVS_TAMPER0__GPIO5_IO00 0x17059
+-			>;
+-		};
+-
+-		pinctrl_uart2: uart2grp {
+-			fsl,pins = <
+-				MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX 0x1b0b1
+-				MX6UL_PAD_UART2_RX_DATA__UART2_DCE_RX 0x1b0b1
+-				MX6UL_PAD_UART2_CTS_B__UART2_DCE_CTS 0x1b0b1
+-				MX6UL_PAD_UART2_RTS_B__UART2_DCE_RTS 0x1b0b1
+-			>;
+-		};
+-	};
+-};
+-
+-&uart2 {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_uart2>;
+-	status = "okay";
+-
+-	/* enable rts/cts usage on uart2 */
+-	fsl,uart-has-rtscts;
+-};
+-
+-&usdhc1 {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_usdhc1>;
+-	/* clean up the removable device fields */
+-	cd-gpios = <>;
+-	wp-gpios = <>;
+-	no-1-8-v;
+-	keep-power-in-suspend;
+-	enable-sdio-wakeup;
+-	vmmc-supply = <&wlan_en_reg>;
+-	non-removable;
+-	cap-power-off-card;
+-	status = "okay";
+-	#address-cells = <1>;
+-	#size-cells = <0>;
+-	wlcore: wlcore at 0 {
+-		compatible = "ti,wl1835";
+-		reg = <2>;
+-		interrupt-parent = <&gpio5>;
+-		interrupts = <9 IRQ_TYPE_LEVEL_HIGH>;
+-	};
+-};
+diff --git a/arch/arm/boot/dts/cl-som-imx6ul.dts b/arch/arm/boot/dts/cl-som-imx6ul.dts
+deleted file mode 100644
+index dc7c696..0000000
+--- a/arch/arm/boot/dts/cl-som-imx6ul.dts
++++ /dev/null
+@@ -1,16 +0,0 @@
+-/*
+- * Copyright (C) 2015 CompuLab LTD.
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 2 as
+- * published by the Free Software Foundation.
+- */
+-
+-/dts-v1/;
+-
+-#include "cl-som-imx6ul.dtsi"
+-
+-/ {
+-	model = "CompuLab i.MX6 UltraLite SoM";
+-	compatible = "fsl,imx6ul", "compulab,cl-som-imx6ul";
+-};
+diff --git a/arch/arm/boot/dts/cl-som-imx6ul.dtsi b/arch/arm/boot/dts/cl-som-imx6ul.dtsi
+deleted file mode 100644
+index a52da93..0000000
+--- a/arch/arm/boot/dts/cl-som-imx6ul.dtsi
++++ /dev/null
+@@ -1,477 +0,0 @@
+-/*
+- * Copyright (C) 2015 CompuLab LTD.
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 2 as
+- * published by the Free Software Foundation.
+- */
+-
+-#include <dt-bindings/input/input.h>
+-#include <dt-bindings/interrupt-controller/irq.h>
+-#include "imx6ul.dtsi"
+-
+-/ {
+-	memory {
+-		reg = <0x80000000 0x20000000>;
+-	};
+-
+-	chosen {
+-		stdout-path = &uart3;
+-	};
+-
+-	backlight {
+-		compatible = "pwm-backlight";
+-		pwms = <&pwm1 0 5000000>;
+-		brightness-levels = <0 4 8 16 32 64 128 255>;
+-		default-brightness-level = <6>;
+-		status = "okay";
+-	};
+-
+-	pu_dummy: pudummy_reg {
+-		compatible = "fsl,imx6-dummy-pureg";
+-	};
+-
+-	regulators {
+-		compatible = "simple-bus";
+-		#address-cells = <1>;
+-		#size-cells = <0>;
+-
+-		reg_sd2_vmmc: regulator at 0 {
+-			compatible = "regulator-fixed";
+-			regulator-name = "VSD_3V3";
+-			regulator-min-microvolt = <3300000>;
+-			regulator-max-microvolt = <3300000>;
+-			gpio = <&gpio4 10 GPIO_ACTIVE_HIGH>;
+-			enable-active-high;
+-		};
+-
+-		reg_usb_otg1_vbus: regulator at 1 {
+-			compatible = "regulator-fixed";
+-			pinctrl-names = "default";
+-			pinctrl-0 = <&pinctrl_usb_otg1>;
+-			regulator-name = "usb_otg1_vbus";
+-			regulator-min-microvolt = <5000000>;
+-			regulator-max-microvolt = <5000000>;
+-			gpio = <&gpio1 4 GPIO_ACTIVE_HIGH>;
+-			enable-active-high;
+-		};
+-
+-		reg_phy_nreset: regulator at 2 {
+-			compatible = "regulator-fixed";
+-			regulator-name = "phy_nreset";
+-			regulator-min-microvolt = <3300000>;
+-			regulator-max-microvolt = <3300000>;
+-			gpio = <&gpio5 8 GPIO_ACTIVE_HIGH>;
+-			enable-active-high;
+-			regulator-always-on;
+-		};
+-
+-		tsc2046reg: tsc2046-reg {
+-			compatible = "regulator-fixed";
+-			regulator-name = "tsc2046-reg";
+-			regulator-min-microvolt = <3300000>;
+-			regulator-max-microvolt = <3300000>;
+-			regulator-always-on;
+-		};
+-
+-	};
+-
+-	leds {
+-		compatible = "gpio-leds";
+-
+-		debug-led {
+-			label = "Heartbeat";
+-			gpios = <&gpio5 4 0>;
+-			linux,default-trigger = "heartbeat";
+-		};
+-	};
+-};
+-
+-&iomuxc {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_hog_1>;
+-	cl-som-imx6ul {
+-		pinctrl_hog_1: hoggrp-1 {
+-			fsl,pins = <
+-				/* Heartbeat */
+-				MX6UL_PAD_SNVS_TAMPER4__GPIO5_IO04 0x17059
+-				/* eMMC nReset */
+-				MX6UL_PAD_NAND_ALE__GPIO4_IO10	0x17059
+-				/* Phy nReset */
+-				MX6UL_PAD_SNVS_TAMPER8__GPIO5_IO08	0x17059
+-			>;
+-		};
+-
+-		pinctrl_enet1: enet1grp {
+-			fsl,pins = <
+-				MX6UL_PAD_GPIO1_IO07__ENET1_MDC		0x1b0b0
+-				MX6UL_PAD_GPIO1_IO06__ENET1_MDIO	0x1b0b0
+-				MX6UL_PAD_ENET1_RX_EN__ENET1_RX_EN	0x1b0b0
+-				MX6UL_PAD_ENET1_RX_ER__ENET1_RX_ER	0x1b0b0
+-				MX6UL_PAD_ENET1_RX_DATA0__ENET1_RDATA00	0x1b0b0
+-				MX6UL_PAD_ENET1_RX_DATA1__ENET1_RDATA01	0x1b0b0
+-				MX6UL_PAD_ENET1_TX_EN__ENET1_TX_EN	0x1b0b0
+-				MX6UL_PAD_ENET1_TX_DATA0__ENET1_TDATA00	0x1b0b0
+-				MX6UL_PAD_ENET1_TX_DATA1__ENET1_TDATA01	0x1b0b0
+-				MX6UL_PAD_ENET1_TX_CLK__ENET1_REF_CLK1	0x4001b031
+-				MX6UL_PAD_SNVS_TAMPER5__GPIO5_IO05	0x80000000
+-			>;
+-		};
+-
+-		pinctrl_uart2: uart2grp {
+-			fsl,pins = <
+-				MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX 0x1b0b1
+-				MX6UL_PAD_UART2_RX_DATA__UART2_DCE_RX 0x1b0b1
+-				MX6UL_PAD_UART2_CTS_B__UART2_DCE_CTS 0x1b0b1
+-				MX6UL_PAD_UART2_RTS_B__UART2_DCE_RTS 0x1b0b1
+-			>;
+-		};
+-
+-		pinctrl_uart3: uart3grp {
+-			fsl,pins = <
+-				MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX 0x1b0b1
+-				MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX 0x1b0b1
+-			>;
+-		};
+-
+-		pinctrl_usdhc1: usdhc1grp {
+-			fsl,pins = <
+-				MX6UL_PAD_SD1_CMD__USDHC1_CMD     0x17059
+-				MX6UL_PAD_SD1_CLK__USDHC1_CLK     0x17059
+-				MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x17059
+-				MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x17059
+-				MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x17059
+-				MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x17059
+-				MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059
+-				MX6UL_PAD_UART1_CTS_B__GPIO1_IO18 0x17059
+-			>;
+-		};
+-
+-		pinctrl_usdhc2: usdhc2grp {
+-			fsl,pins = <
+-				MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x17059
+-				MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x17059
+-				MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x17059
+-				MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x17059
+-				MX6UL_PAD_NAND_DATA04__USDHC2_DATA4 0x17059
+-				MX6UL_PAD_NAND_DATA05__USDHC2_DATA5 0x17059
+-				MX6UL_PAD_NAND_DATA06__USDHC2_DATA6 0x17059
+-				MX6UL_PAD_NAND_DATA07__USDHC2_DATA7 0x17059
+-				MX6UL_PAD_NAND_WE_B__USDHC2_CMD	0x17059
+-				MX6UL_PAD_NAND_RE_B__USDHC2_CLK	0x17059
+-			>;
+-		};
+-
+-		/* pins for spi */
+-		pinctrl_ecspi2_cs: ecspi2_cs_grp {
+-			fsl,pins = <
+-				MX6UL_PAD_LCD_RESET__GPIO3_IO04  0x17059
+-			>;
+-		};
+-
+-		pinctrl_ecspi2: ecspi2grp {
+-			fsl,pins = <
+-				MX6UL_PAD_UART5_TX_DATA__ECSPI2_MOSI	0x1b0b1
+-				MX6UL_PAD_UART5_RX_DATA__ECSPI2_MISO	0x1b0b1
+-				MX6UL_PAD_UART4_TX_DATA__ECSPI2_SCLK	0x1b0b1
+-			>;
+-		};
+-
+-		pinctrl_ecspi4_cs: ecspi4_cs_grp {
+-			fsl,pins = <
+-				MX6UL_PAD_ENET2_RX_ER__GPIO2_IO15	0x17059
+-			>;
+-		};
+-
+-		pinctrl_ecspi4: ecspi4grp {
+-			fsl,pins = <
+-				MX6UL_PAD_ENET2_TX_EN__ECSPI4_MOSI	0x1b0b1
+-				MX6UL_PAD_ENET2_TX_CLK__ECSPI4_MISO	0x1b0b1
+-				MX6UL_PAD_ENET2_TX_DATA1__ECSPI4_SCLK	0x1b0b1
+-			>;
+-		};
+-
+-		pinctrl_i2c1: i2c1grp {
+-			fsl,pins = <
+-				MX6UL_PAD_GPIO1_IO02__I2C1_SCL	0x4001b8b0
+-				MX6UL_PAD_GPIO1_IO03__I2C1_SDA	0x4001b8b0
+-			>;
+-		};
+-
+-		pinctrl_i2c3: i2c3grp {
+-			fsl,pins = <
+-				MX6UL_PAD_UART1_TX_DATA__I2C3_SCL 0x4001b8b0
+-				MX6UL_PAD_UART1_RX_DATA__I2C3_SDA 0x4001b8b0
+-			>;
+-		};
+-
+-		pinctrl_usb_otg1_id: usbotg1idgrp {
+-			fsl,pins = <
+-				MX6UL_PAD_GPIO1_IO00__ANATOP_OTG1_ID	0x17059
+-			>;
+-		};
+-
+-		pinctrl_usb_otg1: usbotg1grp {
+-			fsl,pins = <
+-				MX6UL_PAD_GPIO1_IO04__GPIO1_IO04        0x10b0
+-			>;
+-		};
+-
+-		pinctrl_lcdif_dat: lcdifdatgrp {
+-			fsl,pins = <
+-				MX6UL_PAD_LCD_DATA00__LCDIF_DATA00  0x79
+-				MX6UL_PAD_LCD_DATA01__LCDIF_DATA01  0x79
+-				MX6UL_PAD_LCD_DATA02__LCDIF_DATA02  0x79
+-				MX6UL_PAD_LCD_DATA03__LCDIF_DATA03  0x79
+-				MX6UL_PAD_LCD_DATA04__LCDIF_DATA04  0x79
+-				MX6UL_PAD_LCD_DATA05__LCDIF_DATA05  0x79
+-				MX6UL_PAD_LCD_DATA06__LCDIF_DATA06  0x79
+-				MX6UL_PAD_LCD_DATA07__LCDIF_DATA07  0x79
+-				MX6UL_PAD_LCD_DATA08__LCDIF_DATA08  0x79
+-				MX6UL_PAD_LCD_DATA09__LCDIF_DATA09  0x79
+-				MX6UL_PAD_LCD_DATA10__LCDIF_DATA10  0x79
+-				MX6UL_PAD_LCD_DATA11__LCDIF_DATA11  0x79
+-				MX6UL_PAD_LCD_DATA12__LCDIF_DATA12  0x79
+-				MX6UL_PAD_LCD_DATA13__LCDIF_DATA13  0x79
+-				MX6UL_PAD_LCD_DATA14__LCDIF_DATA14  0x79
+-				MX6UL_PAD_LCD_DATA15__LCDIF_DATA15  0x79
+-				MX6UL_PAD_LCD_DATA16__LCDIF_DATA16  0x79
+-				MX6UL_PAD_LCD_DATA17__LCDIF_DATA17  0x79
+-				MX6UL_PAD_LCD_DATA18__LCDIF_DATA18  0x79
+-				MX6UL_PAD_LCD_DATA19__LCDIF_DATA19  0x79
+-				MX6UL_PAD_LCD_DATA20__LCDIF_DATA20  0x79
+-				MX6UL_PAD_LCD_DATA21__LCDIF_DATA21  0x79
+-				MX6UL_PAD_LCD_DATA22__LCDIF_DATA22  0x79
+-				MX6UL_PAD_LCD_DATA23__LCDIF_DATA23  0x79
+-			>;
+-		};
+-
+-		pinctrl_lcdif_ctrl: lcdifctrlgrp {
+-			fsl,pins = <
+-				MX6UL_PAD_LCD_CLK__LCDIF_CLK	    0x79
+-				MX6UL_PAD_LCD_ENABLE__LCDIF_ENABLE  0x79
+-				MX6UL_PAD_LCD_HSYNC__LCDIF_HSYNC    0x79
+-				MX6UL_PAD_LCD_VSYNC__LCDIF_VSYNC    0x79
+-			>;
+-		};
+-
+-		pinctrl_pwm1: pwm1grp {
+-			fsl,pins = <
+-				MX6UL_PAD_GPIO1_IO08__PWM1_OUT   0x110b0
+-			>;
+-		};
+-
+-		pinctrl_tsc2046: tsc2046grp {
+-			fsl,pins = <
+-				/* tsc2046 PENDOWN */
+-				MX6UL_PAD_GPIO1_IO01__GPIO1_IO01  0x80000000
+-			>;
+-		};
+-	};
+-};
+-
+-&uart3 {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_uart3>;
+-	status = "okay";
+-};
+-
+-&usdhc1 {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_usdhc1>;
+-	cd-gpios = <&gpio1 19 0>;
+-	wp-gpios = <&gpio1 18 0>;
+-	keep-power-in-suspend;
+-	enable-sdio-wakeup;
+-	status = "okay";
+-};
+-
+-&usdhc2 {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_usdhc2>;
+-	keep-power-in-suspend;
+-	enable-sdio-wakeup;
+-	non-removable;
+-	vmmc-supply = <&reg_sd2_vmmc>;
+-	status = "okay";
+-};
+-
+-&ecspi2 {
+-	fsl,spi-num-chipselects = <1>;
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_ecspi2 &pinctrl_ecspi2_cs>;
+-	cs-gpios = <&gpio3 4 0>;
+-	status = "okay";
+-
+-	/* touch controller */
+-	touch:	tsc2046 at 0 {
+-		pinctrl-names = "default";
+-		pinctrl-0 = <&pinctrl_tsc2046>;
+-
+-		compatible = "ti,tsc2046";
+-		vcc-supply = <&tsc2046reg>;
+-
+-		reg = <0>;
+-		spi-max-frequency = <1500000>;
+-
+-		interrupt-parent = <&gpio1>;
+-		interrupts = <1 0>;
+-		pendown-gpio = <&gpio1 1 0>;
+-
+-		ti,x-min = /bits/ 16 <0x0>;
+-		ti,x-max = /bits/ 16 <0x0fff>;
+-		ti,y-min = /bits/ 16 <0x0>;
+-		ti,y-max = /bits/ 16 <0x0fff>;
+-
+-		ti,x-plate-ohms = /bits/ 16 <180>;
+-		ti,pressure-max = /bits/ 16 <255>;
+-
+-		ti,debounce-max = /bits/ 16 <30>;
+-		ti,debounce-tol = /bits/ 16 <10>;
+-		ti,debounce-rep = /bits/ 16 <1>;
+-
+-		linux,wakeup;
+-	};
+-};
+-
+-&ecspi4 {
+-	fsl,spi-num-chipselects = <1>;
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_ecspi4 &pinctrl_ecspi4_cs>;
+-	cs-gpios = <&gpio2 15 0>;
+-	status = "okay";
+-
+-	m25px16 at 0 {
+-		#address-cells = <1>;
+-		#size-cells = <1>;
+-		compatible = "st,m25px16", "st,m25p";
+-		spi-max-frequency = <20000000>;
+-		reg = <0>;
+-
+-		partition at 0 {
+-			label = "uboot";
+-			reg = <0x0 0xc0000>;
+-		};
+-
+-		partition at c0000 {
+-			label = "uboot environment";
+-			reg = <0xc0000 0x40000>;
+-		};
+-
+-		partition at 100000 {
+-			label = "splash";
+-			reg = <0x100000 0x100000>;
+-		};
+-	};
+-};
+-
+-&fec1 {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_enet1>;
+-	phy-mode = "rmii";
+-	phy-handle = <&ethphy0>;
+-	status = "okay";
+-
+-	mdio {
+-		#address-cells = <1>;
+-		#size-cells = <0>;
+-
+-		ethphy0: ethernet-phy at 0 {
+-			compatible = "ethernet-phy-ieee802.3-c22";
+-			reg = <0>;
+-		};
+-	};
+-};
+-
+-&i2c1 {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_i2c1>;
+-	status = "disabled";
+-};
+-
+-&i2c3 {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_i2c3>;
+-	status = "okay";
+-
+-	eeprom at 50 {
+-		compatible = "at24,24c02";
+-		reg = <0x50>;
+-		pagesize = <16>;
+-	};
+-
+-	rtc at 56 {
+-		compatible = "emmicro,em3027";
+-		reg = <0x56>;
+-	};
+-};
+-
+-&usbotg1 {
+-	vbus-supply = <&reg_usb_otg1_vbus>;
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_usb_otg1_id>;
+-	dr_mode = "otg";
+-	status = "okay";
+-};
+-
+-&usbotg2 {
+-	dr_mode = "host";
+-	disable-over-current;
+-	status = "okay";
+-};
+-
+-&pwm1 {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_pwm1>;
+-	status = "okay";
+-};
+-
+-&lcdif {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_lcdif_dat
+-		     &pinctrl_lcdif_ctrl>;
+-	display = <&display0>;
+-	status = "okay";
+-
+-	display0: display {
+-		bits-per-pixel = <16>;
+-		bus-width = <24>;
+-
+-		display-timings {
+-			native-mode = <&timing0>;
+-			timing0: lcd {
+-				clock-frequency = <29580000>;
+-				hactive = <800>;
+-				vactive = <480>;
+-				hfront-porch = <16>;
+-				hback-porch = <1>;
+-				hsync-len = <80>;
+-				vback-porch = <13>;
+-				vfront-porch = <16>;
+-				vsync-len = <16>;
+-
+-				hsync-active = <0>;
+-				vsync-active = <0>;
+-				de-active = <1>;
+-				pixelclk-active = <0>;
+-			};
+-			timing1: dvi {
+-				/* 1024x768p60 */
+-				clock-frequency = <65000000>;
+-				hactive = <1024>;
+-				vactive = <768>;
+-				hback-porch = <220>;
+-				hfront-porch = <40>;
+-				vback-porch = <21>;
+-				vfront-porch = <7>;
+-				hsync-len = <60>;
+-				vsync-len = <10>;
+-
+-				hsync-active = <0>;
+-				vsync-active = <0>;
+-				de-active = <1>;
+-				pixelclk-active = <0>;
+-			};
+-		};
+-	};
+-};
+diff --git a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul-wilink.dts b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul-wilink.dts
+new file mode 100644
+index 0000000..1173fea
+--- /dev/null
++++ b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul-wilink.dts
+@@ -0,0 +1,98 @@
++/*
++ * Copyright (C) 2015 CompuLab LTD.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include "imx6ul-cl-som-imx6ul.dts"
++
++/ {
++	regulators {
++		compatible = "simple-bus";
++		#address-cells = <1>;
++		#size-cells = <0>;
++
++		wlan_en_reg: wlan_en-reg {
++			compatible = "regulator-fixed";
++			regulator-name = "wlan-en-regulator";
++			regulator-min-microvolt = <1800000>;
++			regulator-max-microvolt = <1800000>;
++			gpio = <&gpio5 1 GPIO_ACTIVE_HIGH>;
++			/* WLAN card specific delay */
++			startup-delay-us = <70000>;
++			enable-active-high;
++		};
++	};
++
++	kim {
++		compatible = "kim";
++		nshutdown_gpio = <128>;  /* GPIO5_IO00 */
++		dev_name = "/dev/ttymxc1";
++		flow_cntrl = <1>;
++		baud_rate = <3000000>;
++	};
++
++	btwilink {
++		compatible = "btwilink";
++	};
++};
++
++&iomuxc {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_hog_1 &pinctrl_hog_2>;
++	cl-som-imx6ul {
++		pinctrl_hog_2: hoggrp-2 {
++			fsl,pins = <
++				/* Wlan En */
++				MX6UL_PAD_SNVS_TAMPER1__GPIO5_IO01 0x17059
++				/* Wlan IRQ */
++				MX6UL_PAD_SNVS_TAMPER9__GPIO5_IO09 0x17059
++				/* Bt En */
++				MX6UL_PAD_SNVS_TAMPER0__GPIO5_IO00 0x17059
++			>;
++		};
++
++		pinctrl_uart2: uart2grp {
++			fsl,pins = <
++				MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX 0x1b0b1
++				MX6UL_PAD_UART2_RX_DATA__UART2_DCE_RX 0x1b0b1
++				MX6UL_PAD_UART2_CTS_B__UART2_DCE_CTS 0x1b0b1
++				MX6UL_PAD_UART2_RTS_B__UART2_DCE_RTS 0x1b0b1
++			>;
++		};
++	};
++};
++
++&uart2 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_uart2>;
++	status = "okay";
++
++	/* enable rts/cts usage on uart2 */
++	fsl,uart-has-rtscts;
++};
++
++&usdhc1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usdhc1>;
++	/* clean up the removable device fields */
++	cd-gpios = <>;
++	wp-gpios = <>;
++	no-1-8-v;
++	keep-power-in-suspend;
++	enable-sdio-wakeup;
++	vmmc-supply = <&wlan_en_reg>;
++	non-removable;
++	cap-power-off-card;
++	status = "okay";
++	#address-cells = <1>;
++	#size-cells = <0>;
++	wlcore: wlcore at 0 {
++		compatible = "ti,wl1835";
++		reg = <2>;
++		interrupt-parent = <&gpio5>;
++		interrupts = <9 IRQ_TYPE_LEVEL_HIGH>;
++	};
++};
+diff --git a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dts b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dts
+new file mode 100644
+index 0000000..1138af2
+--- /dev/null
++++ b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dts
+@@ -0,0 +1,16 @@
++/*
++ * Copyright (C) 2015 CompuLab LTD.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++/dts-v1/;
++
++#include "imx6ul-cl-som-imx6ul.dtsi"
++
++/ {
++	model = "CompuLab i.MX6 UltraLite SoM";
++	compatible = "fsl,imx6ul", "compulab,cl-som-imx6ul";
++};
+diff --git a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+new file mode 100644
+index 0000000..a52da93
+--- /dev/null
++++ b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+@@ -0,0 +1,477 @@
++/*
++ * Copyright (C) 2015 CompuLab LTD.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <dt-bindings/input/input.h>
++#include <dt-bindings/interrupt-controller/irq.h>
++#include "imx6ul.dtsi"
++
++/ {
++	memory {
++		reg = <0x80000000 0x20000000>;
++	};
++
++	chosen {
++		stdout-path = &uart3;
++	};
++
++	backlight {
++		compatible = "pwm-backlight";
++		pwms = <&pwm1 0 5000000>;
++		brightness-levels = <0 4 8 16 32 64 128 255>;
++		default-brightness-level = <6>;
++		status = "okay";
++	};
++
++	pu_dummy: pudummy_reg {
++		compatible = "fsl,imx6-dummy-pureg";
++	};
++
++	regulators {
++		compatible = "simple-bus";
++		#address-cells = <1>;
++		#size-cells = <0>;
++
++		reg_sd2_vmmc: regulator at 0 {
++			compatible = "regulator-fixed";
++			regulator-name = "VSD_3V3";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			gpio = <&gpio4 10 GPIO_ACTIVE_HIGH>;
++			enable-active-high;
++		};
++
++		reg_usb_otg1_vbus: regulator at 1 {
++			compatible = "regulator-fixed";
++			pinctrl-names = "default";
++			pinctrl-0 = <&pinctrl_usb_otg1>;
++			regulator-name = "usb_otg1_vbus";
++			regulator-min-microvolt = <5000000>;
++			regulator-max-microvolt = <5000000>;
++			gpio = <&gpio1 4 GPIO_ACTIVE_HIGH>;
++			enable-active-high;
++		};
++
++		reg_phy_nreset: regulator at 2 {
++			compatible = "regulator-fixed";
++			regulator-name = "phy_nreset";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			gpio = <&gpio5 8 GPIO_ACTIVE_HIGH>;
++			enable-active-high;
++			regulator-always-on;
++		};
++
++		tsc2046reg: tsc2046-reg {
++			compatible = "regulator-fixed";
++			regulator-name = "tsc2046-reg";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			regulator-always-on;
++		};
++
++	};
++
++	leds {
++		compatible = "gpio-leds";
++
++		debug-led {
++			label = "Heartbeat";
++			gpios = <&gpio5 4 0>;
++			linux,default-trigger = "heartbeat";
++		};
++	};
++};
++
++&iomuxc {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_hog_1>;
++	cl-som-imx6ul {
++		pinctrl_hog_1: hoggrp-1 {
++			fsl,pins = <
++				/* Heartbeat */
++				MX6UL_PAD_SNVS_TAMPER4__GPIO5_IO04 0x17059
++				/* eMMC nReset */
++				MX6UL_PAD_NAND_ALE__GPIO4_IO10	0x17059
++				/* Phy nReset */
++				MX6UL_PAD_SNVS_TAMPER8__GPIO5_IO08	0x17059
++			>;
++		};
++
++		pinctrl_enet1: enet1grp {
++			fsl,pins = <
++				MX6UL_PAD_GPIO1_IO07__ENET1_MDC		0x1b0b0
++				MX6UL_PAD_GPIO1_IO06__ENET1_MDIO	0x1b0b0
++				MX6UL_PAD_ENET1_RX_EN__ENET1_RX_EN	0x1b0b0
++				MX6UL_PAD_ENET1_RX_ER__ENET1_RX_ER	0x1b0b0
++				MX6UL_PAD_ENET1_RX_DATA0__ENET1_RDATA00	0x1b0b0
++				MX6UL_PAD_ENET1_RX_DATA1__ENET1_RDATA01	0x1b0b0
++				MX6UL_PAD_ENET1_TX_EN__ENET1_TX_EN	0x1b0b0
++				MX6UL_PAD_ENET1_TX_DATA0__ENET1_TDATA00	0x1b0b0
++				MX6UL_PAD_ENET1_TX_DATA1__ENET1_TDATA01	0x1b0b0
++				MX6UL_PAD_ENET1_TX_CLK__ENET1_REF_CLK1	0x4001b031
++				MX6UL_PAD_SNVS_TAMPER5__GPIO5_IO05	0x80000000
++			>;
++		};
++
++		pinctrl_uart2: uart2grp {
++			fsl,pins = <
++				MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX 0x1b0b1
++				MX6UL_PAD_UART2_RX_DATA__UART2_DCE_RX 0x1b0b1
++				MX6UL_PAD_UART2_CTS_B__UART2_DCE_CTS 0x1b0b1
++				MX6UL_PAD_UART2_RTS_B__UART2_DCE_RTS 0x1b0b1
++			>;
++		};
++
++		pinctrl_uart3: uart3grp {
++			fsl,pins = <
++				MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX 0x1b0b1
++				MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX 0x1b0b1
++			>;
++		};
++
++		pinctrl_usdhc1: usdhc1grp {
++			fsl,pins = <
++				MX6UL_PAD_SD1_CMD__USDHC1_CMD     0x17059
++				MX6UL_PAD_SD1_CLK__USDHC1_CLK     0x17059
++				MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x17059
++				MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x17059
++				MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x17059
++				MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x17059
++				MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059
++				MX6UL_PAD_UART1_CTS_B__GPIO1_IO18 0x17059
++			>;
++		};
++
++		pinctrl_usdhc2: usdhc2grp {
++			fsl,pins = <
++				MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x17059
++				MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x17059
++				MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x17059
++				MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x17059
++				MX6UL_PAD_NAND_DATA04__USDHC2_DATA4 0x17059
++				MX6UL_PAD_NAND_DATA05__USDHC2_DATA5 0x17059
++				MX6UL_PAD_NAND_DATA06__USDHC2_DATA6 0x17059
++				MX6UL_PAD_NAND_DATA07__USDHC2_DATA7 0x17059
++				MX6UL_PAD_NAND_WE_B__USDHC2_CMD	0x17059
++				MX6UL_PAD_NAND_RE_B__USDHC2_CLK	0x17059
++			>;
++		};
++
++		/* pins for spi */
++		pinctrl_ecspi2_cs: ecspi2_cs_grp {
++			fsl,pins = <
++				MX6UL_PAD_LCD_RESET__GPIO3_IO04  0x17059
++			>;
++		};
++
++		pinctrl_ecspi2: ecspi2grp {
++			fsl,pins = <
++				MX6UL_PAD_UART5_TX_DATA__ECSPI2_MOSI	0x1b0b1
++				MX6UL_PAD_UART5_RX_DATA__ECSPI2_MISO	0x1b0b1
++				MX6UL_PAD_UART4_TX_DATA__ECSPI2_SCLK	0x1b0b1
++			>;
++		};
++
++		pinctrl_ecspi4_cs: ecspi4_cs_grp {
++			fsl,pins = <
++				MX6UL_PAD_ENET2_RX_ER__GPIO2_IO15	0x17059
++			>;
++		};
++
++		pinctrl_ecspi4: ecspi4grp {
++			fsl,pins = <
++				MX6UL_PAD_ENET2_TX_EN__ECSPI4_MOSI	0x1b0b1
++				MX6UL_PAD_ENET2_TX_CLK__ECSPI4_MISO	0x1b0b1
++				MX6UL_PAD_ENET2_TX_DATA1__ECSPI4_SCLK	0x1b0b1
++			>;
++		};
++
++		pinctrl_i2c1: i2c1grp {
++			fsl,pins = <
++				MX6UL_PAD_GPIO1_IO02__I2C1_SCL	0x4001b8b0
++				MX6UL_PAD_GPIO1_IO03__I2C1_SDA	0x4001b8b0
++			>;
++		};
++
++		pinctrl_i2c3: i2c3grp {
++			fsl,pins = <
++				MX6UL_PAD_UART1_TX_DATA__I2C3_SCL 0x4001b8b0
++				MX6UL_PAD_UART1_RX_DATA__I2C3_SDA 0x4001b8b0
++			>;
++		};
++
++		pinctrl_usb_otg1_id: usbotg1idgrp {
++			fsl,pins = <
++				MX6UL_PAD_GPIO1_IO00__ANATOP_OTG1_ID	0x17059
++			>;
++		};
++
++		pinctrl_usb_otg1: usbotg1grp {
++			fsl,pins = <
++				MX6UL_PAD_GPIO1_IO04__GPIO1_IO04        0x10b0
++			>;
++		};
++
++		pinctrl_lcdif_dat: lcdifdatgrp {
++			fsl,pins = <
++				MX6UL_PAD_LCD_DATA00__LCDIF_DATA00  0x79
++				MX6UL_PAD_LCD_DATA01__LCDIF_DATA01  0x79
++				MX6UL_PAD_LCD_DATA02__LCDIF_DATA02  0x79
++				MX6UL_PAD_LCD_DATA03__LCDIF_DATA03  0x79
++				MX6UL_PAD_LCD_DATA04__LCDIF_DATA04  0x79
++				MX6UL_PAD_LCD_DATA05__LCDIF_DATA05  0x79
++				MX6UL_PAD_LCD_DATA06__LCDIF_DATA06  0x79
++				MX6UL_PAD_LCD_DATA07__LCDIF_DATA07  0x79
++				MX6UL_PAD_LCD_DATA08__LCDIF_DATA08  0x79
++				MX6UL_PAD_LCD_DATA09__LCDIF_DATA09  0x79
++				MX6UL_PAD_LCD_DATA10__LCDIF_DATA10  0x79
++				MX6UL_PAD_LCD_DATA11__LCDIF_DATA11  0x79
++				MX6UL_PAD_LCD_DATA12__LCDIF_DATA12  0x79
++				MX6UL_PAD_LCD_DATA13__LCDIF_DATA13  0x79
++				MX6UL_PAD_LCD_DATA14__LCDIF_DATA14  0x79
++				MX6UL_PAD_LCD_DATA15__LCDIF_DATA15  0x79
++				MX6UL_PAD_LCD_DATA16__LCDIF_DATA16  0x79
++				MX6UL_PAD_LCD_DATA17__LCDIF_DATA17  0x79
++				MX6UL_PAD_LCD_DATA18__LCDIF_DATA18  0x79
++				MX6UL_PAD_LCD_DATA19__LCDIF_DATA19  0x79
++				MX6UL_PAD_LCD_DATA20__LCDIF_DATA20  0x79
++				MX6UL_PAD_LCD_DATA21__LCDIF_DATA21  0x79
++				MX6UL_PAD_LCD_DATA22__LCDIF_DATA22  0x79
++				MX6UL_PAD_LCD_DATA23__LCDIF_DATA23  0x79
++			>;
++		};
++
++		pinctrl_lcdif_ctrl: lcdifctrlgrp {
++			fsl,pins = <
++				MX6UL_PAD_LCD_CLK__LCDIF_CLK	    0x79
++				MX6UL_PAD_LCD_ENABLE__LCDIF_ENABLE  0x79
++				MX6UL_PAD_LCD_HSYNC__LCDIF_HSYNC    0x79
++				MX6UL_PAD_LCD_VSYNC__LCDIF_VSYNC    0x79
++			>;
++		};
++
++		pinctrl_pwm1: pwm1grp {
++			fsl,pins = <
++				MX6UL_PAD_GPIO1_IO08__PWM1_OUT   0x110b0
++			>;
++		};
++
++		pinctrl_tsc2046: tsc2046grp {
++			fsl,pins = <
++				/* tsc2046 PENDOWN */
++				MX6UL_PAD_GPIO1_IO01__GPIO1_IO01  0x80000000
++			>;
++		};
++	};
++};
++
++&uart3 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_uart3>;
++	status = "okay";
++};
++
++&usdhc1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usdhc1>;
++	cd-gpios = <&gpio1 19 0>;
++	wp-gpios = <&gpio1 18 0>;
++	keep-power-in-suspend;
++	enable-sdio-wakeup;
++	status = "okay";
++};
++
++&usdhc2 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usdhc2>;
++	keep-power-in-suspend;
++	enable-sdio-wakeup;
++	non-removable;
++	vmmc-supply = <&reg_sd2_vmmc>;
++	status = "okay";
++};
++
++&ecspi2 {
++	fsl,spi-num-chipselects = <1>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_ecspi2 &pinctrl_ecspi2_cs>;
++	cs-gpios = <&gpio3 4 0>;
++	status = "okay";
++
++	/* touch controller */
++	touch:	tsc2046 at 0 {
++		pinctrl-names = "default";
++		pinctrl-0 = <&pinctrl_tsc2046>;
++
++		compatible = "ti,tsc2046";
++		vcc-supply = <&tsc2046reg>;
++
++		reg = <0>;
++		spi-max-frequency = <1500000>;
++
++		interrupt-parent = <&gpio1>;
++		interrupts = <1 0>;
++		pendown-gpio = <&gpio1 1 0>;
++
++		ti,x-min = /bits/ 16 <0x0>;
++		ti,x-max = /bits/ 16 <0x0fff>;
++		ti,y-min = /bits/ 16 <0x0>;
++		ti,y-max = /bits/ 16 <0x0fff>;
++
++		ti,x-plate-ohms = /bits/ 16 <180>;
++		ti,pressure-max = /bits/ 16 <255>;
++
++		ti,debounce-max = /bits/ 16 <30>;
++		ti,debounce-tol = /bits/ 16 <10>;
++		ti,debounce-rep = /bits/ 16 <1>;
++
++		linux,wakeup;
++	};
++};
++
++&ecspi4 {
++	fsl,spi-num-chipselects = <1>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_ecspi4 &pinctrl_ecspi4_cs>;
++	cs-gpios = <&gpio2 15 0>;
++	status = "okay";
++
++	m25px16 at 0 {
++		#address-cells = <1>;
++		#size-cells = <1>;
++		compatible = "st,m25px16", "st,m25p";
++		spi-max-frequency = <20000000>;
++		reg = <0>;
++
++		partition at 0 {
++			label = "uboot";
++			reg = <0x0 0xc0000>;
++		};
++
++		partition at c0000 {
++			label = "uboot environment";
++			reg = <0xc0000 0x40000>;
++		};
++
++		partition at 100000 {
++			label = "splash";
++			reg = <0x100000 0x100000>;
++		};
++	};
++};
++
++&fec1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_enet1>;
++	phy-mode = "rmii";
++	phy-handle = <&ethphy0>;
++	status = "okay";
++
++	mdio {
++		#address-cells = <1>;
++		#size-cells = <0>;
++
++		ethphy0: ethernet-phy at 0 {
++			compatible = "ethernet-phy-ieee802.3-c22";
++			reg = <0>;
++		};
++	};
++};
++
++&i2c1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_i2c1>;
++	status = "disabled";
++};
++
++&i2c3 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_i2c3>;
++	status = "okay";
++
++	eeprom at 50 {
++		compatible = "at24,24c02";
++		reg = <0x50>;
++		pagesize = <16>;
++	};
++
++	rtc at 56 {
++		compatible = "emmicro,em3027";
++		reg = <0x56>;
++	};
++};
++
++&usbotg1 {
++	vbus-supply = <&reg_usb_otg1_vbus>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usb_otg1_id>;
++	dr_mode = "otg";
++	status = "okay";
++};
++
++&usbotg2 {
++	dr_mode = "host";
++	disable-over-current;
++	status = "okay";
++};
++
++&pwm1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_pwm1>;
++	status = "okay";
++};
++
++&lcdif {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_lcdif_dat
++		     &pinctrl_lcdif_ctrl>;
++	display = <&display0>;
++	status = "okay";
++
++	display0: display {
++		bits-per-pixel = <16>;
++		bus-width = <24>;
++
++		display-timings {
++			native-mode = <&timing0>;
++			timing0: lcd {
++				clock-frequency = <29580000>;
++				hactive = <800>;
++				vactive = <480>;
++				hfront-porch = <16>;
++				hback-porch = <1>;
++				hsync-len = <80>;
++				vback-porch = <13>;
++				vfront-porch = <16>;
++				vsync-len = <16>;
++
++				hsync-active = <0>;
++				vsync-active = <0>;
++				de-active = <1>;
++				pixelclk-active = <0>;
++			};
++			timing1: dvi {
++				/* 1024x768p60 */
++				clock-frequency = <65000000>;
++				hactive = <1024>;
++				vactive = <768>;
++				hback-porch = <220>;
++				hfront-porch = <40>;
++				vback-porch = <21>;
++				vfront-porch = <7>;
++				hsync-len = <60>;
++				vsync-len = <10>;
++
++				hsync-active = <0>;
++				vsync-active = <0>;
++				de-active = <1>;
++				pixelclk-active = <0>;
++			};
++		};
++	};
++};
+diff --git a/arch/arm/boot/dts/imx6ul-sb-som-imx6ul.dtsi b/arch/arm/boot/dts/imx6ul-sb-som-imx6ul.dtsi
+new file mode 100644
+index 0000000..f52b4d1
+--- /dev/null
++++ b/arch/arm/boot/dts/imx6ul-sb-som-imx6ul.dtsi
+@@ -0,0 +1,45 @@
++/*
++ * Suppport for CompuLab SB-SOM baseboard
++ */
++
++/ {
++	reg_lcd_nstby_3v3: lcd_nstby_3v3 {
++		compatible = "regulator-fixed";
++		regulator-name = "lcd_nstby_3v3";
++		gpio = <&pca9555 14 0>;
++		enable-active-high;
++		regulator-always-on;
++	};
++
++	reg_div_en_3v3: div_en_3v3 {
++		compatible = "regulator-fixed";
++		regulator-name = "dvi_en_3v3";
++		gpio = <&pca9555 13 0>;
++		enable-active-high;
++		regulator-always-on;
++	};
++
++};
++
++&i2c1 {
++	status = "okay";
++
++	eeprom at 54 {
++		compatible = "at24,24c02";
++		reg = <0x54>;
++		pagesize = <16>;
++	};
++
++	pca9555: pca9555 at 20 {
++		compatible = "nxp,pca9555";
++		gpio-controller;
++		#gpio-cells = <2>;
++		reg = <0x20>;
++	};
++
++	dvicape {
++		compatible = "sil164_simple";
++		reg = <0x39>;
++		powerdn-gpio = <&pca9555 13 0>;
++	};
++};
+diff --git a/arch/arm/boot/dts/imx6ul-sbc-imx6ul-wilink.dts b/arch/arm/boot/dts/imx6ul-sbc-imx6ul-wilink.dts
+new file mode 100644
+index 0000000..8301d37
+--- /dev/null
++++ b/arch/arm/boot/dts/imx6ul-sbc-imx6ul-wilink.dts
+@@ -0,0 +1,11 @@
++/*
++ * Suppport for CompuLab SB-SOM-iMX6UL baseboard
++ */
++
++#include "imx6ul-cl-som-imx6ul-wilink.dts"
++#include "imx6ul-sb-som-imx6ul.dtsi"
++
++/ {
++	model = "Compulab iMX6UL on SB-SOM";
++	compatible = "fsl,imx6ul", "compulab,cl-som-imx6ul", "compulab,sbc-imx6ul";
++};
+diff --git a/arch/arm/boot/dts/imx6ul-sbc-imx6ul.dts b/arch/arm/boot/dts/imx6ul-sbc-imx6ul.dts
+new file mode 100644
+index 0000000..9e97b14
+--- /dev/null
++++ b/arch/arm/boot/dts/imx6ul-sbc-imx6ul.dts
+@@ -0,0 +1,11 @@
++/*
++ * Suppport for CompuLab SB-SOM-iMX6UL baseboard
++ */
++
++#include "imx6ul-cl-som-imx6ul.dts"
++#include "imx6ul-sb-som-imx6ul.dtsi"
++
++/ {
++	model = "Compulab iMX6UL on SB-SOM";
++	compatible = "fsl,imx6ul", "compulab,cl-som-imx6ul", "compulab,sbc-imx6ul";
++};
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0014-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-syste.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0014-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-syste.patch
new file mode 100644
index 0000000..e8583e8
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0014-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-syste.patch
@@ -0,0 +1,72 @@
+From 7c1d52b6bda92626af537c26ae1e376171babe0d Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Tue, 29 Dec 2015 13:37:12 +0200
+Subject: [PATCH 14/39] ARM: i.MX6UL: update cl-som-imx6ul defconfig for
+ systemd
+
+Update cl-som-imx6ul defconfig for systemd.
+Source: cgit.freedesktop.org/systemd/systemd/tree/README
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/configs/cl_som_imx6ul_defconfig | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/arch/arm/configs/cl_som_imx6ul_defconfig b/arch/arm/configs/cl_som_imx6ul_defconfig
+index 486b9a6..a658e70 100644
+--- a/arch/arm/configs/cl_som_imx6ul_defconfig
++++ b/arch/arm/configs/cl_som_imx6ul_defconfig
+@@ -8,6 +8,10 @@ CONFIG_IKCONFIG=y
+ CONFIG_IKCONFIG_PROC=y
+ CONFIG_LOG_BUF_SHIFT=18
+ CONFIG_CGROUPS=y
++CONFIG_CGROUP_SCHED=y
++CONFIG_CFS_BANDWIDTH=y
++CONFIG_CHECKPOINT_RESTORE=y
++CONFIG_NAMESPACES=y
+ CONFIG_RELAY=y
+ CONFIG_BLK_DEV_INITRD=y
+ CONFIG_EXPERT=y
+@@ -40,6 +44,7 @@ CONFIG_PREEMPT=y
+ CONFIG_AEABI=y
+ CONFIG_HIGHMEM=y
+ CONFIG_CMA=y
++CONFIG_SECCOMP=y
+ CONFIG_CMDLINE="noinitrd console=ttymxc0,115200"
+ CONFIG_CPU_FREQ=y
+ CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
+@@ -72,6 +77,7 @@ CONFIG_NF_CONNTRACK=y
+ CONFIG_NF_CONNTRACK_IPV4=y
+ CONFIG_IP_NF_IPTABLES=y
+ CONFIG_IP_NF_FILTER=y
++CONFIG_IP6_NF_IPTABLES=y
+ CONFIG_VLAN_8021Q=y
+ CONFIG_LLC2=y
+ CONFIG_CAN=y
+@@ -99,6 +105,7 @@ CONFIG_MAC80211=y
+ CONFIG_DEVTMPFS=y
+ CONFIG_DEVTMPFS_MOUNT=y
+ # CONFIG_STANDALONE is not set
++# CONFIG_FW_LOADER_USER_HELPER is not set
+ CONFIG_DMA_CMA=y
+ CONFIG_CMA_SIZE_MBYTES=320
+ CONFIG_IMX_WEIM=y
+@@ -208,6 +215,7 @@ CONFIG_INPUT_ISL29023=y
+ CONFIG_INPUT_MPL3115=y
+ CONFIG_SENSOR_FXLS8471=y
+ CONFIG_SERIO_SERPORT=m
++CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
+ # CONFIG_LEGACY_PTYS is not set
+ # CONFIG_DEVKMEM is not set
+ CONFIG_SERIAL_IMX=y
+@@ -419,6 +427,7 @@ CONFIG_UDF_FS=m
+ CONFIG_MSDOS_FS=m
+ CONFIG_VFAT_FS=y
+ CONFIG_TMPFS=y
++CONFIG_TMPFS_XATTR=y
+ CONFIG_JFFS2_FS=y
+ CONFIG_UBIFS_FS=y
+ CONFIG_NFS_FS=y
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0015-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-ads78.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0015-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-ads78.patch
new file mode 100644
index 0000000..84fb10f
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0015-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-ads78.patch
@@ -0,0 +1,30 @@
+From 1c28655371efadb93190e4681186146039075ae6 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 3 Jan 2016 13:27:33 +0200
+Subject: [PATCH 15/39] ARM: i.MX6UL: update cl-som-imx6ul defconfig for
+ ads7846
+
+Update cl-som-imx6ul defconfig for ads7846.
+Compile the ads7846 driver as a part of the cl-som-imx6ul kernel.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/configs/cl_som_imx6ul_defconfig | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/configs/cl_som_imx6ul_defconfig b/arch/arm/configs/cl_som_imx6ul_defconfig
+index a658e70..860e485 100644
+--- a/arch/arm/configs/cl_som_imx6ul_defconfig
++++ b/arch/arm/configs/cl_som_imx6ul_defconfig
+@@ -200,7 +200,7 @@ CONFIG_KEYBOARD_IMX=y
+ CONFIG_MOUSE_PS2=m
+ CONFIG_MOUSE_PS2_ELANTECH=y
+ CONFIG_INPUT_TOUCHSCREEN=y
+-CONFIG_TOUCHSCREEN_ADS7846=m
++CONFIG_TOUCHSCREEN_ADS7846=y
+ CONFIG_TOUCHSCREEN_EGALAX=y
+ CONFIG_TOUCHSCREEN_ELAN=y
+ CONFIG_TOUCHSCREEN_MAX11801=y
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0016-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-WiFi-.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0016-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-WiFi-.patch
new file mode 100644
index 0000000..6dedd30
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0016-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-WiFi-.patch
@@ -0,0 +1,115 @@
+From 9896638906c4904f59445df329f2dfc319320780 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Wed, 6 Jan 2016 10:46:06 +0200
+Subject: [PATCH 16/39] ARM: i.MX6UL: update cl-som-imx6ul defconfig for
+ WiFi-AP
+
+Update cl-som-imx6ul defconfig for WiFi-AP.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+
+Conflicts:
+	arch/arm/configs/cl_som_imx6ul_defconfig
+---
+ arch/arm/configs/cl_som_imx6ul_defconfig | 75 ++++++++++++++++++++++++++++++--
+ 1 file changed, 72 insertions(+), 3 deletions(-)
+
+diff --git a/arch/arm/configs/cl_som_imx6ul_defconfig b/arch/arm/configs/cl_som_imx6ul_defconfig
+index 860e485..7362114 100644
+--- a/arch/arm/configs/cl_som_imx6ul_defconfig
++++ b/arch/arm/configs/cl_som_imx6ul_defconfig
+@@ -73,12 +73,80 @@ CONFIG_IP_PNP_DHCP=y
+ # CONFIG_INET_LRO is not set
+ CONFIG_IPV6=y
+ CONFIG_NETFILTER=y
+-CONFIG_NF_CONNTRACK=y
+-CONFIG_NF_CONNTRACK_IPV4=y
++CONFIG_NETFILTER_DEBUG=y
++CONFIG_NF_CONNTRACK=m
++CONFIG_NF_CONNTRACK_FTP=m
++CONFIG_NF_CONNTRACK_TFTP=m
++CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
++CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
++CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
++CONFIG_NETFILTER_XT_TARGET_DSCP=m
++CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
++CONFIG_NETFILTER_XT_TARGET_LED=m
++CONFIG_NETFILTER_XT_TARGET_MARK=m
++CONFIG_NETFILTER_XT_TARGET_NFLOG=m
++CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
++CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
++CONFIG_NETFILTER_XT_TARGET_TEE=m
++CONFIG_NETFILTER_XT_TARGET_TRACE=m
++CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
++CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
++CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
++CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
++CONFIG_NETFILTER_XT_MATCH_COMMENT=m
++CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
++CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
++CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
++CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
++CONFIG_NETFILTER_XT_MATCH_CPU=m
++CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m
++CONFIG_NETFILTER_XT_MATCH_DSCP=m
++CONFIG_NETFILTER_XT_MATCH_ESP=m
++CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
++CONFIG_NETFILTER_XT_MATCH_HELPER=m
++CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
++CONFIG_NETFILTER_XT_MATCH_LENGTH=m
++CONFIG_NETFILTER_XT_MATCH_LIMIT=m
++CONFIG_NETFILTER_XT_MATCH_MAC=m
++CONFIG_NETFILTER_XT_MATCH_MARK=m
++CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
++CONFIG_NETFILTER_XT_MATCH_OSF=m
++CONFIG_NETFILTER_XT_MATCH_OWNER=m
++CONFIG_NETFILTER_XT_MATCH_POLICY=m
++CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
++CONFIG_NETFILTER_XT_MATCH_QUOTA=m
++CONFIG_NETFILTER_XT_MATCH_RATEEST=m
++CONFIG_NETFILTER_XT_MATCH_REALM=m
++CONFIG_NETFILTER_XT_MATCH_RECENT=m
++CONFIG_NETFILTER_XT_MATCH_STATE=m
++CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
++CONFIG_NETFILTER_XT_MATCH_STRING=m
++CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
++CONFIG_NETFILTER_XT_MATCH_TIME=m
++CONFIG_NETFILTER_XT_MATCH_U32=m
++CONFIG_NF_CONNTRACK_IPV4=m
+ CONFIG_IP_NF_IPTABLES=y
++CONFIG_IP_NF_MATCH_AH=m
++CONFIG_IP_NF_MATCH_ECN=m
++CONFIG_IP_NF_MATCH_RPFILTER=m
++CONFIG_IP_NF_MATCH_TTL=m
+ CONFIG_IP_NF_FILTER=y
++CONFIG_IP_NF_TARGET_REJECT=y
++CONFIG_IP_NF_TARGET_ULOG=m
++CONFIG_NF_NAT_IPV4=m
++CONFIG_IP_NF_TARGET_MASQUERADE=m
++CONFIG_IP_NF_TARGET_NETMAP=m
++CONFIG_IP_NF_TARGET_REDIRECT=m
++CONFIG_IP_NF_MANGLE=m
++CONFIG_IP_NF_TARGET_ECN=m
++CONFIG_IP_NF_TARGET_TTL=m
++CONFIG_IP_NF_RAW=m
++CONFIG_IP_NF_ARPTABLES=m
++CONFIG_IP_NF_ARPFILTER=m
++CONFIG_IP_NF_ARP_MANGLE=m
+ CONFIG_IP6_NF_IPTABLES=y
+-CONFIG_VLAN_8021Q=y
++CONFIG_VLAN_8021Q=m
++CONFIG_VLAN_8021Q_GVRP=y
+ CONFIG_LLC2=y
+ CONFIG_CAN=y
+ CONFIG_CAN_FLEXCAN=y
+@@ -150,6 +218,7 @@ CONFIG_SATA_AHCI_PLATFORM=y
+ CONFIG_AHCI_IMX=y
+ CONFIG_PATA_IMX=y
+ CONFIG_NETDEVICES=y
++CONFIG_TUN=m
+ # CONFIG_NET_VENDOR_BROADCOM is not set
+ CONFIG_CS89x0=y
+ CONFIG_CS89x0_PLATFORM=y
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0017-ARM-i.MX6UL-add-nand-support-for-cl-som-imx6ul.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0017-ARM-i.MX6UL-add-nand-support-for-cl-som-imx6ul.patch
new file mode 100644
index 0000000..a15a44a
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0017-ARM-i.MX6UL-add-nand-support-for-cl-som-imx6ul.patch
@@ -0,0 +1,101 @@
+From cd5f36bed76dbc4180a86980a83a42ef51c6db6b Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 10 Jan 2016 15:31:46 +0200
+Subject: [PATCH 17/39] ARM: i.MX6UL: add nand support for cl-som-imx6ul
+
+Add nand support for cl-som-imx6ul:
+1) Add iomux group for nand.
+2) Add gpmi device node. Default status is "disabled"
+It is up to the user to turn in on with regard to the board configuration.
+3) Add default nand partition layout.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi | 43 +++++++++++++++++++++++++++--
+ 1 file changed, 41 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+index a52da93..ba83ee7 100644
+--- a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
++++ b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+@@ -95,8 +95,6 @@
+ 			fsl,pins = <
+ 				/* Heartbeat */
+ 				MX6UL_PAD_SNVS_TAMPER4__GPIO5_IO04 0x17059
+-				/* eMMC nReset */
+-				MX6UL_PAD_NAND_ALE__GPIO4_IO10	0x17059
+ 				/* Phy nReset */
+ 				MX6UL_PAD_SNVS_TAMPER8__GPIO5_IO08	0x17059
+ 			>;
+@@ -149,6 +147,7 @@
+ 
+ 		pinctrl_usdhc2: usdhc2grp {
+ 			fsl,pins = <
++				MX6UL_PAD_NAND_ALE__GPIO4_IO10	0x17059
+ 				MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x17059
+ 				MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x17059
+ 				MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x17059
+@@ -162,6 +161,27 @@
+ 			>;
+ 		};
+ 
++		pinctrl_gpmi_nand: gpminand1grp {
++			fsl,pins = <
++				MX6UL_PAD_NAND_CLE__RAWNAND_CLE         0xb0b1
++				MX6UL_PAD_NAND_ALE__RAWNAND_ALE         0xb0b1
++				MX6UL_PAD_NAND_WP_B__RAWNAND_WP_B       0xb0b1
++				MX6UL_PAD_NAND_READY_B__RAWNAND_READY_B 0xb000
++				MX6UL_PAD_NAND_CE0_B__RAWNAND_CE0_B     0xb0b1
++				MX6UL_PAD_NAND_CE1_B__RAWNAND_CE1_B     0xb0b1
++				MX6UL_PAD_NAND_RE_B__RAWNAND_RE_B       0xb0b1
++				MX6UL_PAD_NAND_WE_B__RAWNAND_WE_B       0xb0b1
++				MX6UL_PAD_NAND_DATA00__RAWNAND_DATA00   0xb0b1
++				MX6UL_PAD_NAND_DATA01__RAWNAND_DATA01   0xb0b1
++				MX6UL_PAD_NAND_DATA02__RAWNAND_DATA02   0xb0b1
++				MX6UL_PAD_NAND_DATA03__RAWNAND_DATA03   0xb0b1
++				MX6UL_PAD_NAND_DATA04__RAWNAND_DATA04   0xb0b1
++				MX6UL_PAD_NAND_DATA05__RAWNAND_DATA05   0xb0b1
++				MX6UL_PAD_NAND_DATA06__RAWNAND_DATA06   0xb0b1
++				MX6UL_PAD_NAND_DATA07__RAWNAND_DATA07   0xb0b1
++			>;
++		};
++
+ 		/* pins for spi */
+ 		pinctrl_ecspi2_cs: ecspi2_cs_grp {
+ 			fsl,pins = <
+@@ -286,6 +306,7 @@
+ 	status = "okay";
+ };
+ 
++/* emmc */
+ &usdhc2 {
+ 	pinctrl-names = "default";
+ 	pinctrl-0 = <&pinctrl_usdhc2>;
+@@ -296,6 +317,24 @@
+ 	status = "okay";
+ };
+ 
++/* nand */
++&gpmi {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_gpmi_nand>;
++	nand-on-flash-bbt;
++	status = "disabled";
++
++	partition at 0 {
++		label = "linux";
++		reg = <0x0 0x800000>;
++	};
++
++	partition at 800000 {
++		label = "rootfs";
++		reg = <0x800000 0x0>;
++	};
++};
++
+ &ecspi2 {
+ 	fsl,spi-num-chipselects = <1>;
+ 	pinctrl-names = "default";
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0018-ARM-i.MX6UL-enable-cl-som-imx6ul-in-defconfig.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0018-ARM-i.MX6UL-enable-cl-som-imx6ul-in-defconfig.patch
new file mode 100644
index 0000000..cfd608d
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0018-ARM-i.MX6UL-enable-cl-som-imx6ul-in-defconfig.patch
@@ -0,0 +1,27 @@
+From 0e3ef9d766091e5392ed0a5777ca89750be7c8e8 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Tue, 17 Nov 2015 15:36:11 +0200
+Subject: [PATCH 18/39] ARM: i.MX6UL: enable cl-som-imx6ul in defconfig.
+
+Enable cl-som-imx6ul in defconfig.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/configs/cl_som_imx6ul_defconfig | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/arm/configs/cl_som_imx6ul_defconfig b/arch/arm/configs/cl_som_imx6ul_defconfig
+index 7362114..8533f76 100644
+--- a/arch/arm/configs/cl_som_imx6ul_defconfig
++++ b/arch/arm/configs/cl_som_imx6ul_defconfig
+@@ -34,6 +34,7 @@ CONFIG_SOC_IMX6Q=y
+ CONFIG_SOC_IMX6SL=y
+ CONFIG_SOC_IMX6SX=y
+ CONFIG_SOC_IMX6UL=y
++CONFIG_CL_SOM_IMX6UL=y
+ CONFIG_SOC_IMX7D=y
+ CONFIG_SOC_VF610=y
+ # CONFIG_SWP_EMULATE is not set
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0019-ARM-i.MX6UL-dts-fix-the-spi-flash-compatibility-stri.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0019-ARM-i.MX6UL-dts-fix-the-spi-flash-compatibility-stri.patch
new file mode 100644
index 0000000..bf69b9c
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0019-ARM-i.MX6UL-dts-fix-the-spi-flash-compatibility-stri.patch
@@ -0,0 +1,30 @@
+From 9bdf63d15f183670f52105dbb16d892f5eb5724d Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 17 Apr 2016 14:57:31 +0300
+Subject: [PATCH 19/39] ARM: i.MX6UL: dts: fix the spi flash compatibility
+ string
+
+Fix the spi flash compatibility string in order to
+match the m25p80 drivers' compatible devices.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+index ba83ee7..43546d9 100644
+--- a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
++++ b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+@@ -383,7 +383,7 @@
+ 	m25px16 at 0 {
+ 		#address-cells = <1>;
+ 		#size-cells = <1>;
+-		compatible = "st,m25px16", "st,m25p";
++		compatible = "st,m25p16", "st,m25p";
+ 		spi-max-frequency = <20000000>;
+ 		reg = <0>;
+ 
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0020-ARM-i.MX6UL-add-depends-property-to-gpmi-nand.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0020-ARM-i.MX6UL-add-depends-property-to-gpmi-nand.patch
new file mode 100644
index 0000000..e521b24
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0020-ARM-i.MX6UL-add-depends-property-to-gpmi-nand.patch
@@ -0,0 +1,30 @@
+From b3ece576fe1e77a5cf7f9fd4decdc953c95ed0c1 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Mon, 11 Jan 2016 17:00:09 +0200
+Subject: [PATCH 20/39] ARM: i.MX6UL: add 'depends' property to gpmi-nand
+
+Add a new 'depends' property to the gpmi-nand node.
+The purpose is to create a dependency between devices.
+The ecspi4 bus driver with its siblings has to be configured first
+in order to provide the correct mtd device order registration.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+index 43546d9..305bd0c 100644
+--- a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
++++ b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+@@ -322,6 +322,7 @@
+ 	pinctrl-names = "default";
+ 	pinctrl-0 = <&pinctrl_gpmi_nand>;
+ 	nand-on-flash-bbt;
++	depends = "/soc/aips-bus at 02000000/spba-bus at 02000000/ecspi at 02014000";
+ 	status = "disabled";
+ 
+ 	partition at 0 {
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0021-ARM-i.MX6UL-dts-set-timing1-as-default-for-lcdif.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0021-ARM-i.MX6UL-dts-set-timing1-as-default-for-lcdif.patch
new file mode 100644
index 0000000..85fbbf2
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0021-ARM-i.MX6UL-dts-set-timing1-as-default-for-lcdif.patch
@@ -0,0 +1,26 @@
+From f7aacf84f7dcbf68161de354bcfe5ea3cf3b2b68 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 17 Apr 2016 15:13:42 +0300
+Subject: [PATCH 21/39] ARM: i.MX6UL: dts: set timing1 as default for lcdif
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+index 305bd0c..9fac193 100644
+--- a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
++++ b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+@@ -478,7 +478,7 @@
+ 		bus-width = <24>;
+ 
+ 		display-timings {
+-			native-mode = <&timing0>;
++			native-mode = <&timing1>;
+ 			timing0: lcd {
+ 				clock-frequency = <29580000>;
+ 				hactive = <800>;
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0022-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0022-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig.patch
new file mode 100644
index 0000000..3c48252
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0022-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig.patch
@@ -0,0 +1,320 @@
+From 372a29a0933a5851e47143ee8aa60b21b1d74ce0 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 17 Apr 2016 15:27:40 +0300
+Subject: [PATCH 22/39] ARM: i.MX6UL: update cl-som-imx6ul defconfig
+
+Add "-pord" sufix
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/configs/cl_som_imx6ul_defconfig | 92 ++------------------------------
+ 1 file changed, 3 insertions(+), 89 deletions(-)
+
+diff --git a/arch/arm/configs/cl_som_imx6ul_defconfig b/arch/arm/configs/cl_som_imx6ul_defconfig
+index 8533f76..033b05c 100644
+--- a/arch/arm/configs/cl_som_imx6ul_defconfig
++++ b/arch/arm/configs/cl_som_imx6ul_defconfig
+@@ -1,4 +1,4 @@
+-CONFIG_LOCALVERSION="-cl-som-imx6ul"
++CONFIG_LOCALVERSION="-cl-som-imx6ul-prod"
+ CONFIG_KERNEL_LZO=y
+ CONFIG_SYSVIPC=y
+ CONFIG_FHANDLE=y
+@@ -24,10 +24,7 @@ CONFIG_MODULE_UNLOAD=y
+ CONFIG_MODVERSIONS=y
+ CONFIG_MODULE_SRCVERSION_ALL=y
+ # CONFIG_BLK_DEV_BSG is not set
+-CONFIG_GPIO_PCA953X=y
+ CONFIG_ARCH_MXC=y
+-CONFIG_MACH_IMX51_DT=y
+-CONFIG_MACH_EUKREA_CPUIMX51SD=y
+ CONFIG_SOC_IMX50=y
+ CONFIG_SOC_IMX53=y
+ CONFIG_SOC_IMX6Q=y
+@@ -37,7 +34,6 @@ CONFIG_SOC_IMX6UL=y
+ CONFIG_CL_SOM_IMX6UL=y
+ CONFIG_SOC_IMX7D=y
+ CONFIG_SOC_VF610=y
+-# CONFIG_SWP_EMULATE is not set
+ CONFIG_SMP=y
+ CONFIG_HAVE_ARM_ARCH_TIMER=y
+ CONFIG_VMSPLIT_2G=y
+@@ -48,18 +44,14 @@ CONFIG_CMA=y
+ CONFIG_SECCOMP=y
+ CONFIG_CMDLINE="noinitrd console=ttymxc0,115200"
+ CONFIG_CPU_FREQ=y
+-CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
+-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+ CONFIG_CPU_FREQ_GOV_USERSPACE=y
+ CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+ CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+ CONFIG_ARM_IMX6Q_CPUFREQ=y
+-CONFIG_ARM_IMX7D_CPUFREQ=y
+ CONFIG_CPU_IDLE=y
+ CONFIG_VFP=y
+ CONFIG_NEON=y
+ CONFIG_BINFMT_MISC=m
+-CONFIG_PM_RUNTIME=y
+ CONFIG_PM_DEBUG=y
+ CONFIG_PM_TEST_SUSPEND=y
+ CONFIG_NET=y
+@@ -72,7 +64,6 @@ CONFIG_IP_PNP_DHCP=y
+ # 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_NETFILTER_DEBUG=y
+ CONFIG_NF_CONNTRACK=m
+@@ -126,6 +117,7 @@ CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+ CONFIG_NETFILTER_XT_MATCH_TIME=m
+ CONFIG_NETFILTER_XT_MATCH_U32=m
+ CONFIG_NF_CONNTRACK_IPV4=m
++CONFIG_NF_NAT_IPV4=m
+ CONFIG_IP_NF_IPTABLES=y
+ CONFIG_IP_NF_MATCH_AH=m
+ CONFIG_IP_NF_MATCH_ECN=m
+@@ -133,11 +125,6 @@ CONFIG_IP_NF_MATCH_RPFILTER=m
+ CONFIG_IP_NF_MATCH_TTL=m
+ CONFIG_IP_NF_FILTER=y
+ CONFIG_IP_NF_TARGET_REJECT=y
+-CONFIG_IP_NF_TARGET_ULOG=m
+-CONFIG_NF_NAT_IPV4=m
+-CONFIG_IP_NF_TARGET_MASQUERADE=m
+-CONFIG_IP_NF_TARGET_NETMAP=m
+-CONFIG_IP_NF_TARGET_REDIRECT=m
+ CONFIG_IP_NF_MANGLE=m
+ CONFIG_IP_NF_TARGET_ECN=m
+ CONFIG_IP_NF_TARGET_TTL=m
+@@ -161,7 +148,6 @@ CONFIG_BT_BNEP_PROTO_FILTER=y
+ CONFIG_BT_HIDP=y
+ CONFIG_BT_HCIBTUSB=y
+ CONFIG_BT_HCIUART=y
+-CONFIG_BT_HCIUART_H4=y
+ CONFIG_BT_HCIUART_BCSP=y
+ CONFIG_BT_HCIUART_ATH3K=y
+ CONFIG_BT_HCIUART_LL=y
+@@ -174,7 +160,6 @@ CONFIG_MAC80211=y
+ CONFIG_DEVTMPFS=y
+ CONFIG_DEVTMPFS_MOUNT=y
+ # CONFIG_STANDALONE is not set
+-# CONFIG_FW_LOADER_USER_HELPER is not set
+ CONFIG_DMA_CMA=y
+ CONFIG_CMA_SIZE_MBYTES=320
+ CONFIG_IMX_WEIM=y
+@@ -197,19 +182,15 @@ CONFIG_MTD_NAND_MXC=y
+ CONFIG_MTD_SPI_NOR=y
+ CONFIG_SPI_FSL_QUADSPI=y
+ CONFIG_MTD_UBI=y
+-CONFIG_PROC_DEVICETREE=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_TI_ST=y
+ CONFIG_ST_HCI=y
+ # CONFIG_SCSI_PROC_FS is not set
+ CONFIG_BLK_DEV_SD=y
+-CONFIG_SCSI_MULTI_LUN=y
+ CONFIG_SCSI_CONSTANTS=y
+ CONFIG_SCSI_LOGGING=y
+ CONFIG_SCSI_SCAN_ASYNC=y
+@@ -251,10 +232,6 @@ CONFIG_USB_NET_ZAURUS=m
+ CONFIG_ATH_CARDS=y
+ CONFIG_ATH6KL=m
+ CONFIG_ATH6KL_SDIO=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_WL_TI=y
+ CONFIG_WL1251=y
+ CONFIG_WL1251_SDIO=y
+@@ -281,9 +258,6 @@ CONFIG_TOUCHSCREEN_STMPE=y
+ CONFIG_INPUT_MISC=y
+ CONFIG_INPUT_MMA8450=y
+ CONFIG_INPUT_UINPUT=y
+-CONFIG_INPUT_ISL29023=y
+-CONFIG_INPUT_MPL3115=y
+-CONFIG_SENSOR_FXLS8471=y
+ CONFIG_SERIO_SERPORT=m
+ CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
+ # CONFIG_LEGACY_PTYS is not set
+@@ -292,7 +266,6 @@ CONFIG_SERIAL_IMX=y
+ CONFIG_SERIAL_IMX_CONSOLE=y
+ CONFIG_SERIAL_FSL_LPUART=y
+ CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
+-CONFIG_FSL_OTP=y
+ # CONFIG_I2C_COMPAT is not set
+ CONFIG_I2C_CHARDEV=y
+ # CONFIG_I2C_HELPER_AUTO is not set
+@@ -304,22 +277,17 @@ CONFIG_SPI_GPIO=y
+ CONFIG_SPI_IMX=y
+ CONFIG_GPIO_SYSFS=y
+ CONFIG_GPIO_MAX732X=y
++CONFIG_GPIO_PCA953X=y
+ CONFIG_GPIO_74X164=y
+ CONFIG_POWER_SUPPLY=y
+-CONFIG_SABRESD_MAX8903=y
+-CONFIG_IMX6_USB_CHARGER=y
+-CONFIG_SENSORS_MAX17135=y
+-CONFIG_SENSORS_MAG3110=y
+ CONFIG_THERMAL=y
+ CONFIG_CPU_THERMAL=y
+ CONFIG_IMX_THERMAL=y
+-CONFIG_DEVICE_THERMAL=y
+ CONFIG_WATCHDOG=y
+ CONFIG_IMX2_WDT=y
+ CONFIG_MFD_DA9052_I2C=y
+ CONFIG_MFD_MC13XXX_SPI=y
+ CONFIG_MFD_MC13XXX_I2C=y
+-CONFIG_MFD_MAX17135=y
+ CONFIG_MFD_SI476X_CORE=y
+ CONFIG_MFD_STMPE=y
+ CONFIG_REGULATOR=y
+@@ -327,7 +295,6 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=y
+ CONFIG_REGULATOR_ANATOP=y
+ CONFIG_REGULATOR_DA9052=y
+ CONFIG_REGULATOR_GPIO=y
+-CONFIG_REGULATOR_MAX17135=y
+ CONFIG_REGULATOR_MC13783=y
+ CONFIG_REGULATOR_MC13892=y
+ CONFIG_REGULATOR_PFUZE100=y
+@@ -340,18 +307,6 @@ 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_SOC_CAMERA=y
+ CONFIG_VIDEO_MX3=y
+ CONFIG_V4L_MEM2MEM_DRIVERS=y
+@@ -359,27 +314,12 @@ CONFIG_VIDEO_CODA=y
+ CONFIG_RADIO_SI476X=y
+ CONFIG_SOC_CAMERA_OV2640=y
+ CONFIG_DRM=y
+-CONFIG_DRM_VIVANTE=y
+-CONFIG_FB=y
+ CONFIG_FB_MXS=y
+-CONFIG_BACKLIGHT_LCD_SUPPORT=y
+ CONFIG_LCD_CLASS_DEVICE=y
+ CONFIG_LCD_L4F00242T03=y
+ CONFIG_LCD_PLATFORM=y
+-CONFIG_BACKLIGHT_CLASS_DEVICE=y
+ CONFIG_BACKLIGHT_PWM=y
+-CONFIG_FB_MXC_SYNC_PANEL=y
+-CONFIG_FB_MXC_LDB=y
+-CONFIG_FB_MXC_MIPI_DSI_SAMSUNG=y
+-CONFIG_FB_MXC_TRULY_WVGA_SYNC_PANEL=y
+-CONFIG_FB_MXC_HDMI=y
+-CONFIG_FB_MXC_EINK_PANEL=y
+-CONFIG_FB_MXC_EINK_V2_PANEL=y
+-CONFIG_FB_MXS_SII902X=y
+-CONFIG_FB_MXC_DCIC=m
+-CONFIG_HANNSTAR_CABC=y
+ CONFIG_FRAMEBUFFER_CONSOLE=y
+-CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
+ CONFIG_LOGO=y
+ CONFIG_SIL164_SIMPLE=y
+ CONFIG_SOUND=y
+@@ -388,20 +328,12 @@ CONFIG_SND_USB_AUDIO=m
+ CONFIG_SND_SOC=y
+ CONFIG_SND_IMX_SOC=y
+ CONFIG_SND_SOC_EUKREA_TLV320=y
+-CONFIG_SND_SOC_IMX_CS42888=y
+-CONFIG_SND_SOC_IMX_SII902X=y
+-CONFIG_SND_SOC_IMX_WM8958=y
+-CONFIG_SND_SOC_IMX_WM8960=y
+ CONFIG_SND_SOC_IMX_WM8962=y
+ CONFIG_SND_SOC_IMX_SGTL5000=y
+-CONFIG_SND_SOC_IMX_MQS=y
+ CONFIG_SND_SOC_IMX_SPDIF=y
+ CONFIG_SND_SOC_IMX_MC13783=y
+-CONFIG_SND_SOC_IMX_HDMI=y
+-CONFIG_SND_SOC_IMX_SI476X=y
+ CONFIG_USB=y
+ CONFIG_USB_OTG_WHITELIST=y
+-CONFIG_USB_OTG_FSM=y
+ CONFIG_USB_EHCI_HCD=y
+ CONFIG_USB_EHCI_MXC=y
+ CONFIG_USB_HCD_TEST_MODE=y
+@@ -437,16 +369,9 @@ CONFIG_USB_GADGETFS=m
+ CONFIG_USB_MASS_STORAGE=m
+ CONFIG_USB_G_SERIAL=m
+ CONFIG_MMC=y
+-CONFIG_MMC_UNSAFE_RESUME=y
+ CONFIG_MMC_SDHCI=y
+ CONFIG_MMC_SDHCI_PLTFM=y
+ CONFIG_MMC_SDHCI_ESDHC_IMX=y
+-CONFIG_MXC_IPU=y
+-CONFIG_MXC_GPU_VIV=y
+-CONFIG_MXC_IPU_V3_PRE=y
+-CONFIG_MXC_MIPI_CSI2=y
+-CONFIG_MXC_MLB150=m
+-CONFIG_MXC_SIM=y
+ CONFIG_NEW_LEDS=y
+ CONFIG_LEDS_CLASS=y
+ CONFIG_LEDS_GPIO=y
+@@ -463,8 +388,6 @@ CONFIG_RTC_DRV_MC13XXX=y
+ CONFIG_RTC_DRV_MXC=y
+ CONFIG_RTC_DRV_SNVS=y
+ CONFIG_DMADEVICES=y
+-CONFIG_MXC_PXP_V2=y
+-CONFIG_MXC_PXP_V3=y
+ CONFIG_IMX_SDMA=y
+ CONFIG_MXS_DMA=y
+ CONFIG_STAGING=y
+@@ -472,7 +395,6 @@ CONFIG_STAGING_MEDIA=y
+ # CONFIG_IOMMU_SUPPORT is not set
+ CONFIG_IIO=y
+ CONFIG_VF610_ADC=y
+-CONFIG_AD2802A=y
+ CONFIG_PWM=y
+ CONFIG_PWM_IMX=y
+ CONFIG_EXT2_FS=y
+@@ -482,9 +404,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
+@@ -524,7 +443,6 @@ CONFIG_CORESIGHT_SOURCE_ETM3X=y
+ CONFIG_SECURITYFS=y
+ CONFIG_CRYPTO_USER=y
+ CONFIG_CRYPTO_TEST=m
+-CONFIG_CRYPTO_GCM=y
+ CONFIG_CRYPTO_CBC=y
+ CONFIG_CRYPTO_CTS=y
+ CONFIG_CRYPTO_LRW=y
+@@ -544,11 +462,7 @@ CONFIG_CRYPTO_BLOWFISH=y
+ CONFIG_CRYPTO_CAMELLIA=y
+ CONFIG_CRYPTO_DES=y
+ CONFIG_CRYPTO_TWOFISH=y
+-# CONFIG_CRYPTO_ANSI_CPRNG is not set
+ CONFIG_CRYPTO_DEV_FSL_CAAM=y
+-CONFIG_CRYPTO_DEV_FSL_CAAM_SM=y
+-CONFIG_CRYPTO_DEV_FSL_CAAM_SM_TEST=y
+-CONFIG_CRYPTO_DEV_FSL_CAAM_SECVIO=y
+ CONFIG_CRC_CCITT=m
+ CONFIG_CRC_T10DIF=y
+ CONFIG_LIBCRC32C=m
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0023-ARM-i.MX6UL-dts-fix-u-boot-environment-size.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0023-ARM-i.MX6UL-dts-fix-u-boot-environment-size.patch
new file mode 100644
index 0000000..b87a4fa
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0023-ARM-i.MX6UL-dts-fix-u-boot-environment-size.patch
@@ -0,0 +1,29 @@
+From 421c768fb1b843e06dff18c5f19b8732168f48e2 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 17 Apr 2016 15:34:51 +0300
+Subject: [PATCH 23/39] ARM: i.MX6UL: dts: fix u-boot environment size
+
+Fix u-boot environment partiton size in order to
+comply with the u-boot environment settings.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+index 9fac193..9efaa76 100644
+--- a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
++++ b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+@@ -395,7 +395,7 @@
+ 
+ 		partition at c0000 {
+ 			label = "uboot environment";
+-			reg = <0xc0000 0x40000>;
++			reg = <0xc0000 0x2000>;
+ 		};
+ 
+ 		partition at 100000 {
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0024-ARM-i.MX6UL-dts-update-cl-som-imx6ul-model-string.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0024-ARM-i.MX6UL-dts-update-cl-som-imx6ul-model-string.patch
new file mode 100644
index 0000000..62fe4e2
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0024-ARM-i.MX6UL-dts-update-cl-som-imx6ul-model-string.patch
@@ -0,0 +1,54 @@
+From 80808e50b6d088907ba7788b3209f5a5c1a48a36 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 17 Apr 2016 17:34:51 +0300
+Subject: [PATCH 24/39] ARM: i.MX6UL: dts: update cl-som-imx6ul model string
+
+Update cl-som-imx6ul model string in order to
+meet the CompuLab ATP machine name requirements.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dts     | 2 +-
+ arch/arm/boot/dts/imx6ul-sbc-imx6ul-wilink.dts | 2 +-
+ arch/arm/boot/dts/imx6ul-sbc-imx6ul.dts        | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dts b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dts
+index 1138af2..3cfdefb 100644
+--- a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dts
++++ b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dts
+@@ -11,6 +11,6 @@
+ #include "imx6ul-cl-som-imx6ul.dtsi"
+ 
+ / {
+-	model = "CompuLab i.MX6 UltraLite SoM";
++	model = "CompuLab CL-SOM-iMX6UL";
+ 	compatible = "fsl,imx6ul", "compulab,cl-som-imx6ul";
+ };
+diff --git a/arch/arm/boot/dts/imx6ul-sbc-imx6ul-wilink.dts b/arch/arm/boot/dts/imx6ul-sbc-imx6ul-wilink.dts
+index 8301d37..bdef44c 100644
+--- a/arch/arm/boot/dts/imx6ul-sbc-imx6ul-wilink.dts
++++ b/arch/arm/boot/dts/imx6ul-sbc-imx6ul-wilink.dts
+@@ -6,6 +6,6 @@
+ #include "imx6ul-sb-som-imx6ul.dtsi"
+ 
+ / {
+-	model = "Compulab iMX6UL on SB-SOM";
++	model = "CompuLab CL-SOM-iMX6UL on SBC-SOM-iMX6UL";
+ 	compatible = "fsl,imx6ul", "compulab,cl-som-imx6ul", "compulab,sbc-imx6ul";
+ };
+diff --git a/arch/arm/boot/dts/imx6ul-sbc-imx6ul.dts b/arch/arm/boot/dts/imx6ul-sbc-imx6ul.dts
+index 9e97b14..48a939d 100644
+--- a/arch/arm/boot/dts/imx6ul-sbc-imx6ul.dts
++++ b/arch/arm/boot/dts/imx6ul-sbc-imx6ul.dts
+@@ -6,6 +6,6 @@
+ #include "imx6ul-sb-som-imx6ul.dtsi"
+ 
+ / {
+-	model = "Compulab iMX6UL on SB-SOM";
++	model = "CompuLab CL-SOM-iMX6UL on SBC-SOM-iMX6UL";
+ 	compatible = "fsl,imx6ul", "compulab,cl-som-imx6ul", "compulab,sbc-imx6ul";
+ };
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0025-ARM-i.MX6UL-fix-usdhc1-cd-wp-gpio-settings.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0025-ARM-i.MX6UL-fix-usdhc1-cd-wp-gpio-settings.patch
new file mode 100644
index 0000000..b24cec1
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0025-ARM-i.MX6UL-fix-usdhc1-cd-wp-gpio-settings.patch
@@ -0,0 +1,28 @@
+From ca9a371f1b4276e19c96847efc1d89081d015ab5 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 17 Apr 2016 18:33:14 +0300
+Subject: [PATCH 25/39] ARM: i.MX6UL: fix usdhc1 cd/wp gpio settings
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+index 9efaa76..a25de61 100644
+--- a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
++++ b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+@@ -299,8 +299,8 @@
+ &usdhc1 {
+ 	pinctrl-names = "default";
+ 	pinctrl-0 = <&pinctrl_usdhc1>;
+-	cd-gpios = <&gpio1 19 0>;
+-	wp-gpios = <&gpio1 18 0>;
++	cd-gpios = <&gpio1 19 GPIO_ACTIVE_LOW>;
++	wp-gpios = <&gpio1 18 GPIO_ACTIVE_HIGH>;
+ 	keep-power-in-suspend;
+ 	enable-sdio-wakeup;
+ 	status = "okay";
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0026-ARM-i.MX6UL-move-tsc2046-to-the-ecspi4-bus.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0026-ARM-i.MX6UL-move-tsc2046-to-the-ecspi4-bus.patch
new file mode 100644
index 0000000..1375e3d
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0026-ARM-i.MX6UL-move-tsc2046-to-the-ecspi4-bus.patch
@@ -0,0 +1,132 @@
+From 0fdce17b800b94d4b6a4def84ff4fd5c8078fa51 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Thu, 26 May 2016 14:49:09 +0300
+Subject: [PATCH 26/39] ARM: i.MX6UL: move tsc2046 to the ecspi4 bus.
+
+Move tsc2046 to the ecspi4 bus.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi | 79 +++++++++++------------------
+ 1 file changed, 29 insertions(+), 50 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+index a25de61..da97864 100644
+--- a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
++++ b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+@@ -183,23 +183,10 @@
+ 		};
+ 
+ 		/* pins for spi */
+-		pinctrl_ecspi2_cs: ecspi2_cs_grp {
+-			fsl,pins = <
+-				MX6UL_PAD_LCD_RESET__GPIO3_IO04  0x17059
+-			>;
+-		};
+-
+-		pinctrl_ecspi2: ecspi2grp {
+-			fsl,pins = <
+-				MX6UL_PAD_UART5_TX_DATA__ECSPI2_MOSI	0x1b0b1
+-				MX6UL_PAD_UART5_RX_DATA__ECSPI2_MISO	0x1b0b1
+-				MX6UL_PAD_UART4_TX_DATA__ECSPI2_SCLK	0x1b0b1
+-			>;
+-		};
+-
+ 		pinctrl_ecspi4_cs: ecspi4_cs_grp {
+ 			fsl,pins = <
+ 				MX6UL_PAD_ENET2_RX_ER__GPIO2_IO15	0x17059
++				MX6UL_PAD_LCD_RESET__GPIO3_IO04  0x17059
+ 			>;
+ 		};
+ 
+@@ -336,13 +323,36 @@
+ 	};
+ };
+ 
+-&ecspi2 {
+-	fsl,spi-num-chipselects = <1>;
++&ecspi4 {
++	fsl,spi-num-chipselects = <2>;
+ 	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_ecspi2 &pinctrl_ecspi2_cs>;
+-	cs-gpios = <&gpio3 4 0>;
++	pinctrl-0 = <&pinctrl_ecspi4 &pinctrl_ecspi4_cs>;
++	cs-gpios = <&gpio2 15 0>, <&gpio3 4 0>;
+ 	status = "okay";
+ 
++	m25px16 at 0 {
++		#address-cells = <1>;
++		#size-cells = <1>;
++		compatible = "st,m25p16", "st,m25p";
++		spi-max-frequency = <20000000>;
++		reg = <0>;
++
++		partition at 0 {
++			label = "uboot";
++			reg = <0x0 0xc0000>;
++		};
++
++		partition at c0000 {
++			label = "uboot environment";
++			reg = <0xc0000 0x2000>;
++		};
++
++		partition at 100000 {
++			label = "splash";
++			reg = <0x100000 0x100000>;
++		};
++	};
++
+ 	/* touch controller */
+ 	touch:	tsc2046 at 0 {
+ 		pinctrl-names = "default";
+@@ -351,7 +361,7 @@
+ 		compatible = "ti,tsc2046";
+ 		vcc-supply = <&tsc2046reg>;
+ 
+-		reg = <0>;
++		reg = <1>;
+ 		spi-max-frequency = <1500000>;
+ 
+ 		interrupt-parent = <&gpio1>;
+@@ -374,37 +384,6 @@
+ 	};
+ };
+ 
+-&ecspi4 {
+-	fsl,spi-num-chipselects = <1>;
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_ecspi4 &pinctrl_ecspi4_cs>;
+-	cs-gpios = <&gpio2 15 0>;
+-	status = "okay";
+-
+-	m25px16 at 0 {
+-		#address-cells = <1>;
+-		#size-cells = <1>;
+-		compatible = "st,m25p16", "st,m25p";
+-		spi-max-frequency = <20000000>;
+-		reg = <0>;
+-
+-		partition at 0 {
+-			label = "uboot";
+-			reg = <0x0 0xc0000>;
+-		};
+-
+-		partition at c0000 {
+-			label = "uboot environment";
+-			reg = <0xc0000 0x2000>;
+-		};
+-
+-		partition at 100000 {
+-			label = "splash";
+-			reg = <0x100000 0x100000>;
+-		};
+-	};
+-};
+-
+ &fec1 {
+ 	pinctrl-names = "default";
+ 	pinctrl-0 = <&pinctrl_enet1>;
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0027-ARM-i.MX6UL-enable-flexcan1-for-cl-som-imx6ul.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0027-ARM-i.MX6UL-enable-flexcan1-for-cl-som-imx6ul.patch
new file mode 100644
index 0000000..178cac6
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0027-ARM-i.MX6UL-enable-flexcan1-for-cl-som-imx6ul.patch
@@ -0,0 +1,45 @@
+From 62b9bea858a033a2f372331029dcb48cb6ad3318 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 17 Jan 2016 10:10:04 +0200
+Subject: [PATCH 27/39] ARM: i.MX6UL: enable flexcan1 for cl-som-imx6ul
+
+Enable flexcan1 for cl-som-imx6ul.
+1) Add iomux group for flexcan1.
+2) Add flexcan1 device node with status "okay".
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+index da97864..6d80e21 100644
+--- a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
++++ b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+@@ -274,6 +274,13 @@
+ 				MX6UL_PAD_GPIO1_IO01__GPIO1_IO01  0x80000000
+ 			>;
+ 		};
++
++		pinctrl_flexcan1: flexcan1grp{
++			fsl,pins = <
++				MX6UL_PAD_UART3_RTS_B__FLEXCAN1_RX	0x1b020
++				MX6UL_PAD_UART3_CTS_B__FLEXCAN1_TX	0x1b020
++			>;
++		};
+ 	};
+ };
+ 
+@@ -494,3 +501,9 @@
+ 		};
+ 	};
+ };
++
++&flexcan1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_flexcan1>;
++	status = "okay";
++};
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0028-ARM-i.MX6UL-add-aliases-for-cl-som-imx6ul-devices.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0028-ARM-i.MX6UL-add-aliases-for-cl-som-imx6ul-devices.patch
new file mode 100644
index 0000000..f5fb63c
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0028-ARM-i.MX6UL-add-aliases-for-cl-som-imx6ul-devices.patch
@@ -0,0 +1,32 @@
+From ad1856523f45e89cefb7b9b1640081434339d263 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Wed, 13 Jan 2016 14:43:10 +0200
+Subject: [PATCH 28/39] ARM: i.MX6UL: add aliases for cl-som-imx6ul devices
+
+Add useful aliases for cl-som-imx6ul devices.
+It allows simplify U-Boot fdt modifiaction commands.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+index 6d80e21..4af3014 100644
+--- a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
++++ b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+@@ -11,6 +11,11 @@
+ #include "imx6ul.dtsi"
+ 
+ / {
++	aliases {
++		gpmi = &gpmi;
++		lcdif = &lcdif;
++	};
++
+ 	memory {
+ 		reg = <0x80000000 0x20000000>;
+ 	};
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0029-ARM-i.MX6UL-adjust-usdhc2-pad-conf-values.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0029-ARM-i.MX6UL-adjust-usdhc2-pad-conf-values.patch
new file mode 100644
index 0000000..35c6e63
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0029-ARM-i.MX6UL-adjust-usdhc2-pad-conf-values.patch
@@ -0,0 +1,44 @@
+From a22b78b5af07102b49947c88ae8fac742a87a2a9 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 13 Mar 2016 21:42:05 +0200
+Subject: [PATCH 29/39] ARM: i.MX6UL: adjust usdhc2 pad conf values
+
+Adjust usdhc2 pad conf values.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+index 4af3014..159ce90 100644
+--- a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
++++ b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+@@ -153,15 +153,15 @@
+ 		pinctrl_usdhc2: usdhc2grp {
+ 			fsl,pins = <
+ 				MX6UL_PAD_NAND_ALE__GPIO4_IO10	0x17059
+-				MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x17059
+-				MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x17059
+-				MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x17059
+-				MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x17059
+-				MX6UL_PAD_NAND_DATA04__USDHC2_DATA4 0x17059
+-				MX6UL_PAD_NAND_DATA05__USDHC2_DATA5 0x17059
+-				MX6UL_PAD_NAND_DATA06__USDHC2_DATA6 0x17059
+-				MX6UL_PAD_NAND_DATA07__USDHC2_DATA7 0x17059
+-				MX6UL_PAD_NAND_WE_B__USDHC2_CMD	0x17059
++				MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x1F059
++				MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x1F059
++				MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x1F059
++				MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x1F059
++				MX6UL_PAD_NAND_DATA04__USDHC2_DATA4 0x1F059
++				MX6UL_PAD_NAND_DATA05__USDHC2_DATA5 0x1F059
++				MX6UL_PAD_NAND_DATA06__USDHC2_DATA6 0x1F059
++				MX6UL_PAD_NAND_DATA07__USDHC2_DATA7 0x1F059
++				MX6UL_PAD_NAND_WE_B__USDHC2_CMD	0x1F059
+ 				MX6UL_PAD_NAND_RE_B__USDHC2_CLK	0x17059
+ 			>;
+ 		};
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0030-ARM-i.MX6UL-adjust-usdhc1-pad-conf-values.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0030-ARM-i.MX6UL-adjust-usdhc1-pad-conf-values.patch
new file mode 100644
index 0000000..c634ec5
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0030-ARM-i.MX6UL-adjust-usdhc1-pad-conf-values.patch
@@ -0,0 +1,38 @@
+From c49809701d7193e765ba4844085e85c68cfe38ef Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Tue, 1 Mar 2016 13:38:20 +0200
+Subject: [PATCH 30/39] ARM: i.MX6UL: adjust usdhc1 pad conf values
+
+Adjust usdhc1 pad conf values.
+Solves SD/MMC class 2 card io errors.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+index 159ce90..f997e73 100644
+--- a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
++++ b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+@@ -139,12 +139,12 @@
+ 
+ 		pinctrl_usdhc1: usdhc1grp {
+ 			fsl,pins = <
+-				MX6UL_PAD_SD1_CMD__USDHC1_CMD     0x17059
++				MX6UL_PAD_SD1_CMD__USDHC1_CMD     0x100F9
+ 				MX6UL_PAD_SD1_CLK__USDHC1_CLK     0x17059
+-				MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x17059
+-				MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x17059
+-				MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x17059
+-				MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x17059
++				MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x100F9
++				MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x100F9
++				MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x100F9
++				MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x100F9
+ 				MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059
+ 				MX6UL_PAD_UART1_CTS_B__GPIO1_IO18 0x17059
+ 			>;
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0031-ARM-i.MX6UL-audio-0-add-analog-audio-support-switch.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0031-ARM-i.MX6UL-audio-0-add-analog-audio-support-switch.patch
new file mode 100644
index 0000000..510221c
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0031-ARM-i.MX6UL-audio-0-add-analog-audio-support-switch.patch
@@ -0,0 +1,38 @@
+From caa163cc395aed1e6614ac603aa1fb943662d8be Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Thu, 9 Jun 2016 14:12:32 +0300
+Subject: [PATCH 31/39] ARM: i.MX6UL: audio-0: add analog audio support switch
+
+Add analog audio support switch for imx boards with wm8731.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ sound/soc/fsl/Kconfig | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/sound/soc/fsl/Kconfig b/sound/soc/fsl/Kconfig
+index a4054f3..4c71284 100644
+--- a/sound/soc/fsl/Kconfig
++++ b/sound/soc/fsl/Kconfig
+@@ -288,6 +288,18 @@ config SND_SOC_IMX_CS42888
+ 	 Say Y if you want to add support for SoC audio on an i.MX board with
+ 	 a cs42888 codec.
+ 
++config SND_SOC_IMX_WM8731
++	tristate "SoC Audio support for i.MX boards with wm8731"
++	depends on OF && I2C
++	select SND_SIMPLE_CARD
++	select SND_SOC_WM8731
++	select SND_SOC_IMX_PCM_DMA
++	select SND_SOC_FSL_SAI
++	select SND_SOC_FSL_UTILS
++	help
++	  Say Y if you want to add support for SoC audio on an i.MX board with
++	  a wm8731 codec.
++
+ config SND_SOC_IMX_WM8962
+ 	tristate "SoC Audio support for i.MX boards with wm8962"
+ 	depends on OF && I2C && INPUT
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0032-ARM-i.MX6UL-audio-1-add-analog-audio-support.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0032-ARM-i.MX6UL-audio-1-add-analog-audio-support.patch
new file mode 100644
index 0000000..be748fd
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0032-ARM-i.MX6UL-audio-1-add-analog-audio-support.patch
@@ -0,0 +1,113 @@
+From a4127cc50668ce463fa6ea2b81e6b1b95e4d229d Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Thu, 9 Jun 2016 14:15:20 +0300
+Subject: [PATCH 32/39] ARM: i.MX6UL: audio-1: add analog audio support
+
+Add analog audio support by means of the simple-audio-card.
+This instance provides a simple glue interface between cpu:sai and codec:wm8731.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi | 68 +++++++++++++++++++++++++++++
+ 1 file changed, 68 insertions(+)
+
+diff --git a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+index f997e73..3187fbf 100644
+--- a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
++++ b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+@@ -90,6 +90,44 @@
+ 			linux,default-trigger = "heartbeat";
+ 		};
+ 	};
++
++	sound {
++		compatible = "simple-audio-card";
++		simple-audio-card,name = "cl-som-imx6ul";
++		simple-audio-card,widgets =
++			"Headphone", "Headphone Jack",
++			"Line", "Line Out",
++			"Microphone", "Mic Jack",
++			"Line", "Line In";
++		simple-audio-card,routing =
++			"Headphone Jack", "RHPOUT",
++			"Headphone Jack", "LHPOUT",
++			"LLINEIN", "Line Jack",
++			"RLINEIN", "Line Jack",
++			"MICIN", "Mic Bias",
++			"Mic Bias", "Mic Jack";
++		simple-audio-card,format = "i2s";
++		simple-audio-card,bitclock-master = <&sound_master>;
++		simple-audio-card,frame-master = <&sound_master>;
++		simple-audio-card,bitclock-inversion;
++
++		sound_master: simple-audio-card,cpu {
++			sound-dai = <&sai2 0>;
++			system-clock-frequency = <12288000>;
++			system-clock-direction = "out";
++		};
++
++		simple-audio-card,codec {
++			sound-dai = <&wm8731>;
++			system-clock-direction = "in";
++		};
++
++	};
++};
++
++&clks {
++	assigned-clocks = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>;
++	assigned-clock-rates = <786432000>;
+ };
+ 
+ &iomuxc {
+@@ -217,6 +255,16 @@
+ 			>;
+ 		};
+ 
++		pinctrl_sai2: sai2grp {
++			fsl,pins = <
++				MX6UL_PAD_JTAG_TDI__SAI2_TX_BCLK	0x17088
++				MX6UL_PAD_JTAG_TDO__SAI2_TX_SYNC	0x17088
++				MX6UL_PAD_JTAG_TRST_B__SAI2_TX_DATA	0x11088
++				MX6UL_PAD_JTAG_TCK__SAI2_RX_DATA	0x11088
++				MX6UL_PAD_JTAG_TMS__SAI2_MCLK		0x17088
++			>;
++		};
++
+ 		pinctrl_usb_otg1_id: usbotg1idgrp {
+ 			fsl,pins = <
+ 				MX6UL_PAD_GPIO1_IO00__ANATOP_OTG1_ID	0x17059
+@@ -425,6 +473,13 @@
+ 	pinctrl-0 = <&pinctrl_i2c3>;
+ 	status = "okay";
+ 
++	wm8731: wm8731 at 1a {
++		#sound-dai-cells = <0>;
++		compatible = "wlf,wm8731";
++		reg = <0x1a>;
++		status = "okay";
++	};
++
+ 	eeprom at 50 {
+ 		compatible = "at24,24c02";
+ 		reg = <0x50>;
+@@ -512,3 +567,16 @@
+ 	pinctrl-0 = <&pinctrl_flexcan1>;
+ 	status = "okay";
+ };
++
++&sai2 {
++	#sound-dai-cells = <0>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_sai2>;
++
++	assigned-clocks = <&clks IMX6UL_CLK_SAI2_SEL>,
++			  <&clks IMX6UL_CLK_SAI2>;
++	assigned-clock-parents = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>;
++	assigned-clock-rates = <0>, <12288000>;
++
++	status = "okay";
++};
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0033-ARM-i.MX6UL-audio-2-adjust-sai2.MCLK-direction.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0033-ARM-i.MX6UL-audio-2-adjust-sai2.MCLK-direction.patch
new file mode 100644
index 0000000..7794b55
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0033-ARM-i.MX6UL-audio-2-adjust-sai2.MCLK-direction.patch
@@ -0,0 +1,63 @@
+From 4e19bc6611246fe5119d0878d87f3502bd7cdc81 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 29 May 2016 13:37:40 +0300
+Subject: [PATCH 33/39] ARM: i.MX6UL: audio-2: adjust sai2.MCLK direction
+
+Adjust the sai2.MCLK direction.
+Requires for analog audio with the simple-audio-card.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/mach-imx/mach-cl-som-imx6ul.c | 24 +++++++++++++++++-------
+ 1 file changed, 17 insertions(+), 7 deletions(-)
+
+diff --git a/arch/arm/mach-imx/mach-cl-som-imx6ul.c b/arch/arm/mach-imx/mach-cl-som-imx6ul.c
+index c43db1a..8a40106 100644
+--- a/arch/arm/mach-imx/mach-cl-som-imx6ul.c
++++ b/arch/arm/mach-imx/mach-cl-som-imx6ul.c
+@@ -14,17 +14,27 @@
+ #include <asm/mach/arch.h>
+ #include <asm/mach/map.h>
+ 
+-static void __init cl_som_imx6ul_enet_clk_init(void)
++static inline void __init cl_som_imx6ul_enet_clk_init(struct regmap *gpr)
++{
++	regmap_update_bits(gpr, IOMUXC_GPR1, IMX6UL_GPR1_ENET_CLK_DIR, 1<<13);
++}
++
++static inline void __init cl_som_imx6ul_sai2_clk_init(struct regmap *gpr)
++{
++	regmap_update_bits(gpr, IOMUXC_GPR1, 1<<20, 1<<20);
++}
++
++static void __init cl_som_imx6ul_clk_init(void)
+ {
+ 	struct regmap *gpr;
+ 
+ 	gpr = syscon_regmap_lookup_by_compatible("fsl,imx6ul-iomuxc-gpr");
+-	if (!IS_ERR(gpr))
+-		regmap_update_bits(gpr, IOMUXC_GPR1, IMX6UL_GPR1_ENET_CLK_DIR,
+-				   1 << 13);
+-	else
++	if (IS_ERR(gpr)) {
+ 		pr_err("failed to find fsl,imx6ul-iomux-gpr regmap\n");
+-
++		return;
++	}
++	cl_som_imx6ul_enet_clk_init(gpr);
++	cl_som_imx6ul_sai2_clk_init(gpr);
+ }
+ 
+ static int __init cl_som_imx6ul_init(void)
+@@ -38,7 +48,7 @@ static int __init cl_som_imx6ul_init(void)
+ 		return -ENODEV;
+ 	}
+ 
+-	cl_som_imx6ul_enet_clk_init();
++	cl_som_imx6ul_clk_init();
+ 
+ 	return 0;
+ }
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0034-ARM-i.MX6UL-audio-3-update-defconfig-for-analog-audi.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0034-ARM-i.MX6UL-audio-3-update-defconfig-for-analog-audi.patch
new file mode 100644
index 0000000..7254bfa
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0034-ARM-i.MX6UL-audio-3-update-defconfig-for-analog-audi.patch
@@ -0,0 +1,28 @@
+From 0607122add075a1367408d2c3536df5740da061f Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 29 May 2016 13:47:48 +0300
+Subject: [PATCH 34/39] ARM: i.MX6UL: audio-3: update defconfig for analog
+ audio
+
+Update the cl-som-imx6ul defconfig for analog audio.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/configs/cl_som_imx6ul_defconfig | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/arm/configs/cl_som_imx6ul_defconfig b/arch/arm/configs/cl_som_imx6ul_defconfig
+index 033b05c..177c5c4 100644
+--- a/arch/arm/configs/cl_som_imx6ul_defconfig
++++ b/arch/arm/configs/cl_som_imx6ul_defconfig
+@@ -328,6 +328,7 @@ CONFIG_SND_USB_AUDIO=m
+ CONFIG_SND_SOC=y
+ CONFIG_SND_IMX_SOC=y
+ CONFIG_SND_SOC_EUKREA_TLV320=y
++CONFIG_SND_SOC_IMX_WM8731=y
+ CONFIG_SND_SOC_IMX_WM8962=y
+ CONFIG_SND_SOC_IMX_SGTL5000=y
+ CONFIG_SND_SOC_IMX_SPDIF=y
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0035-ARM-i.MX6UL-update-defconfig-for-lcdif.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0035-ARM-i.MX6UL-update-defconfig-for-lcdif.patch
new file mode 100644
index 0000000..bf4b2f0
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0035-ARM-i.MX6UL-update-defconfig-for-lcdif.patch
@@ -0,0 +1,284 @@
+From 753ea90959b0cc634209af0d36ccb0e5cb21f5c1 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 5 Jun 2016 07:14:52 +0300
+Subject: [PATCH 35/39] ARM: i.MX6UL: update defconfig for lcdif
+
+---
+ arch/arm/configs/cl_som_imx6ul_defconfig | 83 +++++++++++++++++++++++++++++++-
+ 1 file changed, 81 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/configs/cl_som_imx6ul_defconfig b/arch/arm/configs/cl_som_imx6ul_defconfig
+index 177c5c4..810d708 100644
+--- a/arch/arm/configs/cl_som_imx6ul_defconfig
++++ b/arch/arm/configs/cl_som_imx6ul_defconfig
+@@ -1,4 +1,4 @@
+-CONFIG_LOCALVERSION="-cl-som-imx6ul-prod"
++CONFIG_LOCALVERSION="-cl-som-imx6ul-2.0"
+ CONFIG_KERNEL_LZO=y
+ CONFIG_SYSVIPC=y
+ CONFIG_FHANDLE=y
+@@ -14,6 +14,11 @@ CONFIG_CHECKPOINT_RESTORE=y
+ CONFIG_NAMESPACES=y
+ CONFIG_RELAY=y
+ CONFIG_BLK_DEV_INITRD=y
++# CONFIG_RD_BZIP2 is not set
++# CONFIG_RD_LZMA is not set
++# CONFIG_RD_XZ is not set
++# CONFIG_RD_LZO is not set
++# CONFIG_RD_LZ4 is not set
+ CONFIG_EXPERT=y
+ CONFIG_KALLSYMS_ALL=y
+ CONFIG_PERF_EVENTS=y
+@@ -26,6 +31,7 @@ CONFIG_MODULE_SRCVERSION_ALL=y
+ # CONFIG_BLK_DEV_BSG is not set
+ CONFIG_ARCH_MXC=y
+ CONFIG_SOC_IMX50=y
++CONFIG_SOC_IMX51=y
+ CONFIG_SOC_IMX53=y
+ CONFIG_SOC_IMX6Q=y
+ CONFIG_SOC_IMX6SL=y
+@@ -34,6 +40,8 @@ CONFIG_SOC_IMX6UL=y
+ CONFIG_CL_SOM_IMX6UL=y
+ CONFIG_SOC_IMX7D=y
+ CONFIG_SOC_VF610=y
++# CONFIG_SWP_EMULATE is not set
++# CONFIG_ARM_ERRATA_643719 is not set
+ CONFIG_SMP=y
+ CONFIG_HAVE_ARM_ARCH_TIMER=y
+ CONFIG_VMSPLIT_2G=y
+@@ -44,10 +52,13 @@ CONFIG_CMA=y
+ CONFIG_SECCOMP=y
+ CONFIG_CMDLINE="noinitrd console=ttymxc0,115200"
+ CONFIG_CPU_FREQ=y
++CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
++CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+ CONFIG_CPU_FREQ_GOV_USERSPACE=y
+ CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+ CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+ CONFIG_ARM_IMX6Q_CPUFREQ=y
++CONFIG_ARM_IMX7D_CPUFREQ=y
+ CONFIG_CPU_IDLE=y
+ CONFIG_VFP=y
+ CONFIG_NEON=y
+@@ -64,6 +75,7 @@ CONFIG_IP_PNP_DHCP=y
+ # 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_NETFILTER_DEBUG=y
+ CONFIG_NF_CONNTRACK=m
+@@ -76,9 +88,11 @@ CONFIG_NETFILTER_XT_TARGET_DSCP=m
+ CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
+ CONFIG_NETFILTER_XT_TARGET_LED=m
+ CONFIG_NETFILTER_XT_TARGET_MARK=m
++CONFIG_NETFILTER_XT_TARGET_NETMAP=m
+ CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+ CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+ CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
++CONFIG_NETFILTER_XT_TARGET_REDIRECT=m
+ CONFIG_NETFILTER_XT_TARGET_TEE=m
+ CONFIG_NETFILTER_XT_TARGET_TRACE=m
+ CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+@@ -185,6 +199,8 @@ CONFIG_MTD_UBI=y
+ CONFIG_BLK_DEV_LOOP=y
+ CONFIG_BLK_DEV_RAM=y
+ CONFIG_BLK_DEV_RAM_SIZE=65536
++CONFIG_SENSORS_FXOS8700=y
++CONFIG_SENSORS_FXAS2100X=y
+ CONFIG_EEPROM_AT24=y
+ CONFIG_EEPROM_AT25=y
+ CONFIG_TI_ST=y
+@@ -232,6 +248,10 @@ CONFIG_USB_NET_ZAURUS=m
+ CONFIG_ATH_CARDS=y
+ CONFIG_ATH6KL=m
+ CONFIG_ATH6KL_SDIO=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_WL_TI=y
+ CONFIG_WL1251=y
+ CONFIG_WL1251_SDIO=y
+@@ -242,7 +262,6 @@ CONFIG_WLCORE_SDIO=y
+ CONFIG_INPUT_EVDEV=y
+ CONFIG_INPUT_EVBUG=m
+ CONFIG_KEYBOARD_GPIO=y
+-CONFIG_KEYBOARD_SNVS_PWRKEY=y
+ CONFIG_KEYBOARD_IMX=y
+ CONFIG_MOUSE_PS2=m
+ CONFIG_MOUSE_PS2_ELANTECH=y
+@@ -258,6 +277,9 @@ CONFIG_TOUCHSCREEN_STMPE=y
+ CONFIG_INPUT_MISC=y
+ CONFIG_INPUT_MMA8450=y
+ CONFIG_INPUT_UINPUT=y
++CONFIG_INPUT_MPL3115=y
++CONFIG_SENSOR_FXLS8471=y
++CONFIG_INPUT_ISL29023=y
+ CONFIG_SERIO_SERPORT=m
+ CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
+ # CONFIG_LEGACY_PTYS is not set
+@@ -266,6 +288,7 @@ CONFIG_SERIAL_IMX=y
+ CONFIG_SERIAL_IMX_CONSOLE=y
+ CONFIG_SERIAL_FSL_LPUART=y
+ CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
++CONFIG_FSL_OTP=y
+ # CONFIG_I2C_COMPAT is not set
+ CONFIG_I2C_CHARDEV=y
+ # CONFIG_I2C_HELPER_AUTO is not set
+@@ -280,14 +303,19 @@ CONFIG_GPIO_MAX732X=y
+ CONFIG_GPIO_PCA953X=y
+ CONFIG_GPIO_74X164=y
+ CONFIG_POWER_SUPPLY=y
++CONFIG_SABRESD_MAX8903=y
++CONFIG_SENSORS_MAX17135=y
++CONFIG_SENSORS_MAG3110=y
+ CONFIG_THERMAL=y
+ CONFIG_CPU_THERMAL=y
+ CONFIG_IMX_THERMAL=y
++CONFIG_DEVICE_THERMAL=y
+ CONFIG_WATCHDOG=y
+ CONFIG_IMX2_WDT=y
+ CONFIG_MFD_DA9052_I2C=y
+ CONFIG_MFD_MC13XXX_SPI=y
+ CONFIG_MFD_MC13XXX_I2C=y
++CONFIG_MFD_MAX17135=y
+ CONFIG_MFD_SI476X_CORE=y
+ CONFIG_MFD_STMPE=y
+ CONFIG_REGULATOR=y
+@@ -295,6 +323,7 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=y
+ CONFIG_REGULATOR_ANATOP=y
+ CONFIG_REGULATOR_DA9052=y
+ CONFIG_REGULATOR_GPIO=y
++CONFIG_REGULATOR_MAX17135=y
+ CONFIG_REGULATOR_MC13783=y
+ CONFIG_REGULATOR_MC13892=y
+ CONFIG_REGULATOR_PFUZE100=y
+@@ -307,6 +336,18 @@ 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_SOC_CAMERA=y
+ CONFIG_VIDEO_MX3=y
+ CONFIG_V4L_MEM2MEM_DRIVERS=y
+@@ -314,12 +355,25 @@ CONFIG_VIDEO_CODA=y
+ CONFIG_RADIO_SI476X=y
+ CONFIG_SOC_CAMERA_OV2640=y
+ CONFIG_DRM=y
++CONFIG_DRM_VIVANTE=y
++CONFIG_FB=y
+ CONFIG_FB_MXS=y
++CONFIG_FB_MXC_SYNC_PANEL=y
++CONFIG_FB_MXC_MIPI_DSI_SAMSUNG=y
++CONFIG_FB_MXC_TRULY_WVGA_SYNC_PANEL=y
++CONFIG_FB_MXC_LDB=y
++CONFIG_FB_MXC_HDMI=y
++CONFIG_FB_MXS_SII902X=y
++CONFIG_FB_MXC_DCIC=m
++CONFIG_HANNSTAR_CABC=y
++CONFIG_FB_MXC_EINK_PANEL=y
++CONFIG_FB_MXC_EINK_V2_PANEL=y
+ CONFIG_LCD_CLASS_DEVICE=y
+ CONFIG_LCD_L4F00242T03=y
+ CONFIG_LCD_PLATFORM=y
+ CONFIG_BACKLIGHT_PWM=y
+ CONFIG_FRAMEBUFFER_CONSOLE=y
++CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
+ CONFIG_LOGO=y
+ CONFIG_SIL164_SIMPLE=y
+ CONFIG_SOUND=y
+@@ -328,13 +382,21 @@ CONFIG_SND_USB_AUDIO=m
+ CONFIG_SND_SOC=y
+ CONFIG_SND_IMX_SOC=y
+ CONFIG_SND_SOC_EUKREA_TLV320=y
++CONFIG_SND_SOC_IMX_WM8960=y
++CONFIG_SND_SOC_IMX_SII902X=y
++CONFIG_SND_SOC_IMX_WM8958=y
++CONFIG_SND_SOC_IMX_CS42888=y
+ CONFIG_SND_SOC_IMX_WM8731=y
+ CONFIG_SND_SOC_IMX_WM8962=y
+ CONFIG_SND_SOC_IMX_SGTL5000=y
++CONFIG_SND_SOC_IMX_MQS=y
+ CONFIG_SND_SOC_IMX_SPDIF=y
+ CONFIG_SND_SOC_IMX_MC13783=y
++CONFIG_SND_SOC_IMX_SI476X=y
++CONFIG_SND_SOC_IMX_HDMI=y
+ CONFIG_USB=y
+ CONFIG_USB_OTG_WHITELIST=y
++CONFIG_USB_OTG_FSM=y
+ CONFIG_USB_EHCI_HCD=y
+ CONFIG_USB_EHCI_MXC=y
+ CONFIG_USB_HCD_TEST_MODE=y
+@@ -373,6 +435,11 @@ 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
+@@ -389,11 +456,15 @@ CONFIG_RTC_DRV_MC13XXX=y
+ CONFIG_RTC_DRV_MXC=y
+ CONFIG_RTC_DRV_SNVS=y
+ CONFIG_DMADEVICES=y
++CONFIG_MXC_PXP_V2=y
++CONFIG_MXC_PXP_V3=y
+ CONFIG_IMX_SDMA=y
+ CONFIG_MXS_DMA=y
+ CONFIG_STAGING=y
+ CONFIG_STAGING_MEDIA=y
+ # CONFIG_IOMMU_SUPPORT is not set
++# CONFIG_IMX_RPMSG_PINGPONG is not set
++# CONFIG_IMX_RPMSG_TTY is not set
+ CONFIG_IIO=y
+ CONFIG_VF610_ADC=y
+ CONFIG_PWM=y
+@@ -405,6 +476,9 @@ 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
+@@ -435,6 +509,7 @@ CONFIG_DEBUG_FS=y
+ CONFIG_MAGIC_SYSRQ=y
+ # CONFIG_SCHED_DEBUG is not set
+ # CONFIG_DEBUG_BUGVERBOSE is not set
++# CONFIG_RCU_CPU_STALL_INFO is not set
+ # CONFIG_FTRACE is not set
+ CONFIG_CORESIGHT=y
+ CONFIG_CORESIGHT_LINK_AND_SINK_TMC=y
+@@ -463,7 +538,11 @@ CONFIG_CRYPTO_BLOWFISH=y
+ CONFIG_CRYPTO_CAMELLIA=y
+ CONFIG_CRYPTO_DES=y
+ CONFIG_CRYPTO_TWOFISH=y
++# CONFIG_CRYPTO_ANSI_CPRNG is not set
+ CONFIG_CRYPTO_DEV_FSL_CAAM=y
++CONFIG_CRYPTO_DEV_FSL_CAAM_SM=y
++CONFIG_CRYPTO_DEV_FSL_CAAM_SM_TEST=y
++CONFIG_CRYPTO_DEV_FSL_CAAM_SECVIO=y
+ CONFIG_CRC_CCITT=m
+ CONFIG_CRC_T10DIF=y
+ CONFIG_LIBCRC32C=m
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0036-ARM-i.MX6UL-enable-sdma.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0036-ARM-i.MX6UL-enable-sdma.patch
new file mode 100644
index 0000000..0ee0a04
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0036-ARM-i.MX6UL-enable-sdma.patch
@@ -0,0 +1,30 @@
+From 6934915284e522e2693b613330380adb749bfcb5 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 5 Jun 2016 07:24:55 +0300
+Subject: [PATCH 36/39] ARM: i.MX6UL: enable sdma
+
+Enable sdma.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+index 3187fbf..352f049 100644
+--- a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
++++ b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+@@ -125,6 +125,10 @@
+ 	};
+ };
+ 
++&sdma {
++	status = "okay";
++};
++
+ &clks {
+ 	assigned-clocks = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>;
+ 	assigned-clock-rates = <786432000>;
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0037-ARM-i.MX6UL-fix-gpmi-depends-string.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0037-ARM-i.MX6UL-fix-gpmi-depends-string.patch
new file mode 100644
index 0000000..9a89bb9
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0037-ARM-i.MX6UL-fix-gpmi-depends-string.patch
@@ -0,0 +1,28 @@
+From c6030d7cb9438984759fce48d6c0fc0b6145b86a Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Wed, 29 Jun 2016 08:15:26 +0300
+Subject: [PATCH 37/39] ARM: i.MX6UL: fix gpmi depends string
+
+Fix the gpmi depends string.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+index 352f049..cb31e2f 100644
+--- a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
++++ b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+@@ -373,7 +373,7 @@
+ 	pinctrl-names = "default";
+ 	pinctrl-0 = <&pinctrl_gpmi_nand>;
+ 	nand-on-flash-bbt;
+-	depends = "/soc/aips-bus at 02000000/spba-bus at 02000000/ecspi at 02014000";
++	depends = &ecspi4;
+ 	status = "disabled";
+ 
+ 	partition at 0 {
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0038-ARM-i.MX6UL-disable-ocotp-for-wilink.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0038-ARM-i.MX6UL-disable-ocotp-for-wilink.patch
new file mode 100644
index 0000000..910ad89
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0038-ARM-i.MX6UL-disable-ocotp-for-wilink.patch
@@ -0,0 +1,34 @@
+From dbf7866b439d999b47a4c3330b1320ce763dcc87 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Wed, 29 Jun 2016 08:16:54 +0300
+Subject: [PATCH 38/39] ARM: i.MX6UL: disable ocotp for wilink
+
+Disable ocotp for wilink.
+This is a hack that prevents a system hang while configuring a wilink8 device.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6ul-cl-som-imx6ul-wilink.dts | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul-wilink.dts b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul-wilink.dts
+index 1173fea..a182698 100644
+--- a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul-wilink.dts
++++ b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul-wilink.dts
+@@ -74,6 +74,13 @@
+ 	fsl,uart-has-rtscts;
+ };
+ 
++/* kinda hack that prevents a system hang while configuring a wilink8 device */
++/* TBFIxed */
++
++&ocotp {
++	compatible = "fsl,imx6ul-ocotp-fake";
++};
++
+ &usdhc1 {
+ 	pinctrl-names = "default";
+ 	pinctrl-0 = <&pinctrl_usdhc1>;
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0039-ARM-i.MX6UL-wm8731-refactoring.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0039-ARM-i.MX6UL-wm8731-refactoring.patch
new file mode 100644
index 0000000..99cd315
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/0039-ARM-i.MX6UL-wm8731-refactoring.patch
@@ -0,0 +1,53 @@
+From 870a3429650e619f4a578e51ec44b8d39fa9646f Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Wed, 29 Jun 2016 09:08:46 +0300
+Subject: [PATCH 39/39] ARM: i.MX6UL: wm8731 refactoring
+
+wm8731 refactoring:
+1) define the device regulators in order to suppress
+device probbing warnings.
+2) remove an incorrect analog audio routing.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+index cb31e2f..bc576de 100644
+--- a/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
++++ b/arch/arm/boot/dts/imx6ul-cl-som-imx6ul.dtsi
+@@ -33,7 +33,9 @@
+ 	};
+ 
+ 	pu_dummy: pudummy_reg {
+-		compatible = "fsl,imx6-dummy-pureg";
++		compatible = "regulator-fixed";
++		regulator-name = "pu-dummy";
++		regulator-always-on;
+ 	};
+ 
+ 	regulators {
+@@ -102,8 +104,6 @@
+ 		simple-audio-card,routing =
+ 			"Headphone Jack", "RHPOUT",
+ 			"Headphone Jack", "LHPOUT",
+-			"LLINEIN", "Line Jack",
+-			"RLINEIN", "Line Jack",
+ 			"MICIN", "Mic Bias",
+ 			"Mic Bias", "Mic Jack";
+ 		simple-audio-card,format = "i2s";
+@@ -482,6 +482,10 @@
+ 		compatible = "wlf,wm8731";
+ 		reg = <0x1a>;
+ 		status = "okay";
++		AVDD-supply = <&pu_dummy>;
++		HPVDD-supply = <&pu_dummy>;
++		DCVDD-supply = <&pu_dummy>;
++		DBVDD-supply = <&pu_dummy>;
+ 	};
+ 
+ 	eeprom at 50 {
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/defconfig b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/defconfig
new file mode 100644
index 0000000..810d708
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cl-som-imx6ul/defconfig
@@ -0,0 +1,551 @@
+CONFIG_LOCALVERSION="-cl-som-imx6ul-2.0"
+CONFIG_KERNEL_LZO=y
+CONFIG_SYSVIPC=y
+CONFIG_FHANDLE=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=18
+CONFIG_CGROUPS=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_CFS_BANDWIDTH=y
+CONFIG_CHECKPOINT_RESTORE=y
+CONFIG_NAMESPACES=y
+CONFIG_RELAY=y
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_RD_BZIP2 is not set
+# CONFIG_RD_LZMA is not set
+# CONFIG_RD_XZ is not set
+# CONFIG_RD_LZO is not set
+# CONFIG_RD_LZ4 is not set
+CONFIG_EXPERT=y
+CONFIG_KALLSYMS_ALL=y
+CONFIG_PERF_EVENTS=y
+# CONFIG_SLUB_DEBUG is not set
+# CONFIG_COMPAT_BRK is not set
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+CONFIG_MODULE_SRCVERSION_ALL=y
+# CONFIG_BLK_DEV_BSG is not set
+CONFIG_ARCH_MXC=y
+CONFIG_SOC_IMX50=y
+CONFIG_SOC_IMX51=y
+CONFIG_SOC_IMX53=y
+CONFIG_SOC_IMX6Q=y
+CONFIG_SOC_IMX6SL=y
+CONFIG_SOC_IMX6SX=y
+CONFIG_SOC_IMX6UL=y
+CONFIG_CL_SOM_IMX6UL=y
+CONFIG_SOC_IMX7D=y
+CONFIG_SOC_VF610=y
+# CONFIG_SWP_EMULATE is not set
+# CONFIG_ARM_ERRATA_643719 is not set
+CONFIG_SMP=y
+CONFIG_HAVE_ARM_ARCH_TIMER=y
+CONFIG_VMSPLIT_2G=y
+CONFIG_PREEMPT=y
+CONFIG_AEABI=y
+CONFIG_HIGHMEM=y
+CONFIG_CMA=y
+CONFIG_SECCOMP=y
+CONFIG_CMDLINE="noinitrd console=ttymxc0,115200"
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_ARM_IMX6Q_CPUFREQ=y
+CONFIG_ARM_IMX7D_CPUFREQ=y
+CONFIG_CPU_IDLE=y
+CONFIG_VFP=y
+CONFIG_NEON=y
+CONFIG_BINFMT_MISC=m
+CONFIG_PM_DEBUG=y
+CONFIG_PM_TEST_SUSPEND=y
+CONFIG_NET=y
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+CONFIG_INET=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+CONFIG_IPV6=y
+CONFIG_NETFILTER=y
+CONFIG_NETFILTER_DEBUG=y
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_DSCP=m
+CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
+CONFIG_NETFILTER_XT_TARGET_LED=m
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NETMAP=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+CONFIG_NETFILTER_XT_TARGET_REDIRECT=m
+CONFIG_NETFILTER_XT_TARGET_TEE=m
+CONFIG_NETFILTER_XT_TARGET_TRACE=m
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
+CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
+CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_CPU=m
+CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_OSF=m
+CONFIG_NETFILTER_XT_MATCH_OWNER=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_RATEEST=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_RECENT=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_TIME=m
+CONFIG_NETFILTER_XT_MATCH_U32=m
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_NAT_IPV4=m
+CONFIG_IP_NF_IPTABLES=y
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_RPFILTER=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_TARGET_REJECT=y
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+CONFIG_IP6_NF_IPTABLES=y
+CONFIG_VLAN_8021Q=m
+CONFIG_VLAN_8021Q_GVRP=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_HCIUART_LL=y
+CONFIG_BT_HCIBCM203X=y
+CONFIG_BT_ATH3K=y
+CONFIG_BT_WILINK=m
+CONFIG_CFG80211=y
+CONFIG_CFG80211_WEXT=y
+CONFIG_MAC80211=y
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+# CONFIG_STANDALONE is not set
+CONFIG_DMA_CMA=y
+CONFIG_CMA_SIZE_MBYTES=320
+CONFIG_IMX_WEIM=y
+CONFIG_CONNECTOR=y
+CONFIG_MTD=y
+CONFIG_MTD_CMDLINE_PARTS=y
+CONFIG_MTD_BLOCK=y
+CONFIG_MTD_CFI=y
+CONFIG_MTD_JEDECPROBE=y
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_CFI_AMDSTD=y
+CONFIG_MTD_CFI_STAA=y
+CONFIG_MTD_PHYSMAP_OF=y
+CONFIG_MTD_DATAFLASH=y
+CONFIG_MTD_M25P80=y
+CONFIG_MTD_SST25L=y
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_GPMI_NAND=y
+CONFIG_MTD_NAND_MXC=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_SPI_FSL_QUADSPI=y
+CONFIG_MTD_UBI=y
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_SIZE=65536
+CONFIG_SENSORS_FXOS8700=y
+CONFIG_SENSORS_FXAS2100X=y
+CONFIG_EEPROM_AT24=y
+CONFIG_EEPROM_AT25=y
+CONFIG_TI_ST=y
+CONFIG_ST_HCI=y
+# CONFIG_SCSI_PROC_FS is not set
+CONFIG_BLK_DEV_SD=y
+CONFIG_SCSI_CONSTANTS=y
+CONFIG_SCSI_LOGGING=y
+CONFIG_SCSI_SCAN_ASYNC=y
+# CONFIG_SCSI_LOWLEVEL is not set
+CONFIG_ATA=y
+CONFIG_SATA_AHCI_PLATFORM=y
+CONFIG_AHCI_IMX=y
+CONFIG_PATA_IMX=y
+CONFIG_NETDEVICES=y
+CONFIG_TUN=m
+# CONFIG_NET_VENDOR_BROADCOM is not set
+CONFIG_CS89x0=y
+CONFIG_CS89x0_PLATFORM=y
+# CONFIG_NET_VENDOR_FARADAY is not set
+# 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
+# CONFIG_NET_VENDOR_NATSEMI is not set
+# CONFIG_NET_VENDOR_SEEQ is not set
+CONFIG_SMC91X=y
+CONFIG_SMC911X=y
+CONFIG_SMSC911X=y
+# CONFIG_NET_VENDOR_STMICRO is not set
+CONFIG_MICREL_PHY=y
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_RTL8152=m
+CONFIG_USB_USBNET=y
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_AX88179_178A=m
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_USB_NET_CDC_EEM=m
+CONFIG_USB_NET_CDC_NCM=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_MCS7830=y
+CONFIG_USB_NET_CDC_SUBSET=m
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_ATH_CARDS=y
+CONFIG_ATH6KL=m
+CONFIG_ATH6KL_SDIO=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_WL_TI=y
+CONFIG_WL1251=y
+CONFIG_WL1251_SDIO=y
+CONFIG_WL18XX=m
+CONFIG_WLCORE=y
+CONFIG_WLCORE_SDIO=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_EVDEV=y
+CONFIG_INPUT_EVBUG=m
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_KEYBOARD_IMX=y
+CONFIG_MOUSE_PS2=m
+CONFIG_MOUSE_PS2_ELANTECH=y
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=y
+CONFIG_TOUCHSCREEN_EGALAX=y
+CONFIG_TOUCHSCREEN_ELAN=y
+CONFIG_TOUCHSCREEN_MAX11801=y
+CONFIG_TOUCHSCREEN_IMX6UL_TSC=y
+CONFIG_TOUCHSCREEN_MC13783=y
+CONFIG_TOUCHSCREEN_TSC2007=y
+CONFIG_TOUCHSCREEN_STMPE=y
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_MMA8450=y
+CONFIG_INPUT_UINPUT=y
+CONFIG_INPUT_MPL3115=y
+CONFIG_SENSOR_FXLS8471=y
+CONFIG_INPUT_ISL29023=y
+CONFIG_SERIO_SERPORT=m
+CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_DEVKMEM is not set
+CONFIG_SERIAL_IMX=y
+CONFIG_SERIAL_IMX_CONSOLE=y
+CONFIG_SERIAL_FSL_LPUART=y
+CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
+CONFIG_FSL_OTP=y
+# CONFIG_I2C_COMPAT is not set
+CONFIG_I2C_CHARDEV=y
+# CONFIG_I2C_HELPER_AUTO is not set
+CONFIG_I2C_ALGOPCF=m
+CONFIG_I2C_ALGOPCA=m
+CONFIG_I2C_IMX=y
+CONFIG_SPI=y
+CONFIG_SPI_GPIO=y
+CONFIG_SPI_IMX=y
+CONFIG_GPIO_SYSFS=y
+CONFIG_GPIO_MAX732X=y
+CONFIG_GPIO_PCA953X=y
+CONFIG_GPIO_74X164=y
+CONFIG_POWER_SUPPLY=y
+CONFIG_SABRESD_MAX8903=y
+CONFIG_SENSORS_MAX17135=y
+CONFIG_SENSORS_MAG3110=y
+CONFIG_THERMAL=y
+CONFIG_CPU_THERMAL=y
+CONFIG_IMX_THERMAL=y
+CONFIG_DEVICE_THERMAL=y
+CONFIG_WATCHDOG=y
+CONFIG_IMX2_WDT=y
+CONFIG_MFD_DA9052_I2C=y
+CONFIG_MFD_MC13XXX_SPI=y
+CONFIG_MFD_MC13XXX_I2C=y
+CONFIG_MFD_MAX17135=y
+CONFIG_MFD_SI476X_CORE=y
+CONFIG_MFD_STMPE=y
+CONFIG_REGULATOR=y
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
+CONFIG_REGULATOR_ANATOP=y
+CONFIG_REGULATOR_DA9052=y
+CONFIG_REGULATOR_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_SOC_CAMERA=y
+CONFIG_VIDEO_MX3=y
+CONFIG_V4L_MEM2MEM_DRIVERS=y
+CONFIG_VIDEO_CODA=y
+CONFIG_RADIO_SI476X=y
+CONFIG_SOC_CAMERA_OV2640=y
+CONFIG_DRM=y
+CONFIG_DRM_VIVANTE=y
+CONFIG_FB=y
+CONFIG_FB_MXS=y
+CONFIG_FB_MXC_SYNC_PANEL=y
+CONFIG_FB_MXC_MIPI_DSI_SAMSUNG=y
+CONFIG_FB_MXC_TRULY_WVGA_SYNC_PANEL=y
+CONFIG_FB_MXC_LDB=y
+CONFIG_FB_MXC_HDMI=y
+CONFIG_FB_MXS_SII902X=y
+CONFIG_FB_MXC_DCIC=m
+CONFIG_HANNSTAR_CABC=y
+CONFIG_FB_MXC_EINK_PANEL=y
+CONFIG_FB_MXC_EINK_V2_PANEL=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_L4F00242T03=y
+CONFIG_LCD_PLATFORM=y
+CONFIG_BACKLIGHT_PWM=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
+CONFIG_LOGO=y
+CONFIG_SIL164_SIMPLE=y
+CONFIG_SOUND=y
+CONFIG_SND=y
+CONFIG_SND_USB_AUDIO=m
+CONFIG_SND_SOC=y
+CONFIG_SND_IMX_SOC=y
+CONFIG_SND_SOC_EUKREA_TLV320=y
+CONFIG_SND_SOC_IMX_WM8960=y
+CONFIG_SND_SOC_IMX_SII902X=y
+CONFIG_SND_SOC_IMX_WM8958=y
+CONFIG_SND_SOC_IMX_CS42888=y
+CONFIG_SND_SOC_IMX_WM8731=y
+CONFIG_SND_SOC_IMX_WM8962=y
+CONFIG_SND_SOC_IMX_SGTL5000=y
+CONFIG_SND_SOC_IMX_MQS=y
+CONFIG_SND_SOC_IMX_SPDIF=y
+CONFIG_SND_SOC_IMX_MC13783=y
+CONFIG_SND_SOC_IMX_SI476X=y
+CONFIG_SND_SOC_IMX_HDMI=y
+CONFIG_USB=y
+CONFIG_USB_OTG_WHITELIST=y
+CONFIG_USB_OTG_FSM=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_MXC=y
+CONFIG_USB_HCD_TEST_MODE=y
+CONFIG_USB_ACM=m
+CONFIG_USB_STORAGE=y
+CONFIG_USB_CHIPIDEA=y
+CONFIG_USB_CHIPIDEA_UDC=y
+CONFIG_USB_CHIPIDEA_HOST=y
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_EHSET_TEST_FIXTURE=y
+CONFIG_NOP_USB_XCEIV=y
+CONFIG_USB_MXS_PHY=y
+CONFIG_USB_GADGET=y
+CONFIG_USB_CONFIGFS=m
+CONFIG_USB_CONFIGFS_SERIAL=y
+CONFIG_USB_CONFIGFS_ACM=y
+CONFIG_USB_CONFIGFS_OBEX=y
+CONFIG_USB_CONFIGFS_NCM=y
+CONFIG_USB_CONFIGFS_ECM=y
+CONFIG_USB_CONFIGFS_ECM_SUBSET=y
+CONFIG_USB_CONFIGFS_RNDIS=y
+CONFIG_USB_CONFIGFS_EEM=y
+CONFIG_USB_CONFIGFS_MASS_STORAGE=y
+CONFIG_USB_CONFIGFS_F_LB_SS=y
+CONFIG_USB_CONFIGFS_F_FS=y
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_G_NCM=m
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_MASS_STORAGE=m
+CONFIG_USB_G_SERIAL=m
+CONFIG_MMC=y
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_PLTFM=y
+CONFIG_MMC_SDHCI_ESDHC_IMX=y
+CONFIG_MXC_IPU=y
+CONFIG_MXC_IPU_V3_PRE=y
+CONFIG_MXC_GPU_VIV=y
+CONFIG_MXC_SIM=y
+CONFIG_MXC_MIPI_CSI2=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_ONESHOT=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_BACKLIGHT=y
+CONFIG_LEDS_TRIGGER_GPIO=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_INTF_DEV_UIE_EMUL=y
+CONFIG_RTC_DRV_EM3027=y
+CONFIG_RTC_DRV_MC13XXX=y
+CONFIG_RTC_DRV_MXC=y
+CONFIG_RTC_DRV_SNVS=y
+CONFIG_DMADEVICES=y
+CONFIG_MXC_PXP_V2=y
+CONFIG_MXC_PXP_V3=y
+CONFIG_IMX_SDMA=y
+CONFIG_MXS_DMA=y
+CONFIG_STAGING=y
+CONFIG_STAGING_MEDIA=y
+# CONFIG_IOMMU_SUPPORT is not set
+# CONFIG_IMX_RPMSG_PINGPONG is not set
+# CONFIG_IMX_RPMSG_TTY is not set
+CONFIG_IIO=y
+CONFIG_VF610_ADC=y
+CONFIG_PWM=y
+CONFIG_PWM_IMX=y
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_FS_POSIX_ACL=y
+CONFIG_EXT4_FS_SECURITY=y
+CONFIG_QUOTA=y
+CONFIG_QUOTA_NETLINK_INTERFACE=y
+# CONFIG_PRINT_QUOTA_WARNING is not set
+CONFIG_AUTOFS4_FS=y
+CONFIG_FUSE_FS=y
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=y
+CONFIG_TMPFS=y
+CONFIG_TMPFS_XATTR=y
+CONFIG_JFFS2_FS=y
+CONFIG_UBIFS_FS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+CONFIG_ROOT_NFS=y
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_ASCII=y
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_UTF8=y
+CONFIG_DYNAMIC_DEBUG=y
+CONFIG_DEBUG_FS=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_RCU_CPU_STALL_INFO is not set
+# CONFIG_FTRACE is not set
+CONFIG_CORESIGHT=y
+CONFIG_CORESIGHT_LINK_AND_SINK_TMC=y
+CONFIG_CORESIGHT_SINK_TPIU=y
+CONFIG_CORESIGHT_SINK_ETBV10=y
+CONFIG_CORESIGHT_SOURCE_ETM3X=y
+CONFIG_SECURITYFS=y
+CONFIG_CRYPTO_USER=y
+CONFIG_CRYPTO_TEST=m
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_CTS=y
+CONFIG_CRYPTO_LRW=y
+CONFIG_CRYPTO_XTS=y
+CONFIG_CRYPTO_MD4=y
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_MICHAEL_MIC=y
+CONFIG_CRYPTO_RMD128=y
+CONFIG_CRYPTO_RMD160=y
+CONFIG_CRYPTO_RMD256=y
+CONFIG_CRYPTO_RMD320=y
+CONFIG_CRYPTO_SHA1=y
+CONFIG_CRYPTO_SHA512=y
+CONFIG_CRYPTO_TGR192=y
+CONFIG_CRYPTO_WP512=y
+CONFIG_CRYPTO_BLOWFISH=y
+CONFIG_CRYPTO_CAMELLIA=y
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_TWOFISH=y
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+CONFIG_CRYPTO_DEV_FSL_CAAM=y
+CONFIG_CRYPTO_DEV_FSL_CAAM_SM=y
+CONFIG_CRYPTO_DEV_FSL_CAAM_SM_TEST=y
+CONFIG_CRYPTO_DEV_FSL_CAAM_SECVIO=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC_T10DIF=y
+CONFIG_LIBCRC32C=m
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0001-ARM-dts-update-support-for-cm-fx6.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0001-ARM-dts-update-support-for-cm-fx6.patch
new file mode 100644
index 0000000..8913532
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0001-ARM-dts-update-support-for-cm-fx6.patch
@@ -0,0 +1,1497 @@
+From 2b565d72ad45c234444538ceeb4d00378bf1833a Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Tue, 7 Jun 2016 10:32:15 +0300
+Subject: [PATCH 01/18] ARM: dts: update support for cm-fx6.
+
+Update the cm-fx6 support.
+Poeted the dts files from the 3.10.17 release.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/Makefile             |   8 +-
+ arch/arm/boot/dts/imx6dl-cm-fx6.dts    |  21 ++
+ arch/arm/boot/dts/imx6dl-sbc-fx6.dts   |  23 ++
+ arch/arm/boot/dts/imx6dl-sbc-fx6m.dts  |  23 ++
+ arch/arm/boot/dts/imx6q-cm-fx6.dts     |  90 +----
+ arch/arm/boot/dts/imx6q-cm-fx6.dtsi    |  95 +++++
+ arch/arm/boot/dts/imx6q-sbc-fx6.dts    |  23 ++
+ arch/arm/boot/dts/imx6q-sbc-fx6m.dts   |  24 ++
+ arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi  | 664 +++++++++++++++++++++++++++++++++
+ arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi  | 155 ++++++++
+ arch/arm/boot/dts/imx6qdl-sb-fx6m.dtsi | 135 +++++++
+ arch/arm/boot/dts/imx6qdl-sb-fx6x.dtsi | 110 ++++++
+ 12 files changed, 1282 insertions(+), 89 deletions(-)
+ create mode 100644 arch/arm/boot/dts/imx6dl-cm-fx6.dts
+ create mode 100644 arch/arm/boot/dts/imx6dl-sbc-fx6.dts
+ create mode 100644 arch/arm/boot/dts/imx6dl-sbc-fx6m.dts
+ create mode 100644 arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+ create mode 100644 arch/arm/boot/dts/imx6q-sbc-fx6.dts
+ create mode 100644 arch/arm/boot/dts/imx6q-sbc-fx6m.dts
+ create mode 100644 arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
+ create mode 100644 arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi
+ create mode 100644 arch/arm/boot/dts/imx6qdl-sb-fx6m.dtsi
+ create mode 100644 arch/arm/boot/dts/imx6qdl-sb-fx6x.dtsi
+
+diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
+index d4f292a..8ae2a7e 100644
+--- a/arch/arm/boot/dts/Makefile
++++ b/arch/arm/boot/dts/Makefile
+@@ -330,7 +330,13 @@ dtb-$(CONFIG_SOC_IMX6Q) += \
+ 	imx6q-tx6q-1110.dtb \
+ 	imx6q-udoo.dtb \
+ 	imx6q-wandboard.dtb \
+-	imx6q-wandboard-revb1.dtb
++	imx6q-wandboard-revb1.dtb \
++	imx6dl-cm-fx6.dtb \
++	imx6dl-sbc-fx6.dtb \
++	imx6dl-sbc-fx6m.dtb \
++	imx6q-cm-fx6.dtb \
++	imx6q-sbc-fx6.dtb \
++	imx6q-sbc-fx6m.dtb
+ dtb-$(CONFIG_SOC_IMX6SL) += \
+ 	imx6sl-evk.dtb \
+ 	imx6sl-evk-btwifi.dtb \
+diff --git a/arch/arm/boot/dts/imx6dl-cm-fx6.dts b/arch/arm/boot/dts/imx6dl-cm-fx6.dts
+new file mode 100644
+index 0000000..d33d14c
+--- /dev/null
++++ b/arch/arm/boot/dts/imx6dl-cm-fx6.dts
+@@ -0,0 +1,21 @@
++/*
++ * Copyright 2015 CompuLab Ltd.
++ *
++ * Author: Valentin Raevsky <valentin at compulab.co.il>
++ *
++ * The code contained herein is licensed under the GNU General Public
++ * License. You may obtain a copy of the GNU General Public License
++ * Version 2 or later at the following locations:
++ *
++ * http://www.opensource.org/licenses/gpl-license.html
++ * http://www.gnu.org/copyleft/gpl.html
++ */
++
++/dts-v1/;
++#include "imx6dl.dtsi"
++#include "imx6qdl-cm-fx6.dtsi"
++
++/ {
++	model = "CompuLab CM-FX6";
++	compatible = "compulab,cm-fx6", "fsl,imx6dl";
++};
+diff --git a/arch/arm/boot/dts/imx6dl-sbc-fx6.dts b/arch/arm/boot/dts/imx6dl-sbc-fx6.dts
+new file mode 100644
+index 0000000..723b654
+--- /dev/null
++++ b/arch/arm/boot/dts/imx6dl-sbc-fx6.dts
+@@ -0,0 +1,23 @@
++/*
++* Copyright 2015 CompuLab Ltd.
++*
++* Author: Valentin Raevsky <valentin at compulab.co.il>
++*
++* The code contained herein is licensed under the GNU General Public
++* License. You may obtain a copy of the GNU General Public License
++* Version 2 or later at the following locations:
++*
++* http://www.opensource.org/licenses/gpl-license.html
++* http://www.gnu.org/copyleft/gpl.html
++*/
++
++/dts-v1/;
++#include "imx6dl.dtsi"
++#include "imx6qdl-cm-fx6.dtsi"
++#include "imx6qdl-sb-fx6x.dtsi"
++#include "imx6qdl-sb-fx6.dtsi"
++
++/ {
++	model = "CompuLab CM-FX6 on SBC-FX6";
++	compatible = "compulab,cm-fx6", "compulab,sbc-fx6", "fsl,imx6dl";
++};
+diff --git a/arch/arm/boot/dts/imx6dl-sbc-fx6m.dts b/arch/arm/boot/dts/imx6dl-sbc-fx6m.dts
+new file mode 100644
+index 0000000..f66b177
+--- /dev/null
++++ b/arch/arm/boot/dts/imx6dl-sbc-fx6m.dts
+@@ -0,0 +1,23 @@
++/*
++* Copyright 2015 CompuLab Ltd.
++*
++* Author: Valentin Raevsky <valentin at compulab.co.il>
++*
++* The code contained herein is licensed under the GNU General Public
++* License. You may obtain a copy of the GNU General Public License
++* Version 2 or later at the following locations:
++*
++* http://www.opensource.org/licenses/gpl-license.html
++* http://www.gnu.org/copyleft/gpl.html
++*/
++
++/dts-v1/;
++#include "imx6dl.dtsi"
++#include "imx6qdl-cm-fx6.dtsi"
++#include "imx6qdl-sb-fx6x.dtsi"
++#include "imx6qdl-sb-fx6m.dtsi"
++
++/ {
++	model = "CompuLab CM-FX6 on SBC-FX6m";	
++	compatible = "compulab,cm-fx6", "compulab,sbc-fx6m", "fsl,imx6dl";
++};
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+index 99b46f8..14c2d6a 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+@@ -1,5 +1,5 @@
+ /*
+- * Copyright 2013 CompuLab Ltd.
++ * Copyright 2014 CompuLab Ltd.
+  *
+  * Author: Valentin Raevsky <valentin at compulab.co.il>
+  *
+@@ -13,95 +13,9 @@
+ 
+ /dts-v1/;
+ #include "imx6q.dtsi"
++#include "imx6q-cm-fx6.dtsi"
+ 
+ / {
+ 	model = "CompuLab CM-FX6";
+ 	compatible = "compulab,cm-fx6", "fsl,imx6q";
+-
+-	memory {
+-		reg = <0x10000000 0x80000000>;
+-	};
+-
+-	leds {
+-		compatible = "gpio-leds";
+-
+-		heartbeat-led {
+-			label = "Heartbeat";
+-			gpios = <&gpio2 31 0>;
+-			linux,default-trigger = "heartbeat";
+-		};
+-	};
+-};
+-
+-&fec {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_enet>;
+-	phy-mode = "rgmii";
+-	status = "okay";
+-};
+-
+-&gpmi {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_gpmi_nand>;
+-	status = "okay";
+-};
+-
+-&iomuxc {
+-	imx6q-cm-fx6 {
+-		pinctrl_enet: enetgrp {
+-			fsl,pins = <
+-				MX6QDL_PAD_RGMII_RXC__RGMII_RXC		0x1b0b0
+-				MX6QDL_PAD_RGMII_RD0__RGMII_RD0		0x1b0b0
+-				MX6QDL_PAD_RGMII_RD1__RGMII_RD1		0x1b0b0
+-				MX6QDL_PAD_RGMII_RD2__RGMII_RD2		0x1b0b0
+-				MX6QDL_PAD_RGMII_RD3__RGMII_RD3		0x1b0b0
+-				MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL	0x1b0b0
+-				MX6QDL_PAD_RGMII_TXC__RGMII_TXC		0x1b0b0
+-				MX6QDL_PAD_RGMII_TD0__RGMII_TD0		0x1b0b0
+-				MX6QDL_PAD_RGMII_TD1__RGMII_TD1		0x1b0b0
+-				MX6QDL_PAD_RGMII_TD2__RGMII_TD2		0x1b0b0
+-				MX6QDL_PAD_RGMII_TD3__RGMII_TD3		0x1b0b0
+-				MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL	0x1b0b0
+-				MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK	0x1b0b0
+-				MX6QDL_PAD_ENET_MDIO__ENET_MDIO		0x1b0b0
+-				MX6QDL_PAD_ENET_MDC__ENET_MDC		0x1b0b0
+-				MX6QDL_PAD_GPIO_16__ENET_REF_CLK	0x4001b0a8
+-			>;
+-		};
+-
+-		pinctrl_gpmi_nand: gpminandgrp {
+-			fsl,pins = <
+-				MX6QDL_PAD_NANDF_CLE__NAND_CLE		0xb0b1
+-				MX6QDL_PAD_NANDF_ALE__NAND_ALE		0xb0b1
+-				MX6QDL_PAD_NANDF_WP_B__NAND_WP_B	0xb0b1
+-				MX6QDL_PAD_NANDF_RB0__NAND_READY_B	0xb000
+-				MX6QDL_PAD_NANDF_CS0__NAND_CE0_B	0xb0b1
+-				MX6QDL_PAD_NANDF_CS1__NAND_CE1_B	0xb0b1
+-				MX6QDL_PAD_SD4_CMD__NAND_RE_B		0xb0b1
+-				MX6QDL_PAD_SD4_CLK__NAND_WE_B		0xb0b1
+-				MX6QDL_PAD_NANDF_D0__NAND_DATA00	0xb0b1
+-				MX6QDL_PAD_NANDF_D1__NAND_DATA01	0xb0b1
+-				MX6QDL_PAD_NANDF_D2__NAND_DATA02	0xb0b1
+-				MX6QDL_PAD_NANDF_D3__NAND_DATA03	0xb0b1
+-				MX6QDL_PAD_NANDF_D4__NAND_DATA04	0xb0b1
+-				MX6QDL_PAD_NANDF_D5__NAND_DATA05	0xb0b1
+-				MX6QDL_PAD_NANDF_D6__NAND_DATA06	0xb0b1
+-				MX6QDL_PAD_NANDF_D7__NAND_DATA07	0xb0b1
+-				MX6QDL_PAD_SD4_DAT0__NAND_DQS		0x00b1
+-			>;
+-		};
+-
+-		pinctrl_uart4: uart4grp {
+-			fsl,pins = <
+-				MX6QDL_PAD_KEY_COL0__UART4_TX_DATA	0x1b0b1
+-				MX6QDL_PAD_KEY_ROW0__UART4_RX_DATA	0x1b0b1
+-			>;
+-		};
+-	};
+-};
+-
+-&uart4 {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_uart4>;
+-	status = "okay";
+ };
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dtsi b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+new file mode 100644
+index 0000000..3a10e5e
+--- /dev/null
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+@@ -0,0 +1,95 @@
++/*
++ * Copyright 2014 CompuLab Ltd.
++ *
++ * Author: Valentin Raevsky <valentin at compulab.co.il>
++ *
++ * The code contained herein is licensed under the GNU General Public
++ * License. You may obtain a copy of the GNU General Public License
++ * Version 2 or later at the following locations:
++ *
++ * http://www.opensource.org/licenses/gpl-license.html
++ * http://www.gnu.org/copyleft/gpl.html
++ */
++
++#include "imx6qdl-cm-fx6.dtsi"
++
++/ {
++	regulators {
++		compatible = "simple-bus";
++		#address-cells = <1>;
++		#size-cells = <0>;
++
++		reg_sata_ldo_en: sata_ldo_en {
++			compatible = "regulator-fixed";
++			regulator-name = "cm_fx6_sata_ldo_en";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			gpio = <&gpio2 16 0>;
++			startup-delay-us = <100>;
++			enable-active-high;
++		};
++
++		reg_sata_phy_slp: sata_phy_slp {
++			compatible = "regulator-fixed";
++			regulator-name = "cm_fx6_sata_phy_slp";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			gpio = <&gpio3 23 0>;
++			startup-delay-us = <100>;
++			enable-active-high;
++			vin-supply = <&reg_sata_ldo_en>;
++		};
++
++		reg_sata_nrstdly: sata_nrstdly {
++			compatible = "regulator-fixed";
++			regulator-name = "cm_fx6_sata_nrstdly";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			gpio = <&gpio6 6 0>;
++			startup-delay-us = <100>;
++			enable-active-high;
++			vin-supply = <&reg_sata_phy_slp>;
++		};
++
++		reg_sata_pwren: sata_pwren {
++			compatible = "regulator-fixed";
++			regulator-name = "cm_fx6_sata_pwren";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			gpio = <&gpio1 28 0>;
++			startup-delay-us = <100>;
++			enable-active-high;
++			vin-supply = <&reg_sata_nrstdly>;
++		};
++
++		reg_sata_nstandby1: sata_nstandby1 {
++			compatible = "regulator-fixed";
++			regulator-name = "cm_fx6_sata_nstandby1";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			gpio = <&gpio3 20 0>;
++			startup-delay-us = <100>;
++			enable-active-high;
++			vin-supply = <&reg_sata_pwren>;
++		};
++
++		reg_sata_nstandby2: sata_nstandby2 {
++			compatible = "regulator-fixed";
++			regulator-name = "cm_fx6_sata_nstandby2";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			gpio = <&gpio5 2 0>;
++			startup-delay-us = <100>;
++			enable-active-high;
++			regulator-boot-on;
++			vin-supply = <&reg_sata_nstandby1>;
++		};
++
++	};
++
++};
++
++/* sata */
++&sata {
++	status = "okay";
++};
+diff --git a/arch/arm/boot/dts/imx6q-sbc-fx6.dts b/arch/arm/boot/dts/imx6q-sbc-fx6.dts
+new file mode 100644
+index 0000000..1234fb3
+--- /dev/null
++++ b/arch/arm/boot/dts/imx6q-sbc-fx6.dts
+@@ -0,0 +1,23 @@
++/*
++* Copyright 2014 CompuLab Ltd.
++*
++* Author: Valentin Raevsky <valentin at compulab.co.il>
++*
++* The code contained herein is licensed under the GNU General Public
++* License. You may obtain a copy of the GNU General Public License
++* Version 2 or later at the following locations:
++*
++* http://www.opensource.org/licenses/gpl-license.html
++* http://www.gnu.org/copyleft/gpl.html
++*/
++
++/dts-v1/;
++#include "imx6q.dtsi"
++#include "imx6q-cm-fx6.dtsi"
++#include "imx6qdl-sb-fx6x.dtsi"
++#include "imx6qdl-sb-fx6.dtsi"
++
++/ {
++	model = "CompuLab CM-FX6 on SBC-FX6";
++	compatible = "compulab,cm-fx6", "compulab,sbc-fx6", "fsl,imx6q";
++};
+diff --git a/arch/arm/boot/dts/imx6q-sbc-fx6m.dts b/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
+new file mode 100644
+index 0000000..7be1a4f
+--- /dev/null
++++ b/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
+@@ -0,0 +1,24 @@
++/*
++* Copyright 2014 CompuLab Ltd.
++*
++* Author: Valentin Raevsky <valentin at compulab.co.il>
++*
++* The code contained herein is licensed under the GNU General Public
++* License. You may obtain a copy of the GNU General Public License
++* Version 2 or later at the following locations:
++*
++* http://www.opensource.org/licenses/gpl-license.html
++* http://www.gnu.org/copyleft/gpl.html
++*/
++
++/dts-v1/;
++#include "imx6q.dtsi"
++#include "imx6q-cm-fx6.dtsi"
++#include "imx6qdl-sb-fx6x.dtsi"
++#include "imx6qdl-sb-fx6m.dtsi"
++
++/ {
++	model = "CompuLab CM-FX6 on SBC-FX6m";	
++	compatible = "compulab,cm-fx6", "compulab,sbc-fx6m", "fsl,imx6q";
++};
++
+diff --git a/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi b/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
+new file mode 100644
+index 0000000..451ebaca
+--- /dev/null
++++ b/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
+@@ -0,0 +1,664 @@
++/*
++ * Copyright 2014 CompuLab Ltd.
++ *
++ * Author: Valentin Raevsky <valentin at compulab.co.il>
++ *
++ * The code contained herein is licensed under the GNU General Public
++ * License. You may obtain a copy of the GNU General Public License
++ * Version 2 or later at the following locations:
++ *
++ * http://www.opensource.org/licenses/gpl-license.html
++ * http://www.gnu.org/copyleft/gpl.html
++ */
++
++#define MX6QDL_GPR1	0x04 0x04 0x000 0x0 0x0
++#define MX6QDL_GPR6	0x18 0x18 0x000 0x0 0x0
++#define MX6QDL_GPR7	0x1c 0x1c 0x000 0x0 0x0
++
++/ {
++	memory {
++		reg = <0x10000000 0x20000000>;
++	};
++
++	leds {
++		compatible = "gpio-leds";
++		heartbeat-led {
++			label = "Heartbeat";
++			gpios = <&gpio2 31 0>;
++			linux,default-trigger = "heartbeat";
++		};
++	};
++
++	regulators {
++		compatible = "simple-bus";
++		#address-cells = <1>;
++		#size-cells = <0>;
++
++		/* regulator for usb otg */
++		reg_usb_otg_vbus: usb_otg_vbus {
++			compatible = "regulator-fixed";
++			regulator-name = "usb_otg_vbus";
++			regulator-min-microvolt = <5000000>;
++			regulator-max-microvolt = <5000000>;
++			gpio = <&gpio3 22 0>;
++			enable-active-high;
++		};
++
++		/* regulator1 for pcie power-on-gpio */
++		pcie_power_on_gpio: regulator-pcie-power-on-gpio {
++			compatible = "regulator-fixed";
++			regulator-name = "regulator-pcie-power-on-gpio";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			gpio = <&gpio2 24 0>;
++			enable-active-high;
++		};
++
++		/* regulator for usb hub1 */
++		reg_usb_h1_vbus: usb_h1_vbus {
++			compatible = "regulator-fixed";
++			regulator-name = "usb_h1_vbus";
++			regulator-min-microvolt = <5000000>;
++			regulator-max-microvolt = <5000000>;
++			gpio = <&gpio7 8 0>;
++			enable-active-high;
++		};
++
++		/* regulator1 for wifi/bt */
++		awnh387_npoweron: regulator-awnh387-npoweron {
++			compatible = "regulator-fixed";
++			regulator-name = "regulator-awnh387-npoweron";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			gpio = <&gpio7 12 0>;
++			enable-active-high;
++		};
++
++		/* regulator2 for wifi/bt */
++		awnh387_wifi_nreset: regulator-awnh387-wifi-nreset {
++			compatible = "regulator-fixed";
++			regulator-name = "regulator-awnh387-wifi-nreset";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			gpio = <&gpio6 16 0>;
++			startup-delay-us = <10000>;
++		};
++
++		tsc2046reg: tsc2046-reg {
++			compatible = "regulator-fixed";
++			regulator-name = "tsc2046-reg";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++		};
++
++	};
++
++	pu_dummy: pudummy_reg {
++		compatible = "fsl,imx6-dummy-pureg"; /* only used in ldo-bypass */
++	};
++
++	aliases {
++		mxcfb0 = &mxcfb1;
++		mxcfb1 = &mxcfb2;
++		mxcfb2 = &mxcfb3;
++		mxcfb3 = &mxcfb4;
++	};
++
++	sound {
++		compatible = "fsl,imx-audio-wm8731";
++		model = "wm8731-audio";
++		ssi-controller = <&ssi2>;
++		src-port = <2>;
++		ext-port = <4>;
++		audio-codec = <&codec>;
++		audio-routing = "LOUT", "ROUT", "LLINEIN", "RLINEIN";
++	};
++
++	sound-hdmi {
++		compatible = "fsl,imx-audio-hdmi";
++		model = "imx-audio-hdmi";
++		hdmi-controller = <&hdmi_audio>;
++	};
++
++	sound-spdif {
++		compatible = "fsl,imx-audio-spdif";
++		model = "imx-spdif";
++		spdif-controller = <&spdif>;
++		spdif-out;
++		spdif-in;
++	};
++
++	mxcfb1: fb at 0 {
++		compatible = "fsl,mxc_sdc_fb";
++		disp_dev = "lcd";
++		interface_pix_fmt = "RGB24";
++		mode_str ="1920x1080M at 60";
++		default_bpp = <32>;
++		int_clk = <0>;
++		late_init = <0>;
++		status = "disabled";
++	};
++
++	mxcfb2: fb at 1 {
++		compatible = "fsl,mxc_sdc_fb";
++		disp_dev = "hdmi";
++		interface_pix_fmt = "RGB24";
++		mode_str ="1920x1080M at 60";
++		default_bpp = <32>;
++		int_clk = <0>;
++		late_init = <0>;
++		status = "disabled";
++	};
++
++	mxcfb3: fb at 2 {
++		compatible = "fsl,mxc_sdc_fb";
++		disp_dev = "ldb";
++		interface_pix_fmt = "RGB666";
++		mode_str ="1366x768M-18 at 60";
++		default_bpp = <16>;
++		int_clk = <0>;
++		late_init = <0>;
++		status = "disabled";
++	};
++
++	mxcfb4: fb at 3 {
++		compatible = "fsl,mxc_sdc_fb";
++		disp_dev = "ldb";
++		interface_pix_fmt = "RGB666";
++		mode_str ="1280x800M-18 at 60";
++		default_bpp = <16>;
++		int_clk = <0>;
++		late_init = <0>;
++		status = "disabled";
++	};
++
++	ipu1di0_disp: ipu1 at 0 {
++		compatible = "fsl,lcd";
++		ipu_id = <0>;
++		disp_id = <0>;
++		default_ifmt = "RGB24";
++		pinctrl-names = "default";
++		pinctrl-0 = <&pinctrl_ipu1_di0>;
++		status = "okay";
++	};
++
++	v4l2_cap {
++		compatible = "fsl,imx6q-v4l2-capture";
++		ipu_id = <0>;
++		csi_id = <0>;
++		mclk_source = <0>;
++		status = "okay";
++	};
++
++	v4l2_out {
++		compatible = "fsl,mxc_v4l2_output";
++		status = "okay";
++	};
++};
++
++&iomuxc {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_hog>;
++
++	hog {
++		pinctrl_hog: hoggrp {
++			fsl,pins = <
++				MX6QDL_GPR1 0x48400005
++				/* ipu3 QoS */
++				MX6QDL_GPR6 0x007f007f
++				MX6QDL_GPR7 0x007f007f
++				/* SATA PWR */
++				MX6QDL_PAD_ENET_TX_EN__GPIO1_IO28 0x80000000
++				MX6QDL_PAD_EIM_A22__GPIO2_IO16 0x80000000
++				MX6QDL_PAD_EIM_D20__GPIO3_IO20 0x80000000
++				MX6QDL_PAD_EIM_A25__GPIO5_IO02 0x80000000
++				/* SATA CTRL */
++				MX6QDL_PAD_ENET_TXD0__GPIO1_IO30 0x80000000
++				MX6QDL_PAD_EIM_D29__GPIO3_IO29 0x80000000
++				MX6QDL_PAD_EIM_A23__GPIO6_IO06 0x80000000
++				MX6QDL_PAD_EIM_D23__GPIO3_IO23 0x80000000
++				/* POWER_BUTTON */
++				MX6QDL_PAD_ENET_TXD1__GPIO1_IO29 0x80000000
++				/* PHY_RST */
++				MX6QDL_PAD_SD4_DAT0__GPIO2_IO08	0x80000000
++			>;
++		};
++	};
++
++	imx6q-cm-fx6 {
++		/* pins for eth0 */
++		pinctrl_enet: enetgrp {
++			fsl,pins = <
++				MX6QDL_PAD_RGMII_RXC__RGMII_RXC      0x1b0b0
++				MX6QDL_PAD_RGMII_RD0__RGMII_RD0      0x1b0b0
++				MX6QDL_PAD_RGMII_RD1__RGMII_RD1      0x1b0b0
++				MX6QDL_PAD_RGMII_RD2__RGMII_RD2      0x1b0b0
++				MX6QDL_PAD_RGMII_RD3__RGMII_RD3      0x1b0b0
++				MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL   0x1b0b0
++				MX6QDL_PAD_RGMII_TXC__RGMII_TXC      0x1b0b0
++				MX6QDL_PAD_RGMII_TD0__RGMII_TD0      0x1b0b0
++				MX6QDL_PAD_RGMII_TD1__RGMII_TD1      0x1b0b0
++				MX6QDL_PAD_RGMII_TD2__RGMII_TD2      0x1b0b0
++				MX6QDL_PAD_RGMII_TD3__RGMII_TD3      0x1b0b0
++				MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL   0x1b0b0
++				MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK   0x1b0b0
++				MX6QDL_PAD_ENET_MDIO__ENET_MDIO      0x1b0b0
++				MX6QDL_PAD_ENET_MDC__ENET_MDC      0x1b0b0
++			>;
++		};
++
++		pinctrl_ipu1_di0: ipu1grp-di0 {
++			fsl,pins = <
++				MX6QDL_PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK 0x38
++				MX6QDL_PAD_DI0_PIN15__IPU1_DI0_PIN15       0x38
++				MX6QDL_PAD_DI0_PIN2__IPU1_DI0_PIN02        0x38
++				MX6QDL_PAD_DI0_PIN3__IPU1_DI0_PIN03        0x38
++				MX6QDL_PAD_DI0_PIN4__IPU1_DI0_PIN04        0x80000028
++				MX6QDL_PAD_DISP0_DAT0__IPU1_DISP0_DATA00   0x38
++				MX6QDL_PAD_DISP0_DAT1__IPU1_DISP0_DATA01   0x38
++				MX6QDL_PAD_DISP0_DAT2__IPU1_DISP0_DATA02   0x38
++				MX6QDL_PAD_DISP0_DAT3__IPU1_DISP0_DATA03   0x38
++				MX6QDL_PAD_DISP0_DAT4__IPU1_DISP0_DATA04   0x38
++				MX6QDL_PAD_DISP0_DAT5__IPU1_DISP0_DATA05   0x38
++				MX6QDL_PAD_DISP0_DAT6__IPU1_DISP0_DATA06   0x38
++				MX6QDL_PAD_DISP0_DAT7__IPU1_DISP0_DATA07   0x38
++				MX6QDL_PAD_DISP0_DAT8__IPU1_DISP0_DATA08   0x38
++				MX6QDL_PAD_DISP0_DAT9__IPU1_DISP0_DATA09   0x38
++				MX6QDL_PAD_DISP0_DAT10__IPU1_DISP0_DATA10  0x38
++				MX6QDL_PAD_DISP0_DAT11__IPU1_DISP0_DATA11  0x38
++				MX6QDL_PAD_DISP0_DAT12__IPU1_DISP0_DATA12  0x38
++				MX6QDL_PAD_DISP0_DAT13__IPU1_DISP0_DATA13  0x38
++				MX6QDL_PAD_DISP0_DAT14__IPU1_DISP0_DATA14  0x38
++				MX6QDL_PAD_DISP0_DAT15__IPU1_DISP0_DATA15  0x38
++				MX6QDL_PAD_DISP0_DAT16__IPU1_DISP0_DATA16  0x38
++				MX6QDL_PAD_DISP0_DAT17__IPU1_DISP0_DATA17  0x38
++				MX6QDL_PAD_DISP0_DAT18__IPU1_DISP0_DATA18  0x38
++				MX6QDL_PAD_DISP0_DAT19__IPU1_DISP0_DATA19  0x38
++				MX6QDL_PAD_DISP0_DAT20__IPU1_DISP0_DATA20  0x38
++				MX6QDL_PAD_DISP0_DAT21__IPU1_DISP0_DATA21  0x38
++				MX6QDL_PAD_DISP0_DAT22__IPU1_DISP0_DATA22  0x38
++				MX6QDL_PAD_DISP0_DAT23__IPU1_DISP0_DATA23  0x38
++			>;
++		};
++
++		/* pins for spi */
++		pinctrl_ecspi1: ecspi1grp {
++			fsl,pins = <
++				MX6QDL_PAD_EIM_D16__ECSPI1_SCLK      0x100b1
++				MX6QDL_PAD_EIM_D17__ECSPI1_MISO      0x100b1
++				MX6QDL_PAD_EIM_D18__ECSPI1_MOSI      0x100b1
++				MX6QDL_PAD_EIM_EB2__GPIO2_IO30      0x100b1
++				MX6QDL_PAD_EIM_D19__GPIO3_IO19      0x100b1
++			>;
++		};
++
++		/* pins for nand */
++		pinctrl_gpmi_nand: gpminandgrp {
++			fsl,pins = <
++				MX6QDL_PAD_NANDF_CLE__NAND_CLE      0xb0b1
++				MX6QDL_PAD_NANDF_ALE__NAND_ALE      0xb0b1
++				MX6QDL_PAD_NANDF_WP_B__NAND_WP_B   0xb0b1
++				MX6QDL_PAD_NANDF_RB0__NAND_READY_B   0xb000
++				MX6QDL_PAD_NANDF_CS0__NAND_CE0_B   0xb0b1
++				MX6QDL_PAD_NANDF_CS1__NAND_CE1_B   0xb0b1
++				MX6QDL_PAD_SD4_CMD__NAND_RE_B      0xb0b1
++				MX6QDL_PAD_SD4_CLK__NAND_WE_B      0xb0b1
++				MX6QDL_PAD_NANDF_D0__NAND_DATA00   0xb0b1
++				MX6QDL_PAD_NANDF_D1__NAND_DATA01   0xb0b1
++				MX6QDL_PAD_NANDF_D2__NAND_DATA02   0xb0b1
++				MX6QDL_PAD_NANDF_D3__NAND_DATA03   0xb0b1
++				MX6QDL_PAD_NANDF_D4__NAND_DATA04   0xb0b1
++				MX6QDL_PAD_NANDF_D5__NAND_DATA05   0xb0b1
++				MX6QDL_PAD_NANDF_D6__NAND_DATA06   0xb0b1
++				MX6QDL_PAD_NANDF_D7__NAND_DATA07   0xb0b1
++			>;
++		};
++
++		pinctrl_hdmi_hdcp: hdmihdcpgrp {
++			fsl,pins = <
++				MX6QDL_PAD_KEY_COL3__HDMI_TX_DDC_SCL 0x4001b8b1
++				MX6QDL_PAD_KEY_ROW3__HDMI_TX_DDC_SDA 0x4001b8b1
++			>;
++		};
++
++		/* pins for i2c2 */
++		pinctrl_i2c2: i2c2grp {
++			fsl,pins = <
++				MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1
++				MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1
++			>;
++		};
++
++		/* pins for i2c3 */
++		pinctrl_i2c3: i2c3grp {
++			fsl,pins = <
++				MX6QDL_PAD_GPIO_3__I2C3_SCL 0x4001b8b1
++				MX6QDL_PAD_GPIO_6__I2C3_SDA 0x4001b8b1
++			>;
++		};
++
++		/* pins for console */
++		pinctrl_uart4: uart4grp {
++			fsl,pins = <
++				MX6QDL_PAD_KEY_COL0__UART4_TX_DATA   0x1b0b1
++				MX6QDL_PAD_KEY_ROW0__UART4_RX_DATA   0x1b0b1
++			>;
++		};
++
++		/* pins for usb hub1 */
++		pinctrl_usbh1: usbh1grp {
++			fsl,pins = <
++				MX6QDL_PAD_SD3_RST__GPIO7_IO08 0x80000000
++			>;
++		};
++
++		/* pins for usb otg */
++		pinctrl_usbotg: usbotggrp {
++			fsl,pins = <
++				MX6QDL_PAD_ENET_RX_ER__USB_OTG_ID 0x17059
++				MX6QDL_PAD_EIM_D22__GPIO3_IO22 0x80000000
++			>;
++		};
++
++		/* pins for wifi/bt */
++		pinctrl_usdhc1: usdhc1grp {
++			fsl,pins = <
++				MX6QDL_PAD_SD1_CMD__SD1_CMD    0x17071
++				MX6QDL_PAD_SD1_CLK__SD1_CLK    0x10071
++				MX6QDL_PAD_SD1_DAT0__SD1_DATA0 0x17071
++				MX6QDL_PAD_SD1_DAT1__SD1_DATA1 0x17071
++				MX6QDL_PAD_SD1_DAT2__SD1_DATA2 0x17071
++				MX6QDL_PAD_SD1_DAT3__SD1_DATA3 0x17071
++			>;
++		};
++
++		/* pins for wifi/bt */
++		pinctrl_mrvl1: mrvl1grp {
++			fsl,pins = <
++				/* WIFI_PWR_RST */
++				MX6QDL_PAD_GPIO_17__GPIO7_IO12	0x80000000
++				MX6QDL_PAD_NANDF_CS3__GPIO6_IO16 0x80000000
++			>;
++		};
++
++		/* pins for tsc2046 pendown */
++		pinctrl_tsc2046: tsc2046grp {
++			fsl,pins = <
++				 /* tsc2046 PENDOWN */
++				MX6QDL_PAD_SD4_DAT7__GPIO2_IO15 0x80000000
++			>;
++		};
++
++		/* pins for pcie */
++		pinctrl_pcie: pciegrp {
++			fsl,pins = <
++				MX6QDL_PAD_ENET_RXD1__GPIO1_IO26 0x80000000
++				MX6QDL_PAD_EIM_CS1__GPIO2_IO24 0x80000000
++			>;
++		};
++
++		/* pins for spdif */
++		pinctrl_spdif: spdifgrp {
++			fsl,pins = <
++				MX6QDL_PAD_GPIO_16__SPDIF_IN  0x1b0b0
++				MX6QDL_PAD_GPIO_19__SPDIF_OUT 0x1b0b0
++			>;
++		};
++
++		/* pins for audmux */
++		pinctrl_audmux: audmuxgrp {
++			fsl,pins = <
++				MX6QDL_PAD_SD2_CMD__AUD4_RXC   0x17059
++				MX6QDL_PAD_SD2_DAT0__AUD4_RXD  0x17059
++				MX6QDL_PAD_SD2_DAT3__AUD4_TXC  0x17059
++				MX6QDL_PAD_SD2_DAT2__AUD4_TXD  0x17059
++				MX6QDL_PAD_SD2_DAT1__AUD4_TXFS 0x17059
++				/* master mode pin */
++				MX6QDL_PAD_GPIO_5__CCM_CLKO1	0x17059
++			>;
++		};
++
++		pinctrl_flexcan1_1: flexcan1grp-1 {
++			fsl,pins = <
++				MX6QDL_PAD_KEY_ROW2__FLEXCAN1_RX 0x80000000
++				MX6QDL_PAD_KEY_COL2__FLEXCAN1_TX 0x80000000
++			>;
++                };
++
++		pinctrl_pwm3_1: pwm3grp-1 {
++			fsl,pins = <
++				MX6QDL_PAD_SD4_DAT1__PWM3_OUT 0x1b0b1
++			>;
++		};
++
++                pinctrl_ipu1_3: ipu1grp-3 { /* parallel port 16-bit */
++                        fsl,pins = <
++                                MX6QDL_PAD_CSI0_DAT4__IPU1_CSI0_DATA04   0x80000000
++                                MX6QDL_PAD_CSI0_DAT5__IPU1_CSI0_DATA05   0x80000000
++                                MX6QDL_PAD_CSI0_DAT6__IPU1_CSI0_DATA06   0x80000000
++                                MX6QDL_PAD_CSI0_DAT7__IPU1_CSI0_DATA07   0x80000000
++                                MX6QDL_PAD_CSI0_DAT8__IPU1_CSI0_DATA08   0x80000000
++                                MX6QDL_PAD_CSI0_DAT9__IPU1_CSI0_DATA09   0x80000000
++                                MX6QDL_PAD_CSI0_DAT10__IPU1_CSI0_DATA10  0x80000000
++                                MX6QDL_PAD_CSI0_DAT11__IPU1_CSI0_DATA11  0x80000000
++                                MX6QDL_PAD_CSI0_DAT12__IPU1_CSI0_DATA12  0x80000000
++                                MX6QDL_PAD_CSI0_DAT13__IPU1_CSI0_DATA13  0x80000000
++                                MX6QDL_PAD_CSI0_DAT14__IPU1_CSI0_DATA14  0x80000000
++                                MX6QDL_PAD_CSI0_DAT15__IPU1_CSI0_DATA15  0x80000000
++                                MX6QDL_PAD_CSI0_DAT16__IPU1_CSI0_DATA16  0x80000000
++                                MX6QDL_PAD_CSI0_DAT17__IPU1_CSI0_DATA17  0x80000000
++                                MX6QDL_PAD_CSI0_DAT18__IPU1_CSI0_DATA18  0x80000000
++                                MX6QDL_PAD_CSI0_DAT19__IPU1_CSI0_DATA19  0x80000000
++                                MX6QDL_PAD_CSI0_PIXCLK__IPU1_CSI0_PIXCLK 0x80000000
++                                MX6QDL_PAD_CSI0_MCLK__IPU1_CSI0_HSYNC    0x80000000
++                                MX6QDL_PAD_CSI0_VSYNC__IPU1_CSI0_VSYNC   0x80000000
++                        >;
++                };
++	};
++};
++
++&cpu0 {
++	operating-points = <
++		/* kHz    uV */
++		996000  1250000
++		852000  1250000
++		792000  1150000
++		396000  975000
++	>;
++	fsl,soc-operating-points = <
++		/* ARM kHz  SOC-PU uV */
++		996000        1250000
++		852000        1250000
++		792000        1175000
++		396000        1175000
++	>;
++};
++
++/* spi */
++&ecspi1 {
++	fsl,spi-num-chipselects = <2>;
++	cs-gpios = <&gpio2 30 0>, <&gpio3 19 0>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_ecspi1>;
++	status = "okay";
++
++	flash: m25p80 at 0 {
++		#address-cells = <1>;
++		#size-cells = <1>;
++		compatible = "st,m25px16", "st,m25p";
++		spi-max-frequency = <20000000>;
++		reg = <0>;
++
++		partition at 0 {
++			label = "uboot";
++			reg = <0x0 0xc0000>;
++		};
++
++		partition at c0000 {
++			label = "uboot environment";
++			reg = <0xc0000 0x40000>;
++		};
++
++		partition at 100000 {
++			label = "reserved";
++			reg = <0x100000 0x100000>;
++		};
++	};
++
++	/* touch controller */
++	touch:	tsc2046 at 1 {
++		pinctrl-names = "default";
++		pinctrl-0 = <&pinctrl_tsc2046>;
++
++		compatible = "ti,tsc2046";
++		vcc-supply = <&tsc2046reg>;
++
++		reg = <1>;	/* CS1 */
++		spi-max-frequency = <1500000>;
++
++		interrupt-parent = <&gpio2>;
++		interrupts = <15 0>;
++		pendown-gpio = <&gpio2 15 0>;
++
++		ti,x-min = /bits/ 16 <0x0>;
++		ti,x-max = /bits/ 16 <0x0fff>;
++		ti,y-min = /bits/ 16 <0x0>;
++		ti,y-max = /bits/ 16 <0x0fff>;
++
++		ti,x-plate-ohms = /bits/ 16 <180>;
++		ti,pressure-max = /bits/ 16 <255>;
++
++		ti,debounce-max = /bits/ 16 <30>;
++		ti,debounce-tol = /bits/ 16 <10>;
++		ti,debounce-rep = /bits/ 16 <1>;
++
++		linux,wakeup;
++	};
++};
++
++/* eth0 */
++&fec {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_enet>;
++	phy-mode = "rgmii";
++	phy-reset-gpios = <&gpio2 8 0>;
++	status = "okay";
++};
++
++/* nand */
++&gpmi {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_gpmi_nand>;
++	status = "okay";
++	depends = "fsl,imx6q-ecspi";
++
++	partition at 0 {
++		label = "linux";
++		reg = <0x0 0x800000>;
++	};
++
++	partition at 800000 {
++		label = "rootfs";
++		reg = < 0x800000 0x0>;
++	};
++};
++
++/* i2c3 */
++&i2c3 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_i2c3>;
++	status = "okay";
++
++	eeprom at 50 {
++		compatible = "at24,24c02";
++		reg = <0x50>;
++		pagesize = <16>;
++	};
++
++	codec: wm8731 at 1a {
++		compatible = "wlf,wm8731";
++		reg = <0x1a>;
++		clocks = <&clks 173>, <&clks 158>, <&clks 201>, <&clks 200>;
++		clock-names = "pll4", "imx-ssi.1", "cko", "cko2";
++		AVDD-supply = <&pu_dummy>;
++		HPVDD-supply = <&pu_dummy>;
++		DCVDD-supply = <&pu_dummy>;
++		DBVDD-supply = <&pu_dummy>;
++	};
++};
++
++&pcie {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_pcie>;
++	reset-gpio = <&gpio1 26 0>;
++	vdd-supply = <&pcie_power_on_gpio>;
++	status = "okay";
++};
++
++/* console */
++&uart4 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_uart4>;
++	status = "okay";
++};
++
++/* usb otg */
++&usbotg {
++	vbus-supply = <&reg_usb_otg_vbus>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usbotg>;
++	dr_mode = "otg";
++	status = "okay";
++};
++
++/* usb hub1 */
++&usbh1 {
++	vbus-supply = <&reg_usb_h1_vbus>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usbh1>;
++	status = "okay";
++};
++
++/* wifi/bt */
++&usdhc1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usdhc1>, <&pinctrl_mrvl1>;
++	non-removable;
++	vmmc-supply = <&awnh387_npoweron>;
++	vmmc_aux-supply = <&awnh387_wifi_nreset>;
++	status = "okay";
++};
++
++&ssi2 {
++	fsl,mode = "i2s-master";
++	status = "okay";
++};
++
++&hdmi_core {
++	ipu_id = <0>;
++	disp_id = <1>;
++	status = "okay";
++};
++
++&hdmi_video {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_hdmi_hdcp>;
++	fsl,hdcp;
++	status = "okay";
++};
++
++&hdmi_audio {
++	status = "okay";
++};
++
++&spdif {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_spdif>;
++	status = "okay";
++};
++
++&audmux {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_audmux>;
++	status = "okay";
++};
+diff --git a/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi b/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi
+new file mode 100644
+index 0000000..1bb2867
+--- /dev/null
++++ b/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi
+@@ -0,0 +1,155 @@
++/*
++ * Copyright 2014 CompuLab Ltd.
++ *
++ * Author: Valentin Raevsky <valentin at compulab.co.il>
++ *
++ * The code contained herein is licensed under the GNU General Public
++ * License. You may obtain a copy of the GNU General Public License
++ * Version 2 or later at the following locations:
++ *
++ * http://www.opensource.org/licenses/gpl-license.html
++ * http://www.gnu.org/copyleft/gpl.html
++ */
++
++#include <dt-bindings/gpio/gpio.h>
++#include <dt-bindings/input/input.h>
++
++/ {
++	backlight {
++		compatible = "pwm-backlight";
++		pwms = <&pwm3 0 5000000>;
++		brightness-levels = <0 4 8 16 32 64 128 255>;
++		default-brightness-level = <7>;
++	};
++
++	i2cmux {
++		compatible = "i2c-mux-gpio";
++		#address-cells = <1>;
++		#size-cells = <0>;
++		mux-gpios = <&gpio1 2 0>;
++		i2c-parent = <&i2c1>;
++
++		i2c at 0 {
++			reg = <0>;
++			#address-cells = <1>;
++			#size-cells = <0>;
++
++			pca9555:pca9555 at 26 {
++			      compatible = "nxp,pca9555";
++			      gpio-controller;
++			      #gpio-cells = <2>;
++			      reg = <0x26>;
++			};
++
++			hx8526 at 4a {
++			      compatible = "himax,himax_ts";
++			      reg = <0x4a>;
++			      gpio_intr = <&gpio1 4 0>;
++			};
++
++			eeprom at 50 {
++				compatible = "at24,24c02";
++				reg = <0x50>;
++				pagesize = <16>;
++			};
++
++			adv5150: adv5150 at 5c {
++				compatible = "ti,tvp5150";
++				reg = <0x5c>;
++				pinctrl-names = "default";
++				pinctrl-0 = <&pinctrl_ipu1_3>;
++				clocks = <&clks 201>;
++				clock-names = "csi_mclk";
++				csi_id = <0>;
++				mclk = <27000000>;
++				mclk_source = <0>;
++			};
++		};
++
++		i2c at 1 {
++			reg = <1>;
++			#address-cells = <1>;
++			#size-cells = <0>;
++
++			dvi_edid: edid at 50 {
++				compatible = "fsl,imx6-dvi-i2c";
++				reg = <0x50>;
++				status = "disabled";
++			};
++		};
++
++	};
++
++	reg_mipi_dsi_pwr_on_mode: mipi_dsi_pwr_on_mode {
++		compatible = "regulator-fixed";
++		regulator-name = "mipi_dsi_pwr_on_mode";
++		gpio = <&pca9555 12 0>;
++		enable-active-high;
++	};
++
++	mipi_dsi_reset: mipi-dsi-reset {
++		compatible = "gpio-reset";
++		reset-gpios = <&pca9555 11 GPIO_ACTIVE_LOW>;
++		reset-delay-us = <100>;
++		#reset-cells = <0>;
++	};
++};
++
++&i2c1 {
++	status = "okay";
++};
++
++&usdhc3 {
++	wp-gpios = <&gpio7 0 0>;
++	cd-gpios = <&gpio7 1 0>;
++	status = "okay";
++};
++
++&pwm3 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_pwm3_1>;
++	status = "okay";
++};
++
++&mxcfb1 {
++	mode_str ="KD050C-WVGA";
++	status = "okay";
++};
++
++&mxcfb2 {
++	status = "okay";
++};
++
++&mxcfb3 {
++	status = "okay";
++};
++
++&mxcfb4 {
++	status = "okay";
++};
++
++&ldb {
++	ipu_id = <1>;
++	disp_id = <0>;
++	ext_ref = <1>;
++	mode = "sep0";
++	sec_ipu_id = <1>;
++	sec_disp_id = <1>;
++	status = "okay";
++};
++
++&can1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_flexcan1_1>;
++	status = "okay";
++};
++
++&mipi_dsi {
++	dev_id = <0>;
++	disp_id = <0>;
++	lcd_panel = "TRULY-WVGA";
++	depends = "nxp,pca9555";
++	disp-power-on-supply = <&reg_mipi_dsi_pwr_on_mode>;
++	resets = <&mipi_dsi_reset>;
++	status = "disabled";
++};
+diff --git a/arch/arm/boot/dts/imx6qdl-sb-fx6m.dtsi b/arch/arm/boot/dts/imx6qdl-sb-fx6m.dtsi
+new file mode 100644
+index 0000000..7bf19c9
+--- /dev/null
++++ b/arch/arm/boot/dts/imx6qdl-sb-fx6m.dtsi
+@@ -0,0 +1,135 @@
++/*
++ * Copyright 2014 CompuLab Ltd.
++ *
++ * Author: Valentin Raevsky <valentin at compulab.co.il>
++ *
++ * The code contained herein is licensed under the GNU General Public
++ * License. You may obtain a copy of the GNU General Public License
++ * Version 2 or later at the following locations:
++ *
++ * http://www.opensource.org/licenses/gpl-license.html
++ * http://www.gnu.org/copyleft/gpl.html
++ */
++
++/ {
++	iomux_uart2: pinmux at 20E0924 {
++		compatible = "pinctrl-single";
++		reg = <0x20E0000 0x924>;	/* Single register */
++		#address-cells = <1>;
++		#size-cells = <0>;
++		pinctrl-single,register-width = <32>;
++		pinctrl-single,function-mask = <0x4>;
++	};
++
++	eth at pcie {
++		compatible = "intel,i211";
++		local-mac-address = [FF FF FF FF FF FF];
++		status = "okay";
++	};
++
++	gpio-keys {
++		compatible = "gpio-keys";
++		power {
++			label = "Power Button";
++			gpios = <&gpio1 29 1>;
++			linux,code = <116>; /* KEY_POWER */
++			gpio-key,wakeup;
++		};
++	};
++
++	i2cmux {
++		compatible = "i2c-mux-gpio";
++		#address-cells = <1>;
++		#size-cells = <0>;
++		mux-gpios = <&gpio1 2 0>;
++		i2c-parent = <&i2c1>;
++
++		i2c at 0 {
++			reg = <0>;
++			#address-cells = <1>;
++			#size-cells = <0>;
++
++			eeprom at 50 {
++				compatible = "at24,24c02";
++				reg = <0x50>;
++				pagesize = <16>;
++			};
++
++			rtc at 56 {
++				compatible = "emmicro,em3027";
++				reg = <0x56>;
++			};
++		};
++
++		i2c at 1 {
++			reg = <1>;
++			#address-cells = <1>;
++			#size-cells = <0>;
++
++			dvi_edid: edid at 50 {
++				compatible = "fsl,imx6-dvi-i2c";
++				reg = <0x50>;
++				status = "disabled";
++			};
++		};
++	};
++};
++
++&iomuxc {
++	imx6q-sbc-fx6m {
++		/* pins for uart2 */
++		pinctrl_uart2: uart2grp {
++			fsl,pins = <
++				MX6QDL_PAD_GPIO_7__UART2_TX_DATA 0x1b0b1
++				MX6QDL_PAD_GPIO_8__UART2_RX_DATA 0x1b0b1
++				MX6QDL_PAD_SD4_DAT5__UART2_RTS_B 0x1b0b1
++				MX6QDL_PAD_SD4_DAT6__UART2_CTS_B 0x1b0b1
++		>;
++		};
++	};
++};
++
++&i2c1 {
++	status = "okay";
++};
++
++&usdhc3 {
++	non-removable;
++	status = "okay";
++};
++
++/* rear serial console */
++&uart2 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_uart2>;
++	fsl,uart-has-rtscts;
++	status = "okay";
++};
++
++&hdmi_core {
++	ipu_id = <1>;
++	disp_id = <0>;
++	status = "okay";
++};
++
++&ipu1di0_disp {
++	compatible = "fsl,dvi";
++	hp_gpio = <4>;
++	status = "okay";
++};
++
++&dvi_edid {
++	status = "okay";
++};
++
++&mxcfb1 {
++	disp_dev = "hdmi";
++	status = "okay";
++};
++
++&mxcfb2 {
++	disp_dev = "dvi";
++	mode_str ="1920x1080M at 50";
++	depends = "fsl,dvi";
++	status = "okay";
++};
+diff --git a/arch/arm/boot/dts/imx6qdl-sb-fx6x.dtsi b/arch/arm/boot/dts/imx6qdl-sb-fx6x.dtsi
+new file mode 100644
+index 0000000..f98a87d
+--- /dev/null
++++ b/arch/arm/boot/dts/imx6qdl-sb-fx6x.dtsi
+@@ -0,0 +1,110 @@
++/*
++ * Copyright 2014 CompuLab Ltd.
++ *
++ * Author: Valentin Raevsky <valentin at compulab.co.il>
++ *
++ * The code contained herein is licensed under the GNU General Public
++ * License. You may obtain a copy of the GNU General Public License
++ * Version 2 or later at the following locations:
++ *
++ * http://www.opensource.org/licenses/gpl-license.html
++ * http://www.gnu.org/copyleft/gpl.html
++ */
++
++/ {
++	regulators {
++		compatible = "simple-bus";
++		#address-cells = <1>;
++		#size-cells = <0>;
++
++		/* regulator for mmc */
++		reg_3p3v: 3p3v {
++			compatible = "regulator-fixed";
++			regulator-name = "3P3V";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			regulator-always-on;
++		};
++	};
++
++};
++
++&iomuxc {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_hog>, <&pinctrl_dvi0>;
++
++	imx6q-sb-fx6x {
++		/* pins for i2c1 */
++		pinctrl_i2c1: i2c1grp {
++			fsl,pins = <
++				MX6QDL_PAD_EIM_D21__I2C1_SCL 0x4001b8b1
++				MX6QDL_PAD_EIM_D28__I2C1_SDA 0x4001b8b1
++			>;
++		};
++
++		/* pins for mmc */
++		pinctrl_usdhc3: usdhc3grp {
++			fsl,pins = <
++				MX6QDL_PAD_SD3_CMD__SD3_CMD    0x17059
++				MX6QDL_PAD_SD3_CLK__SD3_CLK    0x10059
++				MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
++				MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
++				MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
++				MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
++				MX6QDL_PAD_SD3_DAT4__GPIO7_IO01 0x80000000
++				MX6QDL_PAD_SD3_DAT5__GPIO7_IO00 0x80000000
++			>;
++		};
++
++		pinctrl_usdhc3_100mhz: usdhc3grp-100mhz { /* 100Mhz */
++			fsl,pins = <
++				MX6QDL_PAD_SD3_CMD__SD3_CMD 0x170B9
++				MX6QDL_PAD_SD3_CLK__SD3_CLK 0x100B9
++				MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x170B9
++				MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x170B9
++				MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x170B9
++				MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x170B9
++			>;
++		};
++
++		pinctrl_usdhc3_200mhz: usdhc3grp-200mhz { /* 200Mhz */
++			fsl,pins = <
++				MX6QDL_PAD_SD3_CMD__SD3_CMD 0x170F9
++				MX6QDL_PAD_SD3_CLK__SD3_CLK 0x100F9
++				MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x170F9
++				MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x170F9
++				MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x170F9
++				MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x170F9
++			>;
++		};
++
++		/* pins for dvi/ts */
++		pinctrl_dvi0: dvi0grp {
++			fsl,pins = <
++				/* DVI_DDC_SEL */
++				MX6QDL_PAD_GPIO_2__GPIO1_IO02 0x80000000
++				/* SB-FX6 Himax TS PENDOWN or SB-FX6m DVI HPD */
++				MX6QDL_PAD_GPIO_4__GPIO1_IO04 0x80000000
++			>;
++		};
++	};
++};
++
++/* i2c1 */
++&i2c1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_i2c1>;
++	status = "disabled";
++};
++
++/* mmc */
++&usdhc3 {
++	pinctrl-names = "default", "state_100mhz", "state_200mhz";
++	pinctrl-0 = <&pinctrl_usdhc3>;
++	pinctrl-1 = <&pinctrl_usdhc3_100mhz>;
++	pinctrl-2 = <&pinctrl_usdhc3_200mhz>;
++	no-1-8-v;
++	keep-power-in-suspend;
++	vmmc-supply = <&reg_3p3v>;
++	status = "disabled";
++};
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0002-ARM-i.MX6-cm-fx6-add-cm-fx6-platform-driver.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0002-ARM-i.MX6-cm-fx6-add-cm-fx6-platform-driver.patch
new file mode 100644
index 0000000..a74489f
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0002-ARM-i.MX6-cm-fx6-add-cm-fx6-platform-driver.patch
@@ -0,0 +1,173 @@
+From 6ce85069ce7ec7e91ff258668a0b45cec2a57b64 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Tue, 7 Jun 2016 10:35:37 +0300
+Subject: [PATCH 02/18] ARM: i.MX6: cm-fx6: add cm-fx6 platform driver.
+
+Add cm-fx6 platform driver.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/mach-imx/Kconfig       |   6 ++
+ arch/arm/mach-imx/Makefile      |   1 +
+ arch/arm/mach-imx/mach-cm_fx6.c | 120 ++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 127 insertions(+)
+ create mode 100644 arch/arm/mach-imx/mach-cm_fx6.c
+
+diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
+index f834eda..7e7e40d 100644
+--- a/arch/arm/mach-imx/Kconfig
++++ b/arch/arm/mach-imx/Kconfig
+@@ -680,6 +680,12 @@ config SOC_LS1021A
+ 	help
+ 	  This enables support for Freescale LS1021A processor.
+ 
++config MACH_CM_FX6
++	bool "CompuLab CM-FX6 Support"
++
++	help
++	  This enable support for CompuLab CM-FX6 board.
++
+ endif
+ 
+ source "arch/arm/mach-imx/devices/Kconfig"
+diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile
+index d32d2aa..7d7bcfe 100644
+--- a/arch/arm/mach-imx/Makefile
++++ b/arch/arm/mach-imx/Makefile
+@@ -127,6 +127,7 @@ obj-$(CONFIG_SOC_IMX7) += pm-imx7.o  ddr3_freq_imx7d.o smp_wfe.o lpddr3_freq_imx
+ obj-$(CONFIG_SOC_IMX50) += mach-imx50.o
+ obj-$(CONFIG_SOC_IMX51) += mach-imx51.o
+ obj-$(CONFIG_SOC_IMX53) += mach-imx53.o
++obj-$(CONFIG_MACH_CM_FX6) += mach-cm_fx6.o
+ 
+ obj-$(CONFIG_SOC_VF610) += clk-vf610.o mach-vf610.o
+ 
+diff --git a/arch/arm/mach-imx/mach-cm_fx6.c b/arch/arm/mach-imx/mach-cm_fx6.c
+new file mode 100644
+index 0000000..45d24cc
+--- /dev/null
++++ b/arch/arm/mach-imx/mach-cm_fx6.c
+@@ -0,0 +1,120 @@
++/*
++ *
++ * The code contained herein is licensed under the GNU General Public
++ * License. You may obtain a copy of the GNU General Public License
++ * Version 2 or later at the following locations:
++ *
++ * http://www.opensource.org/licenses/gpl-license.html
++ * http://www.gnu.org/copyleft/gpl.html
++ */
++
++#include <linux/module.h>
++#include <linux/of_platform.h>
++
++#include <linux/delay.h>
++#include <linux/err.h>
++#include <linux/io.h>
++#include <linux/of.h>
++#include <linux/of_address.h>
++#include <linux/mfd/syscon.h>
++#include <linux/mfd/syscon/imx6q-iomuxc-gpr.h>
++#include <linux/regmap.h>
++#include "common.h"
++#include "hardware.h"
++#include <linux/string.h>
++
++
++extern unsigned int system_rev;
++static unsigned int _system_rev;
++
++#define ANADIG_DIGPROG		0x260
++#define ANADIG_DIGPROG_IMX6SL	0x280
++
++extern unsigned int __mxc_cpu_type;
++
++static void revision_from_anatop(void)
++{
++	struct device_node *np;
++	void __iomem *anatop_base;
++	u32 cpu_type;
++	u16 offset = ANADIG_DIGPROG;
++	u32 fsl_system_rev = 0;
++
++	np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-anatop");
++	anatop_base = of_iomap(np, 0);
++	WARN_ON(!anatop_base);
++	if (of_device_is_compatible(np, "fsl,imx6sl-anatop"))
++		offset = ANADIG_DIGPROG_IMX6SL;
++	cpu_type = readl_relaxed(anatop_base + offset);
++	iounmap(anatop_base);
++
++	/* Chip Silicon ID */
++	fsl_system_rev = ((cpu_type >> 16) & 0xFF) << 12;
++	/* Chip silicon major revision */
++	fsl_system_rev |= ((cpu_type >> 8) & 0xFF) << 4;
++	fsl_system_rev += 0x10;
++	/* Chip silicon minor revision */
++	fsl_system_rev |= cpu_type & 0xFF;
++
++	/*
++	 * Move the CompuLab board revision to a different variable,
++	 * so we can use it anytime it is needed.
++	 * Put the Freescale silicon revision information to the place where
++	 * the userspace video libraries expect it to be.
++	 */
++	system_rev = fsl_system_rev;
++}
++
++static void __init cm_fx6_csi_mux_init(void)
++{
++	/*
++	 * MX6Q sbc-fx6 board:
++	 * IPU1 CSI0 connects to parallel interface.
++	 * Set GPR1 bit 19 to 0x1.
++	 *
++	 * MX6DL sbc-fx6 board:
++	 * IPU1 CSI0 connects to parallel interface.
++	 * Set GPR13 bit 0-2 to 0x4.
++	 */
++	struct regmap *gpr;
++
++	gpr = syscon_regmap_lookup_by_compatible("fsl,imx6q-iomuxc-gpr");
++	if (!IS_ERR(gpr)) {
++		if (of_machine_is_compatible("fsl,imx6q"))
++			regmap_update_bits(gpr, IOMUXC_GPR1, 1 << 19, 1 << 19);
++		else if (of_machine_is_compatible("fsl,imx6dl"))
++			regmap_update_bits(gpr, IOMUXC_GPR13, 0x7, 0x4);
++	} else {
++		pr_err("%s(): failed to find fsl,imx6q-iomux-gpr regmap\n",
++		       __func__);
++	}
++}
++
++
++static int cm_fx6_init(void)
++{
++	struct device_node *np;
++
++	np = of_find_compatible_node(NULL, NULL, "compulab,cm-fx6");
++
++	if (!np)
++		return -EINVAL;
++
++	_system_rev = system_rev;
++	revision_from_anatop();
++	cm_fx6_csi_mux_init();
++
++	return 0;
++}
++
++static void __exit cm_fx6_exit(void)
++{
++	system_rev = _system_rev;
++}
++module_init(cm_fx6_init);
++module_exit(cm_fx6_exit);
++
++MODULE_AUTHOR("CompuLab, Ltd.");
++MODULE_DESCRIPTION("CompuLab CM-FX6 machine driver");
++MODULE_LICENSE("GPL v2");
++MODULE_ALIAS("platform:cm-fx6");
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0003-ARM-i.MX6-cm-fx6-Add-defconfig.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0003-ARM-i.MX6-cm-fx6-Add-defconfig.patch
new file mode 100644
index 0000000..4ce5972
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0003-ARM-i.MX6-cm-fx6-Add-defconfig.patch
@@ -0,0 +1,486 @@
+From 63079a67b2f1878b672bb407255742620080194d Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Tue, 7 Jun 2016 10:37:04 +0300
+Subject: [PATCH 03/18] ARM: i.MX6: cm-fx6: Add defconfig
+
+Add default configuration file for the cm-fx6 module.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/configs/cm_fx6_defconfig | 464 ++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 464 insertions(+)
+ create mode 100644 arch/arm/configs/cm_fx6_defconfig
+
+diff --git a/arch/arm/configs/cm_fx6_defconfig b/arch/arm/configs/cm_fx6_defconfig
+new file mode 100644
+index 0000000..5b365ce
+--- /dev/null
++++ b/arch/arm/configs/cm_fx6_defconfig
+@@ -0,0 +1,464 @@
++CONFIG_LOCALVERSION="-cm-fx6-7.1"
++CONFIG_KERNEL_LZO=y
++CONFIG_SYSVIPC=y
++CONFIG_FHANDLE=y
++CONFIG_NO_HZ=y
++CONFIG_HIGH_RES_TIMERS=y
++CONFIG_IKCONFIG=y
++CONFIG_IKCONFIG_PROC=y
++CONFIG_LOG_BUF_SHIFT=18
++CONFIG_CGROUPS=y
++CONFIG_CGROUP_SCHED=y
++CONFIG_CFS_BANDWIDTH=y
++CONFIG_CHECKPOINT_RESTORE=y
++CONFIG_NAMESPACES=y
++CONFIG_RELAY=y
++CONFIG_BLK_DEV_INITRD=y
++CONFIG_EXPERT=y
++CONFIG_PERF_EVENTS=y
++# CONFIG_SLUB_DEBUG is not set
++# CONFIG_COMPAT_BRK is not set
++CONFIG_MODULES=y
++CONFIG_MODULE_UNLOAD=y
++CONFIG_MODVERSIONS=y
++CONFIG_MODULE_SRCVERSION_ALL=y
++# CONFIG_BLK_DEV_BSG is not set
++CONFIG_GPIO_PCA953X=y
++CONFIG_ARCH_MXC=y
++CONFIG_MXC_DEBUG_BOARD=y
++CONFIG_MACH_IMX51_DT=y
++CONFIG_MACH_EUKREA_CPUIMX51SD=y
++CONFIG_SOC_IMX53=y
++CONFIG_SOC_IMX6Q=y
++CONFIG_SOC_IMX6SL=y
++CONFIG_SOC_VF610=y
++CONFIG_MACH_CM_FX6=y
++# CONFIG_SWP_EMULATE is not set
++CONFIG_PCI=y
++CONFIG_PCI_IMX6=y
++CONFIG_SMP=y
++CONFIG_VMSPLIT_2G=y
++CONFIG_PREEMPT=y
++CONFIG_AEABI=y
++# CONFIG_OABI_COMPAT is not set
++CONFIG_HIGHMEM=y
++CONFIG_SECCOMP=y
++CONFIG_CMDLINE="console=ttymxc3,115200 root=/dev/mmcblk0p1 rootwait"
++CONFIG_CPU_FREQ=y
++CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
++CONFIG_CPU_FREQ_GOV_POWERSAVE=y
++CONFIG_CPU_FREQ_GOV_USERSPACE=y
++CONFIG_CPU_FREQ_GOV_ONDEMAND=y
++CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
++CONFIG_ARM_IMX6_CPUFREQ=y
++CONFIG_CPU_IDLE=y
++CONFIG_VFP=y
++CONFIG_NEON=y
++CONFIG_BINFMT_MISC=m
++CONFIG_PM_RUNTIME=y
++CONFIG_PM_DEBUG=y
++CONFIG_PM_TEST_SUSPEND=y
++CONFIG_NET=y
++CONFIG_PACKET=y
++CONFIG_UNIX=y
++CONFIG_INET=y
++CONFIG_IP_PNP=y
++CONFIG_IP_PNP_DHCP=y
++# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
++# CONFIG_INET_XFRM_MODE_TUNNEL is not set
++# CONFIG_INET_XFRM_MODE_BEET is not set
++# CONFIG_INET_LRO is not set
++CONFIG_IPV6=y
++CONFIG_NETFILTER=y
++CONFIG_NETFILTER_DEBUG=y
++CONFIG_NF_CONNTRACK=m
++CONFIG_NF_CONNTRACK_FTP=m
++CONFIG_NF_CONNTRACK_TFTP=m
++CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
++CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
++CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
++CONFIG_NETFILTER_XT_TARGET_DSCP=m
++CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
++CONFIG_NETFILTER_XT_TARGET_LED=m
++CONFIG_NETFILTER_XT_TARGET_MARK=m
++CONFIG_NETFILTER_XT_TARGET_NFLOG=m
++CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
++CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
++CONFIG_NETFILTER_XT_TARGET_TEE=m
++CONFIG_NETFILTER_XT_TARGET_TRACE=m
++CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
++CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
++CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
++CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
++CONFIG_NETFILTER_XT_MATCH_COMMENT=m
++CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
++CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
++CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
++CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
++CONFIG_NETFILTER_XT_MATCH_CPU=m
++CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m
++CONFIG_NETFILTER_XT_MATCH_DSCP=m
++CONFIG_NETFILTER_XT_MATCH_ESP=m
++CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
++CONFIG_NETFILTER_XT_MATCH_HELPER=m
++CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
++CONFIG_NETFILTER_XT_MATCH_LENGTH=m
++CONFIG_NETFILTER_XT_MATCH_LIMIT=m
++CONFIG_NETFILTER_XT_MATCH_MAC=m
++CONFIG_NETFILTER_XT_MATCH_MARK=m
++CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
++CONFIG_NETFILTER_XT_MATCH_OSF=m
++CONFIG_NETFILTER_XT_MATCH_OWNER=m
++CONFIG_NETFILTER_XT_MATCH_POLICY=m
++CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
++CONFIG_NETFILTER_XT_MATCH_QUOTA=m
++CONFIG_NETFILTER_XT_MATCH_RATEEST=m
++CONFIG_NETFILTER_XT_MATCH_REALM=m
++CONFIG_NETFILTER_XT_MATCH_RECENT=m
++CONFIG_NETFILTER_XT_MATCH_STATE=m
++CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
++CONFIG_NETFILTER_XT_MATCH_STRING=m
++CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
++CONFIG_NETFILTER_XT_MATCH_TIME=m
++CONFIG_NETFILTER_XT_MATCH_U32=m
++CONFIG_NF_CONNTRACK_IPV4=m
++CONFIG_IP_NF_IPTABLES=y
++CONFIG_IP_NF_MATCH_AH=m
++CONFIG_IP_NF_MATCH_ECN=m
++CONFIG_IP_NF_MATCH_RPFILTER=m
++CONFIG_IP_NF_MATCH_TTL=m
++CONFIG_IP_NF_FILTER=y
++CONFIG_IP_NF_TARGET_REJECT=y
++CONFIG_IP_NF_TARGET_ULOG=m
++CONFIG_NF_NAT_IPV4=m
++CONFIG_IP_NF_TARGET_MASQUERADE=m
++CONFIG_IP_NF_TARGET_NETMAP=m
++CONFIG_IP_NF_TARGET_REDIRECT=m
++CONFIG_IP_NF_MANGLE=m
++CONFIG_IP_NF_TARGET_ECN=m
++CONFIG_IP_NF_TARGET_TTL=m
++CONFIG_IP_NF_RAW=m
++CONFIG_IP_NF_ARPTABLES=m
++CONFIG_IP_NF_ARPFILTER=m
++CONFIG_IP_NF_ARP_MANGLE=m
++CONFIG_IP6_NF_IPTABLES=y
++CONFIG_VLAN_8021Q=m
++CONFIG_VLAN_8021Q_GVRP=y
++CONFIG_CAN=y
++CONFIG_CAN_FLEXCAN=y
++CONFIG_BT=m
++CONFIG_BT_MRVL=m
++CONFIG_BT_MRVL_SDIO=m
++CONFIG_CFG80211=y
++CONFIG_CFG80211_WEXT=y
++CONFIG_MAC80211=y
++CONFIG_DEVTMPFS=y
++CONFIG_DEVTMPFS_MOUNT=y
++# CONFIG_STANDALONE is not set
++CONFIG_CMA=y
++CONFIG_CMA_SIZE_MBYTES=320
++CONFIG_IMX_WEIM=y
++CONFIG_CONNECTOR=y
++CONFIG_MTD=y
++CONFIG_MTD_CMDLINE_PARTS=y
++CONFIG_MTD_BLOCK=y
++CONFIG_MTD_CFI=y
++CONFIG_MTD_JEDECPROBE=y
++CONFIG_MTD_CFI_INTELEXT=y
++CONFIG_MTD_CFI_AMDSTD=y
++CONFIG_MTD_CFI_STAA=y
++CONFIG_MTD_PHYSMAP_OF=y
++CONFIG_MTD_DATAFLASH=y
++CONFIG_MTD_M25P80=y
++CONFIG_MTD_SST25L=y
++CONFIG_MTD_NAND=y
++CONFIG_MTD_NAND_GPMI_NAND=y
++CONFIG_MTD_NAND_MXC=y
++CONFIG_MTD_UBI=y
++CONFIG_BLK_DEV_LOOP=y
++CONFIG_BLK_DEV_RAM=y
++CONFIG_BLK_DEV_RAM_SIZE=65536
++CONFIG_EEPROM_AT24=y
++CONFIG_EEPROM_AT25=y
++# CONFIG_SCSI_PROC_FS is not set
++CONFIG_BLK_DEV_SD=y
++CONFIG_SCSI_MULTI_LUN=y
++CONFIG_SCSI_CONSTANTS=y
++CONFIG_SCSI_LOGGING=y
++CONFIG_SCSI_SCAN_ASYNC=y
++# CONFIG_SCSI_LOWLEVEL is not set
++CONFIG_ATA=y
++CONFIG_SATA_AHCI=y
++CONFIG_SATA_AHCI_PLATFORM=y
++CONFIG_AHCI_IMX=y
++CONFIG_PATA_IMX=y
++CONFIG_NETDEVICES=y
++CONFIG_TUN=m
++# CONFIG_NET_VENDOR_BROADCOM is not set
++CONFIG_CS89x0=y
++CONFIG_CS89x0_PLATFORM=y
++# CONFIG_NET_VENDOR_FARADAY is not set
++CONFIG_IGB=m
++# CONFIG_NET_VENDOR_MARVELL is not set
++# CONFIG_NET_VENDOR_MICREL is not set
++# CONFIG_NET_VENDOR_MICROCHIP is not set
++# CONFIG_NET_VENDOR_NATSEMI is not set
++# CONFIG_NET_VENDOR_SEEQ is not set
++CONFIG_SMC91X=y
++CONFIG_SMC911X=y
++CONFIG_SMSC911X=y
++# CONFIG_NET_VENDOR_STMICRO is not set
++CONFIG_ATH_CARDS=y
++CONFIG_ATH6KL=m
++CONFIG_ATH6KL_SDIO=m
++CONFIG_MWIFIEX=m
++CONFIG_MWIFIEX_SDIO=m
++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
++CONFIG_INPUT_EVDEV=y
++CONFIG_INPUT_EVBUG=m
++CONFIG_KEYBOARD_GPIO=y
++CONFIG_KEYBOARD_IMX=y
++CONFIG_KEYBOARD_SNVS_PWRKEY=y
++CONFIG_MOUSE_PS2=m
++CONFIG_MOUSE_PS2_ELANTECH=y
++CONFIG_INPUT_TOUCHSCREEN=y
++CONFIG_TOUCHSCREEN_ADS7846=m
++CONFIG_TOUCHSCREEN_EGALAX=y
++CONFIG_TOUCHSCREEN_ELAN=y
++CONFIG_TOUCHSCREEN_MAX11801=y
++CONFIG_TOUCHSCREEN_MC13783=y
++CONFIG_INPUT_MISC=y
++CONFIG_INPUT_MMA8450=y
++CONFIG_INPUT_ISL29023=y
++CONFIG_SERIO_SERPORT=m
++CONFIG_VT_HW_CONSOLE_BINDING=y
++CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
++# CONFIG_LEGACY_PTYS is not set
++# CONFIG_DEVKMEM is not set
++CONFIG_SERIAL_IMX=y
++CONFIG_SERIAL_IMX_CONSOLE=y
++CONFIG_SERIAL_FSL_LPUART=y
++CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
++CONFIG_FSL_OTP=y
++CONFIG_MXS_VIIM=y
++# CONFIG_I2C_COMPAT is not set
++CONFIG_I2C_CHARDEV=y
++CONFIG_I2C_MUX=y
++CONFIG_I2C_MUX_GPIO=y
++CONFIG_I2C_MUX_PCA954x=y
++# CONFIG_I2C_HELPER_AUTO is not set
++CONFIG_I2C_ALGOPCF=m
++CONFIG_I2C_ALGOPCA=m
++CONFIG_I2C_IMX=y
++CONFIG_SPI=y
++CONFIG_SPI_IMX=y
++CONFIG_GPIO_SYSFS=y
++CONFIG_POWER_SUPPLY=y
++CONFIG_SABRESD_MAX8903=y
++CONFIG_IMX6_USB_CHARGER=y
++CONFIG_SENSORS_MAX17135=y
++CONFIG_SENSORS_MAG3110=y
++CONFIG_THERMAL=y
++CONFIG_CPU_THERMAL=y
++CONFIG_IMX_THERMAL=y
++CONFIG_DEVICE_THERMAL=y
++CONFIG_WATCHDOG=y
++CONFIG_IMX2_WDT=y
++CONFIG_MFD_DA9052_I2C=y
++CONFIG_MFD_MC13XXX_SPI=y
++CONFIG_MFD_MC13XXX_I2C=y
++CONFIG_MFD_MAX17135=y
++CONFIG_MFD_SI476X_CORE=y
++CONFIG_REGULATOR=y
++CONFIG_REGULATOR_DUMMY=y
++CONFIG_REGULATOR_FIXED_VOLTAGE=y
++CONFIG_REGULATOR_DA9052=y
++CONFIG_REGULATOR_ANATOP=y
++CONFIG_REGULATOR_MC13783=y
++CONFIG_REGULATOR_MC13892=y
++CONFIG_REGULATOR_MAX17135=y
++CONFIG_REGULATOR_PFUZE100=y
++CONFIG_MEDIA_SUPPORT=y
++CONFIG_MEDIA_CAMERA_SUPPORT=y
++CONFIG_MEDIA_RADIO_SUPPORT=y
++CONFIG_VIDEO_V4L2_INT_DEVICE=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=y
++CONFIG_VIDEO_MXC_CSI_CAMERA=m
++CONFIG_MXC_CAMERA_OV5640=m
++CONFIG_MXC_CAMERA_OV5642=m
++CONFIG_MXC_CAMERA_OV5640_MIPI=m
++CONFIG_MXC_TVIN_ADV7180=m
++CONFIG_MXC_TVP5150=m
++CONFIG_MXC_IPU_DEVICE_QUEUE_SDC=y
++CONFIG_VIDEO_MXC_IPU_OUTPUT=y
++CONFIG_VIDEO_MXC_PXP_V4L2=y
++CONFIG_SOC_CAMERA=y
++CONFIG_VIDEO_MX3=y
++CONFIG_RADIO_SI476X=y
++CONFIG_SOC_CAMERA_OV2640=y
++CONFIG_DRM=y
++CONFIG_DRM_VIVANTE=y
++CONFIG_FB=y
++CONFIG_FB_MXS=y
++CONFIG_BACKLIGHT_LCD_SUPPORT=y
++CONFIG_LCD_CLASS_DEVICE=y
++CONFIG_LCD_L4F00242T03=y
++CONFIG_LCD_PLATFORM=y
++CONFIG_BACKLIGHT_CLASS_DEVICE=y
++CONFIG_BACKLIGHT_PWM=y
++CONFIG_FB_MXC_SYNC_PANEL=y
++CONFIG_FB_MXC_LDB=y
++CONFIG_FB_MXC_MIPI_DSI=y
++CONFIG_FB_MXC_TRULY_WVGA_SYNC_PANEL=y
++CONFIG_FB_MXC_HDMI=y
++CONFIG_FB_MXC_EINK_PANEL=y
++CONFIG_FB_MXS_SII902X=y
++CONFIG_HANNSTAR_CABC=y
++CONFIG_FRAMEBUFFER_CONSOLE=y
++CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
++CONFIG_FONTS=y
++CONFIG_FONT_8x8=y
++CONFIG_FONT_8x16=y
++CONFIG_LOGO=y
++CONFIG_SOUND=y
++CONFIG_SND=y
++CONFIG_SND_USB_AUDIO=m
++CONFIG_SND_SOC=y
++CONFIG_SND_IMX_SOC=y
++CONFIG_SND_SOC_EUKREA_TLV320=y
++CONFIG_SND_SOC_IMX_CS42888=y
++CONFIG_SND_SOC_IMX_WM8731=y
++CONFIG_SND_SOC_IMX_WM8962=y
++CONFIG_SND_SOC_IMX_SGTL5000=y
++CONFIG_SND_SOC_IMX_SPDIF=y
++CONFIG_SND_SOC_IMX_MC13783=y
++CONFIG_SND_SOC_IMX_HDMI=y
++CONFIG_SND_SOC_IMX_SI476X=y
++CONFIG_USB=y
++CONFIG_USB_OTG=y
++CONFIG_USB_EHCI_HCD=y
++CONFIG_USB_EHCI_MXC=y
++CONFIG_USB_EHCI_HCD_PLATFORM=y
++CONFIG_USB_STORAGE=y
++CONFIG_USB_CHIPIDEA=y
++CONFIG_USB_CHIPIDEA_UDC=y
++CONFIG_USB_CHIPIDEA_HOST=y
++CONFIG_USB_PHY=y
++CONFIG_NOP_USB_XCEIV=y
++CONFIG_USB_MXS_PHY=y
++CONFIG_USB_GADGET=y
++CONFIG_USB_FSL_USB2=y
++CONFIG_USB_ZERO=m
++CONFIG_USB_AUDIO=m
++CONFIG_USB_ETH=m
++CONFIG_USB_MASS_STORAGE=m
++CONFIG_USB_G_SERIAL=m
++CONFIG_MMC=y
++CONFIG_MMC_UNSAFE_RESUME=y
++CONFIG_MMC_SDHCI=y
++CONFIG_MMC_SDHCI_PLTFM=y
++CONFIG_MMC_SDHCI_ESDHC_IMX=y
++CONFIG_MXC_IPU=y
++CONFIG_MXC_GPU_VIV=y
++CONFIG_MXC_ASRC=y
++CONFIG_MXC_MIPI_CSI2=y
++CONFIG_MXC_MLB150=m
++CONFIG_NEW_LEDS=y
++CONFIG_LEDS_CLASS=y
++CONFIG_LEDS_GPIO=y
++CONFIG_LEDS_TRIGGERS=y
++CONFIG_LEDS_TRIGGER_HEARTBEAT=y
++CONFIG_LEDS_TRIGGER_GPIO=y
++CONFIG_RTC_CLASS=y
++CONFIG_RTC_INTF_DEV_UIE_EMUL=y
++CONFIG_RTC_DRV_EM3027=y
++CONFIG_RTC_DRV_MC13XXX=y
++CONFIG_RTC_DRV_MXC=y
++CONFIG_RTC_DRV_SNVS=y
++CONFIG_DMADEVICES=y
++CONFIG_MXC_PXP_V2=y
++CONFIG_IMX_SDMA=y
++CONFIG_MXS_DMA=y
++CONFIG_STAGING=y
++CONFIG_COMMON_CLK_DEBUG=y
++# CONFIG_IOMMU_SUPPORT is not set
++CONFIG_PWM=y
++CONFIG_PWM_IMX=y
++CONFIG_EXT2_FS=y
++CONFIG_EXT2_FS_XATTR=y
++CONFIG_EXT2_FS_POSIX_ACL=y
++CONFIG_EXT2_FS_SECURITY=y
++CONFIG_EXT3_FS=y
++CONFIG_EXT3_FS_POSIX_ACL=y
++CONFIG_EXT3_FS_SECURITY=y
++CONFIG_EXT4_FS=y
++CONFIG_EXT4_FS_POSIX_ACL=y
++CONFIG_EXT4_FS_SECURITY=y
++CONFIG_QUOTA=y
++CONFIG_QUOTA_NETLINK_INTERFACE=y
++# CONFIG_PRINT_QUOTA_WARNING is not set
++CONFIG_AUTOFS4_FS=y
++CONFIG_FUSE_FS=y
++CONFIG_ISO9660_FS=m
++CONFIG_JOLIET=y
++CONFIG_ZISOFS=y
++CONFIG_UDF_FS=m
++CONFIG_MSDOS_FS=m
++CONFIG_VFAT_FS=y
++CONFIG_TMPFS=y
++CONFIG_TMPFS_XATTR=y
++CONFIG_JFFS2_FS=y
++CONFIG_UBIFS_FS=y
++CONFIG_NFS_FS=y
++CONFIG_NFS_V3_ACL=y
++CONFIG_NFS_V4=y
++CONFIG_ROOT_NFS=y
++CONFIG_NLS_DEFAULT="cp437"
++CONFIG_NLS_CODEPAGE_437=y
++CONFIG_NLS_ASCII=y
++CONFIG_NLS_ISO8859_1=y
++CONFIG_NLS_ISO8859_15=m
++CONFIG_NLS_UTF8=y
++CONFIG_MAGIC_SYSRQ=y
++# CONFIG_SCHED_DEBUG is not set
++# CONFIG_DEBUG_BUGVERBOSE is not set
++# CONFIG_FTRACE is not set
++CONFIG_SECURITYFS=y
++CONFIG_CRYPTO_USER=y
++CONFIG_CRYPTO_TEST=m
++CONFIG_CRYPTO_CCM=y
++CONFIG_CRYPTO_GCM=y
++CONFIG_CRYPTO_CBC=y
++CONFIG_CRYPTO_CTS=y
++CONFIG_CRYPTO_ECB=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_SHA256=y
++CONFIG_CRYPTO_SHA512=y
++CONFIG_CRYPTO_TGR192=y
++CONFIG_CRYPTO_WP512=y
++CONFIG_CRYPTO_BLOWFISH=y
++CONFIG_CRYPTO_CAMELLIA=y
++CONFIG_CRYPTO_DES=y
++CONFIG_CRYPTO_TWOFISH=y
++# CONFIG_CRYPTO_ANSI_CPRNG is not set
++CONFIG_CRYPTO_DEV_FSL_CAAM=y
++CONFIG_CRYPTO_DEV_FSL_CAAM_SM=y
++CONFIG_CRYPTO_DEV_FSL_CAAM_SM_TEST=y
++CONFIG_CRYPTO_DEV_FSL_CAAM_SECVIO=y
++CONFIG_CRC_CCITT=m
++CONFIG_CRC_T10DIF=y
++CONFIG_CRC7=m
++CONFIG_LIBCRC32C=m
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0004-ARM-i.MX6-cm-fx6-add-gpc-node.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0004-ARM-i.MX6-cm-fx6-add-gpc-node.patch
new file mode 100644
index 0000000..40918d7
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0004-ARM-i.MX6-cm-fx6-add-gpc-node.patch
@@ -0,0 +1,31 @@
+From fbdb21e58374cfb7ded4431521292aede99e400c Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Tue, 7 Jun 2016 10:52:42 +0300
+Subject: [PATCH 04/18] ARM: i.MX6: cm-fx6: add gpc node.
+
+Add gpc node in order to suppress a boot warning.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi b/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
+index 451ebaca..2f8ba05 100644
+--- a/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
+@@ -474,6 +474,11 @@
+ 	>;
+ };
+ 
++&gpc {
++	/* use ldo-enable, u-boot will check it and configure */
++	fsl,ldo-bypass = <0>;
++};
++
+ /* spi */
+ &ecspi1 {
+ 	fsl,spi-num-chipselects = <2>;
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0005-ARM-i.MX6-audio-add-analog-audio-support.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0005-ARM-i.MX6-audio-add-analog-audio-support.patch
new file mode 100644
index 0000000..05c43ea
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0005-ARM-i.MX6-audio-add-analog-audio-support.patch
@@ -0,0 +1,172 @@
+From ce88f609303a72131b2534f540a4d363553ee7da Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Mon, 13 Jun 2016 11:29:05 +0300
+Subject: [PATCH 05/18] ARM: i.MX6: audio: add analog audio support
+
+Add analog audio support by means of the simple-audio-card.
+This instance provides a simple glue interface between cpu:ssi and codec:wm8731.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi | 85 +++++++++++++++++++++++++++++------
+ sound/soc/fsl/Kconfig                 | 13 ++++++
+ 2 files changed, 84 insertions(+), 14 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi b/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
+index 2f8ba05..52bca49 100644
+--- a/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
+@@ -10,6 +10,7 @@
+  * http://www.opensource.org/licenses/gpl-license.html
+  * http://www.gnu.org/copyleft/gpl.html
+  */
++#include <dt-bindings/sound/fsl-imx-audmux.h>
+ 
+ #define MX6QDL_GPR1	0x04 0x04 0x000 0x0 0x0
+ #define MX6QDL_GPR6	0x18 0x18 0x000 0x0 0x0
+@@ -105,13 +106,36 @@
+ 	};
+ 
+ 	sound {
+-		compatible = "fsl,imx-audio-wm8731";
+-		model = "wm8731-audio";
+-		ssi-controller = <&ssi2>;
+-		src-port = <2>;
+-		ext-port = <4>;
+-		audio-codec = <&codec>;
+-		audio-routing = "LOUT", "ROUT", "LLINEIN", "RLINEIN";
++		compatible = "simple-audio-card";
++		simple-audio-card,name = "cm-fx6";
++		simple-audio-card,widgets =
++			"Headphone", "Headphone Jack",
++			"Line", "Line Out",
++			"Microphone", "Mic Jack",
++			"Line", "Line In";
++		simple-audio-card,routing =
++			"Headphone Jack", "RHPOUT",
++			"Headphone Jack", "LHPOUT",
++			"LLINEIN", "Line Jack",
++			"RLINEIN", "Line Jack",
++			"MICIN", "Mic Bias",
++			"Mic Bias", "Mic Jack";
++		simple-audio-card,format = "i2s";
++		simple-audio-card,bitclock-master = <&sound_master>;
++		simple-audio-card,frame-master = <&sound_master>;
++		simple-audio-card,bitclock-inversion;
++
++		sound_master: simple-audio-card,cpu {
++			sound-dai = <&ssi2>;
++			system-clock-frequency = <0>;
++			system-clock-direction = "out";
++		};
++
++		simple-audio-card,codec {
++			sound-dai = <&wm8731>;
++			system-clock-direction = "in";
++		};
++
+ 	};
+ 
+ 	sound-hdmi {
+@@ -580,15 +604,11 @@
+ 		pagesize = <16>;
+ 	};
+ 
+-	codec: wm8731 at 1a {
++	wm8731: wm8731 at 1a {
++		#sound-dai-cells = <0>;
+ 		compatible = "wlf,wm8731";
+ 		reg = <0x1a>;
+-		clocks = <&clks 173>, <&clks 158>, <&clks 201>, <&clks 200>;
+-		clock-names = "pll4", "imx-ssi.1", "cko", "cko2";
+-		AVDD-supply = <&pu_dummy>;
+-		HPVDD-supply = <&pu_dummy>;
+-		DCVDD-supply = <&pu_dummy>;
+-		DBVDD-supply = <&pu_dummy>;
++		status = "okay";
+ 	};
+ };
+ 
+@@ -634,9 +654,20 @@
+ 	status = "okay";
+ };
+ 
++&clks {
++	assigned-clocks = <&clks IMX6QDL_CLK_PLL4_AUDIO_DIV>;
++	assigned-clock-rates = <786432000>;
++};
++
+ &ssi2 {
++	#sound-dai-cells = <0>;
+ 	fsl,mode = "i2s-master";
+ 	status = "okay";
++
++	assigned-clocks = <&clks IMX6QDL_CLK_SSI2_SEL>,
++			<&clks IMX6QDL_CLK_SSI2>;
++	assigned-clock-parents = <&clks IMX6QDL_CLK_PLL4_AUDIO_DIV>;
++	assigned-clock-rates = <0>;
+ };
+ 
+ &hdmi_core {
+@@ -662,8 +693,34 @@
+ 	status = "okay";
+ };
+ 
++#define SRC_PORT (1)
++#define EXT_PORT (3)
+ &audmux {
+ 	pinctrl-names = "default";
+ 	pinctrl-0 = <&pinctrl_audmux>;
+ 	status = "okay";
++
++	ssi2 {
++		fsl,audmux-port = <SRC_PORT>;
++		fsl,port-config = <
++			(IMX_AUDMUX_V2_PTCR_RCLKDIR |
++			IMX_AUDMUX_V2_PTCR_RCSEL(EXT_PORT | 0x8) |
++			IMX_AUDMUX_V2_PTCR_TCLKDIR |
++			IMX_AUDMUX_V2_PTCR_TCSEL(EXT_PORT))
++			IMX_AUDMUX_V2_PDCR_RXDSEL(EXT_PORT)
++		>;
++	};
++
++	pins5 {
++		fsl,audmux-port = <EXT_PORT>;
++		fsl,port-config = <
++			(IMX_AUDMUX_V2_PTCR_TFSDIR |
++			IMX_AUDMUX_V2_PTCR_TFSEL(SRC_PORT) |
++			IMX_AUDMUX_V2_PTCR_RCLKDIR |
++			IMX_AUDMUX_V2_PTCR_RCSEL(SRC_PORT | 0x8) |
++			IMX_AUDMUX_V2_PTCR_TCLKDIR |
++			IMX_AUDMUX_V2_PTCR_TCSEL(SRC_PORT))
++			IMX_AUDMUX_V2_PDCR_RXDSEL(SRC_PORT)
++		>;
++	};
+ };
+diff --git a/sound/soc/fsl/Kconfig b/sound/soc/fsl/Kconfig
+index a4054f3..8a56912 100644
+--- a/sound/soc/fsl/Kconfig
++++ b/sound/soc/fsl/Kconfig
+@@ -392,6 +392,19 @@ config SND_SOC_IMX_HDMI
+ 	  Say Y if you want to add support for SoC audio on an i.MX board with
+ 	  IMX HDMI.
+ 
++config SND_SOC_IMX_WM8731
++	tristate "SoC Audio support for i.MX boards with WM8731"
++	select SND_SOC_IMX_PCM_DMA
++	select SND_SOC_IMX_AUDMUX
++	select SND_SOC_FSL_SSI
++	select SND_SOC_FSL_UTILS
++	select SND_SOC_WM8731
++	select SND_SIMPLE_CARD
++	help
++	  SoC Audio support for i.MX boards with WM8731
++	  Say Y if you want to add support for Soc audio for the WM8731 chip
++	  CM-FX6 module.
++
+ endif # SND_IMX_SOC
+ 
+ endmenu
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0006-ARM-i.MX6-add-depends-property-to-gpmi-nand.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0006-ARM-i.MX6-add-depends-property-to-gpmi-nand.patch
new file mode 100644
index 0000000..3513351
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0006-ARM-i.MX6-add-depends-property-to-gpmi-nand.patch
@@ -0,0 +1,31 @@
+From 70f54c7e3448d9693f8c640b69e300f085cdca0f Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Mon, 13 Jun 2016 13:38:57 +0300
+Subject: [PATCH 06/18] ARM: i.MX6: add 'depends' property to gpmi-nand
+
+Add a new 'depends' property to the gpmi-nand node.
+The purpose is to create a dependency between devices.
+The ecspi4 bus driver with its siblings has to be configured first
+in order to provide the correct mtd device order registration.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi b/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
+index 52bca49..7c39b96 100644
+--- a/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
+@@ -579,7 +579,7 @@
+ 	pinctrl-names = "default";
+ 	pinctrl-0 = <&pinctrl_gpmi_nand>;
+ 	status = "okay";
+-	depends = "fsl,imx6q-ecspi";
++	depends = &ecspi1;
+ 
+ 	partition at 0 {
+ 		label = "linux";
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0007-ARM-i.MX6-update-defconfig-for-nand.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0007-ARM-i.MX6-update-defconfig-for-nand.patch
new file mode 100644
index 0000000..66a3974
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0007-ARM-i.MX6-update-defconfig-for-nand.patch
@@ -0,0 +1,271 @@
+From c1001fb9a5ce4f48f569647b9475aea358f9aa78 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Mon, 13 Jun 2016 13:39:49 +0300
+Subject: [PATCH 07/18] ARM: i.MX6: update defconfig for nand
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/configs/cm_fx6_defconfig | 65 ++++++++++++---------------------------
+ 1 file changed, 19 insertions(+), 46 deletions(-)
+
+diff --git a/arch/arm/configs/cm_fx6_defconfig b/arch/arm/configs/cm_fx6_defconfig
+index 5b365ce..fdce238 100644
+--- a/arch/arm/configs/cm_fx6_defconfig
++++ b/arch/arm/configs/cm_fx6_defconfig
+@@ -23,11 +23,7 @@ CONFIG_MODULE_UNLOAD=y
+ CONFIG_MODVERSIONS=y
+ CONFIG_MODULE_SRCVERSION_ALL=y
+ # CONFIG_BLK_DEV_BSG is not set
+-CONFIG_GPIO_PCA953X=y
+ CONFIG_ARCH_MXC=y
+-CONFIG_MXC_DEBUG_BOARD=y
+-CONFIG_MACH_IMX51_DT=y
+-CONFIG_MACH_EUKREA_CPUIMX51SD=y
+ CONFIG_SOC_IMX53=y
+ CONFIG_SOC_IMX6Q=y
+ CONFIG_SOC_IMX6SL=y
+@@ -40,8 +36,8 @@ CONFIG_SMP=y
+ CONFIG_VMSPLIT_2G=y
+ CONFIG_PREEMPT=y
+ CONFIG_AEABI=y
+-# CONFIG_OABI_COMPAT is not set
+ CONFIG_HIGHMEM=y
++CONFIG_CMA=y
+ CONFIG_SECCOMP=y
+ CONFIG_CMDLINE="console=ttymxc3,115200 root=/dev/mmcblk0p1 rootwait"
+ CONFIG_CPU_FREQ=y
+@@ -50,12 +46,10 @@ CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+ CONFIG_CPU_FREQ_GOV_USERSPACE=y
+ CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+ CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+-CONFIG_ARM_IMX6_CPUFREQ=y
+ CONFIG_CPU_IDLE=y
+ CONFIG_VFP=y
+ CONFIG_NEON=y
+ CONFIG_BINFMT_MISC=m
+-CONFIG_PM_RUNTIME=y
+ CONFIG_PM_DEBUG=y
+ CONFIG_PM_TEST_SUSPEND=y
+ CONFIG_NET=y
+@@ -122,6 +116,7 @@ CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+ CONFIG_NETFILTER_XT_MATCH_TIME=m
+ CONFIG_NETFILTER_XT_MATCH_U32=m
+ CONFIG_NF_CONNTRACK_IPV4=m
++CONFIG_NF_NAT_IPV4=m
+ CONFIG_IP_NF_IPTABLES=y
+ CONFIG_IP_NF_MATCH_AH=m
+ CONFIG_IP_NF_MATCH_ECN=m
+@@ -129,11 +124,6 @@ CONFIG_IP_NF_MATCH_RPFILTER=m
+ CONFIG_IP_NF_MATCH_TTL=m
+ CONFIG_IP_NF_FILTER=y
+ CONFIG_IP_NF_TARGET_REJECT=y
+-CONFIG_IP_NF_TARGET_ULOG=m
+-CONFIG_NF_NAT_IPV4=m
+-CONFIG_IP_NF_TARGET_MASQUERADE=m
+-CONFIG_IP_NF_TARGET_NETMAP=m
+-CONFIG_IP_NF_TARGET_REDIRECT=m
+ CONFIG_IP_NF_MANGLE=m
+ CONFIG_IP_NF_TARGET_ECN=m
+ CONFIG_IP_NF_TARGET_TTL=m
+@@ -155,8 +145,6 @@ CONFIG_MAC80211=y
+ CONFIG_DEVTMPFS=y
+ CONFIG_DEVTMPFS_MOUNT=y
+ # CONFIG_STANDALONE is not set
+-CONFIG_CMA=y
+-CONFIG_CMA_SIZE_MBYTES=320
+ CONFIG_IMX_WEIM=y
+ CONFIG_CONNECTOR=y
+ CONFIG_MTD=y
+@@ -171,9 +159,11 @@ CONFIG_MTD_PHYSMAP_OF=y
+ CONFIG_MTD_DATAFLASH=y
+ CONFIG_MTD_M25P80=y
+ CONFIG_MTD_SST25L=y
++CONFIG_MTD_BLOCK2MTD=y
+ CONFIG_MTD_NAND=y
+ CONFIG_MTD_NAND_GPMI_NAND=y
+ CONFIG_MTD_NAND_MXC=y
++CONFIG_MTD_SPI_NOR=y
+ CONFIG_MTD_UBI=y
+ CONFIG_BLK_DEV_LOOP=y
+ CONFIG_BLK_DEV_RAM=y
+@@ -182,7 +172,6 @@ CONFIG_EEPROM_AT24=y
+ CONFIG_EEPROM_AT25=y
+ # CONFIG_SCSI_PROC_FS is not set
+ CONFIG_BLK_DEV_SD=y
+-CONFIG_SCSI_MULTI_LUN=y
+ CONFIG_SCSI_CONSTANTS=y
+ CONFIG_SCSI_LOGGING=y
+ CONFIG_SCSI_SCAN_ASYNC=y
+@@ -218,7 +207,6 @@ CONFIG_INPUT_EVDEV=y
+ CONFIG_INPUT_EVBUG=m
+ CONFIG_KEYBOARD_GPIO=y
+ CONFIG_KEYBOARD_IMX=y
+-CONFIG_KEYBOARD_SNVS_PWRKEY=y
+ CONFIG_MOUSE_PS2=m
+ CONFIG_MOUSE_PS2_ELANTECH=y
+ CONFIG_INPUT_TOUCHSCREEN=y
+@@ -231,7 +219,6 @@ CONFIG_INPUT_MISC=y
+ CONFIG_INPUT_MMA8450=y
+ CONFIG_INPUT_ISL29023=y
+ CONFIG_SERIO_SERPORT=m
+-CONFIG_VT_HW_CONSOLE_BINDING=y
+ CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
+ # CONFIG_LEGACY_PTYS is not set
+ # CONFIG_DEVKMEM is not set
+@@ -240,10 +227,8 @@ CONFIG_SERIAL_IMX_CONSOLE=y
+ CONFIG_SERIAL_FSL_LPUART=y
+ CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
+ CONFIG_FSL_OTP=y
+-CONFIG_MXS_VIIM=y
+ # CONFIG_I2C_COMPAT is not set
+ CONFIG_I2C_CHARDEV=y
+-CONFIG_I2C_MUX=y
+ CONFIG_I2C_MUX_GPIO=y
+ CONFIG_I2C_MUX_PCA954x=y
+ # CONFIG_I2C_HELPER_AUTO is not set
+@@ -253,9 +238,9 @@ CONFIG_I2C_IMX=y
+ CONFIG_SPI=y
+ CONFIG_SPI_IMX=y
+ CONFIG_GPIO_SYSFS=y
++CONFIG_GPIO_PCA953X=y
+ CONFIG_POWER_SUPPLY=y
+ CONFIG_SABRESD_MAX8903=y
+-CONFIG_IMX6_USB_CHARGER=y
+ CONFIG_SENSORS_MAX17135=y
+ CONFIG_SENSORS_MAG3110=y
+ CONFIG_THERMAL=y
+@@ -270,32 +255,29 @@ CONFIG_MFD_MC13XXX_I2C=y
+ CONFIG_MFD_MAX17135=y
+ CONFIG_MFD_SI476X_CORE=y
+ CONFIG_REGULATOR=y
+-CONFIG_REGULATOR_DUMMY=y
+ CONFIG_REGULATOR_FIXED_VOLTAGE=y
+-CONFIG_REGULATOR_DA9052=y
+ CONFIG_REGULATOR_ANATOP=y
++CONFIG_REGULATOR_DA9052=y
++CONFIG_REGULATOR_MAX17135=y
+ CONFIG_REGULATOR_MC13783=y
+ CONFIG_REGULATOR_MC13892=y
+-CONFIG_REGULATOR_MAX17135=y
+ CONFIG_REGULATOR_PFUZE100=y
+ CONFIG_MEDIA_SUPPORT=y
+ CONFIG_MEDIA_CAMERA_SUPPORT=y
+ CONFIG_MEDIA_RADIO_SUPPORT=y
+-CONFIG_VIDEO_V4L2_INT_DEVICE=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=y
+-CONFIG_VIDEO_MXC_CSI_CAMERA=m
+ CONFIG_MXC_CAMERA_OV5640=m
+ CONFIG_MXC_CAMERA_OV5642=m
+ CONFIG_MXC_CAMERA_OV5640_MIPI=m
+ CONFIG_MXC_TVIN_ADV7180=m
+-CONFIG_MXC_TVP5150=m
+ CONFIG_MXC_IPU_DEVICE_QUEUE_SDC=y
+ CONFIG_VIDEO_MXC_IPU_OUTPUT=y
+ CONFIG_VIDEO_MXC_PXP_V4L2=y
++CONFIG_VIDEO_MXC_CSI_CAMERA=m
+ CONFIG_SOC_CAMERA=y
+ CONFIG_VIDEO_MX3=y
+ CONFIG_RADIO_SI476X=y
+@@ -304,25 +286,20 @@ CONFIG_DRM=y
+ CONFIG_DRM_VIVANTE=y
+ CONFIG_FB=y
+ CONFIG_FB_MXS=y
+-CONFIG_BACKLIGHT_LCD_SUPPORT=y
+-CONFIG_LCD_CLASS_DEVICE=y
+-CONFIG_LCD_L4F00242T03=y
+-CONFIG_LCD_PLATFORM=y
+-CONFIG_BACKLIGHT_CLASS_DEVICE=y
+-CONFIG_BACKLIGHT_PWM=y
+ CONFIG_FB_MXC_SYNC_PANEL=y
+-CONFIG_FB_MXC_LDB=y
+ CONFIG_FB_MXC_MIPI_DSI=y
+ CONFIG_FB_MXC_TRULY_WVGA_SYNC_PANEL=y
++CONFIG_FB_MXC_LDB=y
+ CONFIG_FB_MXC_HDMI=y
+-CONFIG_FB_MXC_EINK_PANEL=y
+ CONFIG_FB_MXS_SII902X=y
+ CONFIG_HANNSTAR_CABC=y
++CONFIG_FB_MXC_EINK_PANEL=y
++CONFIG_LCD_CLASS_DEVICE=y
++CONFIG_LCD_L4F00242T03=y
++CONFIG_LCD_PLATFORM=y
++CONFIG_BACKLIGHT_PWM=y
+ CONFIG_FRAMEBUFFER_CONSOLE=y
+ CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
+-CONFIG_FONTS=y
+-CONFIG_FONT_8x8=y
+-CONFIG_FONT_8x16=y
+ CONFIG_LOGO=y
+ CONFIG_SOUND=y
+ CONFIG_SND=y
+@@ -331,13 +308,13 @@ CONFIG_SND_SOC=y
+ CONFIG_SND_IMX_SOC=y
+ CONFIG_SND_SOC_EUKREA_TLV320=y
+ CONFIG_SND_SOC_IMX_CS42888=y
+-CONFIG_SND_SOC_IMX_WM8731=y
+ CONFIG_SND_SOC_IMX_WM8962=y
+ CONFIG_SND_SOC_IMX_SGTL5000=y
+ CONFIG_SND_SOC_IMX_SPDIF=y
+ CONFIG_SND_SOC_IMX_MC13783=y
+-CONFIG_SND_SOC_IMX_HDMI=y
+ CONFIG_SND_SOC_IMX_SI476X=y
++CONFIG_SND_SOC_IMX_HDMI=y
++CONFIG_SND_SOC_IMX_WM8731=y
+ CONFIG_USB=y
+ CONFIG_USB_OTG=y
+ CONFIG_USB_EHCI_HCD=y
+@@ -347,7 +324,6 @@ CONFIG_USB_STORAGE=y
+ CONFIG_USB_CHIPIDEA=y
+ CONFIG_USB_CHIPIDEA_UDC=y
+ CONFIG_USB_CHIPIDEA_HOST=y
+-CONFIG_USB_PHY=y
+ CONFIG_NOP_USB_XCEIV=y
+ CONFIG_USB_MXS_PHY=y
+ CONFIG_USB_GADGET=y
+@@ -358,15 +334,12 @@ CONFIG_USB_ETH=m
+ CONFIG_USB_MASS_STORAGE=m
+ CONFIG_USB_G_SERIAL=m
+ CONFIG_MMC=y
+-CONFIG_MMC_UNSAFE_RESUME=y
+ CONFIG_MMC_SDHCI=y
+ CONFIG_MMC_SDHCI_PLTFM=y
+ CONFIG_MMC_SDHCI_ESDHC_IMX=y
+ CONFIG_MXC_IPU=y
+ CONFIG_MXC_GPU_VIV=y
+-CONFIG_MXC_ASRC=y
+ CONFIG_MXC_MIPI_CSI2=y
+-CONFIG_MXC_MLB150=m
+ CONFIG_NEW_LEDS=y
+ CONFIG_LEDS_CLASS=y
+ CONFIG_LEDS_GPIO=y
+@@ -384,7 +357,6 @@ CONFIG_MXC_PXP_V2=y
+ CONFIG_IMX_SDMA=y
+ CONFIG_MXS_DMA=y
+ CONFIG_STAGING=y
+-CONFIG_COMMON_CLK_DEBUG=y
+ # CONFIG_IOMMU_SUPPORT is not set
+ CONFIG_PWM=y
+ CONFIG_PWM_IMX=y
+@@ -430,8 +402,6 @@ CONFIG_MAGIC_SYSRQ=y
+ CONFIG_SECURITYFS=y
+ CONFIG_CRYPTO_USER=y
+ CONFIG_CRYPTO_TEST=m
+-CONFIG_CRYPTO_CCM=y
+-CONFIG_CRYPTO_GCM=y
+ CONFIG_CRYPTO_CBC=y
+ CONFIG_CRYPTO_CTS=y
+ CONFIG_CRYPTO_ECB=y
+@@ -462,3 +432,6 @@ CONFIG_CRC_CCITT=m
+ CONFIG_CRC_T10DIF=y
+ CONFIG_CRC7=m
+ CONFIG_LIBCRC32C=m
++CONFIG_FONTS=y
++CONFIG_FONT_8x8=y
++CONFIG_FONT_8x16=y
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0008-ARM-i.MX6-add-mxc_dvi-driver.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0008-ARM-i.MX6-add-mxc_dvi-driver.patch
new file mode 100644
index 0000000..40e33b3
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0008-ARM-i.MX6-add-mxc_dvi-driver.patch
@@ -0,0 +1,479 @@
+From aac7024f471b0d24ca14bb2ebfe7cc107bb58377 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Tue, 14 Jun 2016 15:06:31 +0300
+Subject: [PATCH 08/18] ARM: i.MX6: add mxc_dvi driver
+
+Add mxc_dvi driver.
+This driver has been ported from the 3.0.35 kernel tree.
+The purpose is to let the kernel read and report the edid for dvi displays.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ drivers/video/fbdev/mxc/Makefile  |   2 +-
+ drivers/video/fbdev/mxc/mxc_dvi.c | 441 ++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 442 insertions(+), 1 deletion(-)
+ create mode 100644 drivers/video/fbdev/mxc/mxc_dvi.c
+
+diff --git a/drivers/video/fbdev/mxc/Makefile b/drivers/video/fbdev/mxc/Makefile
+index c91711c..a10d145 100644
+--- a/drivers/video/fbdev/mxc/Makefile
++++ b/drivers/video/fbdev/mxc/Makefile
+@@ -4,7 +4,7 @@ obj-$(CONFIG_FB_MXC_TRULY_WVGA_SYNC_PANEL)      += mxcfb_hx8369_wvga.o
+ obj-$(CONFIG_FB_MXC_LDB) += ldb.o
+ obj-$(CONFIG_FB_MXC_HDMI)			+= mxc_hdmi.o
+ obj-$(CONFIG_FB_MXC_EDID)			+= mxc_edid.o
+-obj-$(CONFIG_FB_MXC_SYNC_PANEL) += mxc_dispdrv.o mxc_lcdif.o mxc_ipuv3_fb.o
++obj-$(CONFIG_FB_MXC_SYNC_PANEL) += mxc_dispdrv.o mxc_lcdif.o mxc_ipuv3_fb.o mxc_dvi.o
+ obj-$(CONFIG_FB_MXC_EINK_PANEL)			+= mxc_epdc_fb.o
+ obj-$(CONFIG_FB_MXC_EINK_V2_PANEL)		+= mxc_epdc_v2_fb.o
+ obj-$(CONFIG_FB_MXS_SII902X) += mxsfb_sii902x.o
+diff --git a/drivers/video/fbdev/mxc/mxc_dvi.c b/drivers/video/fbdev/mxc/mxc_dvi.c
+new file mode 100644
+index 0000000..42ec4f6
+--- /dev/null
++++ b/drivers/video/fbdev/mxc/mxc_dvi.c
+@@ -0,0 +1,441 @@
++/*
++ * Copyright (C) 2011 Freescale Semiconductor, Inc. All Rights Reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++
++ * You should have received a copy of the GNU General Public License along
++ * with this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
++ */
++
++/*!
++ * @defgroup Framebuffer Framebuffer Driver for SDC and ADC.
++ */
++
++/*!
++ * @file mxc_dvi.c
++ *
++ * @brief MXC DVI driver
++ *
++ * @ingroup Framebuffer
++ */
++
++/*!
++ * Include files
++ */
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/device.h>
++#include <linux/i2c.h>
++#include <linux/fb.h>
++#include <linux/console.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/ipu.h>
++#include <linux/mxcfb.h>
++#include <linux/fsl_devices.h>
++#include <linux/interrupt.h>
++#include <linux/irq.h>
++#include <linux/gpio.h>
++#include <linux/of.h>
++#include <linux/of_device.h>
++#include <linux/of_gpio.h>
++#include <linux/regulator/consumer.h>
++#include <video/mxc_edid.h>
++#include "mxc_dispdrv.h"
++#include "../edid.h"
++
++#define MXC_EDID_LENGTH (EDID_LENGTH*4)
++
++#define DISPDRV_DVI	"dvi"
++
++struct mxc_dvi_data {
++	struct i2c_client *client;
++	struct platform_device *pdev;
++	struct platform_device *core_pdev;
++	struct mxc_dispdrv_handle *disp_dvi;
++	struct delayed_work det_work;
++	struct fb_info *fbi;
++	struct mxc_edid_cfg edid_cfg;
++	u8 cable_plugin;
++	u8 edid[MXC_EDID_LENGTH];
++
++	u32 ipu_id;
++	u32 disp_id;
++	u32 hp_gpio;
++};
++
++struct i2c_client *dvi_i2c;
++struct mxc_dvi_data *g_dvi;
++
++static ssize_t mxc_dvi_show_state(struct device *dev,
++		struct device_attribute *attr, char *buf)
++{
++	struct mxc_dvi_data *dvi = dev_get_drvdata(dev);
++
++	if (dvi->cable_plugin == 0)
++		strcpy(buf, "plugout\n");
++	else
++		strcpy(buf, "plugin\n");
++
++	return strlen(buf);
++}
++
++static DEVICE_ATTR(cable_state, S_IRUGO, mxc_dvi_show_state, NULL);
++
++static int dvi_update(struct mxc_dvi_data *dvi)
++{
++	if (gpio_is_valid(dvi->hp_gpio))
++		return gpio_get_value(dvi->hp_gpio);
++
++	/* always connected */
++	return 1;
++}
++
++static ssize_t mxc_dvi_show_name(struct device *dev,
++		struct device_attribute *attr, char *buf)
++{
++	struct mxc_dvi_data *dvi = dev_get_drvdata(dev);
++
++	strcpy(buf, dvi->fbi->fix.id);
++	sprintf(buf+strlen(buf), "\n");
++
++	return strlen(buf);
++}
++
++static DEVICE_ATTR(fb_name, S_IRUGO, mxc_dvi_show_name, NULL);
++
++static ssize_t mxc_dvi_show_edid(struct device *dev,
++		struct device_attribute *attr, char *buf)
++{
++	struct mxc_dvi_data *dvi = dev_get_drvdata(dev);
++	int i, j, len = 0;
++
++	for (j = 0; j < MXC_EDID_LENGTH/16; j++) {
++		for (i = 0; i < 16; i++)
++			len += sprintf(buf+len, "0x%02X ",
++					dvi->edid[j*16 + i]);
++		len += sprintf(buf+len, "\n");
++	}
++
++	return len;
++}
++
++static DEVICE_ATTR(edid, S_IRUGO, mxc_dvi_show_edid, NULL);
++
++static void det_worker(struct work_struct *work)
++{
++	struct delayed_work *delay_work = to_delayed_work(work);
++	struct mxc_dvi_data *dvi =
++		container_of(delay_work, struct mxc_dvi_data, det_work);
++	char event_string[16];
++	char *envp[] = { event_string, NULL };
++
++	/* cable connection changes */
++	if (dvi_update(dvi)) {
++		u8 edid_old[MXC_EDID_LENGTH];
++		dvi->cable_plugin = 1;
++		sprintf(event_string, "EVENT=plugin");
++
++		memcpy(edid_old, dvi->edid, MXC_EDID_LENGTH);
++
++		if (mxc_edid_read(dvi->client->adapter, dvi->client->addr,
++				dvi->edid, &dvi->edid_cfg, dvi->fbi) < 0)
++			dev_err(&dvi->client->dev,
++					"MXC dvi: read edid fail\n");
++		else {
++			if (!memcmp(edid_old, dvi->edid, MXC_EDID_LENGTH))
++				dev_info(&dvi->client->dev,
++					"MXC dvi: same edid\n");
++			else if (dvi->fbi->monspecs.modedb_len > 0) {
++				int i;
++				const struct fb_videomode *mode;
++				struct fb_videomode m;
++
++				fb_destroy_modelist(&dvi->fbi->modelist);
++
++				for (i = 0; i < dvi->fbi->monspecs.modedb_len; i++)
++					/*FIXME now we do not support interlaced mode */
++					if (!(dvi->fbi->monspecs.modedb[i].vmode & FB_VMODE_INTERLACED))
++						fb_add_videomode(&dvi->fbi->monspecs.modedb[i],
++								&dvi->fbi->modelist);
++
++				fb_var_to_videomode(&m, &dvi->fbi->var);
++				mode = fb_find_nearest_mode(&m,
++						&dvi->fbi->modelist);
++
++				fb_videomode_to_var(&dvi->fbi->var, mode);
++
++				dvi->fbi->var.activate |= FB_ACTIVATE_FORCE;
++				console_lock();
++				dvi->fbi->flags |= FBINFO_MISC_USEREVENT;
++				fb_set_var(dvi->fbi, &dvi->fbi->var);
++				dvi->fbi->flags &= ~FBINFO_MISC_USEREVENT;
++				console_unlock();
++			}
++		}
++	} else {
++		dvi->cable_plugin = 0;
++		sprintf(event_string, "EVENT=plugout");
++	}
++
++	kobject_uevent_env(&dvi->pdev->dev.kobj, KOBJ_CHANGE, envp);
++}
++
++static irqreturn_t mxc_dvi_detect_handler(int irq, void *data)
++{
++	struct mxc_dvi_data *dvi = data;
++	schedule_delayed_work(&(dvi->det_work), msecs_to_jiffies(300));
++	return IRQ_HANDLED;
++}
++
++static int dvi_init(struct mxc_dispdrv_handle *disp,
++	struct mxc_dispdrv_setting *setting)
++{
++	int ret = 0;
++	struct mxc_dvi_data *dvi = mxc_dispdrv_getdata(disp);
++	bool found = false;
++
++	ret = ipu_di_to_crtc(&dvi->pdev->dev, dvi->ipu_id,
++			     dvi->disp_id, &setting->crtc);
++
++	if (ret < 0)
++		return ret;
++
++	setting->if_fmt = IPU_PIX_FMT_RGB24;
++	dvi->fbi = setting->fbi;
++
++	/* get video mode from edid */
++	INIT_LIST_HEAD(&dvi->fbi->modelist);
++	if (dvi_update(dvi)) {
++		dvi->cable_plugin = 1;
++		/* try to read edid */
++		if (mxc_edid_read(dvi->client->adapter, dvi->client->addr,
++				dvi->edid, &dvi->edid_cfg, dvi->fbi) < 0)
++			dev_warn(&dvi->client->dev, "Can not read edid\n");
++		else if (dvi->fbi->monspecs.modedb_len > 0) {
++			int i;
++			const struct fb_videomode *mode;
++			struct fb_videomode m;
++
++			for (i = 0; i < dvi->fbi->monspecs.modedb_len; i++) {
++				/*FIXME now we do not support interlaced mode */
++				if (!(dvi->fbi->monspecs.modedb[i].vmode
++					& FB_VMODE_INTERLACED))
++					fb_add_videomode(
++						&dvi->fbi->monspecs.modedb[i],
++						&dvi->fbi->modelist);
++			}
++
++			fb_find_mode(&dvi->fbi->var, dvi->fbi, setting->dft_mode_str,
++					NULL, 0, NULL, setting->default_bpp);
++
++			fb_var_to_videomode(&m, &dvi->fbi->var);
++			mode = fb_find_nearest_mode(&m,
++					&dvi->fbi->modelist);
++			fb_videomode_to_var(&dvi->fbi->var, mode);
++			found = 1;
++		}
++	} else
++		dvi->cable_plugin = 0;
++
++	if (!found) {
++		ret = fb_find_mode(&dvi->fbi->var, dvi->fbi, setting->dft_mode_str,
++				NULL, 0, NULL, setting->default_bpp);
++		if (!ret)
++			return -EINVAL;
++	}
++
++	/* cable detection */
++	if (dvi->client->irq) {
++		ret = request_irq(dvi->client->irq, mxc_dvi_detect_handler,
++				IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
++				"dvi_det", dvi);
++		if (ret < 0) {
++			dev_warn(&dvi->client->dev,
++				"MXC dvi: cound not request det irq %d\n",
++				dvi->client->irq);
++			goto err;
++		} else {
++			INIT_DELAYED_WORK(&(dvi->det_work), det_worker);
++			ret = device_create_file(&dvi->pdev->dev, &dev_attr_fb_name);
++			if (ret < 0)
++				dev_warn(&dvi->client->dev,
++					"MXC dvi: cound not create sys node for fb name\n");
++			ret = device_create_file(&dvi->pdev->dev, &dev_attr_cable_state);
++			if (ret < 0)
++				dev_warn(&dvi->client->dev,
++					"MXC dvi: cound not create sys node for cable state\n");
++			ret = device_create_file(&dvi->pdev->dev, &dev_attr_edid);
++			if (ret < 0)
++				dev_warn(&dvi->client->dev,
++					"MXC dvi: cound not create sys node for edid\n");
++
++			dev_set_drvdata(&dvi->pdev->dev, dvi);
++		}
++	}
++
++err:
++	return ret;
++}
++
++static void dvi_deinit(struct mxc_dispdrv_handle *disp)
++{
++	struct mxc_dvi_data *dvi = mxc_dispdrv_getdata(disp);
++	free_irq(dvi->client->irq, dvi);
++}
++
++static struct mxc_dispdrv_driver dvi_drv = {
++	.name 	= DISPDRV_DVI,
++	.init 	= dvi_init,
++	.deinit	= dvi_deinit,
++};
++
++static int mxc_dvi_probe(struct platform_device *pdev)
++{
++	struct device_node *np = pdev->dev.of_node;
++	struct mxc_dvi_data *dvi;
++	u32 ipu_id, disp_id, hp_gpio;
++	int ret = 0;
++
++	if (!dvi_i2c)
++		return -EPROBE_DEFER;
++
++	dvi = kzalloc(sizeof(struct mxc_dvi_data), GFP_KERNEL);
++	if (!dvi)
++		return -ENOMEM;
++
++	ret = of_property_read_u32(np, "ipu_id", &ipu_id);
++	if (ret) {
++		dev_dbg(&pdev->dev, "get of property ipu_id fail\n");
++		goto error;
++	}
++	ret = of_property_read_u32(np, "disp_id", &disp_id);
++	if (ret) {
++		dev_dbg(&pdev->dev, "get of property disp_id fail\n");
++		goto error;
++	}
++	ret = of_property_read_u32(np, "hp_gpio", &hp_gpio);
++	if (ret) {
++		dev_dbg(&pdev->dev, "get of property hp_gpio fail\n");
++		goto error;
++	}
++
++	dvi->ipu_id = ipu_id;
++	dvi->disp_id = disp_id;
++	dvi->hp_gpio = hp_gpio;
++
++	dvi->client = dvi_i2c;
++	dvi->pdev = pdev;
++	dvi->disp_dvi = mxc_dispdrv_register(&dvi_drv);
++	mxc_dispdrv_setdata(dvi->disp_dvi, dvi);
++
++	dvi->client->irq = gpio_to_irq(dvi->hp_gpio);
++
++	g_dvi = dvi;
++	platform_set_drvdata(pdev, dvi);
++	printk("Registered MXC DVI as a platform device\n");
++
++	return ret;
++error:
++	kfree(dvi);
++	return ret;
++}
++
++static const struct of_device_id imx_dvi_dt_ids[] = {
++	{ .compatible = "fsl,dvi", },
++	{ /* sentinel */ }
++};
++MODULE_DEVICE_TABLE(of, imx_dvi_dt_ids);
++
++static int mxc_dvi_remove(struct platform_device *pdev)
++{
++	struct mxc_dvi_data *dvi = platform_get_drvdata(pdev);
++	kfree(dvi);
++	g_dvi = NULL;
++
++	return 0;
++}
++static struct platform_driver mxc_dvi_driver = {
++	.driver = {
++		.name = "mxc_dvi",
++		.of_match_table	= imx_dvi_dt_ids,
++	},
++	.probe = mxc_dvi_probe,
++	.remove = mxc_dvi_remove,
++};
++
++static int __init mxc_dvi_init(void)
++{
++	return platform_driver_register(&mxc_dvi_driver);
++}
++module_init(mxc_dvi_init);
++
++static void __exit mxc_dvi_exit(void)
++{
++	platform_driver_unregister(&mxc_dvi_driver);
++}
++module_exit(mxc_dvi_exit);
++
++static int mxc_dvi_i2c_probe(struct i2c_client *client,
++		const struct i2c_device_id *id)
++{
++	if (!i2c_check_functionality(client->adapter,
++				I2C_FUNC_SMBUS_BYTE | I2C_FUNC_I2C))
++		return -ENODEV;
++
++	dvi_i2c = client;
++	return 0;
++}
++
++static int mxc_dvi_i2c_remove(struct i2c_client *client)
++{
++	dvi_i2c = NULL;
++	return 0;
++}
++
++static const struct of_device_id imx_dvi_i2c_match[] = {
++	{ .compatible = "fsl,imx6-dvi-i2c", },
++	{ /* sentinel */ }
++};
++
++static const struct i2c_device_id mxc_dvi_i2c_id[] = {
++	{ "mxc_dvi_i2c", 0 },
++	{},
++};
++MODULE_DEVICE_TABLE(i2c, mxc_dvi_i2c_id);
++
++static struct i2c_driver mxc_dvi_i2c_driver = {
++	.driver = {
++		   .name = "mxc_dvi_i2c",
++			.of_match_table	= imx_dvi_i2c_match,
++		   },
++	.probe = mxc_dvi_i2c_probe,
++	.remove = mxc_dvi_i2c_remove,
++	.id_table = mxc_dvi_i2c_id,
++};
++
++static int __init mxc_dvi_i2c_init(void)
++{
++	return i2c_add_driver(&mxc_dvi_i2c_driver);
++}
++
++static void __exit mxc_dvi_i2c_exit(void)
++{
++	i2c_del_driver(&mxc_dvi_i2c_driver);
++}
++
++module_init(mxc_dvi_i2c_init);
++module_exit(mxc_dvi_i2c_exit);
++
++MODULE_AUTHOR("Freescale Semiconductor, Inc.");
++MODULE_DESCRIPTION("MXC DVI driver");
++MODULE_LICENSE("GPL");
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0009-ARM-i.MX6-dts-refactoring-of-the-second-video-output.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0009-ARM-i.MX6-dts-refactoring-of-the-second-video-output.patch
new file mode 100644
index 0000000..9584b6a
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0009-ARM-i.MX6-dts-refactoring-of-the-second-video-output.patch
@@ -0,0 +1,38 @@
+From 4a20bb47d34afbac33ecd9f91ec67221808089f7 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Tue, 14 Jun 2016 15:19:53 +0300
+Subject: [PATCH 09/18] ARM: i.MX6: dts: refactoring of the second video output
+
+1) fix the fb2 depends field
+2) add ipu and disp id for a "fsl,dvi" device
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6qdl-sb-fx6m.dtsi | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6qdl-sb-fx6m.dtsi b/arch/arm/boot/dts/imx6qdl-sb-fx6m.dtsi
+index 7bf19c9..b700499 100644
+--- a/arch/arm/boot/dts/imx6qdl-sb-fx6m.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-sb-fx6m.dtsi
+@@ -115,6 +115,8 @@
+ &ipu1di0_disp {
+ 	compatible = "fsl,dvi";
+ 	hp_gpio = <4>;
++	ipu_id = <0>;
++	disp_id = <0>;
+ 	status = "okay";
+ };
+ 
+@@ -129,7 +131,6 @@
+ 
+ &mxcfb2 {
+ 	disp_dev = "dvi";
+-	mode_str ="1920x1080M at 50";
+-	depends = "fsl,dvi";
++	depends = &ipu1di0_disp;
+ 	status = "okay";
+ };
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0010-ARM-i.MX6-dts-ldo-hdmi-changes.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0010-ARM-i.MX6-dts-ldo-hdmi-changes.patch
new file mode 100644
index 0000000..026050c
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0010-ARM-i.MX6-dts-ldo-hdmi-changes.patch
@@ -0,0 +1,35 @@
+From 84a684031082d6254345a8cc60237857cccbaff5 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Wed, 15 Jun 2016 14:01:54 +0300
+Subject: [PATCH 10/18] ARM: i.MX6: dts: ldo & hdmi changes
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi b/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
+index 7c39b96..bd08a40 100644
+--- a/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
+@@ -500,7 +500,7 @@
+ 
+ &gpc {
+ 	/* use ldo-enable, u-boot will check it and configure */
+-	fsl,ldo-bypass = <0>;
++	fsl,ldo-bypass = <1>;
+ };
+ 
+ /* spi */
+@@ -679,6 +679,8 @@
+ &hdmi_video {
+ 	pinctrl-names = "default";
+ 	pinctrl-0 = <&pinctrl_hdmi_hdcp>;
++        fsl,phy_reg_vlev = <0x0294>;
++        fsl,phy_reg_cksymtx = <0x800d>;
+ 	fsl,hdcp;
+ 	status = "okay";
+ };
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0011-ARM-i.MX6-dts-udshc3-set-polarity-value.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0011-ARM-i.MX6-dts-udshc3-set-polarity-value.patch
new file mode 100644
index 0000000..1da112b
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0011-ARM-i.MX6-dts-udshc3-set-polarity-value.patch
@@ -0,0 +1,28 @@
+From 4636c1b470e4de4676ed25cc56af7ac8b1c71880 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 19 Jun 2016 11:47:08 +0300
+Subject: [PATCH 11/18] ARM: i.MX6: dts: udshc3 set polarity value
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi b/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi
+index 1bb2867..255b424 100644
+--- a/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi
+@@ -100,8 +100,8 @@
+ };
+ 
+ &usdhc3 {
+-	wp-gpios = <&gpio7 0 0>;
+-	cd-gpios = <&gpio7 1 0>;
++	wp-gpios = <&gpio7 0 GPIO_ACTIVE_HIGH>;
++	cd-gpios = <&gpio7 1 GPIO_ACTIVE_LOW>;
+ 	status = "okay";
+ };
+ 
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0012-ARM-i.MX6-dts-sata-refactoring.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0012-ARM-i.MX6-dts-sata-refactoring.patch
new file mode 100644
index 0000000..e058ff5
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0012-ARM-i.MX6-dts-sata-refactoring.patch
@@ -0,0 +1,31 @@
+From 4b158f61a35279a4a7fdf67a3f026f2659620630 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 26 Jun 2016 10:50:42 +0300
+Subject: [PATCH 12/18] ARM: i.MX6: dts: sata refactoring
+
+1) enable "target-supply" regulator.
+2) add FreeScale gpr13 values for sata_phy tunning.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dtsi | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dtsi b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+index 3a10e5e..0cdba81 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+@@ -91,5 +91,10 @@
+ 
+ /* sata */
+ &sata {
++	target-supply = <&reg_sata_nstandby2>;
+ 	status = "okay";
++	fsl,transmit-level-mV = <1104>;
++	fsl,transmit-boost-mdB = <370>;
++	fsl,transmit-atten-16ths = <9>;
++	fsl,receive-eq-mdB = <3000>;
+ };
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0013-ARM-i.MX6-dts-ldb-refactoring.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0013-ARM-i.MX6-dts-ldb-refactoring.patch
new file mode 100644
index 0000000..e4fa8aa
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0013-ARM-i.MX6-dts-ldb-refactoring.patch
@@ -0,0 +1,92 @@
+From 147e898cf0d3d1637bf87a8281fe8d1c8139bff1 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 26 Jun 2016 11:58:03 +0300
+Subject: [PATCH 13/18] ARM: i.MX6: dts: ldb refactoring
+
+Change the ldb stanza with regards to the latest ldb definitions' requirements.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi | 59 +++++++++++++++++++++++++++++------
+ 1 file changed, 49 insertions(+), 10 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi b/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi
+index 255b424..b2bf65a 100644
+--- a/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi
+@@ -111,6 +111,55 @@
+ 	status = "okay";
+ };
+ 
++&ldb {
++	status = "okay";
++
++	lvds0: lvds-channel at 0 {
++		crtc = "ipu2-di0";
++		fsl,data-mapping = "spwg";
++		fsl,data-width = <18>;
++		primary;
++		status = "okay";
++
++		display-timings {
++			native-mode = <&timing0>;
++			timing0: hsd100pxn1 {
++				clock-frequency = <65000000>;
++				hactive = <1024>;
++				vactive = <768>;
++				hback-porch = <220>;
++				hfront-porch = <40>;
++				vback-porch = <21>;
++				vfront-porch = <7>;
++				hsync-len = <60>;
++				vsync-len = <10>;
++			};
++		};
++	};
++
++	lvds1: lvds-channel at 1 {
++		crtc = "ipu2-di1";
++		fsl,data-mapping = "spwg";
++		fsl,data-width = <18>;
++		status = "okay";
++
++		display-timings {
++			native-mode = <&timing1>;
++			timing1: hsd100pxn1 {
++				clock-frequency = <65000000>;
++				hactive = <1024>;
++				vactive = <768>;
++				hback-porch = <220>;
++				hfront-porch = <40>;
++				vback-porch = <21>;
++				vfront-porch = <7>;
++				hsync-len = <60>;
++				vsync-len = <10>;
++			};
++		};
++	};
++};
++
+ &mxcfb1 {
+ 	mode_str ="KD050C-WVGA";
+ 	status = "okay";
+@@ -128,16 +177,6 @@
+ 	status = "okay";
+ };
+ 
+-&ldb {
+-	ipu_id = <1>;
+-	disp_id = <0>;
+-	ext_ref = <1>;
+-	mode = "sep0";
+-	sec_ipu_id = <1>;
+-	sec_disp_id = <1>;
+-	status = "okay";
+-};
+-
+ &can1 {
+ 	pinctrl-names = "default";
+ 	pinctrl-0 = <&pinctrl_flexcan1_1>;
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0014-ARM-i.MX6-dts-enable-mipi_dsi.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0014-ARM-i.MX6-dts-enable-mipi_dsi.patch
new file mode 100644
index 0000000..5f992c5
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0014-ARM-i.MX6-dts-enable-mipi_dsi.patch
@@ -0,0 +1,85 @@
+From 355bfa0f7a9a530f7e836e753410b29ffdb6142e Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 26 Jun 2016 15:20:22 +0300
+Subject: [PATCH 14/18] ARM: i.MX6: dts: enable mipi_dsi
+
+Enable mipi_dsi.
+Add a separate fx6-sbc dts file with a mipi port enabled.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-sbc-fx6-mipi.dts | 44 ++++++++++++++++++++++++++++++++
+ arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi    |  9 -------
+ 2 files changed, 44 insertions(+), 9 deletions(-)
+ create mode 100644 arch/arm/boot/dts/imx6q-sbc-fx6-mipi.dts
+
+diff --git a/arch/arm/boot/dts/imx6q-sbc-fx6-mipi.dts b/arch/arm/boot/dts/imx6q-sbc-fx6-mipi.dts
+new file mode 100644
+index 0000000..c591819
+--- /dev/null
++++ b/arch/arm/boot/dts/imx6q-sbc-fx6-mipi.dts
+@@ -0,0 +1,44 @@
++/*
++* Copyright 2014 CompuLab Ltd.
++*
++* Author: Valentin Raevsky <valentin at compulab.co.il>
++*
++* The code contained herein is licensed under the GNU General Public
++* License. You may obtain a copy of the GNU General Public License
++* Version 2 or later at the following locations:
++*
++* http://www.opensource.org/licenses/gpl-license.html
++* http://www.gnu.org/copyleft/gpl.html
++*/
++
++/dts-v1/;
++#include "imx6q.dtsi"
++#include "imx6q-cm-fx6.dtsi"
++#include "imx6qdl-sb-fx6x.dtsi"
++#include "imx6qdl-sb-fx6.dtsi"
++
++/ {
++	model = "CompuLab CM-FX6 on SBC-FX6";
++	compatible = "compulab,cm-fx6", "compulab,sbc-fx6", "fsl,imx6q";
++};
++
++&ipu1di0_disp {
++	status = "disabled";
++};
++
++&mipi_dsi {
++	dev_id = <0>;
++	disp_id = <0>;
++	lcd_panel = "TRULY-WVGA";
++	depends = &pca9555;
++	disp-power-on-supply = <&reg_mipi_dsi_pwr_on_mode>;
++	resets = <&mipi_dsi_reset>;
++	status = "okay";
++};
++
++&mxcfb1 {
++	mode_str ="TRULY-WVGA";
++	disp_dev = "mipi_dsi";
++	depends = &mipi_dsi;
++	status = "okay";
++};
+diff --git a/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi b/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi
+index b2bf65a..f98f054 100644
+--- a/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi
+@@ -183,12 +183,3 @@
+ 	status = "okay";
+ };
+ 
+-&mipi_dsi {
+-	dev_id = <0>;
+-	disp_id = <0>;
+-	lcd_panel = "TRULY-WVGA";
+-	depends = "nxp,pca9555";
+-	disp-power-on-supply = <&reg_mipi_dsi_pwr_on_mode>;
+-	resets = <&mipi_dsi_reset>;
+-	status = "disabled";
+-};
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0015-ARM-i.MX6-pcie-refactoring.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0015-ARM-i.MX6-pcie-refactoring.patch
new file mode 100644
index 0000000..82767d2
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0015-ARM-i.MX6-pcie-refactoring.patch
@@ -0,0 +1,169 @@
+From 58d6e50b72fd468eef04e7345c1f34a3de1170bc Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 26 Jun 2016 17:22:41 +0300
+Subject: [PATCH 15/18] ARM: i.MX6: pcie refactoring
+
+PCIe refactoring.
+Separate the board specific and the common code.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi  | 15 ++-------------
+ arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi  | 12 ++++++++++++
+ arch/arm/boot/dts/imx6qdl-sb-fx6m.dtsi | 29 +++++++++++++++++++++++------
+ arch/arm/boot/dts/imx6qdl-sb-fx6x.dtsi |  5 +++++
+ 4 files changed, 42 insertions(+), 19 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi b/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
+index bd08a40..db89991 100644
+--- a/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
+@@ -15,6 +15,7 @@
+ #define MX6QDL_GPR1	0x04 0x04 0x000 0x0 0x0
+ #define MX6QDL_GPR6	0x18 0x18 0x000 0x0 0x0
+ #define MX6QDL_GPR7	0x1c 0x1c 0x000 0x0 0x0
++#define MX6QDL_GPR1    0x04 0x04 0x000 0x0 0x0
+ 
+ / {
+ 	memory {
+@@ -45,16 +46,6 @@
+ 			enable-active-high;
+ 		};
+ 
+-		/* regulator1 for pcie power-on-gpio */
+-		pcie_power_on_gpio: regulator-pcie-power-on-gpio {
+-			compatible = "regulator-fixed";
+-			regulator-name = "regulator-pcie-power-on-gpio";
+-			regulator-min-microvolt = <3300000>;
+-			regulator-max-microvolt = <3300000>;
+-			gpio = <&gpio2 24 0>;
+-			enable-active-high;
+-		};
+-
+ 		/* regulator for usb hub1 */
+ 		reg_usb_h1_vbus: usb_h1_vbus {
+ 			compatible = "regulator-fixed";
+@@ -417,7 +408,6 @@
+ 		pinctrl_pcie: pciegrp {
+ 			fsl,pins = <
+ 				MX6QDL_PAD_ENET_RXD1__GPIO1_IO26 0x80000000
+-				MX6QDL_PAD_EIM_CS1__GPIO2_IO24 0x80000000
+ 			>;
+ 		};
+ 
+@@ -616,8 +606,7 @@
+ 	pinctrl-names = "default";
+ 	pinctrl-0 = <&pinctrl_pcie>;
+ 	reset-gpio = <&gpio1 26 0>;
+-	vdd-supply = <&pcie_power_on_gpio>;
+-	status = "okay";
++	status = "disabled";
+ };
+ 
+ /* console */
+diff --git a/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi b/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi
+index f98f054..0ab8954 100644
+--- a/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi
+@@ -93,6 +93,18 @@
+ 		reset-delay-us = <100>;
+ 		#reset-cells = <0>;
+ 	};
++
++	pcie_power_on_gpio: regulator-pcie-power-on-gpio {
++		compatible = "regulator-fixed";
++		regulator-name = "regulator-pcie-power-on-gpio";
++		gpio = <&pca9555 4 GPIO_ACTIVE_LOW>;
++		enable-active-low;
++	};
++};
++
++&pcie {
++	vdd-supply = <&pcie_power_on_gpio>;
++	status = "okay";
+ };
+ 
+ &i2c1 {
+diff --git a/arch/arm/boot/dts/imx6qdl-sb-fx6m.dtsi b/arch/arm/boot/dts/imx6qdl-sb-fx6m.dtsi
+index b700499..ff35479 100644
+--- a/arch/arm/boot/dts/imx6qdl-sb-fx6m.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-sb-fx6m.dtsi
+@@ -11,6 +11,8 @@
+  * http://www.gnu.org/copyleft/gpl.html
+  */
+ 
++#include <dt-bindings/gpio/gpio.h>
++
+ / {
+ 	iomux_uart2: pinmux at 20E0924 {
+ 		compatible = "pinctrl-single";
+@@ -21,12 +23,6 @@
+ 		pinctrl-single,function-mask = <0x4>;
+ 	};
+ 
+-	eth at pcie {
+-		compatible = "intel,i211";
+-		local-mac-address = [FF FF FF FF FF FF];
+-		status = "okay";
+-	};
+-
+ 	gpio-keys {
+ 		compatible = "gpio-keys";
+ 		power {
+@@ -73,6 +69,13 @@
+ 			};
+ 		};
+ 	};
++
++	pcie_power_on_gpio: regulator-pcie-power-on-gpio {
++		compatible = "regulator-fixed";
++		regulator-name = "regulator-pcie-power-on-gpio";
++		gpio = <&gpio2 24 GPIO_ACTIVE_HIGH>;
++		enable-active-high;
++	};
+ };
+ 
+ &iomuxc {
+@@ -86,9 +89,23 @@
+ 				MX6QDL_PAD_SD4_DAT6__UART2_CTS_B 0x1b0b1
+ 		>;
+ 		};
++
++		/* pins for pcie */
++		pinctrl_fx6m_pcie: pciefx6mgrp {
++			fsl,pins = <
++				MX6QDL_PAD_EIM_CS1__GPIO2_IO24 0x80000000
++			>;
++		};
+ 	};
+ };
+ 
++&pcie {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_pcie>, <&pinctrl_fx6m_pcie>;
++	vdd-supply = <&pcie_power_on_gpio>;
++	status = "okay";
++};
++
+ &i2c1 {
+ 	status = "okay";
+ };
+diff --git a/arch/arm/boot/dts/imx6qdl-sb-fx6x.dtsi b/arch/arm/boot/dts/imx6qdl-sb-fx6x.dtsi
+index f98a87d..77a77fe 100644
+--- a/arch/arm/boot/dts/imx6qdl-sb-fx6x.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-sb-fx6x.dtsi
+@@ -27,6 +27,11 @@
+ 		};
+ 	};
+ 
++	eth at pcie {
++		compatible = "intel,i211";
++		local-mac-address = [FF FF FF FF FF FF];
++		status = "okay";
++	};
+ };
+ 
+ &iomuxc {
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0016-ARM-i.MX6-dts-clean-up-unnecesary-code.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0016-ARM-i.MX6-dts-clean-up-unnecesary-code.patch
new file mode 100644
index 0000000..9db2f54
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0016-ARM-i.MX6-dts-clean-up-unnecesary-code.patch
@@ -0,0 +1,53 @@
+From 16630f075e8bbbff888cd66bccf6db6a9eafd062 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Mon, 27 Jun 2016 17:06:22 +0300
+Subject: [PATCH 16/18] ARM: i.MX6: dts: clean up unnecesary code
+
+Remove:
+1) unnecessary GPRx assignment ( legacy from the 3.10.17_ga )
+2) an incorrect analog audio routing
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+
+Conflicts:
+	arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
+---
+ arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi | 8 --------
+ 1 file changed, 8 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi b/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
+index db89991..33db95c 100644
+--- a/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
+@@ -13,9 +13,6 @@
+ #include <dt-bindings/sound/fsl-imx-audmux.h>
+ 
+ #define MX6QDL_GPR1	0x04 0x04 0x000 0x0 0x0
+-#define MX6QDL_GPR6	0x18 0x18 0x000 0x0 0x0
+-#define MX6QDL_GPR7	0x1c 0x1c 0x000 0x0 0x0
+-#define MX6QDL_GPR1    0x04 0x04 0x000 0x0 0x0
+ 
+ / {
+ 	memory {
+@@ -107,8 +104,6 @@
+ 		simple-audio-card,routing =
+ 			"Headphone Jack", "RHPOUT",
+ 			"Headphone Jack", "LHPOUT",
+-			"LLINEIN", "Line Jack",
+-			"RLINEIN", "Line Jack",
+ 			"MICIN", "Mic Bias",
+ 			"Mic Bias", "Mic Jack";
+ 		simple-audio-card,format = "i2s";
+@@ -219,9 +214,6 @@
+ 		pinctrl_hog: hoggrp {
+ 			fsl,pins = <
+ 				MX6QDL_GPR1 0x48400005
+-				/* ipu3 QoS */
+-				MX6QDL_GPR6 0x007f007f
+-				MX6QDL_GPR7 0x007f007f
+ 				/* SATA PWR */
+ 				MX6QDL_PAD_ENET_TX_EN__GPIO1_IO28 0x80000000
+ 				MX6QDL_PAD_EIM_A22__GPIO2_IO16 0x80000000
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0017-ARM-i.MX6-update-defconfig.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0017-ARM-i.MX6-update-defconfig.patch
new file mode 100644
index 0000000..1b1a956
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0017-ARM-i.MX6-update-defconfig.patch
@@ -0,0 +1,34 @@
+From d65d1f09f3ef9aceac8259c28332c8f04838fd8b Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Mon, 27 Jun 2016 17:13:37 +0300
+Subject: [PATCH 17/18] ARM: i.MX6: update defconfig
+
+1) Update the defconfig local version
+2) Enable CPU_FREQ
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/configs/cm_fx6_defconfig | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/configs/cm_fx6_defconfig b/arch/arm/configs/cm_fx6_defconfig
+index fdce238..89b7a71 100644
+--- a/arch/arm/configs/cm_fx6_defconfig
++++ b/arch/arm/configs/cm_fx6_defconfig
+@@ -1,4 +1,4 @@
+-CONFIG_LOCALVERSION="-cm-fx6-7.1"
++CONFIG_LOCALVERSION="-cm-fx6-8.0"
+ CONFIG_KERNEL_LZO=y
+ CONFIG_SYSVIPC=y
+ CONFIG_FHANDLE=y
+@@ -46,6 +46,7 @@ CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+ CONFIG_CPU_FREQ_GOV_USERSPACE=y
+ CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+ CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
++CONFIG_ARM_IMX6Q_CPUFREQ=y
+ CONFIG_CPU_IDLE=y
+ CONFIG_VFP=y
+ CONFIG_NEON=y
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0018-Bluetooth-btmrvl-disable-SD8787-AMP-device.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0018-Bluetooth-btmrvl-disable-SD8787-AMP-device.patch
new file mode 100644
index 0000000..9a798b6
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0018-Bluetooth-btmrvl-disable-SD8787-AMP-device.patch
@@ -0,0 +1,36 @@
+From 9f0a215845c461078a1c113d2803041cf951cb24 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Tue, 27 Jan 2015 17:39:24 +0200
+Subject: [PATCH 18/18] Bluetooth: btmrvl: disable SD8787 AMP device
+
+Disable SD8787 AMP device.
+The device probe gets stuck while configuring a 0x911B device.
+
+Firmware Version 14.66.35.p52 for SD8787 doesn't support BT-AMP.
+
+http://git.marvell.com/?p=mwifiex-firmware.git;a=commit;h=3f45b8c4cc1eb1d102bc3486b19677332dd215ab
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ drivers/bluetooth/btmrvl_sdio.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c
+index 01d6da5..c887ba5 100644
+--- a/drivers/bluetooth/btmrvl_sdio.c
++++ b/drivers/bluetooth/btmrvl_sdio.c
+@@ -198,9 +198,11 @@ static const struct sdio_device_id btmrvl_sdio_ids[] = {
+ 	/* Marvell SD8787 Bluetooth device */
+ 	{ SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, 0x911A),
+ 			.driver_data = (unsigned long) &btmrvl_sdio_sd8787 },
++#ifdef SD8787_AMP
+ 	/* Marvell SD8787 Bluetooth AMP device */
+ 	{ SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, 0x911B),
+ 			.driver_data = (unsigned long) &btmrvl_sdio_sd8787 },
++#endif
+ 	/* Marvell SD8797 Bluetooth device */
+ 	{ SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, 0x912A),
+ 			.driver_data = (unsigned long) &btmrvl_sdio_sd8797 },
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0019-ARM-i.MX6-HDMI-Fix-HDMI-PHY-init-hang.patch b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0019-ARM-i.MX6-HDMI-Fix-HDMI-PHY-init-hang.patch
new file mode 100644
index 0000000..4d7f76f
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/0019-ARM-i.MX6-HDMI-Fix-HDMI-PHY-init-hang.patch
@@ -0,0 +1,31 @@
+From d042101a3720d3dfe854f10d8a2eef56b06305e3 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Thu, 7 Jul 2016 14:56:16 +0300
+Subject: [PATCH 19/19] ARM: i.MX6: HDMI: Fix HDMI PHY init hang
+
+Remove the hdmi_enable_overflow_interrupts() function call from
+the mxc_hdmi_phy_init(). This fix addresses the HDMI PHY init hang.
+This occurs in case that the HDMI PHY has been turned on by the U-Boot.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ drivers/video/fbdev/mxc/mxc_hdmi.c | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/drivers/video/fbdev/mxc/mxc_hdmi.c b/drivers/video/fbdev/mxc/mxc_hdmi.c
+index c1b5126..513bda7 100644
+--- a/drivers/video/fbdev/mxc/mxc_hdmi.c
++++ b/drivers/video/fbdev/mxc/mxc_hdmi.c
+@@ -1260,9 +1260,6 @@ static void mxc_hdmi_phy_init(struct mxc_hdmi *hdmi)
+ 			|| (hdmi->blank != FB_BLANK_UNBLANK))
+ 		return;
+ 
+-	if (!hdmi->hdmi_data.video_mode.mDVI)
+-		hdmi_enable_overflow_interrupts();
+-
+ 	/*check csc whether needed activated in HDMI mode */
+ 	cscon = (isColorSpaceConversion(hdmi) &&
+ 			!hdmi->hdmi_data.video_mode.mDVI);
+-- 
+1.9.1
+
diff --git a/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/defconfig b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/defconfig
new file mode 100644
index 0000000..89b7a71
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-4.1.15/cm-fx6/defconfig
@@ -0,0 +1,438 @@
+CONFIG_LOCALVERSION="-cm-fx6-8.0"
+CONFIG_KERNEL_LZO=y
+CONFIG_SYSVIPC=y
+CONFIG_FHANDLE=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=18
+CONFIG_CGROUPS=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_CFS_BANDWIDTH=y
+CONFIG_CHECKPOINT_RESTORE=y
+CONFIG_NAMESPACES=y
+CONFIG_RELAY=y
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_EXPERT=y
+CONFIG_PERF_EVENTS=y
+# CONFIG_SLUB_DEBUG is not set
+# CONFIG_COMPAT_BRK is not set
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+CONFIG_MODULE_SRCVERSION_ALL=y
+# CONFIG_BLK_DEV_BSG is not set
+CONFIG_ARCH_MXC=y
+CONFIG_SOC_IMX53=y
+CONFIG_SOC_IMX6Q=y
+CONFIG_SOC_IMX6SL=y
+CONFIG_SOC_VF610=y
+CONFIG_MACH_CM_FX6=y
+# CONFIG_SWP_EMULATE is not set
+CONFIG_PCI=y
+CONFIG_PCI_IMX6=y
+CONFIG_SMP=y
+CONFIG_VMSPLIT_2G=y
+CONFIG_PREEMPT=y
+CONFIG_AEABI=y
+CONFIG_HIGHMEM=y
+CONFIG_CMA=y
+CONFIG_SECCOMP=y
+CONFIG_CMDLINE="console=ttymxc3,115200 root=/dev/mmcblk0p1 rootwait"
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_ARM_IMX6Q_CPUFREQ=y
+CONFIG_CPU_IDLE=y
+CONFIG_VFP=y
+CONFIG_NEON=y
+CONFIG_BINFMT_MISC=m
+CONFIG_PM_DEBUG=y
+CONFIG_PM_TEST_SUSPEND=y
+CONFIG_NET=y
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+CONFIG_INET=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+CONFIG_IPV6=y
+CONFIG_NETFILTER=y
+CONFIG_NETFILTER_DEBUG=y
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_DSCP=m
+CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
+CONFIG_NETFILTER_XT_TARGET_LED=m
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+CONFIG_NETFILTER_XT_TARGET_TEE=m
+CONFIG_NETFILTER_XT_TARGET_TRACE=m
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
+CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
+CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_CPU=m
+CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_OSF=m
+CONFIG_NETFILTER_XT_MATCH_OWNER=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_RATEEST=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_RECENT=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_TIME=m
+CONFIG_NETFILTER_XT_MATCH_U32=m
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_NAT_IPV4=m
+CONFIG_IP_NF_IPTABLES=y
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_RPFILTER=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_TARGET_REJECT=y
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+CONFIG_IP6_NF_IPTABLES=y
+CONFIG_VLAN_8021Q=m
+CONFIG_VLAN_8021Q_GVRP=y
+CONFIG_CAN=y
+CONFIG_CAN_FLEXCAN=y
+CONFIG_BT=m
+CONFIG_BT_MRVL=m
+CONFIG_BT_MRVL_SDIO=m
+CONFIG_CFG80211=y
+CONFIG_CFG80211_WEXT=y
+CONFIG_MAC80211=y
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+# CONFIG_STANDALONE is not set
+CONFIG_IMX_WEIM=y
+CONFIG_CONNECTOR=y
+CONFIG_MTD=y
+CONFIG_MTD_CMDLINE_PARTS=y
+CONFIG_MTD_BLOCK=y
+CONFIG_MTD_CFI=y
+CONFIG_MTD_JEDECPROBE=y
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_CFI_AMDSTD=y
+CONFIG_MTD_CFI_STAA=y
+CONFIG_MTD_PHYSMAP_OF=y
+CONFIG_MTD_DATAFLASH=y
+CONFIG_MTD_M25P80=y
+CONFIG_MTD_SST25L=y
+CONFIG_MTD_BLOCK2MTD=y
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_GPMI_NAND=y
+CONFIG_MTD_NAND_MXC=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_UBI=y
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_SIZE=65536
+CONFIG_EEPROM_AT24=y
+CONFIG_EEPROM_AT25=y
+# CONFIG_SCSI_PROC_FS is not set
+CONFIG_BLK_DEV_SD=y
+CONFIG_SCSI_CONSTANTS=y
+CONFIG_SCSI_LOGGING=y
+CONFIG_SCSI_SCAN_ASYNC=y
+# CONFIG_SCSI_LOWLEVEL is not set
+CONFIG_ATA=y
+CONFIG_SATA_AHCI=y
+CONFIG_SATA_AHCI_PLATFORM=y
+CONFIG_AHCI_IMX=y
+CONFIG_PATA_IMX=y
+CONFIG_NETDEVICES=y
+CONFIG_TUN=m
+# CONFIG_NET_VENDOR_BROADCOM is not set
+CONFIG_CS89x0=y
+CONFIG_CS89x0_PLATFORM=y
+# CONFIG_NET_VENDOR_FARADAY is not set
+CONFIG_IGB=m
+# CONFIG_NET_VENDOR_MARVELL is not set
+# CONFIG_NET_VENDOR_MICREL is not set
+# CONFIG_NET_VENDOR_MICROCHIP is not set
+# CONFIG_NET_VENDOR_NATSEMI is not set
+# CONFIG_NET_VENDOR_SEEQ is not set
+CONFIG_SMC91X=y
+CONFIG_SMC911X=y
+CONFIG_SMSC911X=y
+# CONFIG_NET_VENDOR_STMICRO is not set
+CONFIG_ATH_CARDS=y
+CONFIG_ATH6KL=m
+CONFIG_ATH6KL_SDIO=m
+CONFIG_MWIFIEX=m
+CONFIG_MWIFIEX_SDIO=m
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_EVDEV=y
+CONFIG_INPUT_EVBUG=m
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_KEYBOARD_IMX=y
+CONFIG_MOUSE_PS2=m
+CONFIG_MOUSE_PS2_ELANTECH=y
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=m
+CONFIG_TOUCHSCREEN_EGALAX=y
+CONFIG_TOUCHSCREEN_ELAN=y
+CONFIG_TOUCHSCREEN_MAX11801=y
+CONFIG_TOUCHSCREEN_MC13783=y
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_MMA8450=y
+CONFIG_INPUT_ISL29023=y
+CONFIG_SERIO_SERPORT=m
+CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_DEVKMEM is not set
+CONFIG_SERIAL_IMX=y
+CONFIG_SERIAL_IMX_CONSOLE=y
+CONFIG_SERIAL_FSL_LPUART=y
+CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
+CONFIG_FSL_OTP=y
+# CONFIG_I2C_COMPAT is not set
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_MUX_GPIO=y
+CONFIG_I2C_MUX_PCA954x=y
+# CONFIG_I2C_HELPER_AUTO is not set
+CONFIG_I2C_ALGOPCF=m
+CONFIG_I2C_ALGOPCA=m
+CONFIG_I2C_IMX=y
+CONFIG_SPI=y
+CONFIG_SPI_IMX=y
+CONFIG_GPIO_SYSFS=y
+CONFIG_GPIO_PCA953X=y
+CONFIG_POWER_SUPPLY=y
+CONFIG_SABRESD_MAX8903=y
+CONFIG_SENSORS_MAX17135=y
+CONFIG_SENSORS_MAG3110=y
+CONFIG_THERMAL=y
+CONFIG_CPU_THERMAL=y
+CONFIG_IMX_THERMAL=y
+CONFIG_DEVICE_THERMAL=y
+CONFIG_WATCHDOG=y
+CONFIG_IMX2_WDT=y
+CONFIG_MFD_DA9052_I2C=y
+CONFIG_MFD_MC13XXX_SPI=y
+CONFIG_MFD_MC13XXX_I2C=y
+CONFIG_MFD_MAX17135=y
+CONFIG_MFD_SI476X_CORE=y
+CONFIG_REGULATOR=y
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
+CONFIG_REGULATOR_ANATOP=y
+CONFIG_REGULATOR_DA9052=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_USB_SUPPORT=y
+CONFIG_USB_VIDEO_CLASS=m
+CONFIG_V4L_PLATFORM_DRIVERS=y
+CONFIG_VIDEO_MXC_OUTPUT=y
+CONFIG_VIDEO_MXC_CAPTURE=y
+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=y
+CONFIG_VIDEO_MXC_IPU_OUTPUT=y
+CONFIG_VIDEO_MXC_PXP_V4L2=y
+CONFIG_VIDEO_MXC_CSI_CAMERA=m
+CONFIG_SOC_CAMERA=y
+CONFIG_VIDEO_MX3=y
+CONFIG_RADIO_SI476X=y
+CONFIG_SOC_CAMERA_OV2640=y
+CONFIG_DRM=y
+CONFIG_DRM_VIVANTE=y
+CONFIG_FB=y
+CONFIG_FB_MXS=y
+CONFIG_FB_MXC_SYNC_PANEL=y
+CONFIG_FB_MXC_MIPI_DSI=y
+CONFIG_FB_MXC_TRULY_WVGA_SYNC_PANEL=y
+CONFIG_FB_MXC_LDB=y
+CONFIG_FB_MXC_HDMI=y
+CONFIG_FB_MXS_SII902X=y
+CONFIG_HANNSTAR_CABC=y
+CONFIG_FB_MXC_EINK_PANEL=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_L4F00242T03=y
+CONFIG_LCD_PLATFORM=y
+CONFIG_BACKLIGHT_PWM=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
+CONFIG_LOGO=y
+CONFIG_SOUND=y
+CONFIG_SND=y
+CONFIG_SND_USB_AUDIO=m
+CONFIG_SND_SOC=y
+CONFIG_SND_IMX_SOC=y
+CONFIG_SND_SOC_EUKREA_TLV320=y
+CONFIG_SND_SOC_IMX_CS42888=y
+CONFIG_SND_SOC_IMX_WM8962=y
+CONFIG_SND_SOC_IMX_SGTL5000=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_IMX_WM8731=y
+CONFIG_USB=y
+CONFIG_USB_OTG=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_MXC=y
+CONFIG_USB_EHCI_HCD_PLATFORM=y
+CONFIG_USB_STORAGE=y
+CONFIG_USB_CHIPIDEA=y
+CONFIG_USB_CHIPIDEA_UDC=y
+CONFIG_USB_CHIPIDEA_HOST=y
+CONFIG_NOP_USB_XCEIV=y
+CONFIG_USB_MXS_PHY=y
+CONFIG_USB_GADGET=y
+CONFIG_USB_FSL_USB2=y
+CONFIG_USB_ZERO=m
+CONFIG_USB_AUDIO=m
+CONFIG_USB_ETH=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_GPU_VIV=y
+CONFIG_MXC_MIPI_CSI2=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_GPIO=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_INTF_DEV_UIE_EMUL=y
+CONFIG_RTC_DRV_EM3027=y
+CONFIG_RTC_DRV_MC13XXX=y
+CONFIG_RTC_DRV_MXC=y
+CONFIG_RTC_DRV_SNVS=y
+CONFIG_DMADEVICES=y
+CONFIG_MXC_PXP_V2=y
+CONFIG_IMX_SDMA=y
+CONFIG_MXS_DMA=y
+CONFIG_STAGING=y
+# CONFIG_IOMMU_SUPPORT is not set
+CONFIG_PWM=y
+CONFIG_PWM_IMX=y
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_FS_POSIX_ACL=y
+CONFIG_EXT4_FS_SECURITY=y
+CONFIG_QUOTA=y
+CONFIG_QUOTA_NETLINK_INTERFACE=y
+# CONFIG_PRINT_QUOTA_WARNING is not set
+CONFIG_AUTOFS4_FS=y
+CONFIG_FUSE_FS=y
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=y
+CONFIG_TMPFS=y
+CONFIG_TMPFS_XATTR=y
+CONFIG_JFFS2_FS=y
+CONFIG_UBIFS_FS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+CONFIG_ROOT_NFS=y
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_ASCII=y
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_UTF8=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_FTRACE is not set
+CONFIG_SECURITYFS=y
+CONFIG_CRYPTO_USER=y
+CONFIG_CRYPTO_TEST=m
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_CTS=y
+CONFIG_CRYPTO_ECB=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_SHA256=y
+CONFIG_CRYPTO_SHA512=y
+CONFIG_CRYPTO_TGR192=y
+CONFIG_CRYPTO_WP512=y
+CONFIG_CRYPTO_BLOWFISH=y
+CONFIG_CRYPTO_CAMELLIA=y
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_TWOFISH=y
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+CONFIG_CRYPTO_DEV_FSL_CAAM=y
+CONFIG_CRYPTO_DEV_FSL_CAAM_SM=y
+CONFIG_CRYPTO_DEV_FSL_CAAM_SM_TEST=y
+CONFIG_CRYPTO_DEV_FSL_CAAM_SECVIO=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC_T10DIF=y
+CONFIG_CRC7=m
+CONFIG_LIBCRC32C=m
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
diff --git a/recipes-kernel/linux/linux-compulab_4.1.15.bb b/recipes-kernel/linux/linux-compulab_4.1.15.bb
new file mode 100644
index 0000000..0ae3862
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab_4.1.15.bb
@@ -0,0 +1,98 @@
+require recipes-kernel/linux/linux-imx.inc
+require recipes-kernel/linux/linux-dtb.inc
+
+SUMMARY = "CompuLab 4.1.15 kernel"
+DESCRIPTION = "Linux kernel for CompuLab imx6(ul) boards."
+
+DEPENDS += "lzop-native bc-native"
+
+SRCBRANCH = "imx_4.1.15_1.0.0_ga"
+SRCREV = "77f61547834c4f127b44b13e43c59133a35880dc"
+LOCALVERSION = "-cl-1.0"
+
+SRC_URI += "file://0001-platform-add-depends-property-handler.patch"
+
+SRC_URI_append_cm-fx6 += "file://cm-fx6/defconfig \
+	file://cm-fx6/0001-ARM-dts-update-support-for-cm-fx6.patch \
+	file://cm-fx6/0002-ARM-i.MX6-cm-fx6-add-cm-fx6-platform-driver.patch \
+	file://cm-fx6/0003-ARM-i.MX6-cm-fx6-Add-defconfig.patch \
+	file://cm-fx6/0004-ARM-i.MX6-cm-fx6-add-gpc-node.patch \
+	file://cm-fx6/0005-ARM-i.MX6-audio-add-analog-audio-support.patch \
+	file://cm-fx6/0006-ARM-i.MX6-add-depends-property-to-gpmi-nand.patch \
+	file://cm-fx6/0007-ARM-i.MX6-update-defconfig-for-nand.patch \
+	file://cm-fx6/0008-ARM-i.MX6-add-mxc_dvi-driver.patch \
+	file://cm-fx6/0009-ARM-i.MX6-dts-refactoring-of-the-second-video-output.patch \
+	file://cm-fx6/0010-ARM-i.MX6-dts-ldo-hdmi-changes.patch \
+	file://cm-fx6/0011-ARM-i.MX6-dts-udshc3-set-polarity-value.patch \
+	file://cm-fx6/0012-ARM-i.MX6-dts-sata-refactoring.patch \
+	file://cm-fx6/0013-ARM-i.MX6-dts-ldb-refactoring.patch \
+	file://cm-fx6/0014-ARM-i.MX6-dts-enable-mipi_dsi.patch \
+	file://cm-fx6/0015-ARM-i.MX6-pcie-refactoring.patch \
+	file://cm-fx6/0016-ARM-i.MX6-dts-clean-up-unnecesary-code.patch \
+	file://cm-fx6/0017-ARM-i.MX6-update-defconfig.patch \
+	file://cm-fx6/0018-Bluetooth-btmrvl-disable-SD8787-AMP-device.patch \
+	file://cm-fx6/0019-ARM-i.MX6-HDMI-Fix-HDMI-PHY-init-hang.patch \
+"
+
+SRC_URI_append_cl-som-imx6ul += "file://cl-som-imx6ul/defconfig \
+	file://cl-som-imx6ul/0001-ARM-i.MX6UL-dts-Add-initial-support-for-cl-som-imx6u.patch \
+	file://cl-som-imx6ul/0002-ARM-i.MX6UL-add-defconfig-for-cl-som-imx6ul.patch \
+	file://cl-som-imx6ul/0003-ARM-i.MX6UL-Add-cl-som-imx6ul-platform-driver.patch \
+	file://cl-som-imx6ul/0004-Bluetooth-Add-tty-HCI-driver.patch \
+	file://cl-som-imx6ul/0005-btwilink-add-minimal-device-tree-support.patch \
+	file://cl-som-imx6ul/0006-ARM-i.MX6UL-cl-som-imx6ul-add-support-for-WiLink8.patch \
+	file://cl-som-imx6ul/0007-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-wilin.patch \
+	file://cl-som-imx6ul/0008-ARM-i.MX6UL-update-defconfig-for-cl-som-imx6ul.patch \
+	file://cl-som-imx6ul/0009-sil164-add-dvi-transmitter-simple-driver.patch \
+	file://cl-som-imx6ul/0010-ARM-imx6ul-dvi-enable-dvi-output-on-cl-sb-som.patch \
+	file://cl-som-imx6ul/0011-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-sil16.patch \
+	file://cl-som-imx6ul/0012-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-mcs78.patch \
+	file://cl-som-imx6ul/0013-ARM-i.MX6UL-rename-the-dts-files-of-cl-som-imx6ul.patch \
+	file://cl-som-imx6ul/0014-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-syste.patch \
+	file://cl-som-imx6ul/0015-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-ads78.patch \
+	file://cl-som-imx6ul/0016-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig-for-WiFi-.patch \
+	file://cl-som-imx6ul/0017-ARM-i.MX6UL-add-nand-support-for-cl-som-imx6ul.patch \
+	file://cl-som-imx6ul/0018-ARM-i.MX6UL-enable-cl-som-imx6ul-in-defconfig.patch \
+	file://cl-som-imx6ul/0019-ARM-i.MX6UL-dts-fix-the-spi-flash-compatibility-stri.patch \
+	file://cl-som-imx6ul/0020-ARM-i.MX6UL-add-depends-property-to-gpmi-nand.patch \
+	file://cl-som-imx6ul/0021-ARM-i.MX6UL-dts-set-timing1-as-default-for-lcdif.patch \
+	file://cl-som-imx6ul/0022-ARM-i.MX6UL-update-cl-som-imx6ul-defconfig.patch \
+	file://cl-som-imx6ul/0023-ARM-i.MX6UL-dts-fix-u-boot-environment-size.patch \
+	file://cl-som-imx6ul/0024-ARM-i.MX6UL-dts-update-cl-som-imx6ul-model-string.patch \
+	file://cl-som-imx6ul/0025-ARM-i.MX6UL-fix-usdhc1-cd-wp-gpio-settings.patch \
+	file://cl-som-imx6ul/0026-ARM-i.MX6UL-move-tsc2046-to-the-ecspi4-bus.patch \
+	file://cl-som-imx6ul/0027-ARM-i.MX6UL-enable-flexcan1-for-cl-som-imx6ul.patch \
+	file://cl-som-imx6ul/0028-ARM-i.MX6UL-add-aliases-for-cl-som-imx6ul-devices.patch \
+	file://cl-som-imx6ul/0029-ARM-i.MX6UL-adjust-usdhc2-pad-conf-values.patch \
+	file://cl-som-imx6ul/0030-ARM-i.MX6UL-adjust-usdhc1-pad-conf-values.patch \
+	file://cl-som-imx6ul/0031-ARM-i.MX6UL-audio-0-add-analog-audio-support-switch.patch \
+	file://cl-som-imx6ul/0032-ARM-i.MX6UL-audio-1-add-analog-audio-support.patch \
+	file://cl-som-imx6ul/0033-ARM-i.MX6UL-audio-2-adjust-sai2.MCLK-direction.patch \
+	file://cl-som-imx6ul/0034-ARM-i.MX6UL-audio-3-update-defconfig-for-analog-audi.patch \
+	file://cl-som-imx6ul/0035-ARM-i.MX6UL-update-defconfig-for-lcdif.patch \
+	file://cl-som-imx6ul/0036-ARM-i.MX6UL-enable-sdma.patch \
+	file://cl-som-imx6ul/0037-ARM-i.MX6UL-fix-gpmi-depends-string.patch \
+	file://cl-som-imx6ul/0038-ARM-i.MX6UL-disable-ocotp-for-wilink.patch \
+	file://cl-som-imx6ul/0039-ARM-i.MX6UL-wm8731-refactoring.patch \
+"
+
+COMPATIBLE_MACHINE = "(cm-fx6|cl-som-imx6ul)"
+
+inherit fsl-vivante-kernel-driver-handler
+
+IMX_UAPI_HEADERS = "mxc_asrc.h mxc_dcic.h mxcfb.h mxc_mlb.h mxc_sim_interface.h \
+                    mxc_v4l2.h ipu.h videodev2.h pxp_device.h pxp_dma.h isl29023.h"
+
+do_install_append () {
+   # Install i.MX specific uapi headers
+   oe_runmake headers_install INSTALL_HDR_PATH=${B}${exec_prefix}
+   install -d ${D}${exec_prefix}/include/linux
+   for UAPI_HDR in ${IMX_UAPI_HEADERS}; do
+       find ${B}${exec_prefix}/include -name ${UAPI_HDR} -exec cp {} ${D}${exec_prefix}/include/linux \;
+       ls ${D}${exec_prefix}/include/linux
+       echo "copy ${UAPI_HDR} done"
+   done
+}
+
+PACKAGES += "linux-imx-soc-headers"
+FILES_linux-imx-soc-headers = "${exec_prefix}/include"
-- 
1.9.1



More information about the meta-freescale mailing list