[meta-freescale] [meta-fsl-arm-extra][PATCH v2 4/4] linux-compulab: add cm-fx6 3.14.28 kernel configuration files

Valentin Raevsky valentin at compulab.co.il
Thu Apr 16 06:32:44 PDT 2015


Add cm-fx6 kernel configuration files.
This is a fork of the linux-imx 3.14.28.ga with the CompuLab patches
for cm-fx6 boards.

Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
---
 ...-i.MX6-dts-Add-initial-support-for-cm-fx6.patch |  399 ++++++
 .../0002-ARM-i.MX6-cm-fx6-Add-defconfig.patch      |  456 +++++++
 .../0003-igb-Enable-random-mac-address.patch       |   32 +
 .../0004-ARM-i.MX6-cm-fx6-update-defconfig.patch   |   27 +
 ...05-ARM-i.MX6-dts-add-HDMI-and-DVI-support.patch |  101 ++
 ...0006-ARM-i.MX6-dts-add-HDMI-Audio-support.patch |   40 +
 .../0007-ARM-i.MX6-dts-add-SPDIF-support.patch     |   69 +
 .../0008-ARM-i.MX6-dts-add-Power-Button.patch      |   36 +
 ....MX6-dts-Enable-uart2-as-a-serial-console.patch |   50 +
 ...-dts-add-pcie-power-reset-gpio-definition.patch |   44 +
 ...MX6-dts-add-onboard-SSD-pin-configuration.patch |   46 +
 ...MX6-dts-add-onboard-SSD-power-up-sequence.patch |   92 ++
 ...X6-dts-add-audio-mux-pinmux-configuration.patch |   47 +
 ...14-ARM-i.MX6-dts-add-analog-audio-support.patch |   67 +
 ...-i.MX6-ASoC-add-imx-wm8731-machine-driver.patch |  573 ++++++++
 ...6-ASoC-add-imx-wm8731-master-mode-support.patch |  335 +++++
 .../0017-ARM-i.MX6-dts-enable-v4l2-output.patch    |   31 +
 ...X6-dts-some-small-changes-in-the-dts-file.patch |   52 +
 ...ine-the-device-mac-address-in-device-tree.patch |   79 ++
 .../0020-ARM-i.MX6-cm-fx6-update-defconfig.patch   |   87 ++
 ...ts-refactoring-the-cm-fx6-device-tree-fil.patch | 1112 +++++++++++++++
 ...ts-refactoring-of-the-cm-fx6-device-tree-.patch | 1422 ++++++++++++++++++++
 ...ts-pcie-power-on-gpio-to-a-fixed-regulato.patch |   46 +
 .../0024-ARM-i.MX6-dts-add-i2c1-status-okay.patch  |   45 +
 ...6-dts-add-local-mac-address-field-for-fec.patch |   28 +
 ...-ARM-mxs-change-usb-phy-test-clock-gating.patch |   36 +
 ...i.MX6-dts-fix-the-cm-fx6-operation-points.patch |   51 +
 ...SoC-fix-build-warnings-and-update-include.patch |   71 +
 ...0029-ARM-i.MX6-dts-change-issd-gpio-order.patch |   67 +
 ...RM-i.MX6-dts-add-missing-WiFi-BT-pinmuxes.patch |   30 +
 ...M-i.MX6-cm-fx6-enable-i2cmux-in-defconfig.patch |   29 +
 ...X6-sb-fx6m-Fix-uart1-rts-cts-flow-control.patch |   53 +
 ...dts-add-i2cmux-support-for-SBC-FX6-boards.patch |  172 +++
 .../0034-ARM-i.MX6-dts-add-dvi-edid-GPIOs.patch    |   46 +
 ...0035-video-mxc-IPUv3-fb-restore-sync-bits.patch |  114 ++
 ...ts-add-backlight-support-for-SBC-FX6-boar.patch |   48 +
 ...ts-rearrangement-of-the-frame-buffers-def.patch |   70 +
 ...i.MX6-iomux-raise-DSE-for-display-signals.patch |   73 +
 ...MX6-cm-fx6-add-video-mode-for-KD050C-WVGA.patch |   46 +
 ...RM-i.MX6-cm-fx6-refactor-the-cm-fx6-iomux.patch |   54 +
 ...i.MX6-dts-gpmi-separate-kernel-and-rootfs.patch |   37 +
 .../0042-ARM-dts-cm-fx6-enable-can-bus.patch       |   29 +
 ...ts-cm-fx6-add-tsc2046-touchscreen-support.patch |   85 ++
 ...b-fx6x-refactoring-of-the-usdhc3-definiti.patch |   84 ++
 ...6-cm-fx6-fix-up-incorrect-compatibilities.patch |   47 +
 ...0046-ARM-i.MX6-dts-fix-include-file-order.patch |  129 ++
 ...M-i.MX6-dts-rename-the-sb-fx6-board-files.patch |  570 ++++++++
 ...MX6-dts-refactor-the-sbc-fx6-target-files.patch |  243 ++++
 ...M-i.MX6-cm-fx6-separate-DL-and-Quad-stuff.patch | 1182 ++++++++++++++++
 ...6-dts-add-initial-support-for-cm-fx6-DL-S.patch |   53 +
 ....MX6-dts-add-board-files-for-sbc-fx6-DL-S.patch |   78 ++
 ...fx6-add-build-targets-for-cm-fx6-flavour-.patch |   55 +
 ...m-fx6-change-the-hdmi_core-ipu-connection.patch |   47 +
 ...X6-dts-add-ldb-support-for-SBC-FX6-boards.patch |   90 ++
 ...fx6-IOMUXC_GPR1-6-7-to-set-correct-values.patch |   47 +
 .../0056-i2c-fix-i2c_of-include.patch              |   30 +
 .../0057-ARM-dts-cm-fx6-fix-missing-defines.patch  |   66 +
 .../0058-imx6-hdmi-add-missing-definition.patch    |   27 +
 .../0059-ARM-i.MX6-cm-fx6-update-defconfig.patch   |  211 +++
 .../linux/linux-compulab-3.14.28/defconfig         |  443 ++++++
 recipes-kernel/linux/linux-compulab_3.14.28.bb     |   75 ++
 61 files changed, 9904 insertions(+)
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0001-ARM-i.MX6-dts-Add-initial-support-for-cm-fx6.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0002-ARM-i.MX6-cm-fx6-Add-defconfig.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0003-igb-Enable-random-mac-address.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0004-ARM-i.MX6-cm-fx6-update-defconfig.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0005-ARM-i.MX6-dts-add-HDMI-and-DVI-support.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0006-ARM-i.MX6-dts-add-HDMI-Audio-support.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0007-ARM-i.MX6-dts-add-SPDIF-support.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0008-ARM-i.MX6-dts-add-Power-Button.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0009-ARM-i.MX6-dts-Enable-uart2-as-a-serial-console.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0010-ARM-i.MX6-dts-add-pcie-power-reset-gpio-definition.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0011-ARM-i.MX6-dts-add-onboard-SSD-pin-configuration.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0012-ARM-i.MX6-dts-add-onboard-SSD-power-up-sequence.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0013-ARM-i.MX6-dts-add-audio-mux-pinmux-configuration.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0014-ARM-i.MX6-dts-add-analog-audio-support.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0015-ARM-i.MX6-ASoC-add-imx-wm8731-machine-driver.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0016-ARM-i.MX6-ASoC-add-imx-wm8731-master-mode-support.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0017-ARM-i.MX6-dts-enable-v4l2-output.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0018-ARM-i.MX6-dts-some-small-changes-in-the-dts-file.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0019-igb-Define-the-device-mac-address-in-device-tree.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0020-ARM-i.MX6-cm-fx6-update-defconfig.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0021-ARM-i.MX6-dts-refactoring-the-cm-fx6-device-tree-fil.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0022-ARM-i.MX6-dts-refactoring-of-the-cm-fx6-device-tree-.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0023-ARM-i.MX6-dts-pcie-power-on-gpio-to-a-fixed-regulato.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0024-ARM-i.MX6-dts-add-i2c1-status-okay.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0025-ARM-i.MX6-dts-add-local-mac-address-field-for-fec.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0026-ARM-mxs-change-usb-phy-test-clock-gating.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0027-ARM-i.MX6-dts-fix-the-cm-fx6-operation-points.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0028-ARM-i.MX6-ASoC-fix-build-warnings-and-update-include.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0029-ARM-i.MX6-dts-change-issd-gpio-order.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0030-ARM-i.MX6-dts-add-missing-WiFi-BT-pinmuxes.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0031-ARM-i.MX6-cm-fx6-enable-i2cmux-in-defconfig.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0032-ARM-i.MX6-sb-fx6m-Fix-uart1-rts-cts-flow-control.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0033-ARM-i.MX6-dts-add-i2cmux-support-for-SBC-FX6-boards.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0034-ARM-i.MX6-dts-add-dvi-edid-GPIOs.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0035-video-mxc-IPUv3-fb-restore-sync-bits.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0036-ARM-i.MX6-dts-add-backlight-support-for-SBC-FX6-boar.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0037-ARM-i.MX6-dts-rearrangement-of-the-frame-buffers-def.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0038-ARM-i.MX6-iomux-raise-DSE-for-display-signals.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0039-ARM-i.MX6-cm-fx6-add-video-mode-for-KD050C-WVGA.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0040-ARM-i.MX6-cm-fx6-refactor-the-cm-fx6-iomux.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0041-ARM-i.MX6-dts-gpmi-separate-kernel-and-rootfs.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0042-ARM-dts-cm-fx6-enable-can-bus.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0043-ARM-dts-cm-fx6-add-tsc2046-touchscreen-support.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0044-ARM-i.MX6-sb-fx6x-refactoring-of-the-usdhc3-definiti.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0045-ARM-i.MX6-cm-fx6-fix-up-incorrect-compatibilities.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0046-ARM-i.MX6-dts-fix-include-file-order.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0047-ARM-i.MX6-dts-rename-the-sb-fx6-board-files.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0048-ARM-i.MX6-dts-refactor-the-sbc-fx6-target-files.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0049-ARM-i.MX6-cm-fx6-separate-DL-and-Quad-stuff.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0050-ARM-i.MX6-dts-add-initial-support-for-cm-fx6-DL-S.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0051-ARM-i.MX6-dts-add-board-files-for-sbc-fx6-DL-S.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0052-ARM-dts-cm-fx6-add-build-targets-for-cm-fx6-flavour-.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0053-ARM-dts-cm-fx6-change-the-hdmi_core-ipu-connection.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0054-ARM-i.MX6-dts-add-ldb-support-for-SBC-FX6-boards.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0055-ARM-dts-cm-fx6-IOMUXC_GPR1-6-7-to-set-correct-values.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0056-i2c-fix-i2c_of-include.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0057-ARM-dts-cm-fx6-fix-missing-defines.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0058-imx6-hdmi-add-missing-definition.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/0059-ARM-i.MX6-cm-fx6-update-defconfig.patch
 create mode 100644 recipes-kernel/linux/linux-compulab-3.14.28/defconfig
 create mode 100644 recipes-kernel/linux/linux-compulab_3.14.28.bb

diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0001-ARM-i.MX6-dts-Add-initial-support-for-cm-fx6.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0001-ARM-i.MX6-dts-Add-initial-support-for-cm-fx6.patch
new file mode 100644
index 0000000..1156b83
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0001-ARM-i.MX6-dts-Add-initial-support-for-cm-fx6.patch
@@ -0,0 +1,399 @@
+From af4b4f2854d6223ba2f1235400f8e8dac660a6a2 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Thu, 15 May 2014 17:18:11 +0300
+Subject: [PATCH 01/59] ARM: i.MX6: dts: Add initial support for cm-fx6
+
+Add initial support for cm-fx6 module.
+
+This patch configures:
+1) serial console
+2) hearbeat led
+3) FreeScale NIC
+4) pcie
+5) Intel I210 NIC
+6) wif/bt
+7) sata
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dts |  368 ++++++++++++++++++++++++++++++++++++
+ 1 file changed, 368 insertions(+)
+ create mode 100644 arch/arm/boot/dts/imx6q-cm-fx6.dts
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+new file mode 100644
+index 0000000..1f06d95
+--- /dev/null
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+@@ -0,0 +1,368 @@
++/*
++* Copyright 2013 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"
++
++/ {
++   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";
++      };
++   };
++
++   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;
++      };
++
++      /* 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;
++      };
++
++      /* 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>;
++      };
++   };
++};
++
++&iomuxc {
++   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
++            MX6QDL_PAD_GPIO_16__ENET_REF_CLK   0x4001b0a8
++         >;
++      };
++      
++      /* 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
++            MX6QDL_PAD_SD4_DAT0__NAND_DQS      0x00b1
++         >;
++      };
++
++      /* pins for i2c1 */
++      pinctrl_i2c1: i2c1grp {
++         fsl,pins = <
++            MX6QDL_PAD_EIM_D21__I2C1_SCL 0x4001b8b1
++            MX6QDL_PAD_EIM_D28__I2C1_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
++         >;
++      };
++
++      /* 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 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
++         >;
++      };
++   };
++};
++
++/* 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>;
++      };
++   };
++};
++
++/* eth0 */
++&fec {
++   pinctrl-names = "default";
++   pinctrl-0 = <&pinctrl_enet>;
++   phy-mode = "rgmii";
++   status = "okay";
++};
++
++/* nand */
++&gpmi {
++   pinctrl-names = "default";
++   pinctrl-0 = <&pinctrl_gpmi_nand>;
++   status = "okay";
++};
++
++/* i2c1 */
++&i2c1 {
++   pinctrl-names = "default";
++   pinctrl-0 = <&pinctrl_i2c1>;
++   status = "okay";
++
++   eeprom at 50 {
++      compatible = "at24,24c02";
++      reg = <0x50>;
++      pagesize = <16>;
++   };
++
++   rtc at 56 {
++      compatible = "emmicro,em3027";
++      reg = <0x56>;
++   };
++};
++
++/* i2c2 */
++&i2c2 {
++   pinctrl-names = "default";
++   pinctrl-0 = <&pinctrl_i2c2>;
++   status = "okay";
++};
++
++/* i2c3 */
++&i2c3 {
++   pinctrl-names = "default";
++   pinctrl-0 = <&pinctrl_i2c3>;
++   status = "okay";
++
++   eeprom at 50 {
++      compatible = "at24,24c02";
++      reg = <0x50>;
++      pagesize = <16>;
++   };
++};
++
++/* eth1 */ 
++&pcie {
++   reset-gpio = <&gpio1 26 0>;
++   status = "okay";
++};
++
++/* sata */
++&sata {
++   status = "okay";
++};
++
++/* rear serial console */
++&uart2 {
++   pinctrl-names = "default";
++   pinctrl-0 = <&pinctrl_uart2_2>;
++   fsl,dte-mode;
++   fsl,uart-has-rtscts;
++   dma-names = "rx", "tx";
++   dmas = <&sdma 27 4 0>, <&sdma 28 4 0>;
++   status = "okay";
++};
++
++/* console */
++&uart4 {
++   pinctrl-names = "default";
++   pinctrl-0 = <&pinctrl_uart4>;
++   status = "okay";
++};
++
++/* usb otg */
++&usbotg {
++   vbus-supply = <&reg_usb_otg_vbus>;
++   pinctrl-names = "default";
++   pinctrl-0 = <&pinctrl_usbotg>;
++   dr_mode = "otg";
++   status = "okay";
++};
++
++/* usb hub1 */
++&usbh1 {
++   vbus-supply = <&reg_usb_h1_vbus>;
++   pinctrl-names = "default";
++   pinctrl-0 = <&pinctrl_usbh1>;
++   status = "okay";
++};
++
++/* wifi/bt */
++&usdhc1 {
++   pinctrl-names = "default";
++   pinctrl-0 = <&pinctrl_usdhc1>;
++   non-removable;
++   vmmc-supply = <&awnh387_npoweron>;
++   vmmc_aux-supply = <&awnh387_wifi_nreset>;
++   status = "okay";
++};
++
++/* mmc */
++&usdhc3 {
++   pinctrl-names = "default";
++   pinctrl-0 = <&pinctrl_usdhc3>;
++   vmmc-supply = <&reg_3p3v>;
++   status = "okay";
++};
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0002-ARM-i.MX6-cm-fx6-Add-defconfig.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0002-ARM-i.MX6-cm-fx6-Add-defconfig.patch
new file mode 100644
index 0000000..4428146
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0002-ARM-i.MX6-cm-fx6-Add-defconfig.patch
@@ -0,0 +1,456 @@
+From 591aecd36eb5e5eaf189bfce36db616425c00959 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Thu, 15 May 2014 17:25:07 +0300
+Subject: [PATCH 02/59] 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 |  434 +++++++++++++++++++++++++++++++++++++
+ 1 file changed, 434 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..92c3da1
+--- /dev/null
++++ b/arch/arm/configs/cm_fx6_defconfig
+@@ -0,0 +1,434 @@
++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_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_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_CMDLINE="noinitrd console=ttymxc0,115200"
++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_VLAN_8021Q=m
++CONFIG_VLAN_8021Q_GVRP=y
++CONFIG_CAN=y
++CONFIG_CAN_FLEXCAN=y
++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_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_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_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_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_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=m
++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_IPU_DEVICE_QUEUE_SDC=m
++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_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_EHCI_HCD=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_ZERO=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_GPIO=y
++CONFIG_RTC_CLASS=y
++CONFIG_RTC_INTF_DEV_UIE_EMUL=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_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.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0003-igb-Enable-random-mac-address.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0003-igb-Enable-random-mac-address.patch
new file mode 100644
index 0000000..7fb766b
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0003-igb-Enable-random-mac-address.patch
@@ -0,0 +1,32 @@
+From 0a691facfb253b42cdaeaedd77477d13c6fa99f8 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Thu, 15 May 2014 17:26:30 +0300
+Subject: [PATCH 03/59] igb: Enable random mac address
+
+Enable random mac address in order to let the driver up
+if eeprom values are incorrect.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ drivers/net/ethernet/intel/igb/igb_main.c |    5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
+index 206e79d..2472835 100644
+--- a/drivers/net/ethernet/intel/igb/igb_main.c
++++ b/drivers/net/ethernet/intel/igb/igb_main.c
+@@ -2387,6 +2387,11 @@ static int igb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
+ 	if (hw->mac.ops.read_mac_addr(hw))
+ 		dev_err(&pdev->dev, "NVM Read Error\n");
+ 
++	if (!is_valid_ether_addr(hw->mac.addr)) {
++		dev_info(&pdev->dev, "Random MAC Address\n");
++		random_ether_addr(hw->mac.addr);
++	}
++
+ 	memcpy(netdev->dev_addr, hw->mac.addr, netdev->addr_len);
+ 
+ 	if (!is_valid_ether_addr(netdev->dev_addr)) {
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0004-ARM-i.MX6-cm-fx6-update-defconfig.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0004-ARM-i.MX6-cm-fx6-update-defconfig.patch
new file mode 100644
index 0000000..d9c90b0
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0004-ARM-i.MX6-cm-fx6-update-defconfig.patch
@@ -0,0 +1,27 @@
+From f02b927b88856dde0ec988705e6445159bb272ae Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 22 Jun 2014 18:03:27 +0300
+Subject: [PATCH 04/59] ARM: i.MX6: cm-fx6: update defconfig
+
+Enable EM3027 RTC
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/configs/cm_fx6_defconfig |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/arm/configs/cm_fx6_defconfig b/arch/arm/configs/cm_fx6_defconfig
+index 92c3da1..eb6d9cb 100644
+--- a/arch/arm/configs/cm_fx6_defconfig
++++ b/arch/arm/configs/cm_fx6_defconfig
+@@ -347,6 +347,7 @@ CONFIG_LEDS_TRIGGERS=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
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0005-ARM-i.MX6-dts-add-HDMI-and-DVI-support.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0005-ARM-i.MX6-dts-add-HDMI-and-DVI-support.patch
new file mode 100644
index 0000000..8d133e4
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0005-ARM-i.MX6-dts-add-HDMI-and-DVI-support.patch
@@ -0,0 +1,101 @@
+From 80e3270f42e72dc01f8c2235fbdaf5fa94dd6fce Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Mon, 23 Jun 2014 13:53:35 +0300
+Subject: [PATCH 05/59] ARM: i.MX6: dts: add HDMI and DVI support
+
+Add HDMI and DVI support on IPU1 and IPU2, define two frame buffers.
+Enable starting X with fbdev.
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dts |   65 +++++++++++++++++++++++++++++++++++-
+ 1 file changed, 64 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+index 1f06d95..018c3b1 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+@@ -86,6 +86,44 @@
+          startup-delay-us = <10000>;
+       };
+    };
++
++   aliases {
++	mxcfb0 = &mxcfb1;
++	mxcfb1 = &mxcfb2;
++   };
++
++   mxcfb1: fb at 0 {
++	compatible = "fsl,mxc_sdc_fb";
++	disp_dev = "hdmi";
++	interface_pix_fmt = "RGB24";
++	mode_str ="1920x1080M at 60";
++	default_bpp = <24>;
++	int_clk = <0>;
++	late_init = <0>;
++	status = "disabled";
++   };
++
++   mxcfb2: fb at 1 {
++	compatible = "fsl,mxc_sdc_fb";
++	disp_dev = "lcd";
++	interface_pix_fmt = "RGB24";
++	mode_str ="1920x1080M at 60";
++	default_bpp = <24>;
++	int_clk = <0>;
++	late_init = <0>;
++	status = "disabled";
++   };
++
++    lcd at 0 {
++	compatible = "fsl,lcd";
++	ipu_id = <0>;
++	disp_id = <0>;
++	default_ifmt = "RGB24";
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_ipu1_1>;
++	status = "okay";
++   };
++
+ };
+ 
+ &iomuxc {
+@@ -287,7 +325,7 @@
+ &i2c2 {
+    pinctrl-names = "default";
+    pinctrl-0 = <&pinctrl_i2c2>;
+-   status = "okay";
++   /* status = "okay"; */
+ };
+ 
+ /* i2c3 */
+@@ -366,3 +404,28 @@
+    vmmc-supply = <&reg_3p3v>;
+    status = "okay";
+ };
++
++&mxcfb1 {
++	status = "okay";
++};
++
++&mxcfb2 {
++	status = "okay";
++};
++
++&hdmi_core {
++	ipu_id = <1>;
++	disp_id = <0>;
++	status = "okay";
++};
++
++&hdmi_video {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_hdmi_hdcp_1>;
++	fsl,hdcp;
++	status = "okay";
++};
++
++&hdmi_audio {
++/*	status = "okay"; */
++};
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0006-ARM-i.MX6-dts-add-HDMI-Audio-support.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0006-ARM-i.MX6-dts-add-HDMI-Audio-support.patch
new file mode 100644
index 0000000..a31a977
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0006-ARM-i.MX6-dts-add-HDMI-Audio-support.patch
@@ -0,0 +1,40 @@
+From 608c9ed0c20fe1258b8982e3ce452482aa1c002e Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Mon, 23 Jun 2014 15:29:21 +0300
+Subject: [PATCH 06/59] ARM: i.MX6: dts: add HDMI-Audio support
+
+Add HDMI-Audio support.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dts |    9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+index 018c3b1..76b4b0c 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+@@ -92,6 +92,13 @@
+ 	mxcfb1 = &mxcfb2;
+    };
+ 
++   sound-hdmi {
++	compatible = "fsl,imx6q-audio-hdmi",
++		"fsl,imx-audio-hdmi";
++	model = "imx-audio-hdmi";
++	hdmi-controller = <&hdmi_audio>;
++   };
++
+    mxcfb1: fb at 0 {
+ 	compatible = "fsl,mxc_sdc_fb";
+ 	disp_dev = "hdmi";
+@@ -427,5 +434,5 @@
+ };
+ 
+ &hdmi_audio {
+-/*	status = "okay"; */
++	status = "okay";
+ };
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0007-ARM-i.MX6-dts-add-SPDIF-support.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0007-ARM-i.MX6-dts-add-SPDIF-support.patch
new file mode 100644
index 0000000..24e5361
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0007-ARM-i.MX6-dts-add-SPDIF-support.patch
@@ -0,0 +1,69 @@
+From b0e655dbaddb94c4b7c73c00140b43fb0b1ecd36 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Mon, 23 Jun 2014 16:30:18 +0300
+Subject: [PATCH 07/59] ARM: i.MX6: dts: add SPDIF support
+
+Add SPDIF support.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dts |   25 ++++++++++++++++++++++++-
+ 1 file changed, 24 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+index 76b4b0c..3f73b83 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+@@ -99,6 +99,15 @@
+ 	hdmi-controller = <&hdmi_audio>;
+    };
+ 
++   sound-spdif {
++	compatible = "fsl,imx-audio-spdif",
++		"fsl,imx-sabreauto-spdif";
++	model = "imx-spdif";
++	spdif-controller = <&spdif>;
++	spdif-out;
++	spdif-in;
++   };
++
+    mxcfb1: fb at 0 {
+ 	compatible = "fsl,mxc_sdc_fb";
+ 	disp_dev = "hdmi";
+@@ -153,7 +162,6 @@
+             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
+          >;
+       };
+       
+@@ -260,6 +268,15 @@
+             MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
+          >;
+       };
++
++      /* pins for spdif */
++      pinctrl_spdif: spdifgrp {
++	fsl,pins = <
++		MX6QDL_PAD_GPIO_16__SPDIF_IN  0x1b0b0
++		MX6QDL_PAD_GPIO_19__SPDIF_OUT 0x1b0b0
++	>;
++     };
++
+    };
+ };
+ 
+@@ -436,3 +453,9 @@
+ &hdmi_audio {
+ 	status = "okay";
+ };
++
++&spdif {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_spdif>;
++	status = "okay";
++};
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0008-ARM-i.MX6-dts-add-Power-Button.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0008-ARM-i.MX6-dts-add-Power-Button.patch
new file mode 100644
index 0000000..d463399
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0008-ARM-i.MX6-dts-add-Power-Button.patch
@@ -0,0 +1,36 @@
+From a15ad25075d0d78f4462521260902c0f03d6a343 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Tue, 24 Jun 2014 15:35:52 +0300
+Subject: [PATCH 08/59] ARM: i.MX6: dts: add "Power Button"
+
+Add "Power Button" by means of GPIO
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dts |   10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+index 3f73b83..0abb116 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+@@ -87,6 +87,16 @@
+       };
+    };
+ 
++   gpio-keys {
++	compatible = "gpio-keys";
++	power {
++		label = "Power Button";
++		gpios = <&gpio1 29 1>;
++		linux,code = <116>; /* KEY_POWER */
++		gpio-key,wakeup;
++	};
++   };
++
+    aliases {
+ 	mxcfb0 = &mxcfb1;
+ 	mxcfb1 = &mxcfb2;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0009-ARM-i.MX6-dts-Enable-uart2-as-a-serial-console.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0009-ARM-i.MX6-dts-Enable-uart2-as-a-serial-console.patch
new file mode 100644
index 0000000..cf06c29
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0009-ARM-i.MX6-dts-Enable-uart2-as-a-serial-console.patch
@@ -0,0 +1,50 @@
+From 0d82c1831d3fe3cf53e6b8d0435ff6bd621e07d2 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 20 Jul 2014 10:42:20 +0300
+Subject: [PATCH 09/59] ARM: i.MX6: dts: Enable uart2 as a serial console
+
+Enable ttymxc1 for use as a serial console:
+1) Add the correct uart2 pinmux configuration.
+2) Disable uart2 dte mode.
+	It allows running 'getty' and 'login' on the ttymxc1.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dts |   14 ++++++++++++--
+ 1 file changed, 12 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+index 0abb116..16cefe0 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+@@ -287,6 +287,16 @@
+ 	>;
+      };
+ 
++	/* 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
++	>;
++	};
++
+    };
+ };
+ 
+@@ -389,8 +399,8 @@
+ /* rear serial console */
+ &uart2 {
+    pinctrl-names = "default";
+-   pinctrl-0 = <&pinctrl_uart2_2>;
+-   fsl,dte-mode;
++   pinctrl-0 = <&pinctrl_uart2>;
++   /* fsl,dte-mode; */
+    fsl,uart-has-rtscts;
+    dma-names = "rx", "tx";
+    dmas = <&sdma 27 4 0>, <&sdma 28 4 0>;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0010-ARM-i.MX6-dts-add-pcie-power-reset-gpio-definition.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0010-ARM-i.MX6-dts-add-pcie-power-reset-gpio-definition.patch
new file mode 100644
index 0000000..e055a3c
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0010-ARM-i.MX6-dts-add-pcie-power-reset-gpio-definition.patch
@@ -0,0 +1,44 @@
+From 11f421d3b4a9f4b1d256fa6bc6b6b9c313cf1b93 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 20 Jul 2014 10:51:44 +0300
+Subject: [PATCH 10/59] ARM: i.MX6: dts: add pcie power/reset gpio definition
+
+Add pcie power/reset gpio definition.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dts |   10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+index 16cefe0..592db30 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+@@ -297,6 +297,13 @@
+ 	>;
+ 	};
+ 
++	/* pins for pcie */
++	pinctrl_pcie: pciegrp {
++		fsl,pins = <
++			MX6QDL_PAD_ENET_RXD1__GPIO1_IO26 0x80000000
++			MX6QDL_PAD_EIM_CS1__GPIO2_IO24 0x80000000
++	>;
++     };
+    };
+ };
+ 
+@@ -387,7 +394,10 @@
+ 
+ /* eth1 */ 
+ &pcie {
++   pinctrl-names = "default";
++   pinctrl-0 = <&pinctrl_pcie>;
+    reset-gpio = <&gpio1 26 0>;
++   power-on-gpio = <&gpio2 24 0>;
+    status = "okay";
+ };
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0011-ARM-i.MX6-dts-add-onboard-SSD-pin-configuration.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0011-ARM-i.MX6-dts-add-onboard-SSD-pin-configuration.patch
new file mode 100644
index 0000000..37b4949
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0011-ARM-i.MX6-dts-add-onboard-SSD-pin-configuration.patch
@@ -0,0 +1,46 @@
+From 811721a51deec0f751d98ba438d763c4b9d1f736 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 20 Jul 2014 10:53:32 +0300
+Subject: [PATCH 11/59] ARM: i.MX6: dts: add onboard SSD pin configuration
+
+Add onboard SSD pin configuration.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dts |   20 ++++++++++++++++++++
+ 1 file changed, 20 insertions(+)
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+index 592db30..0dfffa9 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+@@ -153,6 +153,26 @@
+ };
+ 
+ &iomuxc {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_hog>;
++
++	hog {
++		pinctrl_hog: hoggrp {
++			fsl,pins = <
++				/* 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
++			>;
++		};
++	};
++
+    imx6q-cm-fx6 {
+        /* pins for eth0 */
+       pinctrl_enet: enetgrp {
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0012-ARM-i.MX6-dts-add-onboard-SSD-power-up-sequence.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0012-ARM-i.MX6-dts-add-onboard-SSD-power-up-sequence.patch
new file mode 100644
index 0000000..e2e8fd2
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0012-ARM-i.MX6-dts-add-onboard-SSD-power-up-sequence.patch
@@ -0,0 +1,92 @@
+From bf5a6721257ec96c1626f295851014b373a3a20a Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 20 Jul 2014 10:54:43 +0300
+Subject: [PATCH 12/59] ARM: i.MX6: dts: add onboard SSD power up sequence
+
+Add onboard SSD power up sequence.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dts |   66 ++++++++++++++++++++++++++++++++++++
+ 1 file changed, 66 insertions(+)
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+index 0dfffa9..286b03e 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+@@ -85,6 +85,72 @@
+          gpio = <&gpio6 16 0>;
+          startup-delay-us = <10000>;
+       };
++
++      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;
++      };
++
++      reg_sata_nrstdly: sata_nrstdly {
++	      compatible = "regulator-fixed";
++	      regulator-name = "cm_fx6_sata_nrstdly";
++	      regulator-min-microvolt = <3300000>;
++	      regulator-max-microvolt = <3300000>;
++	      gpio = <&gpio6 6 0>;
++	      startup-delay-us = <100>;
++	      enable-active-high;
++	      vin-supply = <&reg_sata_phy_slp>;
++      };
++
++      reg_sata_pwren: sata_pwren {
++	      compatible = "regulator-fixed";
++	      regulator-name = "cm_fx6_sata_pwren";
++	      regulator-min-microvolt = <3300000>;
++	      regulator-max-microvolt = <3300000>;
++	      gpio = <&gpio1 28 0>;
++	      startup-delay-us = <100>;
++	      enable-active-high;
++	      vin-supply = <&reg_sata_nrstdly>;
++      };
++
++      reg_sata_nstandby1: sata_nstandby1 {
++	      compatible = "regulator-fixed";
++	      regulator-name = "cm_fx6_sata_nstandby1";
++	      regulator-min-microvolt = <3300000>;
++	      regulator-max-microvolt = <3300000>;
++	      gpio = <&gpio3 20 0>;
++	      startup-delay-us = <100>;
++	      enable-active-high;
++	      vin-supply = <&reg_sata_pwren>;
++      };
++
++      reg_sata_nstandby2: sata_nstandby2 {
++	      compatible = "regulator-fixed";
++	      regulator-name = "cm_fx6_sata_nstandby2";
++	      regulator-min-microvolt = <3300000>;
++	      regulator-max-microvolt = <3300000>;
++	      gpio = <&gpio5 2 0>;
++	      startup-delay-us = <100>;
++	      enable-active-high;
++	      vin-supply = <&reg_sata_nstandby1>;
++      };
++
++      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;
++	      regulator-boot-on;
++	      vin-supply = <&reg_sata_nstandby2>;
++      };
+    };
+ 
+    gpio-keys {
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0013-ARM-i.MX6-dts-add-audio-mux-pinmux-configuration.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0013-ARM-i.MX6-dts-add-audio-mux-pinmux-configuration.patch
new file mode 100644
index 0000000..e09502f
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0013-ARM-i.MX6-dts-add-audio-mux-pinmux-configuration.patch
@@ -0,0 +1,47 @@
+From 6a962cb469afddc96a37dce883af88a29a53a30c Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 20 Jul 2014 10:57:39 +0300
+Subject: [PATCH 13/59] ARM: i.MX6: dts: add audio mux pinmux configuration
+
+Add audio mux pinmux configuration and enable audio mux.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dts |   17 +++++++++++++++++
+ 1 file changed, 17 insertions(+)
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+index 286b03e..776e0d8 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+@@ -373,6 +373,17 @@
+ 	>;
+      };
+ 
++	/* 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
++	>;
++	};
++
+ 	/* pins for uart2 */
+ 	pinctrl_uart2: uart2grp {
+ 		fsl,pins = <
+@@ -575,3 +586,9 @@
+ 	pinctrl-0 = <&pinctrl_spdif>;
+ 	status = "okay";
+ };
++
++&audmux {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_audmux>;
++	status = "okay";
++};
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0014-ARM-i.MX6-dts-add-analog-audio-support.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0014-ARM-i.MX6-dts-add-analog-audio-support.patch
new file mode 100644
index 0000000..511298f
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0014-ARM-i.MX6-dts-add-analog-audio-support.patch
@@ -0,0 +1,67 @@
+From 0afe8320732c2609015af4c0b474cede18f81f24 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 20 Jul 2014 11:02:28 +0300
+Subject: [PATCH 14/59] ARM: i.MX6: dts: add analog audio support
+
+1) Add i2c analog audion device node definition.
+2) Add wm8731 codec node definition.
+3) Enable ssi2 in master mode.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dts |   25 +++++++++++++++++++++++++
+ 1 file changed, 25 insertions(+)
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+index 776e0d8..9f5da43 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+@@ -168,6 +168,15 @@
+ 	mxcfb1 = &mxcfb2;
+    };
+ 
++	sound {
++		compatible = "fsl,imx6q-cm-fx6-wm8731",
++			  "fsl,imx-audio-wm8731";
++		model = "wm8731-audio";
++		ssi-controller = <&ssi2>;
++		audio-codec = <&codec>;
++		audio-routing = "LOUT", "ROUT", "LLINEIN", "RLINEIN";
++	};
++
+    sound-hdmi {
+ 	compatible = "fsl,imx6q-audio-hdmi",
+ 		"fsl,imx-audio-hdmi";
+@@ -487,6 +496,17 @@
+       reg = <0x50>;
+       pagesize = <16>;
+    };
++
++	codec: wm8731 at 1a {
++		compatible = "wlf,wm8731";
++		reg = <0x1a>;
++		clocks = <&clks 173>, <&clks 158>;
++		clock-names = "pll4", "imx-ssi.1";
++		AVDD-supply = <&pu_dummy>;
++		HPVDD-supply = <&pu_dummy>;
++		DCVDD-supply = <&pu_dummy>;
++		DBVDD-supply = <&pu_dummy>;
++	};
+ };
+ 
+ /* eth1 */ 
+@@ -556,6 +576,11 @@
+    status = "okay";
+ };
+ 
++&ssi2 {
++	fsl,mode = "i2s-master";
++	status = "okay";
++};
++
+ &mxcfb1 {
+ 	status = "okay";
+ };
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0015-ARM-i.MX6-ASoC-add-imx-wm8731-machine-driver.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0015-ARM-i.MX6-ASoC-add-imx-wm8731-machine-driver.patch
new file mode 100644
index 0000000..f3d4bef
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0015-ARM-i.MX6-ASoC-add-imx-wm8731-machine-driver.patch
@@ -0,0 +1,573 @@
+From 5fbe55d2945782fee3f3238f20a8dcd0b9ba630c Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 20 Jul 2014 11:10:12 +0300
+Subject: [PATCH 15/59] ARM: i.MX6: ASoC: add imx-wm8731 machine driver
+
+This is the initial imx-wm8731 device-tree-only machine driver working with
+fsl_ssi driver. Works in the slave mode.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ sound/soc/fsl/Kconfig      |   12 ++
+ sound/soc/fsl/Makefile     |    2 +
+ sound/soc/fsl/imx-wm8731.c |  505 ++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 519 insertions(+)
+ create mode 100644 sound/soc/fsl/imx-wm8731.c
+
+diff --git a/sound/soc/fsl/Kconfig b/sound/soc/fsl/Kconfig
+index 573dabb..bb229da 100644
+--- a/sound/soc/fsl/Kconfig
++++ b/sound/soc/fsl/Kconfig
+@@ -252,6 +252,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_SOC_WM8731
++	select SND_SOC_IMX_PCM_DMA
++	select SND_SOC_IMX_AUDMUX
++	select SND_SOC_FSL_SSI
++	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
+diff --git a/sound/soc/fsl/Makefile b/sound/soc/fsl/Makefile
+index 144cd69..65f8e6f 100644
+--- a/sound/soc/fsl/Makefile
++++ b/sound/soc/fsl/Makefile
+@@ -55,6 +55,7 @@ snd-soc-mx27vis-aic32x4-objs := mx27vis-aic32x4.o
+ snd-soc-wm1133-ev1-objs := wm1133-ev1.o
+ snd-soc-imx-cs42888-objs := imx-cs42888.o
+ snd-soc-imx-sgtl5000-objs := imx-sgtl5000.o
++snd-soc-imx-wm8731-objs := imx-wm8731.o
+ snd-soc-imx-wm8962-objs := imx-wm8962.o
+ snd-soc-imx-spdif-objs := imx-spdif.o
+ snd-soc-imx-mc13783-objs := imx-mc13783.o
+@@ -69,6 +70,7 @@ obj-$(CONFIG_SND_MXC_SOC_WM1133_EV1) += snd-soc-wm1133-ev1.o
+ obj-$(CONFIG_SND_SOC_IMX_CS42888) += snd-soc-imx-cs42888.o
+ obj-$(CONFIG_SND_SOC_IMX_SGTL5000) += snd-soc-imx-sgtl5000.o
+ obj-$(CONFIG_SND_SOC_IMX_WM8962) += snd-soc-imx-wm8962.o
++obj-$(CONFIG_SND_SOC_IMX_WM8731) += snd-soc-imx-wm8731.o
+ obj-$(CONFIG_SND_SOC_IMX_SPDIF) += snd-soc-imx-spdif.o
+ obj-$(CONFIG_SND_SOC_IMX_MC13783) += snd-soc-imx-mc13783.o
+ obj-$(CONFIG_SND_SOC_IMX_HDMI) += snd-soc-imx-hdmi.o
+diff --git a/sound/soc/fsl/imx-wm8731.c b/sound/soc/fsl/imx-wm8731.c
+new file mode 100644
+index 0000000..ba1363f
+--- /dev/null
++++ b/sound/soc/fsl/imx-wm8731.c
+@@ -0,0 +1,505 @@
++/*
++ * Copyright (C) 2014 Freescale Semiconductor, Inc.
++ *
++ * Based on imx-sgtl5000.c
++ * Copyright (C) 2012 Freescale Semiconductor, Inc.
++ * Copyright (C) 2012 Linaro Ltd.
++ *
++ * 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/of_i2c.h>
++#include <linux/of_gpio.h>
++#include <linux/slab.h>
++#include <linux/gpio.h>
++#include <linux/clk.h>
++#include <sound/soc.h>
++#include <sound/jack.h>
++#include <sound/pcm_params.h>
++#include <sound/soc-dapm.h>
++#include <linux/pinctrl/consumer.h>
++
++#include "../codecs/wm8731.h"
++#include "imx-audmux.h"
++#include "imx-ssi.h"
++
++#define DAI_NAME_SIZE	32
++
++struct imx_wm8731_data {
++	struct snd_soc_dai_link dai;
++	struct snd_soc_card card;
++	char codec_dai_name[DAI_NAME_SIZE];
++	char platform_name[DAI_NAME_SIZE];
++	struct i2c_client *codec_dev;
++	/* audio_clocking_data */
++	struct clk *pll;
++	struct clk *clock_root;
++	long sysclk;
++	long current_rate;
++	/* platfor data */
++	unsigned int ssi_num;
++	unsigned int src_port;
++	unsigned int ext_port;
++};
++
++static int imx_wm8731_init(struct snd_soc_pcm_runtime *rtd);
++static int imx_hifi_hw_params_slv_mode(struct snd_pcm_substream *substream,
++                                       struct snd_pcm_hw_params *params);
++static void imx_hifi_shutdown(struct snd_pcm_substream *substream);
++
++struct imx_priv {
++	struct platform_device *pdev;
++	struct imx_wm8731_data *data;
++};
++
++static struct imx_priv card_priv;
++
++static struct snd_soc_ops imx_hifi_ops = {
++	.shutdown	= imx_hifi_shutdown,
++	.hw_params	= imx_hifi_hw_params_slv_mode,
++};
++
++/* imx card dapm widgets */
++static const struct snd_soc_dapm_widget imx_dapm_widgets[] = {
++	SND_SOC_DAPM_HP("Headphone Jack",       NULL),
++	SND_SOC_DAPM_SPK("Ext Spk",             NULL),
++	SND_SOC_DAPM_LINE("Line Jack",          NULL),
++	SND_SOC_DAPM_MIC("Mic Jack",            NULL),
++};
++
++/* imx machine connections to the codec pins */
++static const struct snd_soc_dapm_route audio_map[] = {
++	{ "Headphone Jack",     NULL,   "LHPOUT" },
++	{ "Headphone Jack",     NULL,   "RHPOUT" },
++
++	{ "Ext Spk",            NULL,   "LOUT" },
++	{ "Ext Spk",            NULL,   "ROUT" },
++
++	{ "LLINEIN",            NULL,   "Line Jack" },
++	{ "RLINEIN",            NULL,   "Line Jack" },
++
++	{ "MICIN",              NULL,   "Mic Bias" },
++	{ "Mic Bias",           NULL,   "Mic Jack"},
++};
++
++static int wm8731_slv_mode_init(struct imx_wm8731_data *data)
++{
++	struct clk *new_parent;
++	struct clk *ssi_clk;
++	struct i2c_client *codec_dev = data->codec_dev;
++
++	new_parent = devm_clk_get(&codec_dev->dev, "pll4");
++	if (IS_ERR(new_parent)) {
++		pr_err("Could not get \"pll4\" clock \n");
++		return PTR_ERR(new_parent);
++	}
++
++	ssi_clk = devm_clk_get(&codec_dev->dev, "imx-ssi.1");
++	if (IS_ERR(ssi_clk)) {
++		pr_err("Could not get \"imx-ssi.1\" clock \n");
++		return PTR_ERR(ssi_clk);
++	}
++
++	clk_set_parent(ssi_clk, new_parent);
++
++	data->pll = new_parent;
++	data->clock_root = ssi_clk;
++	data->current_rate = 0;
++
++	data->sysclk = 0;
++
++	return 0;
++}
++
++static int wm8731_slv_mode_clock_enable(int enable, struct imx_wm8731_data *data)
++{
++	long pll_rate;
++	long rate_req;
++	long rate_avail;
++
++	if (!enable)
++		return 0;
++
++	if (data->sysclk == data->current_rate)
++		return 0;
++
++	switch (data->sysclk) {
++		case 11289600:
++			pll_rate = 632217600;
++			break;
++
++		case 12288000:
++			pll_rate = 688128000;
++			break;
++
++		default:
++			return -EINVAL;
++	}
++
++	rate_req = pll_rate;
++	rate_avail = clk_round_rate(data->pll, rate_req);
++	clk_set_rate(data->pll, rate_avail);
++
++	rate_req = data->sysclk;
++	rate_avail = clk_round_rate(data->clock_root,
++								rate_req);
++	clk_set_rate(data->clock_root, rate_avail);
++
++	pr_info("%s: \"imx-ssi.1\" rate = %ld (= %ld)\n",
++			__func__, rate_avail, rate_req);
++
++	data->current_rate = data->sysclk;
++
++	return 0;
++}
++
++static int imx_hifi_hw_params_slv_mode(struct snd_pcm_substream *substream,
++				       struct snd_pcm_hw_params *params)
++{
++	struct snd_soc_pcm_runtime *rtd = substream->private_data;
++	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
++	struct snd_soc_dai *codec_dai = rtd->codec_dai;
++	struct snd_soc_card *card = codec_dai->codec->card;
++	struct imx_wm8731_data *data = snd_soc_card_get_drvdata(card);
++	
++	u32 dai_format, pll_out;
++	snd_pcm_format_t sample_format;
++	unsigned int channels;
++	unsigned int tx_mask, rx_mask;
++	unsigned int sampling_rate;
++	unsigned int div_2, div_psr, div_pm;
++	int ret;
++
++	sampling_rate = params_rate(params);
++	sample_format = params_format(params);
++	
++	channels = params_channels(params);
++	printk("%s:%s  sampling rate = %u  channels = %u \n", __FUNCTION__,
++		   (substream->stream == SNDRV_PCM_STREAM_PLAYBACK ? "Playback" : "Capture"),
++		   sampling_rate, channels);
++
++	/* set CPU DAI configuration */
++	switch (sampling_rate) {
++		case 8000:
++		case 32000:
++		case 48000:
++		case 96000:
++			data->sysclk = 12288000;
++			break;
++
++		case 44100:
++		case 88200:
++			data->sysclk = 11289600;
++			break;
++
++		default:
++			return -EINVAL;
++	}
++
++	wm8731_slv_mode_clock_enable(1,data);
++
++	dai_format = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_IF |
++		SND_SOC_DAIFMT_CBS_CFS;
++
++	ret = snd_soc_dai_set_fmt(cpu_dai, dai_format);
++	if (ret < 0)
++		return ret;
++
++	/* set i.MX active slot mask */
++	/* S[TR]CCR:DC */
++	tx_mask = ~((1 << channels) - 1);
++	rx_mask = tx_mask;
++	snd_soc_dai_set_tdm_slot(cpu_dai, tx_mask, rx_mask, 2, 32);
++
++	/*
++	 * SSI sysclk divider:
++	 * div_2:	/1 or /2
++	 * div_psr:	/1 or /8
++	 * div_pm:	/1 .. /256
++	 */
++	div_2	= 0;
++	div_psr	= 0;
++	switch (sampling_rate) {
++		case 8000:
++			// 1x1x12
++			div_pm	= 11;
++			break;
++		case 32000:
++			// 1x1x3
++			div_pm	= 2;
++			break;
++		case 48000:
++			// 1x1x2
++			div_pm	= 1;
++			break;
++		case 96000:
++			// 1x1x1
++			div_pm	= 0;
++			break;
++		case 44100:
++			// 1x1x2
++			div_pm	= 1;
++			break;
++		case 88200:
++			// 1x1x1
++			div_pm	= 0;
++			break;
++		default:
++			return -EINVAL;
++	}
++
++	/* sync mode: a single clock controls both playback and capture */
++	snd_soc_dai_set_clkdiv(cpu_dai, IMX_SSI_TX_DIV_2, (div_2 ? SSI_STCCR_DIV2 : 0));
++	snd_soc_dai_set_clkdiv(cpu_dai, IMX_SSI_TX_DIV_PSR, (div_psr ? SSI_STCCR_PSR : 0));
++	snd_soc_dai_set_clkdiv(cpu_dai, IMX_SSI_TX_DIV_PM, div_pm);
++
++	/* set codec DAI configuration */
++	dai_format = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
++		SND_SOC_DAIFMT_CBS_CFS;
++
++	ret = snd_soc_dai_set_fmt(codec_dai, dai_format);
++	if (ret < 0)
++		return ret;
++
++	ret = snd_soc_dai_set_sysclk(codec_dai,
++				     WM8731_SYSCLK_MCLK,
++				     data->sysclk,
++				     SND_SOC_CLOCK_IN);
++
++	if (ret < 0) {
++		pr_err("Failed to set codec master clock to %u: %d \n",
++		       data->sysclk, ret);
++		return ret;
++	}
++
++	return 0;
++}
++
++static void imx_hifi_shutdown(struct snd_pcm_substream *substream)
++{
++	struct snd_soc_pcm_runtime *rtd = substream->private_data;
++	struct snd_soc_dai *codec_dai = rtd->codec_dai;
++	struct snd_soc_card *card = codec_dai->codec->card;
++	struct imx_wm8731_data *data = snd_soc_card_get_drvdata(card);
++	
++	if (!codec_dai->active)
++		wm8731_slv_mode_clock_enable(0,data);
++	
++	return;
++}
++
++static int imx_wm8731_init(struct snd_soc_pcm_runtime *rtd)
++{
++	int ret = 0;
++	struct snd_soc_codec *codec = rtd->codec;
++
++	/* Add imx specific widgets */
++	ret = snd_soc_dapm_new_controls(&codec->dapm, imx_dapm_widgets,
++									ARRAY_SIZE(imx_dapm_widgets));
++	if (ret)
++			goto out_retcode;
++
++	/* Set up imx specific audio path audio_map */
++	ret = snd_soc_dapm_add_routes(&codec->dapm, audio_map, ARRAY_SIZE(audio_map));
++	if (ret)
++			goto out_retcode;
++
++	ret = snd_soc_dapm_enable_pin(&codec->dapm, "Headphone Jack");
++	if (ret)
++			goto out_retcode;
++
++	ret = snd_soc_dapm_nc_pin(&codec->dapm, "Ext Spk");
++	if (ret)
++			goto out_retcode;
++
++out_retcode:
++
++	if (ret)
++			pr_err("%s: failed with error code: %d \n", __FUNCTION__, ret);
++	else
++			pr_info("%s: success \n", __FUNCTION__);
++
++	return ret;
++}
++
++/**
++ * Configure AUDMUX interconnection between
++ * _slave (CPU side) and _master (codec size)
++ *
++ * When SSI operates in master mode, 5-wire interconnect with
++ * audio codec is required:
++ * TXC  - BCLK
++ * TXD  - DAC data
++ * RXD  - ADC data
++ * TXFS - {DAC|ADC}LRC, i.e. word clock
++ * RXC  - MCLK, i.e. oversampling clock
++ * Audmux is operated in asynchronous mode to enable 6-wire
++ * interface (as opposed to 4-wire interface in sync mode).
++ */
++static int imx_audmux_config_slv_mode(int _slave, int _master)
++{
++	unsigned int ptcr, pdcr;
++	int slave = _slave - 1;
++	int master = _master - 1;
++
++	ptcr = IMX_AUDMUX_V2_PTCR_SYN |
++		IMX_AUDMUX_V2_PTCR_TFSDIR |
++		IMX_AUDMUX_V2_PTCR_TFSEL(slave) |
++		IMX_AUDMUX_V2_PTCR_RCLKDIR |
++		IMX_AUDMUX_V2_PTCR_RCSEL(slave | 0x8) |
++		IMX_AUDMUX_V2_PTCR_TCLKDIR |
++		IMX_AUDMUX_V2_PTCR_TCSEL(slave);
++
++	pdcr = IMX_AUDMUX_V2_PDCR_RXDSEL(slave);
++	imx_audmux_v2_configure_port(master, ptcr, pdcr);
++	ptcr = ptcr & ~IMX_AUDMUX_V2_PTCR_SYN;
++	imx_audmux_v2_configure_port(master, ptcr, pdcr);
++
++	ptcr = IMX_AUDMUX_V2_PTCR_SYN |
++		IMX_AUDMUX_V2_PTCR_RCLKDIR |
++		IMX_AUDMUX_V2_PTCR_RCSEL(master | 0x8) |
++		IMX_AUDMUX_V2_PTCR_TCLKDIR |
++		IMX_AUDMUX_V2_PTCR_TCSEL(master);
++
++	pdcr = IMX_AUDMUX_V2_PDCR_RXDSEL(master);
++	imx_audmux_v2_configure_port(slave, ptcr, pdcr);
++	ptcr = ptcr & ~IMX_AUDMUX_V2_PTCR_SYN;
++	imx_audmux_v2_configure_port(slave, ptcr, pdcr);
++
++	return 0;
++}
++
++static int imx_wm8731_probe(struct platform_device *pdev)
++{
++	struct device_node *ssi_np, *codec_np;
++	struct platform_device *ssi_pdev;
++	struct imx_priv *priv = &card_priv;
++	struct i2c_client *codec_dev;
++	struct imx_wm8731_data *data;
++	int ret;
++
++	priv->pdev = pdev;
++	
++	ssi_np = of_parse_phandle(pdev->dev.of_node, "ssi-controller", 0);
++	codec_np = of_parse_phandle(pdev->dev.of_node, "audio-codec", 0);
++	if (!ssi_np || !codec_np) {
++		dev_err(&pdev->dev, "phandle missing or invalid\n");
++		ret = -EINVAL;
++		goto fail;
++	}
++
++	ssi_pdev = of_find_device_by_node(ssi_np);
++	if (!ssi_pdev) {
++		dev_err(&pdev->dev, "failed to find SSI platform device\n");
++		ret = -EINVAL;
++		goto fail;
++	}
++        
++	codec_dev = of_find_i2c_device_by_node(codec_np);
++	if (!codec_dev || !codec_dev->driver) {
++		dev_err(&pdev->dev, "failed to find codec platform device\n");
++		ret = -EINVAL;
++		goto fail;
++	}
++
++	data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
++	if (!data) {
++		ret = -ENOMEM;
++		goto fail;
++	}
++
++	card_priv.data = data;
++
++	data->codec_dev = codec_dev;
++	
++	data->dai.name = "HiFi";
++	data->dai.stream_name = "HiFi";
++	data->dai.codec_dai_name = "wm8731-hifi";
++	data->dai.codec_of_node = codec_np;
++	data->dai.cpu_dai_name = dev_name(&ssi_pdev->dev);
++	data->dai.platform_of_node = ssi_np;
++	data->dai.ops = &imx_hifi_ops;
++	data->dai.init = &imx_wm8731_init;
++	
++	data->ssi_num = 2; /* 1-based */
++	data->src_port = 2;
++	data->ext_port = 4;
++	
++	imx_audmux_config_slv_mode(data->src_port, data->ext_port);
++	
++	/* Slave Mode Init */
++	wm8731_slv_mode_init(data);
++	
++	data->card.dev = &pdev->dev;
++	ret = snd_soc_of_parse_card_name(&data->card, "model");
++	if (ret)
++		goto fail;
++	
++	ret = snd_soc_of_parse_audio_routing(&data->card, "audio-routing");
++	if (ret)
++		goto fail;
++
++	data->card.num_links = 1;
++	data->card.dai_link = &data->dai;
++
++	data->card.dapm_widgets = imx_dapm_widgets;
++	data->card.num_dapm_widgets = ARRAY_SIZE(imx_dapm_widgets);
++
++	platform_set_drvdata(pdev, &data->card);
++	snd_soc_card_set_drvdata(&data->card, data);
++
++	ret = snd_soc_register_card(&data->card);
++	if (ret) {
++		dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n", ret);
++		goto fail;
++	}
++	
++	return 0;
++
++fail:
++
++	if (ssi_np)
++		of_node_put(ssi_np);
++
++	if (codec_np)
++		of_node_put(codec_np);
++
++	return ret;
++}
++
++static int imx_wm8731_remove(struct platform_device *pdev)
++{
++	struct snd_soc_card *card = platform_get_drvdata(pdev);
++	snd_soc_unregister_card(card);
++
++	return 0;
++}
++
++static const struct of_device_id imx_wm8731_dt_ids[] = {
++	{ .compatible = "fsl,imx-audio-wm8731", },
++	{ /* sentinel */ }
++};
++MODULE_DEVICE_TABLE(of, imx_wm8731_dt_ids);
++
++static struct platform_driver imx_wm8731_driver = {
++	.driver = {
++		.name = "imx-wm8731",
++		.owner = THIS_MODULE,
++		.of_match_table = imx_wm8731_dt_ids,
++	},
++	.probe = imx_wm8731_probe,
++	.remove = imx_wm8731_remove,
++};
++module_platform_driver(imx_wm8731_driver);
++
++MODULE_AUTHOR("Freescale Semiconductor, Inc.");
++MODULE_DESCRIPTION("Freescale i.MX WM8731 ASoC machine driver");
++MODULE_LICENSE("GPL v2");
++MODULE_ALIAS("platform:imx-wm8731");
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0016-ARM-i.MX6-ASoC-add-imx-wm8731-master-mode-support.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0016-ARM-i.MX6-ASoC-add-imx-wm8731-master-mode-support.patch
new file mode 100644
index 0000000..ae67161
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0016-ARM-i.MX6-ASoC-add-imx-wm8731-master-mode-support.patch
@@ -0,0 +1,335 @@
+From 4c7271dbe9a5fb21e049b07fffb78a933f59382b Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Mon, 21 Jul 2014 17:17:32 +0300
+Subject: [PATCH 16/59] ARM: i.MX6: ASoC: add imx-wm8731 master mode support
+
+Add imx-wm8731 master mode support.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dts |    8 +-
+ sound/soc/fsl/imx-wm8731.c         |  212 +++++++++++++++++++++++++++++++++---
+ 2 files changed, 203 insertions(+), 17 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+index 9f5da43..050795b 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+@@ -173,6 +173,8 @@
+ 			  "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";
+ 	};
+@@ -390,6 +392,8 @@
+ 			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
+ 	>;
+ 	};
+ 
+@@ -500,8 +504,8 @@
+ 	codec: wm8731 at 1a {
+ 		compatible = "wlf,wm8731";
+ 		reg = <0x1a>;
+-		clocks = <&clks 173>, <&clks 158>;
+-		clock-names = "pll4", "imx-ssi.1";
++		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>;
+diff --git a/sound/soc/fsl/imx-wm8731.c b/sound/soc/fsl/imx-wm8731.c
+index ba1363f..72b75ad 100644
+--- a/sound/soc/fsl/imx-wm8731.c
++++ b/sound/soc/fsl/imx-wm8731.c
+@@ -31,6 +31,7 @@
+ #include "imx-ssi.h"
+ 
+ #define DAI_NAME_SIZE	32
++#define	WM8731_MCLK_FREQ	(24000000 / 2)
+ 
+ struct imx_wm8731_data {
+ 	struct snd_soc_dai_link dai;
+@@ -43,10 +44,8 @@ struct imx_wm8731_data {
+ 	struct clk *clock_root;
+ 	long sysclk;
+ 	long current_rate;
+-	/* platfor data */
+-	unsigned int ssi_num;
+-	unsigned int src_port;
+-	unsigned int ext_port;
++	/* apis */
++	int (*clock_enable)(int enable,struct imx_wm8731_data *data);
+ };
+ 
+ static int imx_wm8731_init(struct snd_soc_pcm_runtime *rtd);
+@@ -63,7 +62,6 @@ static struct imx_priv card_priv;
+ 
+ static struct snd_soc_ops imx_hifi_ops = {
+ 	.shutdown	= imx_hifi_shutdown,
+-	.hw_params	= imx_hifi_hw_params_slv_mode,
+ };
+ 
+ /* imx card dapm widgets */
+@@ -160,6 +158,78 @@ static int wm8731_slv_mode_clock_enable(int enable, struct imx_wm8731_data *data
+ 	return 0;
+ }
+ 
++static int imx_hifi_startup_slv_mode(struct snd_pcm_substream *substream)
++{
++	/*
++	 * As SSI's sys clock rate depends on sampling rate,
++	 * the clock enabling code is moved to imx_hifi_hw_params().
++	 */
++	return 0;
++}
++
++static int wm8731_mst_mode_init(struct imx_wm8731_data *data)
++{
++	long rate;
++	struct clk *new_parent;
++	struct clk *ssi_clk;
++	struct i2c_client *codec_dev = data->codec_dev;
++
++	new_parent = devm_clk_get(&codec_dev->dev, "cko2");
++	if (IS_ERR(new_parent)) {
++		pr_err("Could not get \"cko2\" clock \n");
++		return PTR_ERR(new_parent);
++	}
++
++	ssi_clk = devm_clk_get(&codec_dev->dev, "cko");
++	if (IS_ERR(ssi_clk)) {
++		pr_err("Could not get \"cko\" clock \n");
++		return PTR_ERR(ssi_clk);
++	}
++
++	rate = clk_round_rate(new_parent, WM8731_MCLK_FREQ);
++	clk_set_rate(new_parent, rate);
++
++	clk_set_parent(ssi_clk, new_parent);
++
++	rate = clk_round_rate(ssi_clk, WM8731_MCLK_FREQ);
++	clk_set_rate(ssi_clk, rate);
++
++	pr_info("%s: \"CLKO\" rate = %ld (= %d)\n",
++		__func__, rate, WM8731_MCLK_FREQ);
++
++	data->pll = new_parent;
++	data->clock_root = ssi_clk;
++	data->sysclk = rate;
++
++	return 0;
++}
++
++static int wm8731_mst_mode_clock_enable(int enable, struct imx_wm8731_data *data)
++{
++	struct clk *clko = data->clock_root;
++
++	if (enable)
++		clk_enable(clko);
++	else
++		clk_disable(clko);
++
++	return 0;
++}
++
++static int imx_hifi_startup_mst_mode(struct snd_pcm_substream *substream)
++{
++	struct snd_soc_pcm_runtime *rtd = substream->private_data;
++	struct snd_soc_dai *codec_dai = rtd->codec_dai;
++	struct snd_soc_card *card = codec_dai->codec->card;
++	struct imx_wm8731_data *data = snd_soc_card_get_drvdata(card);
++
++	if (!codec_dai->active)
++		data->clock_enable(1,data);
++
++	return 0;
++}
++
++
+ static int imx_hifi_hw_params_slv_mode(struct snd_pcm_substream *substream,
+ 				       struct snd_pcm_hw_params *params)
+ {
+@@ -169,7 +239,7 @@ static int imx_hifi_hw_params_slv_mode(struct snd_pcm_substream *substream,
+ 	struct snd_soc_card *card = codec_dai->codec->card;
+ 	struct imx_wm8731_data *data = snd_soc_card_get_drvdata(card);
+ 	
+-	u32 dai_format, pll_out;
++	u32 dai_format;
+ 	snd_pcm_format_t sample_format;
+ 	unsigned int channels;
+ 	unsigned int tx_mask, rx_mask;
+@@ -282,6 +352,63 @@ static int imx_hifi_hw_params_slv_mode(struct snd_pcm_substream *substream,
+ 	return 0;
+ }
+ 
++static int imx_hifi_hw_params_mst_mode(struct snd_pcm_substream *substream,
++				       struct snd_pcm_hw_params *params)
++{
++	struct snd_soc_pcm_runtime *rtd = substream->private_data;
++	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
++	struct snd_soc_dai *codec_dai = rtd->codec_dai;
++	struct snd_soc_card *card = codec_dai->codec->card;
++	struct imx_wm8731_data *data = snd_soc_card_get_drvdata(card);
++	u32 dai_format;
++	unsigned int channels;
++	unsigned int tx_mask, rx_mask;
++	unsigned int sampling_rate;
++	int ret;
++
++
++	sampling_rate = params_rate(params);
++	channels = params_channels(params);
++	pr_debug("%s:%s  sampling rate = %u  channels = %u \n", __FUNCTION__,
++		 (substream->stream == SNDRV_PCM_STREAM_PLAYBACK ? "Playback" : "Capture"),
++		 sampling_rate, channels);
++
++	/* set cpu DAI configuration */
++	dai_format = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_IF |
++		SND_SOC_DAIFMT_CBM_CFM;
++
++	ret = snd_soc_dai_set_fmt(cpu_dai, dai_format);
++	if (ret < 0)
++		return ret;
++
++	/* set i.MX active slot mask */
++	/* S[TR]CCR:DC */
++	tx_mask = ~((1 << channels) - 1);
++	rx_mask = tx_mask;
++	snd_soc_dai_set_tdm_slot(cpu_dai, tx_mask, rx_mask, 2, 32);
++
++	/* set codec DAI configuration */
++	dai_format = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
++		SND_SOC_DAIFMT_CBM_CFM;
++
++	ret = snd_soc_dai_set_fmt(codec_dai, dai_format);
++	if (ret < 0)
++		return ret;
++
++	ret = snd_soc_dai_set_sysclk(codec_dai,
++				     WM8731_SYSCLK_MCLK,
++				     data->sysclk,
++				     SND_SOC_CLOCK_IN);
++
++	if (ret < 0) {
++		pr_err("Failed to set codec master clock to %u: %d \n",
++		       data->sysclk, ret);
++		return ret;
++	}
++
++	return 0;
++}
++
+ static void imx_hifi_shutdown(struct snd_pcm_substream *substream)
+ {
+ 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
+@@ -290,7 +417,7 @@ static void imx_hifi_shutdown(struct snd_pcm_substream *substream)
+ 	struct imx_wm8731_data *data = snd_soc_card_get_drvdata(card);
+ 	
+ 	if (!codec_dai->active)
+-		wm8731_slv_mode_clock_enable(0,data);
++		data->clock_enable(0,data);
+ 	
+ 	return;
+ }
+@@ -376,6 +503,27 @@ static int imx_audmux_config_slv_mode(int _slave, int _master)
+ 	return 0;
+ }
+ 
++static int imx_audmux_config_mst_mode(int _slave, int _master)
++{
++	unsigned int ptcr, pdcr;
++	int slave = _slave - 1;
++	int master = _master - 1;
++
++	ptcr = IMX_AUDMUX_V2_PTCR_SYN;
++	ptcr |= IMX_AUDMUX_V2_PTCR_TFSDIR |
++		IMX_AUDMUX_V2_PTCR_TFSEL(master) |
++		IMX_AUDMUX_V2_PTCR_TCLKDIR |
++		IMX_AUDMUX_V2_PTCR_TCSEL(master);
++	pdcr = IMX_AUDMUX_V2_PDCR_RXDSEL(master);
++	imx_audmux_v2_configure_port(slave, ptcr, pdcr);
++
++	ptcr = IMX_AUDMUX_V2_PTCR_SYN;
++	pdcr = IMX_AUDMUX_V2_PDCR_RXDSEL(slave);
++	imx_audmux_v2_configure_port(master, ptcr, pdcr);
++
++	return 0;
++}
++
+ static int imx_wm8731_probe(struct platform_device *pdev)
+ {
+ 	struct device_node *ssi_np, *codec_np;
+@@ -383,6 +531,10 @@ static int imx_wm8731_probe(struct platform_device *pdev)
+ 	struct imx_priv *priv = &card_priv;
+ 	struct i2c_client *codec_dev;
+ 	struct imx_wm8731_data *data;
++	unsigned int src_port, ext_port;
++	unsigned int ssi_mode;
++	const char *ssi_mode_str;
++
+ 	int ret;
+ 
+ 	priv->pdev = pdev;
+@@ -428,14 +580,44 @@ static int imx_wm8731_probe(struct platform_device *pdev)
+ 	data->dai.ops = &imx_hifi_ops;
+ 	data->dai.init = &imx_wm8731_init;
+ 	
+-	data->ssi_num = 2; /* 1-based */
+-	data->src_port = 2;
+-	data->ext_port = 4;
+-	
+-	imx_audmux_config_slv_mode(data->src_port, data->ext_port);
+-	
+-	/* Slave Mode Init */
+-	wm8731_slv_mode_init(data);
++	ret = of_property_read_u32(pdev->dev.of_node, "src-port", &src_port);
++	if (ret) {
++		dev_err(&pdev->dev, "failed to get \"src-port\" value\n");
++		ret = -EINVAL;
++		goto fail;
++	}
++
++	ret = of_property_read_u32(pdev->dev.of_node, "ext-port", &ext_port);
++	if (ret) {
++		dev_err(&pdev->dev, "failed to get \"ext-port\" value\n");
++		ret = -EINVAL;
++		goto fail;
++	}
++
++	ret = of_property_read_string(ssi_np, "fsl,mode", &ssi_mode_str);
++	if (ret) {
++		dev_err(&pdev->dev, "failed to get \"fsl,mode\" value\n");
++		ret = -EINVAL;
++		goto fail;
++	}
++
++	ssi_mode = strcmp(ssi_mode_str, "i2s-master");
++
++	if (ssi_mode) {
++		/* Master Mode */
++		imx_audmux_config_mst_mode(src_port, ext_port);
++		wm8731_mst_mode_init(data);
++		data->clock_enable = wm8731_mst_mode_clock_enable;
++		imx_hifi_ops.hw_params = imx_hifi_hw_params_mst_mode;
++		imx_hifi_ops.startup = imx_hifi_startup_mst_mode;
++	} else {
++		/* Slave Mode */
++		imx_audmux_config_slv_mode(src_port, ext_port);
++		wm8731_slv_mode_init(data);
++		data->clock_enable = wm8731_slv_mode_clock_enable;
++		imx_hifi_ops.hw_params = imx_hifi_hw_params_slv_mode;
++		imx_hifi_ops.startup = imx_hifi_startup_slv_mode;
++	}
+ 	
+ 	data->card.dev = &pdev->dev;
+ 	ret = snd_soc_of_parse_card_name(&data->card, "model");
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0017-ARM-i.MX6-dts-enable-v4l2-output.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0017-ARM-i.MX6-dts-enable-v4l2-output.patch
new file mode 100644
index 0000000..21cbbc3
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0017-ARM-i.MX6-dts-enable-v4l2-output.patch
@@ -0,0 +1,31 @@
+From 7b953812d9804bbce9f2b8f21ca5e72229272eb6 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Thu, 24 Jul 2014 16:11:29 +0300
+Subject: [PATCH 17/59] ARM: i.MX6: dts: enable v4l2 output
+
+Enable v4l2 output.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dts |    5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+index 050795b..2e04224 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+@@ -227,6 +227,11 @@
+ 	status = "okay";
+    };
+ 
++   v4l2_out {
++	compatible = "fsl,mxc_v4l2_output";
++	status = "okay";
++   };
++
+ };
+ 
+ &iomuxc {
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0018-ARM-i.MX6-dts-some-small-changes-in-the-dts-file.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0018-ARM-i.MX6-dts-some-small-changes-in-the-dts-file.patch
new file mode 100644
index 0000000..328ac9b
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0018-ARM-i.MX6-dts-some-small-changes-in-the-dts-file.patch
@@ -0,0 +1,52 @@
+From 7cadcbd1a95de480f3412c56f6a3567ba213091a Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Thu, 31 Jul 2014 16:27:38 +0300
+Subject: [PATCH 18/59] ARM: i.MX6: dts: some small changes in the dts file
+
+1) Fixed the color depth value for both frame buffers.
+2) Added a missing OTG pinmux definition.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dts |    6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+index 2e04224..1613c32 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+@@ -200,7 +200,7 @@
+ 	disp_dev = "hdmi";
+ 	interface_pix_fmt = "RGB24";
+ 	mode_str ="1920x1080M at 60";
+-	default_bpp = <24>;
++	default_bpp = <32>;
+ 	int_clk = <0>;
+ 	late_init = <0>;
+ 	status = "disabled";
+@@ -211,12 +211,13 @@
+ 	disp_dev = "lcd";
+ 	interface_pix_fmt = "RGB24";
+ 	mode_str ="1920x1080M at 60";
+-	default_bpp = <24>;
++	default_bpp = <32>;
+ 	int_clk = <0>;
+ 	late_init = <0>;
+ 	status = "disabled";
+    };
+ 
++
+     lcd at 0 {
+ 	compatible = "fsl,lcd";
+ 	ipu_id = <0>;
+@@ -354,6 +355,7 @@
+       pinctrl_usbotg: usbotggrp {
+          fsl,pins = <
+             MX6QDL_PAD_ENET_RX_ER__USB_OTG_ID 0x17059
++            MX6QDL_PAD_EIM_D22__GPIO3_IO22 0x80000000
+          >;
+       };
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0019-igb-Define-the-device-mac-address-in-device-tree.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0019-igb-Define-the-device-mac-address-in-device-tree.patch
new file mode 100644
index 0000000..39702bf
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0019-igb-Define-the-device-mac-address-in-device-tree.patch
@@ -0,0 +1,79 @@
+From da2c6c15b0db7f361b0db50b93b0d2df98ad81a4 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Tue, 5 Aug 2014 15:04:44 +0300
+Subject: [PATCH 19/59] igb: Define the device mac address in device tree
+
+1) Define the device mac address node in the device tree.
+2) Make the driver read the mac address from the device tree node.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dts        |    6 ++++++
+ drivers/net/ethernet/intel/igb/igb_main.c |   27 +++++++++++++++++++++++++++
+ 2 files changed, 33 insertions(+)
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+index 1613c32..0e2558f 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+@@ -233,6 +233,12 @@
+ 	status = "okay";
+    };
+ 
++   eth at pcie {
++	compatible = "intel,i211";
++	local-mac-address = [00 1C 1D 1E 1F 20];
++	status = "okay";
++   };
++
+ };
+ 
+ &iomuxc {
+diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
+index 2472835..5f93765 100644
+--- a/drivers/net/ethernet/intel/igb/igb_main.c
++++ b/drivers/net/ethernet/intel/igb/igb_main.c
+@@ -2185,6 +2185,30 @@ static s32 igb_init_i2c(struct igb_adapter *adapter)
+ 	return status;
+ }
+ 
++
++/**
++ *  igb_read_mac_addr_dts - Read mac addres from the device tree
++ *  blob
++ *  @adapter: pointer to adapter structure
++ **/
++static void igb_read_mac_addr_dts(struct e1000_hw *hw)
++{
++	struct device_node *dn;
++	const uint8_t *mac;
++
++	dn = of_find_compatible_node(NULL, NULL, "intel,i211");
++
++	if (!dn)
++		return;
++
++	mac = of_get_property(dn, "local-mac-address", NULL);
++
++	if (mac)
++		memcpy(hw->mac.addr, mac, ETH_ALEN);
++
++	return;
++}
++
+ /**
+  *  igb_probe - Device Initialization Routine
+  *  @pdev: PCI device information struct
+@@ -2387,6 +2411,9 @@ static int igb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
+ 	if (hw->mac.ops.read_mac_addr(hw))
+ 		dev_err(&pdev->dev, "NVM Read Error\n");
+ 
++	if (!is_valid_ether_addr(hw->mac.addr))
++		igb_read_mac_addr_dts(hw);
++
+ 	if (!is_valid_ether_addr(hw->mac.addr)) {
+ 		dev_info(&pdev->dev, "Random MAC Address\n");
+ 		random_ether_addr(hw->mac.addr);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0020-ARM-i.MX6-cm-fx6-update-defconfig.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0020-ARM-i.MX6-cm-fx6-update-defconfig.patch
new file mode 100644
index 0000000..2a45506
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0020-ARM-i.MX6-cm-fx6-update-defconfig.patch
@@ -0,0 +1,87 @@
+From 764be38216e273b22671b1f4d2babb47e0dc1d74 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Tue, 5 Aug 2014 15:39:32 +0300
+Subject: [PATCH 20/59] ARM: i.MX6: cm-fx6: update defconfig
+
+Enable:
+1) Analog audio
+2) MRVL bluetooth
+3) SATA AHCI
+4) USB OTG
+5) Board revision
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/configs/cm_fx6_defconfig |   12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/arch/arm/configs/cm_fx6_defconfig b/arch/arm/configs/cm_fx6_defconfig
+index eb6d9cb..210062b 100644
+--- a/arch/arm/configs/cm_fx6_defconfig
++++ b/arch/arm/configs/cm_fx6_defconfig
+@@ -26,6 +26,7 @@ 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
+@@ -137,6 +138,9 @@ 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
+@@ -176,6 +180,7 @@ 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
+@@ -251,6 +256,7 @@ 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
+@@ -310,6 +316,7 @@ 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
+@@ -317,7 +324,10 @@ 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
+@@ -326,7 +336,9 @@ 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
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0021-ARM-i.MX6-dts-refactoring-the-cm-fx6-device-tree-fil.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0021-ARM-i.MX6-dts-refactoring-the-cm-fx6-device-tree-fil.patch
new file mode 100644
index 0000000..4bfa1bd
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0021-ARM-i.MX6-dts-refactoring-the-cm-fx6-device-tree-fil.patch
@@ -0,0 +1,1112 @@
+From a2cdd3f7524d4336e5a704d42b85503a7ab3f543 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Thu, 7 Aug 2014 15:30:03 +0300
+Subject: [PATCH 21/59] ARM: i.MX6: dts: refactoring the cm-fx6 device tree
+ file.
+
+Separate the staff that belongs to SB-FX6 and SB-FX6m boards.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dts   |  880 ++++++++++++++++------------------
+ arch/arm/boot/dts/imx6q-sbc-fx6.dts  |   23 +
+ arch/arm/boot/dts/imx6q-sbc-fx6m.dts |   83 ++++
+ 3 files changed, 516 insertions(+), 470 deletions(-)
+ create mode 100644 arch/arm/boot/dts/imx6q-sbc-fx6.dts
+ create mode 100644 arch/arm/boot/dts/imx6q-sbc-fx6m.dts
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+index 0e2558f..fa32c57 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+@@ -15,158 +15,147 @@
+ #include "imx6q.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";
+-      };
+-   };
+-
+-   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;
+-      };
+-
+-      /* 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;
+-      };
+-
+-      /* 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>;
+-      };
+-
+-      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;
+-      };
+-
+-      reg_sata_nrstdly: sata_nrstdly {
+-	      compatible = "regulator-fixed";
+-	      regulator-name = "cm_fx6_sata_nrstdly";
+-	      regulator-min-microvolt = <3300000>;
+-	      regulator-max-microvolt = <3300000>;
+-	      gpio = <&gpio6 6 0>;
+-	      startup-delay-us = <100>;
+-	      enable-active-high;
+-	      vin-supply = <&reg_sata_phy_slp>;
+-      };
+-
+-      reg_sata_pwren: sata_pwren {
+-	      compatible = "regulator-fixed";
+-	      regulator-name = "cm_fx6_sata_pwren";
+-	      regulator-min-microvolt = <3300000>;
+-	      regulator-max-microvolt = <3300000>;
+-	      gpio = <&gpio1 28 0>;
+-	      startup-delay-us = <100>;
+-	      enable-active-high;
+-	      vin-supply = <&reg_sata_nrstdly>;
+-      };
+-
+-      reg_sata_nstandby1: sata_nstandby1 {
+-	      compatible = "regulator-fixed";
+-	      regulator-name = "cm_fx6_sata_nstandby1";
+-	      regulator-min-microvolt = <3300000>;
+-	      regulator-max-microvolt = <3300000>;
+-	      gpio = <&gpio3 20 0>;
+-	      startup-delay-us = <100>;
+-	      enable-active-high;
+-	      vin-supply = <&reg_sata_pwren>;
+-      };
+-
+-      reg_sata_nstandby2: sata_nstandby2 {
+-	      compatible = "regulator-fixed";
+-	      regulator-name = "cm_fx6_sata_nstandby2";
+-	      regulator-min-microvolt = <3300000>;
+-	      regulator-max-microvolt = <3300000>;
+-	      gpio = <&gpio5 2 0>;
+-	      startup-delay-us = <100>;
+-	      enable-active-high;
+-	      vin-supply = <&reg_sata_nstandby1>;
+-      };
+-
+-      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;
+-	      regulator-boot-on;
+-	      vin-supply = <&reg_sata_nstandby2>;
+-      };
+-   };
+-
+-   gpio-keys {
+-	compatible = "gpio-keys";
+-	power {
+-		label = "Power Button";
+-		gpios = <&gpio1 29 1>;
+-		linux,code = <116>; /* KEY_POWER */
+-		gpio-key,wakeup;
++	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";
++		};
++	};
++
++	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;
++		};
++
++		/* 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;
++		};
++
++		/* 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>;
++		};
++
++		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;
++		};
++
++		reg_sata_nrstdly: sata_nrstdly {
++			compatible = "regulator-fixed";
++			regulator-name = "cm_fx6_sata_nrstdly";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			gpio = <&gpio6 6 0>;
++			startup-delay-us = <100>;
++			enable-active-high;
++			vin-supply = <&reg_sata_phy_slp>;
++		};
++
++		reg_sata_pwren: sata_pwren {
++			compatible = "regulator-fixed";
++			regulator-name = "cm_fx6_sata_pwren";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			gpio = <&gpio1 28 0>;
++			startup-delay-us = <100>;
++			enable-active-high;
++			vin-supply = <&reg_sata_nrstdly>;
++		};
++
++		reg_sata_nstandby1: sata_nstandby1 {
++			compatible = "regulator-fixed";
++			regulator-name = "cm_fx6_sata_nstandby1";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			gpio = <&gpio3 20 0>;
++			startup-delay-us = <100>;
++			enable-active-high;
++			vin-supply = <&reg_sata_pwren>;
++		};
++
++		reg_sata_nstandby2: sata_nstandby2 {
++			compatible = "regulator-fixed";
++			regulator-name = "cm_fx6_sata_nstandby2";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			gpio = <&gpio5 2 0>;
++			startup-delay-us = <100>;
++			enable-active-high;
++			vin-supply = <&reg_sata_nstandby1>;
++		};
++
++		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;
++			regulator-boot-on;
++			vin-supply = <&reg_sata_nstandby2>;
++		};
+ 	};
+-   };
+ 
+-   aliases {
+-	mxcfb0 = &mxcfb1;
+-	mxcfb1 = &mxcfb2;
+-   };
++	aliases {
++		mxcfb0 = &mxcfb1;
++		mxcfb1 = &mxcfb2;
++	};
+ 
+ 	sound {
+ 		compatible = "fsl,imx6q-cm-fx6-wm8731",
+@@ -179,66 +168,58 @@
+ 		audio-routing = "LOUT", "ROUT", "LLINEIN", "RLINEIN";
+ 	};
+ 
+-   sound-hdmi {
+-	compatible = "fsl,imx6q-audio-hdmi",
+-		"fsl,imx-audio-hdmi";
+-	model = "imx-audio-hdmi";
+-	hdmi-controller = <&hdmi_audio>;
+-   };
+-
+-   sound-spdif {
+-	compatible = "fsl,imx-audio-spdif",
+-		"fsl,imx-sabreauto-spdif";
+-	model = "imx-spdif";
+-	spdif-controller = <&spdif>;
+-	spdif-out;
+-	spdif-in;
+-   };
+-
+-   mxcfb1: fb at 0 {
+-	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";
+-   };
+-
+-   mxcfb2: fb at 1 {
+-	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";
+-   };
+-
+-
+-    lcd at 0 {
+-	compatible = "fsl,lcd";
+-	ipu_id = <0>;
+-	disp_id = <0>;
+-	default_ifmt = "RGB24";
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_ipu1_1>;
+-	status = "okay";
+-   };
++	sound-hdmi {
++		compatible = "fsl,imx6q-audio-hdmi",
++			  "fsl,imx-audio-hdmi";
++		model = "imx-audio-hdmi";
++		hdmi-controller = <&hdmi_audio>;
++	};
+ 
+-   v4l2_out {
+-	compatible = "fsl,mxc_v4l2_output";
+-	status = "okay";
+-   };
++	sound-spdif {
++		compatible = "fsl,imx-audio-spdif",
++			  "fsl,imx-sabreauto-spdif";
++		model = "imx-spdif";
++		spdif-controller = <&spdif>;
++		spdif-out;
++		spdif-in;
++	};
+ 
+-   eth at pcie {
+-	compatible = "intel,i211";
+-	local-mac-address = [00 1C 1D 1E 1F 20];
+-	status = "okay";
+-   };
++	mxcfb1: fb at 0 {
++		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";
++	};
++
++	mxcfb2: fb at 1 {
++		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";
++	};
++
++	lcd at 0 {
++		compatible = "fsl,lcd";
++		ipu_id = <0>;
++		disp_id = <0>;
++		default_ifmt = "RGB24";
++		pinctrl-names = "default";
++		pinctrl-0 = <&pinctrl_ipu1_1>;
++		status = "okay";
++	};
+ 
++	v4l2_out {
++		compatible = "fsl,mxc_v4l2_output";
++		status = "okay";
++	};
+ };
+ 
+ &iomuxc {
+@@ -258,261 +239,240 @@
+ 				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
+ 			>;
+ 		};
+ 	};
+ 
+-   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
+-         >;
+-      };
++	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
++			>;
++		};
+       
+-      /* 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
+-            MX6QDL_PAD_SD4_DAT0__NAND_DQS      0x00b1
+-         >;
+-      };
+-
+-      /* pins for i2c1 */
+-      pinctrl_i2c1: i2c1grp {
+-         fsl,pins = <
+-            MX6QDL_PAD_EIM_D21__I2C1_SCL 0x4001b8b1
+-            MX6QDL_PAD_EIM_D28__I2C1_SDA 0x4001b8b1
+-         >;
+-      };
++		/* 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
++				MX6QDL_PAD_SD4_DAT0__NAND_DQS      0x00b1
++			>;
++		};
++
++		/* pins for i2c1 */
++		pinctrl_i2c1: i2c1grp {
++			fsl,pins = <
++				MX6QDL_PAD_EIM_D21__I2C1_SCL 0x4001b8b1
++				MX6QDL_PAD_EIM_D28__I2C1_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 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 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 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 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
+-         >;
+-      };
+-
+-      /* 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
+-	>;
+-	};
++		/* 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 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
+-	>;
+-	};
++		/* 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 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
++			>;
++		};
++
++		/* pins for spdif */
++		pinctrl_spdif: spdifgrp {
++			fsl,pins = <
++				MX6QDL_PAD_GPIO_16__SPDIF_IN  0x1b0b0
++				MX6QDL_PAD_GPIO_19__SPDIF_OUT 0x1b0b0
++			>;
++		};
+ 
+-	/* pins for pcie */
+-	pinctrl_pcie: pciegrp {
+-		fsl,pins = <
+-			MX6QDL_PAD_ENET_RXD1__GPIO1_IO26 0x80000000
+-			MX6QDL_PAD_EIM_CS1__GPIO2_IO24 0x80000000
+-	>;
+-     };
+-   };
++		/* 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
++			>;
++		};
++	};
+ };
+ 
+ /* 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>;
+-      };
+-   };
++	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>;
++		};
++	};
+ };
+ 
+ /* eth0 */
+ &fec {
+-   pinctrl-names = "default";
+-   pinctrl-0 = <&pinctrl_enet>;
+-   phy-mode = "rgmii";
+-   status = "okay";
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_enet>;
++	phy-mode = "rgmii";
++	status = "okay";
+ };
+ 
+ /* nand */
+ &gpmi {
+-   pinctrl-names = "default";
+-   pinctrl-0 = <&pinctrl_gpmi_nand>;
+-   status = "okay";
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_gpmi_nand>;
++	status = "okay";
+ };
+ 
+ /* i2c1 */
+ &i2c1 {
+-   pinctrl-names = "default";
+-   pinctrl-0 = <&pinctrl_i2c1>;
+-   status = "okay";
+-
+-   eeprom at 50 {
+-      compatible = "at24,24c02";
+-      reg = <0x50>;
+-      pagesize = <16>;
+-   };
+-
+-   rtc at 56 {
+-      compatible = "emmicro,em3027";
+-      reg = <0x56>;
+-   };
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_i2c1>;
++	status = "okay";
++
++	eeprom at 50 {
++		compatible = "at24,24c02";
++		reg = <0x50>;
++		pagesize = <16>;
++	};
+ };
+ 
+ /* i2c2 */
+-&i2c2 {
+-   pinctrl-names = "default";
+-   pinctrl-0 = <&pinctrl_i2c2>;
+-   /* status = "okay"; */
++&i2c2 { /* to be removed */
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_i2c2>;
++	/* status = "okay"; */
+ };
+ 
+ /* i2c3 */
+ &i2c3 {
+-   pinctrl-names = "default";
+-   pinctrl-0 = <&pinctrl_i2c3>;
+-   status = "okay";
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_i2c3>;
++	status = "okay";
+ 
+-   eeprom at 50 {
+-      compatible = "at24,24c02";
+-      reg = <0x50>;
+-      pagesize = <16>;
+-   };
++	eeprom at 50 {
++		compatible = "at24,24c02";
++		reg = <0x50>;
++		pagesize = <16>;
++	};
+ 
+ 	codec: wm8731 at 1a {
+ 		compatible = "wlf,wm8731";
+@@ -526,71 +486,51 @@
+ 	};
+ };
+ 
+-/* eth1 */ 
+-&pcie {
+-   pinctrl-names = "default";
+-   pinctrl-0 = <&pinctrl_pcie>;
+-   reset-gpio = <&gpio1 26 0>;
+-   power-on-gpio = <&gpio2 24 0>;
+-   status = "okay";
+-};
+-
+ /* sata */
+ &sata {
+-   status = "okay";
+-};
+-
+-/* rear serial console */
+-&uart2 {
+-   pinctrl-names = "default";
+-   pinctrl-0 = <&pinctrl_uart2>;
+-   /* fsl,dte-mode; */
+-   fsl,uart-has-rtscts;
+-   dma-names = "rx", "tx";
+-   dmas = <&sdma 27 4 0>, <&sdma 28 4 0>;
+-   status = "okay";
++	status = "okay";
+ };
+ 
+ /* console */
+ &uart4 {
+-   pinctrl-names = "default";
+-   pinctrl-0 = <&pinctrl_uart4>;
+-   status = "okay";
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_uart4>;
++	status = "okay";
+ };
+ 
+ /* usb otg */
+ &usbotg {
+-   vbus-supply = <&reg_usb_otg_vbus>;
+-   pinctrl-names = "default";
+-   pinctrl-0 = <&pinctrl_usbotg>;
+-   dr_mode = "otg";
+-   status = "okay";
++	vbus-supply = <&reg_usb_otg_vbus>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usbotg>;
++	dr_mode = "otg";
++	status = "okay";
+ };
+ 
+ /* usb hub1 */
+ &usbh1 {
+-   vbus-supply = <&reg_usb_h1_vbus>;
+-   pinctrl-names = "default";
+-   pinctrl-0 = <&pinctrl_usbh1>;
+-   status = "okay";
++	vbus-supply = <&reg_usb_h1_vbus>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usbh1>;
++	status = "okay";
+ };
+ 
+ /* wifi/bt */
+ &usdhc1 {
+-   pinctrl-names = "default";
+-   pinctrl-0 = <&pinctrl_usdhc1>;
+-   non-removable;
+-   vmmc-supply = <&awnh387_npoweron>;
+-   vmmc_aux-supply = <&awnh387_wifi_nreset>;
+-   status = "okay";
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usdhc1>;
++	non-removable;
++	vmmc-supply = <&awnh387_npoweron>;
++	vmmc_aux-supply = <&awnh387_wifi_nreset>;
++	status = "okay";
+ };
+ 
+ /* mmc */
+ &usdhc3 {
+-   pinctrl-names = "default";
+-   pinctrl-0 = <&pinctrl_usdhc3>;
+-   vmmc-supply = <&reg_3p3v>;
+-   status = "okay";
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usdhc3>;
++	vmmc-supply = <&reg_3p3v>;
++	status = "okay";
+ };
+ 
+ &ssi2 {
+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..5d3c7da
+--- /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
++*/
++
++#include "imx6q-cm-fx6.dts"
++
++/ {
++   model = "CompuLab CM-FX6 on SBC-FX6";
++   compatible = "compulab,cm-fx6", "compulab,sbc-fx6", "fsl,imx6q";
++};
++
++&pcie {
++	status = "okay";
++};
+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..0e76f02
+--- /dev/null
++++ b/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
+@@ -0,0 +1,83 @@
++/*
++* 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 "imx6q-cm-fx6.dts"
++
++/ {
++	model = "CompuLab CM-FX6 on SBC-FX6m";	
++	compatible = "compulab,cm-fx6", "compulab,sbc-fx6m", "fsl,imx6q";
++
++	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;
++		};
++	};
++};
++
++&iomuxc {
++	imx6q-sb-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
++		>;
++		};
++
++		/* pins for pcie */
++		pinctrl_pcie: pciegrp {
++			fsl,pins = <
++				MX6QDL_PAD_ENET_RXD1__GPIO1_IO26 0x80000000
++				MX6QDL_PAD_EIM_CS1__GPIO2_IO24 0x80000000
++		>;
++	    };
++	};
++};
++
++&i2c1 {
++	rtc at 56 {
++		compatible = "emmicro,em3027";
++		reg = <0x56>;
++	};
++};
++
++&pcie {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_pcie>;
++	reset-gpio = <&gpio1 26 0>;
++	power-on-gpio = <&gpio2 24 0>;
++	status = "okay";
++};
++
++/* rear serial console */
++&uart2 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_uart2>;
++	/* fsl,dte-mode; */
++	fsl,uart-has-rtscts;
++	dma-names = "rx", "tx";
++	dmas = <&sdma 27 4 0>, <&sdma 28 4 0>;
++	status = "okay";
++};
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0022-ARM-i.MX6-dts-refactoring-of-the-cm-fx6-device-tree-.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0022-ARM-i.MX6-dts-refactoring-of-the-cm-fx6-device-tree-.patch
new file mode 100644
index 0000000..f998633
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0022-ARM-i.MX6-dts-refactoring-of-the-cm-fx6-device-tree-.patch
@@ -0,0 +1,1422 @@
+From 0597ee45b5a7b0491977b7b91745c24a0406783f Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Tue, 12 Aug 2014 17:46:23 +0300
+Subject: [PATCH 22/59] ARM: i.MX6: dts: refactoring of the cm-fx6 device tree
+ files.
+
+Refactoring device tree files:
+1) Utilite:
++ imx6q.dtsi
++ imx6q-sb-fx6x.dtsi
++ imx6q-sb-fx6m.dtsi
++ imx6q-cm-fx6.dtsi
+= imx6q-sbc-fx6m.dts
+
+2) CM-FX6-EVAL:
++ imx6q.dtsi
++ imx6q-sb-fx6x.dtsi
++ imx6q-sb-fx6.dtsi
++ imx6q-cm-fx6.dtsi
+= imx6q-sbc-fx6.dts
+
+3) CM-FX6 Module:
++ imx6q.dtsi
++ imx6q-cm-fx6.dtsi
+= imx6q-cm-fx6.dts
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dts   |  582 +---------------------------------
+ arch/arm/boot/dts/imx6q-cm-fx6.dtsi  |  531 +++++++++++++++++++++++++++++++
+ arch/arm/boot/dts/imx6q-sb-fx6.dtsi  |   14 +
+ arch/arm/boot/dts/imx6q-sb-fx6m.dtsi |   32 ++
+ arch/arm/boot/dts/imx6q-sb-fx6x.dtsi |   75 +++++
+ arch/arm/boot/dts/imx6q-sbc-fx6.dts  |    8 +-
+ arch/arm/boot/dts/imx6q-sbc-fx6m.dts |   38 +--
+ 7 files changed, 677 insertions(+), 603 deletions(-)
+ create mode 100644 arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+ create mode 100644 arch/arm/boot/dts/imx6q-sb-fx6.dtsi
+ create mode 100644 arch/arm/boot/dts/imx6q-sb-fx6m.dtsi
+ create mode 100644 arch/arm/boot/dts/imx6q-sb-fx6x.dtsi
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+index fa32c57..a0e423b 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+@@ -1,576 +1,20 @@
+ /*
+-* Copyright 2013 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
+-*/
++ * 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"
+ 
+ / {
+ 	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";
+-		};
+-	};
+-
+-	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;
+-		};
+-
+-		/* 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;
+-		};
+-
+-		/* 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>;
+-		};
+-
+-		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;
+-		};
+-
+-		reg_sata_nrstdly: sata_nrstdly {
+-			compatible = "regulator-fixed";
+-			regulator-name = "cm_fx6_sata_nrstdly";
+-			regulator-min-microvolt = <3300000>;
+-			regulator-max-microvolt = <3300000>;
+-			gpio = <&gpio6 6 0>;
+-			startup-delay-us = <100>;
+-			enable-active-high;
+-			vin-supply = <&reg_sata_phy_slp>;
+-		};
+-
+-		reg_sata_pwren: sata_pwren {
+-			compatible = "regulator-fixed";
+-			regulator-name = "cm_fx6_sata_pwren";
+-			regulator-min-microvolt = <3300000>;
+-			regulator-max-microvolt = <3300000>;
+-			gpio = <&gpio1 28 0>;
+-			startup-delay-us = <100>;
+-			enable-active-high;
+-			vin-supply = <&reg_sata_nrstdly>;
+-		};
+-
+-		reg_sata_nstandby1: sata_nstandby1 {
+-			compatible = "regulator-fixed";
+-			regulator-name = "cm_fx6_sata_nstandby1";
+-			regulator-min-microvolt = <3300000>;
+-			regulator-max-microvolt = <3300000>;
+-			gpio = <&gpio3 20 0>;
+-			startup-delay-us = <100>;
+-			enable-active-high;
+-			vin-supply = <&reg_sata_pwren>;
+-		};
+-
+-		reg_sata_nstandby2: sata_nstandby2 {
+-			compatible = "regulator-fixed";
+-			regulator-name = "cm_fx6_sata_nstandby2";
+-			regulator-min-microvolt = <3300000>;
+-			regulator-max-microvolt = <3300000>;
+-			gpio = <&gpio5 2 0>;
+-			startup-delay-us = <100>;
+-			enable-active-high;
+-			vin-supply = <&reg_sata_nstandby1>;
+-		};
+-
+-		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;
+-			regulator-boot-on;
+-			vin-supply = <&reg_sata_nstandby2>;
+-		};
+-	};
+-
+-	aliases {
+-		mxcfb0 = &mxcfb1;
+-		mxcfb1 = &mxcfb2;
+-	};
+-
+-	sound {
+-		compatible = "fsl,imx6q-cm-fx6-wm8731",
+-			  "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,imx6q-audio-hdmi",
+-			  "fsl,imx-audio-hdmi";
+-		model = "imx-audio-hdmi";
+-		hdmi-controller = <&hdmi_audio>;
+-	};
+-
+-	sound-spdif {
+-		compatible = "fsl,imx-audio-spdif",
+-			  "fsl,imx-sabreauto-spdif";
+-		model = "imx-spdif";
+-		spdif-controller = <&spdif>;
+-		spdif-out;
+-		spdif-in;
+-	};
+-
+-	mxcfb1: fb at 0 {
+-		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";
+-	};
+-
+-	mxcfb2: fb at 1 {
+-		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";
+-	};
+-
+-	lcd at 0 {
+-		compatible = "fsl,lcd";
+-		ipu_id = <0>;
+-		disp_id = <0>;
+-		default_ifmt = "RGB24";
+-		pinctrl-names = "default";
+-		pinctrl-0 = <&pinctrl_ipu1_1>;
+-		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 = <
+-				/* 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
+-			>;
+-		};
+-	};
+-
+-	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
+-			>;
+-		};
+-      
+-		/* 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
+-				MX6QDL_PAD_SD4_DAT0__NAND_DQS      0x00b1
+-			>;
+-		};
+-
+-		/* pins for i2c1 */
+-		pinctrl_i2c1: i2c1grp {
+-			fsl,pins = <
+-				MX6QDL_PAD_EIM_D21__I2C1_SCL 0x4001b8b1
+-				MX6QDL_PAD_EIM_D28__I2C1_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 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
+-			>;
+-		};
+-
+-		/* 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
+-			>;
+-		};
+-	};
+-};
+-
+-/* 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>;
+-		};
+-	};
+-};
+-
+-/* eth0 */
+-&fec {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_enet>;
+-	phy-mode = "rgmii";
+-	status = "okay";
+-};
+-
+-/* nand */
+-&gpmi {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_gpmi_nand>;
+-	status = "okay";
+-};
+-
+-/* i2c1 */
+-&i2c1 {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_i2c1>;
+-	status = "okay";
+-
+-	eeprom at 50 {
+-		compatible = "at24,24c02";
+-		reg = <0x50>;
+-		pagesize = <16>;
+-	};
+-};
+-
+-/* i2c2 */
+-&i2c2 { /* to be removed */
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_i2c2>;
+-	/* status = "okay"; */
+-};
+-
+-/* 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>;
+-	};
+-};
+-
+-/* sata */
+-&sata {
+-	status = "okay";
+-};
+-
+-/* console */
+-&uart4 {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_uart4>;
+-	status = "okay";
+-};
+-
+-/* usb otg */
+-&usbotg {
+-	vbus-supply = <&reg_usb_otg_vbus>;
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_usbotg>;
+-	dr_mode = "otg";
+-	status = "okay";
+-};
+-
+-/* usb hub1 */
+-&usbh1 {
+-	vbus-supply = <&reg_usb_h1_vbus>;
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_usbh1>;
+-	status = "okay";
+-};
+-
+-/* wifi/bt */
+-&usdhc1 {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_usdhc1>;
+-	non-removable;
+-	vmmc-supply = <&awnh387_npoweron>;
+-	vmmc_aux-supply = <&awnh387_wifi_nreset>;
+-	status = "okay";
+-};
+-
+-/* mmc */
+-&usdhc3 {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_usdhc3>;
+-	vmmc-supply = <&reg_3p3v>;
+-	status = "okay";
+-};
+-
+-&ssi2 {
+-	fsl,mode = "i2s-master";
+-	status = "okay";
+-};
+-
+-&mxcfb1 {
+-	status = "okay";
+-};
+-
+-&mxcfb2 {
+-	status = "okay";
+-};
+-
+-&hdmi_core {
+-	ipu_id = <1>;
+-	disp_id = <0>;
+-	status = "okay";
+-};
+-
+-&hdmi_video {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_hdmi_hdcp_1>;
+-	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";
+-};
++};
+\ No newline at end of file
+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..0aa4461
+--- /dev/null
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+@@ -0,0 +1,531 @@
++/*
++ * 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 "imx6q.dtsi"
++
++/ {
++	memory {
++		reg = <0x10000000 0x80000000>;
++	};
++
++	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;
++		};
++
++		/* 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>;
++		};
++
++		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;
++		};
++
++		reg_sata_nrstdly: sata_nrstdly {
++			compatible = "regulator-fixed";
++			regulator-name = "cm_fx6_sata_nrstdly";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			gpio = <&gpio6 6 0>;
++			startup-delay-us = <100>;
++			enable-active-high;
++			vin-supply = <&reg_sata_phy_slp>;
++		};
++
++		reg_sata_pwren: sata_pwren {
++			compatible = "regulator-fixed";
++			regulator-name = "cm_fx6_sata_pwren";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			gpio = <&gpio1 28 0>;
++			startup-delay-us = <100>;
++			enable-active-high;
++			vin-supply = <&reg_sata_nrstdly>;
++		};
++
++		reg_sata_nstandby1: sata_nstandby1 {
++			compatible = "regulator-fixed";
++			regulator-name = "cm_fx6_sata_nstandby1";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			gpio = <&gpio3 20 0>;
++			startup-delay-us = <100>;
++			enable-active-high;
++			vin-supply = <&reg_sata_pwren>;
++		};
++
++		reg_sata_nstandby2: sata_nstandby2 {
++			compatible = "regulator-fixed";
++			regulator-name = "cm_fx6_sata_nstandby2";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++			gpio = <&gpio5 2 0>;
++			startup-delay-us = <100>;
++			enable-active-high;
++			vin-supply = <&reg_sata_nstandby1>;
++		};
++
++		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;
++			regulator-boot-on;
++			vin-supply = <&reg_sata_nstandby2>;
++		};
++	};
++
++	aliases {
++		mxcfb0 = &mxcfb1;
++		mxcfb1 = &mxcfb2;
++	};
++
++	sound {
++		compatible = "fsl,imx6q-cm-fx6-wm8731",
++			  "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,imx6q-audio-hdmi",
++			  "fsl,imx-audio-hdmi";
++		model = "imx-audio-hdmi";
++		hdmi-controller = <&hdmi_audio>;
++	};
++
++	sound-spdif {
++		compatible = "fsl,imx-audio-spdif",
++			  "fsl,imx-sabreauto-spdif";
++		model = "imx-spdif";
++		spdif-controller = <&spdif>;
++		spdif-out;
++		spdif-in;
++	};
++
++	mxcfb1: fb at 0 {
++		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";
++	};
++
++	mxcfb2: fb at 1 {
++		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";
++	};
++
++	lcd at 0 {
++		compatible = "fsl,lcd";
++		ipu_id = <0>;
++		disp_id = <0>;
++		default_ifmt = "RGB24";
++		pinctrl-names = "default";
++		pinctrl-0 = <&pinctrl_ipu1_1>;
++		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 = <
++				/* 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
++			>;
++		};
++	};
++
++	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
++			>;
++		};
++
++		/* 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
++				MX6QDL_PAD_SD4_DAT0__NAND_DQS      0x00b1
++			>;
++		};
++
++		/* 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 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
++			>;
++		};
++	};
++};
++
++/* 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>;
++		};
++	};
++};
++
++/* eth0 */
++&fec {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_enet>;
++	phy-mode = "rgmii";
++	status = "okay";
++};
++
++/* nand */
++&gpmi {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_gpmi_nand>;
++	status = "okay";
++};
++
++/* 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>;
++	power-on-gpio = <&gpio2 24 0>;
++	status = "okay";
++};
++
++/* sata */
++&sata {
++	status = "okay";
++};
++
++/* console */
++&uart4 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_uart4>;
++	status = "okay";
++};
++
++/* usb otg */
++&usbotg {
++	vbus-supply = <&reg_usb_otg_vbus>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usbotg>;
++	dr_mode = "otg";
++	status = "okay";
++};
++
++/* usb hub1 */
++&usbh1 {
++	vbus-supply = <&reg_usb_h1_vbus>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usbh1>;
++	status = "okay";
++};
++
++/* wifi/bt */
++&usdhc1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usdhc1>;
++	non-removable;
++	vmmc-supply = <&awnh387_npoweron>;
++	vmmc_aux-supply = <&awnh387_wifi_nreset>;
++	status = "okay";
++};
++
++&ssi2 {
++	fsl,mode = "i2s-master";
++	status = "okay";
++};
++
++&mxcfb1 {
++	status = "okay";
++};
++
++&mxcfb2 {
++	status = "okay";
++};
++
++&hdmi_core {
++	ipu_id = <1>;
++	disp_id = <0>;
++	status = "okay";
++};
++
++&hdmi_video {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_hdmi_hdcp_1>;
++	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";
++};
+\ No newline at end of file
+diff --git a/arch/arm/boot/dts/imx6q-sb-fx6.dtsi b/arch/arm/boot/dts/imx6q-sb-fx6.dtsi
+new file mode 100644
+index 0000000..acfc572
+--- /dev/null
++++ b/arch/arm/boot/dts/imx6q-sb-fx6.dtsi
+@@ -0,0 +1,14 @@
++/*
++ * 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 "imx6q-sb-fx6x.dtsi"
+\ No newline at end of file
+diff --git a/arch/arm/boot/dts/imx6q-sb-fx6m.dtsi b/arch/arm/boot/dts/imx6q-sb-fx6m.dtsi
+new file mode 100644
+index 0000000..5a488f8
+--- /dev/null
++++ b/arch/arm/boot/dts/imx6q-sb-fx6m.dtsi
+@@ -0,0 +1,32 @@
++/*
++ * 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 "imx6q-sb-fx6x.dtsi"
++
++/ {
++	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;
++		};
++	};
++};
+\ No newline at end of file
+diff --git a/arch/arm/boot/dts/imx6q-sb-fx6x.dtsi b/arch/arm/boot/dts/imx6q-sb-fx6x.dtsi
+new file mode 100644
+index 0000000..9f67b3e
+--- /dev/null
++++ b/arch/arm/boot/dts/imx6q-sb-fx6x.dtsi
+@@ -0,0 +1,75 @@
++/*
++ * 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 "imx6q.dtsi"
++
++/ {
++	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 {
++	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
++			>;
++		};
++	};
++};
++
++/* i2c1 */
++&i2c1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_i2c1>;
++	eeprom at 50 {
++		compatible = "at24,24c02";
++		reg = <0x50>;
++		pagesize = <16>;
++	};
++};
++
++/* mmc */
++&usdhc3 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usdhc3>;
++	vmmc-supply = <&reg_3p3v>;
++	status = "disabled";
++};
+\ No newline at end of file
+diff --git a/arch/arm/boot/dts/imx6q-sbc-fx6.dts b/arch/arm/boot/dts/imx6q-sbc-fx6.dts
+index 5d3c7da..33e4f33 100644
+--- a/arch/arm/boot/dts/imx6q-sbc-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-sbc-fx6.dts
+@@ -11,13 +11,15 @@
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+ 
+-#include "imx6q-cm-fx6.dts"
++/dts-v1/;
++#include "imx6q-sb-fx6x.dtsi"
++#include "imx6q-cm-fx6.dtsi"
+ 
+ / {
+    model = "CompuLab CM-FX6 on SBC-FX6";
+    compatible = "compulab,cm-fx6", "compulab,sbc-fx6", "fsl,imx6q";
+ };
+ 
+-&pcie {
++&usdhc3 {
+ 	status = "okay";
+-};
++};
+\ No newline at end of file
+diff --git a/arch/arm/boot/dts/imx6q-sbc-fx6m.dts b/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
+index 0e76f02..2282250 100644
+--- a/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
++++ b/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
+@@ -11,31 +11,18 @@
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+ 
+-#include "imx6q-cm-fx6.dts"
++/dts-v1/;
++#include "imx6q-sb-fx6m.dtsi"
++#include "imx6q-cm-fx6.dtsi"
+ 
+ / {
+ 	model = "CompuLab CM-FX6 on SBC-FX6m";	
+ 	compatible = "compulab,cm-fx6", "compulab,sbc-fx6m", "fsl,imx6q";
+ 
+-	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;
+-		};
+-	};
+ };
+ 
+ &iomuxc {
+-	imx6q-sb-fx6m {
++	imx6q-sbc-fx6m {
+ 		/* pins for uart2 */
+ 		pinctrl_uart2: uart2grp {
+ 			fsl,pins = <
+@@ -45,17 +32,10 @@
+ 				MX6QDL_PAD_SD4_DAT6__UART2_CTS_B 0x1b0b1
+ 		>;
+ 		};
+-
+-		/* pins for pcie */
+-		pinctrl_pcie: pciegrp {
+-			fsl,pins = <
+-				MX6QDL_PAD_ENET_RXD1__GPIO1_IO26 0x80000000
+-				MX6QDL_PAD_EIM_CS1__GPIO2_IO24 0x80000000
+-		>;
+-	    };
+ 	};
+ };
+ 
++
+ &i2c1 {
+ 	rtc at 56 {
+ 		compatible = "emmicro,em3027";
+@@ -63,11 +43,7 @@
+ 	};
+ };
+ 
+-&pcie {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_pcie>;
+-	reset-gpio = <&gpio1 26 0>;
+-	power-on-gpio = <&gpio2 24 0>;
++&usdhc3 {
+ 	status = "okay";
+ };
+ 
+@@ -80,4 +56,4 @@
+ 	dma-names = "rx", "tx";
+ 	dmas = <&sdma 27 4 0>, <&sdma 28 4 0>;
+ 	status = "okay";
+-};
++};
+\ No newline at end of file
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0023-ARM-i.MX6-dts-pcie-power-on-gpio-to-a-fixed-regulato.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0023-ARM-i.MX6-dts-pcie-power-on-gpio-to-a-fixed-regulato.patch
new file mode 100644
index 0000000..89162e2
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0023-ARM-i.MX6-dts-pcie-power-on-gpio-to-a-fixed-regulato.patch
@@ -0,0 +1,46 @@
+From dbd1cd2da1f43bde17e66b95128533d1658ece09 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Wed, 20 Aug 2014 14:48:09 +0300
+Subject: [PATCH 23/59] ARM: i.MX6: dts: pcie power-on-gpio to a fixed
+ regulator
+
+Define pcie power-on-gpio as a fixed regulator.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dtsi |   12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dtsi b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+index 0aa4461..27f9567 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+@@ -42,6 +42,16 @@
+ 			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";
+@@ -445,7 +455,7 @@
+ 	pinctrl-names = "default";
+ 	pinctrl-0 = <&pinctrl_pcie>;
+ 	reset-gpio = <&gpio1 26 0>;
+-	power-on-gpio = <&gpio2 24 0>;
++	vdd-supply = <&pcie_power_on_gpio>;
+ 	status = "okay";
+ };
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0024-ARM-i.MX6-dts-add-i2c1-status-okay.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0024-ARM-i.MX6-dts-add-i2c1-status-okay.patch
new file mode 100644
index 0000000..cead2ac
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0024-ARM-i.MX6-dts-add-i2c1-status-okay.patch
@@ -0,0 +1,45 @@
+From 84e2c9793f9240cec297eef8bb38978aade1fbb1 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Wed, 20 Aug 2014 15:15:38 +0300
+Subject: [PATCH 24/59] ARM: i.MX6: dts: add i2c1 status okay
+
+Restore the i2c1 bus staus that has been deleted while refactoring.
+It was the reason why em3027 stoped working.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-sbc-fx6.dts  |    4 ++++
+ arch/arm/boot/dts/imx6q-sbc-fx6m.dts |    1 +
+ 2 files changed, 5 insertions(+)
+
+diff --git a/arch/arm/boot/dts/imx6q-sbc-fx6.dts b/arch/arm/boot/dts/imx6q-sbc-fx6.dts
+index 33e4f33..6f6ad33 100644
+--- a/arch/arm/boot/dts/imx6q-sbc-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-sbc-fx6.dts
+@@ -20,6 +20,10 @@
+    compatible = "compulab,cm-fx6", "compulab,sbc-fx6", "fsl,imx6q";
+ };
+ 
++&i2c1 {
++	status = "okay";
++};
++
+ &usdhc3 {
+ 	status = "okay";
+ };
+\ No newline at end of file
+diff --git a/arch/arm/boot/dts/imx6q-sbc-fx6m.dts b/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
+index 2282250..cf2a0eb 100644
+--- a/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
++++ b/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
+@@ -37,6 +37,7 @@
+ 
+ 
+ &i2c1 {
++	status = "okay";
+ 	rtc at 56 {
+ 		compatible = "emmicro,em3027";
+ 		reg = <0x56>;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0025-ARM-i.MX6-dts-add-local-mac-address-field-for-fec.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0025-ARM-i.MX6-dts-add-local-mac-address-field-for-fec.patch
new file mode 100644
index 0000000..1295ded
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0025-ARM-i.MX6-dts-add-local-mac-address-field-for-fec.patch
@@ -0,0 +1,28 @@
+From b223d8ffc36e39f88c1b9014ca6bbaecd9022508 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Wed, 3 Sep 2014 10:48:29 +0300
+Subject: [PATCH 25/59] ARM: i.MX6: dts: add local-mac-address field for fec.
+
+Add local-mac-address field for fec.
+The board U-Boot is in charge to fill this field with a correct value.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6qdl.dtsi |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/arm/boot/dts/imx6qdl.dtsi b/arch/arm/boot/dts/imx6qdl.dtsi
+index 732f2d2..f4f3de3 100644
+--- a/arch/arm/boot/dts/imx6qdl.dtsi
++++ b/arch/arm/boot/dts/imx6qdl.dtsi
+@@ -944,6 +944,7 @@
+ 					 <&clks IMX6QDL_CLK_ENET>,
+ 					 <&clks IMX6QDL_CLK_ENET_REF>;
+ 				clock-names = "ipg", "ahb", "ptp";
++				local-mac-address = [FF FF FF FF FF FF];
+ 				status = "disabled";
+ 			};
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0026-ARM-mxs-change-usb-phy-test-clock-gating.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0026-ARM-mxs-change-usb-phy-test-clock-gating.patch
new file mode 100644
index 0000000..2a2436e
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0026-ARM-mxs-change-usb-phy-test-clock-gating.patch
@@ -0,0 +1,36 @@
+From e7e09deee3c3ac74e3d429cf8af2effade1152c7 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 28 Dec 2014 15:05:21 +0200
+Subject: [PATCH 26/59] ARM: mxs: change usb phy test clock gating.
+
+This change proposes to invert test clock gating.
+This solution has fixed usb hub suspend resume loop issue.
+---
+ drivers/usb/phy/phy-mxs-usb.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/usb/phy/phy-mxs-usb.c b/drivers/usb/phy/phy-mxs-usb.c
+index 97556b5..fffa67d 100644
+--- a/drivers/usb/phy/phy-mxs-usb.c
++++ b/drivers/usb/phy/phy-mxs-usb.c
+@@ -239,7 +239,7 @@ static void __mxs_phy_disconnect_line(struct mxs_phy *mxs_phy, bool disconnect)
+ 
+ 	if (disconnect)
+ 		writel_relaxed(BM_USBPHY_DEBUG_CLKGATE,
+-			base + HW_USBPHY_DEBUG_CLR);
++			base + HW_USBPHY_DEBUG_SET);
+ 
+ 	if (mxs_phy->port_id == 0) {
+ 		reg = disconnect ? ANADIG_USB1_LOOPBACK_SET
+@@ -257,7 +257,7 @@ static void __mxs_phy_disconnect_line(struct mxs_phy *mxs_phy, bool disconnect)
+ 
+ 	if (!disconnect)
+ 		writel_relaxed(BM_USBPHY_DEBUG_CLKGATE,
+-			base + HW_USBPHY_DEBUG_SET);
++			base + HW_USBPHY_DEBUG_CLR);
+ 
+ 	/* Delay some time, and let Linestate be SE0 for controller */
+ 	if (disconnect)
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0027-ARM-i.MX6-dts-fix-the-cm-fx6-operation-points.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0027-ARM-i.MX6-dts-fix-the-cm-fx6-operation-points.patch
new file mode 100644
index 0000000..8f77c7e
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0027-ARM-i.MX6-dts-fix-the-cm-fx6-operation-points.patch
@@ -0,0 +1,51 @@
+From 246fc4a1169a2ef6fa2582e72bdf3d9c9dc451c2 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Tue, 30 Dec 2014 13:55:58 +0200
+Subject: [PATCH 27/59] ARM: i.MX6: dts: fix the cm-fx6 operation points.
+
+Fix the cm-fx6 operation points. Remove settings for 1.2GHz.
+The current ldo settings do not allow 1.2GHz cpu frequency.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dtsi |   19 ++++++++++++++++++-
+ 1 file changed, 18 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dtsi b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+index 27f9567..12eed61 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+@@ -380,6 +380,23 @@
+ 	};
+ };
+ 
++&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>;
+@@ -538,4 +555,4 @@
+ 	pinctrl-names = "default";
+ 	pinctrl-0 = <&pinctrl_audmux>;
+ 	status = "okay";
+-};
+\ No newline at end of file
++};
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0028-ARM-i.MX6-ASoC-fix-build-warnings-and-update-include.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0028-ARM-i.MX6-ASoC-fix-build-warnings-and-update-include.patch
new file mode 100644
index 0000000..df9102d
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0028-ARM-i.MX6-ASoC-fix-build-warnings-and-update-include.patch
@@ -0,0 +1,71 @@
+From 4e0f406df2399be8984a6b774669ec1181153a37 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Mon, 5 Jan 2015 10:34:13 +0200
+Subject: [PATCH 28/59] ARM: i.MX6: ASoC: fix build warnings and update
+ includes
+
+Fix build warnings and update includes.
+
+sound/soc/fsl/imx-wm8731.c: In function 'imx_hifi_hw_params_slv_mode':
+sound/soc/fsl/imx-wm8731.c:357:3: warning: format '%u' expects type 'unsigned int', but argument 2 has type 'long int'
+sound/soc/fsl/imx-wm8731.c: In function 'imx_hifi_hw_params_mst_mode':
+sound/soc/fsl/imx-wm8731.c:414:3: warning: format '%u' expects type 'unsigned int', but argument 2 has type 'long int'
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ sound/soc/fsl/imx-wm8731.c |   13 ++++---------
+ 1 file changed, 4 insertions(+), 9 deletions(-)
+
+diff --git a/sound/soc/fsl/imx-wm8731.c b/sound/soc/fsl/imx-wm8731.c
+index 72b75ad..c0833cf 100644
+--- a/sound/soc/fsl/imx-wm8731.c
++++ b/sound/soc/fsl/imx-wm8731.c
+@@ -14,17 +14,12 @@
+  */
+ 
+ #include <linux/module.h>
++#include <linux/of.h>
+ #include <linux/of_platform.h>
+ #include <linux/of_i2c.h>
+-#include <linux/of_gpio.h>
+-#include <linux/slab.h>
+-#include <linux/gpio.h>
+ #include <linux/clk.h>
+ #include <sound/soc.h>
+-#include <sound/jack.h>
+ #include <sound/pcm_params.h>
+-#include <sound/soc-dapm.h>
+-#include <linux/pinctrl/consumer.h>
+ 
+ #include "../codecs/wm8731.h"
+ #include "imx-audmux.h"
+@@ -344,7 +339,7 @@ static int imx_hifi_hw_params_slv_mode(struct snd_pcm_substream *substream,
+ 				     SND_SOC_CLOCK_IN);
+ 
+ 	if (ret < 0) {
+-		pr_err("Failed to set codec master clock to %u: %d \n",
++		pr_err("Failed to set codec master clock to %lu: %d \n",
+ 		       data->sysclk, ret);
+ 		return ret;
+ 	}
+@@ -401,7 +396,7 @@ static int imx_hifi_hw_params_mst_mode(struct snd_pcm_substream *substream,
+ 				     SND_SOC_CLOCK_IN);
+ 
+ 	if (ret < 0) {
+-		pr_err("Failed to set codec master clock to %u: %d \n",
++		pr_err("Failed to set codec master clock to %lu: %d \n",
+ 		       data->sysclk, ret);
+ 		return ret;
+ 	}
+@@ -555,7 +550,7 @@ static int imx_wm8731_probe(struct platform_device *pdev)
+ 	}
+         
+ 	codec_dev = of_find_i2c_device_by_node(codec_np);
+-	if (!codec_dev || !codec_dev->driver) {
++	if (!codec_dev) {
+ 		dev_err(&pdev->dev, "failed to find codec platform device\n");
+ 		ret = -EINVAL;
+ 		goto fail;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0029-ARM-i.MX6-dts-change-issd-gpio-order.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0029-ARM-i.MX6-dts-change-issd-gpio-order.patch
new file mode 100644
index 0000000..4076dfa
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0029-ARM-i.MX6-dts-change-issd-gpio-order.patch
@@ -0,0 +1,67 @@
+From 0c263e8ce8ff9a47bc336ed10d7144d7f673ed05 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Thu, 15 Jan 2015 13:52:37 +0200
+Subject: [PATCH 29/59] ARM: i.MX6: dts: change issd gpio order
+
+Change the order in which GPIOs are toggled in SATA init sequence to
+accomodate both SanDisk and Phison SSDs.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dtsi |   23 ++++++++++++-----------
+ 1 file changed, 12 insertions(+), 11 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dtsi b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+index 12eed61..dd91190 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+@@ -82,6 +82,16 @@
+ 			startup-delay-us = <10000>;
+ 		};
+ 
++		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";
+@@ -90,6 +100,7 @@
+ 			gpio = <&gpio3 23 0>;
+ 			startup-delay-us = <100>;
+ 			enable-active-high;
++			vin-supply = <&reg_sata_ldo_en>;
+ 		};
+ 
+ 		reg_sata_nrstdly: sata_nrstdly {
+@@ -133,20 +144,10 @@
+ 			gpio = <&gpio5 2 0>;
+ 			startup-delay-us = <100>;
+ 			enable-active-high;
++			regulator-boot-on;
+ 			vin-supply = <&reg_sata_nstandby1>;
+ 		};
+ 
+-		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;
+-			regulator-boot-on;
+-			vin-supply = <&reg_sata_nstandby2>;
+-		};
+ 	};
+ 
+ 	aliases {
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0030-ARM-i.MX6-dts-add-missing-WiFi-BT-pinmuxes.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0030-ARM-i.MX6-dts-add-missing-WiFi-BT-pinmuxes.patch
new file mode 100644
index 0000000..4aeabcd
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0030-ARM-i.MX6-dts-add-missing-WiFi-BT-pinmuxes.patch
@@ -0,0 +1,30 @@
+From 5fd7676d1ed0b1147d17304fe93f6e65df824fe3 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Tue, 27 Jan 2015 15:54:24 +0200
+Subject: [PATCH 30/59] ARM: i.MX6: dts: add missing WiFi/BT pinmuxes
+
+Set a correct mux mode for both:
+WLAN_BT_nPD and WLAN_BT_nRESET.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dtsi |    3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dtsi b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+index dd91190..3b1a046 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+@@ -239,6 +239,9 @@
+ 				MX6QDL_PAD_EIM_D23__GPIO3_IO23 0x80000000
+ 				/* POWER_BUTTON */
+ 				MX6QDL_PAD_ENET_TXD1__GPIO1_IO29 0x80000000
++				/* WIFI_PWR_RST */
++				MX6QDL_PAD_GPIO_17__GPIO7_IO12	0x80000000
++				MX6QDL_PAD_NANDF_CS3__GPIO6_IO16 0x80000000
+ 			>;
+ 		};
+ 	};
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0031-ARM-i.MX6-cm-fx6-enable-i2cmux-in-defconfig.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0031-ARM-i.MX6-cm-fx6-enable-i2cmux-in-defconfig.patch
new file mode 100644
index 0000000..08ac85d
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0031-ARM-i.MX6-cm-fx6-enable-i2cmux-in-defconfig.patch
@@ -0,0 +1,29 @@
+From 9c4cc9ad875d6dbbf099b3eb3cf145e8e32c8fa1 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Thu, 12 Feb 2015 13:41:56 +0200
+Subject: [PATCH 31/59] ARM: i.MX6: cm-fx6: enable i2cmux in defconfig
+
+Enable i2cmux in defconfig.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/configs/cm_fx6_defconfig |    3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/arch/arm/configs/cm_fx6_defconfig b/arch/arm/configs/cm_fx6_defconfig
+index 210062b..7d753ae 100644
+--- a/arch/arm/configs/cm_fx6_defconfig
++++ b/arch/arm/configs/cm_fx6_defconfig
+@@ -232,6 +232,9 @@ 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
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0032-ARM-i.MX6-sb-fx6m-Fix-uart1-rts-cts-flow-control.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0032-ARM-i.MX6-sb-fx6m-Fix-uart1-rts-cts-flow-control.patch
new file mode 100644
index 0000000..1d1fd3d
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0032-ARM-i.MX6-sb-fx6m-Fix-uart1-rts-cts-flow-control.patch
@@ -0,0 +1,53 @@
+From 071b13a32ba25d50adf4f552e71339edce00e1f9 Mon Sep 17 00:00:00 2001
+From: Igor Grinberg <grinberg at compulab.co.il>
+Date: Mon, 23 Feb 2015 15:54:13 +0200
+Subject: [PATCH 32/59] ARM: i.MX6: sb-fx6m: Fix uart1 rts/cts flow control
+
+According to the board schematics uart1 works in DCE mode only.
+Remove the DCEDTE mode flag in the uart1 properties.
+
+Set a correct value in the IOMUXC_UART2_UART_RTS_B_SELECT_INPUT register.
+This value lets connect RTS_B pad to ipp_uart_rts_b when UART is in DCE mode.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+[grinberg at compulab.co.il: removed remnant include from previous patch
+version]
+Signed-off-by: Igor Grinberg <grinberg at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-sbc-fx6m.dts |   13 +++++++++----
+ 1 file changed, 9 insertions(+), 4 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6q-sbc-fx6m.dts b/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
+index cf2a0eb..8afb83d 100644
+--- a/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
++++ b/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
+@@ -19,6 +19,14 @@
+ 	model = "CompuLab CM-FX6 on SBC-FX6m";	
+ 	compatible = "compulab,cm-fx6", "compulab,sbc-fx6m", "fsl,imx6q";
+ 
++	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>;
++	};
+ };
+ 
+ &iomuxc {
+@@ -52,9 +60,6 @@
+ &uart2 {
+ 	pinctrl-names = "default";
+ 	pinctrl-0 = <&pinctrl_uart2>;
+-	/* fsl,dte-mode; */
+ 	fsl,uart-has-rtscts;
+-	dma-names = "rx", "tx";
+-	dmas = <&sdma 27 4 0>, <&sdma 28 4 0>;
+ 	status = "okay";
+-};
+\ No newline at end of file
++};
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0033-ARM-i.MX6-dts-add-i2cmux-support-for-SBC-FX6-boards.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0033-ARM-i.MX6-dts-add-i2cmux-support-for-SBC-FX6-boards.patch
new file mode 100644
index 0000000..e6c21a4
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0033-ARM-i.MX6-dts-add-i2cmux-support-for-SBC-FX6-boards.patch
@@ -0,0 +1,172 @@
+From 38a739ee4a93cbf436a4d3dfbe9f9fc729177392 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Wed, 18 Feb 2015 18:25:23 +0200
+Subject: [PATCH 33/59] ARM: i.MX6: dts: add i2cmux support for SBC-FX6 boards
+
+Add i2cmux support for SBC-FX6 boards.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-sb-fx6.dtsi  |   50 +++++++++++++++++++++++++++++++++-
+ arch/arm/boot/dts/imx6q-sb-fx6m.dtsi |   36 ++++++++++++++++++++++++
+ arch/arm/boot/dts/imx6q-sb-fx6x.dtsi |    6 +---
+ arch/arm/boot/dts/imx6q-sbc-fx6.dts  |    2 +-
+ arch/arm/boot/dts/imx6q-sbc-fx6m.dts |    5 ----
+ 5 files changed, 87 insertions(+), 12 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6q-sb-fx6.dtsi b/arch/arm/boot/dts/imx6q-sb-fx6.dtsi
+index acfc572..fc4f347a 100644
+--- a/arch/arm/boot/dts/imx6q-sb-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6q-sb-fx6.dtsi
+@@ -11,4 +11,52 @@
+  * http://www.gnu.org/copyleft/gpl.html
+  */
+ 
+-#include "imx6q-sb-fx6x.dtsi"
+\ No newline at end of file
++#include "imx6q-sb-fx6x.dtsi"
++
++/ {
++	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 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>;
++			};
++
++		};
++
++		i2c at 1 {
++			reg = <1>;
++			#address-cells = <1>;
++			#size-cells = <0>;
++
++			dvi: edid at 50 {
++				compatible = "fsl,imx6-hdmi-i2c";
++				reg = <0x50>;
++			};
++		};
++
++	};
++};
+diff --git a/arch/arm/boot/dts/imx6q-sb-fx6m.dtsi b/arch/arm/boot/dts/imx6q-sb-fx6m.dtsi
+index 5a488f8..a6cc8dd 100644
+--- a/arch/arm/boot/dts/imx6q-sb-fx6m.dtsi
++++ b/arch/arm/boot/dts/imx6q-sb-fx6m.dtsi
+@@ -29,4 +29,40 @@
+ 			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 at 50 {
++				compatible = "fsl,imx6-hdmi-i2c";
++				reg = <0x50>;
++			};
++		};
++	};
+ };
+\ No newline at end of file
+diff --git a/arch/arm/boot/dts/imx6q-sb-fx6x.dtsi b/arch/arm/boot/dts/imx6q-sb-fx6x.dtsi
+index 9f67b3e..ae70c87 100644
+--- a/arch/arm/boot/dts/imx6q-sb-fx6x.dtsi
++++ b/arch/arm/boot/dts/imx6q-sb-fx6x.dtsi
+@@ -59,11 +59,7 @@
+ &i2c1 {
+ 	pinctrl-names = "default";
+ 	pinctrl-0 = <&pinctrl_i2c1>;
+-	eeprom at 50 {
+-		compatible = "at24,24c02";
+-		reg = <0x50>;
+-		pagesize = <16>;
+-	};
++	status = "disabled";
+ };
+ 
+ /* mmc */
+diff --git a/arch/arm/boot/dts/imx6q-sbc-fx6.dts b/arch/arm/boot/dts/imx6q-sbc-fx6.dts
+index 6f6ad33..4bba196 100644
+--- a/arch/arm/boot/dts/imx6q-sbc-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-sbc-fx6.dts
+@@ -12,7 +12,7 @@
+ */
+ 
+ /dts-v1/;
+-#include "imx6q-sb-fx6x.dtsi"
++#include "imx6q-sb-fx6.dtsi"
+ #include "imx6q-cm-fx6.dtsi"
+ 
+ / {
+diff --git a/arch/arm/boot/dts/imx6q-sbc-fx6m.dts b/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
+index 8afb83d..31d0e8c 100644
+--- a/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
++++ b/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
+@@ -43,13 +43,8 @@
+ 	};
+ };
+ 
+-
+ &i2c1 {
+ 	status = "okay";
+-	rtc at 56 {
+-		compatible = "emmicro,em3027";
+-		reg = <0x56>;
+-	};
+ };
+ 
+ &usdhc3 {
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0034-ARM-i.MX6-dts-add-dvi-edid-GPIOs.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0034-ARM-i.MX6-dts-add-dvi-edid-GPIOs.patch
new file mode 100644
index 0000000..f5e3b09
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0034-ARM-i.MX6-dts-add-dvi-edid-GPIOs.patch
@@ -0,0 +1,46 @@
+From 23349ee1dfee32db88d3a493fc7c8aaeb8e72868 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Thu, 12 Feb 2015 13:49:31 +0200
+Subject: [PATCH 34/59] ARM: i.MX6: dts: add dvi edid GPIOs
+
+Add dvi edid GPIOs.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-sb-fx6x.dtsi |   13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git a/arch/arm/boot/dts/imx6q-sb-fx6x.dtsi b/arch/arm/boot/dts/imx6q-sb-fx6x.dtsi
+index ae70c87..41237c7 100644
+--- a/arch/arm/boot/dts/imx6q-sb-fx6x.dtsi
++++ b/arch/arm/boot/dts/imx6q-sb-fx6x.dtsi
+@@ -32,6 +32,9 @@
+ };
+ 
+ &iomuxc {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_hog>, <&pinctrl_dvi0>;
++
+ 	imx6q-sb-fx6x {
+ 		/* pins for i2c1 */
+ 		pinctrl_i2c1: i2c1grp {
+@@ -52,6 +55,16 @@
+ 				MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
+ 			>;
+ 		};
++
++		/* 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
++			>;
++		};
+ 	};
+ };
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0035-video-mxc-IPUv3-fb-restore-sync-bits.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0035-video-mxc-IPUv3-fb-restore-sync-bits.patch
new file mode 100644
index 0000000..45712e5
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0035-video-mxc-IPUv3-fb-restore-sync-bits.patch
@@ -0,0 +1,114 @@
+From db8c584359449958872973912001bd845438c487 Mon Sep 17 00:00:00 2001
+From: Dmitry Lifshitz <lifshitz at compulab.co.il>
+Date: Thu, 12 Feb 2015 16:59:53 +0200
+Subject: [PATCH 35/59] video: mxc: IPUv3 fb: restore sync bits
+
+Freescale framebuffer driver uses some driver-specific
+proprietary bits in the sync field (like pixel clock polarity).
+
+Xorg driver discards unknown sync bits in the fb_var_screeninfo
+structure. As the results of dropping the proprietary sync bits
+some displays shows various artifacts.
+
+Fix the bug by hacking mxcfb_set_par() callback.
+
+Before applying new var parameters, try to find a match in the mode
+list, skipping proprietary sync bits (FB_MXC_SYNC_MASK).
+
+If the entry is found, copy its FB_MXC_SYNC_MASK bits.
+
+Signed-off-by: Dmitry Lifshitz <lifshitz at compulab.co.il>
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ drivers/video/mxc/mxc_ipuv3_fb.c |   38 ++++++++++++++++++++++++++++++++++++++
+ include/linux/mxcfb.h            |   11 +++++++++++
+ 2 files changed, 49 insertions(+)
+
+diff --git a/drivers/video/mxc/mxc_ipuv3_fb.c b/drivers/video/mxc/mxc_ipuv3_fb.c
+index 1fbfc9d..d24241a 100644
+--- a/drivers/video/mxc/mxc_ipuv3_fb.c
++++ b/drivers/video/mxc/mxc_ipuv3_fb.c
+@@ -428,6 +428,28 @@ static bool mxcfb_need_to_set_par(struct fb_info *fbi)
+ 			sizeof(struct fb_var_screeninfo));
+ }
+ 
++static struct fb_videomode *mxc_match_mode(const struct fb_var_screeninfo *var,
++					  struct list_head *head)
++{
++	struct list_head *pos;
++	struct fb_modelist *modelist;
++	struct fb_videomode *m, mode;
++
++	fb_var_to_videomode(&mode, var);
++	list_for_each(pos, head) {
++		modelist = list_entry(pos, struct fb_modelist, list);
++		m = &modelist->mode;
++
++		mode.sync &= ~FB_MXC_SYNC_MASK;
++		mode.sync |= m->sync & FB_MXC_SYNC_MASK;
++
++		if (fb_mode_is_equal(m, &mode))
++			return m;
++	}
++
++	return NULL;
++}
++
+ /*
+  * Set framebuffer parameters and change the operating mode.
+  *
+@@ -583,6 +605,7 @@ static int mxcfb_set_par(struct fb_info *fbi)
+ 
+ 	if (!mxc_fbi->overlay) {
+ 		uint32_t out_pixel_fmt;
++		struct fb_videomode *sync_mode;
+ 
+ 		memset(&sig_cfg, 0, sizeof(sig_cfg));
+ 		if (fbi->var.vmode & FB_VMODE_INTERLACED)
+@@ -596,6 +619,21 @@ static int mxcfb_set_par(struct fb_info *fbi)
+ 			sig_cfg.Hsync_pol = true;
+ 		if (fbi->var.sync & FB_SYNC_VERT_HIGH_ACT)
+ 			sig_cfg.Vsync_pol = true;
++
++		/*
++		 * Try to find  matching all parameters, except
++		 * FB_MXC_SYNC_MASK bits in the .sync field.
++		 */
++		sync_mode = mxc_match_mode(&fbi->var, &fbi->modelist);
++		/*
++		 * If entry exists in the mode list and FB_MXC_SYNC_MASK
++		 * bits are empty in the fbi->var.sync (most probably cleared
++		 * by the user space application) then copy it from the found
++		 * mode list entry.
++		 */
++		if (sync_mode && !(fbi->var.sync & FB_MXC_SYNC_MASK))
++			fbi->var.sync = sync_mode->sync;
++
+ 		if (!(fbi->var.sync & FB_SYNC_CLK_LAT_FALL))
+ 			sig_cfg.clk_pol = true;
+ 		if (fbi->var.sync & FB_SYNC_DATA_INVERT)
+diff --git a/include/linux/mxcfb.h b/include/linux/mxcfb.h
+index 67db5ee..e63aa2c 100644
+--- a/include/linux/mxcfb.h
++++ b/include/linux/mxcfb.h
+@@ -23,6 +23,17 @@
+ 
+ #include <uapi/linux/mxcfb.h>
+ 
++#define FB_SYNC_OE_LOW_ACT	0x80000000
++#define FB_SYNC_CLK_LAT_FALL	0x40000000
++#define FB_SYNC_DATA_INVERT	0x20000000
++#define FB_SYNC_CLK_IDLE_EN	0x10000000
++#define FB_SYNC_SHARP_MODE	0x08000000
++#define FB_SYNC_SWAP_RGB	0x04000000
++
++#define FB_MXC_SYNC_MASK	(FB_SYNC_OE_LOW_ACT | FB_SYNC_CLK_LAT_FALL | \
++				 FB_SYNC_DATA_INVERT | FB_SYNC_CLK_IDLE_EN | \
++				 FB_SYNC_SHARP_MODE | FB_SYNC_SWAP_RGB)
++
+ extern struct fb_videomode mxcfb_modedb[];
+ extern int mxcfb_modedb_sz;
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0036-ARM-i.MX6-dts-add-backlight-support-for-SBC-FX6-boar.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0036-ARM-i.MX6-dts-add-backlight-support-for-SBC-FX6-boar.patch
new file mode 100644
index 0000000..12216fc
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0036-ARM-i.MX6-dts-add-backlight-support-for-SBC-FX6-boar.patch
@@ -0,0 +1,48 @@
+From ed1cec186cd961a9d910bfc4817b925173a0081d Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Wed, 18 Feb 2015 18:48:26 +0200
+Subject: [PATCH 36/59] ARM: i.MX6: dts: add backlight support for SBC-FX6
+ boards
+
+Add backlight support for SBC-FX6 boards.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-sbc-fx6.dts |   16 +++++++++++++++-
+ 1 file changed, 15 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/imx6q-sbc-fx6.dts b/arch/arm/boot/dts/imx6q-sbc-fx6.dts
+index 4bba196..5febb69 100644
+--- a/arch/arm/boot/dts/imx6q-sbc-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-sbc-fx6.dts
+@@ -18,6 +18,14 @@
+ / {
+    model = "CompuLab CM-FX6 on SBC-FX6";
+    compatible = "compulab,cm-fx6", "compulab,sbc-fx6", "fsl,imx6q";
++
++	backlight {
++		compatible = "pwm-backlight";
++		pwms = <&pwm3 0 5000000>;
++		brightness-levels = <0 4 8 16 32 64 128 255>;
++		default-brightness-level = <7>;
++	};
++
+ };
+ 
+ &i2c1 {
+@@ -26,4 +34,10 @@
+ 
+ &usdhc3 {
+ 	status = "okay";
+-};
+\ No newline at end of file
++};
++
++&pwm3 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_pwm3_1>;
++	status = "okay";
++};
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0037-ARM-i.MX6-dts-rearrangement-of-the-frame-buffers-def.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0037-ARM-i.MX6-dts-rearrangement-of-the-frame-buffers-def.patch
new file mode 100644
index 0000000..523ab65
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0037-ARM-i.MX6-dts-rearrangement-of-the-frame-buffers-def.patch
@@ -0,0 +1,70 @@
+From fbf61cbe1472b3c719b7cd67c03c0736096dbeb1 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Wed, 18 Feb 2015 18:53:01 +0200
+Subject: [PATCH 37/59] ARM: i.MX6: dts: rearrangement of the frame buffers
+ definitions
+
+Add a correct frame buffers' definitions
+with regard to the board configuration.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dtsi  |    8 --------
+ arch/arm/boot/dts/imx6q-sbc-fx6.dts  |    8 ++++++++
+ arch/arm/boot/dts/imx6q-sbc-fx6m.dts |    8 ++++++++
+ 3 files changed, 16 insertions(+), 8 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dtsi b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+index 3b1a046..7d39f50 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+@@ -524,14 +524,6 @@
+ 	status = "okay";
+ };
+ 
+-&mxcfb1 {
+-	status = "okay";
+-};
+-
+-&mxcfb2 {
+-	status = "okay";
+-};
+-
+ &hdmi_core {
+ 	ipu_id = <1>;
+ 	disp_id = <0>;
+diff --git a/arch/arm/boot/dts/imx6q-sbc-fx6.dts b/arch/arm/boot/dts/imx6q-sbc-fx6.dts
+index 5febb69..8e7432d 100644
+--- a/arch/arm/boot/dts/imx6q-sbc-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-sbc-fx6.dts
+@@ -41,3 +41,11 @@
+ 	pinctrl-0 = <&pinctrl_pwm3_1>;
+ 	status = "okay";
+ };
++
++&mxcfb1 {
++	status = "okay";
++};
++
++&mxcfb2 {
++	status = "okay";
++};
+diff --git a/arch/arm/boot/dts/imx6q-sbc-fx6m.dts b/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
+index 31d0e8c..0005eca 100644
+--- a/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
++++ b/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
+@@ -58,3 +58,11 @@
+ 	fsl,uart-has-rtscts;
+ 	status = "okay";
+ };
++
++&mxcfb1 {
++	status = "okay";
++};
++
++&mxcfb2 {
++	status = "okay";
++};
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0038-ARM-i.MX6-iomux-raise-DSE-for-display-signals.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0038-ARM-i.MX6-iomux-raise-DSE-for-display-signals.patch
new file mode 100644
index 0000000..f2c5823
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0038-ARM-i.MX6-iomux-raise-DSE-for-display-signals.patch
@@ -0,0 +1,73 @@
+From 18d516509c4acc54d0d8b6ce3019d721db81334a Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Wed, 11 Feb 2015 18:15:42 +0200
+Subject: [PATCH 38/59] ARM: i.MX6: iomux: raise DSE for display signals
+
+While drive strength of display signals is configured for 120 Ohm, some
+displays exhibit artifacts.
+Typical drive strength should be around 50 Ohm.
+To fix the the visual artifacts, we raise the drive strength to 48 Ohm.
+
+Signed-off-by: Igor Grinberg <grinberg at compulab.co.il>
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dtsi |   36 ++++++++++++++++++++++++++++++++++-
+ 1 file changed, 35 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dtsi b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+index 7d39f50..9a956ac 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+@@ -210,7 +210,7 @@
+ 		disp_id = <0>;
+ 		default_ifmt = "RGB24";
+ 		pinctrl-names = "default";
+-		pinctrl-0 = <&pinctrl_ipu1_1>;
++		pinctrl-0 = <&pinctrl_ipu1_lcd>;
+ 		status = "okay";
+ 	};
+ 
+@@ -268,6 +268,40 @@
+ 			>;
+ 		};
+ 
++		pinctrl_ipu1_lcd: ipu1grp-lcd {
++			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 = <
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0039-ARM-i.MX6-cm-fx6-add-video-mode-for-KD050C-WVGA.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0039-ARM-i.MX6-cm-fx6-add-video-mode-for-KD050C-WVGA.patch
new file mode 100644
index 0000000..a5afa7e
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0039-ARM-i.MX6-cm-fx6-add-video-mode-for-KD050C-WVGA.patch
@@ -0,0 +1,46 @@
+From 9cc3784253ae0104f22cdd487e6d4065b3308f0b Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Thu, 12 Feb 2015 16:54:04 +0200
+Subject: [PATCH 39/59] ARM: i.MX6: cm-fx6: add video mode for KD050C-WVGA
+
+Add video mode for KD050C-WVGA, update the lcdif_modedb with
+the correct parameters for KD050C-WVGA.
+Change mode string for second frame buffer.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-sbc-fx6.dts |    1 +
+ drivers/video/mxc/mxc_lcdif.c       |    6 ++++++
+ 2 files changed, 7 insertions(+)
+
+diff --git a/arch/arm/boot/dts/imx6q-sbc-fx6.dts b/arch/arm/boot/dts/imx6q-sbc-fx6.dts
+index 8e7432d..63f91a6 100644
+--- a/arch/arm/boot/dts/imx6q-sbc-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-sbc-fx6.dts
+@@ -47,5 +47,6 @@
+ };
+ 
+ &mxcfb2 {
++	mode_str ="KD050C-WVGA";
+ 	status = "okay";
+ };
+diff --git a/drivers/video/mxc/mxc_lcdif.c b/drivers/video/mxc/mxc_lcdif.c
+index d635edd..ae6ac42 100644
+--- a/drivers/video/mxc/mxc_lcdif.c
++++ b/drivers/video/mxc/mxc_lcdif.c
+@@ -48,6 +48,12 @@ static struct fb_videomode lcdif_modedb[] = {
+ 	FB_SYNC_CLK_LAT_FALL,
+ 	FB_VMODE_NONINTERLACED,
+ 	0,},
++	{
++	/* 800x480 @ 60 Hz , pixel clk @ 32MHz */
++	"KD050C-WVGA", 60, 800, 480, 30000, 40, 40, 13, 29, 48, 3,
++	FB_SYNC_CLK_LAT_FALL,
++	FB_VMODE_NONINTERLACED,
++	0,},
+ };
+ static int lcdif_modedb_sz = ARRAY_SIZE(lcdif_modedb);
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0040-ARM-i.MX6-cm-fx6-refactor-the-cm-fx6-iomux.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0040-ARM-i.MX6-cm-fx6-refactor-the-cm-fx6-iomux.patch
new file mode 100644
index 0000000..727512c
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0040-ARM-i.MX6-cm-fx6-refactor-the-cm-fx6-iomux.patch
@@ -0,0 +1,54 @@
+From e3f8a9bf6c298da7919353e364e0873425005033 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Thu, 19 Feb 2015 15:45:07 +0200
+Subject: [PATCH 40/59] ARM: i.MX6: cm-fx6: refactor the cm-fx6 iomux
+
+Move Marvell Power On and Reset GPIOs into a separate group.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dtsi |   14 ++++++++++----
+ 1 file changed, 10 insertions(+), 4 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dtsi b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+index 9a956ac..412e03b 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+@@ -239,9 +239,6 @@
+ 				MX6QDL_PAD_EIM_D23__GPIO3_IO23 0x80000000
+ 				/* POWER_BUTTON */
+ 				MX6QDL_PAD_ENET_TXD1__GPIO1_IO29 0x80000000
+-				/* WIFI_PWR_RST */
+-				MX6QDL_PAD_GPIO_17__GPIO7_IO12	0x80000000
+-				MX6QDL_PAD_NANDF_CS3__GPIO6_IO16 0x80000000
+ 			>;
+ 		};
+ 	};
+@@ -387,6 +384,15 @@
+ 			>;
+ 		};
+ 
++		/* 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 pcie */
+ 		pinctrl_pcie: pciegrp {
+ 			fsl,pins = <
+@@ -546,7 +552,7 @@
+ /* wifi/bt */
+ &usdhc1 {
+ 	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_usdhc1>;
++	pinctrl-0 = <&pinctrl_usdhc1>, <&pinctrl_mrvl1>;
+ 	non-removable;
+ 	vmmc-supply = <&awnh387_npoweron>;
+ 	vmmc_aux-supply = <&awnh387_wifi_nreset>;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0041-ARM-i.MX6-dts-gpmi-separate-kernel-and-rootfs.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0041-ARM-i.MX6-dts-gpmi-separate-kernel-and-rootfs.patch
new file mode 100644
index 0000000..11d563c
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0041-ARM-i.MX6-dts-gpmi-separate-kernel-and-rootfs.patch
@@ -0,0 +1,37 @@
+From 590ff97539070fb89f25337e8123495920f17433 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Thu, 15 Jan 2015 12:52:56 +0200
+Subject: [PATCH 41/59] ARM: i.MX6: dts: gpmi: separate kernel and rootfs
+
+Make separate partitions for kernel and root filesystem on the NAND
+flash.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dtsi |   10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dtsi b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+index 412e03b..5ca8993 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+@@ -486,6 +486,16 @@
+ 	pinctrl-names = "default";
+ 	pinctrl-0 = <&pinctrl_gpmi_nand>;
+ 	status = "okay";
++
++	partition at 0 {
++		label = "linux";
++		reg = <0x0 0x800000>;
++	};
++
++	partition at 800000 {
++		label = "rootfs";
++		reg = < 0x800000 0x0>;
++	};
+ };
+ 
+ /* i2c3 */
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0042-ARM-dts-cm-fx6-enable-can-bus.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0042-ARM-dts-cm-fx6-enable-can-bus.patch
new file mode 100644
index 0000000..0dccbaa
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0042-ARM-dts-cm-fx6-enable-can-bus.patch
@@ -0,0 +1,29 @@
+From 6c5e8a2dc899ae44e3ae1007ec1a1be4c6cb0f86 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Thu, 26 Feb 2015 16:45:42 +0200
+Subject: [PATCH 42/59] ARM: dts: cm-fx6: enable can bus
+
+Enable can bus.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-sbc-fx6.dts |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/arch/arm/boot/dts/imx6q-sbc-fx6.dts b/arch/arm/boot/dts/imx6q-sbc-fx6.dts
+index 63f91a6..2432f34 100644
+--- a/arch/arm/boot/dts/imx6q-sbc-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-sbc-fx6.dts
+@@ -50,3 +50,9 @@
+ 	mode_str ="KD050C-WVGA";
+ 	status = "okay";
+ };
++
++&flexcan1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_flexcan1_1>;
++	status = "okay";
++};
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0043-ARM-dts-cm-fx6-add-tsc2046-touchscreen-support.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0043-ARM-dts-cm-fx6-add-tsc2046-touchscreen-support.patch
new file mode 100644
index 0000000..98eb30d
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0043-ARM-dts-cm-fx6-add-tsc2046-touchscreen-support.patch
@@ -0,0 +1,85 @@
+From 5439887f65973766007f69f56277bfc7bd50494f Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Wed, 25 Feb 2015 20:18:34 +0200
+Subject: [PATCH 43/59] ARM: dts: cm-fx6: add tsc2046 touchscreen support
+
+Add tsc2046 touchscreen support.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dtsi |   45 +++++++++++++++++++++++++++++++++++
+ 1 file changed, 45 insertions(+)
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dtsi b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+index 5ca8993..704ef4b 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+@@ -148,6 +148,13 @@
+ 			vin-supply = <&reg_sata_nstandby1>;
+ 		};
+ 
++		tsc2046reg: tsc2046-reg {
++			compatible = "regulator-fixed";
++			regulator-name = "tsc2046-reg";
++			regulator-min-microvolt = <3300000>;
++			regulator-max-microvolt = <3300000>;
++		};
++
+ 	};
+ 
+ 	aliases {
+@@ -393,6 +400,14 @@
+ 			>;
+ 		};
+ 
++		/* 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 = <
+@@ -471,6 +486,36 @@
+ 			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 */
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0044-ARM-i.MX6-sb-fx6x-refactoring-of-the-usdhc3-definiti.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0044-ARM-i.MX6-sb-fx6x-refactoring-of-the-usdhc3-definiti.patch
new file mode 100644
index 0000000..964db0e
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0044-ARM-i.MX6-sb-fx6x-refactoring-of-the-usdhc3-definiti.patch
@@ -0,0 +1,84 @@
+From 6773725e718bd458147b9e66fa1b9edb95f8dd91 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Thu, 5 Mar 2015 09:59:32 +0200
+Subject: [PATCH 44/59] ARM: i.MX6: sb-fx6x: refactoring of the usdhc3
+ definition
+
+Add uhs pinctrl state for usdhc3.
+This is needed for supporting ultra high speed cards.
+
+Add cd/wp definitions.
+Add a missing property no-1-8-v.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-sb-fx6x.dtsi |   32 ++++++++++++++++++++++++++++++--
+ arch/arm/boot/dts/imx6q-sbc-fx6.dts  |    1 +
+ 2 files changed, 31 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6q-sb-fx6x.dtsi b/arch/arm/boot/dts/imx6q-sb-fx6x.dtsi
+index 41237c7..372a3c1 100644
+--- a/arch/arm/boot/dts/imx6q-sb-fx6x.dtsi
++++ b/arch/arm/boot/dts/imx6q-sb-fx6x.dtsi
+@@ -53,6 +53,30 @@
+ 				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
+ 			>;
+ 		};
+ 
+@@ -77,8 +101,12 @@
+ 
+ /* mmc */
+ &usdhc3 {
+-	pinctrl-names = "default";
++	pinctrl-names = "default", "state_100mhz", "state_200mhz";
+ 	pinctrl-0 = <&pinctrl_usdhc3>;
++	pinctrl-1 = <&pinctrl_usdhc3_100mhz>;
++	pinctrl-2 = <&pinctrl_usdhc3_200mhz>;
++	cd-gpios = <&gpio7 1 0>;
++	no-1-8-v;
+ 	vmmc-supply = <&reg_3p3v>;
+ 	status = "disabled";
+-};
+\ No newline at end of file
++};
+diff --git a/arch/arm/boot/dts/imx6q-sbc-fx6.dts b/arch/arm/boot/dts/imx6q-sbc-fx6.dts
+index 2432f34..cd5c011 100644
+--- a/arch/arm/boot/dts/imx6q-sbc-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-sbc-fx6.dts
+@@ -33,6 +33,7 @@
+ };
+ 
+ &usdhc3 {
++	wp-gpios = <&gpio7 0 0>;
+ 	status = "okay";
+ };
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0045-ARM-i.MX6-cm-fx6-fix-up-incorrect-compatibilities.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0045-ARM-i.MX6-cm-fx6-fix-up-incorrect-compatibilities.patch
new file mode 100644
index 0000000..4a52334
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0045-ARM-i.MX6-cm-fx6-fix-up-incorrect-compatibilities.patch
@@ -0,0 +1,47 @@
+From 706e2109599bd2ac09114b5064bc75140e928f2c Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Wed, 18 Mar 2015 14:30:49 +0200
+Subject: [PATCH 45/59] ARM: i.MX6: cm-fx6: fix up incorrect compatibilities
+
+Fix up incorrect compatibilities.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dtsi |    9 +++------
+ 1 file changed, 3 insertions(+), 6 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dtsi b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+index 704ef4b..8175cee 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+@@ -163,8 +163,7 @@
+ 	};
+ 
+ 	sound {
+-		compatible = "fsl,imx6q-cm-fx6-wm8731",
+-			  "fsl,imx-audio-wm8731";
++		compatible = "fsl,imx-audio-wm8731";
+ 		model = "wm8731-audio";
+ 		ssi-controller = <&ssi2>;
+ 		src-port = <2>;
+@@ -174,15 +173,13 @@
+ 	};
+ 
+ 	sound-hdmi {
+-		compatible = "fsl,imx6q-audio-hdmi",
+-			  "fsl,imx-audio-hdmi";
++		compatible = "fsl,imx-audio-hdmi";
+ 		model = "imx-audio-hdmi";
+ 		hdmi-controller = <&hdmi_audio>;
+ 	};
+ 
+ 	sound-spdif {
+-		compatible = "fsl,imx-audio-spdif",
+-			  "fsl,imx-sabreauto-spdif";
++		compatible = "fsl,imx-audio-spdif";
+ 		model = "imx-spdif";
+ 		spdif-controller = <&spdif>;
+ 		spdif-out;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0046-ARM-i.MX6-dts-fix-include-file-order.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0046-ARM-i.MX6-dts-fix-include-file-order.patch
new file mode 100644
index 0000000..bfd151b
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0046-ARM-i.MX6-dts-fix-include-file-order.patch
@@ -0,0 +1,129 @@
+From 1ba89a208ecf8096a1b9a0fd1867d4227e04a1e8 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Sun, 22 Mar 2015 11:15:08 +0200
+Subject: [PATCH 46/59] ARM: i.MX6: dts: fix include file order
+
+Fix include file order.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dts   |    3 ++-
+ arch/arm/boot/dts/imx6q-cm-fx6.dtsi  |    2 --
+ arch/arm/boot/dts/imx6q-sb-fx6.dtsi  |    2 --
+ arch/arm/boot/dts/imx6q-sb-fx6m.dtsi |    4 +---
+ arch/arm/boot/dts/imx6q-sb-fx6x.dtsi |    2 --
+ arch/arm/boot/dts/imx6q-sbc-fx6.dts  |    4 +++-
+ arch/arm/boot/dts/imx6q-sbc-fx6m.dts |    4 +++-
+ 7 files changed, 9 insertions(+), 12 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+index a0e423b..14c2d6a 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+@@ -12,9 +12,10 @@
+  */
+ 
+ /dts-v1/;
++#include "imx6q.dtsi"
+ #include "imx6q-cm-fx6.dtsi"
+ 
+ / {
+ 	model = "CompuLab CM-FX6";
+ 	compatible = "compulab,cm-fx6", "fsl,imx6q";
+-};
+\ No newline at end of file
++};
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dtsi b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+index 8175cee..f53d94e 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+@@ -11,8 +11,6 @@
+  * http://www.gnu.org/copyleft/gpl.html
+  */
+ 
+-#include "imx6q.dtsi"
+-
+ / {
+ 	memory {
+ 		reg = <0x10000000 0x80000000>;
+diff --git a/arch/arm/boot/dts/imx6q-sb-fx6.dtsi b/arch/arm/boot/dts/imx6q-sb-fx6.dtsi
+index fc4f347a..4d030f9 100644
+--- a/arch/arm/boot/dts/imx6q-sb-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6q-sb-fx6.dtsi
+@@ -11,8 +11,6 @@
+  * http://www.gnu.org/copyleft/gpl.html
+  */
+ 
+-#include "imx6q-sb-fx6x.dtsi"
+-
+ / {
+ 	i2cmux {
+ 		compatible = "i2c-mux-gpio";
+diff --git a/arch/arm/boot/dts/imx6q-sb-fx6m.dtsi b/arch/arm/boot/dts/imx6q-sb-fx6m.dtsi
+index a6cc8dd..5e6c859 100644
+--- a/arch/arm/boot/dts/imx6q-sb-fx6m.dtsi
++++ b/arch/arm/boot/dts/imx6q-sb-fx6m.dtsi
+@@ -11,8 +11,6 @@
+  * http://www.gnu.org/copyleft/gpl.html
+  */
+ 
+-#include "imx6q-sb-fx6x.dtsi"
+-
+ / {
+ 	eth at pcie {
+ 		compatible = "intel,i211";
+@@ -65,4 +63,4 @@
+ 			};
+ 		};
+ 	};
+-};
+\ No newline at end of file
++};
+diff --git a/arch/arm/boot/dts/imx6q-sb-fx6x.dtsi b/arch/arm/boot/dts/imx6q-sb-fx6x.dtsi
+index 372a3c1..01f73ae 100644
+--- a/arch/arm/boot/dts/imx6q-sb-fx6x.dtsi
++++ b/arch/arm/boot/dts/imx6q-sb-fx6x.dtsi
+@@ -11,8 +11,6 @@
+  * http://www.gnu.org/copyleft/gpl.html
+  */
+ 
+-#include "imx6q.dtsi"
+-
+ / {
+ 	regulators {
+ 		compatible = "simple-bus";
+diff --git a/arch/arm/boot/dts/imx6q-sbc-fx6.dts b/arch/arm/boot/dts/imx6q-sbc-fx6.dts
+index cd5c011..84a6d23 100644
+--- a/arch/arm/boot/dts/imx6q-sbc-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-sbc-fx6.dts
+@@ -12,8 +12,10 @@
+ */
+ 
+ /dts-v1/;
+-#include "imx6q-sb-fx6.dtsi"
++#include "imx6q.dtsi"
+ #include "imx6q-cm-fx6.dtsi"
++#include "imx6q-sb-fx6x.dtsi"
++#include "imx6q-sb-fx6.dtsi"
+ 
+ / {
+    model = "CompuLab CM-FX6 on SBC-FX6";
+diff --git a/arch/arm/boot/dts/imx6q-sbc-fx6m.dts b/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
+index 0005eca..817da28 100644
+--- a/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
++++ b/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
+@@ -12,8 +12,10 @@
+ */
+ 
+ /dts-v1/;
+-#include "imx6q-sb-fx6m.dtsi"
++#include "imx6q.dtsi"
+ #include "imx6q-cm-fx6.dtsi"
++#include "imx6q-sb-fx6x.dtsi"
++#include "imx6q-sb-fx6m.dtsi"
+ 
+ / {
+ 	model = "CompuLab CM-FX6 on SBC-FX6m";	
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0047-ARM-i.MX6-dts-rename-the-sb-fx6-board-files.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0047-ARM-i.MX6-dts-rename-the-sb-fx6-board-files.patch
new file mode 100644
index 0000000..74f249a
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0047-ARM-i.MX6-dts-rename-the-sb-fx6-board-files.patch
@@ -0,0 +1,570 @@
+From feeb12eb1567043d60246cceb805a28d82d2c78e Mon Sep 17 00:00:00 2001
+From: Igor Grinberg <grinberg at compulab.co.il>
+Date: Mon, 23 Mar 2015 09:50:04 +0200
+Subject: [PATCH 47/59] ARM: i.MX6: dts: rename the sb-fx6 board files
+
+In preparation for DL/S support addition, we rename the files to better
+describe the content and reuse the same DT code.
+Rename the sb-fx6 board files' names
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+[grinberg at compulab.co.il: added a bit more descriptive commit message]
+Signed-off-by: Igor Grinberg <grinberg at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-sb-fx6.dtsi    |   60 -----------------
+ arch/arm/boot/dts/imx6q-sb-fx6m.dtsi   |   66 -------------------
+ arch/arm/boot/dts/imx6q-sb-fx6x.dtsi   |  110 --------------------------------
+ arch/arm/boot/dts/imx6q-sbc-fx6.dts    |    4 +-
+ arch/arm/boot/dts/imx6q-sbc-fx6m.dts   |    4 +-
+ arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi  |   60 +++++++++++++++++
+ arch/arm/boot/dts/imx6qdl-sb-fx6m.dtsi |   66 +++++++++++++++++++
+ arch/arm/boot/dts/imx6qdl-sb-fx6x.dtsi |  110 ++++++++++++++++++++++++++++++++
+ 8 files changed, 240 insertions(+), 240 deletions(-)
+ delete mode 100644 arch/arm/boot/dts/imx6q-sb-fx6.dtsi
+ delete mode 100644 arch/arm/boot/dts/imx6q-sb-fx6m.dtsi
+ delete mode 100644 arch/arm/boot/dts/imx6q-sb-fx6x.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/imx6q-sb-fx6.dtsi b/arch/arm/boot/dts/imx6q-sb-fx6.dtsi
+deleted file mode 100644
+index 4d030f9..0000000
+--- a/arch/arm/boot/dts/imx6q-sb-fx6.dtsi
++++ /dev/null
+@@ -1,60 +0,0 @@
+-/*
+- * 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
+- */
+-
+-/ {
+-	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 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>;
+-			};
+-
+-		};
+-
+-		i2c at 1 {
+-			reg = <1>;
+-			#address-cells = <1>;
+-			#size-cells = <0>;
+-
+-			dvi: edid at 50 {
+-				compatible = "fsl,imx6-hdmi-i2c";
+-				reg = <0x50>;
+-			};
+-		};
+-
+-	};
+-};
+diff --git a/arch/arm/boot/dts/imx6q-sb-fx6m.dtsi b/arch/arm/boot/dts/imx6q-sb-fx6m.dtsi
+deleted file mode 100644
+index 5e6c859..0000000
+--- a/arch/arm/boot/dts/imx6q-sb-fx6m.dtsi
++++ /dev/null
+@@ -1,66 +0,0 @@
+-/*
+- * 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
+- */
+-
+-/ {
+-	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 at 50 {
+-				compatible = "fsl,imx6-hdmi-i2c";
+-				reg = <0x50>;
+-			};
+-		};
+-	};
+-};
+diff --git a/arch/arm/boot/dts/imx6q-sb-fx6x.dtsi b/arch/arm/boot/dts/imx6q-sb-fx6x.dtsi
+deleted file mode 100644
+index 01f73ae..0000000
+--- a/arch/arm/boot/dts/imx6q-sb-fx6x.dtsi
++++ /dev/null
+@@ -1,110 +0,0 @@
+-/*
+- * 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>;
+-	cd-gpios = <&gpio7 1 0>;
+-	no-1-8-v;
+-	vmmc-supply = <&reg_3p3v>;
+-	status = "disabled";
+-};
+diff --git a/arch/arm/boot/dts/imx6q-sbc-fx6.dts b/arch/arm/boot/dts/imx6q-sbc-fx6.dts
+index 84a6d23..9d31d15 100644
+--- a/arch/arm/boot/dts/imx6q-sbc-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-sbc-fx6.dts
+@@ -14,8 +14,8 @@
+ /dts-v1/;
+ #include "imx6q.dtsi"
+ #include "imx6q-cm-fx6.dtsi"
+-#include "imx6q-sb-fx6x.dtsi"
+-#include "imx6q-sb-fx6.dtsi"
++#include "imx6qdl-sb-fx6x.dtsi"
++#include "imx6qdl-sb-fx6.dtsi"
+ 
+ / {
+    model = "CompuLab CM-FX6 on SBC-FX6";
+diff --git a/arch/arm/boot/dts/imx6q-sbc-fx6m.dts b/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
+index 817da28..a98f1a2 100644
+--- a/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
++++ b/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
+@@ -14,8 +14,8 @@
+ /dts-v1/;
+ #include "imx6q.dtsi"
+ #include "imx6q-cm-fx6.dtsi"
+-#include "imx6q-sb-fx6x.dtsi"
+-#include "imx6q-sb-fx6m.dtsi"
++#include "imx6qdl-sb-fx6x.dtsi"
++#include "imx6qdl-sb-fx6m.dtsi"
+ 
+ / {
+ 	model = "CompuLab CM-FX6 on SBC-FX6m";	
+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..4d030f9
+--- /dev/null
++++ b/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi
+@@ -0,0 +1,60 @@
++/*
++ * 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
++ */
++
++/ {
++	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 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>;
++			};
++
++		};
++
++		i2c at 1 {
++			reg = <1>;
++			#address-cells = <1>;
++			#size-cells = <0>;
++
++			dvi: edid at 50 {
++				compatible = "fsl,imx6-hdmi-i2c";
++				reg = <0x50>;
++			};
++		};
++
++	};
++};
+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..5e6c859
+--- /dev/null
++++ b/arch/arm/boot/dts/imx6qdl-sb-fx6m.dtsi
+@@ -0,0 +1,66 @@
++/*
++ * 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
++ */
++
++/ {
++	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 at 50 {
++				compatible = "fsl,imx6-hdmi-i2c";
++				reg = <0x50>;
++			};
++		};
++	};
++};
+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..01f73ae
+--- /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>;
++	cd-gpios = <&gpio7 1 0>;
++	no-1-8-v;
++	vmmc-supply = <&reg_3p3v>;
++	status = "disabled";
++};
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0048-ARM-i.MX6-dts-refactor-the-sbc-fx6-target-files.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0048-ARM-i.MX6-dts-refactor-the-sbc-fx6-target-files.patch
new file mode 100644
index 0000000..cfa79ba
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0048-ARM-i.MX6-dts-refactor-the-sbc-fx6-target-files.patch
@@ -0,0 +1,243 @@
+From a19b8fff6f84ecf1199be3b0a97325a0cab437c5 Mon Sep 17 00:00:00 2001
+From: Igor Grinberg <grinberg at compulab.co.il>
+Date: Mon, 23 Mar 2015 09:59:54 +0200
+Subject: [PATCH 48/59] ARM: i.MX6: dts: refactor the sbc-fx6 target files
+
+In preparation for DL/S support addition, we move the common code
+to dtsi files for better reuse of the same DT code.
+Refactor the sbc-fx6 target files.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+[grinberg at compulab.co.il: added a bit more descriptive commit message]
+Signed-off-by: Igor Grinberg <grinberg at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-sbc-fx6.dts    |   42 ++--------------------------
+ arch/arm/boot/dts/imx6q-sbc-fx6m.dts   |   47 --------------------------------
+ arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi  |   37 +++++++++++++++++++++++++
+ arch/arm/boot/dts/imx6qdl-sb-fx6m.dtsi |   47 ++++++++++++++++++++++++++++++++
+ 4 files changed, 86 insertions(+), 87 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6q-sbc-fx6.dts b/arch/arm/boot/dts/imx6q-sbc-fx6.dts
+index 9d31d15..1234fb3 100644
+--- a/arch/arm/boot/dts/imx6q-sbc-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-sbc-fx6.dts
+@@ -18,44 +18,6 @@
+ #include "imx6qdl-sb-fx6.dtsi"
+ 
+ / {
+-   model = "CompuLab CM-FX6 on SBC-FX6";
+-   compatible = "compulab,cm-fx6", "compulab,sbc-fx6", "fsl,imx6q";
+-
+-	backlight {
+-		compatible = "pwm-backlight";
+-		pwms = <&pwm3 0 5000000>;
+-		brightness-levels = <0 4 8 16 32 64 128 255>;
+-		default-brightness-level = <7>;
+-	};
+-
+-};
+-
+-&i2c1 {
+-	status = "okay";
+-};
+-
+-&usdhc3 {
+-	wp-gpios = <&gpio7 0 0>;
+-	status = "okay";
+-};
+-
+-&pwm3 {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_pwm3_1>;
+-	status = "okay";
+-};
+-
+-&mxcfb1 {
+-	status = "okay";
+-};
+-
+-&mxcfb2 {
+-	mode_str ="KD050C-WVGA";
+-	status = "okay";
+-};
+-
+-&flexcan1 {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_flexcan1_1>;
+-	status = "okay";
++	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
+index a98f1a2..19bf948 100644
+--- a/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
++++ b/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
+@@ -20,51 +20,4 @@
+ / {
+ 	model = "CompuLab CM-FX6 on SBC-FX6m";	
+ 	compatible = "compulab,cm-fx6", "compulab,sbc-fx6m", "fsl,imx6q";
+-
+-	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>;
+-	};
+-};
+-
+-&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 {
+-	status = "okay";
+-};
+-
+-/* rear serial console */
+-&uart2 {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_uart2>;
+-	fsl,uart-has-rtscts;
+-	status = "okay";
+-};
+-
+-&mxcfb1 {
+-	status = "okay";
+-};
+-
+-&mxcfb2 {
+-	status = "okay";
+ };
+diff --git a/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi b/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi
+index 4d030f9..129e88e 100644
+--- a/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi
+@@ -12,6 +12,13 @@
+  */
+ 
+ / {
++	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>;
+@@ -58,3 +65,33 @@
+ 
+ 	};
+ };
++
++&i2c1 {
++	status = "okay";
++};
++
++&usdhc3 {
++	wp-gpios = <&gpio7 0 0>;
++	status = "okay";
++};
++
++&pwm3 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_pwm3_1>;
++	status = "okay";
++};
++
++&mxcfb1 {
++	status = "okay";
++};
++
++&mxcfb2 {
++	mode_str ="KD050C-WVGA";
++	status = "okay";
++};
++
++&flexcan1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_flexcan1_1>;
++	status = "okay";
++};
+diff --git a/arch/arm/boot/dts/imx6qdl-sb-fx6m.dtsi b/arch/arm/boot/dts/imx6qdl-sb-fx6m.dtsi
+index 5e6c859..5394364 100644
+--- a/arch/arm/boot/dts/imx6qdl-sb-fx6m.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-sb-fx6m.dtsi
+@@ -12,6 +12,15 @@
+  */
+ 
+ / {
++	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];
+@@ -64,3 +73,41 @@
+ 		};
+ 	};
+ };
++
++&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 {
++	status = "okay";
++};
++
++/* rear serial console */
++&uart2 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_uart2>;
++	fsl,uart-has-rtscts;
++	status = "okay";
++};
++
++&mxcfb1 {
++	status = "okay";
++};
++
++&mxcfb2 {
++	status = "okay";
++};
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0049-ARM-i.MX6-cm-fx6-separate-DL-and-Quad-stuff.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0049-ARM-i.MX6-cm-fx6-separate-DL-and-Quad-stuff.patch
new file mode 100644
index 0000000..0fd1109
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0049-ARM-i.MX6-cm-fx6-separate-DL-and-Quad-stuff.patch
@@ -0,0 +1,1182 @@
+From ae49df750fb2a10cf04fca9854d5faa5f1a3d5a0 Mon Sep 17 00:00:00 2001
+From: Igor Grinberg <grinberg at compulab.co.il>
+Date: Mon, 23 Mar 2015 10:12:35 +0200
+Subject: [PATCH 49/59] ARM: i.MX6: cm-fx6: separate DL and Quad stuff
+
+Break down the cm-fx6 file into two files in order to
+separate DL and Quad supported features.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+[grinberg at compulab.co.il: fix available memory size and
+rename "dl" to "qdl"]
+Signed-off-by: Igor Grinberg <grinberg at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dtsi   |  553 +------------------------------
+ arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi |  573 +++++++++++++++++++++++++++++++++
+ 2 files changed, 575 insertions(+), 551 deletions(-)
+ create mode 100644 arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
+
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dtsi b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+index f53d94e..3a10e5e 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dtsi
+@@ -11,75 +11,14 @@
+  * http://www.gnu.org/copyleft/gpl.html
+  */
+ 
+-/ {
+-	memory {
+-		reg = <0x10000000 0x80000000>;
+-	};
+-
+-	leds {
+-		compatible = "gpio-leds";
+-		heartbeat-led {
+-			label = "Heartbeat";
+-			gpios = <&gpio2 31 0>;
+-			linux,default-trigger = "heartbeat";
+-		};
+-	};
++#include "imx6qdl-cm-fx6.dtsi"
+ 
++/ {
+ 	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>;
+-		};
+-
+ 		reg_sata_ldo_en: sata_ldo_en {
+ 			compatible = "regulator-fixed";
+ 			regulator-name = "cm_fx6_sata_ldo_en";
+@@ -146,499 +85,11 @@
+ 			vin-supply = <&reg_sata_nstandby1>;
+ 		};
+ 
+-		tsc2046reg: tsc2046-reg {
+-			compatible = "regulator-fixed";
+-			regulator-name = "tsc2046-reg";
+-			regulator-min-microvolt = <3300000>;
+-			regulator-max-microvolt = <3300000>;
+-		};
+-
+-	};
+-
+-	aliases {
+-		mxcfb0 = &mxcfb1;
+-		mxcfb1 = &mxcfb2;
+-	};
+-
+-	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 = "hdmi";
+-		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 = "lcd";
+-		interface_pix_fmt = "RGB24";
+-		mode_str ="1920x1080M at 60";
+-		default_bpp = <32>;
+-		int_clk = <0>;
+-		late_init = <0>;
+-		status = "disabled";
+-	};
+-
+-	lcd at 0 {
+-		compatible = "fsl,lcd";
+-		ipu_id = <0>;
+-		disp_id = <0>;
+-		default_ifmt = "RGB24";
+-		pinctrl-names = "default";
+-		pinctrl-0 = <&pinctrl_ipu1_lcd>;
+-		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 = <
+-				/* 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
+-			>;
+-		};
+-	};
+-
+-	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_lcd: ipu1grp-lcd {
+-			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
+-				MX6QDL_PAD_SD4_DAT0__NAND_DQS      0x00b1
+-			>;
+-		};
+-
+-		/* 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
+-			>;
+-		};
+-	};
+-};
+-
+-&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";
+-	status = "okay";
+-};
+-
+-/* nand */
+-&gpmi {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_gpmi_nand>;
+-	status = "okay";
+-
+-	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";
+ };
+ 
+ /* sata */
+ &sata {
+ 	status = "okay";
+ };
+-
+-/* console */
+-&uart4 {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_uart4>;
+-	status = "okay";
+-};
+-
+-/* usb otg */
+-&usbotg {
+-	vbus-supply = <&reg_usb_otg_vbus>;
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_usbotg>;
+-	dr_mode = "otg";
+-	status = "okay";
+-};
+-
+-/* usb hub1 */
+-&usbh1 {
+-	vbus-supply = <&reg_usb_h1_vbus>;
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_usbh1>;
+-	status = "okay";
+-};
+-
+-/* wifi/bt */
+-&usdhc1 {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_usdhc1>, <&pinctrl_mrvl1>;
+-	non-removable;
+-	vmmc-supply = <&awnh387_npoweron>;
+-	vmmc_aux-supply = <&awnh387_wifi_nreset>;
+-	status = "okay";
+-};
+-
+-&ssi2 {
+-	fsl,mode = "i2s-master";
+-	status = "okay";
+-};
+-
+-&hdmi_core {
+-	ipu_id = <1>;
+-	disp_id = <0>;
+-	status = "okay";
+-};
+-
+-&hdmi_video {
+-	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_hdmi_hdcp_1>;
+-	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-cm-fx6.dtsi b/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
+new file mode 100644
+index 0000000..31086b7
+--- /dev/null
++++ b/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
+@@ -0,0 +1,573 @@
++/*
++ * 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
++ */
++
++/ {
++	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>;
++		};
++
++	};
++
++	aliases {
++		mxcfb0 = &mxcfb1;
++		mxcfb1 = &mxcfb2;
++	};
++
++	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 = "hdmi";
++		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 = "lcd";
++		interface_pix_fmt = "RGB24";
++		mode_str ="1920x1080M at 60";
++		default_bpp = <32>;
++		int_clk = <0>;
++		late_init = <0>;
++		status = "disabled";
++	};
++
++	lcd at 0 {
++		compatible = "fsl,lcd";
++		ipu_id = <0>;
++		disp_id = <0>;
++		default_ifmt = "RGB24";
++		pinctrl-names = "default";
++		pinctrl-0 = <&pinctrl_ipu1_lcd>;
++		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 = <
++				/* 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
++			>;
++		};
++	};
++
++	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_lcd: ipu1grp-lcd {
++			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
++				MX6QDL_PAD_SD4_DAT0__NAND_DQS      0x00b1
++			>;
++		};
++
++		/* 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
++			>;
++		};
++	};
++};
++
++&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";
++	status = "okay";
++};
++
++/* nand */
++&gpmi {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_gpmi_nand>;
++	status = "okay";
++
++	partition at 0 {
++		label = "linux";
++		reg = <0x0 0x800000>;
++	};
++
++	partition at 800000 {
++		label = "rootfs";
++		reg = < 0x800000 0x0>;
++	};
++};
++
++/* i2c3 */
++&i2c3 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_i2c3>;
++	status = "okay";
++
++	eeprom at 50 {
++		compatible = "at24,24c02";
++		reg = <0x50>;
++		pagesize = <16>;
++	};
++
++	codec: wm8731 at 1a {
++		compatible = "wlf,wm8731";
++		reg = <0x1a>;
++		clocks = <&clks 173>, <&clks 158>, <&clks 201>, <&clks 200>;
++		clock-names = "pll4", "imx-ssi.1", "cko", "cko2";
++		AVDD-supply = <&pu_dummy>;
++		HPVDD-supply = <&pu_dummy>;
++		DCVDD-supply = <&pu_dummy>;
++		DBVDD-supply = <&pu_dummy>;
++	};
++};
++
++&pcie {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_pcie>;
++	reset-gpio = <&gpio1 26 0>;
++	vdd-supply = <&pcie_power_on_gpio>;
++	status = "okay";
++};
++
++/* console */
++&uart4 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_uart4>;
++	status = "okay";
++};
++
++/* usb otg */
++&usbotg {
++	vbus-supply = <&reg_usb_otg_vbus>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usbotg>;
++	dr_mode = "otg";
++	status = "okay";
++};
++
++/* usb hub1 */
++&usbh1 {
++	vbus-supply = <&reg_usb_h1_vbus>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usbh1>;
++	status = "okay";
++};
++
++/* wifi/bt */
++&usdhc1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usdhc1>, <&pinctrl_mrvl1>;
++	non-removable;
++	vmmc-supply = <&awnh387_npoweron>;
++	vmmc_aux-supply = <&awnh387_wifi_nreset>;
++	status = "okay";
++};
++
++&ssi2 {
++	fsl,mode = "i2s-master";
++	status = "okay";
++};
++
++&hdmi_core {
++	ipu_id = <1>;
++	disp_id = <0>;
++	status = "okay";
++};
++
++&hdmi_video {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_hdmi_hdcp_1>;
++	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";
++};
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0050-ARM-i.MX6-dts-add-initial-support-for-cm-fx6-DL-S.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0050-ARM-i.MX6-dts-add-initial-support-for-cm-fx6-DL-S.patch
new file mode 100644
index 0000000..7c3da0c
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0050-ARM-i.MX6-dts-add-initial-support-for-cm-fx6-DL-S.patch
@@ -0,0 +1,53 @@
+From 7f9cb189d94d973ce8f8211794fc3cb20171ed1a Mon Sep 17 00:00:00 2001
+From: Igor Grinberg <grinberg at compulab.co.il>
+Date: Mon, 23 Mar 2015 10:15:50 +0200
+Subject: [PATCH 50/59] ARM: i.MX6: dts: add initial support for cm-fx6 DL/S
+
+Add initial support for cm-fx6 DL/S modules.
+
+This patch configures:
+1) serial console
+2) hearbeat led
+3) FreeScale NIC
+4) pcie
+5) Intel I210 NIC
+6) Analog audio wm8731-audio
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+[grinberg at compulab.co.il: fix dtsi file name as per previous patch]
+Signed-off-by: Igor Grinberg <grinberg at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6dl-cm-fx6.dts |   21 +++++++++++++++++++++
+ 1 file changed, 21 insertions(+)
+ create mode 100644 arch/arm/boot/dts/imx6dl-cm-fx6.dts
+
+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";
++};
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0051-ARM-i.MX6-dts-add-board-files-for-sbc-fx6-DL-S.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0051-ARM-i.MX6-dts-add-board-files-for-sbc-fx6-DL-S.patch
new file mode 100644
index 0000000..d727345
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0051-ARM-i.MX6-dts-add-board-files-for-sbc-fx6-DL-S.patch
@@ -0,0 +1,78 @@
+From d979cd240d5aae4344c705524d05dbe5792695b4 Mon Sep 17 00:00:00 2001
+From: Igor Grinberg <grinberg at compulab.co.il>
+Date: Mon, 23 Mar 2015 10:21:26 +0200
+Subject: [PATCH 51/59] ARM: i.MX6: dts: add board files for sbc-fx6 DL/S
+
+Add board files for sbc-fx6 DL/S modules and Utilite Value.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+[grinberg at compulab.co.il: fix dtsi files names as per previous patches]
+Signed-off-by: Igor Grinberg <grinberg at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6dl-sbc-fx6.dts  |   23 +++++++++++++++++++++++
+ arch/arm/boot/dts/imx6dl-sbc-fx6m.dts |   23 +++++++++++++++++++++++
+ 2 files changed, 46 insertions(+)
+ create mode 100644 arch/arm/boot/dts/imx6dl-sbc-fx6.dts
+ create mode 100644 arch/arm/boot/dts/imx6dl-sbc-fx6m.dts
+
+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";
++};
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0052-ARM-dts-cm-fx6-add-build-targets-for-cm-fx6-flavour-.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0052-ARM-dts-cm-fx6-add-build-targets-for-cm-fx6-flavour-.patch
new file mode 100644
index 0000000..e219233
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0052-ARM-dts-cm-fx6-add-build-targets-for-cm-fx6-flavour-.patch
@@ -0,0 +1,55 @@
+From 82c104998b3e0c8c55c3ddab4d41d8a012e40307 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Mon, 23 Mar 2015 11:47:54 +0200
+Subject: [PATCH 52/59] ARM: dts: cm-fx6: add build targets for cm-fx6 flavour
+ boards.
+
+Add build targets for cm-fx6 flavour boards.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+
+Conflicts:
+
+	arch/arm/boot/dts/Makefile
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/Makefile |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
+index 699bf8f..0d6813e 100644
+--- a/arch/arm/boot/dts/Makefile
++++ b/arch/arm/boot/dts/Makefile
+@@ -153,6 +153,7 @@ dtb-$(CONFIG_ARCH_MXC) += \
+ 	imx53-mba53.dtb \
+ 	imx53-qsb.dtb \
+ 	imx53-smd.dtb \
++	imx6dl-cm-fx6.dtb \
+ 	imx6dl-cubox-i.dtb \
+ 	imx6dl-hummingboard.dtb \
+ 	imx6dl-sabreauto.dtb \
+@@ -164,8 +165,11 @@ dtb-$(CONFIG_ARCH_MXC) += \
+ 	imx6dl-sabresd-ldo.dtb \
+ 	imx6dl-sabresd-pf200.dtb \
+ 	imx6dl-sabresd-hdcp.dtb \
++	imx6dl-sbc-fx6.dtb \
++	imx6dl-sbc-fx6m.dtb \
+ 	imx6dl-wandboard.dtb \
+ 	imx6q-arm2.dtb \
++	imx6q-cm-fx6.dtb \
+ 	imx6q-cubox-i.dtb \
+ 	imx6q-phytec-pbab01.dtb \
+ 	imx6q-sabreauto.dtb \
+@@ -179,6 +183,8 @@ dtb-$(CONFIG_ARCH_MXC) += \
+ 	imx6q-sabresd-uart.dtb \
+ 	imx6q-sabresd-hdcp.dtb \
+ 	imx6q-sabresd-ldo.dtb \
++	imx6q-sbc-fx6.dtb \
++	imx6q-sbc-fx6m.dtb \
+ 	imx6q-sbc6x.dtb \
+ 	imx6q-udoo.dtb \
+ 	imx6q-wandboard.dtb \
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0053-ARM-dts-cm-fx6-change-the-hdmi_core-ipu-connection.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0053-ARM-dts-cm-fx6-change-the-hdmi_core-ipu-connection.patch
new file mode 100644
index 0000000..493463e
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0053-ARM-dts-cm-fx6-change-the-hdmi_core-ipu-connection.patch
@@ -0,0 +1,47 @@
+From b59a9dad52a2c53b9921d2e8ecb98dd92ee0bd6b Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Wed, 25 Mar 2015 17:39:07 +0200
+Subject: [PATCH 53/59] ARM: dts: cm-fx6: change the hdmi_core ipu connection
+
+Change the hdmi_core ipu connection in order to
+allow using the second IPU on quad SBC-FX6 boards with ldb devices.
+SBC-FX6m boards still use an IPU per port.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6q-sbc-fx6m.dts  |    6 ++++++
+ arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi |    4 ++--
+ 2 files changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6q-sbc-fx6m.dts b/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
+index 19bf948..dd8c1c0 100644
+--- a/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
++++ b/arch/arm/boot/dts/imx6q-sbc-fx6m.dts
+@@ -21,3 +21,9 @@
+ 	model = "CompuLab CM-FX6 on SBC-FX6m";	
+ 	compatible = "compulab,cm-fx6", "compulab,sbc-fx6m", "fsl,imx6q";
+ };
++
++&hdmi_core {
++	ipu_id = <1>;
++	disp_id = <0>;
++	status = "okay";
++};
+diff --git a/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi b/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
+index 31086b7..4f02e30 100644
+--- a/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
+@@ -544,8 +544,8 @@
+ };
+ 
+ &hdmi_core {
+-	ipu_id = <1>;
+-	disp_id = <0>;
++	ipu_id = <0>;
++	disp_id = <1>;
+ 	status = "okay";
+ };
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0054-ARM-i.MX6-dts-add-ldb-support-for-SBC-FX6-boards.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0054-ARM-i.MX6-dts-add-ldb-support-for-SBC-FX6-boards.patch
new file mode 100644
index 0000000..1ac2228
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0054-ARM-i.MX6-dts-add-ldb-support-for-SBC-FX6-boards.patch
@@ -0,0 +1,90 @@
+From e8ab6bcb80954c1b7874c288375defe73242458d Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Wed, 25 Mar 2015 17:55:09 +0200
+Subject: [PATCH 54/59] ARM: i.MX6: dts: add ldb support for SBC-FX6 boards
+
+Add ldb support for SBC-FX6 boards.
+LVDS1/0 ports of the SBC-FX6 are configured.
+LVDS0 - IPU1:DISP0 - fb3
+LVDS1 - IPU1:DISP1 - fb5
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi |   24 ++++++++++++++++++++++++
+ arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi |   18 ++++++++++++++++++
+ 2 files changed, 42 insertions(+)
+
+diff --git a/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi b/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
+index 4f02e30..d17a4d1 100644
+--- a/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
+@@ -92,6 +92,8 @@
+ 	aliases {
+ 		mxcfb0 = &mxcfb1;
+ 		mxcfb1 = &mxcfb2;
++		mxcfb2 = &mxcfb3;
++		mxcfb3 = &mxcfb4;
+ 	};
+ 
+ 	sound {
+@@ -140,6 +142,28 @@
+ 		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";
++	};
++
+ 	lcd at 0 {
+ 		compatible = "fsl,lcd";
+ 		ipu_id = <0>;
+diff --git a/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi b/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi
+index 129e88e..85836d7 100644
+--- a/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-sb-fx6.dtsi
+@@ -90,6 +90,24 @@
+ 	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";
++};
++
+ &flexcan1 {
+ 	pinctrl-names = "default";
+ 	pinctrl-0 = <&pinctrl_flexcan1_1>;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0055-ARM-dts-cm-fx6-IOMUXC_GPR1-6-7-to-set-correct-values.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0055-ARM-dts-cm-fx6-IOMUXC_GPR1-6-7-to-set-correct-values.patch
new file mode 100644
index 0000000..7abbf95
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0055-ARM-dts-cm-fx6-IOMUXC_GPR1-6-7-to-set-correct-values.patch
@@ -0,0 +1,47 @@
+From 8aa5e04aeeb40323b6f7615b500058c02115d17f Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Mon, 30 Mar 2015 11:29:07 +0300
+Subject: [PATCH 55/59] ARM: dts: cm-fx6: IOMUXC_GPR1/6/7 to set correct
+ values
+
+Add IOMUXC_GPR1/6/7 registers to the iomux default pinctrl group.
+The IOMUXC_GPR1 register must have default value in order to let the SoC boot up after a warm reboot.
+IOMUXC_GPR6/7 registers must have a correct value for the ipu QoS priority.
+Otherwise the SoC reports on:
+1) the interrupt that is a result of a time out error during a read access via DIx.
+2) a new frame starts before the previous end-of-frame event.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi b/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
+index d17a4d1..cff8d4e 100644
+--- a/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
+@@ -11,6 +11,10 @@
+  * 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>;
+@@ -187,6 +191,10 @@
+ 	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
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0056-i2c-fix-i2c_of-include.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0056-i2c-fix-i2c_of-include.patch
new file mode 100644
index 0000000..9e78f04
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0056-i2c-fix-i2c_of-include.patch
@@ -0,0 +1,30 @@
+From cdf878ae149301273767ed4f5052def1529c6cfa Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Thu, 9 Apr 2015 13:27:01 +0300
+Subject: [PATCH 56/59] i2c: fix i2c_of include
+
+The OF helpers have been moved to the core.
+As a result the i2c_of.h does not exist anymore.
+Fix i2c_of include with respect to the latest core implementation.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ sound/soc/fsl/imx-wm8731.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/sound/soc/fsl/imx-wm8731.c b/sound/soc/fsl/imx-wm8731.c
+index c0833cf..7248042 100644
+--- a/sound/soc/fsl/imx-wm8731.c
++++ b/sound/soc/fsl/imx-wm8731.c
+@@ -16,7 +16,7 @@
+ #include <linux/module.h>
+ #include <linux/of.h>
+ #include <linux/of_platform.h>
+-#include <linux/of_i2c.h>
++#include <linux/i2c.h>
+ #include <linux/clk.h>
+ #include <sound/soc.h>
+ #include <sound/pcm_params.h>
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0057-ARM-dts-cm-fx6-fix-missing-defines.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0057-ARM-dts-cm-fx6-fix-missing-defines.patch
new file mode 100644
index 0000000..30ed8bf
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0057-ARM-dts-cm-fx6-fix-missing-defines.patch
@@ -0,0 +1,66 @@
+From 9388d08644b2397682db8d5cfce894e42e128999 Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Thu, 9 Apr 2015 13:30:42 +0300
+Subject: [PATCH 57/59] ARM: dts: cm-fx6: fix missing defines
+
+Fix missing defines that have been changed since 3.10.17
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi |   26 +++++++++++++++++++++++++-
+ 1 file changed, 25 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi b/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
+index cff8d4e..e8f80bc 100644
+--- a/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-cm-fx6.dtsi
+@@ -182,6 +182,10 @@
+ 		compatible = "fsl,mxc_v4l2_output";
+ 		status = "okay";
+ 	};
++
++	pu_dummy: pudummy_reg {
++		compatible = "fsl,imx6-dummy-pureg"; /* only used in ldo-bypass */
++	};
+ };
+ 
+ &iomuxc {
+@@ -397,6 +401,26 @@
+ 				MX6QDL_PAD_GPIO_5__CCM_CLKO1	0x17059
+ 			>;
+ 		};
++
++		pinctrl_hdmi_hdcp: hdmihdcpgrp {
++			fsl,pins = <
++				MX6QDL_PAD_KEY_COL3__HDMI_TX_DDC_SCL 0x4001b8b1
++				MX6QDL_PAD_KEY_ROW3__HDMI_TX_DDC_SDA 0x4001b8b1
++			>;
++		};
++
++		pinctrl_pwm3_1: pwm3grp-1 {
++			fsl,pins = <
++				MX6QDL_PAD_SD4_DAT1__PWM3_OUT 0x1b0b1
++			>;
++		};
++
++		pinctrl_flexcan1_1: flexcan1grp-1 {
++			fsl,pins = <
++				MX6QDL_PAD_KEY_ROW2__FLEXCAN1_RX 0x80000000
++				MX6QDL_PAD_KEY_COL2__FLEXCAN1_TX 0x80000000
++			>;
++		};
+ 	};
+ };
+ 
+@@ -583,7 +607,7 @@
+ 
+ &hdmi_video {
+ 	pinctrl-names = "default";
+-	pinctrl-0 = <&pinctrl_hdmi_hdcp_1>;
++	pinctrl-0 = <&pinctrl_hdmi_hdcp>;
+ 	fsl,hdcp;
+ 	status = "okay";
+ };
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0058-imx6-hdmi-add-missing-definition.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0058-imx6-hdmi-add-missing-definition.patch
new file mode 100644
index 0000000..9caceb0
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0058-imx6-hdmi-add-missing-definition.patch
@@ -0,0 +1,27 @@
+From 3cb466070695ae9586aa52d668976c590f66008c Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Thu, 9 Apr 2015 14:01:38 +0300
+Subject: [PATCH 58/59] imx6: hdmi: add missing definition
+
+IMX6Q_GPR3_HDMI_MUX_CTL_SHIFT
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ include/linux/mfd/syscon/imx6q-iomuxc-gpr.h |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h b/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h
+index f6515b5..a5f996f 100644
+--- a/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h
++++ b/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h
+@@ -215,6 +215,7 @@
+ #define IMX6Q_GPR3_MIPI_MUX_CTL_IPU1_DI1	(0x1 << 4)
+ #define IMX6Q_GPR3_MIPI_MUX_CTL_IPU2_DI0	(0x2 << 4)
+ #define IMX6Q_GPR3_MIPI_MUX_CTL_IPU2_DI1	(0x3 << 4)
++#define IMX6Q_GPR3_HDMI_MUX_CTL_SHIFT		2
+ #define IMX6Q_GPR3_HDMI_MUX_CTL_MASK		(0x3 << 2)
+ #define IMX6Q_GPR3_HDMI_MUX_CTL_IPU1_DI0	(0x0 << 2)
+ #define IMX6Q_GPR3_HDMI_MUX_CTL_IPU1_DI1	(0x1 << 2)
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/0059-ARM-i.MX6-cm-fx6-update-defconfig.patch b/recipes-kernel/linux/linux-compulab-3.14.28/0059-ARM-i.MX6-cm-fx6-update-defconfig.patch
new file mode 100644
index 0000000..80f9fe0
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/0059-ARM-i.MX6-cm-fx6-update-defconfig.patch
@@ -0,0 +1,211 @@
+From 2a61f4133182c9c5b63ceb9f73cbc9bbc758c29a Mon Sep 17 00:00:00 2001
+From: Valentin Raevsky <valentin at compulab.co.il>
+Date: Thu, 16 Apr 2015 14:55:42 +0300
+Subject: [PATCH 59/59] ARM: i.MX6: cm-fx6: update defconfig
+
+Update the cm_fx6_defconfig with respect to
+the kernel release after applying the 3.10.17 patches.
+
+Signed-off-by: Valentin Raevsky <valentin at compulab.co.il>
+---
+ arch/arm/configs/cm_fx6_defconfig |   55 ++++++++++++++++---------------------
+ 1 file changed, 24 insertions(+), 31 deletions(-)
+
+diff --git a/arch/arm/configs/cm_fx6_defconfig b/arch/arm/configs/cm_fx6_defconfig
+index 7d753ae..a247438 100644
+--- a/arch/arm/configs/cm_fx6_defconfig
++++ b/arch/arm/configs/cm_fx6_defconfig
+@@ -1,3 +1,4 @@
++CONFIG_LOCALVERSION="-cm-fx6"
+ CONFIG_KERNEL_LZO=y
+ CONFIG_SYSVIPC=y
+ CONFIG_NO_HZ=y
+@@ -25,8 +26,8 @@ CONFIG_MACH_EUKREA_CPUIMX51SD=y
+ CONFIG_SOC_IMX53=y
+ CONFIG_SOC_IMX6Q=y
+ CONFIG_SOC_IMX6SL=y
++CONFIG_SOC_IMX6SX=y
+ CONFIG_SOC_VF610=y
+-CONFIG_MACH_CM_FX6=y
+ # CONFIG_SWP_EMULATE is not set
+ CONFIG_PCI=y
+ CONFIG_PCI_IMX6=y
+@@ -34,16 +35,16 @@ CONFIG_SMP=y
+ CONFIG_VMSPLIT_2G=y
+ CONFIG_PREEMPT=y
+ CONFIG_AEABI=y
+-# CONFIG_OABI_COMPAT is not set
+ CONFIG_HIGHMEM=y
+-CONFIG_CMDLINE="noinitrd console=ttymxc0,115200"
++CONFIG_CMA=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_ARM_IMX6Q_CPUFREQ=y
+ CONFIG_CPU_IDLE=y
+ CONFIG_VFP=y
+ CONFIG_NEON=y
+@@ -147,8 +148,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
+@@ -161,7 +160,6 @@ 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
+@@ -221,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_LEGACY_PTYS is not set
+ # CONFIG_DEVKMEM is not set
+ CONFIG_SERIAL_IMX=y
+@@ -229,10 +226,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
+@@ -259,24 +254,21 @@ 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=m
+-CONFIG_VIDEO_MXC_CSI_CAMERA=m
+ CONFIG_MXC_CAMERA_OV5640=m
+ CONFIG_MXC_CAMERA_OV5642=m
+ CONFIG_MXC_CAMERA_OV5640_MIPI=m
+@@ -284,13 +276,13 @@ 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_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
+@@ -307,25 +299,20 @@ 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_SOC_FSL_ASRC=y
++CONFIG_SND_SOC_FSL_SAI=y
++CONFIG_SND_SOC_FSL_SSI=y
++CONFIG_SND_SOC_FSL_ESAI=y
++CONFIG_SND_SOC_IMX_AUDMUX=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_CS42XX8_I2C=y
+ CONFIG_USB=y
+ CONFIG_USB_OTG=y
+ CONFIG_USB_EHCI_HCD=y
+@@ -335,7 +322,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
+@@ -352,7 +338,6 @@ 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
+@@ -371,7 +356,13 @@ CONFIG_MXC_PXP_V2=y
+ CONFIG_IMX_SDMA=y
+ CONFIG_MXS_DMA=y
+ CONFIG_STAGING=y
+-CONFIG_COMMON_CLK_DEBUG=y
++CONFIG_DRM_IMX=y
++CONFIG_DRM_IMX_FB_HELPER=y
++CONFIG_DRM_IMX_PARALLEL_DISPLAY=y
++CONFIG_DRM_IMX_LDB=y
++CONFIG_DRM_IMX_IPUV3_CORE=y
++CONFIG_DRM_IMX_IPUV3=y
++CONFIG_DRM_IMX_HDMI=y
+ # CONFIG_IOMMU_SUPPORT is not set
+ CONFIG_PWM=y
+ CONFIG_PWM_IMX=y
+@@ -416,7 +407,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
+@@ -448,3 +438,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.7.9.5
+
diff --git a/recipes-kernel/linux/linux-compulab-3.14.28/defconfig b/recipes-kernel/linux/linux-compulab-3.14.28/defconfig
new file mode 100644
index 0000000..a247438
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab-3.14.28/defconfig
@@ -0,0 +1,443 @@
+CONFIG_LOCALVERSION="-cm-fx6"
+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_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_IMX6SX=y
+CONFIG_SOC_VF610=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_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_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_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_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_MOUSE_PS2=m
+CONFIG_MOUSE_PS2_ELANTECH=y
+CONFIG_INPUT_TOUCHSCREEN=y
+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_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_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_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=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_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_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_LOGO=y
+CONFIG_SOUND=y
+CONFIG_SND=y
+CONFIG_SND_USB_AUDIO=m
+CONFIG_SND_SOC=y
+CONFIG_SND_SOC_FSL_ASRC=y
+CONFIG_SND_SOC_FSL_SAI=y
+CONFIG_SND_SOC_FSL_SSI=y
+CONFIG_SND_SOC_FSL_ESAI=y
+CONFIG_SND_SOC_IMX_AUDMUX=y
+CONFIG_SND_IMX_SOC=y
+CONFIG_SND_SOC_IMX_SPDIF=y
+CONFIG_SND_SOC_IMX_HDMI=y
+CONFIG_SND_SOC_CS42XX8_I2C=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_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_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_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_DRM_IMX=y
+CONFIG_DRM_IMX_FB_HELPER=y
+CONFIG_DRM_IMX_PARALLEL_DISPLAY=y
+CONFIG_DRM_IMX_LDB=y
+CONFIG_DRM_IMX_IPUV3_CORE=y
+CONFIG_DRM_IMX_IPUV3=y
+CONFIG_DRM_IMX_HDMI=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_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_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
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
diff --git a/recipes-kernel/linux/linux-compulab_3.14.28.bb b/recipes-kernel/linux/linux-compulab_3.14.28.bb
new file mode 100644
index 0000000..37a08f1
--- /dev/null
+++ b/recipes-kernel/linux/linux-compulab_3.14.28.bb
@@ -0,0 +1,75 @@
+require recipes-kernel/linux/linux-imx.inc
+require recipes-kernel/linux/linux-dtb.inc
+
+SUMMARY = "CompuLab 3.14.28 kernel"
+DESCRIPTION = "Linux kernel for CompuLab cm-fx6 boards."
+
+DEPENDS += "lzop-native bc-native"
+
+SRCBRANCH = "imx_3.14.28_1.0.0_ga"
+SRCREV = "91cf351a2afc17ac4a260e4d2ad1e32d00925a1b"
+LOCALVERSION = "-cm-fx6"
+
+SRC_URI += "file://defconfig \
+	file://0001-ARM-i.MX6-dts-Add-initial-support-for-cm-fx6.patch \
+	file://0002-ARM-i.MX6-cm-fx6-Add-defconfig.patch \
+	file://0003-igb-Enable-random-mac-address.patch \
+	file://0004-ARM-i.MX6-cm-fx6-update-defconfig.patch \
+	file://0005-ARM-i.MX6-dts-add-HDMI-and-DVI-support.patch \
+	file://0006-ARM-i.MX6-dts-add-HDMI-Audio-support.patch \
+	file://0007-ARM-i.MX6-dts-add-SPDIF-support.patch \
+	file://0008-ARM-i.MX6-dts-add-Power-Button.patch \
+	file://0009-ARM-i.MX6-dts-Enable-uart2-as-a-serial-console.patch \
+	file://0010-ARM-i.MX6-dts-add-pcie-power-reset-gpio-definition.patch \
+	file://0011-ARM-i.MX6-dts-add-onboard-SSD-pin-configuration.patch \
+	file://0012-ARM-i.MX6-dts-add-onboard-SSD-power-up-sequence.patch \
+	file://0013-ARM-i.MX6-dts-add-audio-mux-pinmux-configuration.patch \
+	file://0014-ARM-i.MX6-dts-add-analog-audio-support.patch \
+	file://0015-ARM-i.MX6-ASoC-add-imx-wm8731-machine-driver.patch \
+	file://0016-ARM-i.MX6-ASoC-add-imx-wm8731-master-mode-support.patch \
+	file://0017-ARM-i.MX6-dts-enable-v4l2-output.patch \
+	file://0018-ARM-i.MX6-dts-some-small-changes-in-the-dts-file.patch \
+	file://0019-igb-Define-the-device-mac-address-in-device-tree.patch \
+	file://0020-ARM-i.MX6-cm-fx6-update-defconfig.patch \
+	file://0021-ARM-i.MX6-dts-refactoring-the-cm-fx6-device-tree-fil.patch \
+	file://0022-ARM-i.MX6-dts-refactoring-of-the-cm-fx6-device-tree-.patch \
+	file://0023-ARM-i.MX6-dts-pcie-power-on-gpio-to-a-fixed-regulato.patch \
+	file://0024-ARM-i.MX6-dts-add-i2c1-status-okay.patch \
+	file://0025-ARM-i.MX6-dts-add-local-mac-address-field-for-fec.patch \
+	file://0026-ARM-mxs-change-usb-phy-test-clock-gating.patch \
+	file://0027-ARM-i.MX6-dts-fix-the-cm-fx6-operation-points.patch \
+	file://0028-ARM-i.MX6-ASoC-fix-build-warnings-and-update-include.patch \
+	file://0029-ARM-i.MX6-dts-change-issd-gpio-order.patch \
+	file://0030-ARM-i.MX6-dts-add-missing-WiFi-BT-pinmuxes.patch \
+	file://0031-ARM-i.MX6-cm-fx6-enable-i2cmux-in-defconfig.patch \
+	file://0032-ARM-i.MX6-sb-fx6m-Fix-uart1-rts-cts-flow-control.patch \
+	file://0033-ARM-i.MX6-dts-add-i2cmux-support-for-SBC-FX6-boards.patch \
+	file://0034-ARM-i.MX6-dts-add-dvi-edid-GPIOs.patch \
+	file://0035-video-mxc-IPUv3-fb-restore-sync-bits.patch \
+	file://0036-ARM-i.MX6-dts-add-backlight-support-for-SBC-FX6-boar.patch \
+	file://0037-ARM-i.MX6-dts-rearrangement-of-the-frame-buffers-def.patch \
+	file://0038-ARM-i.MX6-iomux-raise-DSE-for-display-signals.patch \
+	file://0039-ARM-i.MX6-cm-fx6-add-video-mode-for-KD050C-WVGA.patch \
+	file://0040-ARM-i.MX6-cm-fx6-refactor-the-cm-fx6-iomux.patch \
+	file://0041-ARM-i.MX6-dts-gpmi-separate-kernel-and-rootfs.patch \
+	file://0042-ARM-dts-cm-fx6-enable-can-bus.patch \
+	file://0043-ARM-dts-cm-fx6-add-tsc2046-touchscreen-support.patch \
+	file://0044-ARM-i.MX6-sb-fx6x-refactoring-of-the-usdhc3-definiti.patch \
+	file://0045-ARM-i.MX6-cm-fx6-fix-up-incorrect-compatibilities.patch \
+	file://0046-ARM-i.MX6-dts-fix-include-file-order.patch \
+	file://0047-ARM-i.MX6-dts-rename-the-sb-fx6-board-files.patch \
+	file://0048-ARM-i.MX6-dts-refactor-the-sbc-fx6-target-files.patch \
+	file://0049-ARM-i.MX6-cm-fx6-separate-DL-and-Quad-stuff.patch \
+	file://0050-ARM-i.MX6-dts-add-initial-support-for-cm-fx6-DL-S.patch \
+	file://0051-ARM-i.MX6-dts-add-board-files-for-sbc-fx6-DL-S.patch \
+	file://0052-ARM-dts-cm-fx6-add-build-targets-for-cm-fx6-flavour-.patch \
+	file://0053-ARM-dts-cm-fx6-change-the-hdmi_core-ipu-connection.patch \
+	file://0054-ARM-i.MX6-dts-add-ldb-support-for-SBC-FX6-boards.patch \
+	file://0055-ARM-dts-cm-fx6-IOMUXC_GPR1-6-7-to-set-correct-values.patch \
+	file://0056-i2c-fix-i2c_of-include.patch \
+	file://0057-ARM-dts-cm-fx6-fix-missing-defines.patch \
+	file://0058-imx6-hdmi-add-missing-definition.patch \
+	file://0059-ARM-i.MX6-cm-fx6-update-defconfig.patch \
+"
+
+COMPATIBLE_MACHINE = "(cm-fx6)"
-- 
1.7.9.5





More information about the meta-freescale mailing list