diff --git a/packages/graphics/opengl-meson/package.mk b/packages/graphics/opengl-meson/package.mk
index 836bfbfdae..58e84b736d 100644
--- a/packages/graphics/opengl-meson/package.mk
+++ b/packages/graphics/opengl-meson/package.mk
@@ -18,7 +18,7 @@
PKG_NAME="opengl-meson"
PKG_REV="1"
-PKG_ARCH="arm"
+PKG_ARCH="arm aarch64"
PKG_LICENSE="nonfree"
PKG_SITE="http://openlinux.amlogic.com:8000/download/ARM/filesystem/"
case $MESON_FAMILY in
@@ -28,6 +28,9 @@ case $MESON_FAMILY in
6)
PKG_VERSION="6-r5p1-01rel0-armhf"
;;
+ gxbb)
+ PKG_VERSION="gxbb-r5p1-01rel0"
+ ;;
esac
PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.xz"
PKG_DEPENDS_TARGET="toolchain"
diff --git a/packages/lang/gcc-linaro-aarch64-none-elf/package.mk b/packages/lang/gcc-linaro-aarch64-none-elf/package.mk
new file mode 100644
index 0000000000..800e11c0ce
--- /dev/null
+++ b/packages/lang/gcc-linaro-aarch64-none-elf/package.mk
@@ -0,0 +1,43 @@
+################################################################################
+# This file is part of LibreELEC - https://libreelec.tv
+# Copyright (C) 2016 Team LibreELEC
+#
+# LibreELEC is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# LibreELEC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with LibreELEC. If not, see .
+################################################################################
+
+PKG_NAME="gcc-linaro-aarch64-none-elf"
+PKG_VERSION="4.9-2014.11-x86_64"
+PKG_REV="1"
+PKG_ARCH="any"
+PKG_LICENSE="GPL"
+PKG_SITE=""
+PKG_URL="https://releases.linaro.org/14.11/components/toolchain/binaries/aarch64-none-elf/gcc-linaro-${PKG_VERSION}_aarch64-elf.tar.xz"
+PKG_SOURCE_DIR="gcc-linaro-${PKG_VERSION}_aarch64-elf"
+PKG_DEPENDS_HOST="toolchain"
+PKG_PRIORITY="optional"
+PKG_SECTION="lang"
+PKG_SHORTDESC=""
+PKG_LONGDESC=""
+
+PKG_IS_ADDON="no"
+PKG_AUTORECONF="no"
+
+make_host() {
+ :
+}
+
+makeinstall_host() {
+ mkdir -p $ROOT/$TOOLCHAIN/lib/gcc-linaro-aarch64-none-elf/
+ cp -a * $ROOT/$TOOLCHAIN/lib/gcc-linaro-aarch64-none-elf
+}
diff --git a/packages/linux/package.mk b/packages/linux/package.mk
index 01f1c2067f..0e0dca0dfe 100644
--- a/packages/linux/package.mk
+++ b/packages/linux/package.mk
@@ -30,6 +30,10 @@ PKG_SECTION="linux"
PKG_SHORTDESC="linux26: The Linux kernel 2.6 precompiled kernel binary image and modules"
PKG_LONGDESC="This package contains a precompiled kernel image and the modules."
case "$LINUX" in
+ hardkernel)
+ PKG_VERSION="55d5417"
+ PKG_URL="https://github.com/hardkernel/linux/archive/$PKG_VERSION.tar.gz"
+ ;;
amlogic)
PKG_VERSION="amlogic-3.10-c8d5b2f"
PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.xz"
diff --git a/packages/multimedia/libamcodec/package.mk b/packages/multimedia/libamcodec/package.mk
index 634a2af1e3..32993ee16d 100644
--- a/packages/multimedia/libamcodec/package.mk
+++ b/packages/multimedia/libamcodec/package.mk
@@ -17,12 +17,20 @@
################################################################################
PKG_NAME="libamcodec"
-PKG_VERSION="45a1086"
PKG_REV="1"
-PKG_ARCH="arm"
+PKG_ARCH="arm aarch64"
PKG_LICENSE="other"
PKG_SITE="http://openlinux.amlogic.com"
-PKG_URL="https://github.com/codesnake/libamcodec/archive/$PKG_VERSION.tar.gz"
+case $PROJECT in
+ WeTek_Core|WeTek_Play)
+ PKG_VERSION="45a1086"
+ PKG_URL="https://github.com/codesnake/libamcodec/archive/$PKG_VERSION.tar.gz"
+ ;;
+ Odroid_C2)
+ PKG_VERSION="210755d"
+ PKG_URL="http://amlinux.ru/source/$PKG_NAME-$PKG_VERSION.tar.gz"
+ ;;
+esac
PKG_DEPENDS_TARGET="toolchain"
PKG_PRIORITY="optional"
PKG_SECTION="multimedia"
diff --git a/packages/sysutils/lirc/config/lircd.conf.amremote b/packages/sysutils/lirc/config/lircd.conf.amremote
new file mode 100644
index 0000000000..eed2e9fd10
--- /dev/null
+++ b/packages/sysutils/lirc/config/lircd.conf.amremote
@@ -0,0 +1,34 @@
+begin remote
+
+ name odroid-amremote
+ bits 16
+ flags SPACE_ENC|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ header 8964 4507
+ one 544 1692
+ zero 544 561
+ ptrail 544
+ pre_data_bits 16
+ pre_data 0x4DB2
+ min_repeat 1
+ suppress_repeat 5
+ toggle_bit_mask 0x0
+
+ begin codes
+ KEY_LEFT 0x9966
+ KEY_RIGHT 0x837C
+ KEY_UP 0x53AC
+ KEY_DOWN 0x4BB4
+ KEY_ENTER 0x738C
+ KEY_HOME 0x41BE
+ KEY_MUTE 0x11EE
+ KEY_MENU 0xA35C
+ KEY_BACK 0x59A6
+ KEY_VOLUMEDOWN 0x817E
+ KEY_VOLUMEUP 0x01FE
+ KEY_POWER 0x3BC4
+
+ end codes
+end remote
diff --git a/packages/sysutils/lirc/package.mk b/packages/sysutils/lirc/package.mk
index 8a2be7e81a..7407dc3d80 100644
--- a/packages/sysutils/lirc/package.mk
+++ b/packages/sysutils/lirc/package.mk
@@ -56,8 +56,7 @@ post_makeinstall_target() {
rm -rf $INSTALL/usr/bin/pronto2lirc
mkdir -p $INSTALL/etc/lirc
- cp $PKG_DIR/config/lircd.conf.xbox $INSTALL/etc/lirc
- cp $PKG_DIR/config/lircd.conf.rpi $INSTALL/etc/lirc
+ cp $PKG_DIR/config/lircd.conf.* $INSTALL/etc/lirc
mkdir -p $INSTALL/usr/lib/libreelec
cp $PKG_DIR/scripts/lircd_helper $INSTALL/usr/lib/libreelec
diff --git a/packages/sysutils/lirc/udev.d/98-lircd.rules b/packages/sysutils/lirc/udev.d/98-lircd.rules
index 0f22df5f81..985b059231 100644
--- a/packages/sysutils/lirc/udev.d/98-lircd.rules
+++ b/packages/sysutils/lirc/udev.d/98-lircd.rules
@@ -32,6 +32,11 @@ SUBSYSTEM=="lirc", DRIVERS=="lirc_rpi", \
ENV{lircd_driver}="default", \
ENV{lircd_conf}="lircd.conf.rpi"
+### Odroid AMLogic IR Receiver
+SUBSYSTEMS=="platform", DRIVERS=="meson-ir", \
+ ENV{lircd_driver}="default", \
+ ENV{lircd_conf}="lircd.conf.amremote"
+
#-------------------------------------------------------------------------------
# Ask lircd_helper to handle USB devices that do not show up as lirc devices
# and are supported by lircd. Remote controls that are USB HID devices that show
diff --git a/packages/tools/u-boot/package.mk b/packages/tools/u-boot/package.mk
index 4de08b34c4..3dce887d04 100644
--- a/packages/tools/u-boot/package.mk
+++ b/packages/tools/u-boot/package.mk
@@ -17,18 +17,23 @@
################################################################################
PKG_NAME="u-boot"
+PKG_DEPENDS_TARGET="toolchain"
if [ "$UBOOT_VERSION" = "imx6-cuboxi" ]; then
PKG_VERSION="imx6-408544d"
PKG_SITE="http://imx.solid-run.com/wiki/index.php?title=Building_the_kernel_and_u-boot_for_the_CuBox-i_and_the_HummingBoard"
# https://github.com/SolidRun/u-boot-imx6.git
PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.xz"
+elif [ "$UBOOT_VERSION" = "hardkernel" ]; then
+ PKG_VERSION="502b13b"
+ PKG_SITE="https://github.com/hardkernel/u-boot"
+ PKG_URL="https://github.com/hardkernel/u-boot/archive/$PKG_VERSION.tar.gz"
+ PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET gcc-linaro-aarch64-none-elf:host"
else
exit 0
fi
PKG_REV="1"
-PKG_ARCH="arm"
+PKG_ARCH="arm aarch64"
PKG_LICENSE="GPL"
-PKG_DEPENDS_TARGET="toolchain"
PKG_PRIORITY="optional"
PKG_SECTION="tools"
PKG_SHORTDESC="u-boot: Universal Bootloader project"
@@ -61,9 +66,16 @@ make_target() {
done
for UBOOT_TARGET in $UBOOT_CONFIG; do
- make CROSS_COMPILE="$TARGET_PREFIX" ARCH="$TARGET_ARCH" mrproper
- make CROSS_COMPILE="$TARGET_PREFIX" ARCH="$TARGET_ARCH" $UBOOT_TARGET
- make CROSS_COMPILE="$TARGET_PREFIX" ARCH="$TARGET_ARCH" HOSTCC="$HOST_CC" HOSTSTRIP="true"
+ if [ "$PROJECT" = "Odroid_C2" ]; then
+ export PATH=$ROOT/$TOOLCHAIN/lib/gcc-linaro-aarch64-none-elf/bin/:$PATH
+ make CROSS_COMPILE=aarch64-none-elf- ARCH=arm mrproper
+ make CROSS_COMPILE=aarch64-none-elf- ARCH=arm $UBOOT_TARGET
+ make CROSS_COMPILE=aarch64-none-elf- ARCH=arm HOSTCC="$HOST_CC" HOSTSTRIP="true"
+ else
+ make CROSS_COMPILE="$TARGET_PREFIX" ARCH=arm mrproper
+ make CROSS_COMPILE="$TARGET_PREFIX" ARCH=arm $UBOOT_TARGET
+ make CROSS_COMPILE="$TARGET_PREFIX" ARCH=arm HOSTCC="$HOST_CC" HOSTSTRIP="true"
+ fi
# rename files in case of multiple targets
if [ $UBOOT_TARGET_CNT -gt 1 ]; then
@@ -106,13 +118,22 @@ makeinstall_target() {
mkdir -p $INSTALL/usr/share/bootloader
- cp ./u-boot*.imx $INSTALL/usr/share/bootloader 2>/dev/null || :
- cp ./u-boot*.img $INSTALL/usr/share/bootloader 2>/dev/null || :
- cp ./SPL* $INSTALL/usr/share/bootloader 2>/dev/null || :
+ cp $ROOT/$PKG_BUILD/u-boot*.imx $INSTALL/usr/share/bootloader 2>/dev/null || :
+ cp $ROOT/$PKG_BUILD/u-boot*.img $INSTALL/usr/share/bootloader 2>/dev/null || :
+ cp $ROOT/$PKG_BUILD/SPL* $INSTALL/usr/share/bootloader 2>/dev/null || :
- cp ./$UBOOT_CONFIGFILE $INSTALL/usr/share/bootloader 2>/dev/null || :
-
- cp -PRv $PKG_DIR/scripts/update.sh $INSTALL/usr/share/bootloader
+ cp $ROOT/$PKG_BUILD/$UBOOT_CONFIGFILE $INSTALL/usr/share/bootloader 2>/dev/null || :
cp -PR $PROJECT_DIR/$PROJECT/bootloader/uEnv*.txt $INSTALL/usr/share/bootloader 2>/dev/null || :
+
+ case $PROJECT in
+ Odroid_C2)
+ cp -PRv $PKG_DIR/scripts/update-c2.sh $INSTALL/usr/share/bootloader/update.sh
+ cp -PRv $ROOT/$PKG_BUILD/sd_fuse/bl1.bin.hardkernel $INSTALL/usr/share/bootloader/bl1
+ cp -PRv $ROOT/$PKG_BUILD/sd_fuse/u-boot.bin $INSTALL/usr/share/bootloader/u-boot
+ ;;
+ imx6)
+ cp -PRv $PKG_DIR/scripts/update.sh $INSTALL/usr/share/bootloader
+ ;;
+ esac
}
diff --git a/packages/tools/u-boot/release b/packages/tools/u-boot/release
index 80fa3a1cfb..876cac8c68 100755
--- a/packages/tools/u-boot/release
+++ b/packages/tools/u-boot/release
@@ -25,7 +25,10 @@ if [ -z "$UBOOT_CONFIGFILE" ]; then
fi
mkdir -p $RELEASE_DIR/3rdparty/bootloader
- cp -PR $BUILD/u-boot-*/$UBOOT_CONFIGFILE $RELEASE_DIR/3rdparty/bootloader 2>/dev/null || :
+ if [ -e $BUILD/u-boot-*/$UBOOT_CONFIGFILE ]; then
+ cp -PR $BUILD/u-boot-*/$UBOOT_CONFIGFILE $RELEASE_DIR/3rdparty/bootloader
+ fi
+
cp -PR $BUILD/u-boot-*/SPL* $RELEASE_DIR/3rdparty/bootloader 2>/dev/null || :
cp -PR $BUILD/u-boot-*/u-boot*.imx $RELEASE_DIR/3rdparty/bootloader 2>/dev/null || :
cp -PR $BUILD/u-boot-*/u-boot*.img $RELEASE_DIR/3rdparty/bootloader 2>/dev/null || :
@@ -35,3 +38,11 @@ mkdir -p $RELEASE_DIR/3rdparty/bootloader
cp -PR $HOME/.openelec/projects/$PROJECT/bootloader/* $RELEASE_DIR/3rdparty/bootloader 2>/dev/null || :
cp -PR $BUILD/linux-*/arch/$TARGET_KERNEL_ARCH/boot/dts/*.dtb $RELEASE_DIR/3rdparty/bootloader 2>/dev/null || :
+
+ case $PROJECT in
+ Odroid_C2)
+ cp -PR $BUILD/$BOOTLOADER-*/sd_fuse/bl1.bin.hardkernel $RELEASE_DIR/3rdparty/bootloader/bl1
+ cp -PR $BUILD/$BOOTLOADER-*/sd_fuse/u-boot.bin $RELEASE_DIR/3rdparty/bootloader/u-boot
+ cp -PR $PROJECT_DIR/$PROJECT/bootloader/boot.ini $RELEASE_DIR/3rdparty/bootloader
+ ;;
+ esac
diff --git a/packages/tools/u-boot/scripts/update-c2.sh b/packages/tools/u-boot/scripts/update-c2.sh
new file mode 100644
index 0000000000..a665655a66
--- /dev/null
+++ b/packages/tools/u-boot/scripts/update-c2.sh
@@ -0,0 +1,55 @@
+#!/bin/sh
+
+################################################################################
+# This file is part of LibreELEC - https://libreelec.tv
+# Copyright (C) 2016 Team LibreELEC
+#
+# LibreELEC is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# LibreELEC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with LibreELEC. If not, see .
+################################################################################
+
+[ -z "$SYSTEM_ROOT" ] && SYSTEM_ROOT=""
+[ -z "$BOOT_ROOT" ] && BOOT_ROOT="/flash"
+[ -z "$BOOT_PART" ] && BOOT_PART=$(df "$BOOT_ROOT" | tail -1 | awk {' print $1 '})
+if [ -z "$BOOT_DISK" ]; then
+ case $BOOT_PART in
+ /dev/sd[a-z][0-9]*)
+ BOOT_DISK=$(echo $BOOT_PART | sed -e "s,[0-9]*,,g")
+ ;;
+ /dev/mmcblk*)
+ BOOT_DISK=$(echo $BOOT_PART | sed -e "s,p[0-9]*,,g")
+ ;;
+ esac
+fi
+
+# mount $BOOT_ROOT r/w
+ mount -o remount,rw $BOOT_ROOT
+
+# update Device Tree Blobs
+ for all_dtb in /flash/*.dtb /flash/DTB; do
+ dtb=$(basename $all_dtb)
+ if [ -f $SYSTEM_ROOT/usr/share/bootloader/$dtb ]; then
+ echo "*** updating Device Tree Blob: $dtb ..."
+ cp -p $SYSTEM_ROOT/usr/share/bootloader/$dtb $BOOT_ROOT
+ fi
+ done
+
+echo "*** updating u-boot for Odroid on: $BOOT_DISK ..."
+
+dd if=$SYSTEM_ROOT/usr/share/bootloader/bl1 of=$BOOT_DISK conv=fsync bs=1 count=442
+dd if=$SYSTEM_ROOT/usr/share/bootloader/bl1 of=$BOOT_DISK conv=fsync bs=512 seek=1 skip=1
+dd if=$SYSTEM_ROOT/usr/share/bootloader/u-boot of=$BOOT_DISK conv=fsync bs=512 seek=97
+
+# mount $BOOT_ROOT r/o
+ sync
+ mount -o remount,ro $BOOT_ROOT
diff --git a/projects/Odroid_C2/bootloader/boot.ini b/projects/Odroid_C2/bootloader/boot.ini
new file mode 100644
index 0000000000..dc27be913e
--- /dev/null
+++ b/projects/Odroid_C2/bootloader/boot.ini
@@ -0,0 +1,175 @@
+#------------------------------------------------------------------------------------------------------
+#
+# boot.ini identification
+#
+#------------------------------------------------------------------------------------------------------
+ODROIDC2-UBOOT-CONFIG
+
+#------------------------------------------------------------------------------------------------------
+#
+# Boot Specific Stuff
+#
+#------------------------------------------------------------------------------------------------------
+setenv bootrootfs "boot=/dev/mmcblk0p1 disk=/dev/mmcblk0p2"
+
+#------------------------------------------------------------------------------------------------------
+#
+# Console Setup
+# setenv condev "console=ttyS0,115200n8" # on serial port
+# setenv condev "console=tty0" # on display (HDMI)
+# setenv condev "console=tty0 console=ttyS0,115200n8" # on both
+#
+#------------------------------------------------------------------------------------------------------
+setenv console "console=tty0"
+
+#------------------------------------------------------------------------------------------------------
+#
+# Video
+# Setup the video output
+# 480 Lines (720x480)
+# setenv video_output "480i60hz" # Interlaced 60Hz
+# setenv video_output "480i_rpt" # Interlaced for Rear Projection Televisions 60Hz
+# setenv video_output "480p60hz" # 480 Progressive 60Hz
+# setenv video_output "480p_rpt" # 480 Progressive for Rear Projection Televisions 60Hz
+# 576 Lines (720x576)
+# setenv video_output "576i50hz" # Interlaced 50Hz
+# setenv video_output "576i_rpt" # Interlaced for Rear Projection Televisions 50Hz
+# setenv video_output "576p50hz" # Progressive 50Hz
+# setenv video_output "576p_rpt" # Progressive for Rear Projection Televisions 50Hz
+# 720 Lines (1280x720)
+# setenv video_output "720p50hz" # Progressive 50Hz
+# setenv video_output "720p60hz" # Progressive 60Hz
+# 1080 Lines (1920x1080)
+# setenv video_output "1080i60hz" # Interlaced 60Hz
+# setenv video_output "1080p60hz" # Progressive 60Hz
+# setenv video_output "1080i50hz" # Interlaced 50Hz
+# setenv video_output "1080p50hz" # Progressive 50Hz
+# setenv video_output "1080p24hz" # Progressive 24Hz
+# 4K (3840x2160)
+# setenv video_output "2160p30hz" # Progressive 30Hz
+# setenv video_output "2160p25hz" # Progressive 25Hz
+# setenv video_output "2160p24hz" # Progressive 24Hz
+# setenv video_output "smpte24hz" # Progressive 24Hz SMPTE
+# setenv video_output "2160p50hz" # Progressive 50Hz
+# setenv video_output "2160p60hz" # Progressive 60Hz
+# setenv video_output "2160p50hz420" # Progressive 50Hz with YCbCr 4:2:0 (Requires TV/Monitor that supports it)
+# setenv video_output "2160p60hz420" # Progressive 60Hz with YCbCr 4:2:0 (Requires TV/Monitor that supports it)
+# VESA modes
+# setenv video_output "640x480p60hz"
+# setenv video_output "800x480p60hz"
+# setenv video_output "800x600p60hz"
+# setenv video_output "1024x600p60hz"
+# setenv video_output "1024x768p60hz"
+# setenv video_output "1280x800p60hz"
+# setenv video_output "1280x1024p60hz"
+# setenv video_output "1360x768p60hz"
+# setenv video_output "1366x768p60hz"
+# setenv video_output "1440x900p60hz"
+# setenv video_output "1600x900p60hz"
+# setenv video_output "1680x1050p60hz"
+# setenv video_output "1920x1200p60hz"
+#
+# Setup the HDMI video mode (Must be one or the other)
+# setenv video_mode "dvi" # DVI
+# setenv video_mode "vga" # VGA
+#
+# Setup the HDMI BPP Mode
+# setenv video_bpp "32" # 32-bit
+# setenv video_bpp "24" # 24-bit
+# setenv video_bpp "16" # 16-bit
+#
+# Enable|Disable HDMI Hotplug Detection
+# setenv hdmihotplug "0" # Disabled
+# setenv hdmihotplug "1" # Enabled
+#
+# Enable|Disable HDMI (Saves RAM)
+# setenv hdmioutput "0" # Disabled
+# setenv hdmioutput "1" # Enabled
+#
+# Enable|Disable VPU (Saves RAM)
+# setenv vpu "0" # Disabled
+# setenv vpu "1" # Enabled
+#
+#------------------------------------------------------------------------------------------------------
+setenv video_output "1080p60hz"
+setenv video_mode "hdmi"
+setenv video_bpp "32"
+setenv hdmihotplug "1"
+setenv hdmioutput "1"
+setenv vpu "1"
+
+#------------------------------------------------------------------------------------------------------
+#
+# LibreELEC variables
+#
+# Setup the LibreELEC options
+# valid values are: textmode debugging progress nofsck nosplash noram overlay quiet ssh
+#------------------------------------------------------------------------------------------------------
+setenv libreelec "quiet"
+
+#------------------------------------------------------------------------------------------------------
+#
+# UHS Card Configuration
+# Uncomment the line below to __DISABLE__ UHS-1 MicroSD support
+# This might break boot for some brand models of cards.
+#
+#------------------------------------------------------------------------------------------------------
+# setenv disableuhs "disableuhs"
+
+#------------------------------------------------------------------------------------------------------
+#
+# Enable|Disable HDMI CEC Control
+# setenv hdmi_cec "0" # Disabled
+# setenv hdmi_cec "1" # Enabled
+#
+#------------------------------------------------------------------------------------------------------
+setenv hdmi_cec "1"
+
+#------------------------------------------------------------------------------------------------------
+#
+# PCM5102 I2S Audio DAC (HiFi Shield)
+# PCM5102 is an I2S Audio DAC Addon board for ODROID-C1+
+#
+# Enable|Disable Audio DAC
+# setenv audio_dac "0" # Disabled
+# setenv audio_dac "1" # Enabled
+#------------------------------------------------------------------------------------------------------
+setenv audio_dac "0"
+
+#------------------------------------------------------------------------------------------------------
+#
+# Odroid C1 specific
+#
+#------------------------------------------------------------------------------------------------------
+setenv odroidp1 "no_console_suspend hdmimode=${video_output} m_bpp=${video_bpp} vout=${video_mode}"
+setenv odroidp2 "${disableuhs} consoleblank=0"
+setenv odroid "${odroidp1} ${odroidp2}"
+
+#------------------------------------------------------------------------------------------------------
+#
+# U-Boot bootcmd command
+#
+#------------------------------------------------------------------------------------------------------
+setenv kernel "fatload mmc 0:1 0x11000000 KERNEL"
+setenv dtb "fatload mmc 0:1 0x1000000 meson64_odroidc2.dtb"
+setenv bootseq "booti 0x11000000 - 0x1000000"
+setenv bootcmd "${kernel}; ${dtb}; ${bootseq}"
+
+#------------------------------------------------------------------------------------------------------
+#
+# Kernel boot
+#
+#------------------------------------------------------------------------------------------------------
+
+# Prepare to boot
+if test "${hdmi_cec}" = "1"; then setenv cec "hdmitx=cecf"; fi
+if test "${hdmi_hotplug}" = "0"; then setenv hpd "disablehpd=true"; fi
+if test "${audio_dac}" = "1"; then setenv dac "enabledac"; fi
+if test "${vpu}" = "0"; then fdt rm /mesonstream; fdt rm /vdec; fdt rm /ppmgr; fi
+if test "${hdmioutput}" = "0"; then fdt rm /mesonfb; fi
+
+# Populate the final bootcmd
+setenv bootargs "${console} ${bootrootfs} ${odroid} ${cec} ${hpd} ${dac} ${libreelec}"
+
+# Boot the board
+run bootcmd
diff --git a/projects/Odroid_C2/filesystem/etc/asound.conf b/projects/Odroid_C2/filesystem/etc/asound.conf
new file mode 100644
index 0000000000..8d0204666d
--- /dev/null
+++ b/projects/Odroid_C2/filesystem/etc/asound.conf
@@ -0,0 +1,12 @@
+pcm.!default {
+ type plug
+ slave {
+ pcm "hw:0,0"
+ format S16_LE
+ }
+}
+
+ctl.!default {
+ type hw
+ card 0
+}
diff --git a/projects/Odroid_C2/filesystem/usr/lib/modules-load.d/mali.conf b/projects/Odroid_C2/filesystem/usr/lib/modules-load.d/mali.conf
new file mode 100644
index 0000000000..29c66fc8c8
--- /dev/null
+++ b/projects/Odroid_C2/filesystem/usr/lib/modules-load.d/mali.conf
@@ -0,0 +1 @@
+mali
diff --git a/projects/Odroid_C2/filesystem/usr/lib/modules-load.d/meson-ir.conf b/projects/Odroid_C2/filesystem/usr/lib/modules-load.d/meson-ir.conf
new file mode 100644
index 0000000000..ac9cc29d2c
--- /dev/null
+++ b/projects/Odroid_C2/filesystem/usr/lib/modules-load.d/meson-ir.conf
@@ -0,0 +1 @@
+meson-ir
diff --git a/projects/Odroid_C2/filesystem/usr/lib/systemd/system/serial-console.service b/projects/Odroid_C2/filesystem/usr/lib/systemd/system/serial-console.service
new file mode 100644
index 0000000000..5dffa1a843
--- /dev/null
+++ b/projects/Odroid_C2/filesystem/usr/lib/systemd/system/serial-console.service
@@ -0,0 +1,22 @@
+[Unit]
+Description=Debug Shell on /dev/console
+DefaultDependencies=no
+ConditionKernelCommandLine=console
+
+[Service]
+WorkingDirectory=/storage
+Environment="ENV=/etc/profile"
+ExecStart=/bin/sh
+Restart=always
+RestartSec=0
+StandardInput=tty
+TTYPath=/dev/console
+TTYReset=yes
+TTYVHangup=yes
+KillMode=process
+IgnoreSIGPIPE=no
+# bash ignores SIGTERM
+KillSignal=SIGHUP
+
+[Install]
+WantedBy=sysinit.target
diff --git a/projects/Odroid_C2/filesystem/usr/lib/udev/rules.d/10-odroid.rules b/projects/Odroid_C2/filesystem/usr/lib/udev/rules.d/10-odroid.rules
new file mode 100644
index 0000000000..3f927bf6e0
--- /dev/null
+++ b/projects/Odroid_C2/filesystem/usr/lib/udev/rules.d/10-odroid.rules
@@ -0,0 +1,8 @@
+KERNEL=="mali",SUBSYSTEM=="misc",MODE="0777"
+KERNEL=="mali0",SUBSYSTEM=="misc",MODE="0777"
+KERNEL=="ump",SUBSYSTEM=="ump",MODE="0777"
+KERNEL=="ttySAC0", SYMLINK+="ttyACM99"
+KERNEL=="event*", SUBSYSTEM=="input", MODE="0777"
+KERNEL=="CEC", MODE="0777"
+KERNEL=="amvideo", MODE="0666"
+KERNEL=="amstream*", MODE="0666"
diff --git a/projects/Odroid_C2/initramfs/platform_init b/projects/Odroid_C2/initramfs/platform_init
new file mode 100644
index 0000000000..6704129255
--- /dev/null
+++ b/projects/Odroid_C2/initramfs/platform_init
@@ -0,0 +1,54 @@
+#!/bin/sh
+
+for x in $(cat /proc/cmdline); do
+ case ${x} in
+ m_bpp=*) export bpp=${x#*=} ;;
+ hdmimode=*) export mode=${x#*=} ;;
+ esac
+done
+
+common_display_setup() {
+ M="0 0 $(($X - 1)) $(($Y - 1))"
+ Y_VIRT=$(($Y * 2))
+ fbset -fb /dev/fb0 -g $X $Y $X $Y_VIRT $bpp
+ fbset -fb /dev/fb1 -g 32 32 32 32 32
+ echo $mode > /sys/class/display/mode
+ echo 0 > /sys/class/graphics/fb0/free_scale
+ echo 1 > /sys/class/graphics/fb0/freescale_mode
+ echo $M > /sys/class/graphics/fb0/free_scale_axis
+ echo $M > /sys/class/graphics/fb0/window_axis
+ echo 0 > /sys/class/graphics/fb1/free_scale
+ echo 1 > /sys/class/video/disable_video
+
+ if [ "$bpp" = "32" ]; then
+ echo d01068b4 0x7fc0 > /sys/kernel/debug/aml_reg/paddr
+ fi
+}
+
+case $mode in
+ 480*) export X=720 Y=480 ;;
+ 576*) export X=720 Y=576 ;;
+ 720p*) export X=1280 Y=720 ;;
+ 1080*) export X=1920 Y=1080 ;;
+ 2160p*) export X=3840 Y=2160 ;;
+ smpte24hz*) export X=3840 Y=2160 ;;
+ 640x480p60hz*) export X=640 Y=480 ;;
+ 800x480p60hz*) export X=800 Y=480 ;;
+ 800x600p60hz*) export X=800 Y=600 ;;
+ 1024x600p60hz*) export X=1024 Y=600 ;;
+ 1024x768p60hz*) export X=1024 Y=768 ;;
+ 1280x800p60hz*) export X=1280 Y=800 ;;
+ 1280x1024p60hz*) export X=1280 Y=1024 ;;
+ 1360x768p60hz*) export X=1360 Y=768 ;;
+ 1366x768p60hz*) export X=1366 Y=768 ;;
+ 1440x900p60hz*) export X=1440 Y=900 ;;
+ 1600x900p60hz*) export X=1600 Y=900 ;;
+ 1680x1050p60hz*) export X=1680 Y=1050 ;;
+ 1920x1200p60hz*) export X=1920 Y=1200 ;;
+esac
+
+common_display_setup
+
+# Console unblack
+echo 0 > /sys/class/graphics/fb0/blank
+echo 0 > /sys/class/graphics/fb1/blank
diff --git a/projects/Odroid_C2/linux/linux.aarch64.conf b/projects/Odroid_C2/linux/linux.aarch64.conf
new file mode 100644
index 0000000000..66a78ba5a7
--- /dev/null
+++ b/projects/Odroid_C2/linux/linux.aarch64.conf
@@ -0,0 +1,3805 @@
+#
+# Automatically generated file; DO NOT EDIT.
+# Linux/arm64 3.14.29 Kernel Configuration
+#
+CONFIG_ARM64=y
+CONFIG_ARM64_HAS_SG_CHAIN=y
+CONFIG_64BIT=y
+CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
+CONFIG_MMU=y
+CONFIG_NO_IOPORT=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CSUM=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_DMA_ADDR_T_64BIT=y
+CONFIG_NEED_DMA_MAP_STATE=y
+CONFIG_NEED_SG_DMA_LENGTH=y
+CONFIG_SWIOTLB=y
+CONFIG_IOMMU_HELPER=y
+CONFIG_KERNEL_MODE_NEON=y
+CONFIG_FIX_EARLYCON_MEM=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_IRQ_WORK=y
+CONFIG_BUILDTIME_EXTABLE_SORT=y
+
+#
+# General setup
+#
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_CROSS_COMPILE=""
+# CONFIG_COMPILE_TEST is not set
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_DEFAULT_HOSTNAME="@DISTRONAME@"
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_POSIX_MQUEUE_SYSCTL=y
+CONFIG_FHANDLE=y
+CONFIG_AUDIT=y
+
+#
+# IRQ subsystem
+#
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_GENERIC_IRQ_SHOW=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_IRQ_DOMAIN=y
+# CONFIG_IRQ_DOMAIN_DEBUG is not set
+CONFIG_SPARSE_IRQ=y
+CONFIG_GENERIC_TIME_VSYSCALL=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_ARCH_HAS_TICK_BROADCAST=y
+CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
+
+#
+# Timers subsystem
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ_COMMON=y
+# CONFIG_HZ_PERIODIC is not set
+CONFIG_NO_HZ_IDLE=y
+# CONFIG_NO_HZ_FULL is not set
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+
+#
+# CPU/Task time and stats accounting
+#
+CONFIG_TICK_CPU_ACCOUNTING=y
+# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+# CONFIG_TASKSTATS is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_TREE_PREEMPT_RCU=y
+CONFIG_PREEMPT_RCU=y
+CONFIG_RCU_STALL_COMMON=y
+# CONFIG_RCU_USER_QS is not set
+CONFIG_RCU_FANOUT=64
+CONFIG_RCU_FANOUT_LEAF=16
+# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_RCU_FAST_NO_HZ is not set
+CONFIG_TREE_RCU_TRACE=y
+# CONFIG_RCU_BOOST is not set
+# CONFIG_RCU_NOCB_CPU is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=19
+CONFIG_GENERIC_SCHED_CLOCK=y
+CONFIG_CGROUPS=y
+CONFIG_CGROUP_DEBUG=y
+CONFIG_CGROUP_FREEZER=y
+CONFIG_CGROUP_DEVICE=y
+CONFIG_CPUSETS=y
+CONFIG_PROC_PID_CPUSET=y
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_RESOURCE_COUNTERS=y
+# CONFIG_MEMCG is not set
+CONFIG_CGROUP_PERF=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_CFS_BANDWIDTH=y
+CONFIG_RT_GROUP_SCHED=y
+CONFIG_BLK_CGROUP=y
+# CONFIG_DEBUG_BLK_CGROUP is not set
+# CONFIG_CHECKPOINT_RESTORE is not set
+CONFIG_NAMESPACES=y
+CONFIG_UTS_NS=y
+CONFIG_IPC_NS=y
+CONFIG_USER_NS=y
+CONFIG_PID_NS=y
+CONFIG_NET_NS=y
+CONFIG_SCHED_AUTOGROUP=y
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_INITRAMFS_ROOT_UID=0
+CONFIG_INITRAMFS_ROOT_GID=0
+CONFIG_RD_GZIP=y
+CONFIG_RD_BZIP2=y
+CONFIG_RD_LZMA=y
+CONFIG_RD_XZ=y
+CONFIG_RD_LZO=y
+# CONFIG_RD_LZ4 is not set
+CONFIG_INITRAMFS_COMPRESSION_NONE=y
+# CONFIG_INITRAMFS_COMPRESSION_GZIP is not set
+# CONFIG_INITRAMFS_COMPRESSION_BZIP2 is not set
+# CONFIG_INITRAMFS_COMPRESSION_LZMA is not set
+# CONFIG_INITRAMFS_COMPRESSION_XZ is not set
+# CONFIG_INITRAMFS_COMPRESSION_LZO is not set
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
+CONFIG_HAVE_UID16=y
+CONFIG_SYSCTL_EXCEPTION_TRACE=y
+CONFIG_EXPERT=y
+CONFIG_UID16=y
+# CONFIG_SYSCTL_SYSCALL is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+CONFIG_EMBEDDED=y
+CONFIG_HAVE_PERF_EVENTS=y
+CONFIG_PERF_USE_VMALLOC=y
+
+#
+# Kernel Performance Events And Counters
+#
+CONFIG_PERF_EVENTS=y
+# CONFIG_DEBUG_PERF_USE_VMALLOC is not set
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLUB_DEBUG=y
+CONFIG_COMPAT_BRK=y
+# CONFIG_SLAB is not set
+CONFIG_SLUB=y
+# CONFIG_SLOB is not set
+# CONFIG_SLUB_CPU_PARTIAL is not set
+# CONFIG_SYSTEM_TRUSTED_KEYRING is not set
+# CONFIG_PROFILING is not set
+CONFIG_TRACEPOINTS=y
+# CONFIG_JUMP_LABEL is not set
+# CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set
+CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
+CONFIG_HAVE_ARCH_TRACEHOOK=y
+CONFIG_HAVE_DMA_ATTRS=y
+CONFIG_HAVE_DMA_CONTIGUOUS=y
+CONFIG_GENERIC_SMP_IDLE_THREAD=y
+CONFIG_HAVE_CLK=y
+CONFIG_HAVE_DMA_API_DEBUG=y
+CONFIG_HAVE_HW_BREAKPOINT=y
+CONFIG_HAVE_PERF_REGS=y
+CONFIG_HAVE_PERF_USER_STACK_DUMP=y
+CONFIG_HAVE_ARCH_JUMP_LABEL=y
+CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y
+CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
+CONFIG_SECCOMP_FILTER=y
+# CONFIG_CC_STACKPROTECTOR is not set
+CONFIG_HAVE_CONTEXT_TRACKING=y
+CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
+CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
+CONFIG_MODULES_USE_ELF_RELA=y
+CONFIG_CLONE_BACKWARDS=y
+CONFIG_OLD_SIGSUSPEND3=y
+CONFIG_COMPAT_OLD_SIGACTION=y
+
+#
+# GCOV-based kernel profiling
+#
+# CONFIG_GCOV_KERNEL is not set
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+# CONFIG_MODULE_SIG is not set
+CONFIG_STOP_MACHINE=y
+CONFIG_BLOCK=y
+CONFIG_BLK_DEV_BSG=y
+CONFIG_BLK_DEV_BSGLIB=y
+# CONFIG_BLK_DEV_INTEGRITY is not set
+# CONFIG_BLK_DEV_THROTTLING is not set
+# CONFIG_BLK_CMDLINE_PARSER is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+CONFIG_EFI_PARTITION=y
+CONFIG_BLOCK_COMPAT=y
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_CFQ_GROUP_IOSCHED is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+CONFIG_UNINLINE_SPIN_UNLOCK=y
+CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
+CONFIG_MUTEX_SPIN_ON_OWNER=y
+CONFIG_FREEZER=y
+
+#
+# Platform selection
+#
+# CONFIG_ARCH_VEXPRESS is not set
+# CONFIG_ARCH_XGENE is not set
+CONFIG_ARCH_MESON64_ODROIDC2=y
+
+#
+# Bus support
+#
+CONFIG_ARM_AMBA=y
+
+#
+# Kernel Features
+#
+# CONFIG_ARM64_64K_PAGES is not set
+# CONFIG_CPU_BIG_ENDIAN is not set
+CONFIG_SMP=y
+CONFIG_SCHED_MC=y
+CONFIG_SCHED_SMT=y
+# CONFIG_DISABLE_CPU_SCHED_DOMAIN_BALANCE is not set
+CONFIG_NR_CPUS=4
+CONFIG_HOTPLUG_CPU=y
+CONFIG_SWP_EMULATE=y
+# CONFIG_PREEMPT_NONE is not set
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_PREEMPT=y
+CONFIG_PREEMPT_COUNT=y
+CONFIG_HZ=100
+CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
+CONFIG_ARCH_SPARSEMEM_DEFAULT=y
+CONFIG_ARCH_SELECT_MEMORY_MODEL=y
+CONFIG_HAVE_ARCH_PFN_VALID=y
+CONFIG_HW_PERF_EVENTS=y
+CONFIG_ARMV7_COMPAT=y
+CONFIG_ARMV7_COMPAT_CPUINFO=y
+CONFIG_SYS_SUPPORTS_HUGETLBFS=y
+CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
+CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y
+CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_SPARSEMEM_MANUAL=y
+CONFIG_SPARSEMEM=y
+CONFIG_HAVE_MEMORY_PRESENT=y
+CONFIG_SPARSEMEM_EXTREME=y
+CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
+CONFIG_SPARSEMEM_VMEMMAP=y
+CONFIG_HAVE_MEMBLOCK=y
+CONFIG_NO_BOOTMEM=y
+CONFIG_MEMORY_ISOLATION=y
+# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+CONFIG_COMPACTION=y
+CONFIG_MIGRATION=y
+CONFIG_PHYS_ADDR_T_64BIT=y
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_KSM=y
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+# CONFIG_TRANSPARENT_HUGEPAGE is not set
+CONFIG_CROSS_MEMORY_ATTACH=y
+# CONFIG_CLEANCACHE is not set
+CONFIG_CMA=y
+# CONFIG_CMA_DEBUG is not set
+CONFIG_CMA_AREAS=7
+# CONFIG_ZBUD is not set
+# CONFIG_ZSMALLOC is not set
+CONFIG_GENERIC_EARLY_IOREMAP=y
+# CONFIG_XEN is not set
+CONFIG_FORCE_MAX_ZONEORDER=11
+CONFIG_SECCOMP=y
+
+#
+# Boot options
+#
+CONFIG_CMDLINE="console=ttyAMA0"
+CONFIG_CMDLINE_FROM_BOOTLOADER=y
+# CONFIG_CMDLINE_EXTEND is not set
+# CONFIG_CMDLINE_FORCE is not set
+# CONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_COMPAT_BINFMT_ELF=y
+CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
+CONFIG_BINFMT_SCRIPT=y
+# CONFIG_HAVE_AOUT is not set
+CONFIG_BINFMT_MISC=y
+CONFIG_COREDUMP=y
+CONFIG_COMPAT=y
+CONFIG_SYSVIPC_COMPAT=y
+
+#
+# Power management options
+#
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+CONFIG_HAS_WAKELOCK=y
+CONFIG_HAS_EARLYSUSPEND=y
+CONFIG_WAKELOCK=y
+CONFIG_WAKELOCK_STAT=y
+CONFIG_USER_WAKELOCK=y
+CONFIG_EARLYSUSPEND=y
+# CONFIG_NO_USER_SPACE_SCREEN_ACCESS_CONTROL is not set
+# CONFIG_CONSOLE_EARLYSUSPEND is not set
+CONFIG_FB_EARLYSUSPEND=y
+# CONFIG_HIBERNATION is not set
+CONFIG_PM_SLEEP=y
+CONFIG_PM_SLEEP_SMP=y
+# CONFIG_PM_AUTOSLEEP is not set
+# CONFIG_PM_WAKELOCKS is not set
+# CONFIG_PM_RUNTIME is not set
+CONFIG_PM=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_ARCH_HAS_OPP=y
+CONFIG_PM_OPP=y
+CONFIG_PM_CLK=y
+# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set
+CONFIG_CPU_PM=y
+# CONFIG_SUSPEND_TIME is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_GOV_COMMON=y
+CONFIG_CPU_FREQ_STAT=y
+# CONFIG_CPU_FREQ_STAT_DETAILS is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_HOTPLUG is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+# CONFIG_CPU_FREQ_GOV_USERSPACE is not set
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_HOTPLUG=y
+# CONFIG_CPU_FREQ_GOV_INTERACTIVE is not set
+# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
+# CONFIG_GENERIC_CPUFREQ_CPU0 is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_ARCH_HIBERNATION_POSSIBLE=y
+CONFIG_ARM64_CPU_SUSPEND=y
+
+#
+# CPU Power Management
+#
+
+#
+# CPU Idle
+#
+# CONFIG_CPU_IDLE is not set
+# CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set
+CONFIG_NET=y
+CONFIG_COMPAT_NETLINK_MESSAGES=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_DIAG is not set
+CONFIG_UNIX=y
+# CONFIG_UNIX_DIAG is not set
+# CONFIG_XFRM_USER is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE_DEMUX is not set
+CONFIG_NET_IP_TUNNEL=m
+CONFIG_IP_MROUTE=y
+# CONFIG_IP_PIMSM_V1 is not set
+# CONFIG_IP_PIMSM_V2 is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# 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=y
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+CONFIG_IPV6=y
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_INET6_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET6_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET6_XFRM_MODE_BEET is not set
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_SIT_6RD is not set
+CONFIG_IPV6_NDISC_NODETYPE=y
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_GRE is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_IPV6_MROUTE is not set
+# CONFIG_ANDROID_PARANOID_NETWORK is not set
+# CONFIG_NET_ACTIVITY_STATS is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_NETFILTER_ADVANCED=y
+# CONFIG_BRIDGE_NETFILTER is not set
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+# CONFIG_NETFILTER_NETLINK_ACCT is not set
+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK=m
+# CONFIG_NF_CONNTRACK_MARK is not set
+# CONFIG_NF_CONNTRACK_PROCFS is not set
+# CONFIG_NF_CONNTRACK_EVENTS is not set
+# CONFIG_NF_CONNTRACK_TIMEOUT is not set
+# CONFIG_NF_CONNTRACK_TIMESTAMP is not set
+# CONFIG_NF_CT_PROTO_DCCP is not set
+# CONFIG_NF_CT_PROTO_SCTP is not set
+# CONFIG_NF_CT_PROTO_UDPLITE is not set
+# CONFIG_NF_CONNTRACK_AMANDA is not set
+CONFIG_NF_CONNTRACK_FTP=m
+# CONFIG_NF_CONNTRACK_H323 is not set
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_BROADCAST=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+# CONFIG_NF_CONNTRACK_SNMP is not set
+# CONFIG_NF_CONNTRACK_PPTP is not set
+# CONFIG_NF_CONNTRACK_SANE is not set
+CONFIG_NF_CONNTRACK_SIP=m
+# CONFIG_NF_CONNTRACK_TFTP is not set
+CONFIG_NF_CT_NETLINK=m
+# CONFIG_NF_CT_NETLINK_TIMEOUT is not set
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+# CONFIG_NF_NAT_AMANDA is not set
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_SIP=m
+# CONFIG_NF_NAT_TFTP is not set
+# CONFIG_NF_TABLES is not set
+CONFIG_NETFILTER_XTABLES=m
+
+#
+# Xtables combined modules
+#
+# CONFIG_NETFILTER_XT_MARK is not set
+# CONFIG_NETFILTER_XT_CONNMARK is not set
+
+#
+# Xtables targets
+#
+# CONFIG_NETFILTER_XT_TARGET_AUDIT is not set
+# CONFIG_NETFILTER_XT_TARGET_CHECKSUM is not set
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_HL is not set
+# CONFIG_NETFILTER_XT_TARGET_HMARK is not set
+# CONFIG_NETFILTER_XT_TARGET_IDLETIMER is not set
+# CONFIG_NETFILTER_XT_TARGET_LED is not set
+# CONFIG_NETFILTER_XT_TARGET_LOG is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NETMAP is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
+# CONFIG_NETFILTER_XT_TARGET_REDIRECT is not set
+# CONFIG_NETFILTER_XT_TARGET_TEE is not set
+# CONFIG_NETFILTER_XT_TARGET_TPROXY is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
+
+#
+# Xtables matches
+#
+# CONFIG_NETFILTER_XT_MATCH_ADDRTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_BPF is not set
+# CONFIG_NETFILTER_XT_MATCH_CGROUP is not set
+# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
+# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set
+# CONFIG_NETFILTER_XT_MATCH_CONNLABEL is not set
+# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set
+# CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set
+# CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not set
+# CONFIG_NETFILTER_XT_MATCH_CPU is not set
+# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
+# CONFIG_NETFILTER_XT_MATCH_DEVGROUP is not set
+# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
+# CONFIG_NETFILTER_XT_MATCH_ECN is not set
+# CONFIG_NETFILTER_XT_MATCH_ESP is not set
+# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
+# CONFIG_NETFILTER_XT_MATCH_HELPER is not set
+# CONFIG_NETFILTER_XT_MATCH_HL is not set
+# CONFIG_NETFILTER_XT_MATCH_IPCOMP is not set
+CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
+# CONFIG_NETFILTER_XT_MATCH_L2TP is not set
+# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
+# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
+# CONFIG_NETFILTER_XT_MATCH_MAC is not set
+# CONFIG_NETFILTER_XT_MATCH_MARK is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_NFACCT is not set
+# CONFIG_NETFILTER_XT_MATCH_OSF is not set
+CONFIG_NETFILTER_XT_MATCH_OWNER=m
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA2 is not set
+# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
+# CONFIG_NETFILTER_XT_MATCH_SOCKET is not set
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
+# CONFIG_NETFILTER_XT_MATCH_STRING is not set
+# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_TIME is not set
+# CONFIG_NETFILTER_XT_MATCH_U32 is not set
+# CONFIG_IP_SET is not set
+# CONFIG_IP_VS is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_DEFRAG_IPV4=m
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_IP_NF_IPTABLES=m
+# CONFIG_IP_NF_MATCH_AH is not set
+# CONFIG_IP_NF_MATCH_ECN is not set
+# CONFIG_IP_NF_MATCH_RPFILTER is not set
+# CONFIG_IP_NF_MATCH_TTL is not set
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+# CONFIG_IP_NF_TARGET_SYNPROXY is not set
+# CONFIG_IP_NF_TARGET_ULOG is not set
+CONFIG_NF_NAT_IPV4=m
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+# CONFIG_IP_NF_TARGET_NETMAP is not set
+# CONFIG_IP_NF_TARGET_REDIRECT is not set
+# CONFIG_NF_NAT_PPTP is not set
+# CONFIG_NF_NAT_H323 is not set
+CONFIG_IP_NF_MANGLE=m
+# CONFIG_IP_NF_TARGET_CLUSTERIP is not set
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+# CONFIG_IP_NF_RAW is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration
+#
+CONFIG_NF_DEFRAG_IPV6=m
+CONFIG_NF_CONNTRACK_IPV6=m
+CONFIG_IP6_NF_IPTABLES=m
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_MH is not set
+# CONFIG_IP6_NF_MATCH_RPFILTER is not set
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_TARGET_HL is not set
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+# CONFIG_IP6_NF_TARGET_SYNPROXY is not set
+CONFIG_IP6_NF_MANGLE=m
+# CONFIG_IP6_NF_RAW is not set
+CONFIG_NF_NAT_IPV6=m
+# CONFIG_IP6_NF_TARGET_MASQUERADE is not set
+# CONFIG_IP6_NF_TARGET_NPT is not set
+# CONFIG_BRIDGE_NF_EBTABLES is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_RDS is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_L2TP is not set
+CONFIG_STP=m
+CONFIG_BRIDGE=m
+CONFIG_BRIDGE_IGMP_SNOOPING=y
+# CONFIG_BRIDGE_VLAN_FILTERING is not set
+CONFIG_HAVE_NET_DSA=y
+CONFIG_VLAN_8021Q=m
+# CONFIG_VLAN_8021Q_GVRP is not set
+# CONFIG_VLAN_8021Q_MVRP is not set
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_PHONET is not set
+# CONFIG_IEEE802154 is not set
+CONFIG_6LOWPAN_IPHC=m
+# CONFIG_NET_SCHED is not set
+# CONFIG_DCB is not set
+CONFIG_DNS_RESOLVER=y
+# CONFIG_BATMAN_ADV is not set
+# CONFIG_OPENVSWITCH is not set
+# CONFIG_VSOCKETS is not set
+# CONFIG_NETLINK_MMAP is not set
+# CONFIG_NETLINK_DIAG is not set
+# CONFIG_NET_MPLS_GSO is not set
+# CONFIG_HSR is not set
+CONFIG_RPS=y
+CONFIG_RFS_ACCEL=y
+CONFIG_XPS=y
+# CONFIG_CGROUP_NET_PRIO is not set
+# CONFIG_CGROUP_NET_CLASSID is not set
+CONFIG_NET_RX_BUSY_POLL=y
+CONFIG_BQL=y
+CONFIG_NET_FLOW_LIMIT=y
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_NET_DROP_MONITOR is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+# CONFIG_BT_BNEP is not set
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIBTUSB=m
+CONFIG_BT_HCIBTSDIO=m
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIUART_ATH3K=y
+CONFIG_BT_HCIUART_LL=y
+# CONFIG_BT_HCIUART_3WIRE is not set
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+# CONFIG_BT_HCIVHCI is not set
+CONFIG_BT_MRVL=m
+CONFIG_BT_MRVL_SDIO=m
+CONFIG_BT_ATH3K=m
+# CONFIG_AF_RXRPC is not set
+CONFIG_WIRELESS=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_WEXT_CORE=y
+CONFIG_WEXT_PROC=y
+CONFIG_WEXT_PRIV=y
+CONFIG_CFG80211=m
+# CONFIG_NL80211_TESTMODE is not set
+# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
+# CONFIG_CFG80211_REG_DEBUG is not set
+# CONFIG_CFG80211_CERTIFICATION_ONUS is not set
+CONFIG_CFG80211_DEFAULT_PS=y
+# CONFIG_CFG80211_DEBUGFS is not set
+CONFIG_CFG80211_INTERNAL_REGDB=y
+CONFIG_CFG80211_WEXT=y
+# CONFIG_LIB80211 is not set
+CONFIG_MAC80211=m
+CONFIG_MAC80211_HAS_RC=y
+# CONFIG_MAC80211_RC_PID is not set
+CONFIG_MAC80211_RC_MINSTREL=y
+CONFIG_MAC80211_RC_MINSTREL_HT=y
+CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
+CONFIG_MAC80211_RC_DEFAULT="minstrel_ht"
+# CONFIG_MAC80211_MESH is not set
+CONFIG_MAC80211_LEDS=y
+# CONFIG_MAC80211_DEBUGFS is not set
+# CONFIG_MAC80211_MESSAGE_TRACING is not set
+# CONFIG_MAC80211_DEBUG_MENU is not set
+# CONFIG_WIMAX is not set
+# CONFIG_RFKILL is not set
+# CONFIG_RFKILL_REGULATOR is not set
+# CONFIG_NET_9P is not set
+# CONFIG_CAIF is not set
+# CONFIG_CEPH_LIB is not set
+# CONFIG_NFC is not set
+
+#
+# Device Drivers
+#
+
+#
+# Amlogic Device Drivers
+#
+CONFIG_MESON_TIMER=y
+CONFIG_AM_UART=y
+CONFIG_SERIAL_MESON_CONSOLE=y
+CONFIG_AML_CPU_VERSION=y
+CONFIG_AML_MESON64_VERSION=y
+# CONFIG_AML_M8_VERSION is not set
+CONFIG_AMLOGIC_IOMAP=y
+CONFIG_PINCTRL_AMLOGIC=y
+
+#
+# USB Support
+#
+CONFIG_AMLOGIC_USB=y
+CONFIG_USB_DWC_OTG_HCD=y
+CONFIG_USB_HOST_ELECT_TEST=y
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_AML=y
+# CONFIG_I2C_SW_AML is not set
+# CONFIG_BCM2079X_I2C is not set
+
+#
+# HDMI TX Support
+#
+CONFIG_AML_HDMI_TX=y
+CONFIG_AML_HDMI_TX_20=y
+# CONFIG_AML_HDMI_TX_14 is not set
+CONFIG_AML_HDMI_TX_NEW_CEC_DRIVER=y
+# CONFIG_AML_RTC is not set
+CONFIG_AML_VRTC=y
+CONFIG_AM_IRBLASTER=y
+# CONFIG_AML_DEBUG is not set
+CONFIG_AML_REG_ACCESS=y
+
+#
+# Power Management Support
+#
+# CONFIG_AML_POWER_SUPPORT is not set
+# CONFIG_AML_PMU_ALGORITHM_SUPPORT is not set
+
+#
+# Ethernet Support
+#
+CONFIG_AM_PHY=y
+CONFIG_PHYLIB=y
+
+#
+# MII PHY device drivers
+#
+CONFIG_AML_PHY=y
+CONFIG_AML_SMSC=y
+CONFIG_AML_ICPLUS=y
+CONFIG_AML_MICREL=y
+CONFIG_AML_REALTEK=y
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+
+#
+# Multimedia Card support
+#
+CONFIG_MMC_AML=y
+# CONFIG_MMC_AML_DEBUG is not set
+# CONFIG_AML_MMC_DEBUG_FORCE_SINGLE_BLOCK_RW is not set
+
+#
+# Amlogic VPU Drivers
+#
+
+#
+# Amlogic VPU Driver
+#
+CONFIG_AML_VPU=y
+# CONFIG_AML_VPU_DYNAMIC_ADJ is not set
+
+#
+# ION support
+#
+CONFIG_AMLOGIC_ION=y
+
+#
+# Amlogic Display Driver
+#
+CONFIG_AML_DISPLAY=y
+
+#
+# Amlogic VOUT Module
+#
+CONFIG_AM_VOUT=y
+CONFIG_AM_TV_OUTPUT=y
+CONFIG_AML_VOUT_FRAMERATE_AUTOMATION=y
+# CONFIG_AML_VDAC_HW_SWITCH is not set
+# CONFIG_AM_LCD_OUTPUT is not set
+
+#
+# Amlogic OSD Module
+#
+CONFIG_AM_FB=y
+CONFIG_FB_OSD_SUPPORT_SYNC_FENCE=y
+CONFIG_FB_OSD_VSYNC_RDMA=y
+CONFIG_FB_OSD2_ENABLE=y
+CONFIG_FB_OSD2_CURSOR=y
+
+#
+# Amlogic VOUT2 Module
+#
+# CONFIG_AM_VOUT2 is not set
+# CONFIG_AM_TV_OUTPUT2 is not set
+
+#
+# Amlogic OSD_EXT Module
+#
+# CONFIG_AM_FB_EXT is not set
+CONFIG_AM_GE2D=y
+CONFIG_AM_LOGO=y
+
+#
+# Amlogic Backlight Support
+#
+# CONFIG_AMLOGIC_BACKLIGHT is not set
+# CONFIG_AMLOGIC_LED is not set
+
+#
+# Canvas management driver
+#
+CONFIG_AML_CANVAS=y
+CONFIG_AMLOGIC_CLK=y
+CONFIG_AMLOGIC_SEC=y
+CONFIG_AMLOGIC_SECURITY_KEY=y
+CONFIG_AM_PTSSERVER=y
+# CONFIG_H264_4K2K_SINGLE_CORE is not set
+CONFIG_VSYNC_RDMA=y
+# CONFIG_TVIN_VIUIN is not set
+CONFIG_AM_VIDEO=y
+# CONFIG_AM_VIDEO2 is not set
+# CONFIG_SUPPORT_VIDEO_ON_VPP2 is not set
+CONFIG_GE2D_KEEP_FRAME=y
+
+#
+# Video Decoders
+#
+CONFIG_AM_VDEC_MPEG12=y
+CONFIG_AM_VDEC_MPEG4=y
+CONFIG_AM_VDEC_VC1=y
+CONFIG_AM_VDEC_H264=y
+CONFIG_AM_VDEC_H264MVC=y
+CONFIG_AM_VDEC_H264_4K2K=y
+CONFIG_AM_VDEC_H265=y
+CONFIG_AM_VDEC_MJPEG=y
+CONFIG_AM_ENCODER=y
+CONFIG_AM_JPEG_ENCODER=y
+CONFIG_AM_PIC_DEC=y
+CONFIG_AM_VDEC_REAL=y
+CONFIG_AM_VDEC_AVS=y
+# CONFIG_AM_JPEGDEC is not set
+CONFIG_AM_TIMESYNC=y
+CONFIG_AM_STREAMING=y
+CONFIG_AM_SUBTITLE=y
+# CONFIG_AM_VIDEOCAPTURE is not set
+
+#
+# Deinterlace driver
+#
+CONFIG_DEINTERLACE=y
+# CONFIG_AM_DEINTERLACE_SD_ONLY is not set
+CONFIG_AML_VFM=y
+
+#
+# EFUSE Support
+#
+CONFIG_EFUSE=y
+# CONFIG_EFUSE_WRITE_VERSION_PERMIT is not set
+
+#
+# key management Support
+#
+CONFIG_KEY_MANAGE=y
+
+#
+# Audio Interface
+#
+CONFIG_AMAUDIO=y
+
+#
+# Amlogic Audio Interface V2
+#
+# CONFIG_AMAUDIO2 is not set
+
+#
+# Audio dsp process
+#
+CONFIG_AML_AUDIO_DSP=y
+
+#
+# Post Process Manager driver
+#
+CONFIG_POST_PROCESS_MANAGER=y
+CONFIG_POST_PROCESS_MANAGER_PPSCALER=y
+# CONFIG_POST_PROCESS_MANAGER_3D_PROCESS is not set
+
+#
+# Amlogic Wifi Driver
+#
+# CONFIG_AM_WIFI is not set
+CONFIG_AML_POWER_RESET=y
+# CONFIG_M8_POWER_RESET is not set
+CONFIG_GXBB_POWER_RESET=y
+
+#
+# Amlogic Bt Rfkill Driver
+#
+
+#
+# Amlogic ion video support
+#
+CONFIG_VIDEOBUF2_ION=y
+CONFIG_AMLOGIC_IONVIDEO=y
+
+#
+# V4L2 Video Support
+#
+CONFIG_V4L_AMLOGIC_VIDEO=y
+# CONFIG_V4L_AMLOGIC_VIDEO2 is not set
+
+#
+# Amlogic TVIN Drivers
+#
+# CONFIG_TVIN is not set
+
+#
+# Amlogic VECM Drivers
+#
+
+#
+# Amlogic amvecm Driver
+#
+CONFIG_AM_VECM=y
+CONFIG_AML_NAND=y
+CONFIG_AML_NEXT_GEN_NAND=y
+CONFIG_AML_NFTL_NEW=m
+CONFIG_AML_NAND_KEY=y
+# CONFIG_SECURE_NAND is not set
+CONFIG_AM_INPUT=y
+CONFIG_AM_SARADC=y
+CONFIG_MESON_NEW_INPUT_REMOTE=y
+CONFIG_NEW_AM_REMOTE=y
+CONFIG_MESON_INPUT_KEYBOARD=y
+CONFIG_ADC_KEYPADS_AM=y
+CONFIG_AML_GPIO_KEY=y
+# CONFIG_SENSOR_DEVICES is not set
+# CONFIG_AMLOGIC_MESON_CPUFREQ is not set
+CONFIG_AMLOGIC_SCPI_CPUFREQ=y
+CONFIG_MESON_SUSPEND=y
+# CONFIG_M8M2_SUSPEND is not set
+CONFIG_GXBB_SUSPEND=y
+
+#
+# Amlogic DVB driver
+#
+# CONFIG_AM_DVB is not set
+# CONFIG_AM_ATVDEMOD is not set
+
+#
+# AMLOGIC CI Driver
+#
+# CONFIG_AM_PCMCIA is not set
+# CONFIG_AM_IOBUS is not set
+
+#
+# MESON MHU mailbox Support
+#
+CONFIG_MESON_MHU_MBOX=y
+CONFIG_ARM_SCPI_PROTOCOL=y
+
+#
+# RDMA management driver
+#
+CONFIG_AML_RDMA=y
+
+#
+# Amlogic temperature sensor
+#
+# CONFIG_AML_TEMP_SENSOR is not set
+CONFIG_AUDIO_DATA=y
+# CONFIG_INSTABOOT is not set
+
+#
+# Amlogic Camera Support
+#
+# CONFIG_VIDEO_AMLOGIC_CAPTURE is not set
+CONFIG_AML_CODEC_MM=y
+# CONFIG_AML_WDT is not set
+CONFIG_MESON_PWM=y
+CONFIG_MESON_PWM_CTRL=y
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH=""
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_FW_LOADER_USER_HELPER is not set
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_GENERIC_CPU_DEVICES is not set
+CONFIG_HAVE_CPU_AUTOPROBE=y
+CONFIG_GENERIC_CPU_AUTOPROBE=y
+CONFIG_REGMAP=y
+CONFIG_REGMAP_I2C=y
+CONFIG_REGMAP_SPI=y
+CONFIG_REGMAP_MMIO=y
+CONFIG_DMA_SHARED_BUFFER=y
+CONFIG_DMA_CMA=y
+
+#
+# Default contiguous memory area size:
+#
+CONFIG_CMA_SIZE_MBYTES=8
+CONFIG_CMA_SIZE_SEL_MBYTES=y
+# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set
+# CONFIG_CMA_SIZE_SEL_MIN is not set
+# CONFIG_CMA_SIZE_SEL_MAX is not set
+CONFIG_CMA_ALIGNMENT=8
+
+#
+# Bus devices
+#
+CONFIG_CONNECTOR=y
+CONFIG_PROC_EVENTS=y
+CONFIG_MTD=y
+# CONFIG_MTD_TESTS is not set
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+CONFIG_MTD_OF_PARTS=y
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_SM_FTL is not set
+CONFIG_MTD_OOPS=y
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_PHYSMAP_OF is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SST25L is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOCG3 is not set
+CONFIG_MTD_NAND_IDS=y
+CONFIG_MTD_NAND_ECC=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_ECC_BCH is not set
+# CONFIG_MTD_SM_COMMON is not set
+# CONFIG_MTD_NAND_DENALI is not set
+# CONFIG_MTD_NAND_GPIO is not set
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_DOCG4 is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# LPDDR flash memory drivers
+#
+# CONFIG_MTD_LPDDR is not set
+# CONFIG_MTD_UBI is not set
+CONFIG_DTC=y
+CONFIG_OF=y
+
+#
+# Device Tree and Open Firmware support
+#
+CONFIG_PROC_DEVICETREE=y
+# CONFIG_OF_SELFTEST is not set
+CONFIG_OF_FLATTREE=y
+CONFIG_OF_EARLY_FLATTREE=y
+CONFIG_OF_ADDRESS=y
+CONFIG_OF_IRQ=y
+CONFIG_OF_NET=y
+CONFIG_OF_MDIO=y
+CONFIG_OF_MTD=y
+CONFIG_OF_RESERVED_MEM=y
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_NULL_BLK is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_LOOP_MIN_COUNT=8
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_DRBD is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_BLK_DEV_RBD is not set
+
+#
+# Misc devices
+#
+# CONFIG_SENSORS_LIS3LV02D is not set
+# CONFIG_AD525X_DPOT is not set
+# CONFIG_ATMEL_PWM is not set
+# CONFIG_DUMMY_IRQ is not set
+# CONFIG_ICS932S401 is not set
+# CONFIG_ATMEL_SSC is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_APDS9802ALS is not set
+# CONFIG_ISL29003 is not set
+# CONFIG_ISL29020 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_SENSORS_BH1780 is not set
+# CONFIG_SENSORS_BH1770 is not set
+# CONFIG_SENSORS_APDS990X is not set
+# CONFIG_HMC6352 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_TI_DAC7512 is not set
+# CONFIG_UID_STAT is not set
+# CONFIG_BMP085_I2C is not set
+# CONFIG_BMP085_SPI is not set
+# CONFIG_USB_SWITCH_FSA9480 is not set
+# CONFIG_LATTICE_ECP3_CONFIG is not set
+# CONFIG_SRAM is not set
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_AT24 is not set
+# CONFIG_EEPROM_AT25 is not set
+# CONFIG_EEPROM_LEGACY is not set
+# CONFIG_EEPROM_MAX6875 is not set
+CONFIG_EEPROM_93CX6=m
+# CONFIG_EEPROM_93XX46 is not set
+
+#
+# Texas Instruments shared transport line discipline
+#
+# CONFIG_TI_ST is not set
+# CONFIG_SENSORS_LIS3_SPI is not set
+# CONFIG_SENSORS_LIS3_I2C is not set
+
+#
+# Altera FPGA firmware download module
+#
+# CONFIG_ALTERA_STAPL is not set
+
+#
+# Intel MIC Host Driver
+#
+
+#
+# Intel MIC Card Driver
+#
+
+#
+# SCSI device support
+#
+CONFIG_SCSI_MOD=y
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_SCSI_PROC_FS is not set
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=y
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+CONFIG_SCSI_ISCSI_ATTRS=y
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+CONFIG_ISCSI_TCP=y
+CONFIG_ISCSI_BOOT_SYSFS=y
+# CONFIG_SCSI_UFSHCD is not set
+# CONFIG_LIBFC is not set
+# CONFIG_LIBFCOE is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_SCSI_OSD_INITIATOR is not set
+CONFIG_HAVE_PATA_PLATFORM=y
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+# CONFIG_TARGET_CORE is not set
+CONFIG_NETDEVICES=y
+CONFIG_MII=y
+CONFIG_NET_CORE=y
+# CONFIG_BONDING is not set
+# CONFIG_DUMMY is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_NET_TEAM is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_VXLAN is not set
+CONFIG_NETCONSOLE=y
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
+CONFIG_TUN=y
+# CONFIG_VETH is not set
+CONFIG_NLMON=m
+
+#
+# CAIF transport drivers
+#
+
+#
+# Distributed Switch Architecture drivers
+#
+# CONFIG_NET_DSA_MV88E6XXX is not set
+# CONFIG_NET_DSA_MV88E6060 is not set
+# CONFIG_NET_DSA_MV88E6XXX_NEED_PPU is not set
+# CONFIG_NET_DSA_MV88E6131 is not set
+# CONFIG_NET_DSA_MV88E6123_61_65 is not set
+CONFIG_ETHERNET=y
+CONFIG_NET_VENDOR_ARC=y
+# CONFIG_ARC_EMAC is not set
+# CONFIG_NET_CADENCE is not set
+# CONFIG_NET_VENDOR_BROADCOM is not set
+# CONFIG_NET_CALXEDA_XGMAC is not set
+# CONFIG_DNET is not set
+# CONFIG_NET_VENDOR_INTEL is not set
+# CONFIG_NET_VENDOR_MARVELL is not set
+# CONFIG_NET_VENDOR_MICREL is not set
+# CONFIG_NET_VENDOR_MICROCHIP is not set
+# CONFIG_NET_VENDOR_NATSEMI is not set
+# CONFIG_ETHOC is not set
+# CONFIG_SH_ETH is not set
+# CONFIG_NET_VENDOR_SEEQ is not set
+# CONFIG_NET_VENDOR_SMSC is not set
+CONFIG_NET_VENDOR_STMICRO=y
+CONFIG_STMMAC_ETH=y
+CONFIG_STMMAC_PLATFORM=y
+CONFIG_DWMAC_MESON=y
+CONFIG_STMMAC_DEBUG_FS=y
+CONFIG_STMMAC_DA=y
+CONFIG_NET_VENDOR_VIA=y
+CONFIG_NET_VENDOR_WIZNET=y
+# CONFIG_WIZNET_W5100 is not set
+# CONFIG_WIZNET_W5300 is not set
+
+#
+# MII PHY device drivers
+#
+# CONFIG_AT803X_PHY is not set
+# CONFIG_AMD_PHY is not set
+# CONFIG_MARVELL_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_CICADA_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+# CONFIG_SMSC_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+# CONFIG_BCM87XX_PHY is not set
+# CONFIG_ICPLUS_PHY is not set
+# CONFIG_REALTEK_PHY is not set
+# CONFIG_NATIONAL_PHY is not set
+# CONFIG_STE10XP is not set
+# CONFIG_LSI_ET1011C_PHY is not set
+# CONFIG_MICREL_PHY is not set
+# CONFIG_FIXED_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
+# CONFIG_MDIO_BUS_MUX_GPIO is not set
+# CONFIG_MDIO_BUS_MUX_MMIOREG is not set
+# CONFIG_MICREL_KS8995MA is not set
+CONFIG_PPP=y
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_DEFLATE=m
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_MPPE=m
+# CONFIG_PPP_MULTILINK is not set
+CONFIG_PPPOE=m
+CONFIG_PPPOLAC=y
+CONFIG_PPPOPNS=y
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=y
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+CONFIG_USB_RTL8152=m
+CONFIG_USB_USBNET=y
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_AX88179_178A=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_CDC_EEM is not set
+# CONFIG_USB_NET_CDC_NCM is not set
+# CONFIG_USB_NET_HUAWEI_CDC_NCM is not set
+# CONFIG_USB_NET_CDC_MBIM is not set
+CONFIG_USB_NET_DM9601=m
+CONFIG_USB_NET_SR9700=m
+CONFIG_USB_NET_SR9800=m
+CONFIG_USB_NET_SMSC75XX=m
+CONFIG_USB_NET_SMSC95XX=y
+# CONFIG_USB_NET_GL620A is not set
+# CONFIG_USB_NET_NET1080 is not set
+# CONFIG_USB_NET_PLUSB is not set
+CONFIG_USB_NET_MCS7830=m
+CONFIG_USB_NET_RNDIS_HOST=m
+# CONFIG_USB_NET_CDC_SUBSET is not set
+# CONFIG_USB_NET_ZAURUS is not set
+# CONFIG_USB_NET_CX82310_ETH is not set
+# CONFIG_USB_NET_KALMIA is not set
+# CONFIG_USB_NET_QMI_WWAN is not set
+# CONFIG_USB_NET_INT51X1 is not set
+# CONFIG_USB_IPHETH is not set
+# CONFIG_USB_SIERRA_NET is not set
+# CONFIG_USB_VL600 is not set
+CONFIG_WLAN=y
+# CONFIG_LIBERTAS_THINFIRM is not set
+# CONFIG_AT76C50X_USB is not set
+CONFIG_USB_ZD1201=m
+CONFIG_USB_NET_RNDIS_WLAN=m
+CONFIG_RTL8187=m
+CONFIG_RTL8187_LEDS=y
+# CONFIG_MAC80211_HWSIM is not set
+# CONFIG_WIFI_CONTROL_FUNC is not set
+CONFIG_ATH_COMMON=m
+CONFIG_ATH_CARDS=m
+# CONFIG_ATH_DEBUG is not set
+CONFIG_ATH9K_HW=m
+CONFIG_ATH9K_COMMON=m
+CONFIG_ATH9K_BTCOEX_SUPPORT=y
+CONFIG_ATH9K=m
+CONFIG_ATH9K_AHB=y
+# CONFIG_ATH9K_DEBUGFS is not set
+# CONFIG_ATH9K_WOW is not set
+# CONFIG_ATH9K_LEGACY_RATE_CONTROL is not set
+CONFIG_ATH9K_HTC=m
+# CONFIG_ATH9K_HTC_DEBUGFS is not set
+CONFIG_CARL9170=m
+CONFIG_CARL9170_LEDS=y
+CONFIG_CARL9170_WPC=y
+CONFIG_CARL9170_HWRNG=y
+CONFIG_ATH6KL=m
+# CONFIG_ATH6KL_SDIO is not set
+CONFIG_ATH6KL_USB=m
+# CONFIG_ATH6KL_DEBUG is not set
+# CONFIG_ATH6KL_TRACING is not set
+CONFIG_AR5523=m
+# CONFIG_ATH10K is not set
+# CONFIG_WCN36XX is not set
+CONFIG_B43=m
+CONFIG_B43_SSB=y
+# CONFIG_B43_SDIO is not set
+CONFIG_B43_PIO=y
+CONFIG_B43_PHY_N=y
+CONFIG_B43_PHY_LP=y
+CONFIG_B43_LEDS=y
+CONFIG_B43_HWRNG=y
+# CONFIG_B43_DEBUG is not set
+# CONFIG_B43LEGACY is not set
+CONFIG_BRCMUTIL=m
+# CONFIG_BRCMSMAC is not set
+CONFIG_BRCMFMAC=m
+# CONFIG_BRCMFMAC_SDIO is not set
+CONFIG_BRCMFMAC_USB=y
+# CONFIG_BRCM_TRACING is not set
+# CONFIG_BRCMDBG is not set
+# CONFIG_HOSTAP is not set
+# CONFIG_LIBERTAS is not set
+CONFIG_P54_COMMON=m
+CONFIG_P54_USB=m
+# CONFIG_P54_SPI is not set
+CONFIG_P54_LEDS=y
+CONFIG_RT2X00=m
+CONFIG_RT2500USB=m
+CONFIG_RT73USB=m
+CONFIG_RT2800USB=m
+CONFIG_RT2800USB_RT33XX=y
+CONFIG_RT2800USB_RT35XX=y
+CONFIG_RT2800USB_RT3573=y
+CONFIG_RT2800USB_RT53XX=y
+CONFIG_RT2800USB_RT55XX=y
+CONFIG_RT2800USB_UNKNOWN=y
+CONFIG_RT2800_LIB=m
+CONFIG_RT2X00_LIB_USB=m
+CONFIG_RT2X00_LIB=m
+CONFIG_RT2X00_LIB_FIRMWARE=y
+CONFIG_RT2X00_LIB_CRYPTO=y
+CONFIG_RT2X00_LIB_LEDS=y
+# CONFIG_RT2X00_DEBUG is not set
+# CONFIG_WL_TI is not set
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+# CONFIG_MWIFIEX is not set
+# CONFIG_CW1200 is not set
+# CONFIG_RTL8821AU is not set
+# CONFIG_RTL8192CU is not set
+
+#
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+#
+# CONFIG_WAN is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+CONFIG_INPUT_FF_MEMLESS=y
+# CONFIG_INPUT_POLLDEV is not set
+# CONFIG_INPUT_SPARSEKMAP is not set
+# CONFIG_INPUT_MATRIXKMAP is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+CONFIG_INPUT_JOYDEV=y
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_KEYRESET is not set
+# CONFIG_INPUT_KEYCOMBO is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+CONFIG_INPUT_JOYSTICK=y
+# CONFIG_JOYSTICK_ANALOG is not set
+# CONFIG_JOYSTICK_A3D is not set
+# CONFIG_JOYSTICK_ADI is not set
+# CONFIG_JOYSTICK_COBRA is not set
+# CONFIG_JOYSTICK_GF2K is not set
+# CONFIG_JOYSTICK_GRIP is not set
+# CONFIG_JOYSTICK_GRIP_MP is not set
+# CONFIG_JOYSTICK_GUILLEMOT is not set
+# CONFIG_JOYSTICK_INTERACT is not set
+# CONFIG_JOYSTICK_SIDEWINDER is not set
+# CONFIG_JOYSTICK_TMDC is not set
+# CONFIG_JOYSTICK_IFORCE is not set
+# CONFIG_JOYSTICK_WARRIOR is not set
+# CONFIG_JOYSTICK_MAGELLAN is not set
+# CONFIG_JOYSTICK_SPACEORB is not set
+# CONFIG_JOYSTICK_SPACEBALL is not set
+# CONFIG_JOYSTICK_STINGER is not set
+# CONFIG_JOYSTICK_TWIDJOY is not set
+# CONFIG_JOYSTICK_ZHENHUA is not set
+# CONFIG_JOYSTICK_AS5011 is not set
+# CONFIG_JOYSTICK_JOYDUMP is not set
+CONFIG_JOYSTICK_XPAD=m
+CONFIG_JOYSTICK_XPAD_FF=y
+CONFIG_JOYSTICK_XPAD_LEDS=y
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_AD714X is not set
+# CONFIG_INPUT_BMA150 is not set
+# CONFIG_INPUT_MMA8450 is not set
+# CONFIG_INPUT_MPU3050 is not set
+# CONFIG_INPUT_GP2A is not set
+# CONFIG_INPUT_GPIO_BEEPER is not set
+# CONFIG_INPUT_GPIO_TILT_POLLED is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYCHORD is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_KXTJ9 is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+# CONFIG_INPUT_CM109 is not set
+CONFIG_INPUT_UINPUT=y
+# CONFIG_INPUT_GPIO is not set
+# CONFIG_INPUT_PCF8574 is not set
+# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
+# CONFIG_INPUT_ADXL34X is not set
+# CONFIG_INPUT_IMS_PCU is not set
+# CONFIG_INPUT_CMA3000 is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_TTY=y
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_VT_CONSOLE_SLEEP=y
+CONFIG_HW_CONSOLE=y
+CONFIG_VT_HW_CONSOLE_BINDING=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+# CONFIG_SERIAL_NONSTANDARD is not set
+# CONFIG_N_GSM is not set
+# CONFIG_TRACE_SINK is not set
+CONFIG_DEVMEM=y
+CONFIG_DEVKMEM=y
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+# CONFIG_SERIAL_AMBA_PL010 is not set
+# CONFIG_SERIAL_AMBA_PL011 is not set
+# CONFIG_SERIAL_MAX3100 is not set
+# CONFIG_SERIAL_MAX310X is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_SCCNXP is not set
+# CONFIG_SERIAL_TIMBERDALE is not set
+# CONFIG_SERIAL_ALTERA_JTAGUART is not set
+# CONFIG_SERIAL_ALTERA_UART is not set
+# CONFIG_SERIAL_IFX6X60 is not set
+# CONFIG_SERIAL_XILINX_PS_UART is not set
+# CONFIG_SERIAL_ARC is not set
+# CONFIG_SERIAL_FSL_LPUART is not set
+CONFIG_TTY_PRINTK=y
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_HW_RANDOM_TIMERIOMEM is not set
+# CONFIG_HW_RANDOM_ATMEL is not set
+CONFIG_HW_RANDOM_MESON=y
+# CONFIG_HW_RANDOM_EXYNOS is not set
+# CONFIG_R3964 is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_COMPAT=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_MUX=y
+
+#
+# Multiplexer I2C Chip support
+#
+# CONFIG_I2C_ARB_GPIO_CHALLENGE is not set
+# CONFIG_I2C_MUX_GPIO is not set
+# CONFIG_I2C_MUX_PCA9541 is not set
+# CONFIG_I2C_MUX_PCA954x is not set
+# CONFIG_I2C_MUX_PINCTRL is not set
+CONFIG_I2C_HELPER_AUTO=y
+CONFIG_I2C_ALGOBIT=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_CBUS_GPIO is not set
+# CONFIG_I2C_DESIGNWARE_PLATFORM is not set
+# CONFIG_I2C_GPIO is not set
+# CONFIG_I2C_NOMADIK is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PCA_PLATFORM is not set
+# CONFIG_I2C_PXA_PCI is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_XILINX is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_DIOLAN_U2C is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_ROBOTFUZZ_OSIF is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_ALTERA is not set
+CONFIG_SPI_BITBANG=y
+CONFIG_SPI_GPIO=y
+# CONFIG_SPI_FSL_SPI is not set
+# CONFIG_SPI_OC_TINY is not set
+# CONFIG_SPI_PL022 is not set
+# CONFIG_SPI_PXA2XX_PCI is not set
+# CONFIG_SPI_SC18IS602 is not set
+# CONFIG_SPI_XCOMM is not set
+# CONFIG_SPI_XILINX is not set
+# CONFIG_SPI_DESIGNWARE is not set
+
+#
+# SPI Protocol Masters
+#
+CONFIG_SPI_SPIDEV=y
+# CONFIG_SPI_TLE62X0 is not set
+# CONFIG_HSI is not set
+
+#
+# PPS support
+#
+CONFIG_PPS=y
+# CONFIG_PPS_DEBUG is not set
+
+#
+# PPS clients support
+#
+# CONFIG_PPS_CLIENT_KTIMER is not set
+# CONFIG_PPS_CLIENT_LDISC is not set
+# CONFIG_PPS_CLIENT_GPIO is not set
+
+#
+# PPS generators support
+#
+
+#
+# PTP clock support
+#
+CONFIG_PTP_1588_CLOCK=y
+
+#
+# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks.
+#
+CONFIG_PINCTRL=y
+
+#
+# Pin controllers
+#
+CONFIG_PINMUX=y
+CONFIG_PINCONF=y
+# CONFIG_DEBUG_PINCTRL is not set
+# CONFIG_PINCTRL_CAPRI is not set
+# CONFIG_PINCTRL_MSM8X74 is not set
+# CONFIG_PINCTRL_SINGLE is not set
+CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+CONFIG_GPIO_DEVRES=y
+CONFIG_OF_GPIO=y
+# CONFIG_DEBUG_GPIO is not set
+CONFIG_GPIO_SYSFS=y
+
+#
+# Memory mapped GPIO drivers:
+#
+# CONFIG_GPIO_GENERIC_PLATFORM is not set
+# CONFIG_GPIO_PL061 is not set
+# CONFIG_GPIO_SCH311X is not set
+# CONFIG_GPIO_TS5500 is not set
+# CONFIG_GPIO_GRGPIO is not set
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX7300 is not set
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+# CONFIG_GPIO_SX150X is not set
+# CONFIG_GPIO_ADP5588 is not set
+# CONFIG_GPIO_ADNP is not set
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_GPIO_MC33880 is not set
+# CONFIG_GPIO_74X164 is not set
+
+#
+# AC97 GPIO expanders:
+#
+
+#
+# LPC GPIO expanders:
+#
+
+#
+# MODULbus GPIO expanders:
+#
+# CONFIG_GPIO_BCM_KONA is not set
+
+#
+# USB GPIO expanders:
+#
+# CONFIG_W1 is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+# CONFIG_PDA_POWER is not set
+# CONFIG_TEST_POWER is not set
+# CONFIG_BATTERY_DS2780 is not set
+# CONFIG_BATTERY_DS2781 is not set
+# CONFIG_BATTERY_DS2782 is not set
+# CONFIG_BATTERY_SBS is not set
+# CONFIG_BATTERY_BQ27x00 is not set
+# CONFIG_BATTERY_MAX17040 is not set
+# CONFIG_BATTERY_MAX17042 is not set
+# CONFIG_CHARGER_ISP1704 is not set
+# CONFIG_CHARGER_MAX8903 is not set
+# CONFIG_CHARGER_LP8727 is not set
+# CONFIG_CHARGER_GPIO is not set
+# CONFIG_CHARGER_MANAGER is not set
+# CONFIG_CHARGER_BQ2415X is not set
+# CONFIG_CHARGER_BQ24190 is not set
+# CONFIG_CHARGER_BQ24735 is not set
+# CONFIG_CHARGER_SMB347 is not set
+CONFIG_POWER_RESET=y
+# CONFIG_POWER_RESET_GPIO is not set
+CONFIG_POWER_RESET_VEXPRESS=y
+# CONFIG_POWER_RESET_XGENE is not set
+# CONFIG_POWER_AVS is not set
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Native drivers
+#
+# CONFIG_SENSORS_AD7314 is not set
+# CONFIG_SENSORS_AD7414 is not set
+# CONFIG_SENSORS_AD7418 is not set
+# CONFIG_SENSORS_ADCXX is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1029 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ADT7310 is not set
+# CONFIG_SENSORS_ADT7410 is not set
+# CONFIG_SENSORS_ADT7411 is not set
+# CONFIG_SENSORS_ADT7462 is not set
+# CONFIG_SENSORS_ADT7470 is not set
+# CONFIG_SENSORS_ADT7475 is not set
+# CONFIG_SENSORS_ASC7621 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS620 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_F71882FG is not set
+# CONFIG_SENSORS_F75375S is not set
+# CONFIG_SENSORS_G760A is not set
+# CONFIG_SENSORS_G762 is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_GPIO_FAN is not set
+# CONFIG_SENSORS_HIH6130 is not set
+# CONFIG_SENSORS_HTU21 is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_JC42 is not set
+# CONFIG_SENSORS_LINEAGE is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM70 is not set
+# CONFIG_SENSORS_LM73 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_LM93 is not set
+# CONFIG_SENSORS_LTC4151 is not set
+# CONFIG_SENSORS_LTC4215 is not set
+# CONFIG_SENSORS_LTC4245 is not set
+# CONFIG_SENSORS_LTC4261 is not set
+# CONFIG_SENSORS_LM95234 is not set
+# CONFIG_SENSORS_LM95241 is not set
+# CONFIG_SENSORS_LM95245 is not set
+# CONFIG_SENSORS_MAX1111 is not set
+# CONFIG_SENSORS_MAX16065 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_MAX1668 is not set
+# CONFIG_SENSORS_MAX197 is not set
+# CONFIG_SENSORS_MAX6639 is not set
+# CONFIG_SENSORS_MAX6642 is not set
+# CONFIG_SENSORS_MAX6650 is not set
+# CONFIG_SENSORS_MAX6697 is not set
+# CONFIG_SENSORS_MCP3021 is not set
+# CONFIG_SENSORS_NCT6775 is not set
+# CONFIG_SENSORS_NTC_THERMISTOR is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_PMBUS is not set
+# CONFIG_SENSORS_SHT15 is not set
+# CONFIG_SENSORS_SHT21 is not set
+# CONFIG_SENSORS_SMM665 is not set
+# CONFIG_SENSORS_DME1737 is not set
+# CONFIG_SENSORS_EMC1403 is not set
+# CONFIG_SENSORS_EMC2103 is not set
+# CONFIG_SENSORS_EMC6W201 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_SCH56XX_COMMON is not set
+# CONFIG_SENSORS_ADS1015 is not set
+# CONFIG_SENSORS_ADS7828 is not set
+# CONFIG_SENSORS_ADS7871 is not set
+# CONFIG_SENSORS_AMC6821 is not set
+# CONFIG_SENSORS_INA209 is not set
+# CONFIG_SENSORS_INA2XX is not set
+# CONFIG_SENSORS_THMC50 is not set
+# CONFIG_SENSORS_TMP102 is not set
+# CONFIG_SENSORS_TMP401 is not set
+# CONFIG_SENSORS_TMP421 is not set
+# CONFIG_SENSORS_VEXPRESS is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83795 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83L786NG is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+CONFIG_THERMAL=y
+CONFIG_THERMAL_HWMON=y
+CONFIG_THERMAL_OF=y
+CONFIG_THERMAL_WRITABLE_TRIPS=y
+CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
+# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
+# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
+# CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR is not set
+# CONFIG_THERMAL_GOV_FAIR_SHARE is not set
+CONFIG_THERMAL_GOV_STEP_WISE=y
+# CONFIG_THERMAL_GOV_USER_SPACE is not set
+CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y
+CONFIG_CPU_THERMAL=y
+CONFIG_CPUCORE_THERMAL=y
+CONFIG_GPU_THERMAL=y
+CONFIG_GPUCORE_THERMAL=y
+# CONFIG_THERMAL_EMULATION is not set
+
+#
+# Texas Instruments thermal drivers
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB=m
+CONFIG_SSB_BLOCKIO=y
+CONFIG_SSB_SDIOHOST_POSSIBLE=y
+# CONFIG_SSB_SDIOHOST is not set
+# CONFIG_SSB_SILENT is not set
+# CONFIG_SSB_DEBUG is not set
+# CONFIG_SSB_DRIVER_GPIO is not set
+CONFIG_BCMA_POSSIBLE=y
+
+#
+# Broadcom specific AMBA
+#
+# CONFIG_BCMA is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_AS3711 is not set
+# CONFIG_MFD_AS3722 is not set
+# CONFIG_PMIC_ADP5520 is not set
+# CONFIG_MFD_AAT2870_CORE is not set
+# CONFIG_MFD_CROS_EC is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_MFD_DA9052_SPI is not set
+# CONFIG_MFD_DA9052_I2C is not set
+# CONFIG_MFD_DA9055 is not set
+# CONFIG_MFD_DA9063 is not set
+# CONFIG_MFD_MC13XXX_SPI is not set
+# CONFIG_MFD_MC13XXX_I2C is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_I2CPLD is not set
+# CONFIG_MFD_KEMPLD is not set
+# CONFIG_MFD_88PM800 is not set
+# CONFIG_MFD_88PM805 is not set
+# CONFIG_MFD_88PM860X is not set
+# CONFIG_MFD_MAX14577 is not set
+# CONFIG_MFD_MAX77686 is not set
+# CONFIG_MFD_MAX77693 is not set
+# CONFIG_MFD_MAX8907 is not set
+# CONFIG_MFD_MAX8925 is not set
+# CONFIG_MFD_MAX8997 is not set
+# CONFIG_MFD_MAX8998 is not set
+# CONFIG_EZX_PCAP is not set
+# CONFIG_MFD_VIPERBOARD is not set
+# CONFIG_MFD_RETU is not set
+# CONFIG_MFD_PCF50633 is not set
+# CONFIG_MFD_RC5T583 is not set
+# CONFIG_MFD_SEC_CORE is not set
+# CONFIG_MFD_SI476X_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_SMSC is not set
+# CONFIG_ABX500_CORE is not set
+# CONFIG_MFD_STMPE is not set
+# CONFIG_MFD_SYSCON is not set
+# CONFIG_MFD_TI_AM335X_TSCADC is not set
+# CONFIG_MFD_LP3943 is not set
+# CONFIG_MFD_LP8788 is not set
+# CONFIG_MFD_PALMAS is not set
+# CONFIG_TPS6105X is not set
+# CONFIG_TPS65010 is not set
+# CONFIG_TPS6507X is not set
+# CONFIG_MFD_TPS65090 is not set
+# CONFIG_MFD_TPS65217 is not set
+# CONFIG_MFD_TPS6586X is not set
+# CONFIG_MFD_TPS65910 is not set
+# CONFIG_MFD_TPS65912 is not set
+# CONFIG_MFD_TPS65912_I2C is not set
+# CONFIG_MFD_TPS65912_SPI is not set
+# CONFIG_MFD_TPS80031 is not set
+# CONFIG_TWL4030_CORE is not set
+# CONFIG_TWL6040_CORE is not set
+# CONFIG_MFD_WL1273_CORE is not set
+# CONFIG_MFD_LM3533 is not set
+# CONFIG_MFD_TC3589X is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_ARIZONA_I2C is not set
+# CONFIG_MFD_ARIZONA_SPI is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM831X_I2C is not set
+# CONFIG_MFD_WM831X_SPI is not set
+# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_MFD_WM8994 is not set
+CONFIG_VEXPRESS_CONFIG=y
+CONFIG_REGULATOR=y
+# CONFIG_REGULATOR_DEBUG is not set
+# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
+# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
+# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
+# CONFIG_REGULATOR_ACT8865 is not set
+# CONFIG_REGULATOR_AD5398 is not set
+# CONFIG_REGULATOR_DA9210 is not set
+# CONFIG_REGULATOR_FAN53555 is not set
+# CONFIG_REGULATOR_GPIO is not set
+# CONFIG_REGULATOR_ISL6271A is not set
+# CONFIG_REGULATOR_LP3971 is not set
+# CONFIG_REGULATOR_LP3972 is not set
+# CONFIG_REGULATOR_LP872X is not set
+# CONFIG_REGULATOR_LP8755 is not set
+# CONFIG_REGULATOR_MAX1586 is not set
+# CONFIG_REGULATOR_MAX8649 is not set
+# CONFIG_REGULATOR_MAX8660 is not set
+# CONFIG_REGULATOR_MAX8952 is not set
+# CONFIG_REGULATOR_MAX8973 is not set
+# CONFIG_REGULATOR_PFUZE100 is not set
+# CONFIG_REGULATOR_TPS51632 is not set
+# CONFIG_REGULATOR_TPS62360 is not set
+# CONFIG_REGULATOR_TPS65023 is not set
+# CONFIG_REGULATOR_TPS6507X is not set
+# CONFIG_REGULATOR_TPS6524X is not set
+# CONFIG_REGULATOR_VEXPRESS is not set
+CONFIG_MEDIA_SUPPORT=y
+
+#
+# Multimedia core support
+#
+CONFIG_MEDIA_CAMERA_SUPPORT=y
+CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
+CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
+CONFIG_MEDIA_RADIO_SUPPORT=y
+CONFIG_MEDIA_RC_SUPPORT=y
+# CONFIG_MEDIA_CONTROLLER is not set
+CONFIG_VIDEO_DEV=y
+CONFIG_VIDEO_V4L2=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+CONFIG_VIDEO_TUNER=m
+CONFIG_VIDEOBUF_GEN=y
+CONFIG_VIDEOBUF_VMALLOC=m
+CONFIG_VIDEOBUF_RESOURCE=y
+CONFIG_VIDEOBUF_DVB=m
+CONFIG_VIDEOBUF2_CORE=y
+CONFIG_VIDEOBUF2_MEMOPS=y
+CONFIG_DVB_CORE=y
+CONFIG_DVB_NET=y
+CONFIG_TTPCI_EEPROM=m
+CONFIG_DVB_MAX_ADAPTERS=8
+# CONFIG_DVB_DYNAMIC_MINORS is not set
+
+#
+# Media drivers
+#
+CONFIG_RC_CORE=y
+CONFIG_RC_MAP=m
+CONFIG_RC_DECODERS=y
+CONFIG_LIRC=m
+CONFIG_IR_LIRC_CODEC=m
+CONFIG_IR_NEC_DECODER=m
+CONFIG_IR_RC5_DECODER=m
+CONFIG_IR_RC6_DECODER=m
+CONFIG_IR_JVC_DECODER=m
+CONFIG_IR_SONY_DECODER=m
+CONFIG_IR_RC5_SZ_DECODER=m
+CONFIG_IR_SANYO_DECODER=m
+CONFIG_IR_MCE_KBD_DECODER=m
+CONFIG_RC_DEVICES=y
+CONFIG_RC_ATI_REMOTE=m
+CONFIG_IR_IMON=m
+CONFIG_IR_MCEUSB=m
+CONFIG_IR_MESON=m
+CONFIG_IR_REDRAT3=m
+CONFIG_IR_STREAMZAP=m
+CONFIG_IR_IGUANA=m
+CONFIG_IR_TTUSBIR=m
+# CONFIG_RC_LOOPBACK is not set
+CONFIG_IR_GPIO_CIR=m
+CONFIG_MEDIA_USB_SUPPORT=y
+
+#
+# Webcam devices
+#
+# CONFIG_USB_VIDEO_CLASS is not set
+# CONFIG_USB_GSPCA is not set
+# CONFIG_USB_PWC is not set
+# CONFIG_VIDEO_CPIA2 is not set
+# CONFIG_USB_ZR364XX is not set
+# CONFIG_USB_STKWEBCAM is not set
+# CONFIG_USB_S2255 is not set
+# CONFIG_VIDEO_USBTV is not set
+
+#
+# Analog TV USB devices
+#
+CONFIG_VIDEO_PVRUSB2=m
+CONFIG_VIDEO_PVRUSB2_SYSFS=y
+CONFIG_VIDEO_PVRUSB2_DVB=y
+# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
+# CONFIG_VIDEO_HDPVR is not set
+# CONFIG_VIDEO_TLG2300 is not set
+# CONFIG_VIDEO_USBVISION is not set
+# CONFIG_VIDEO_STK1160_COMMON is not set
+
+#
+# Analog/digital TV USB devices
+#
+CONFIG_VIDEO_AU0828=m
+CONFIG_VIDEO_AU0828_V4L2=y
+CONFIG_VIDEO_CX231XX=m
+CONFIG_VIDEO_CX231XX_RC=y
+# CONFIG_VIDEO_CX231XX_ALSA is not set
+CONFIG_VIDEO_CX231XX_DVB=m
+CONFIG_VIDEO_TM6000=m
+# CONFIG_VIDEO_TM6000_ALSA is not set
+CONFIG_VIDEO_TM6000_DVB=m
+
+#
+# Digital TV USB devices
+#
+CONFIG_DVB_USB=m
+# CONFIG_DVB_USB_DEBUG is not set
+# CONFIG_DVB_USB_A800 is not set
+CONFIG_DVB_USB_DIBUSB_MB=m
+CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y
+CONFIG_DVB_USB_DIBUSB_MC=m
+CONFIG_DVB_USB_DIB0700=m
+# CONFIG_DVB_USB_UMT_010 is not set
+CONFIG_DVB_USB_CXUSB=m
+# CONFIG_DVB_USB_M920X is not set
+# CONFIG_DVB_USB_DIGITV is not set
+CONFIG_DVB_USB_VP7045=m
+# CONFIG_DVB_USB_VP702X is not set
+# CONFIG_DVB_USB_GP8PSK is not set
+CONFIG_DVB_USB_NOVA_T_USB2=m
+CONFIG_DVB_USB_TTUSB2=m
+CONFIG_DVB_USB_DTT200U=m
+CONFIG_DVB_USB_OPERA1=m
+CONFIG_DVB_USB_AF9005=m
+CONFIG_DVB_USB_AF9005_REMOTE=m
+CONFIG_DVB_USB_PCTV452E=m
+CONFIG_DVB_USB_DW2102=m
+CONFIG_DVB_USB_CINERGY_T2=m
+CONFIG_DVB_USB_DTV5100=m
+# CONFIG_DVB_USB_FRIIO is not set
+CONFIG_DVB_USB_AZ6027=m
+CONFIG_DVB_USB_TECHNISAT_USB2=m
+CONFIG_DVB_USB_V2=m
+CONFIG_DVB_USB_AF9015=m
+CONFIG_DVB_USB_AF9035=m
+CONFIG_DVB_USB_ANYSEE=m
+# CONFIG_DVB_USB_AU6610 is not set
+CONFIG_DVB_USB_AZ6007=m
+CONFIG_DVB_USB_CE6230=m
+CONFIG_DVB_USB_EC168=m
+CONFIG_DVB_USB_GL861=m
+CONFIG_DVB_USB_IT913X=m
+CONFIG_DVB_USB_LME2510=m
+CONFIG_DVB_USB_MXL111SF=m
+CONFIG_DVB_USB_RTL28XXU=m
+CONFIG_SMS_USB_DRV=m
+CONFIG_DVB_B2C2_FLEXCOP_USB=m
+# CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG is not set
+
+#
+# Webcam, TV (analog/digital) USB devices
+#
+CONFIG_VIDEO_EM28XX=m
+# CONFIG_VIDEO_EM28XX_V4L2 is not set
+# CONFIG_VIDEO_EM28XX_ALSA is not set
+CONFIG_VIDEO_EM28XX_DVB=m
+CONFIG_VIDEO_EM28XX_RC=m
+# CONFIG_V4L_PLATFORM_DRIVERS is not set
+# CONFIG_V4L_MEM2MEM_DRIVERS is not set
+# CONFIG_V4L_TEST_DRIVERS is not set
+
+#
+# Supported MMC/SDIO adapters
+#
+CONFIG_SMS_SDIO_DRV=m
+# CONFIG_RADIO_ADAPTERS is not set
+CONFIG_MEDIA_COMMON_OPTIONS=y
+
+#
+# common driver options
+#
+CONFIG_VIDEO_CX2341X=m
+CONFIG_VIDEO_TVEEPROM=m
+CONFIG_CYPRESS_FIRMWARE=m
+CONFIG_DVB_B2C2_FLEXCOP=m
+CONFIG_SMS_SIANO_MDTV=m
+CONFIG_SMS_SIANO_RC=y
+# CONFIG_SMS_SIANO_DEBUGFS is not set
+
+#
+# Media ancillary drivers (tuners, sensors, i2c, frontends)
+#
+CONFIG_MEDIA_SUBDRV_AUTOSELECT=y
+CONFIG_MEDIA_ATTACH=y
+CONFIG_VIDEO_IR_I2C=y
+
+#
+# Audio decoders, processors and mixers
+#
+CONFIG_VIDEO_MSP3400=m
+CONFIG_VIDEO_CS53L32A=m
+CONFIG_VIDEO_WM8775=m
+
+#
+# RDS decoders
+#
+
+#
+# Video decoders
+#
+CONFIG_VIDEO_SAA711X=m
+
+#
+# Video and audio decoders
+#
+CONFIG_VIDEO_CX25840=m
+
+#
+# Video encoders
+#
+
+#
+# Camera sensor devices
+#
+
+#
+# Flash devices
+#
+
+#
+# Video improvement chips
+#
+
+#
+# Audio/Video compression chips
+#
+
+#
+# Miscellaneous helper chips
+#
+
+#
+# Sensors used on soc_camera driver
+#
+CONFIG_MEDIA_TUNER=y
+CONFIG_MEDIA_TUNER_SIMPLE=y
+CONFIG_MEDIA_TUNER_TDA8290=y
+CONFIG_MEDIA_TUNER_TDA827X=y
+CONFIG_MEDIA_TUNER_TDA18271=y
+CONFIG_MEDIA_TUNER_TDA9887=y
+CONFIG_MEDIA_TUNER_TEA5761=y
+CONFIG_MEDIA_TUNER_TEA5767=y
+CONFIG_MEDIA_TUNER_MT20XX=y
+CONFIG_MEDIA_TUNER_MT2060=m
+CONFIG_MEDIA_TUNER_MT2063=m
+CONFIG_MEDIA_TUNER_MT2266=m
+CONFIG_MEDIA_TUNER_QT1010=m
+CONFIG_MEDIA_TUNER_XC2028=y
+CONFIG_MEDIA_TUNER_XC5000=y
+CONFIG_MEDIA_TUNER_XC4000=y
+CONFIG_MEDIA_TUNER_MXL5005S=m
+CONFIG_MEDIA_TUNER_MXL5007T=m
+CONFIG_MEDIA_TUNER_MC44S803=y
+CONFIG_MEDIA_TUNER_MAX2165=m
+CONFIG_MEDIA_TUNER_TDA18218=m
+CONFIG_MEDIA_TUNER_FC0011=m
+CONFIG_MEDIA_TUNER_FC0012=m
+CONFIG_MEDIA_TUNER_FC0013=m
+CONFIG_MEDIA_TUNER_TDA18212=m
+CONFIG_MEDIA_TUNER_E4000=m
+CONFIG_MEDIA_TUNER_FC2580=m
+CONFIG_MEDIA_TUNER_M88TS2022=m
+CONFIG_MEDIA_TUNER_TUA9001=m
+CONFIG_MEDIA_TUNER_IT913X=m
+CONFIG_MEDIA_TUNER_R820T=m
+
+#
+# Multistandard (satellite) frontends
+#
+CONFIG_DVB_STB0899=m
+CONFIG_DVB_STB6100=m
+CONFIG_DVB_STV090x=m
+CONFIG_DVB_STV6110x=m
+CONFIG_DVB_M88DS3103=m
+
+#
+# Multistandard (cable + terrestrial) frontends
+#
+CONFIG_DVB_DRXK=m
+CONFIG_DVB_TDA18271C2DD=m
+
+#
+# DVB-S (satellite) frontends
+#
+CONFIG_DVB_CX24123=m
+CONFIG_DVB_MT312=m
+CONFIG_DVB_ZL10039=m
+CONFIG_DVB_S5H1420=m
+CONFIG_DVB_STV0288=m
+CONFIG_DVB_STB6000=m
+CONFIG_DVB_STV0299=m
+CONFIG_DVB_STV6110=m
+CONFIG_DVB_STV0900=m
+CONFIG_DVB_TDA10086=m
+CONFIG_DVB_TUNER_ITD1000=m
+CONFIG_DVB_TUNER_CX24113=m
+CONFIG_DVB_TDA826X=m
+CONFIG_DVB_CX24116=m
+CONFIG_DVB_SI21XX=m
+CONFIG_DVB_TS2020=m
+CONFIG_DVB_DS3000=m
+CONFIG_DVB_TDA10071=m
+
+#
+# DVB-T (terrestrial) frontends
+#
+CONFIG_DVB_CX22702=m
+CONFIG_DVB_DRXD=m
+CONFIG_DVB_MT352=m
+CONFIG_DVB_ZL10353=m
+CONFIG_DVB_DIB3000MB=m
+CONFIG_DVB_DIB3000MC=m
+CONFIG_DVB_DIB7000M=m
+CONFIG_DVB_DIB7000P=m
+CONFIG_DVB_TDA10048=m
+CONFIG_DVB_AF9013=m
+CONFIG_DVB_EC100=m
+CONFIG_DVB_CXD2820R=m
+CONFIG_DVB_RTL2830=m
+CONFIG_DVB_RTL2832=m
+
+#
+# DVB-C (cable) frontends
+#
+CONFIG_DVB_TDA10023=m
+CONFIG_DVB_STV0297=m
+
+#
+# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
+#
+CONFIG_DVB_NXT200X=m
+CONFIG_DVB_BCM3510=m
+CONFIG_DVB_LGDT330X=m
+CONFIG_DVB_LGDT3305=m
+CONFIG_DVB_LG2160=m
+CONFIG_DVB_S5H1409=m
+CONFIG_DVB_AU8522=m
+CONFIG_DVB_AU8522_DTV=m
+CONFIG_DVB_AU8522_V4L=m
+CONFIG_DVB_S5H1411=m
+
+#
+# ISDB-T (terrestrial) frontends
+#
+CONFIG_DVB_S921=m
+CONFIG_DVB_DIB8000=m
+CONFIG_DVB_MB86A20S=m
+
+#
+# Digital terrestrial only tuners/PLL
+#
+CONFIG_DVB_PLL=m
+CONFIG_DVB_TUNER_DIB0070=m
+CONFIG_DVB_TUNER_DIB0090=m
+
+#
+# SEC control devices for DVB-S
+#
+CONFIG_DVB_LNBP21=m
+CONFIG_DVB_LNBP22=m
+CONFIG_DVB_ISL6421=m
+CONFIG_DVB_ISL6423=m
+CONFIG_DVB_A8293=m
+CONFIG_DVB_LGS8GXX=m
+CONFIG_DVB_ATBM8830=m
+CONFIG_DVB_IX2505V=m
+CONFIG_DVB_IT913X_FE=m
+CONFIG_DVB_M88RS2000=m
+CONFIG_DVB_AF9033=m
+
+#
+# Tools to develop new frontends
+#
+# CONFIG_DVB_DUMMY_FE is not set
+
+#
+# Graphics support
+#
+# CONFIG_DRM is not set
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_VEXPRESS_DVI_CONTROL=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+CONFIG_FB_SYS_FILLRECT=m
+CONFIG_FB_SYS_COPYAREA=m
+CONFIG_FB_SYS_IMAGEBLIT=m
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+CONFIG_FB_SYS_FOPS=m
+CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+CONFIG_FB_ARMCLCD=y
+# CONFIG_FB_UVESA is not set
+# CONFIG_FB_OPENCORES is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_SMSCUFX is not set
+# CONFIG_FB_UDL is not set
+# CONFIG_FB_GOLDFISH is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_BROADSHEET is not set
+# CONFIG_FB_AUO_K190X is not set
+# CONFIG_FB_SIMPLE is not set
+# CONFIG_EXYNOS_VIDEO is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=m
+# CONFIG_LCD_L4F00242T03 is not set
+# CONFIG_LCD_LMS283GF05 is not set
+# CONFIG_LCD_LTV350QV is not set
+# CONFIG_LCD_ILI922X is not set
+# CONFIG_LCD_ILI9320 is not set
+# CONFIG_LCD_TDO24M is not set
+# CONFIG_LCD_VGG2432A4 is not set
+# CONFIG_LCD_PLATFORM is not set
+# CONFIG_LCD_S6E63M0 is not set
+# CONFIG_LCD_LD9040 is not set
+# CONFIG_LCD_AMS369FG06 is not set
+# CONFIG_LCD_LMS501KF03 is not set
+# CONFIG_LCD_HX8357 is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_GENERIC=y
+# CONFIG_BACKLIGHT_PWM is not set
+# CONFIG_BACKLIGHT_ADP8860 is not set
+# CONFIG_BACKLIGHT_ADP8870 is not set
+# CONFIG_BACKLIGHT_LM3630A is not set
+# CONFIG_BACKLIGHT_LM3639 is not set
+# CONFIG_BACKLIGHT_LP855X is not set
+# CONFIG_BACKLIGHT_GPIO is not set
+# CONFIG_BACKLIGHT_LV5207LP is not set
+# CONFIG_BACKLIGHT_BD6107 is not set
+# CONFIG_ADF is not set
+
+#
+# Console display driver support
+#
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_LOGO is not set
+# CONFIG_FB_SSD1307 is not set
+
+#
+# Mali GPU OpenGL device driver
+#
+CONFIG_MALI400=y
+# CONFIG_MALI400_DEBUG is not set
+# CONFIG_MALI400_PROFILING is not set
+# CONFIG_MALI400_UMP is not set
+# CONFIG_MALI_DVFS is not set
+CONFIG_MALI_DMA_BUF_MAP_ON_ATTACH=y
+# CONFIG_MALI_SHARED_INTERRUPTS is not set
+# CONFIG_MALI_PMU_PARALLEL_POWER_UP is not set
+# CONFIG_MALI_DT is not set
+# CONFIG_MALI_QUIET is not set
+CONFIG_SOUND=y
+# CONFIG_SOUND_OSS_CORE is not set
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_HWDEP=y
+CONFIG_SND_RAWMIDI=y
+CONFIG_SND_COMPRESS_OFFLOAD=y
+CONFIG_SND_JACK=y
+# CONFIG_SND_SEQUENCER is not set
+# CONFIG_SND_MIXER_OSS is not set
+# CONFIG_SND_PCM_OSS is not set
+# CONFIG_SND_HRTIMER is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+CONFIG_SND_VMASTER=y
+# CONFIG_SND_RAWMIDI_SEQ is not set
+# CONFIG_SND_OPL3_LIB_SEQ is not set
+# CONFIG_SND_OPL4_LIB_SEQ is not set
+# CONFIG_SND_SBAWE_SEQ is not set
+# CONFIG_SND_EMU10K1_SEQ is not set
+CONFIG_SND_DRIVERS=y
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_ALOOP is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+CONFIG_SND_SPI=y
+CONFIG_SND_USB=y
+CONFIG_SND_USB_AUDIO=y
+CONFIG_SND_USB_UA101=m
+CONFIG_SND_USB_CAIAQ=m
+CONFIG_SND_USB_CAIAQ_INPUT=y
+CONFIG_SND_USB_6FIRE=m
+CONFIG_SND_USB_HIFACE=m
+CONFIG_SND_SOC=y
+# CONFIG_SND_ATMEL_SOC is not set
+# CONFIG_SND_DESIGNWARE_I2S is not set
+CONFIG_SND_AML_M8_SOC=y
+CONFIG_SND_AML_M8=y
+CONFIG_SND_ODROID_HDMI=y
+CONFIG_SND_ODROID_DAC=y
+# CONFIG_SND_AML_G9TV is not set
+CONFIG_SND_SOC_I2C_AND_SPI=y
+CONFIG_SND_SOC_DUMMY_CODEC=y
+CONFIG_SND_SOC_PCM2BT=y
+CONFIG_SND_SOC_PCM5102=y
+# CONFIG_SND_SIMPLE_CARD is not set
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID support
+#
+CONFIG_HID=y
+# CONFIG_HID_BATTERY_STRENGTH is not set
+CONFIG_HIDRAW=y
+# CONFIG_UHID is not set
+CONFIG_HID_GENERIC=y
+
+#
+# Special HID drivers
+#
+CONFIG_HID_A4TECH=y
+# CONFIG_HID_ACRUX is not set
+CONFIG_HID_APPLE=y
+# CONFIG_HID_APPLEIR is not set
+CONFIG_HID_AUREAL=y
+CONFIG_HID_BELKIN=y
+CONFIG_HID_CHERRY=y
+CONFIG_HID_CHICONY=y
+# CONFIG_HID_PRODIKEYS is not set
+CONFIG_HID_CYPRESS=y
+CONFIG_HID_DRAGONRISE=m
+CONFIG_DRAGONRISE_FF=y
+# CONFIG_HID_EMS_FF is not set
+# CONFIG_HID_ELECOM is not set
+# CONFIG_HID_ELO is not set
+CONFIG_HID_EZKEY=y
+# CONFIG_HID_HOLTEK is not set
+# CONFIG_HID_HUION is not set
+# CONFIG_HID_KEYTOUCH is not set
+CONFIG_HID_KYE=y
+# CONFIG_HID_UCLOGIC is not set
+# CONFIG_HID_WALTOP is not set
+CONFIG_HID_GYRATION=y
+# CONFIG_HID_ICADE is not set
+CONFIG_HID_TWINHAN=y
+CONFIG_HID_KENSINGTON=y
+CONFIG_HID_LCPOWER=y
+CONFIG_HID_LENOVO_TPKBD=m
+CONFIG_HID_LOGITECH=y
+CONFIG_HID_LOGITECH_DJ=y
+CONFIG_LOGITECH_FF=y
+CONFIG_LOGIRUMBLEPAD2_FF=y
+CONFIG_LOGIG940_FF=y
+CONFIG_LOGIWHEELS_FF=y
+# CONFIG_HID_MAGICMOUSE is not set
+CONFIG_HID_MICROSOFT=y
+CONFIG_HID_MONTEREY=y
+# CONFIG_HID_MULTITOUCH is not set
+# CONFIG_HID_NTRIG is not set
+CONFIG_HID_ORTEK=y
+CONFIG_HID_PANTHERLORD=y
+CONFIG_PANTHERLORD_FF=y
+CONFIG_HID_PETALYNX=y
+CONFIG_HID_PICOLCD=m
+CONFIG_HID_PICOLCD_FB=y
+CONFIG_HID_PICOLCD_BACKLIGHT=y
+CONFIG_HID_PICOLCD_LCD=y
+CONFIG_HID_PICOLCD_LEDS=y
+# CONFIG_HID_PICOLCD_CIR is not set
+# CONFIG_HID_PRIMAX is not set
+# CONFIG_HID_ROCCAT is not set
+# CONFIG_HID_SAITEK is not set
+CONFIG_HID_SAMSUNG=y
+CONFIG_HID_SONY=y
+# CONFIG_SONY_FF is not set
+# CONFIG_HID_SPEEDLINK is not set
+# CONFIG_HID_STEELSERIES is not set
+CONFIG_HID_SUNPLUS=y
+# CONFIG_HID_GREENASIA is not set
+# CONFIG_HID_SMARTJOYPLUS is not set
+CONFIG_HID_TIVO=y
+CONFIG_HID_TOPSEED=y
+# CONFIG_HID_THINGM is not set
+# CONFIG_HID_THRUSTMASTER is not set
+# CONFIG_HID_WACOM is not set
+CONFIG_HID_WIIMOTE=m
+# CONFIG_HID_XINMO is not set
+# CONFIG_HID_ZEROPLUS is not set
+CONFIG_HID_ZYDACRON=y
+# CONFIG_HID_SENSOR_HUB is not set
+
+#
+# USB HID support
+#
+CONFIG_USB_HID=y
+# CONFIG_HID_PID is not set
+CONFIG_USB_HIDDEV=y
+
+#
+# I2C HID support
+#
+# CONFIG_I2C_HID is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_COMMON=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEFAULT_PERSIST=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+# CONFIG_USB_MON is not set
+# CONFIG_USB_WUSB_CBAF is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+# CONFIG_USB_XHCI_HCD is not set
+CONFIG_USB_EHCI_HCD=y
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+CONFIG_USB_EHCI_TT_NEWSCHED=y
+CONFIG_USB_EHCI_HCD_SYNOPSYS=y
+# CONFIG_USB_EHCI_HCD_PLATFORM is not set
+# CONFIG_USB_OXU210HP_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1760_HCD is not set
+# CONFIG_USB_ISP1362_HCD is not set
+# CONFIG_USB_FUSBH200_HCD is not set
+# CONFIG_USB_FOTG210_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_HCD_PLATFORM is not set
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_HCD_SSB is not set
+# CONFIG_USB_HCD_TEST_MODE is not set
+# CONFIG_USB_RENESAS_USBHS is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=y
+# CONFIG_USB_PRINTER is not set
+CONFIG_USB_WDM=m
+# CONFIG_USB_TMC is not set
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
+#
+
+#
+# also be needed; see USB_STORAGE Help for more info
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_REALTEK is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+# CONFIG_USB_STORAGE_ENE_UB6250 is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_MUSB_HDRC is not set
+# CONFIG_USB_DWC3 is not set
+# CONFIG_USB_DWC2 is not set
+# CONFIG_USB_CHIPIDEA is not set
+
+#
+# USB port drivers
+#
+CONFIG_USB_SERIAL=y
+CONFIG_USB_SERIAL_CONSOLE=y
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_SIMPLE is not set
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_CH341 is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_CP210X is not set
+# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+# CONFIG_USB_SERIAL_FTDI_SIO is not set
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
+# CONFIG_USB_SERIAL_F81232 is not set
+# CONFIG_USB_SERIAL_GARMIN is not set
+# CONFIG_USB_SERIAL_IPW is not set
+# CONFIG_USB_SERIAL_IUU is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_KOBIL_SCT is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+# CONFIG_USB_SERIAL_METRO is not set
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_MXUPORT is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+# CONFIG_USB_SERIAL_PL2303 is not set
+# CONFIG_USB_SERIAL_OTI6858 is not set
+# CONFIG_USB_SERIAL_QCAUX is not set
+# CONFIG_USB_SERIAL_QUALCOMM is not set
+# CONFIG_USB_SERIAL_SPCP8X5 is not set
+# CONFIG_USB_SERIAL_SAFE is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+# CONFIG_USB_SERIAL_SYMBOL is not set
+# CONFIG_USB_SERIAL_TI is not set
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+# CONFIG_USB_SERIAL_OPTION is not set
+# CONFIG_USB_SERIAL_OMNINET is not set
+# CONFIG_USB_SERIAL_OPTICON is not set
+# CONFIG_USB_SERIAL_XSENS_MT is not set
+# CONFIG_USB_SERIAL_WISHBONE is not set
+# CONFIG_USB_SERIAL_ZTE is not set
+# CONFIG_USB_SERIAL_SSU100 is not set
+# CONFIG_USB_SERIAL_QT2 is not set
+# CONFIG_USB_SERIAL_DEBUG is not set
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+# CONFIG_USB_ADUTUX is not set
+CONFIG_USB_SEVSEG=m
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+CONFIG_USB_LED=m
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+CONFIG_USB_CYTHERM=m
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+CONFIG_USB_APPLEDISPLAY=m
+CONFIG_USB_SISUSBVGA=m
+CONFIG_USB_SISUSBVGA_CON=y
+CONFIG_USB_LD=m
+CONFIG_USB_TRANCEVIBRATOR=m
+CONFIG_USB_IOWARRIOR=m
+# CONFIG_USB_TEST is not set
+# CONFIG_USB_EHSET_TEST_FIXTURE is not set
+CONFIG_USB_ISIGHTFW=m
+CONFIG_USB_YUREX=m
+CONFIG_USB_EZUSB_FX2=m
+# CONFIG_USB_HSIC_USB3503 is not set
+
+#
+# USB Physical Layer drivers
+#
+CONFIG_USB_PHY=y
+# CONFIG_USB_OTG_FSM is not set
+# CONFIG_USB_OTG_WAKELOCK is not set
+# CONFIG_NOP_USB_XCEIV is not set
+# CONFIG_SAMSUNG_USB2PHY is not set
+# CONFIG_SAMSUNG_USB3PHY is not set
+# CONFIG_USB_GPIO_VBUS is not set
+CONFIG_USB_ISP1301=y
+# CONFIG_USB_RCAR_PHY is not set
+CONFIG_USB_ULPI=y
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_DEBUG_FS is not set
+CONFIG_USB_GADGET_VBUS_DRAW=2
+CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
+
+#
+# USB Peripheral Controller
+#
+# CONFIG_USB_FOTG210_UDC is not set
+# CONFIG_USB_GR_UDC is not set
+# CONFIG_USB_R8A66597 is not set
+# CONFIG_USB_PXA27X is not set
+# CONFIG_USB_MV_UDC is not set
+# CONFIG_USB_MV_U3D is not set
+# CONFIG_USB_M66592 is not set
+# CONFIG_USB_NET2272 is not set
+# CONFIG_USB_DUMMY_HCD is not set
+# CONFIG_USB_CONFIGFS is not set
+# CONFIG_USB_ZERO is not set
+# CONFIG_USB_AUDIO is not set
+# CONFIG_USB_ETH is not set
+# CONFIG_USB_G_NCM is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FUNCTIONFS is not set
+# CONFIG_USB_MASS_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_PRINTER is not set
+# CONFIG_USB_CDC_COMPOSITE is not set
+# CONFIG_USB_G_ACM_MS is not set
+# CONFIG_USB_G_MULTI is not set
+# CONFIG_USB_G_HID is not set
+# CONFIG_USB_G_DBGP is not set
+# CONFIG_USB_G_WEBCAM is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_PXP_MMC=y
+CONFIG_MMC_UNSAFE_RESUME=y
+# CONFIG_MMC_CLKGATE is not set
+# CONFIG_MMC_EMBEDDED_SDIO is not set
+# CONFIG_MMC_PARANOID_SD_INIT is not set
+
+#
+# MMC/SD/SDIO Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_MINORS=32
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_MMC_BLOCK_DEFERRED_RESUME is not set
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+CONFIG_MMC_ARMMMCI=y
+# CONFIG_MMC_SDHCI is not set
+# CONFIG_MMC_SDHCI_PXAV3 is not set
+# CONFIG_MMC_SDHCI_PXAV2 is not set
+# CONFIG_MMC_SPI is not set
+# CONFIG_MMC_VUB300 is not set
+# CONFIG_MMC_USHC is not set
+# CONFIG_MEMSTICK is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_LM3530 is not set
+# CONFIG_LEDS_LM3642 is not set
+# CONFIG_LEDS_PCA9532 is not set
+CONFIG_LEDS_GPIO=y
+# CONFIG_LEDS_LP3944 is not set
+# CONFIG_LEDS_LP5521 is not set
+# CONFIG_LEDS_LP5523 is not set
+# CONFIG_LEDS_LP5562 is not set
+# CONFIG_LEDS_LP8501 is not set
+# CONFIG_LEDS_PCA955X is not set
+# CONFIG_LEDS_PCA963X is not set
+# CONFIG_LEDS_PCA9685 is not set
+# CONFIG_LEDS_DAC124S085 is not set
+# CONFIG_LEDS_PWM is not set
+# CONFIG_LEDS_REGULATOR is not set
+# CONFIG_LEDS_BD2802 is not set
+# CONFIG_LEDS_LT3593 is not set
+# CONFIG_LEDS_TCA6507 is not set
+# CONFIG_LEDS_LM355x is not set
+# CONFIG_LEDS_OT200 is not set
+# CONFIG_LEDS_BLINKM is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_ONESHOT=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_BACKLIGHT=y
+CONFIG_LEDS_TRIGGER_CPU=y
+CONFIG_LEDS_TRIGGER_GPIO=y
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
+
+#
+# iptables trigger is under Netfilter config (LED target)
+#
+CONFIG_LEDS_TRIGGER_TRANSIENT=y
+CONFIG_LEDS_TRIGGER_CAMERA=y
+CONFIG_SWITCH=y
+# CONFIG_SWITCH_GPIO is not set
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_SYSTOHC=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS3232 is not set
+# CONFIG_RTC_DRV_HYM8563 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_ISL12022 is not set
+# CONFIG_RTC_DRV_ISL12057 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF2127 is not set
+# CONFIG_RTC_DRV_PCF8523 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+# CONFIG_RTC_DRV_BQ32K is not set
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+# CONFIG_RTC_DRV_RX8581 is not set
+# CONFIG_RTC_DRV_RX8025 is not set
+# CONFIG_RTC_DRV_EM3027 is not set
+# CONFIG_RTC_DRV_RV3029C2 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_M41T93 is not set
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_DS1390 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_DS3234 is not set
+# CONFIG_RTC_DRV_PCF2123 is not set
+# CONFIG_RTC_DRV_RX4581 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_MSM6242 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_RP5C01 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+# CONFIG_RTC_DRV_DS2404 is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_RTC_DRV_PL030 is not set
+CONFIG_RTC_DRV_PL031=y
+# CONFIG_RTC_DRV_SNVS is not set
+# CONFIG_RTC_DRV_MOXART is not set
+
+#
+# HID Sensor RTC drivers
+#
+# CONFIG_RTC_DRV_HID_SENSOR_TIME is not set
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
+CONFIG_UIO=y
+# CONFIG_UIO_PDRV_GENIRQ is not set
+# CONFIG_UIO_DMEM_GENIRQ is not set
+# CONFIG_VIRT_DRIVERS is not set
+
+#
+# Virtio drivers
+#
+# CONFIG_VIRTIO_MMIO is not set
+
+#
+# Microsoft Hyper-V guest support
+#
+CONFIG_STAGING=y
+# CONFIG_USBIP_CORE is not set
+# CONFIG_W35UND is not set
+# CONFIG_PRISM2_USB is not set
+# CONFIG_ECHO is not set
+# CONFIG_COMEDI is not set
+# CONFIG_RTLLIB is not set
+CONFIG_R8712U=m
+# CONFIG_R8188EU is not set
+# CONFIG_RTS5139 is not set
+# CONFIG_TRANZPORT is not set
+# CONFIG_LINE6_USB is not set
+# CONFIG_USB_SERIAL_QUATECH2 is not set
+CONFIG_VT6656=m
+# CONFIG_USB_ENESTORAGE is not set
+# CONFIG_BCM_WIMAX is not set
+# CONFIG_FT1000 is not set
+
+#
+# Speakup console speech
+#
+# CONFIG_SPEAKUP is not set
+# CONFIG_TOUCHSCREEN_CLEARPAD_TM1217 is not set
+# CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4 is not set
+CONFIG_STAGING_MEDIA=y
+CONFIG_DVB_AS102=m
+# CONFIG_VIDEO_GO7007 is not set
+# CONFIG_USB_MSI3101 is not set
+# CONFIG_VIDEO_TCM825X is not set
+# CONFIG_USB_SN9C102 is not set
+# CONFIG_LIRC_STAGING is not set
+
+#
+# Android
+#
+CONFIG_ANDROID=y
+CONFIG_ANDROID_BINDER_IPC=y
+# CONFIG_ANDROID_BINDER_IPC_32BIT is not set
+CONFIG_ASHMEM=y
+CONFIG_ANDROID_LOGGER=y
+CONFIG_ANDROID_TIMED_OUTPUT=y
+# CONFIG_ANDROID_TIMED_GPIO is not set
+CONFIG_ANDROID_LOW_MEMORY_KILLER=y
+CONFIG_ANDROID_LOW_MEMORY_KILLER_AUTODETECT_OOM_ADJ_VALUES=y
+# CONFIG_ANDROID_INTF_ALARM_DEV is not set
+CONFIG_SYNC=y
+CONFIG_SW_SYNC=y
+# CONFIG_SW_SYNC_USER is not set
+CONFIG_ION=y
+# CONFIG_ION_TEST is not set
+# CONFIG_ION_DUMMY is not set
+# CONFIG_FIQ_DEBUGGER is not set
+# CONFIG_FIQ_WATCHDOG is not set
+# CONFIG_USB_WPAN_HCD is not set
+# CONFIG_WIMAX_GDM72XX is not set
+# CONFIG_LTE_GDM724X is not set
+# CONFIG_CED1401 is not set
+# CONFIG_DGRP is not set
+# CONFIG_MTD_SPINAND_MT29F is not set
+# CONFIG_LUSTRE_FS is not set
+# CONFIG_XILLYBUS is not set
+# CONFIG_DGAP is not set
+CONFIG_CLKDEV_LOOKUP=y
+CONFIG_HAVE_CLK_PREPARE=y
+CONFIG_COMMON_CLK=y
+
+#
+# Common Clock Framework
+#
+CONFIG_COMMON_CLK_VERSATILE=y
+# CONFIG_COMMON_CLK_SI5351 is not set
+# CONFIG_COMMON_CLK_SI570 is not set
+CONFIG_COMMON_CLK_XGENE=y
+CONFIG_COMMON_CLK_SCPI=y
+# CONFIG_COMMON_CLK_QCOM is not set
+
+#
+# Hardware Spinlock drivers
+#
+CONFIG_CLKSRC_OF=y
+CONFIG_ARM_ARCH_TIMER=y
+CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y
+CONFIG_MAILBOX=y
+# CONFIG_PL320_MBOX is not set
+CONFIG_IOMMU_SUPPORT=y
+CONFIG_OF_IOMMU=y
+# CONFIG_ARM_SMMU is not set
+
+#
+# Remoteproc drivers
+#
+# CONFIG_STE_MODEM_RPROC is not set
+
+#
+# Rpmsg drivers
+#
+# CONFIG_PM_DEVFREQ is not set
+# CONFIG_EXTCON is not set
+# CONFIG_MEMORY is not set
+# CONFIG_IIO is not set
+CONFIG_PWM=y
+CONFIG_PWM_SYSFS=y
+# CONFIG_PWM_PCA9685 is not set
+CONFIG_IRQCHIP=y
+CONFIG_ARM_GIC=y
+CONFIG_ARM_GIC_V3=y
+# CONFIG_IPACK_BUS is not set
+CONFIG_RESET_CONTROLLER=y
+# CONFIG_FMC is not set
+
+#
+# PHY Subsystem
+#
+# CONFIG_GENERIC_PHY is not set
+# CONFIG_PHY_EXYNOS_MIPI_VIDEO is not set
+# CONFIG_PHY_EXYNOS_DP_VIDEO is not set
+# CONFIG_POWERCAP is not set
+
+#
+# File systems
+#
+CONFIG_DCACHE_WORD_ACCESS=y
+# CONFIG_EXT2_FS is not set
+# CONFIG_EXT3_FS is not set
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_USE_FOR_EXT23=y
+# CONFIG_EXT4_FS_POSIX_ACL is not set
+# CONFIG_EXT4_FS_SECURITY is not set
+# CONFIG_EXT4_DEBUG is not set
+CONFIG_JBD2=y
+# CONFIG_JBD2_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+CONFIG_BTRFS_FS=y
+CONFIG_BTRFS_FS_POSIX_ACL=y
+# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
+CONFIG_BTRFS_FS_RUN_SANITY_TESTS=y
+# CONFIG_BTRFS_DEBUG is not set
+# CONFIG_BTRFS_ASSERT is not set
+# CONFIG_NILFS2_FS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_EXPORTFS=y
+CONFIG_FILE_LOCKING=y
+CONFIG_FSNOTIFY=y
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_FANOTIFY is not set
+CONFIG_QUOTA=y
+# CONFIG_QUOTA_NETLINK_INTERFACE is not set
+CONFIG_PRINT_QUOTA_WARNING=y
+# CONFIG_QUOTA_DEBUG is not set
+CONFIG_QUOTA_TREE=y
+# CONFIG_QFMT_V1 is not set
+CONFIG_QFMT_V2=y
+CONFIG_QUOTACTL=y
+CONFIG_AUTOFS4_FS=m
+CONFIG_FUSE_FS=m
+# CONFIG_CUSE is not set
+CONFIG_OVERLAYFS_FS=y
+
+#
+# Caches
+#
+# CONFIG_FSCACHE is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=y
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=y
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+CONFIG_TMPFS_POSIX_ACL=y
+CONFIG_TMPFS_XATTR=y
+# CONFIG_HUGETLBFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+CONFIG_MISC_FILESYSTEMS=y
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_ECRYPT_FS is not set
+CONFIG_HFS_FS=y
+CONFIG_HFSPLUS_FS=y
+# CONFIG_HFSPLUS_FS_POSIX_ACL is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_LOGFS is not set
+# CONFIG_CRAMFS is not set
+CONFIG_SQUASHFS=y
+CONFIG_SQUASHFS_FILE_CACHE=y
+# CONFIG_SQUASHFS_FILE_DIRECT is not set
+CONFIG_SQUASHFS_DECOMP_SINGLE=y
+# CONFIG_SQUASHFS_DECOMP_MULTI is not set
+# CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU is not set
+CONFIG_SQUASHFS_XATTR=y
+CONFIG_SQUASHFS_ZLIB=y
+CONFIG_SQUASHFS_LZO=y
+CONFIG_SQUASHFS_XZ=y
+# CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_QNX6FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_PSTORE is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_F2FS_FS=y
+CONFIG_F2FS_STAT_FS=y
+# CONFIG_F2FS_FS_XATTR is not set
+# CONFIG_F2FS_CHECK_FS is not set
+# CONFIG_AUFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V2=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+CONFIG_NFS_SWAP=y
+CONFIG_NFS_V4_1=y
+# CONFIG_NFS_V4_2 is not set
+CONFIG_PNFS_FILE_LAYOUT=y
+CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org"
+# CONFIG_NFS_V4_1_MIGRATION is not set
+CONFIG_ROOT_NFS=y
+# CONFIG_NFS_USE_LEGACY_DNS is not set
+CONFIG_NFS_USE_KERNEL_DNS=y
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_SUNRPC_BACKCHANNEL=y
+CONFIG_SUNRPC_SWAP=y
+# CONFIG_SUNRPC_DEBUG is not set
+# CONFIG_CEPH_FS is not set
+CONFIG_CIFS=y
+CONFIG_CIFS_STATS=y
+CONFIG_CIFS_STATS2=y
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_UPCALL is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG is not set
+# CONFIG_CIFS_DFS_UPCALL is not set
+# CONFIG_CIFS_SMB2 is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_ASCII=y
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_MAC_ROMAN is not set
+# CONFIG_NLS_MAC_CELTIC is not set
+# CONFIG_NLS_MAC_CENTEURO is not set
+# CONFIG_NLS_MAC_CROATIAN is not set
+# CONFIG_NLS_MAC_CYRILLIC is not set
+# CONFIG_NLS_MAC_GAELIC is not set
+# CONFIG_NLS_MAC_GREEK is not set
+# CONFIG_NLS_MAC_ICELAND is not set
+# CONFIG_NLS_MAC_INUIT is not set
+# CONFIG_NLS_MAC_ROMANIAN is not set
+# CONFIG_NLS_MAC_TURKISH is not set
+CONFIG_NLS_UTF8=y
+# CONFIG_VIRTUALIZATION is not set
+
+#
+# Kernel hacking
+#
+
+#
+# printk and dmesg options
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_DYNAMIC_DEBUG is not set
+
+#
+# Compile-time checks and compiler options
+#
+CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_INFO_REDUCED is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+# CONFIG_STRIP_ASM_SYMS is not set
+# CONFIG_READABLE_ASM is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_SECTION_MISMATCH is not set
+CONFIG_ARCH_WANT_FRAME_POINTERS=y
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1
+CONFIG_DEBUG_KERNEL=y
+
+#
+# Memory Debugging
+#
+# CONFIG_DEBUG_PAGEALLOC is not set
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_SLUB_DEBUG_ON is not set
+# CONFIG_SLUB_STATS is not set
+CONFIG_HAVE_DEBUG_KMEMLEAK=y
+# CONFIG_DEBUG_KMEMLEAK is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
+# CONFIG_DEBUG_PER_CPU_MAPS is not set
+# CONFIG_DEBUG_SHIRQ is not set
+
+#
+# Debug Lockups and Hangs
+#
+# CONFIG_LOCKUP_DETECTOR is not set
+# CONFIG_DETECT_HUNG_TASK is not set
+# CONFIG_PANIC_ON_OOPS is not set
+CONFIG_PANIC_ON_OOPS_VALUE=0
+CONFIG_PANIC_TIMEOUT=0
+CONFIG_SCHED_DEBUG=y
+CONFIG_SCHEDSTATS=y
+CONFIG_TIMER_STATS=y
+CONFIG_DEBUG_PREEMPT=y
+
+#
+# Lock Debugging (spinlocks, mutexes, etc...)
+#
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_ATOMIC_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+CONFIG_STACKTRACE=y
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_HAVE_DEBUG_BUGVERBOSE=y
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_WRITECOUNT is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+# CONFIG_DEBUG_CREDENTIALS is not set
+
+#
+# RCU Debugging
+#
+# CONFIG_PROVE_RCU_DELAY is not set
+# CONFIG_SPARSE_RCU_POINTER is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+CONFIG_RCU_CPU_STALL_TIMEOUT=60
+CONFIG_RCU_CPU_STALL_VERBOSE=y
+# CONFIG_RCU_CPU_STALL_INFO is not set
+CONFIG_RCU_TRACE=y
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+# CONFIG_NOTIFIER_ERROR_INJECTION is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_NOP_TRACER=y
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
+CONFIG_HAVE_DYNAMIC_FTRACE=y
+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
+CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
+CONFIG_HAVE_C_RECORDMCOUNT=y
+CONFIG_TRACE_CLOCK=y
+CONFIG_RING_BUFFER=y
+CONFIG_EVENT_TRACING=y
+CONFIG_CONTEXT_SWITCH_TRACER=y
+CONFIG_TRACING=y
+CONFIG_GENERIC_TRACER=y
+CONFIG_TRACING_SUPPORT=y
+CONFIG_FTRACE=y
+CONFIG_FUNCTION_TRACER=y
+CONFIG_FUNCTION_GRAPH_TRACER=y
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_PREEMPT_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+CONFIG_FTRACE_SYSCALLS=y
+# CONFIG_TRACER_SNAPSHOT is not set
+CONFIG_BRANCH_PROFILE_NONE=y
+# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
+# CONFIG_PROFILE_ALL_BRANCHES is not set
+CONFIG_STACK_TRACER=y
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_PROBE_EVENTS is not set
+CONFIG_DYNAMIC_FTRACE=y
+CONFIG_FUNCTION_PROFILER=y
+CONFIG_FTRACE_MCOUNT_RECORD=y
+# CONFIG_FTRACE_STARTUP_TEST is not set
+# CONFIG_RING_BUFFER_BENCHMARK is not set
+# CONFIG_RING_BUFFER_STARTUP_TEST is not set
+
+#
+# Runtime Testing
+#
+# CONFIG_LKDTM is not set
+# CONFIG_TEST_LIST_SORT is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_RBTREE_TEST is not set
+# CONFIG_INTERVAL_TREE_TEST is not set
+# CONFIG_PERCPU_TEST is not set
+# CONFIG_ATOMIC64_SELFTEST is not set
+# CONFIG_TEST_STRING_HELPERS is not set
+# CONFIG_TEST_KSTRTOX is not set
+# CONFIG_DMA_API_DEBUG is not set
+# CONFIG_TEST_MODULE is not set
+# CONFIG_TEST_USER_COPY is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+CONFIG_EARLY_PRINTK=y
+# CONFIG_PID_IN_CONTEXTIDR is not set
+
+#
+# Security options
+#
+CONFIG_KEYS=y
+# CONFIG_PERSISTENT_KEYRINGS is not set
+# CONFIG_BIG_KEYS is not set
+# CONFIG_ENCRYPTED_KEYS is not set
+# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
+# CONFIG_SECURITY_DMESG_RESTRICT is not set
+# CONFIG_SECURITY is not set
+CONFIG_SECURITYFS=y
+CONFIG_DEFAULT_SECURITY_DAC=y
+CONFIG_DEFAULT_SECURITY=""
+CONFIG_XOR_BLOCKS=y
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD=y
+CONFIG_CRYPTO_AEAD2=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_BLKCIPHER2=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG=y
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_PCOMP2=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+# CONFIG_CRYPTO_USER is not set
+CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
+CONFIG_CRYPTO_GF128MUL=m
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_PCRYPT is not set
+CONFIG_CRYPTO_WORKQUEUE=y
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_AUTHENC=y
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+CONFIG_CRYPTO_CCM=y
+# CONFIG_CRYPTO_GCM is not set
+CONFIG_CRYPTO_SEQIV=y
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_CTR=y
+# CONFIG_CRYPTO_CTS is not set
+CONFIG_CRYPTO_ECB=y
+CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_PCBC=y
+CONFIG_CRYPTO_XTS=m
+
+#
+# Hash modes
+#
+CONFIG_CRYPTO_CMAC=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_VMAC is not set
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=y
+# CONFIG_CRYPTO_CRC32 is not set
+CONFIG_CRYPTO_CRCT10DIF=y
+# CONFIG_CRYPTO_GHASH is not set
+CONFIG_CRYPTO_MD4=y
+CONFIG_CRYPTO_MD5=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=y
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+CONFIG_CRYPTO_AES=y
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_ARC4=y
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_ZLIB is not set
+CONFIG_CRYPTO_LZO=y
+# CONFIG_CRYPTO_LZ4 is not set
+# CONFIG_CRYPTO_LZ4HC is not set
+
+#
+# Random Number Generation
+#
+CONFIG_CRYPTO_ANSI_CPRNG=m
+# CONFIG_CRYPTO_USER_API_HASH is not set
+# CONFIG_CRYPTO_USER_API_SKCIPHER is not set
+CONFIG_CRYPTO_HW=y
+# CONFIG_ASYMMETRIC_KEY_TYPE is not set
+# CONFIG_ARM64_CRYPTO is not set
+CONFIG_BINARY_PRINTF=y
+
+#
+# Library routines
+#
+CONFIG_RAID6_PQ=y
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_STRNCPY_FROM_USER=y
+CONFIG_GENERIC_STRNLEN_USER=y
+CONFIG_GENERIC_NET_UTILS=y
+CONFIG_GENERIC_PCI_IOMAP=y
+CONFIG_GENERIC_IOMAP=y
+CONFIG_GENERIC_IO=y
+CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC16=y
+CONFIG_CRC_T10DIF=y
+CONFIG_CRC_ITU_T=y
+CONFIG_CRC32=y
+# CONFIG_CRC32_SELFTEST is not set
+CONFIG_CRC32_SLICEBY8=y
+# CONFIG_CRC32_SLICEBY4 is not set
+# CONFIG_CRC32_SARWATE is not set
+# CONFIG_CRC32_BIT is not set
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=y
+# CONFIG_CRC8 is not set
+CONFIG_AUDIT_GENERIC=y
+# CONFIG_RANDOM32_SELFTEST is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_XZ_DEC=y
+# CONFIG_XZ_DEC_X86 is not set
+# CONFIG_XZ_DEC_POWERPC is not set
+# CONFIG_XZ_DEC_IA64 is not set
+# CONFIG_XZ_DEC_ARM is not set
+# CONFIG_XZ_DEC_ARMTHUMB is not set
+# CONFIG_XZ_DEC_SPARC is not set
+# CONFIG_XZ_DEC_BCJ is not set
+# CONFIG_XZ_DEC_TEST is not set
+CONFIG_DECOMPRESS_GZIP=y
+CONFIG_DECOMPRESS_BZIP2=y
+CONFIG_DECOMPRESS_LZMA=y
+CONFIG_DECOMPRESS_XZ=y
+CONFIG_DECOMPRESS_LZO=y
+CONFIG_GENERIC_ALLOCATOR=y
+CONFIG_ASSOCIATIVE_ARRAY=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_DMA=y
+CONFIG_CPU_RMAP=y
+CONFIG_DQL=y
+CONFIG_NLATTR=y
+CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y
+CONFIG_AVERAGE=y
+# CONFIG_CORDIC is not set
+# CONFIG_DDR is not set
+CONFIG_LIBFDT=y
+CONFIG_OID_REGISTRY=y
+CONFIG_FONT_SUPPORT=y
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
diff --git a/projects/Odroid_C2/options b/projects/Odroid_C2/options
new file mode 100644
index 0000000000..510a72c379
--- /dev/null
+++ b/projects/Odroid_C2/options
@@ -0,0 +1,144 @@
+################################################################################
+# setup system defaults
+################################################################################
+
+ # The TARGET_CPU variable controls which processor should be targeted for
+ # generated code.
+ case $TARGET_ARCH in
+ arm64)
+ # TARGET_CPU:
+ # arm2 arm250 arm3 arm6 arm60 arm600 arm610 arm620 arm7 arm7m arm7d
+ # arm7dm arm7di arm7dmi arm70 arm700 arm700i arm710 arm710c
+ # arm7100 arm720 arm7500 arm7500fe arm7tdmi arm7tdmi-s arm710t
+ # arm720t arm740t strongarm strongarm110 strongarm1100
+ # strongarm1110 arm8 arm810 arm9 arm9e arm920 arm920t arm922t
+ # arm946e-s arm966e-s arm968e-s arm926ej-s arm940t arm9tdmi
+ # arm10tdmi arm1020t arm1026ej-s arm10e arm1020e arm1022e
+ # arm1136j-s arm1136jf-s mpcore mpcorenovfp arm1156t2-s
+ # arm1176jz-s arm1176jzf-s cortex-a8 cortex-a9 cortex-r4
+ # cortex-r4f cortex-m3 cortex-m1 xscale iwmmxt iwmmxt2 ep9312.
+ TARGET_CPU="cortex-a53"
+ ;;
+ esac
+
+ # Bootloader to use (syslinux / u-boot / bcm2835-bootloader)
+ BOOTLOADER="u-boot"
+
+ # u-boot version to use (default)
+ UBOOT_VERSION="hardkernel"
+
+ # Configuration for u-boot
+ UBOOT_CONFIG="odroidc2_defconfig"
+
+ # Target Configfile for u-boot
+ UBOOT_CONFIGFILE="boot.ini"
+
+ # Kernel target for u-boot (default 'uImage' if BOOTLOADER=u-boot) (uImage / zImage)
+ KERNEL_TARGET="Image"
+
+ # Kernel extra targets to build
+ KERNEL_UBOOT_EXTRA_TARGET=""
+
+ # Additional kernel make parameters (for example to specify the u-boot loadaddress)
+ KERNEL_MAKE_EXTRACMD="dtbs"
+
+ # Kernel to use. values can be:
+ # default: default mainline kernel
+ LINUX="hardkernel"
+
+################################################################################
+# setup build defaults
+################################################################################
+
+ # Build optimizations (size/normal)
+ OPTIMIZATIONS="size"
+
+ # Project CFLAGS
+ PROJECT_CFLAGS=""
+
+ # LTO (Link Time Optimization) support
+ LTO_SUPPORT="yes"
+
+ # GOLD (Google Linker) support
+ GOLD_SUPPORT="yes"
+
+ # SquashFS compression method (gzip / lzo / xz)
+ SQUASHFS_COMPRESSION="lzo"
+
+################################################################################
+# setup project defaults
+################################################################################
+
+ # build and install ALSA Audio support (yes / no)
+ ALSA_SUPPORT="yes"
+
+ # OpenGL(X) implementation to use (no / Mesa)
+ OPENGL="no"
+
+ # OpenGL-ES implementation to use (no / bcm2835-driver / gpu-viv-bin-mx6q / opengl-meson)
+ OPENGLES="opengl-meson"
+
+ # Amlogic Meson SOC family (8 / 6 / gxbb)
+ MESON_FAMILY="gxbb"
+
+ # include uvesafb support (yes / no)
+ UVESAFB_SUPPORT="no"
+
+ # Displayserver to use (x11 / no)
+ DISPLAYSERVER="no"
+
+ # Windowmanager to use (ratpoison / fluxbox / none)
+ WINDOWMANAGER="none"
+
+ # Xorg Graphic drivers to use (all / i915,i965,r200,r300,r600,nvidia,nouveau)
+ # Space separated list is supported,
+ # e.g. GRAPHIC_DRIVERS="i915 i965 r300 r600 radeonsi nvidia nouveau"
+ GRAPHIC_DRIVERS=""
+
+ # KODI Player implementation to use (default / bcm2835-driver / libfslvpuwrap / libamcodec)
+ KODIPLAYER_DRIVER="libamcodec"
+
+ # Modules to install in initramfs for early boot
+ INITRAMFS_MODULES=""
+
+ # additional drivers to install:
+ # for a list of additinoal drivers see packages/linux-drivers
+ # Space separated list is supported,
+ # e.g. ADDITIONAL_DRIVERS="DRIVER1 DRIVER2"
+ ADDITIONAL_DRIVERS="RTL8192CU RTL8192DU RTL8188EU RTL8192EU RTL8812AU"
+
+ # additional Firmware to use (dvb-firmware, misc-firmware, wlan-firmware)
+ # Space separated list is supported,
+ # e.g. FIRMWARE="dvb-firmware misc-firmware wlan-firmware"
+ FIRMWARE="misc-firmware wlan-firmware dvb-firmware"
+
+ # build and install ATV IR remote support (yes / no)
+ ATVCLIENT_SUPPORT="no"
+
+ # build and install IRServer IR/LCD support (yes / no)
+ IRSERVER_SUPPORT="no"
+
+ # Amlogic IR remote support (yes / no)
+ AMREMOTE_SUPPORT="no"
+
+ # Odroid IR remote support (yes / no)
+ ODROIDREMOTE_SUPPORT="yes"
+
+ # build with swap support (yes / no)
+ SWAP_SUPPORT="no"
+
+ # swap support enabled per default (yes / no)
+ SWAP_ENABLED_DEFAULT="no"
+
+ # swapfile size if SWAP_SUPPORT=yes in MB
+ SWAPFILESIZE="128"
+
+ # build with installer (yes / no)
+ INSTALLER_SUPPORT="no"
+
+ # kernel image name
+ KERNEL_NAME="KERNEL"
+
+ # set the addon dirs
+ ADDON_PATH="$ADDON_VERSION/$PROJECT/$TARGET_ARCH"
+ ADDON_URL="$ADDON_SERVER_URL/$ADDON_PATH"
diff --git a/projects/Odroid_C2/patches/RTL8192CU/RTL8192CU-0001_fix-build-with-linux-hardkernel.patch b/projects/Odroid_C2/patches/RTL8192CU/RTL8192CU-0001_fix-build-with-linux-hardkernel.patch
new file mode 100644
index 0000000000..99bbcb1ba9
--- /dev/null
+++ b/projects/Odroid_C2/patches/RTL8192CU/RTL8192CU-0001_fix-build-with-linux-hardkernel.patch
@@ -0,0 +1,11 @@
+diff -Naur a/core/rtw_br_ext.c b/core/rtw_br_ext.c
+--- a/core/rtw_br_ext.c 2013-09-11 05:56:55.000000000 +0200
++++ b/core/rtw_br_ext.c 2016-02-10 08:06:48.999417391 +0100
+@@ -51,6 +51,7 @@
+ #include
+ #include
+ #include
++#include
+ #endif
+ #endif
+
diff --git a/projects/Odroid_C2/patches/RTL8192EU/RTL8192EU-0001-fix-build-with-linux-hardkernel.patch b/projects/Odroid_C2/patches/RTL8192EU/RTL8192EU-0001-fix-build-with-linux-hardkernel.patch
new file mode 100644
index 0000000000..e94ddaa65e
--- /dev/null
+++ b/projects/Odroid_C2/patches/RTL8192EU/RTL8192EU-0001-fix-build-with-linux-hardkernel.patch
@@ -0,0 +1,11 @@
+diff -Naur a/core/rtw_br_ext.c b/core/rtw_br_ext.c
+--- a/core/rtw_br_ext.c 2016-01-18 10:56:14.000000000 -0800
++++ b/core/rtw_br_ext.c 2016-04-08 00:55:50.276738518 -0700
+@@ -49,6 +49,7 @@
+ #include
+ #include
+ #include
++#include
+ #endif
+ #endif
+
diff --git a/projects/Odroid_C2/patches/RTL8812AU/RTL8812AU-0001-fix-build-with-linux-hardkernel.patch b/projects/Odroid_C2/patches/RTL8812AU/RTL8812AU-0001-fix-build-with-linux-hardkernel.patch
new file mode 100644
index 0000000000..51620cfe0c
--- /dev/null
+++ b/projects/Odroid_C2/patches/RTL8812AU/RTL8812AU-0001-fix-build-with-linux-hardkernel.patch
@@ -0,0 +1,11 @@
+diff -Naur a/core/rtw_br_ext.c b/core/rtw_br_ext.c
+--- a/core/rtw_br_ext.c 2015-11-09 10:47:51.000000000 -0800
++++ b/core/rtw_br_ext.c 2016-04-08 00:58:47.861273878 -0700
+@@ -49,6 +49,7 @@
+ #include
+ #include
+ #include
++#include
+ #endif
+ #endif
+
diff --git a/projects/Odroid_C2/patches/eventlircd/eventlircd-0001-without-werror.patch b/projects/Odroid_C2/patches/eventlircd/eventlircd-0001-without-werror.patch
new file mode 100644
index 0000000000..a3443c2e10
--- /dev/null
+++ b/projects/Odroid_C2/patches/eventlircd/eventlircd-0001-without-werror.patch
@@ -0,0 +1,11 @@
+diff -Naur a/configure.ac b/configure.ac
+--- a/configure.ac 2016-02-10 07:28:43.854521022 +0100
++++ b/configure.ac 2016-02-10 07:42:40.195015151 +0100
+@@ -126,7 +126,6 @@
+ AX_C_CHECK_FLAG([-pedantic],[],[],[CFLAGS="$CFLAGS -pedantic"],[])
+ AX_C_CHECK_FLAG([-flto],[],[],[CFLAGS="$CFLAGS -flto"],[])
+ AX_C_CHECK_FLAG([-fvisibility=hidden],[],[],[CFLAGS="$CFLAGS -fvisibility=hidden"],[])
+-AX_C_CHECK_FLAG([-Werror],[],[],[CFLAGS="$CFLAGS -Werror"],[])
+ AX_C_CHECK_FLAG([-Wall],[],[],[CFLAGS="$CFLAGS -Wall"],[])
+ AX_C_CHECK_FLAG([-Wextra],[],[],[CFLAGS="$CFLAGS -Wextra"],[])
+ AX_C_CHECK_FLAG([-Wcast-qual],[],[],[CFLAGS="$CFLAGS -Wcast-qual"],[])
diff --git a/projects/Odroid_C2/patches/kodi/kodi-0001-owersun-odroid.patch b/projects/Odroid_C2/patches/kodi/kodi-0001-owersun-odroid.patch
new file mode 100644
index 0000000000..cfcbe176db
--- /dev/null
+++ b/projects/Odroid_C2/patches/kodi/kodi-0001-owersun-odroid.patch
@@ -0,0 +1,2709 @@
+commit a1dae5b39eb3d5366d2da49e0b56c5bbeb51c8e1
+Author: Owersun
+Date: Sat Apr 23 22:34:30 2016 +0200
+
+ Odroids: All the codecs and display drivers
+
+diff --git a/configure.ac b/configure.ac
+index c4e83a2..48bfa43 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -84,7 +84,7 @@ AC_DEFUN([XB_FIND_SONAME],
+ for path in $gcc_lib_path $env_lib_path $host_lib_path; do
+ lib=[`ls -- $path/lib$2.dylib 2>/dev/null`]
+ if test x$lib != x; then
+- # we want the path/name that is embedded in the dylib
++ # we want the path/name that is embedded in the dylib
+ $1_FILENAME=[`otool -L $lib | grep -v lib$2.dylib | grep lib$2 | awk '{V=1; print $V}'`]
+ $1_SONAME=[`basename $$1_FILENAME`]
+ fi
+@@ -218,6 +218,10 @@ libbluetooth_enabled="== libbluetooth enabled. =="
+ libbluetooth_disabled="== libbluetooth disabled. Bluetooth support will not be available. =="
+
+
++# Odroid stuff
++hybris_enabled="== Libhybris enabled. =="
++hybris_disabled="== Libhybris disabled. =="
++
+ AC_ARG_WITH([ffmpeg],
+ [AS_HELP_STRING([--with-ffmpeg],
+ [ffmpeg options: auto (search pkg-config or auto build), force (always build ffmpeg), shared (link dynamically), path_to_ffmpeg [default=force]])],
+@@ -379,7 +383,7 @@ AC_ARG_ENABLE([avahi],
+ [disable Avahi support (default is enabled if libavahi-common and libavahi-client is found)])],
+ [use_avahi=$enableval],
+ [use_avahi=yes])
+-
++
+ AC_ARG_ENABLE([mdnsembedded],
+ [AS_HELP_STRING([--disable-mdnsembedded],
+ [disable mDNSEmbedded support (default is auto)])],
+@@ -485,7 +489,7 @@ AC_ARG_ENABLE([breakpad],
+
+ AC_ARG_ENABLE([codec],
+ [AS_HELP_STRING([--enable-codec],
+- [enable additional codecs from a list of comma separated names, (default is none, choices are amcodec and imxvpu)])],
++ [enable additional codecs from a list of comma separated names, (default is none, choices are mfc, amcodec and imxvpu)])],
+ [add_codecs=$enableval],
+ [add_codecs=no])
+
+@@ -496,6 +500,13 @@ AC_ARG_ENABLE([libav-compat],
+ [use_libav_hacks=$enableval],
+ [use_libav_hacks=no])
+
++# Odroid stuff
++AC_ARG_ENABLE([hybris],
++ [AS_HELP_STRING([--enable-hybris],
++ [enable use of Libhybris (default is no) 'Linux only'])],
++ [use_hybris=$enableval],
++ [use_hybris=no])
++
+ ### End of external library options
+
+ if test "x$host_vendor" != "xapple"; then
+@@ -534,7 +545,7 @@ case $host in
+ use_gles=yes
+ use_optical_drive=no
+ use_x11=no
+- build_shared_lib=yes
++ build_shared_lib=yes
+ ;;
+ i*86*-linux-gnu*|i*86*-*-linux-uclibc*)
+ target_platform=target_linux
+@@ -794,7 +813,7 @@ elif test "$use_arch" = "arm"; then
+ CFLAGS="$CFLAGS -mno-apcs-stack-check"
+ CXXFLAGS="$CXXFLAGS -mno-apcs-stack-check"
+ if test "$use_tegra" = "yes"; then
+- # Compile for ARMv7a architecture, need to test gcc for vfpv3-d16 support
++ # Compile for ARMv7a architecture, need to test gcc for vfpv3-d16 support
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="-mfpu=vfpv3-d16"
+ AC_COMPILE_IFELSE(
+@@ -803,10 +822,10 @@ elif test "$use_arch" = "arm"; then
+ CXXFLAGS="$CXXFLAGS -Wno-psabi -Wa,-march=armv7a -mtune=cortex-a9 -mfpu=vfpv3-d16 -mthumb-interwork"
+ use_cpu=cortex-a9],
+ [ CFLAGS="$SAVE_CFLAGS -Wa,-march=armv6 -mtune=cortex-a8 -mthumb-interwork"
+- CXXFLAGS="$CXXFLAGS -Wa,-march=armv6 -mtune=cortex-a8 -mthumb-interwork"
++ CXXFLAGS="$CXXFLAGS -Wa,-march=armv6 -mtune=cortex-a8 -mthumb-interwork"
+ use_cpu=cortex-a8])
+ else
+- if test "$use_neon" = "yes"; then
++ if test "$use_neon" = "yes"; then
+ CFLAGS="$CFLAGS -mfpu=neon -mvectorize-with-neon-quad"
+ CXXFLAGS="$CXXFLAGS -mfpu=neon -mvectorize-with-neon-quad"
+ fi
+@@ -1496,6 +1515,23 @@ else
+ AC_MSG_NOTICE($libcap_disabled)
+ fi
+
++# Odroid stuff
++if test "x$use_hybris" != "xno"; then
++ AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX -DTARGET_HYBRIS")
++ USE_HYBRIS=1;
++ AC_DEFINE(HAS_EGLGLES, [1], [Define if supporting EGL based GLES Framebuffer])
++ AC_DEFINE(HAS_HYBRIS, [1], [Define if supporting Hybris based systems])
++ PKG_CHECK_MODULES([HWCOMPOSEREGL], [hwcomposer-egl >= 0.1],
++ [INCLUDES="$INCLUDES -I/usr/include/hybris $HWCOMPOSEREGL_CFLAGS"; LIBS="$LIBS $HWCOMPOSEREGL_LIBS"],
++ AC_MSG_ERROR($missing_library))
++ PKG_CHECK_MODULES([HYBRISEGL], [hybris-egl-platform >= 0.1],
++ [INCLUDES="$INCLUDES $HYBRISEGL_CFLAGS"; LIBS="$LIBS $HYBRISEGL_LIBS"],
++ AC_MSG_ERROR($missing_library))
++ PKG_CHECK_MODULES([LIBHARDWARE], [libhardware >= 0.1],
++ [INCLUDES="$INCLUDES $LIBHARDWARE_CFLAGS"; LIBS="$LIBS $LIBHARDWARE_LIBS -lsync -lmedia"],
++ AC_MSG_ERROR($missing_library))
++fi
++
+ # FFmpeg
+ FFMPEG_LIBNAMES="libavcodec >= 56.26.100
+ libavfilter >= 5.11.102
+@@ -1581,7 +1617,7 @@ fi
+
+ if test "$FFMPEG_FOUND" != "true"; then
+ PKG_CHECK_MODULES([FFMPEG], [$FFMPEG_LIBNAMES],
+- [INCLUDES="$INCLUDES $FFMPEG_CFLAGS"; LIBS="$LIBS $FFMPEG_LIBS"; FFMPEG_FOUND="true"],
++ [INCLUDES="$INCLUDES $FFMPEG_CFLAGS"; LIBS="$LIBS $FFMPEG_LIBS"; FFMPEG_FOUND="true"],
+ [AC_MSG_ERROR("ffmpeg not found")])
+ fi
+
+@@ -1736,6 +1772,9 @@ esac
+ # remember to convert commas to spaces
+ for codecs in `echo $add_codecs | sed 's/,/ /g'`; do
+ case $codecs in
++ *mfc*)
++ XB_ADD_CODEC([MFC], [mfc], [$codecs])
++ ;;
+ *amcodec*)
+ AC_CHECK_HEADER([amcodec/codec_error.h],, AC_MSG_ERROR($missing_headers))
+ XB_ADD_CODEC([LIBAMCODEC], [amcodec], [$codecs])
+@@ -2076,7 +2115,7 @@ else
+ fi
+
+ if test "x$use_airtunes" != "xno"; then
+- final_message="$final_message\n AirTunes support (libshairplay):\tYes"
++ final_message="$final_message\n AirTunes support (libshairplay):\tYes"
+ else
+ final_message="$final_message\n AirTunes support:\tNo"
+ fi
+@@ -2139,6 +2178,13 @@ else
+ final_message="$final_message\n additional codecs:\tNo"
+ fi
+
++# Odroid stuff
++if test "x$use_hybris" != "xno"; then
++ final_message="$final_message\n Odroid Hybris support:\tYes"
++else
++ final_message="$final_message\n Odroid Hybris support:\tNo"
++fi
++
+ ### External libraries messages
+
+ if test "$host_vendor" = "apple" ; then
+@@ -2335,6 +2381,7 @@ AC_SUBST(USE_SSE4)
+ AC_SUBST(USE_MMAL)
+ AC_SUBST(USE_X11)
+ AC_SUBST(USE_BREAKPAD)
++AC_SUBST(USE_HYBRIS)
+ AC_SUBST(CROSS_COMPILING)
+
+ # pushd and popd are not available in other shells besides bash, so implement
+@@ -2393,7 +2440,7 @@ XB_CONFIG_MODULE([lib/cpluff], [
+ --host=$host_alias \
+ --build=$build_alias \
+ --target=$target_alias CFLAGS="$CFLAGS" CC="$CC" CXX="$CXX" LDFLAGS="$LDFLAGS" LIBS=""
+- #LDFLAGS="$LDFLAGS -Wl,-read_only_relocs,suppress"
++ #LDFLAGS="$LDFLAGS -Wl,-read_only_relocs,suppress"
+ ], [0])
+
+ XB_CONFIG_MODULE([lib/gtest], [
+diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp b/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp
+index 95db8cf..420a6d3 100644
+--- a/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp
++++ b/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp
+@@ -490,6 +490,7 @@ snd_pcm_chmap_t* CAESinkALSA::SelectALSAChannelMap(const CAEChannelInfo& info)
+
+ void CAESinkALSA::GetAESParams(const AEAudioFormat& format, std::string& params)
+ {
++#if !defined(HAS_LIBAMCODEC)
+ if (m_passthrough)
+ params = "AES0=0x06";
+ else
+@@ -506,6 +507,7 @@ void CAESinkALSA::GetAESParams(const AEAudioFormat& format, std::string& params)
+ else if (format.m_sampleRate == 44100) params += ",AES3=0x00";
+ else if (format.m_sampleRate == 32000) params += ",AES3=0x03";
+ else params += ",AES3=0x01";
++#endif
+ }
+
+ bool CAESinkALSA::Initialize(AEAudioFormat &format, std::string &device)
+@@ -744,16 +746,16 @@ bool CAESinkALSA::InitializeHW(const ALSAConfig &inconfig, ALSAConfig &outconfig
+ snd_pcm_hw_params_get_buffer_size_max(hw_params, &bufferSize);
+ snd_pcm_hw_params_get_period_size_max(hw_params, &periodSize, NULL);
+
+- /*
+- We want to make sure, that we have max 200 ms Buffer with
++ /*
++ We want to make sure, that we have max 200 ms Buffer with
+ a periodSize of approx 50 ms. Choosing a higher bufferSize
+ will cause problems with menu sounds. Buffer will be increased
+ after those are fixed.
+ */
+ periodSize = std::min(periodSize, (snd_pcm_uframes_t) sampleRate / 20);
+ bufferSize = std::min(bufferSize, (snd_pcm_uframes_t) sampleRate / 5);
+-
+- /*
++
++ /*
+ According to upstream we should set buffer size first - so make sure it is always at least
+ 4x period size to not get underruns (some systems seem to have issues with only 2 periods)
+ */
+@@ -772,7 +774,7 @@ bool CAESinkALSA::InitializeHW(const ALSAConfig &inconfig, ALSAConfig &outconfig
+ snd_pcm_hw_params_copy(hw_params_copy, hw_params); // restore working copy
+ CLog::Log(LOGDEBUG, "CAESinkALSA::InitializeHW - Request: Failed to limit periodSize to %lu", periodSizeMax);
+ }
+-
++
+ // first trying bufferSize, PeriodSize
+ // for more info see here:
+ // http://mailman.alsa-project.org/pipermail/alsa-devel/2009-September/021069.html
+@@ -782,22 +784,24 @@ bool CAESinkALSA::InitializeHW(const ALSAConfig &inconfig, ALSAConfig &outconfig
+ snd_pcm_uframes_t periodSizeTemp, bufferSizeTemp;
+ periodSizeTemp = periodSize;
+ bufferSizeTemp = bufferSize;
+- if (snd_pcm_hw_params_set_buffer_size_near(m_pcm, hw_params_copy, &bufferSize) != 0
+- || snd_pcm_hw_params_set_period_size_near(m_pcm, hw_params_copy, &periodSize, NULL) != 0
++ int dir = 0;
++
++ if (snd_pcm_hw_params_set_period_size_near(m_pcm, hw_params_copy, &periodSize, &dir) != 0
++ || snd_pcm_hw_params_set_buffer_size_near(m_pcm, hw_params_copy, &bufferSize) != 0
+ || snd_pcm_hw_params(m_pcm, hw_params_copy) != 0)
+ {
+ bufferSize = bufferSizeTemp;
+ periodSize = periodSizeTemp;
+ // retry with PeriodSize, bufferSize
+ snd_pcm_hw_params_copy(hw_params_copy, hw_params); // restore working copy
+- if (snd_pcm_hw_params_set_period_size_near(m_pcm, hw_params_copy, &periodSize, NULL) != 0
++ if (snd_pcm_hw_params_set_period_size_near(m_pcm, hw_params_copy, &periodSize, &dir) != 0
+ || snd_pcm_hw_params_set_buffer_size_near(m_pcm, hw_params_copy, &bufferSize) != 0
+ || snd_pcm_hw_params(m_pcm, hw_params_copy) != 0)
+ {
+ // try only periodSize
+ periodSize = periodSizeTemp;
+ snd_pcm_hw_params_copy(hw_params_copy, hw_params); // restore working copy
+- if(snd_pcm_hw_params_set_period_size_near(m_pcm, hw_params_copy, &periodSize, NULL) != 0
++ if(snd_pcm_hw_params_set_period_size_near(m_pcm, hw_params_copy, &periodSize, &dir) != 0
+ || snd_pcm_hw_params(m_pcm, hw_params_copy) != 0)
+ {
+ // try only BufferSize
+@@ -819,7 +823,7 @@ bool CAESinkALSA::InitializeHW(const ALSAConfig &inconfig, ALSAConfig &outconfig
+ snd_pcm_get_params(m_pcm, &bufferSize, &periodSize);
+ }
+ }
+-
++
+ CLog::Log(LOGDEBUG, "CAESinkALSA::InitializeHW - Got: periodSize %lu, bufferSize %lu", periodSize, bufferSize);
+
+ /* set the format parameters */
+@@ -1301,6 +1305,15 @@ void CAESinkALSA::EnumerateDevicesEx(AEDeviceInfoList &list, bool force)
+
+ AEDeviceType CAESinkALSA::AEDeviceTypeFromName(const std::string &name)
+ {
++
++#if defined(HAS_LIBAMCODEC)
++ // ugly workaround to show DTS / AC3 caps
++ // but don't run into multi channel issues
++ // as we can only open 2 pcm channels
++ // God, forgive me I wrote this
++ return AE_DEVTYPE_IEC958;
++#endif
++
+ if (name.substr(0, 4) == "hdmi")
+ return AE_DEVTYPE_HDMI;
+ else if (name.substr(0, 6) == "iec958" || name.substr(0, 5) == "spdif")
+@@ -1405,9 +1418,9 @@ void CAESinkALSA::EnumerateDevice(AEDeviceInfoList &list, const std::string &dev
+
+ if (badHDMI)
+ {
+- /*
+- * Warn about disconnected devices, but keep them enabled
+- * Detection can go wrong on Intel, Nvidia and on all
++ /*
++ * Warn about disconnected devices, but keep them enabled
++ * Detection can go wrong on Intel, Nvidia and on all
+ * AMD (fglrx) hardware, so it is not safe to close those
+ * handles
+ */
+diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/DVDFactoryCodec.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/DVDFactoryCodec.cpp
+index 355257c..c6eccca 100644
+--- a/xbmc/cores/VideoPlayer/DVDCodecs/DVDFactoryCodec.cpp
++++ b/xbmc/cores/VideoPlayer/DVDCodecs/DVDFactoryCodec.cpp
+@@ -45,6 +45,9 @@
+ #include "Video/DVDVideoCodecAndroidMediaCodec.h"
+ #include "platform/android/activity/AndroidFeatures.h"
+ #endif
++#if defined(HAS_MFC)
++#include "Video/DVDVideoCodecMFC.h"
++#endif
+ #include "Audio/DVDAudioCodecFFmpeg.h"
+ #include "Audio/DVDAudioCodecPassthrough.h"
+ #include "Overlay/DVDOverlayCodecSSA.h"
+@@ -158,6 +161,8 @@ CDVDVideoCodec* CDVDFactoryCodec::CreateVideoCodec(CDVDStreamInfo &hint, CProces
+ pCodec = OpenCodec(new CDVDVideoCodecOpenMax(processInfo), hint, options);
+ #elif defined(HAS_MMAL)
+ pCodec = OpenCodec(new CMMALVideo(processInfo), hint, options);
++#elif defined(HAS_MFC)
++ pCodec = OpenCodec(new CDVDVideoCodecMFC(processInfo), hint, options);
+ #endif
+ if (pCodec)
+ return pCodec;
+diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/AMLCodec.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/Video/AMLCodec.cpp
+index 0a97893..f4c4bc5 100644
+--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/AMLCodec.cpp
++++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/AMLCodec.cpp
+@@ -361,7 +361,7 @@ void dumpfile_write(am_private_t *para, void* buf, int bufsiz)
+ }
+
+ if (para->dumpdemux && para->dumpfile != -1)
+- write(para->dumpfile, buf, bufsiz);
++ int ret = write(para->dumpfile, buf, bufsiz);
+ }
+
+ /*************************************************************************/
+@@ -387,13 +387,14 @@ static int64_t get_pts_video()
+
+ static int set_pts_pcrscr(int64_t value)
+ {
++ int ret;
+ int fd = open("/sys/class/tsync/pts_pcrscr", O_WRONLY);
+ if (fd >= 0)
+ {
+ char pts_str[64];
+ unsigned long pts = (unsigned long)value;
+ sprintf(pts_str, "0x%lx", pts);
+- write(fd, pts_str, strlen(pts_str));
++ ret = write(fd, pts_str, strlen(pts_str));
+ close(fd);
+ return 0;
+ }
+@@ -714,7 +715,7 @@ int write_av_packet(am_private_t *para, am_packet_t *pkt)
+ }
+ pkt->newflag = 0;
+ }
+-
++
+ buf = pkt->data;
+ size = pkt->data_size ;
+ if (size == 0 && pkt->isvalid) {
+@@ -1566,7 +1567,7 @@ bool CAMLCodec::OpenDecoder(CDVDStreamInfo &hints)
+ // h264 in an avi file
+ if (m_hints.ptsinvalid)
+ am_private->gcodec.param = (void*)(EXTERNAL_PTS | SYNC_OUTSIDE);
+- break;
++ break;
+ case VFORMAT_REAL:
+ am_private->stream_type = AM_STREAM_RM;
+ am_private->vcodec.noblock = 1;
+@@ -1631,7 +1632,7 @@ bool CAMLCodec::OpenDecoder(CDVDStreamInfo &hints)
+
+ Create();
+
+- m_display_rect = CRect(0, 0, CDisplaySettings::GetInstance().GetCurrentResolutionInfo().iWidth, CDisplaySettings::GetInstance().GetCurrentResolutionInfo().iHeight);
++ m_display_rect = CRect(0, 0, CDisplaySettings::GetInstance().GetCurrentResolutionInfo().iScreenWidth, CDisplaySettings::GetInstance().GetCurrentResolutionInfo().iScreenHeight);
+
+ std::string strScaler;
+ SysfsUtils::GetString("/sys/class/ppmgr/ppscaler", strScaler);
+@@ -2112,7 +2113,6 @@ void CAMLCodec::SetVideoRect(const CRect &SrcRect, const CRect &DestRect)
+ int diff = (int) ((dst_rect.Height() - dst_rect.Width()) / 2);
+ dst_rect = CRect(DestRect.x1 - diff, DestRect.y1, DestRect.x2 + diff, DestRect.y2);
+ }
+-
+ }
+
+ if (m_dst_rect != dst_rect)
+@@ -2134,7 +2134,7 @@ void CAMLCodec::SetVideoRect(const CRect &SrcRect, const CRect &DestRect)
+ #ifdef TARGET_ANDROID
+ display = m_display_rect;
+ #else
+- display = gui;
++ display = CRect(0, 0, CDisplaySettings::GetInstance().GetCurrentResolutionInfo().iScreenWidth, CDisplaySettings::GetInstance().GetCurrentResolutionInfo().iScreenHeight);;
+ #endif
+ if (gui != display)
+ {
+@@ -2206,6 +2206,8 @@ void CAMLCodec::SetVideoRect(const CRect &SrcRect, const CRect &DestRect)
+ std::string s_gui = StringUtils::Format("%i,%i,%i,%i",
+ (int)gui.x1, (int)gui.y1,
+ (int)gui.Width(), (int)gui.Height());
++ CLog::Log(LOGDEBUG, "CAMLCodec::SetVideoRect:SrcRect(%i,%i,%i,%i)", (int)SrcRect.x1, (int)SrcRect.y1, (int)SrcRect.Width(), (int)SrcRect.Height());
++ CLog::Log(LOGDEBUG, "CAMLCodec::SetVideoRect:DestRect(%i,%i,%i,%i)", (int)DestRect.x1, (int)DestRect.y1, (int)DestRect.Width(), (int)DestRect.Height());
+ CLog::Log(LOGDEBUG, "CAMLCodec::SetVideoRect:display(%s)", s_display.c_str());
+ CLog::Log(LOGDEBUG, "CAMLCodec::SetVideoRect:gui(%s)", s_gui.c_str());
+ CLog::Log(LOGDEBUG, "CAMLCodec::SetVideoRect:m_dst_rect(%s)", s_m_dst_rect.c_str());
+diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecMFC.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecMFC.cpp
+new file mode 100644
+index 0000000..900c5d8
+--- /dev/null
++++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecMFC.cpp
+@@ -0,0 +1,585 @@
++#include "system.h"
++
++#ifndef THIS_IS_NOT_XBMC
++ #if (defined HAVE_CONFIG_H) && (!defined WIN32)
++ #include "config.h"
++ #endif
++ #include "DVDDemuxers/DVDDemux.h"
++ #include "DVDStreamInfo.h"
++ #include "DVDClock.h"
++ #include "guilib/GraphicContext.h"
++ #include "DVDCodecs/DVDCodecs.h"
++ #include "DVDCodecs/DVDCodecUtils.h"
++ #include "settings/Settings.h"
++ #include "settings/DisplaySettings.h"
++ #include "settings/AdvancedSettings.h"
++ #include "utils/log.h"
++#endif
++
++#include "DVDVideoCodecMFC.h"
++
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++
++#ifdef CLASSNAME
++#undef CLASSNAME
++#endif
++#define CLASSNAME "CDVDVideoCodecMFC"
++
++CDVDVideoCodecMFC::CDVDVideoCodecMFC(CProcessInfo &processInfo) : CDVDVideoCodec(processInfo) {
++
++ m_iDecoderHandle = NULL;
++ m_iConverterHandle = NULL;
++ m_MFCOutput = NULL;
++ m_MFCCapture = NULL;
++ m_FIMCOutput = NULL;
++ m_FIMCCapture = NULL;
++
++ m_Buffer = NULL;
++ m_BufferNowOnScreen = NULL;
++
++ memzero(m_videoBuffer);
++
++}
++
++CDVDVideoCodecMFC::~CDVDVideoCodecMFC() {
++
++ Dispose();
++
++}
++
++bool CDVDVideoCodecMFC::OpenDevices() {
++ DIR *dir;
++
++ if ((dir = opendir ("/sys/class/video4linux/")) != NULL) {
++ struct dirent *ent;
++ while ((ent = readdir (dir)) != NULL) {
++ if (strncmp(ent->d_name, "video", 5) == 0) {
++ char *p;
++ char name[64];
++ char devname[64];
++ char sysname[64];
++ char drivername[32];
++ char target[1024];
++ int ret;
++
++ snprintf(sysname, 64, "/sys/class/video4linux/%s", ent->d_name);
++ snprintf(name, 64, "/sys/class/video4linux/%s/name", ent->d_name);
++
++ FILE* fp = fopen(name, "r");
++ if (fgets(drivername, 32, fp) != NULL) {
++ p = strchr(drivername, '\n');
++ if (p != NULL)
++ *p = '\0';
++ } else {
++ fclose(fp);
++ continue;
++ }
++ fclose(fp);
++
++ ret = readlink(sysname, target, sizeof(target));
++ if (ret < 0)
++ continue;
++ target[ret] = '\0';
++ p = strrchr(target, '/');
++ if (p == NULL)
++ continue;
++
++ sprintf(devname, "/dev/%s", ++p);
++
++ if (!m_iDecoderHandle && strstr(drivername, "mfc") != NULL && strstr(drivername, "dec") != NULL) {
++ int fd = open(devname, O_RDWR | O_NONBLOCK, 0);
++ if (fd > -1) {
++ struct v4l2_capability cap;
++ memzero(cap);
++ if (ioctl(fd, VIDIOC_QUERYCAP, &cap) == 0)
++ if (cap.capabilities & V4L2_CAP_STREAMING &&
++ (cap.capabilities & V4L2_CAP_VIDEO_M2M_MPLANE ||
++ (cap.capabilities & (V4L2_CAP_VIDEO_CAPTURE_MPLANE | V4L2_CAP_VIDEO_OUTPUT_MPLANE)))) {
++ m_iDecoderHandle = new V4l2Device;
++ m_iDecoderHandle->device = fd;
++ strcpy(m_iDecoderHandle->name, drivername);
++ CLog::Log(LOGDEBUG, "%s::%s - MFC Found %s %s", CLASSNAME, __func__, drivername, devname);
++ struct v4l2_format fmt;
++ memzero(fmt);
++ fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
++ fmt.fmt.pix_mp.pixelformat = V4L2_PIX_FMT_NV12M;
++ if (ioctl(fd, VIDIOC_TRY_FMT, &fmt) == 0) {
++ CLog::Log(LOGDEBUG, "%s::%s - Direct decoding to untiled picture on device %s is supported, no conversion needed", CLASSNAME, __func__, m_iDecoderHandle->name);
++ delete m_iConverterHandle;
++ m_iConverterHandle = NULL;
++ return true;
++ }
++ }
++ }
++ if (!m_iDecoderHandle)
++ close(fd);
++ }
++ if (!m_iConverterHandle && strstr(drivername, "fimc") != NULL && strstr(drivername, "m2m") != NULL) {
++ int fd = open(devname, O_RDWR | O_NONBLOCK, 0);
++ if (fd > -1) {
++ struct v4l2_capability cap;
++ memzero(cap);
++ if (ioctl(fd, VIDIOC_QUERYCAP, &cap) == 0)
++ if (cap.capabilities & V4L2_CAP_STREAMING &&
++ (cap.capabilities & V4L2_CAP_VIDEO_M2M_MPLANE ||
++ (cap.capabilities & (V4L2_CAP_VIDEO_CAPTURE_MPLANE | V4L2_CAP_VIDEO_OUTPUT_MPLANE)))) {
++ m_iConverterHandle = new V4l2Device;
++ m_iConverterHandle->device = fd;
++ strcpy(m_iConverterHandle->name, drivername);
++ CLog::Log(LOGDEBUG, "%s::%s - FIMC Found %s %s", CLASSNAME, __func__, drivername, devname);
++ }
++ }
++ if (!m_iConverterHandle)
++ close(fd);
++ }
++ if (m_iDecoderHandle && m_iConverterHandle) {
++ closedir (dir);
++ return true;
++ }
++ }
++ }
++ closedir (dir);
++ }
++
++ return false;
++
++}
++
++void CDVDVideoCodecMFC::Dispose() {
++
++ CLog::Log(LOGDEBUG, "%s::%s - Starting cleanup", CLASSNAME, __func__);
++
++ delete m_BufferNowOnScreen;
++ delete m_Buffer;
++
++ m_Buffer = NULL;
++ m_BufferNowOnScreen = NULL;
++
++ delete m_FIMCCapture;
++ delete m_FIMCOutput;
++ delete m_MFCCapture;
++ delete m_MFCOutput;
++
++ m_MFCOutput = NULL;
++ m_MFCCapture = NULL;
++ m_FIMCOutput = NULL;
++ m_FIMCCapture = NULL;
++
++ if (m_iConverterHandle) {
++ close(m_iConverterHandle->device);
++ delete m_iConverterHandle;
++ m_iConverterHandle = NULL;
++ }
++
++ if (m_iDecoderHandle) {
++ close(m_iDecoderHandle->device);
++ delete m_iDecoderHandle;
++ m_iDecoderHandle = NULL;
++ }
++
++}
++
++bool CDVDVideoCodecMFC::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options) {
++ struct v4l2_format fmt;
++ struct v4l2_crop crop;
++ struct V4l2SinkBuffer sinkBuffer;
++ V4l2Device *finalSink = NULL;
++ int finalFormat = -1;
++ int resultVideoWidth;
++ int resultVideoHeight;
++ int resultLineSize;
++ unsigned int extraSize = 0;
++ uint8_t *extraData = NULL;
++
++ m_hints = hints;
++ if (m_hints.software)
++ return false;
++
++ Dispose();
++
++ m_Buffer = new V4l2SinkBuffer();
++ m_BufferNowOnScreen = new V4l2SinkBuffer();
++ m_BufferNowOnScreen->iIndex = -1;
++ m_bVideoConvert = false;
++ m_bDropPictures = false;
++ memzero(m_videoBuffer);
++
++ if (!OpenDevices()) {
++ CLog::Log(LOGERROR, "%s::%s - No Exynos MFC Decoder/Converter found", CLASSNAME, __func__);
++ return false;
++ }
++
++ m_bVideoConvert = m_converter.Open(m_hints.codec, (uint8_t *)m_hints.extradata, m_hints.extrasize, true);
++
++ if(m_bVideoConvert) {
++ if(m_converter.GetExtraData() != NULL && m_converter.GetExtraSize() > 0) {
++ extraSize = m_converter.GetExtraSize();
++ extraData = m_converter.GetExtraData();
++ }
++ } else {
++ if(m_hints.extrasize > 0 && m_hints.extradata != NULL) {
++ extraSize = m_hints.extrasize;
++ extraData = (uint8_t*)m_hints.extradata;
++ }
++ }
++
++ // Test what formats we can get finally
++ // If converter is present, it is our final sink
++ (m_iConverterHandle) ? finalSink = m_iConverterHandle : finalSink = m_iDecoderHandle;
++ // Test NV12 2 Planes Y/CbCr
++ memzero(fmt);
++ fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
++ fmt.fmt.pix_mp.pixelformat = V4L2_PIX_FMT_NV12M;
++ if (ioctl(finalSink->device, VIDIOC_TRY_FMT, &fmt) == 0)
++ finalFormat = V4L2_PIX_FMT_NV12M;
++ memzero(fmt);
++/*
++ // Test YUV420 3 Planes Y/Cb/Cr
++ fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
++ fmt.fmt.pix_mp.pixelformat = V4L2_PIX_FMT_YUV420M;
++ if (ioctl(finalSink->device, VIDIOC_TRY_FMT, &fmt) == 0)
++ finalFormat = V4L2_PIX_FMT_YUV420M;
++*/
++
++ // No suitable output formats available
++ if (finalFormat < 0) {
++ CLog::Log(LOGERROR, "%s::%s - No suitable format on %s to convert to found", CLASSNAME, __func__, finalSink->name);
++ return false;
++ }
++
++ // Create MFC Output sink (the one where encoded frames are feed)
++ m_MFCOutput = new CLinuxV4l2Sink(m_iDecoderHandle, V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE);
++ memzero(fmt);
++ switch(m_hints.codec)
++ {
++ case AV_CODEC_ID_VC1:
++ fmt.fmt.pix_mp.pixelformat = V4L2_PIX_FMT_VC1_ANNEX_G;
++ m_name = "mfc-vc1";
++ break;
++ case AV_CODEC_ID_MPEG1VIDEO:
++ fmt.fmt.pix_mp.pixelformat = V4L2_PIX_FMT_MPEG1;
++ m_name = "mfc-mpeg1";
++ break;
++ case AV_CODEC_ID_MPEG2VIDEO:
++ fmt.fmt.pix_mp.pixelformat = V4L2_PIX_FMT_MPEG2;
++ m_name = "mfc-mpeg2";
++ break;
++ case AV_CODEC_ID_MPEG4:
++ fmt.fmt.pix_mp.pixelformat = V4L2_PIX_FMT_MPEG4;
++ m_name = "mfc-mpeg4";
++ break;
++ case AV_CODEC_ID_H263:
++ fmt.fmt.pix_mp.pixelformat = V4L2_PIX_FMT_H263;
++ m_name = "mfc-h263";
++ break;
++ case AV_CODEC_ID_H264:
++ fmt.fmt.pix_mp.pixelformat = V4L2_PIX_FMT_H264;
++ m_name = "mfc-h264";
++ break;
++ default:
++ return false;
++ break;
++ }
++ fmt.fmt.pix_mp.plane_fmt[0].sizeimage = BUFFER_SIZE;
++ // Set encoded format
++ if (!m_MFCOutput->SetFormat(&fmt))
++ return false;
++ // Init with number of input buffers predefined
++ if (!m_MFCOutput->Init(INPUT_BUFFERS))
++ return false;
++
++ // Get empty buffer to fill
++ if (!m_MFCOutput->GetBuffer(&sinkBuffer))
++ return false;
++ // Fill it with the header
++ sinkBuffer.iBytesUsed[0] = extraSize;
++ memcpy(sinkBuffer.cPlane[0], extraData, extraSize);
++ // Enqueue buffer
++ if (!m_MFCOutput->PushBuffer(&sinkBuffer))
++ return false;
++
++ // Create MFC Capture sink (the one from which decoded frames are read)
++ m_MFCCapture = new CLinuxV4l2Sink(m_iDecoderHandle, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE);
++ memzero(fmt);
++ // If there is no converter set output format on the MFC Capture sink
++ if (!m_iConverterHandle) {
++ fmt.fmt.pix_mp.pixelformat = finalFormat;
++ if (!m_MFCCapture->SetFormat(&fmt))
++ return false;
++ }
++
++ // Turn on MFC Output with header in it to initialize MFC with all we just setup
++ m_MFCOutput->StreamOn(VIDIOC_STREAMON);
++
++ // Initialize MFC Capture
++ if (!m_MFCCapture->Init(0))
++ return false;
++ // Queue all buffers (empty) to MFC Capture
++ m_MFCCapture->QueueAll();
++
++ // Read the format of MFC Capture
++ if (!m_MFCCapture->GetFormat(&fmt))
++ return false;
++ // Size of resulting picture coming out of MFC
++ // It will be aligned by 16 since the picture is tiled
++ // We need this to know where to split buffer line by line
++ resultLineSize = fmt.fmt.pix_mp.width;
++ // Get MFC capture crop settings
++ if (!m_MFCCapture->GetCrop(&crop))
++ return false;
++ // This is the picture boundaries we are interested in, everything outside is alignement because of tiled MFC output
++ resultVideoWidth = crop.c.width;
++ resultVideoHeight = crop.c.height;
++
++ // Turn on MFC Capture
++ m_MFCCapture->StreamOn(VIDIOC_STREAMON);
++
++ // If converter is needed (we need to untile the picture from format MFC produces it)
++ if (m_iConverterHandle) {
++ // Create FIMC Output sink
++ m_FIMCOutput = new CLinuxV4l2Sink(m_iConverterHandle, V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE);
++ // Set the FIMC Output format to the one read from MFC
++ if (!m_FIMCOutput->SetFormat(&fmt))
++ return false;
++ // Set the FIMC Output crop to the one read from MFC
++ if (!m_FIMCOutput->SetCrop(&crop))
++ return false;
++ // Init FIMC Output and link it to buffers of MFC Capture
++ if (!m_FIMCOutput->Init(m_MFCCapture))
++ return false;
++ // Get FIMC Output crop settings
++ if (!m_FIMCOutput->GetCrop(&crop))
++ return false;
++
++ // Create FIMC Capture sink
++ m_FIMCCapture = new CLinuxV4l2Sink(m_iConverterHandle, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE);
++ // Set the final picture format and the same picture dimension settings to FIMC Capture
++ // as picture crop coming from MFC (original picture dimensions)
++ memzero(fmt);
++ fmt.fmt.pix_mp.pixelformat = finalFormat;
++ fmt.fmt.pix_mp.width = crop.c.width;
++ fmt.fmt.pix_mp.height = crop.c.height;
++ fmt.fmt.pix_mp.field = V4L2_FIELD_ANY;
++ if (!m_FIMCCapture->SetFormat(&fmt))
++ return false;
++ // Init FIMC capture with number of buffers predefined
++ if (!m_FIMCCapture->Init(OUTPUT_BUFFERS))
++ return false;
++
++ // Queue all buffers (empty) to FIMC Capture
++ m_FIMCCapture->QueueAll();
++
++ // Read FIMC capture format settings
++ if (!m_FIMCCapture->GetFormat(&fmt))
++ return false;
++ resultLineSize = fmt.fmt.pix_mp.width;
++ // Read FIMC capture crop settings
++ if (!m_FIMCCapture->GetCrop(&crop))
++ return false;
++ resultVideoWidth = crop.c.width;
++ resultVideoHeight = crop.c.height;
++
++ // Turn on FIMC Output and Capture enabling the converter
++ m_FIMCOutput->StreamOn(VIDIOC_STREAMON);
++ m_FIMCCapture->StreamOn(VIDIOC_STREAMON);
++ }
++
++ m_videoBuffer.iFlags = DVP_FLAG_ALLOCATED;
++
++ m_videoBuffer.color_range = 0;
++ m_videoBuffer.color_matrix = 4;
++
++ m_videoBuffer.iDisplayWidth = resultVideoWidth;
++ m_videoBuffer.iDisplayHeight = resultVideoHeight;
++ m_videoBuffer.iWidth = resultVideoWidth;
++ m_videoBuffer.iHeight = resultVideoHeight;
++
++ m_videoBuffer.data[0] = NULL;
++ m_videoBuffer.data[1] = NULL;
++ m_videoBuffer.data[2] = NULL;
++ m_videoBuffer.data[3] = NULL;
++
++ m_videoBuffer.pts = DVD_NOPTS_VALUE;
++ m_videoBuffer.dts = DVD_NOPTS_VALUE;
++
++ m_videoBuffer.iLineSize[0] = resultLineSize;
++ m_videoBuffer.iLineSize[3] = 0;
++
++ if (finalFormat == V4L2_PIX_FMT_NV12M) {
++ m_videoBuffer.format = RENDER_FMT_NV12;
++ m_videoBuffer.iLineSize[1] = resultLineSize;
++ m_videoBuffer.iLineSize[2] = 0;
++ } else if (finalFormat == V4L2_PIX_FMT_YUV420M) {
++ /*
++ Due to BUG in MFC v8 (-XU3) firmware the Y plane of the picture has the right line size,
++ but the U and V planes line sizes are actually halves of Y plane line size padded to 32
++ This is pure workaround for -XU3 MFCv8 firmware "MFC v8.0, F/W: 14yy, 01mm, 13dd (D)
++ Seems that only MPEG2 is affected
++ */
++ // Only on -XU3 there are no converter, but the output format can be YUV420
++ // So this is the easiest way to distinguish -XU3 from -U3 with FIMC
++ if (!m_iConverterHandle && m_hints.codec == AV_CODEC_ID_MPEG2VIDEO)
++ resultLineSize = resultLineSize + (32 - resultLineSize%32);
++
++ m_videoBuffer.format = RENDER_FMT_YUV420P;
++ m_videoBuffer.iLineSize[1] = resultLineSize >> 1;
++ m_videoBuffer.iLineSize[2] = resultLineSize >> 1;
++ }
++
++ m_BufferNowOnScreen->iIndex = -1;
++ m_bCodecHealthy = true;
++
++ CLog::Log(LOGNOTICE, "%s::%s - MFC Setup succesfull (%dx%d, linesize %d, format 0x%x), start streaming", CLASSNAME, __func__, resultVideoWidth, resultVideoHeight, resultLineSize, finalFormat);
++
++ return true;
++
++}
++
++void CDVDVideoCodecMFC::SetDropState(bool bDrop) {
++
++ m_bDropPictures = bDrop;
++ if (m_bDropPictures)
++ m_videoBuffer.iFlags |= DVP_FLAG_DROPPED;
++ else
++ m_videoBuffer.iFlags &= ~DVP_FLAG_DROPPED;
++
++}
++
++int CDVDVideoCodecMFC::Decode(BYTE* pData, int iSize, double dts, double pts) {
++
++ if (m_hints.ptsinvalid)
++ pts = DVD_NOPTS_VALUE;
++
++ //unsigned int dtime = XbmcThreads::SystemClockMillis();
++ debug_log(LOGDEBUG, "%s::%s - input frame iSize %d, pts %lf, dts %lf", CLASSNAME, __func__, iSize, pts, dts);
++
++ if(pData) {
++ int demuxer_bytes = iSize;
++ uint8_t *demuxer_content = pData;
++
++ if(m_bVideoConvert) {
++ m_converter.Convert(demuxer_content, demuxer_bytes);
++ demuxer_bytes = m_converter.GetConvertSize();
++ demuxer_content = m_converter.GetConvertBuffer();
++ }
++
++ m_MFCOutput->Poll(1000/3); // Wait up to 0.3 of a second for buffer availability
++ if (m_MFCOutput->GetBuffer(m_Buffer)) {
++ debug_log(LOGDEBUG, "%s::%s - Got empty buffer %d from MFC Output, filling", CLASSNAME, __func__, m_Buffer->iIndex);
++ m_Buffer->iBytesUsed[0] = demuxer_bytes;
++ memcpy((uint8_t *)m_Buffer->cPlane[0], demuxer_content, m_Buffer->iBytesUsed[0]);
++ long* longPts = (long*)&pts;
++ m_Buffer->timeStamp.tv_sec = longPts[0];
++ m_Buffer->timeStamp.tv_usec = longPts[1];
++
++ if (!m_MFCOutput->PushBuffer(m_Buffer)) {
++ m_bCodecHealthy = false;
++ return VC_FLUSHED; // MFC unrecoverable error, reset needed
++ }
++ } else {
++ if (errno == EAGAIN)
++ CLog::Log(LOGERROR, "%s::%s - MFC OUTPUT All buffers are queued and busy, no space for new frame to decode. Very broken situation. Current encoded frame will be lost", CLASSNAME, __func__);
++ else {
++ m_bCodecHealthy = false;
++ return VC_FLUSHED; // MFC unrecoverable error, reset needed
++ }
++ }
++ }
++
++ // Get a buffer from MFC Capture
++ if (!m_MFCCapture->DequeueBuffer(m_Buffer)) {
++ if (errno == EAGAIN)
++ return VC_BUFFER;
++ else
++ return VC_ERROR;
++ }
++
++ if (m_bDropPictures) {
++
++ CLog::Log(LOGWARNING, "%s::%s - Dropping frame with index %d", CLASSNAME, __func__, m_Buffer->iIndex);
++ // Queue it back to MFC CAPTURE since the picture is dropped anyway
++ m_MFCCapture->PushBuffer(m_Buffer);
++ return VC_DROPPED | VC_BUFFER;
++
++ }
++
++ if (m_iConverterHandle) {
++ // Push the buffer got from MFC Capture to FIMC Output (decoded from decoder to converter)
++ if (!m_FIMCOutput->PushBuffer(m_Buffer)) {
++ m_bCodecHealthy = false;
++ return VC_FLUSHED; // FIMC unrecoverable error, reset needed
++ }
++ // Get a buffer from FIMC Capture
++ if (!m_FIMCCapture->DequeueBuffer(m_Buffer)) {
++ if (errno == EAGAIN)
++ return VC_BUFFER;
++ else
++ return VC_ERROR;
++ }
++ }
++
++ // We got a new buffer to show, so we can enqeue back the buffer wich was on screen
++ if (m_BufferNowOnScreen->iIndex > -1) {
++ if (m_iConverterHandle)
++ m_FIMCCapture->PushBuffer(m_BufferNowOnScreen);
++ else
++ m_MFCCapture->PushBuffer(m_BufferNowOnScreen);
++ m_BufferNowOnScreen->iIndex = -1;
++ }
++
++ long longPts[2] = { m_Buffer->timeStamp.tv_sec, m_Buffer->timeStamp.tv_usec };
++ m_videoBuffer.data[0] = (BYTE*)m_Buffer->cPlane[0];
++ m_videoBuffer.data[1] = (BYTE*)m_Buffer->cPlane[1];
++ m_videoBuffer.data[2] = (BYTE*)m_Buffer->cPlane[2];
++ m_videoBuffer.pts = *((double*)&longPts[0]);
++
++ std::swap(m_Buffer, m_BufferNowOnScreen);
++
++ if (m_iConverterHandle && m_FIMCOutput->DequeueBuffer(m_Buffer))
++ m_MFCCapture->PushBuffer(m_Buffer);
++
++ //debug_log("Decode time: %d", XbmcThreads::SystemClockMillis() - dtime);
++ // Picture is finally ready to be processed further and more info can be enqueued
++ return VC_PICTURE | VC_BUFFER;
++
++}
++
++void CDVDVideoCodecMFC::Reset() {
++
++ if (m_bCodecHealthy) {
++ CLog::Log(LOGDEBUG, "%s::%s - Codec Reset requested, but codec is healthy, doing soft-flush", CLASSNAME, __func__);
++ m_MFCOutput->SoftRestart();
++ m_MFCCapture->SoftRestart();
++ if (!m_iConverterHandle)
++ m_BufferNowOnScreen->iIndex = -1;
++ } else {
++ CLog::Log(LOGERROR, "%s::%s - Codec Reset. Reinitializing", CLASSNAME, __func__);
++ CDVDCodecOptions options;
++ // We need full MFC/FIMC reset with device reopening.
++ // I wasn't able to reinitialize both IP's without fully closing and reopening them.
++ // There are always some clips that cause MFC or FIMC go into state which cannot be reset without close/open
++ Open(m_hints, options);
++ }
++
++}
++
++bool CDVDVideoCodecMFC::GetPicture(DVDVideoPicture* pDvdVideoPicture) {
++
++ *pDvdVideoPicture = m_videoBuffer;
++ debug_log(LOGDEBUG, "%s::%s - output frame pts %lf", CLASSNAME, __func__, m_videoBuffer.pts);
++ return true;
++
++}
++
++bool CDVDVideoCodecMFC::ClearPicture(DVDVideoPicture* pDvdVideoPicture) {
++
++ return CDVDVideoCodec::ClearPicture(pDvdVideoPicture);
++
++}
+diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecMFC.h b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecMFC.h
+new file mode 100644
+index 0000000..679cf8c
+--- /dev/null
++++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecMFC.h
+@@ -0,0 +1,64 @@
++#pragma once
++
++#ifndef THIS_IS_NOT_XBMC
++ #include "DVDVideoCodec.h"
++ #include "DVDStreamInfo.h"
++ #include "utils/BitstreamConverter.h"
++ #include "xbmc/linux/LinuxV4l2Sink.h"
++#else
++ #include "xbmcstubs.h"
++ #include "LinuxV4l2Sink.h"
++#endif
++
++#ifndef V4L2_CAP_VIDEO_M2M_MPLANE
++ #define V4L2_CAP_VIDEO_M2M_MPLANE 0x00004000
++#endif
++
++#define BUFFER_SIZE 1048576 // Compressed frame size. 1080p mpeg4 10Mb/s can be >256k in size, so this is to make sure frame fits into the buffer
++ // For very unknown reason lesser than 1Mb buffer causes MFC to corrupt its own setup, setting inapropriate values
++#define INPUT_BUFFERS 3 // 3 input buffers. 2 is enough almost for everything, but on some heavy videos 3 makes a difference
++#define OUTPUT_BUFFERS 3 // Triple buffering for smooth output
++
++#define memzero(x) memset(&(x), 0, sizeof (x))
++
++class CDVDVideoCodecMFC : public CDVDVideoCodec
++{
++public:
++ CDVDVideoCodecMFC(CProcessInfo &processInfo);
++ virtual ~CDVDVideoCodecMFC();
++ virtual bool Open(CDVDStreamInfo &hints, CDVDCodecOptions &options);
++ virtual void Dispose();
++ virtual int Decode(BYTE* pData, int iSize, double dts, double pts);
++ virtual void Reset();
++ bool GetPictureCommon(DVDVideoPicture* pDvdVideoPicture);
++ virtual bool GetPicture(DVDVideoPicture* pDvdVideoPicture);
++ virtual bool ClearPicture(DVDVideoPicture* pDvdVideoPicture);
++ virtual void SetDropState(bool bDrop);
++ virtual const char* GetName() { return m_name.c_str(); }; // m_name is never changed after open
++
++protected:
++ std::string m_name;
++
++ bool m_bCodecHealthy;
++
++ V4l2Device *m_iDecoderHandle;
++ V4l2Device *m_iConverterHandle;
++
++ CLinuxV4l2Sink *m_MFCCapture;
++ CLinuxV4l2Sink *m_MFCOutput;
++ CLinuxV4l2Sink *m_FIMCCapture;
++ CLinuxV4l2Sink *m_FIMCOutput;
++
++ V4l2SinkBuffer *m_Buffer;
++ V4l2SinkBuffer *m_BufferNowOnScreen;
++
++ bool m_bVideoConvert;
++ CDVDStreamInfo m_hints;
++
++ CBitstreamConverter m_converter;
++ bool m_bDropPictures;
++
++ DVDVideoPicture m_videoBuffer;
++
++ bool OpenDevices();
++};
+diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/Makefile.in b/xbmc/cores/VideoPlayer/DVDCodecs/Video/Makefile.in
+index a1a3447..600f7d0 100644
+--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/Makefile.in
++++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/Makefile.in
+@@ -36,8 +36,11 @@ ifeq (@USE_MMAL@,1)
+ SRCS += MMALCodec.cpp MMALFFmpeg.cpp
+ endif
+
++ifeq (@USE_MFC@,1)
++SRCS += DVDVideoCodecMFC.cpp
++endif
++
+ LIB=Video.a
+
+ include @abs_top_srcdir@/Makefile.include
+ -include $(patsubst %.cpp,%.P,$(patsubst %.c,%.P,$(SRCS)))
+-
+diff --git a/xbmc/linux/LinuxV4l2Sink.cpp b/xbmc/linux/LinuxV4l2Sink.cpp
+new file mode 100644
+index 0000000..bd5201e
+--- /dev/null
++++ b/xbmc/linux/LinuxV4l2Sink.cpp
+@@ -0,0 +1,311 @@
++#include "system.h"
++
++#ifndef THIS_IS_NOT_XBMC
++ #if (defined HAVE_CONFIG_H) && (!defined WIN32)
++ #include "config.h"
++ #endif
++
++ #include "utils/log.h"
++#endif
++
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++
++#include "LinuxV4l2Sink.h"
++
++#ifdef CLASSNAME
++#undef CLASSNAME
++#endif
++#define CLASSNAME "CLinuxV4l2Sink"
++
++CLinuxV4l2Sink::CLinuxV4l2Sink(V4l2Device *device, enum v4l2_buf_type type) {
++ CLog::Log(LOGDEBUG, "%s::%s - Creating Sink, Device %s, Type %d", CLASSNAME, __func__, device->name, type);
++ m_Device = device;
++ m_Type = type;
++ m_NumBuffers = 0;
++ m_NumPlanes = 0;
++ m_Addresses = NULL;
++ m_Buffers = NULL;
++ m_Planes = NULL;
++}
++
++CLinuxV4l2Sink::~CLinuxV4l2Sink() {
++ CLog::Log(LOGDEBUG, "%s::%s - Destroying Sink, Device %s, Type %d", CLASSNAME, __func__, m_Device->name, m_Type);
++
++ StreamOn(VIDIOC_STREAMOFF);
++
++ if (m_Memory == V4L2_MEMORY_MMAP)
++ for (int i = 0; i < m_NumBuffers*m_NumPlanes; i++)
++ if(m_Addresses[i] != (unsigned long)MAP_FAILED)
++ if (munmap((void *)m_Addresses[i], m_Planes[i].length) == 0)
++ CLog::Log(LOGDEBUG, "%s::%s - Device %s, Munmapped Plane %d size %u at 0x%lx", CLASSNAME, __func__, m_Device->name, i, m_Planes[i].length, m_Addresses[i]);
++ if (m_Planes)
++ delete[] m_Planes;
++ if (m_Buffers)
++ delete[] m_Buffers;
++ if (m_Addresses)
++ delete[] m_Addresses;
++}
++
++// Init for MMAP buffers
++bool CLinuxV4l2Sink::Init(int buffersCount = 0) {
++ CLog::Log(LOGDEBUG, "%s::%s - Device %s, Type %d, Init MMAP %d buffers", CLASSNAME, __func__, m_Device->name, m_Type, buffersCount);
++ m_Memory = V4L2_MEMORY_MMAP;
++
++ struct v4l2_format format;
++ if (!GetFormat(&format))
++ return false;
++
++ if (buffersCount == 0 && m_Type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) {
++ struct v4l2_control ctrl;
++ ctrl.id = V4L2_CID_MIN_BUFFERS_FOR_CAPTURE;
++ if (ioctl(m_Device->device, VIDIOC_G_CTRL, &ctrl)) {
++ CLog::Log(LOGERROR, "%s::%s - Device %s, Type %d, Error getting number of buffers for capture (V4L2_CID_MIN_BUFFERS_FOR_CAPTURE VIDIOC_G_CTRL)", CLASSNAME, __func__, m_Device->name, m_Type);
++ return false;
++ }
++ buffersCount = (int)(ctrl.value * 1.5); //Most of the time we need 50% more extra capture buffers than device reported would be enough
++ }
++
++ m_NumBuffers = RequestBuffers(buffersCount);
++ if (m_NumBuffers < 1)
++ return false;
++ m_Buffers = new v4l2_buffer[m_NumBuffers];
++ m_Planes = new v4l2_plane[m_NumPlanes * m_NumBuffers];
++ m_Addresses = new unsigned long[m_NumPlanes * m_NumBuffers];
++ if (!QueryBuffers())
++ return false;
++ if (!MmapBuffers())
++ return false;
++ return true;
++}
++// Init for USERPTR buffers
++bool CLinuxV4l2Sink::Init(CLinuxV4l2Sink *sink) {
++ CLog::Log(LOGDEBUG, "%s::%s - Device %s, Type %d, Init UserPTR", CLASSNAME, __func__, m_Device->name, m_Type);
++ m_Memory = V4L2_MEMORY_USERPTR;
++
++ struct v4l2_format format;
++ if (!GetFormat(&format))
++ return false;
++
++ m_NumBuffers = sink->m_NumBuffers;
++ m_NumBuffers = RequestBuffers(m_NumBuffers);
++ if (m_NumBuffers < 1)
++ return false;
++ m_Buffers = new v4l2_buffer[m_NumBuffers];
++ m_Planes = new v4l2_plane[m_NumPlanes * m_NumBuffers];
++ m_Addresses = new unsigned long[m_NumPlanes * m_NumBuffers];
++ if (!QueryBuffers())
++ return false;
++ for (int i = 0; i < m_NumPlanes * m_NumBuffers; i++) {
++ m_Addresses[i] = sink->m_Addresses[i];
++ m_Planes[i].m.userptr = m_Addresses[i];
++ }
++ return true;
++}
++
++void CLinuxV4l2Sink::SoftRestart() {
++ StreamOn(VIDIOC_STREAMOFF);
++
++ while (!iFreeBuffers.empty())
++ iFreeBuffers.pop();
++ for (int i = 0; i < m_NumBuffers; i++)
++ iFreeBuffers.push(m_Buffers[i].index);
++
++ if (m_Type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE)
++ QueueAll();
++
++ StreamOn(VIDIOC_STREAMON);
++}
++
++bool CLinuxV4l2Sink::GetFormat(v4l2_format *format) {
++ memset(format, 0, sizeof(struct v4l2_format));
++ format->type = m_Type;
++ if (ioctl(m_Device->device, VIDIOC_G_FMT, format)) {
++ CLog::Log(LOGERROR, "%s::%s - Error getting sink format. Device %s, Type %d. (VIDIOC_G_FMT)", CLASSNAME, __func__, m_Device->name, m_Type);
++ return false;
++ }
++ m_NumPlanes = format->fmt.pix_mp.num_planes;
++ CLog::Log(LOGDEBUG, "%s::%s - G_FMT Device %s, Type %d format 0x%x (%dx%d), planes=%d, plane[0]=%d plane[1]=%d, plane[2]=%d", CLASSNAME, __func__, m_Device->name, format->type, format->fmt.pix_mp.pixelformat, format->fmt.pix_mp.width, format->fmt.pix_mp.height, format->fmt.pix_mp.num_planes, format->fmt.pix_mp.plane_fmt[0].sizeimage, format->fmt.pix_mp.plane_fmt[1].sizeimage, format->fmt.pix_mp.plane_fmt[2].sizeimage);
++ return true;
++}
++
++bool CLinuxV4l2Sink::SetFormat(v4l2_format *format) {
++ format->type = m_Type;
++ CLog::Log(LOGDEBUG, "%s::%s - S_FMT Device %s, Type %d format 0x%x (%dx%d), planes=%d, plane[0]=%d plane[1]=%d, plane[2]=%d", CLASSNAME, __func__, m_Device->name, format->type, format->fmt.pix_mp.pixelformat, format->fmt.pix_mp.width, format->fmt.pix_mp.height, format->fmt.pix_mp.num_planes, format->fmt.pix_mp.plane_fmt[0].sizeimage, format->fmt.pix_mp.plane_fmt[1].sizeimage, format->fmt.pix_mp.plane_fmt[2].sizeimage);
++ if (ioctl(m_Device->device, VIDIOC_S_FMT, format)) {
++ CLog::Log(LOGERROR, "%s::%s - Error setting sink format. Device %s, Type %d. (VIDIOC_G_FMT)", CLASSNAME, __func__, m_Device->name, m_Type);
++ return false;
++ }
++ return true;
++}
++
++bool CLinuxV4l2Sink::GetCrop(v4l2_crop *crop) {
++ memset(crop, 0, sizeof(struct v4l2_crop));
++ crop->type = m_Type;
++ if (ioctl(m_Device->device, VIDIOC_G_CROP, crop)) {
++ CLog::Log(LOGERROR, "%s::%s - Error getting sink crop. Device %s, Type %d. (VIDIOC_G_CROP)", CLASSNAME, __func__, m_Device->name, m_Type);
++ return false;
++ }
++ CLog::Log(LOGDEBUG, "%s::%s - G_CROP Device %s, Type %d, crop (%dx%d)", CLASSNAME, __func__, m_Device->name, crop->type, crop->c.width, crop->c.height);
++ return true;
++}
++
++bool CLinuxV4l2Sink::SetCrop(v4l2_crop *crop) {
++ crop->type = m_Type;
++ CLog::Log(LOGDEBUG, "%s::%s - S_CROP Device %s, Type %d, crop (%dx%d)", CLASSNAME, __func__, m_Device->name, crop->type, crop->c.width, crop->c.height);
++ if (ioctl(m_Device->device, VIDIOC_S_CROP, crop)) {
++ CLog::Log(LOGERROR, "%s::%s - Error setting sink crop. Device %s, Type %d. (VIDIOC_G_CROP)", CLASSNAME, __func__, m_Device->name, m_Type);
++ return false;
++ }
++ return true;
++}
++
++int CLinuxV4l2Sink::RequestBuffers(int buffersCount) {
++ CLog::Log(LOGDEBUG, "%s::%s - Device %s, Type %d, Memory %d, RequestBuffers %d", CLASSNAME, __func__, m_Device->name, m_Type, m_Memory, buffersCount);
++ struct v4l2_requestbuffers reqbuf;
++ memset(&reqbuf, 0, sizeof(struct v4l2_requestbuffers));
++ reqbuf.type = m_Type;
++ reqbuf.memory = m_Memory;
++ reqbuf.count = buffersCount;
++
++ if (ioctl(m_Device->device, VIDIOC_REQBUFS, &reqbuf)) {
++ CLog::Log(LOGERROR, "%s::%s - Error requesting buffers. Device %s, Type %d, Memory %d. (VIDIOC_REQBUFS)", CLASSNAME, __func__, m_Device->name, m_Type, m_Memory);
++ return V4L2_ERROR;
++ }
++
++ CLog::Log(LOGDEBUG, "%s::%s - Device %s, Type %d, Memory %d, Buffers allowed %d", CLASSNAME, __func__, m_Device->name, m_Type, m_Memory, reqbuf.count);
++ return reqbuf.count;
++}
++
++bool CLinuxV4l2Sink::QueryBuffers() {
++ memset(m_Buffers, 0, m_NumBuffers * sizeof(struct v4l2_buffer));
++ memset(m_Planes, 0, m_NumBuffers * m_NumPlanes * sizeof(struct v4l2_plane));
++
++ for(int i = 0; i < m_NumBuffers; i++) {
++ m_Buffers[i].type = m_Type;
++ m_Buffers[i].memory = m_Memory;
++ m_Buffers[i].index = i;
++ m_Buffers[i].m.planes = &m_Planes[i*m_NumPlanes];
++ m_Buffers[i].length = m_NumPlanes;
++
++ if (ioctl(m_Device->device, VIDIOC_QUERYBUF, &m_Buffers[i])) {
++ CLog::Log(LOGERROR, "%s::%s - Error querying buffers. Device %s, Type %d, Memory %d. (VIDIOC_QUERYBUF)", CLASSNAME, __func__, m_Device->name, m_Type, m_Memory);
++ return false;
++ }
++
++ iFreeBuffers.push(m_Buffers[i].index);
++ }
++ return true;
++}
++
++bool CLinuxV4l2Sink::MmapBuffers() {
++ for(int i = 0; i < m_NumBuffers * m_NumPlanes; i++) {
++ if(m_Planes[i].length) {
++ m_Addresses[i] = (unsigned long)mmap(NULL, m_Planes[i].length, PROT_READ | PROT_WRITE, MAP_SHARED, m_Device->device, m_Planes[i].m.mem_offset);
++ if (m_Addresses[i] == (unsigned long)MAP_FAILED)
++ return false;
++ CLog::Log(LOGDEBUG, "%s::%s - Device %s, Type %d, MMapped Plane %d at 0x%x to address 0x%lx", CLASSNAME, __func__, m_Device->name, m_Type, i, m_Planes[i].m.mem_offset, m_Addresses[i]);
++ }
++ }
++ return true;
++}
++
++bool CLinuxV4l2Sink::StreamOn(int state) {
++ if(ioctl(m_Device->device, state, &m_Type)) {
++ CLog::Log(LOGERROR, "%s::%s - Error setting device state to %d, Device %s, Type %d.", CLASSNAME, __func__, state, m_Device->name, m_Type);
++ return false;
++ }
++ CLog::Log(LOGDEBUG, "%s::%s - Device %s, Type %d, %d", CLASSNAME, __func__, m_Device->name, m_Type, state);
++ return true;
++}
++
++bool CLinuxV4l2Sink::QueueBuffer(v4l2_buffer *buffer) {
++ debug_log(LOGDEBUG, "%s::%s - Device %s, Type %d, Memory %d <- %d", CLASSNAME, __func__, m_Device->name, buffer->type, buffer->memory, buffer->index);
++ if (ioctl(m_Device->device, VIDIOC_QBUF, buffer)) {
++ CLog::Log(LOGERROR, "%s::%s - Error queueing buffer. Device %s, Type %d, Memory %d. Buffer %d, errno %d", CLASSNAME, __func__, m_Device->name, buffer->type, buffer->memory, buffer->index, errno);
++ return false;
++ }
++ return true;
++}
++bool CLinuxV4l2Sink::DequeueBuffer(v4l2_buffer *buffer) {
++ if (ioctl(m_Device->device, VIDIOC_DQBUF, buffer)) {
++ if (errno != EAGAIN) CLog::Log(LOGERROR, "%s::%s - Error dequeueing buffer. Device %s, Type %d, Memory %d. Buffer %d, errno %d", CLASSNAME, __func__, m_Device->name, buffer->type, buffer->memory, buffer->index, errno);
++ return false;
++ }
++ debug_log(LOGDEBUG, "%s::%s - Device %s, Type %d, Memory %d -> %d", CLASSNAME, __func__, m_Device->name, buffer->type, buffer->memory, buffer->index);
++ return true;
++}
++
++bool CLinuxV4l2Sink::DequeueBuffer(V4l2SinkBuffer *buffer) {
++ struct v4l2_buffer buf;
++ struct v4l2_plane planes[m_NumPlanes];
++ memset(&planes, 0, sizeof(struct v4l2_plane) * m_NumPlanes);
++ memset(&buf, 0, sizeof(struct v4l2_buffer));
++ buf.type = m_Type;
++ buf.memory = m_Memory;
++ buf.m.planes = planes;
++ buf.length = m_NumPlanes;
++ if (!DequeueBuffer(&buf))
++ return false;
++
++ buffer->iIndex = buf.index;
++ buffer->timeStamp = buf.timestamp;
++ for (int i = 0; i < m_NumPlanes; i++)
++ buffer->cPlane[i] = (void *)m_Addresses[buffer->iIndex * m_NumPlanes + i];
++ return true;
++}
++
++bool CLinuxV4l2Sink::GetBuffer(V4l2SinkBuffer *buffer) {
++ if (iFreeBuffers.empty()) {
++ if (!DequeueBuffer(buffer))
++ return false;
++ } else {
++ buffer->iIndex = iFreeBuffers.front();
++ buffer->timeStamp = m_Buffers[buffer->iIndex].timestamp;
++ iFreeBuffers.pop();
++ for (int i = 0; i < m_NumPlanes; i++)
++ buffer->cPlane[i] = (void *)m_Addresses[buffer->iIndex * m_NumPlanes + i];
++ }
++ return true;
++}
++
++bool CLinuxV4l2Sink::PushBuffer(V4l2SinkBuffer *buffer) {
++ if (m_Memory == V4L2_MEMORY_USERPTR)
++ for (int i = 0; i < m_NumPlanes; i++)
++ m_Buffers[buffer->iIndex].m.planes[i].m.userptr = (long unsigned int)buffer->cPlane[i];
++
++ if (m_Type == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE) {
++ m_Buffers[buffer->iIndex].timestamp = buffer->timeStamp;
++ m_Buffers[buffer->iIndex].flags |= V4L2_BUF_FLAG_TIMESTAMP_COPY;
++ for (int i = 0; i < m_NumPlanes; i++)
++ m_Buffers[buffer->iIndex].m.planes[i].bytesused = buffer->iBytesUsed[i];
++ }
++
++ if (!QueueBuffer(&m_Buffers[buffer->iIndex]))
++ return false;
++ return true;
++}
++
++int CLinuxV4l2Sink::Poll(int timeout) {
++ struct pollfd p;
++ p.fd = m_Device->device;
++ p.events = POLLERR;
++ (m_Type == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE) ? p.events |= POLLOUT : p.events |= POLLIN;
++
++ return poll(&p, 1, timeout);
++}
++
++bool CLinuxV4l2Sink::QueueAll() {
++ while (!iFreeBuffers.empty()) {
++ if (!QueueBuffer(&m_Buffers[iFreeBuffers.front()]))
++ return false;
++ iFreeBuffers.pop();
++ }
++ return true;
++}
+diff --git a/xbmc/linux/LinuxV4l2Sink.h b/xbmc/linux/LinuxV4l2Sink.h
+new file mode 100644
+index 0000000..d04d52d
+--- /dev/null
++++ b/xbmc/linux/LinuxV4l2Sink.h
+@@ -0,0 +1,71 @@
++#pragma once
++
++#include
++#include
++#include
++#include
++
++#ifndef V4L2_BUF_FLAG_TIMESTAMP_COPY
++ #define V4L2_BUF_FLAG_TIMESTAMP_COPY 0x4000
++#endif
++
++#define V4L2_ERROR -1
++#define V4L2_BUSY 1
++#define V4L2_READY 2
++#define V4L2_OK 3
++
++#ifdef _DEBUG
++ #define debug_log(...) CLog::Log(__VA_ARGS__)
++#else
++ #define debug_log(...)
++#endif
++
++typedef struct V4l2Device
++{
++ int device;
++ char name[32];
++} V4l2Device;
++
++typedef struct V4l2SinkBuffer
++{
++ int iIndex;
++ int iBytesUsed[4];
++ void *cPlane[4];
++ struct timeval timeStamp;
++} V4l2SinkBuffer;
++
++class CLinuxV4l2Sink
++{
++public:
++ CLinuxV4l2Sink(V4l2Device *device, enum v4l2_buf_type type);
++ ~CLinuxV4l2Sink();
++
++ bool Init(int buffersCount);
++ bool Init(CLinuxV4l2Sink *sink);
++ void SoftRestart();
++ bool GetFormat(v4l2_format *format);
++ bool SetFormat(v4l2_format *format);
++ bool GetCrop(v4l2_crop *crop);
++ bool SetCrop(v4l2_crop *crop);
++ bool GetBuffer(V4l2SinkBuffer* buffer);
++ bool DequeueBuffer(V4l2SinkBuffer* buffer);
++ bool PushBuffer(V4l2SinkBuffer* buffer);
++ bool StreamOn(int state);
++ bool QueueAll();
++ int Poll(int timeout);
++private:
++ V4l2Device *m_Device;
++ int m_NumPlanes;
++ int m_NumBuffers;
++ std::queue iFreeBuffers;
++ enum v4l2_memory m_Memory;
++ enum v4l2_buf_type m_Type;
++ v4l2_buffer *m_Buffers;
++ v4l2_plane *m_Planes;
++ unsigned long *m_Addresses;
++ int RequestBuffers(int buffersCount);
++ bool QueryBuffers();
++ bool MmapBuffers();
++ bool QueueBuffer(v4l2_buffer *buffer);
++ bool DequeueBuffer(v4l2_buffer *buffer);
++};
+diff --git a/xbmc/linux/Makefile.in b/xbmc/linux/Makefile.in
+index 744fd06..94ee9eb 100644
+--- a/xbmc/linux/Makefile.in
++++ b/xbmc/linux/Makefile.in
+@@ -12,6 +12,7 @@ SRCS += XFileUtils.cpp
+ SRCS += XHandle.cpp
+ SRCS += XMemUtils.cpp
+ SRCS += XTimeUtils.cpp
++SRCS += LinuxV4l2Sink.cpp
+
+ SRCS += RBP.cpp
+
+diff --git a/xbmc/utils/AMLUtils.cpp b/xbmc/utils/AMLUtils.cpp
+index 5915e61..5392658 100644
+--- a/xbmc/utils/AMLUtils.cpp
++++ b/xbmc/utils/AMLUtils.cpp
+@@ -79,7 +79,7 @@ bool aml_wired_present()
+ }
+
+ bool aml_permissions()
+-{
++{
+ if (!aml_present())
+ return false;
+
+@@ -195,7 +195,8 @@ bool aml_support_h264_4k2k()
+
+ void aml_set_audio_passthrough(bool passthrough)
+ {
+- SysfsUtils::SetInt("/sys/class/audiodsp/digital_raw", passthrough ? 2:0);
++ CLog::Log(LOGDEBUG, "AML: Setting passthrough %d", passthrough);
++ SysfsUtils::SetString("/sys/class/audiodsp/digital_raw", passthrough ? "2":"0");
+ }
+
+ void aml_probe_hdmi_audio()
+@@ -213,7 +214,7 @@ void aml_probe_hdmi_audio()
+ {
+ char valstr[1024] = {0};
+
+- read(fd, valstr, sizeof(valstr) - 1);
++ int tmp = read(fd, valstr, sizeof(valstr) - 1);
+ valstr[strlen(valstr)] = '\0';
+ close(fd);
+
+@@ -348,6 +349,60 @@ bool aml_mode_to_resolution(const char *mode, RESOLUTION_INFO *res)
+ res->fRefreshRate = 50;
+ res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
+ }
++ else if (StringUtils::EqualsNoCase(fromMode, "720p23hz")) // fake
++ {
++ res->iWidth = 1280;
++ res->iHeight= 720;
++ res->iScreenWidth = 1280;
++ res->iScreenHeight= 720;
++ res->fRefreshRate = 23.98;
++ res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
++ }
++ else if (StringUtils::EqualsNoCase(fromMode, "720p24hz")) // fake
++ {
++ res->iWidth = 1280;
++ res->iHeight= 720;
++ res->iScreenWidth = 1280;
++ res->iScreenHeight= 720;
++ res->fRefreshRate = 24;
++ res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
++ }
++ else if (StringUtils::EqualsNoCase(fromMode, "720p25hz")) // fake
++ {
++ res->iWidth = 1280;
++ res->iHeight= 720;
++ res->iScreenWidth = 1280;
++ res->iScreenHeight= 720;
++ res->fRefreshRate = 25;
++ res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
++ }
++ else if (StringUtils::EqualsNoCase(fromMode, "720p29hz")) // fake
++ {
++ res->iWidth = 1280;
++ res->iHeight= 720;
++ res->iScreenWidth = 1280;
++ res->iScreenHeight= 720;
++ res->fRefreshRate = 29.97;
++ res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
++ }
++ else if (StringUtils::EqualsNoCase(fromMode, "720p30hz")) // fake
++ {
++ res->iWidth = 1280;
++ res->iHeight= 720;
++ res->iScreenWidth = 1280;
++ res->iScreenHeight= 720;
++ res->fRefreshRate = 30;
++ res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
++ }
++ else if (StringUtils::EqualsNoCase(fromMode, "720p59hz")) // real
++ {
++ res->iWidth = 1280;
++ res->iHeight= 720;
++ res->iScreenWidth = 1280;
++ res->iScreenHeight= 720;
++ res->fRefreshRate = 59.94;
++ res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
++ }
+ else if (StringUtils::EqualsNoCase(fromMode, "720p") || StringUtils::EqualsNoCase(fromMode, "720p60hz"))
+ {
+ res->iWidth = 1280;
+@@ -393,6 +448,24 @@ bool aml_mode_to_resolution(const char *mode, RESOLUTION_INFO *res)
+ res->fRefreshRate = 24;
+ res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
+ }
++ else if (StringUtils::EqualsNoCase(fromMode, "1080p25hz"))
++ {
++ res->iWidth = 1920;
++ res->iHeight= 1080;
++ res->iScreenWidth = 1920;
++ res->iScreenHeight= 1080;
++ res->fRefreshRate = 25;
++ res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
++ }
++ else if (StringUtils::EqualsNoCase(fromMode, "1080p29hz")) // fake
++ {
++ res->iWidth = 1920;
++ res->iHeight= 1080;
++ res->iScreenWidth = 1920;
++ res->iScreenHeight= 1080;
++ res->fRefreshRate = 29.97;
++ res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
++ }
+ else if (StringUtils::EqualsNoCase(fromMode, "1080p30hz"))
+ {
+ res->iWidth = 1920;
+@@ -501,7 +574,7 @@ bool aml_mode_to_resolution(const char *mode, RESOLUTION_INFO *res)
+ res->fRefreshRate = 30;
+ res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
+ }
+- else if (StringUtils::EqualsNoCase(fromMode, "2160p50hz420"))
++ else if (StringUtils::EqualsNoCase(fromMode, "2160p50hz"))
+ {
+ res->iWidth = 1920;
+ res->iHeight= 1080;
+@@ -510,7 +583,16 @@ bool aml_mode_to_resolution(const char *mode, RESOLUTION_INFO *res)
+ res->fRefreshRate = 50;
+ res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
+ }
+- else if (StringUtils::EqualsNoCase(fromMode, "2160p60hz420"))
++ else if (StringUtils::EqualsNoCase(fromMode, "4k2k59hz") || StringUtils::EqualsNoCase(fromMode, "2160p59hz"))
++ {
++ res->iWidth = 1920;
++ res->iHeight= 1080;
++ res->iScreenWidth = 3840;
++ res->iScreenHeight= 2160;
++ res->fRefreshRate = 59.940;
++ res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
++ }
++ else if (StringUtils::EqualsNoCase(fromMode, "2160p60hz"))
+ {
+ res->iWidth = 1920;
+ res->iHeight= 1080;
+@@ -535,4 +617,3 @@ bool aml_mode_to_resolution(const char *mode, RESOLUTION_INFO *res)
+
+ return res->iWidth > 0 && res->iHeight> 0;
+ }
+-
+diff --git a/xbmc/utils/CPUInfo.cpp b/xbmc/utils/CPUInfo.cpp
+index a2a775f..f1f9751 100644
+--- a/xbmc/utils/CPUInfo.cpp
++++ b/xbmc/utils/CPUInfo.cpp
+@@ -117,7 +117,7 @@ CCPUInfo::CCPUInfo(void)
+ #if defined(TARGET_DARWIN)
+ size_t len = 4;
+ std::string cpuVendor;
+-
++
+ // The number of cores.
+ if (sysctlbyname("hw.activecpu", &m_cpuCount, &len, NULL, 0) == -1)
+ m_cpuCount = 1;
+@@ -138,7 +138,7 @@ CCPUInfo::CCPUInfo(void)
+ len = 512;
+ if (sysctlbyname("machdep.cpu.vendor", &buffer, &len, NULL, 0) == 0)
+ cpuVendor = buffer;
+-
++
+ #endif
+ // Go through each core.
+ for (int i=0; isecond.m_fSpeed);
+ else
+@@ -587,7 +587,7 @@ bool CCPUInfo::getTemperature(CTemperature& temperature)
+ {
+ int value = 0;
+ char scale = 0;
+-
++
+ #ifdef TARGET_POSIX
+ #if defined(TARGET_DARWIN_OSX)
+ value = SMCGetTemperature(SMC_KEY_CPU_TEMP);
+@@ -616,23 +616,24 @@ bool CCPUInfo::getTemperature(CTemperature& temperature)
+ // procfs is deprecated in the linux kernel, we should move away from
+ // using it for temperature data. It doesn't seem that sysfs has a
+ // general enough interface to bother implementing ATM.
+-
++
+ rewind(m_fProcTemperature);
+ fflush(m_fProcTemperature);
+ ret = fscanf(m_fProcTemperature, "temperature: %d %c", &value, &scale);
+-
++
+ // read from the temperature file of the new kernels
+ if (!ret)
+ {
+ ret = fscanf(m_fProcTemperature, "%d", &value);
+- value = value / 1000;
++ if ((int)value > 1000)
++ value = value / 1000;
+ scale = 'c';
+ ret++;
+ }
+ }
+
+ if (ret != 2)
+- return false;
++ return false;
+ #endif
+ #endif // TARGET_POSIX
+
+@@ -642,7 +643,7 @@ bool CCPUInfo::getTemperature(CTemperature& temperature)
+ temperature = CTemperature::CreateFromFahrenheit(value);
+ else
+ return false;
+-
++
+ return true;
+ }
+
+@@ -697,7 +698,7 @@ bool CCPUInfo::readProcStat(unsigned long long& user, unsigned long long& nice,
+ const LONGLONG deltaTotal = coreTotal - curCore.m_total,
+ deltaIdle = coreIdle - curCore.m_idle;
+ const double load = (double(deltaTotal - deltaIdle) * 100.0) / double(deltaTotal);
+-
++
+ // win32 has some problems with calculation of load if load close to zero
+ curCore.m_fPct = (load < 0) ? 0 : load;
+ if (load >= 0 || deltaTotal > 5 * 10 * 1000 * 1000) // do not update (smooth) values for 5 seconds on negative loads
+diff --git a/xbmc/windowing/X11/WinSystemX11.cpp b/xbmc/windowing/X11/WinSystemX11.cpp
+index ee85585..7261f78 100644
+--- a/xbmc/windowing/X11/WinSystemX11.cpp
++++ b/xbmc/windowing/X11/WinSystemX11.cpp
+@@ -203,7 +203,7 @@ bool CWinSystemX11::SetFullScreen(bool fullScreen, RESOLUTION_INFO& res, bool bl
+ mode.hz = CDisplaySettings::GetInstance().GetResolutionInfo(RES_DESKTOP).fRefreshRate;
+ mode.id = CDisplaySettings::GetInstance().GetResolutionInfo(RES_DESKTOP).strId;
+ }
+-
++
+ XMode currmode = g_xrandr.GetCurrentMode(out.name);
+ if (!currmode.name.empty())
+ {
+diff --git a/xbmc/windowing/egl/EGLNativeTypeAmlogic.cpp b/xbmc/windowing/egl/EGLNativeTypeAmlogic.cpp
+index 3d6598a..cc62734 100644
+--- a/xbmc/windowing/egl/EGLNativeTypeAmlogic.cpp
++++ b/xbmc/windowing/egl/EGLNativeTypeAmlogic.cpp
+@@ -23,13 +23,18 @@
+ #include "utils/AMLUtils.h"
+ #include "utils/StringUtils.h"
+ #include "utils/SysfsUtils.h"
++#include "utils/log.h"
+
+-#include
+ #include
+ #include
+ #include
+ #include
+
++#ifdef CLASSNAME
++#undef CLASSNAME
++#endif
++#define CLASSNAME "CEGLNativeTypeAmlogic"
++
+ CEGLNativeTypeAmlogic::CEGLNativeTypeAmlogic()
+ {
+ const char *env_framebuffer = getenv("FRAMEBUFFER");
+@@ -53,10 +58,12 @@ bool CEGLNativeTypeAmlogic::CheckCompatibility()
+ {
+ std::string name;
+ std::string modalias = "/sys/class/graphics/" + m_framebuffer_name + "/device/modalias";
++ std::string meson = "meson";
++ std::string fb = "fb";
+
+ SysfsUtils::GetString(modalias, name);
+ StringUtils::Trim(name);
+- if (name == "platform:mesonfb")
++ if (name.find(meson) != std::string::npos && name.find(fb) != std::string::npos)
+ return true;
+ return false;
+ }
+@@ -64,28 +71,37 @@ bool CEGLNativeTypeAmlogic::CheckCompatibility()
+ void CEGLNativeTypeAmlogic::Initialize()
+ {
+ aml_permissions();
+- DisableFreeScale();
++ FreeScale(false);
+ }
++
+ void CEGLNativeTypeAmlogic::Destroy()
+ {
++ SetScreenScale(1, 1, false);
+ return;
+ }
+
+ bool CEGLNativeTypeAmlogic::CreateNativeDisplay()
+ {
++ CLog::Log(LOGDEBUG, "%s::%s", CLASSNAME, __func__);
++
+ m_nativeDisplay = EGL_DEFAULT_DISPLAY;
+ return true;
+ }
+
+ bool CEGLNativeTypeAmlogic::CreateNativeWindow()
+ {
++ CLog::Log(LOGDEBUG, "%s::%s", CLASSNAME, __func__);
++
+ #if defined(_FBDEV_WINDOW_H_)
+ fbdev_window *nativeWindow = new fbdev_window;
+ if (!nativeWindow)
+ return false;
+
+- nativeWindow->width = 1920;
+- nativeWindow->height = 1080;
++ RESOLUTION_INFO res;
++ GetPreferredResolution(&res);
++
++ nativeWindow->width = res.iWidth;
++ nativeWindow->height = res.iHeight;
+ m_nativeWindow = nativeWindow;
+
+ SetFramebufferResolution(nativeWindow->width, nativeWindow->height);
+@@ -98,6 +114,8 @@ bool CEGLNativeTypeAmlogic::CreateNativeWindow()
+
+ bool CEGLNativeTypeAmlogic::GetNativeDisplay(XBNativeDisplayType **nativeDisplay) const
+ {
++ CLog::Log(LOGDEBUG, "%s::%s", CLASSNAME, __func__);
++
+ if (!nativeDisplay)
+ return false;
+ *nativeDisplay = (XBNativeDisplayType*) &m_nativeDisplay;
+@@ -106,6 +124,8 @@ bool CEGLNativeTypeAmlogic::GetNativeDisplay(XBNativeDisplayType **nativeDisplay
+
+ bool CEGLNativeTypeAmlogic::GetNativeWindow(XBNativeWindowType **nativeWindow) const
+ {
++ CLog::Log(LOGDEBUG, "%s::%s", CLASSNAME, __func__);
++
+ if (!nativeWindow)
+ return false;
+ *nativeWindow = (XBNativeWindowType*) &m_nativeWindow;
+@@ -114,11 +134,15 @@ bool CEGLNativeTypeAmlogic::GetNativeWindow(XBNativeWindowType **nativeWindow) c
+
+ bool CEGLNativeTypeAmlogic::DestroyNativeDisplay()
+ {
++ CLog::Log(LOGDEBUG, "%s::%s", CLASSNAME, __func__);
++
+ return true;
+ }
+
+ bool CEGLNativeTypeAmlogic::DestroyNativeWindow()
+ {
++ CLog::Log(LOGDEBUG, "%s::%s", CLASSNAME, __func__);
++
+ #if defined(_FBDEV_WINDOW_H_)
+ delete (fbdev_window*)m_nativeWindow, m_nativeWindow = NULL;
+ #endif
+@@ -134,6 +158,8 @@ bool CEGLNativeTypeAmlogic::GetNativeResolution(RESOLUTION_INFO *res) const
+
+ bool CEGLNativeTypeAmlogic::SetNativeResolution(const RESOLUTION_INFO &res)
+ {
++ CLog::Log(LOGNOTICE, "%s::%s to %dx%d@%f", CLASSNAME, __func__, res.iScreenWidth, res.iScreenHeight, res.fRefreshRate);
++
+ #if defined(_FBDEV_WINDOW_H_)
+ if (m_nativeWindow)
+ {
+@@ -153,6 +179,8 @@ bool CEGLNativeTypeAmlogic::SetNativeResolution(const RESOLUTION_INFO &res)
+
+ bool CEGLNativeTypeAmlogic::ProbeResolutions(std::vector &resolutions)
+ {
++ CLog::Log(LOGDEBUG, "%s::%s", CLASSNAME, __func__);
++
+ std::string valstr;
+ SysfsUtils::GetString("/sys/class/amhdmitx/amhdmitx0/disp_cap", valstr);
+ std::vector probe_str = StringUtils::Split(valstr, "\n");
+@@ -165,11 +193,12 @@ bool CEGLNativeTypeAmlogic::ProbeResolutions(std::vector &resol
+ resolutions.push_back(res);
+ }
+ return resolutions.size() > 0;
+-
+ }
+
+ bool CEGLNativeTypeAmlogic::GetPreferredResolution(RESOLUTION_INFO *res) const
+ {
++ CLog::Log(LOGDEBUG, "%s::%s", CLASSNAME, __func__);
++
+ // check display/mode, it gets defaulted at boot
+ if (!GetNativeResolution(res))
+ {
+@@ -182,6 +211,8 @@ bool CEGLNativeTypeAmlogic::GetPreferredResolution(RESOLUTION_INFO *res) const
+
+ bool CEGLNativeTypeAmlogic::ShowWindow(bool show)
+ {
++ CLog::Log(LOGDEBUG, "%s::%s", CLASSNAME, __func__);
++
+ std::string blank_framebuffer = "/sys/class/graphics/" + m_framebuffer_name + "/blank";
+ SysfsUtils::SetInt(blank_framebuffer.c_str(), show ? 0 : 1);
+ return true;
+@@ -189,6 +220,8 @@ bool CEGLNativeTypeAmlogic::ShowWindow(bool show)
+
+ bool CEGLNativeTypeAmlogic::SetDisplayResolution(const char *resolution)
+ {
++ CLog::Log(LOGNOTICE, "%s::%s to %s", CLASSNAME, __func__, resolution);
++
+ std::string mode = resolution;
+ // switch display resolution
+ SysfsUtils::SetString("/sys/class/display/mode", mode.c_str());
+@@ -196,36 +229,46 @@ bool CEGLNativeTypeAmlogic::SetDisplayResolution(const char *resolution)
+ RESOLUTION_INFO res;
+ aml_mode_to_resolution(mode.c_str(), &res);
+ SetFramebufferResolution(res);
++ DealWithScale(res);
+
+ return true;
+ }
+
+-void CEGLNativeTypeAmlogic::SetupVideoScaling(const char *mode)
++void CEGLNativeTypeAmlogic::FreeScale(bool state)
+ {
+- SysfsUtils::SetInt("/sys/class/graphics/fb0/blank", 1);
+- SysfsUtils::SetInt("/sys/class/graphics/fb0/free_scale", 0);
+- SysfsUtils::SetInt("/sys/class/graphics/fb1/free_scale", 0);
+- SysfsUtils::SetInt("/sys/class/ppmgr/ppscaler", 0);
++ CLog::Log(LOGDEBUG, "%s::%s", CLASSNAME, __func__);
+
+- if (strstr(mode, "1080"))
+- {
+- SysfsUtils::SetString("/sys/class/graphics/fb0/request2XScale", "8");
+- SysfsUtils::SetString("/sys/class/graphics/fb1/scale_axis", "1280 720 1920 1080");
+- SysfsUtils::SetString("/sys/class/graphics/fb1/scale", "0x10001");
+- }
+- else
+- {
+- SysfsUtils::SetString("/sys/class/graphics/fb0/request2XScale", "16 1280 720");
++ std::string freescale_framebuffer = "/sys/class/graphics/" + m_framebuffer_name + "/free_scale";
++ SysfsUtils::SetInt(freescale_framebuffer.c_str(), state ? 1 : 0);
++}
++
++void CEGLNativeTypeAmlogic::DealWithScale(const RESOLUTION_INFO &res)
++{
++ CLog::Log(LOGDEBUG, "%s::%s Interface is %dx%d, screen size is %dx%d", CLASSNAME, __func__, res.iWidth, res.iHeight, res.iScreenWidth, res.iScreenHeight);
++
++ if (res.iScreenWidth > res.iWidth && res.iScreenHeight > res.iHeight) {
++ CLog::Log(LOGNOTICE, "%s::%s Scaling interfaces of size %dx%d to full screen", CLASSNAME, __func__, res.iWidth, res.iHeight);
++ SetScreenScale(res.iWidth, res.iHeight, true);
+ }
++}
+
+- SysfsUtils::SetInt("/sys/class/graphics/fb0/blank", 0);
++void CEGLNativeTypeAmlogic::SetScreenScale(int width, int height, bool state)
++{
++ char setting[256] = {};
++ sprintf(setting, "0 0 %d %d", width - 1 , height - 1);
++ std::string framebuffer = "/sys/class/graphics/" + m_framebuffer_name;
++ SysfsUtils::SetString(framebuffer + "/scale_axis", setting);
++ SysfsUtils::SetString(framebuffer + "/scale", state ? "0x10001" : "0x0");
+ }
+
+-void CEGLNativeTypeAmlogic::DisableFreeScale()
++bool CEGLNativeTypeAmlogic::IsHdmiConnected() const
+ {
+- // turn off frame buffer freescale
+- SysfsUtils::SetInt("/sys/class/graphics/fb0/free_scale", 0);
+- SysfsUtils::SetInt("/sys/class/graphics/fb1/free_scale", 0);
++ CLog::Log(LOGDEBUG, "%s::%s", CLASSNAME, __func__);
++
++ std::string hpd_state;
++ SysfsUtils::GetString("/sys/class/amhdmitx/amhdmitx0/disp_cap", hpd_state);
++ StringUtils::Trim(hpd_state);
++ return hpd_state == "1";
+ }
+
+ void CEGLNativeTypeAmlogic::SetFramebufferResolution(const RESOLUTION_INFO &res) const
+@@ -245,8 +288,8 @@ void CEGLNativeTypeAmlogic::SetFramebufferResolution(int width, int height) cons
+ {
+ vinfo.xres = width;
+ vinfo.yres = height;
+- vinfo.xres_virtual = 1920;
+- vinfo.yres_virtual = 2160;
++ vinfo.xres_virtual = width;
++ vinfo.yres_virtual = height * 2;
+ vinfo.bits_per_pixel = 32;
+ vinfo.activate = FB_ACTIVATE_ALL;
+ ioctl(fd0, FBIOPUT_VSCREENINFO, &vinfo);
+diff --git a/xbmc/windowing/egl/EGLNativeTypeAmlogic.h b/xbmc/windowing/egl/EGLNativeTypeAmlogic.h
+index 6867c38..ca39273 100644
+--- a/xbmc/windowing/egl/EGLNativeTypeAmlogic.h
++++ b/xbmc/windowing/egl/EGLNativeTypeAmlogic.h
+@@ -21,6 +21,19 @@
+ */
+
+ #include "EGLNativeType.h"
++#include
++
++#ifndef _FBDEV_WINDOW_H_
++// Define it right here, since some platforms doesn't has fbdev_window.h at all.
++// This will not make it fail on these platforms badly, since it will fail softly anyway on some other init steps.
++#define _FBDEV_WINDOW_H_
++typedef struct fbdev_window
++{
++ unsigned short width;
++ unsigned short height;
++} fbdev_window;
++#endif
++
+ class CEGLNativeTypeAmlogic : public CEGLNativeType
+ {
+ public:
+@@ -49,12 +62,14 @@ public:
+
+ protected:
+ bool SetDisplayResolution(const char *resolution);
+- void SetupVideoScaling(const char *mode);
+- void DisableFreeScale();
+
+ private:
+ void SetFramebufferResolution(const RESOLUTION_INFO &res) const;
+ void SetFramebufferResolution(int width, int height) const;
++ void FreeScale(bool state);
++ void DealWithScale(const RESOLUTION_INFO &res);
++ void SetScreenScale(int width, int height, bool state);
++ bool IsHdmiConnected() const;
+
+ std::string m_framebuffer_name;
+ };
+diff --git a/xbmc/windowing/egl/EGLNativeTypeFbdev.cpp b/xbmc/windowing/egl/EGLNativeTypeFbdev.cpp
+new file mode 100644
+index 0000000..5c25eb6
+--- /dev/null
++++ b/xbmc/windowing/egl/EGLNativeTypeFbdev.cpp
+@@ -0,0 +1,183 @@
++/*
++ * Copyright (C) 2011-2012 Team XBMC
++ * http://www.xbmc.org
++ *
++ * This Program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2, or (at your option)
++ * any later version.
++ *
++ * This Program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with XBMC; see the file COPYING. If not, see
++ * .
++ *
++ */
++#include
++#include "EGLNativeTypeFbdev.h"
++#include "utils/log.h"
++#include
++#include
++#include
++#include "utils/StringUtils.h"
++#include "guilib/gui3d.h"
++#include
++
++#include
++
++#include "utils/StringUtils.h"
++
++#ifdef CLASSNAME
++#undef CLASSNAME
++#endif
++#define CLASSNAME "CEGLNativeTypeFbdev"
++
++CEGLNativeTypeFbdev::CEGLNativeTypeFbdev()
++{
++ m_iFBHandle = -1;
++ m_nativeWindow = NULL;
++ m_nativeDisplay = NULL;
++}
++
++CEGLNativeTypeFbdev::~CEGLNativeTypeFbdev()
++{
++}
++
++bool CEGLNativeTypeFbdev::CheckCompatibility()
++{
++ m_iFBHandle = open("/dev/fb0", O_RDWR, 0);
++ if(m_iFBHandle < 0)
++ return false;
++
++ vinfo = new fb_var_screeninfo();
++ if(ioctl(m_iFBHandle, FBIOGET_VSCREENINFO, vinfo) == -1)
++ return false;
++
++ CLog::Log(LOGNOTICE, "%s::%s FBDev device: %d, info.xres %d info.yres %d info.upper_margin %d info.lower_margin %d info.pixclock %d",
++ CLASSNAME, __func__, m_iFBHandle, vinfo->xres, vinfo->yres, vinfo->upper_margin, vinfo->lower_margin, vinfo->pixclock);
++
++ finfo = new fb_fix_screeninfo();
++ if(ioctl(m_iFBHandle, FBIOGET_FSCREENINFO, finfo) == -1)
++ return false;
++
++ return true;
++}
++
++void CEGLNativeTypeFbdev::Initialize()
++{
++ return;
++}
++void CEGLNativeTypeFbdev::Destroy()
++{
++ return;
++}
++
++bool CEGLNativeTypeFbdev::CreateNativeDisplay()
++{
++ m_nativeDisplay = EGL_DEFAULT_DISPLAY;
++ return true;
++}
++
++bool CEGLNativeTypeFbdev::CreateNativeWindow()
++{
++ fbdev_window *nativeWindow = new fbdev_window;
++ if (!nativeWindow)
++ return false;
++
++ nativeWindow->width = vinfo->xres;
++ nativeWindow->height = vinfo->yres;
++ m_nativeWindow = nativeWindow;
++ return true;
++}
++
++bool CEGLNativeTypeFbdev::GetNativeDisplay(XBNativeDisplayType **nativeDisplay) const
++{
++ if (!nativeDisplay)
++ return false;
++ *nativeDisplay = (XBNativeDisplayType*) &m_nativeDisplay;
++ return true;
++}
++
++bool CEGLNativeTypeFbdev::GetNativeWindow(XBNativeWindowType **nativeWindow) const
++{
++ if (!nativeWindow)
++ return false;
++ *nativeWindow = (XBNativeWindowType*) &m_nativeWindow;
++ return true;
++}
++
++bool CEGLNativeTypeFbdev::DestroyNativeDisplay()
++{
++ return true;
++}
++
++bool CEGLNativeTypeFbdev::DestroyNativeWindow()
++{
++ free(m_nativeWindow);
++ return true;
++}
++
++bool CEGLNativeTypeFbdev::GetNativeResolution(RESOLUTION_INFO *res) const
++{
++ res->iWidth = vinfo->xres;
++ res->iHeight = vinfo->yres;
++ res->fRefreshRate = 60;
++ res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
++ res->iScreen = 0;
++ res->bFullScreen = true;
++ res->iSubtitles = (int)(0.965 * res->iHeight);
++ res->fPixelRatio = 1.0f;
++ res->iScreenWidth = res->iWidth;
++ res->iScreenHeight = res->iHeight;
++ res->strMode = StringUtils::Format("%dx%d @ %.2f%s - Full Screen", res->iScreenWidth, res->iScreenHeight, res->fRefreshRate, res->dwFlags & D3DPRESENTFLAG_INTERLACED ? "i" : "");
++
++ CLog::Log(LOGNOTICE, "Current resolution: %s", res->strMode.c_str());
++ return true;
++}
++
++bool CEGLNativeTypeFbdev::SetNativeResolution(const RESOLUTION_INFO &res)
++{
++
++ vinfo->activate = FB_ACTIVATE_NOW;
++
++ if (ioctl(m_iFBHandle, FBIOPUT_VSCREENINFO, vinfo) == -1)
++ {
++ CLog::Log(LOGERROR, "%s::%s - FBIOPUT_VSCREENINFO error", CLASSNAME, __func__);
++ return false;
++ }
++ if (ioctl(m_iFBHandle, FBIOPAN_DISPLAY, vinfo) == -1)
++ {
++ CLog::Log(LOGERROR, "%s::%s - FBIOPAN_DISPLAY error", CLASSNAME, __func__);
++ return false;
++ }
++
++ CLog::Log(LOGNOTICE, "%s::%s width %d height %d refresh %f", CLASSNAME, __func__, res.iScreenWidth, res.iScreenHeight, res.fRefreshRate);
++
++ return true;
++}
++
++bool CEGLNativeTypeFbdev::ProbeResolutions(std::vector &resolutions)
++{
++ RESOLUTION_INFO res;
++ if (GetNativeResolution(&res) && res.iWidth > 1 && res.iHeight > 1)
++ {
++ resolutions.push_back(res);
++ return true;
++ }
++ return false;
++}
++
++bool CEGLNativeTypeFbdev::GetPreferredResolution(RESOLUTION_INFO *res) const
++{
++ GetNativeResolution(res);
++ return true;
++}
++
++bool CEGLNativeTypeFbdev::ShowWindow(bool show)
++{
++ return false;
++}
+diff --git a/xbmc/windowing/egl/EGLNativeTypeFbdev.h b/xbmc/windowing/egl/EGLNativeTypeFbdev.h
+new file mode 100644
+index 0000000..04e7023
+--- /dev/null
++++ b/xbmc/windowing/egl/EGLNativeTypeFbdev.h
+@@ -0,0 +1,68 @@
++#pragma once
++
++/*
++ * Copyright (C) 2011-2012 Team XBMC
++ * http://www.xbmc.org
++ *
++ * This Program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2, or (at your option)
++ * any later version.
++ *
++ * This Program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with XBMC; see the file COPYING. If not, see
++ * .
++ *
++ */
++
++#include "EGLNativeType.h"
++#include
++#include
++
++#ifndef _FBDEV_WINDOW_H_
++// Define it right here, since some platforms doesn't has fbdev_window.h at all.
++// This will not make it fail on these platforms badly, since it will fail softly anyway on some other init steps.
++#define _FBDEV_WINDOW_H_
++typedef struct fbdev_window
++{
++ unsigned short width;
++ unsigned short height;
++} fbdev_window;
++#endif
++
++class CEGLNativeTypeFbdev : public CEGLNativeType
++{
++public:
++ CEGLNativeTypeFbdev();
++ virtual ~CEGLNativeTypeFbdev();
++ virtual std::string GetNativeName() const { return "FBDev"; };
++ virtual bool CheckCompatibility();
++ virtual void Initialize();
++ virtual void Destroy();
++ virtual int GetQuirks() { return EGL_QUIRK_NONE; };
++
++ virtual bool CreateNativeDisplay();
++ virtual bool CreateNativeWindow();
++ virtual bool GetNativeDisplay(XBNativeDisplayType **nativeDisplay) const;
++ virtual bool GetNativeWindow(XBNativeWindowType **nativeWindow) const;
++
++ virtual bool DestroyNativeWindow();
++ virtual bool DestroyNativeDisplay();
++
++ virtual bool GetNativeResolution(RESOLUTION_INFO *res) const;
++ virtual bool SetNativeResolution(const RESOLUTION_INFO &res);
++ virtual bool ProbeResolutions(std::vector &resolutions);
++ virtual bool GetPreferredResolution(RESOLUTION_INFO *res) const;
++
++ virtual bool ShowWindow(bool show);
++
++protected:
++ int m_iFBHandle;
++ fb_var_screeninfo *vinfo;
++ fb_fix_screeninfo *finfo;
++};
+diff --git a/xbmc/windowing/egl/EGLNativeTypeHybris.cpp b/xbmc/windowing/egl/EGLNativeTypeHybris.cpp
+new file mode 100644
+index 0000000..767946e
+--- /dev/null
++++ b/xbmc/windowing/egl/EGLNativeTypeHybris.cpp
+@@ -0,0 +1,279 @@
++/*
++ * Copyright (C) 2011-2012 Team XBMC
++ * http://www.xbmc.org
++ *
++ * This Program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2, or (at your option)
++ * any later version.
++ *
++ * This Program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with XBMC; see the file COPYING. If not, see
++ * .
++ *
++ */
++#if defined(TARGET_HYBRIS)
++#include
++#include
++#include
++#endif
++
++#include "system.h"
++#include
++#include "EGLNativeTypeHybris.h"
++#include "utils/log.h"
++#include "guilib/gui3d.h"
++
++#include "utils/StringUtils.h"
++
++HWComposer::HWComposer(unsigned int width,
++ unsigned int height,
++ unsigned int format,
++ hwc_composer_device_1_t *device,
++ hwc_display_contents_1_t **mList,
++ hwc_layer_1_t *layer)
++ : HWComposerNativeWindow(width, height, format)
++{
++ fblayer = layer;
++ hwcdevice = device;
++ mlist = mList;
++}
++
++void HWComposer::present(HWComposerNativeWindowBuffer *buffer)
++{
++ int oldretire = mlist[0]->retireFenceFd;
++ mlist[0]->retireFenceFd = -1;
++ fblayer->handle = buffer->handle;
++ fblayer->acquireFenceFd = getFenceBufferFd(buffer);
++ fblayer->releaseFenceFd = -1;
++ int err = hwcdevice->prepare(hwcdevice, HWC_NUM_DISPLAY_TYPES, mlist);
++ assert(err == 0);
++
++ err = hwcdevice->set(hwcdevice, HWC_NUM_DISPLAY_TYPES, mlist);
++ assert(err == 0);
++ setFenceBufferFd(buffer, fblayer->releaseFenceFd);
++
++ if (oldretire != -1)
++ {
++ sync_wait(oldretire, -1);
++ close(oldretire);
++ }
++}
++
++CEGLNativeTypeHybris::CEGLNativeTypeHybris()
++#if defined(TARGET_HYBRIS)
++ : m_hwcModule(NULL), m_bufferList(NULL), m_hwcDevicePtr(NULL)
++{
++ m_nativeWindow = NULL;
++ m_hwNativeWindow = NULL;
++ m_swNativeWindow = NULL;
++}
++#else
++{
++}
++#endif
++
++CEGLNativeTypeHybris::~CEGLNativeTypeHybris()
++{
++}
++
++bool CEGLNativeTypeHybris::CheckCompatibility()
++{
++#if defined(TARGET_HYBRIS)
++ if(hw_get_module(HWC_HARDWARE_MODULE_ID, (const hw_module_t **) &m_hwcModule))
++ {
++ return false;
++ }
++
++ if(hwc_open_1(m_hwcModule, &m_hwcDevicePtr))
++ {
++ return false;
++ }
++
++ m_hwcDevicePtr->blank(m_hwcDevicePtr, 0, 0);
++ return true;
++#else
++ return false;
++#endif
++}
++
++void CEGLNativeTypeHybris::Initialize()
++{
++}
++
++void CEGLNativeTypeHybris::Destroy()
++{
++ return;
++}
++
++bool CEGLNativeTypeHybris::CreateNativeDisplay()
++{
++ m_nativeDisplay = EGL_DEFAULT_DISPLAY;
++ return true;
++}
++
++bool CEGLNativeTypeHybris::CreateNativeWindow()
++{
++#if defined(TARGET_HYBRIS)
++ RESOLUTION_INFO res;
++ if (!GetNativeResolution(&res))
++ return false;
++
++ size_t size = sizeof(hwc_display_contents_1_t) + 2 * sizeof(hwc_layer_1_t);
++ hwc_display_contents_1_t *list = (hwc_display_contents_1_t *) malloc(size);
++ m_bufferList = (hwc_display_contents_1_t **) malloc(HWC_NUM_DISPLAY_TYPES * sizeof(hwc_display_contents_1_t *));
++ const hwc_rect_t r = { 0, 0, res.iWidth, res.iHeight };
++
++ for (int counter = 0; counter < HWC_NUM_DISPLAY_TYPES; counter++)
++ m_bufferList[counter] = list;
++
++ hwc_layer_1_t *layer;
++
++ layer = &list->hwLayers[0];
++ memset(layer, 0, sizeof(hwc_layer_1_t));
++ layer->compositionType = HWC_FRAMEBUFFER;
++ layer->hints = 0;
++ layer->flags = 0;
++ layer->handle = 0;
++ layer->transform = 0;
++ layer->blending = HWC_BLENDING_NONE;
++ layer->sourceCrop = r;
++ layer->displayFrame = r;
++ layer->visibleRegionScreen.numRects = 1;
++ layer->visibleRegionScreen.rects = &layer->displayFrame;
++ layer->acquireFenceFd = -1;
++ layer->releaseFenceFd = -1;
++
++ layer = &list->hwLayers[1];
++ memset(layer, 0, sizeof(hwc_layer_1_t));
++ layer->compositionType = HWC_FRAMEBUFFER_TARGET;
++ layer->hints = 0;
++ layer->flags = 0;
++ layer->handle = 0;
++ layer->transform = 0;
++ layer->blending = HWC_BLENDING_NONE;
++ layer->sourceCrop = r;
++ layer->displayFrame = r;
++ layer->visibleRegionScreen.numRects = 1;
++ layer->visibleRegionScreen.rects = &layer->displayFrame;
++ layer->acquireFenceFd = -1;
++ layer->releaseFenceFd = -1;
++
++ list->retireFenceFd = -1;
++ list->flags = HWC_GEOMETRY_CHANGED;
++ list->numHwLayers = 2;
++
++ m_hwNativeWindow = new HWComposer(res.iWidth, res.iHeight, HAL_PIXEL_FORMAT_RGBA_8888, m_hwcDevicePtr, m_bufferList, &list->hwLayers[1]);
++ if (m_hwNativeWindow == NULL)
++ {
++ CLog::Log(LOGERROR, "HWComposer native window failed!");
++ return false;
++ }
++ m_swNativeWindow = (static_cast (m_hwNativeWindow));
++
++ return true;
++#else
++ return false;
++#endif
++}
++
++bool CEGLNativeTypeHybris::GetNativeDisplay(XBNativeDisplayType **nativeDisplay) const
++{
++ if (!nativeDisplay)
++ return false;
++
++ *nativeDisplay = (XBNativeDisplayType*) &m_nativeDisplay;
++
++ return true;
++}
++
++bool CEGLNativeTypeHybris::GetNativeWindow(XBNativeWindowType **nativeWindow) const
++{
++ if (!nativeWindow)
++ return false;
++
++#if defined(TARGET_HYBRIS)
++ *nativeWindow = (XBNativeWindowType*) &m_swNativeWindow;
++ return (m_swNativeWindow != NULL);
++#else
++ return false;
++#endif
++}
++
++bool CEGLNativeTypeHybris::DestroyNativeDisplay()
++{
++ return true;
++}
++
++bool CEGLNativeTypeHybris::DestroyNativeWindow()
++{
++ m_nativeWindow = NULL;
++ return true;
++}
++
++bool CEGLNativeTypeHybris::GetNativeResolution(RESOLUTION_INFO *res) const
++{
++#if defined(TARGET_HYBRIS)
++ uint32_t configs[5];
++ size_t numConfigs = 5;
++
++ int err = m_hwcDevicePtr->getDisplayConfigs(m_hwcDevicePtr, 0, configs, &numConfigs);
++ if (err) {
++ CLog::Log(LOGERROR, "getDisplayConfigs failed!");
++ return false;
++ }
++ int32_t attr_values[3];
++ uint32_t attributes[] = { HWC_DISPLAY_WIDTH, HWC_DISPLAY_HEIGHT, HWC_DISPLAY_VSYNC_PERIOD, HWC_DISPLAY_NO_ATTRIBUTE };
++
++ m_hwcDevicePtr->getDisplayAttributes(m_hwcDevicePtr, 0, configs[0], attributes, attr_values);
++
++ res->iWidth = attr_values[0];
++ res->iHeight = attr_values[1];
++ res->fRefreshRate = 1000000000 / attr_values[2];
++
++ res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
++ res->iScreen = 0;
++ res->bFullScreen = true;
++ res->iSubtitles = (int)(0.965 * res->iHeight);
++ res->fPixelRatio = 1.0f;
++ res->iScreenWidth = res->iWidth;
++ res->iScreenHeight = res->iHeight;
++ res->strMode = StringUtils::Format("%dx%d @ %.2f%s - Full Screen", res->iScreenWidth, res->iScreenHeight, res->fRefreshRate,
++ res->dwFlags & D3DPRESENTFLAG_INTERLACED ? "i" : "");
++ CLog::Log(LOGNOTICE,"Current resolution: %s\n",res->strMode.c_str());
++ return true;
++#endif
++}
++
++bool CEGLNativeTypeHybris::SetNativeResolution(const RESOLUTION_INFO &res)
++{
++ return false;
++}
++
++bool CEGLNativeTypeHybris::ProbeResolutions(std::vector &resolutions)
++{
++ RESOLUTION_INFO res;
++ if (GetNativeResolution(&res) && res.iWidth > 1 && res.iHeight > 1)
++ {
++ resolutions.push_back(res);
++ return true;
++ }
++ return false;
++}
++
++bool CEGLNativeTypeHybris::GetPreferredResolution(RESOLUTION_INFO *res) const
++{
++ if (GetNativeResolution(res))
++ return true;
++ return false;
++}
++
++bool CEGLNativeTypeHybris::ShowWindow(bool show)
++{
++ return true;
++}
+diff --git a/xbmc/windowing/egl/EGLNativeTypeHybris.h b/xbmc/windowing/egl/EGLNativeTypeHybris.h
+new file mode 100644
+index 0000000..73aa14d
+--- /dev/null
++++ b/xbmc/windowing/egl/EGLNativeTypeHybris.h
+@@ -0,0 +1,77 @@
++#pragma once
++
++/*
++ * Copyright (C) 2011-2012 Team XBMC
++ * http://www.xbmc.org
++ *
++ * This Program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2, or (at your option)
++ * any later version.
++ *
++ * This Program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with XBMC; see the file COPYING. If not, see
++ * .
++ *
++ */
++
++#if defined(TARGET_HYBRIS)
++#include
++#include
++#include
++#endif
++
++#include "EGLNativeType.h"
++#include "threads/Thread.h"
++
++class HWComposer : public HWComposerNativeWindow
++{
++ private:
++ hwc_layer_1_t *fblayer;
++ hwc_composer_device_1_t *hwcdevice;
++ hwc_display_contents_1_t **mlist;
++ protected:
++ void present(HWComposerNativeWindowBuffer *buffer);
++ public:
++ HWComposer(unsigned int width, unsigned int height, unsigned int format, hwc_composer_device_1_t *device, hwc_display_contents_1_t **mList, hwc_layer_1_t *layer);
++};
++
++class CEGLNativeTypeHybris : public CEGLNativeType
++{
++public:
++ CEGLNativeTypeHybris();
++ virtual ~CEGLNativeTypeHybris();
++ virtual std::string GetNativeName() const { return "hybris"; };
++ virtual bool CheckCompatibility();
++ virtual void Initialize();
++ virtual void Destroy();
++ virtual int GetQuirks() { return 0; };
++
++ virtual bool CreateNativeDisplay();
++ virtual bool CreateNativeWindow();
++ virtual bool GetNativeDisplay(XBNativeDisplayType **nativeDisplay) const;
++ virtual bool GetNativeWindow(XBNativeWindowType **nativeWindow) const;
++
++ virtual bool DestroyNativeWindow();
++ virtual bool DestroyNativeDisplay();
++
++ virtual bool GetNativeResolution(RESOLUTION_INFO *res) const;
++ virtual bool SetNativeResolution(const RESOLUTION_INFO &res);
++ virtual bool ProbeResolutions(std::vector &resolutions);
++ virtual bool GetPreferredResolution(RESOLUTION_INFO *res) const;
++
++ virtual bool ShowWindow(bool show);
++#if defined(TARGET_HYBRIS)
++private:
++ hw_module_t *m_hwcModule;
++ hwc_display_contents_1_t **m_bufferList;
++ hwc_composer_device_1_t *m_hwcDevicePtr;
++ HWComposerNativeWindow *m_hwNativeWindow;
++ ANativeWindow *m_swNativeWindow;
++#endif
++};
+diff --git a/xbmc/windowing/egl/EGLWrapper.cpp b/xbmc/windowing/egl/EGLWrapper.cpp
+index 0074027..526a9fe 100644
+--- a/xbmc/windowing/egl/EGLWrapper.cpp
++++ b/xbmc/windowing/egl/EGLWrapper.cpp
+@@ -34,6 +34,10 @@
+ #include "EGLNativeTypeIMX.h"
+ #endif
+ #include "EGLNativeTypeAmlogic.h"
++#ifdef HAS_HYBRIS
++#include "EGLNativeTypeHybris.h"
++#endif
++#include "EGLNativeTypeFbdev.h"
+ #include "EGLWrapper.h"
+
+ #define CheckError() m_result = eglGetError(); if(m_result != EGL_SUCCESS) CLog::Log(LOGERROR, "EGL error in %s: %x",__FUNCTION__, m_result);
+@@ -94,11 +98,14 @@ bool CEGLWrapper::Initialize(const std::string &implementation)
+ (nativeGuess = CreateEGLNativeType(implementation)) ||
+ #endif
+ #if defined(TARGET_RASPBERRY_PI)
+- (nativeGuess = CreateEGLNativeType(implementation))
++ (nativeGuess = CreateEGLNativeType(implementation)) ||
+ #elif defined(HAS_IMXVPU)
+- (nativeGuess = CreateEGLNativeType(implementation))
++ (nativeGuess = CreateEGLNativeType(implementation)) ||
++#elif defined(HAS_HYBRIS)
++ (nativeGuess = CreateEGLNativeType(implementation)) ||
+ #else
+- (nativeGuess = CreateEGLNativeType(implementation))
++ (nativeGuess = CreateEGLNativeType(implementation)) ||
++ (nativeGuess = CreateEGLNativeType(implementation))
+ #endif
+ )
+ {
+@@ -420,4 +427,3 @@ bool CEGLWrapper::SurfaceAttrib(EGLDisplay display, EGLSurface surface, EGLint a
+ return eglSurfaceAttrib(display, surface, attribute, value);
+ }
+ #endif
+-
+diff --git a/xbmc/windowing/egl/Makefile.in b/xbmc/windowing/egl/Makefile.in
+index 3754233..c863504 100644
+--- a/xbmc/windowing/egl/Makefile.in
++++ b/xbmc/windowing/egl/Makefile.in
+@@ -13,6 +13,10 @@ endif
+ ifeq (@USE_IMXVPU@,1)
+ SRCS+= EGLNativeTypeIMX.cpp
+ endif
++ifeq (@USE_HYBRIS@,1)
++SRCS+= EGLNativeTypeHybris.cpp
++endif
++SRCS+= EGLNativeTypeFbdev.cpp
+ SRCS+= EGLWrapper.cpp
+
+ LIB = windowing_egl.a
diff --git a/projects/Odroid_C2/patches/kodi/kodi-0002-aml-Fix-compiler-badness-when-compiling-with-amcodec.patch b/projects/Odroid_C2/patches/kodi/kodi-0002-aml-Fix-compiler-badness-when-compiling-with-amcodec.patch
new file mode 100644
index 0000000000..df0bd9a946
--- /dev/null
+++ b/projects/Odroid_C2/patches/kodi/kodi-0002-aml-Fix-compiler-badness-when-compiling-with-amcodec.patch
@@ -0,0 +1,25 @@
+From 4570b6dfdd6e9dfe67f3f2b1103a3bc4b4a7f9cf Mon Sep 17 00:00:00 2001
+From: Alex Deryskyba
+Date: Sat, 12 Dec 2015 02:15:15 +0100
+Subject: [PATCH 5/6] [aml] Fix compiler badness when compiling with amcodec
+
+---
+ xbmc/cores/dvdplayer/DVDCodecs/Video/Makefile.in | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/Makefile.in b/xbmc/cores/dvdplayer/DVDCodecs/Video/Makefile.in
+index 56ec6a3..52fa07e 100644
+--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/Makefile.in
++++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/Makefile.in
+@@ -26,8 +26,6 @@ endif
+ ifeq (@USE_LIBAMCODEC@,1)
+ SRCS += AMLCodec.cpp
+ SRCS += DVDVideoCodecAmlogic.cpp
+-INCLUDES += -I$(prefix)/include/amcodec
+-INCLUDES += -I$(prefix)/include/amplayer
+ endif
+
+ ifeq (@USE_ANDROID@,1)
+--
+1.7.10.4
+
diff --git a/projects/Odroid_C2/patches/linux/linux-002-gcc5-use_gcc_inline_version_instead_c99.patch b/projects/Odroid_C2/patches/linux/linux-002-gcc5-use_gcc_inline_version_instead_c99.patch
new file mode 100644
index 0000000000..5d5be45d5f
--- /dev/null
+++ b/projects/Odroid_C2/patches/linux/linux-002-gcc5-use_gcc_inline_version_instead_c99.patch
@@ -0,0 +1,17 @@
+diff -Naur a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
+--- a/include/linux/compiler-gcc.h 2016-02-09 12:52:30.000000000 +0100
++++ b/include/linux/compiler-gcc.h 2016-02-09 21:43:41.133285186 +0100
+@@ -53,9 +53,10 @@
+ */
+ #if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) || \
+ !defined(CONFIG_OPTIMIZE_INLINING) || (__GNUC__ < 4)
+-# define inline inline __attribute__((always_inline)) notrace
+-# define __inline__ __inline__ __attribute__((always_inline)) notrace
+-# define __inline __inline __attribute__((always_inline)) notrace
++/* XXX: check __GNUC_STDC_INLINE__, fix line length */
++# define inline inline __attribute__((always_inline)) __attribute__((__gnu_inline__))
++# define __inline__ __inline__ __attribute__((always_inline)) __attribute__((__gnu_inline__))
++# define __inline __inline __attribute__((always_inline)) __attribute__((__gnu_inline__))
+ #else
+ /* A lot of inline functions can cause havoc with function tracing */
+ # define inline inline notrace
diff --git a/projects/Odroid_C2/patches/linux/linux-003-no_dev_console.patch b/projects/Odroid_C2/patches/linux/linux-003-no_dev_console.patch
new file mode 100644
index 0000000000..df35a7ab9a
--- /dev/null
+++ b/projects/Odroid_C2/patches/linux/linux-003-no_dev_console.patch
@@ -0,0 +1,21 @@
+diff --git a/init/main.c b/init/main.c
+index 9484f4b..db55edd 100644
+--- a/init/main.c
++++ b/init/main.c
+@@ -880,8 +880,14 @@ static noinline void __init kernel_init_freeable(void)
+ do_basic_setup();
+
+ /* Open the /dev/console on the rootfs, this should never fail */
+- if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0)
+- pr_err("Warning: unable to open an initial console.\n");
++ char *console = "/dev_console";
++
++ if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0) {
++ sys_mknod(console, S_IFCHR|0600, (TTYAUX_MAJOR<<8)|1);
++ if (sys_open(console, O_RDWR, 0) < 0)
++ printk(KERN_WARNING "Warning: unable to open an initial console.\n");
++ sys_unlink(console);
++ }
+
+ (void) sys_dup(0);
+ (void) sys_dup(0);
diff --git a/projects/Odroid_C2/patches/linux/linux-005-set-default-refresh-rate-switching-policy.patch b/projects/Odroid_C2/patches/linux/linux-005-set-default-refresh-rate-switching-policy.patch
new file mode 100644
index 0000000000..ed4aa2d631
--- /dev/null
+++ b/projects/Odroid_C2/patches/linux/linux-005-set-default-refresh-rate-switching-policy.patch
@@ -0,0 +1,25 @@
+diff -Naur a/drivers/amlogic/display/vout/tv_vout.c b/drivers/amlogic/display/vout/tv_vout.c
+--- a/drivers/amlogic/display/vout/tv_vout.c 2016-04-06 23:18:37.000000000 -0700
++++ b/drivers/amlogic/display/vout/tv_vout.c 2016-04-14 02:05:33.041542772 -0700
+@@ -70,8 +70,8 @@
+ #ifdef CONFIG_AML_VOUT_FRAMERATE_AUTOMATION
+ #define DEFAULT_POLICY_FR_AUTO 1
+ static enum vmode_e mode_by_user = VMODE_INIT_NULL;
+-static int fr_auto_policy = DEFAULT_POLICY_FR_AUTO;
+-static int fr_auto_policy_hold = DEFAULT_POLICY_FR_AUTO;
++static int fr_auto_policy = 0;
++static int fr_auto_policy_hold = 2;
+ static int fps_playing_flag;
+ static enum vmode_e fps_target_mode = VMODE_INIT_NULL;
+ static void policy_framerate_automation_switch_store(char *para);
+@@ -1532,8 +1532,8 @@
+ }
+
+ #ifdef CONFIG_AML_VOUT_FRAMERATE_AUTOMATION
+- sprintf(policy_fr_auto, "%d", DEFAULT_POLICY_FR_AUTO);
+- sprintf(policy_fr_auto_switch, "%d", DEFAULT_POLICY_FR_AUTO);
++ sprintf(policy_fr_auto, "%d", 0);
++ sprintf(policy_fr_auto_switch, "%d", 2);
+ #endif
+ return 0;
+ }
diff --git a/projects/Odroid_C2/patches/linux/linux-999.13-fix-u64-unknown-type.patch b/projects/Odroid_C2/patches/linux/linux-999.13-fix-u64-unknown-type.patch
new file mode 100644
index 0000000000..e3c636281a
--- /dev/null
+++ b/projects/Odroid_C2/patches/linux/linux-999.13-fix-u64-unknown-type.patch
@@ -0,0 +1,12 @@
+diff -Naur a/arch/arm64/include/uapi/asm/sigcontext.h b/arch/arm64/include/uapi/asm/sigcontext.h
+--- a/arch/arm64/include/uapi/asm/sigcontext.h 2016-04-06 23:18:37.000000000 -0700
++++ b/arch/arm64/include/uapi/asm/sigcontext.h 2016-04-07 16:00:47.870241223 -0700
+@@ -58,7 +58,7 @@
+
+ struct esr_context {
+ struct _aarch64_ctx head;
+- u64 esr;
++ __u64 esr;
+ };
+
+ #endif /* _UAPI__ASM_SIGCONTEXT_H */
diff --git a/projects/Odroid_C2/patches/u-boot/u-boot-0001-set-default-boot-options.patch b/projects/Odroid_C2/patches/u-boot/u-boot-0001-set-default-boot-options.patch
new file mode 100644
index 0000000000..078be0a980
--- /dev/null
+++ b/projects/Odroid_C2/patches/u-boot/u-boot-0001-set-default-boot-options.patch
@@ -0,0 +1,56 @@
+diff -Naur a/include/configs/odroidc2.h b/include/configs/odroidc2.h
+--- a/include/configs/odroidc2.h 2016-03-30 00:48:47.000000000 -0700
++++ b/include/configs/odroidc2.h 2016-05-02 11:46:12.581483463 -0700
+@@ -79,36 +79,24 @@
+ #define CONFIG_SYS_MAXARGS 64
+
+ #define CONFIG_EXTRA_ENV_SETTINGS \
+- "boardname=ODROIDC2\0" \
+- "loadaddr=0x20000000\0" \
+- "dtbaddr=0x1000000\0" \
+- "fdt_high=0x20000000\0" \
+- "hdmimode=720p60hz\0" \
+- "cecconfig=cec0xf\0" \
+- "bootargs=root=/dev/mmcblk0p2 rw init=/init rootwait " \
+- "console=ttyS0,115200 " \
+- "hdmimode=720p60hz hdmitx=cecf " \
+- "logo=osd1,loaded,0x3f800000,720p60hz " \
+- "androidboot.hardware=odroidc2 androidboot.serialno=${fbt_id#} " \
+- "androidboot.selinux=disabled \0" \
+- "bootcmd=cfgload; showlogo ${hdmimode}; movi read dtb 0 ${dtbaddr}; movi read boot 0 ${loadaddr}; booti ${loadaddr} - ${dtbaddr}\0"
++ "bootcmd=cfgload\0"
+
+ #define CONFIG_PREBOOT
+ #define CONFIG_BOOTCOMMAND
+
+-//#define CONFIG_ENV_IS_NOWHERE 1
++#define CONFIG_ENV_IS_NOWHERE 1
+ #define CONFIG_ENV_SIZE (32 * SZ_1K) /* 32kB */
+ #define CONFIG_ENV_OFFSET (720 * SZ_1K) /* FIXME: should be
+ close to U-boot image
+ size to save space */
+ #define CONFIG_FIT 1
+ #define CONFIG_OF_LIBFDT 1
+-#define CONFIG_ANDROID_BOOT_IMAGE 1
+-#define CONFIG_ANDROID_IMG 1
++//#define CONFIG_ANDROID_BOOT_IMAGE 1
++//#define CONFIG_ANDROID_IMG 1
+ #define CONFIG_SYS_BOOTM_LEN (64 << 20) /* Increase max gunzip size*/
+
+ /* Support commands */
+-#define CONFIG_CMD_SAVEENV 1
++//#define CONFIG_CMD_SAVEENV 1
+ #define CONFIG_CMD_CACHE 1
+ #define CONFIG_CMD_BOOTI 1
+ #define CONFIG_CMD_EFUSE 1
+@@ -176,8 +164,8 @@
+ #define CONFIG_LZO 1
+
+ /* storage: emmc/nand/sd */
+-#define CONFIG_ENV_OVERWRITE
+-#define CONFIG_ENV_IS_IN_MMC 1
++//#define CONFIG_ENV_OVERWRITE
++#define CONFIG_ENV_IS_IN_MMC 0
+ #define CONFIG_SYS_MMC_ENV_DEV 0
+ #define CONFIG_AML_SD_EMMC 1
+
diff --git a/projects/WeTek_Core/options b/projects/WeTek_Core/options
index 0efcdde22e..be6f37d530 100644
--- a/projects/WeTek_Core/options
+++ b/projects/WeTek_Core/options
@@ -99,7 +99,7 @@
# OpenGL-ES implementation to use (no / bcm2835-driver / gpu-viv-bin-mx6q / opengl-meson)
OPENGLES="opengl-meson"
- # Amlogic Meson SOC family (8 / 6)
+ # Amlogic Meson SOC family (8 / 6 / gxbb)
MESON_FAMILY="8"
# include uvesafb support (yes / no)
diff --git a/projects/WeTek_Play/options b/projects/WeTek_Play/options
index 384be25095..c315bc131c 100644
--- a/projects/WeTek_Play/options
+++ b/projects/WeTek_Play/options
@@ -93,7 +93,7 @@
# OpenGL-ES implementation to use (no / bcm2835-driver / gpu-viv-bin-mx6q / opengl-meson)
OPENGLES="opengl-meson"
- # Amlogic Meson SOC family (8 / 6)
+ # Amlogic Meson SOC family (8 / 6 / gxbb)
MESON_FAMILY="6"
# include uvesafb support (yes / no)
diff --git a/scripts/mkimage b/scripts/mkimage
index 3b692b5047..0453fcb77f 100755
--- a/scripts/mkimage
+++ b/scripts/mkimage
@@ -216,6 +216,10 @@ elif [ "$BOOTLOADER" = "u-boot" ]; then
elif [ -f "$RELEASE_DIR/3rdparty/bootloader/u-boot-fuse" ]; then
# allow custom dd script for vendor specific fusing
. $RELEASE_DIR/3rdparty/bootloader/u-boot-fuse
+ elif [ -f "$RELEASE_DIR/3rdparty/bootloader/u-boot" ]; then
+ dd if="$RELEASE_DIR/3rdparty/bootloader/bl1" of="$DISK" conv=fsync,notrunc bs=1 count=442 >"$SAVE_ERROR" 2>&1 || show_error
+ dd if="$RELEASE_DIR/3rdparty/bootloader/bl1" of="$DISK" conv=fsync,notrunc bs=512 skip=1 seek=1 >"$SAVE_ERROR" 2>&1 || show_error
+ dd if="$RELEASE_DIR/3rdparty/bootloader/u-boot" of="$DISK" conv=fsync,notrunc bs=512 seek=97 >"$SAVE_ERROR" 2>&1 || show_error
fi
echo "image: copying files to part1..."