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..."