[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 = <®_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 = <ðphy0>;
++ 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 = <®_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 = <®_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 = <ðphy0>;
+- 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 = <®_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 = <®_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 = <ðphy0>;
++ 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 = <®_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 = <®_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 = <ðphy0>;
+- 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 = <®_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 = <®_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 = <ðphy0>;
++ 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 = <®_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 = <®_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 = <®_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 = <®_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 = <®_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 = <®_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 = <®_usb_otg_vbus>;
++ pinctrl-names = "default";
++ pinctrl-0 = <&pinctrl_usbotg>;
++ dr_mode = "otg";
++ status = "okay";
++};
++
++/* usb hub1 */
++&usbh1 {
++ vbus-supply = <®_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 = <®_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 = <®_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 = <®_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 = <®_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 = <®_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