From b4e373cf4fa61bbe21eff191ad47bb6b9ed71ea0 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Fri, 3 Nov 2017 07:22:01 -0700 Subject: [PATCH] imx6: temporarily remove project --- projects/imx6/bootloader/uEnv-matrix.txt | 20 - projects/imx6/bootloader/uEnv-udoo.txt | 34 - projects/imx6/bootloader/uEnv.txt | 22 - .../lib/systemd/system/imx6-poweroff.service | 15 - .../lib/systemd/system/serial-console.service | 23 - .../usr/share/alsa/cards/imx-hdmi-soc.conf | 32 - .../usr/share/alsa/cards/imx-sgtl5000.conf | 15 - .../usr/share/alsa/cards/imx-spdif.conf | 32 - .../share/alsa/cards/imx-vt1613-audio.conf | 15 - .../imx6/kernel-firmware/firmwares/any.dat | 15 - projects/imx6/kodi/advancedsettings.xml | 4 - projects/imx6/kodi/guisettings.xml | 5 - projects/imx6/linux/3.14-sr/linux.arm.conf | 4451 ----------- projects/imx6/linux/4.4-xbian/linux.arm.conf | 6572 ----------------- projects/imx6/options | 132 - .../RTL8192EU-010-compile-3.14.patch | 40 - .../RTL8812AU-010-compile-3.14.patch | 40 - ...mx_passthrough_over_spdif_old_kernel.patch | 13 - .../libcec-100-from-openbricks-3.14.patch | 743 -- .../4.4-xbian/libcec-100-from-xbian.patch | 1758 ----- ...ux_use_static_inline_in_ARM_ftrace.h.patch | 52 - ...hange-extern-inline-to-static-inline.patch | 59 - .../linux-003-rename-sgtl5000-codec.patch | 67 - .../linux-004-fix-build-with-gcc-5.patch | 16 - .../3.14-sr/linux-005-pci-suspend-fix.patch | 15 - .../3.14-sr/linux-007-config_cmdline.patch | 36 - .../3.14-sr/linux-010_tivo_slide_pro.patch | 57 - ...020-gpio-ir-recv-add-timeout-on-idle.patch | 146 - .../linux-051-ouya_controller_support.patch | 315 - .../linux-052-XBOX_remote_support.patch | 1029 --- .../linux-053-spinelplus-remote-0.2.patch | 161 - ...-add_Formosa_eHome_Infrared_Receiver.patch | 11 - ...-add_Adaptec_eHome_Infrared_Receiver.patch | 21 - ...tomer-code-restriction-in-rc6-decode.patch | 22 - ..._Manufacturing_Inc_Infrared_Receiver.patch | 13 - ..._sony-add_autorepeat_for_PS3_remotes.patch | 59 - .../linux-058.06-hid_sony-add_SMK_link.patch | 38 - .../linux-059-remove_some_xpad_pids-0.2.patch | 11 - .../linux-060-add_AUGUST_DVB-T205.patch | 12 - .../3.14-sr/linux-061-valve-xpad-rework.patch | 462 -- .../linux-062-imon_pad_ignore_diagonal.patch | 21 - ...x-203-stb0899_enable_low_symbol_rate.patch | 12 - .../linux/3.14-sr/linux-210-dvbsky.patch | 6132 --------------- ...linux-212-mantis_stb0899_faster_lock.patch | 138 - .../linux-222-stb0899_signal_quality.patch | 62 - ...-video-artifacts-with-tt-3600-s2-usb.patch | 17 - .../linux-224-geniatech-t220-dvb-t2-fix.patch | 97 - .../linux/3.14-sr/linux-225-ct2-devices.patch | 4334 ----------- .../3.14-sr/linux-226-pctv292e-devices.patch | 192 - .../linux/3.14-sr/linux-250-fix-dvbsky.patch | 15 - .../3.14-sr/linux-301-tbs2910_dtb_fan.patch | 25 - .../3.14-sr/linux-310-udoo-lvds-support.patch | 340 - .../linux-320-cuboxi_led_heartbeat.patch | 20 - .../linux-410-limit-eth-speed-100mbits.patch | 55 - ...704-Support-for-Ubiquiti-WifiStation.patch | 28 - ...Support-for-Buffalo-WLI-UC-G300HP-V1.patch | 10 - .../3.14-sr/linux-706-Sitecom-N300.patch | 11 - .../3.14-sr/linux-800-from-openbricks.patch | 4560 ------------ .../3.14-sr/linux-991.01-ptrace_fix.patch | 17 - .../linux-995-CX24120-13Z_frontend.patch | 1577 ---- .../3.14-sr/linux-999-9-fritz-stick-1.patch | 48 - .../3.14-sr/linux-999-9-fritz-stick-2.patch | 48 - ...able-async-suspend-resume-by-default.patch | 25 - .../linux-999.03-0001-fix-mceusb.patch | 92 - .../linux-001-systemd-time-fix.patch | 24 - .../linux-004-fix-build-with-gcc-5.patch | 16 - .../4.4-xbian/linux-007-config_cmdline.patch | 35 - ...020-gpio-ir-recv-add-timeout-on-idle.patch | 120 - .../linux-051-ouya_controller_support.patch | 315 - .../linux-053-spinelplus-remote-0.2.patch | 164 - ...-add_Adaptec_eHome_Infrared_Receiver.patch | 21 - ...tomer-code-restriction-in-rc6-decode.patch | 28 - ..._Manufacturing_Inc_Infrared_Receiver.patch | 13 - ..._sony-add_autorepeat_for_PS3_remotes.patch | 70 - .../linux-062-imon_pad_ignore_diagonal.patch | 21 - .../linux-063-xpad-fix_xbox360_wireless.patch | 963 --- ...x-203-stb0899_enable_low_symbol_rate.patch | 12 - ...linux-212-mantis_stb0899_faster_lock.patch | 138 - .../linux-222-stb0899_signal_quality.patch | 62 - ...-video-artifacts-with-tt-3600-s2-usb.patch | 17 - .../linux-224_Hauppauge_WinTV-soloHD.patch | 41 - ...linux-227-ds3000-invalid-symbol-rate.patch | 18 - .../linux-228-support-tt-ct2-4650-v2.patch | 25 - .../linux-229-avermedia-volar-hd2.patch | 25 - .../linux-230-elgato-eyetv-sat-v3.patch | 50 - .../linux-231-fix-cx23885-ci-devices.patch | 22 - ...-232-Terratec-Cinergy-S2-Rev.3.patch.patch | 48 - .../linux-310-cuboxi_led_heartbeat.patch | 10 - .../linux-400-solidrun-som-v15.patch | 2266 ------ .../linux-410-limit-eth-speed-100mbits.patch | 55 - .../linux/4.4-xbian/linux-800-from-vero.patch | 104 - .../linux/4.4-xbian/linux-999-warn-only.patch | 13 - ...alize-partitions-on-RPMB-flagged-are.patch | 26 - .../u-boot/010-cuboxi-u-boot-zImage.patch | 46 - .../u-boot/011-cuboxi-faster-boot.patch | 11 - .../patches/u-boot/012-hb1-fb-device.patch | 24 - ...qsabre_common-uEnv.txt-bootz-n-fixes.patch | 109 - .../u-boot/030-tbs_matrix_system.patch | 49 - .../u-boot/040-tbs_matrix_zImage.patch | 84 - .../u-boot/050-tbs_matrix_multiboot.patch | 36 - .../patches/u-boot/060-tbs_matrix_usb.patch | 22 - projects/imx6/patches/u-boot/070_gcc7.patch | 69 - 102 files changed, 39631 deletions(-) delete mode 100644 projects/imx6/bootloader/uEnv-matrix.txt delete mode 100644 projects/imx6/bootloader/uEnv-udoo.txt delete mode 100644 projects/imx6/bootloader/uEnv.txt delete mode 100644 projects/imx6/filesystem/usr/lib/systemd/system/imx6-poweroff.service delete mode 100644 projects/imx6/filesystem/usr/lib/systemd/system/serial-console.service delete mode 100644 projects/imx6/filesystem/usr/share/alsa/cards/imx-hdmi-soc.conf delete mode 100644 projects/imx6/filesystem/usr/share/alsa/cards/imx-sgtl5000.conf delete mode 100644 projects/imx6/filesystem/usr/share/alsa/cards/imx-spdif.conf delete mode 100644 projects/imx6/filesystem/usr/share/alsa/cards/imx-vt1613-audio.conf delete mode 100644 projects/imx6/kernel-firmware/firmwares/any.dat delete mode 100644 projects/imx6/kodi/advancedsettings.xml delete mode 100644 projects/imx6/kodi/guisettings.xml delete mode 100644 projects/imx6/linux/3.14-sr/linux.arm.conf delete mode 100644 projects/imx6/linux/4.4-xbian/linux.arm.conf delete mode 100644 projects/imx6/options delete mode 100644 projects/imx6/patches/RTL8192EU/RTL8192EU-010-compile-3.14.patch delete mode 100644 projects/imx6/patches/RTL8812AU/RTL8812AU-010-compile-3.14.patch delete mode 100644 projects/imx6/patches/alsa-lib/alsa-lib-enable_imx_passthrough_over_spdif_old_kernel.patch delete mode 100644 projects/imx6/patches/libcec/3.14-sr/libcec-100-from-openbricks-3.14.patch delete mode 100644 projects/imx6/patches/libcec/4.4-xbian/libcec-100-from-xbian.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-001-LLVMLinux_use_static_inline_in_ARM_ftrace.h.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-002-ARM-LLVMLinux-Change-extern-inline-to-static-inline.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-003-rename-sgtl5000-codec.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-004-fix-build-with-gcc-5.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-005-pci-suspend-fix.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-007-config_cmdline.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-010_tivo_slide_pro.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-020-gpio-ir-recv-add-timeout-on-idle.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-051-ouya_controller_support.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-052-XBOX_remote_support.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-053-spinelplus-remote-0.2.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-055-add_Formosa_eHome_Infrared_Receiver.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-056-add_Adaptec_eHome_Infrared_Receiver.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-057-Removed-MCE-customer-code-restriction-in-rc6-decode.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-057-add_SMK_Manufacturing_Inc_Infrared_Receiver.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-058.05-hid_sony-add_autorepeat_for_PS3_remotes.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-058.06-hid_sony-add_SMK_link.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-059-remove_some_xpad_pids-0.2.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-060-add_AUGUST_DVB-T205.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-061-valve-xpad-rework.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-062-imon_pad_ignore_diagonal.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-203-stb0899_enable_low_symbol_rate.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-210-dvbsky.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-212-mantis_stb0899_faster_lock.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-222-stb0899_signal_quality.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-223-Fix-video-artifacts-with-tt-3600-s2-usb.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-224-geniatech-t220-dvb-t2-fix.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-225-ct2-devices.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-226-pctv292e-devices.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-250-fix-dvbsky.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-301-tbs2910_dtb_fan.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-310-udoo-lvds-support.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-320-cuboxi_led_heartbeat.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-410-limit-eth-speed-100mbits.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-704-Support-for-Ubiquiti-WifiStation.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-705-Support-for-Buffalo-WLI-UC-G300HP-V1.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-706-Sitecom-N300.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-800-from-openbricks.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-991.01-ptrace_fix.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-995-CX24120-13Z_frontend.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-999-9-fritz-stick-1.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-999-9-fritz-stick-2.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-999.02-0001-pm-disable-async-suspend-resume-by-default.patch delete mode 100644 projects/imx6/patches/linux/3.14-sr/linux-999.03-0001-fix-mceusb.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-001-systemd-time-fix.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-004-fix-build-with-gcc-5.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-007-config_cmdline.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-020-gpio-ir-recv-add-timeout-on-idle.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-051-ouya_controller_support.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-053-spinelplus-remote-0.2.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-056-add_Adaptec_eHome_Infrared_Receiver.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-057-Removed-MCE-customer-code-restriction-in-rc6-decode.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-057-add_SMK_Manufacturing_Inc_Infrared_Receiver.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-058.05-hid_sony-add_autorepeat_for_PS3_remotes.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-062-imon_pad_ignore_diagonal.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-063-xpad-fix_xbox360_wireless.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-203-stb0899_enable_low_symbol_rate.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-212-mantis_stb0899_faster_lock.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-222-stb0899_signal_quality.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-223-Fix-video-artifacts-with-tt-3600-s2-usb.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-224_Hauppauge_WinTV-soloHD.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-227-ds3000-invalid-symbol-rate.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-228-support-tt-ct2-4650-v2.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-229-avermedia-volar-hd2.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-230-elgato-eyetv-sat-v3.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-231-fix-cx23885-ci-devices.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-232-Terratec-Cinergy-S2-Rev.3.patch.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-310-cuboxi_led_heartbeat.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-400-solidrun-som-v15.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-410-limit-eth-speed-100mbits.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-800-from-vero.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-999-warn-only.patch delete mode 100644 projects/imx6/patches/linux/4.4-xbian/linux-999.05-eMMC-Don-t-initialize-partitions-on-RPMB-flagged-are.patch delete mode 100644 projects/imx6/patches/u-boot/010-cuboxi-u-boot-zImage.patch delete mode 100644 projects/imx6/patches/u-boot/011-cuboxi-faster-boot.patch delete mode 100644 projects/imx6/patches/u-boot/012-hb1-fb-device.patch delete mode 100644 projects/imx6/patches/u-boot/020-mx6qsabre_common-uEnv.txt-bootz-n-fixes.patch delete mode 100644 projects/imx6/patches/u-boot/030-tbs_matrix_system.patch delete mode 100644 projects/imx6/patches/u-boot/040-tbs_matrix_zImage.patch delete mode 100644 projects/imx6/patches/u-boot/050-tbs_matrix_multiboot.patch delete mode 100644 projects/imx6/patches/u-boot/060-tbs_matrix_usb.patch delete mode 100644 projects/imx6/patches/u-boot/070_gcc7.patch diff --git a/projects/imx6/bootloader/uEnv-matrix.txt b/projects/imx6/bootloader/uEnv-matrix.txt deleted file mode 100644 index ba9ca56a2e..0000000000 --- a/projects/imx6/bootloader/uEnv-matrix.txt +++ /dev/null @@ -1,20 +0,0 @@ -# make boot more quiet -console_arg=quiet morequiet -# or having quiet and serial console -#console_arg=console=ttymxc0,115200 quiet morequiet -# show messages in serial console -#console_arg=console=ttymxc0,115200 no_console_suspend=1 - -# enable ssh -#ssh_arg=ssh - -# enable debugging (kodi debug) -#debugging_arg=debugging - -# enable gigabit speed instead of 100mbit -#enable_giga_arg=fec.disable_giga=0 - -zImage=/KERNEL -bootfile=/KERNEL -mmcargs=setenv bootargs "boot=/dev/mmcblk0p1 disk=/dev/mmcblk0p2 ${ssh_arg} ${console_arg} ${debugging_arg} ${enable_giga_arg} video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24,bpp=32 dmfc=3 consoleblank=0" -uenvcmd=if test -n $ethaddr; then true; else setenv ethaddr 1E:ED:19:27:1A:B2; fi diff --git a/projects/imx6/bootloader/uEnv-udoo.txt b/projects/imx6/bootloader/uEnv-udoo.txt deleted file mode 100644 index db52caa771..0000000000 --- a/projects/imx6/bootloader/uEnv-udoo.txt +++ /dev/null @@ -1,34 +0,0 @@ -# enable only one video output - -# HDMI -video=mxcfb0:dev=hdmi,1920x1080M@60,bpp=32 - -# 7" LVDS -#video=mxcfb0:dev=ldb,800x480M@60,if=RGB666,bpp=32 -#fdt_file=imx6q-udoo-7lvds.dtb -#fdt_file=imx6dl-udoo-7lvds.dtb - -# 15.6" LVDS -#video=mxcfb0:dev=ldb,1360x768M@60,if=RGB24,bpp=32 -#fdt_file=imx6q-udoo-15lvds.dtb -#fdt_file=imx6dl-udoo-15lvds.dtb - -# make boot more quiet -console_arg=quiet morequiet -# or having quiet and serial console -#console_arg=console=ttymxc0,115200 quiet morequiet -# show messages in serial console -#console_arg=console=ttymxc0,115200 no_console_suspend=1 - -# enable ssh -#ssh_arg=ssh - -# enable debugging (kodi debug) -#debugging_arg=debugging - -# enable gigabit speed instead of 100mbit -#enable_giga_arg=fec.disable_giga=0 - -zImage=/KERNEL -bootfile=/KERNEL -mmcargs=setenv bootargs boot=/dev/mmcblk0p1 disk=/dev/mmcblk0p2 ${ssh_arg} ${console_arg} ${debugging_arg} ${enable_giga_arg} video=${video} dmfc=3 consoleblank=0 diff --git a/projects/imx6/bootloader/uEnv.txt b/projects/imx6/bootloader/uEnv.txt deleted file mode 100644 index e10a83a889..0000000000 --- a/projects/imx6/bootloader/uEnv.txt +++ /dev/null @@ -1,22 +0,0 @@ -# make boot more quiet -console_arg=quiet morequiet -# or having quiet and serial console -#console_arg=console=ttymxc0,115200 quiet morequiet -# show messages in serial console -#console_arg=console=ttymxc0,115200 no_console_suspend=1 - -# enable ssh -#ssh_arg=ssh - -# enable debugging (kodi debug) -#debugging_arg=debugging - -# overwrite dtb file -#fdt_file=imx6q-cubox-i.dtb - -# enable gigabit speed instead of 100mbit -#enable_giga_arg=fec.disable_giga=0 - -zImage=/KERNEL -bootfile=/KERNEL -mmcargs=setenv bootargs "boot=/dev/mmcblk0p1 disk=/dev/mmcblk0p2 ${ssh_arg} ${console_arg} ${debugging_arg} ${enable_giga_arg} video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24,bpp=32 dmfc=3 consoleblank=0" diff --git a/projects/imx6/filesystem/usr/lib/systemd/system/imx6-poweroff.service b/projects/imx6/filesystem/usr/lib/systemd/system/imx6-poweroff.service deleted file mode 100644 index fe62bd2fa4..0000000000 --- a/projects/imx6/filesystem/usr/lib/systemd/system/imx6-poweroff.service +++ /dev/null @@ -1,15 +0,0 @@ -[Unit] -Description=imx6 poweroff service -Before=systemd-poweroff.service -After=kodi-poweroff.service -DefaultDependencies=no - -[Service] -Type=oneshot -Environment=HOME=/storage -ExecStart=-/bin/sh -c "echo 0 > /sys/class/leds/imx6\:red\:front/brightness; echo 1 > /sys/class/graphics/fb0/blank" -StandardError=null -RemainAfterExit=yes - -[Install] -WantedBy=poweroff.target diff --git a/projects/imx6/filesystem/usr/lib/systemd/system/serial-console.service b/projects/imx6/filesystem/usr/lib/systemd/system/serial-console.service deleted file mode 100644 index 07b0cbade7..0000000000 --- a/projects/imx6/filesystem/usr/lib/systemd/system/serial-console.service +++ /dev/null @@ -1,23 +0,0 @@ -[Unit] -Description=Debug Shell on /dev/ttymxc0 -DefaultDependencies=no -ConditionKernelCommandLine=console=ttymxc0,115200 - -[Service] -WorkingDirectory=/storage -Environment="ENV=/etc/profile" -ExecStartPre=/bin/reset -ExecStart=/bin/sh -Restart=always -RestartSec=0 -StandardInput=tty -TTYPath=/dev/ttymxc0 -TTYReset=yes -TTYVHangup=yes -KillMode=process -IgnoreSIGPIPE=no -# bash ignores SIGTERM -KillSignal=SIGHUP - -[Install] -WantedBy=sysinit.target diff --git a/projects/imx6/filesystem/usr/share/alsa/cards/imx-hdmi-soc.conf b/projects/imx6/filesystem/usr/share/alsa/cards/imx-hdmi-soc.conf deleted file mode 100644 index 78d5b8b6d4..0000000000 --- a/projects/imx6/filesystem/usr/share/alsa/cards/imx-hdmi-soc.conf +++ /dev/null @@ -1,32 +0,0 @@ -# -# Configuration for iMX6 HDMI output - /usr/share/alsa/cards/imx-hdmi-soc.conf -# - - - -imx-hdmi-soc.pcm.hdmi.0 { - @args [ CARD AES0 AES1 AES2 AES3 ] - @args.CARD { type string } - @args.AES0 { type integer } - @args.AES1 { type integer } - @args.AES2 { type integer } - @args.AES3 { type integer } - type hooks - slave.pcm { - type hw - card $CARD - } - hooks.0 { - type ctl_elems - hook_args [ - { - interface MIXER - name "IEC958 Playback Default" - lock true - preserve true - optional true - value [ $AES0 $AES1 $AES2 $AES3 ] - } - ] - } -} diff --git a/projects/imx6/filesystem/usr/share/alsa/cards/imx-sgtl5000.conf b/projects/imx6/filesystem/usr/share/alsa/cards/imx-sgtl5000.conf deleted file mode 100644 index 40d2204303..0000000000 --- a/projects/imx6/filesystem/usr/share/alsa/cards/imx-sgtl5000.conf +++ /dev/null @@ -1,15 +0,0 @@ -# -# Configuration for iMX6 sgtl5000 analog output - /usr/share/alsa/cards/imx-sgtl5000.conf -# - - - -imx-sgtl5000.pcm.front.0 { - @args [ CARD ] - @args.CARD { - type string - } - type hw - card $CARD - device 0 -} diff --git a/projects/imx6/filesystem/usr/share/alsa/cards/imx-spdif.conf b/projects/imx6/filesystem/usr/share/alsa/cards/imx-spdif.conf deleted file mode 100644 index 689c7322ca..0000000000 --- a/projects/imx6/filesystem/usr/share/alsa/cards/imx-spdif.conf +++ /dev/null @@ -1,32 +0,0 @@ -# -# Configuration for iMX6 SPDIF output - /usr/share/alsa/cards/imx-spdif.conf -# - - - -imx-spdif.pcm.iec958.0 { - @args [ CARD AES0 AES1 AES2 AES3 ] - @args.CARD { type string } - @args.AES0 { type integer } - @args.AES1 { type integer } - @args.AES2 { type integer } - @args.AES3 { type integer } - type hooks - slave.pcm { - type hw - card $CARD - } - hooks.0 { - type ctl_elems - hook_args [ - { - interface MIXER - name "IEC958 Playback Default" - lock true - preserve true - optional true - value [ $AES0 $AES1 $AES2 $AES3 ] - } - ] - } -} diff --git a/projects/imx6/filesystem/usr/share/alsa/cards/imx-vt1613-audio.conf b/projects/imx6/filesystem/usr/share/alsa/cards/imx-vt1613-audio.conf deleted file mode 100644 index 5f69734d84..0000000000 --- a/projects/imx6/filesystem/usr/share/alsa/cards/imx-vt1613-audio.conf +++ /dev/null @@ -1,15 +0,0 @@ -# -# Configuration for iMX6 VT1613 analog output - /usr/share/alsa/cards/imx-vt1613-audio.conf -# - - - -imx-vt1613-audio.pcm.front.0 { - @args [ CARD ] - @args.CARD { - type string - } - type hw - card $CARD - device 0 -} diff --git a/projects/imx6/kernel-firmware/firmwares/any.dat b/projects/imx6/kernel-firmware/firmwares/any.dat deleted file mode 100644 index b5111dec47..0000000000 --- a/projects/imx6/kernel-firmware/firmwares/any.dat +++ /dev/null @@ -1,15 +0,0 @@ -rsi_91x.fw -f2255usb.bin - -mts_mt9234mu.fw -mts_mt9234zba.fw - -wil6210.brd -wil6210.fw - -ti-connectivity/wl1251-fw.bin -ti-connectivity/wl1251-nvs.bin -ti-connectivity/wl12{7,8}x-fw-{4,5}{,-mr,-plt,-sr}.bin -ti-connectivity/wl1271-nvs.bin - -mrvl/{sd,usb}*.bin diff --git a/projects/imx6/kodi/advancedsettings.xml b/projects/imx6/kodi/advancedsettings.xml deleted file mode 100644 index e37a965f54..0000000000 --- a/projects/imx6/kodi/advancedsettings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - cputemp - gputemp - diff --git a/projects/imx6/kodi/guisettings.xml b/projects/imx6/kodi/guisettings.xml deleted file mode 100644 index 68634f252d..0000000000 --- a/projects/imx6/kodi/guisettings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - ALSA:hdmi:CARD=imxhdmisoc,DEV=0 - - diff --git a/projects/imx6/linux/3.14-sr/linux.arm.conf b/projects/imx6/linux/3.14-sr/linux.arm.conf deleted file mode 100644 index 3e9d695751..0000000000 --- a/projects/imx6/linux/3.14-sr/linux.arm.conf +++ /dev/null @@ -1,4451 +0,0 @@ -# -# Automatically generated file; DO NOT EDIT. -# Linux/arm 3.14.79 Kernel Configuration -# -CONFIG_ARM=y -CONFIG_MIGHT_HAVE_PCI=y -CONFIG_SYS_SUPPORTS_APM_EMULATION=y -CONFIG_HAVE_PROC_CPU=y -CONFIG_STACKTRACE_SUPPORT=y -CONFIG_LOCKDEP_SUPPORT=y -CONFIG_TRACE_IRQFLAGS_SUPPORT=y -CONFIG_RWSEM_XCHGADD_ALGORITHM=y -CONFIG_ARCH_HAS_CPUFREQ=y -CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y -CONFIG_ZONE_DMA=y -CONFIG_NEED_DMA_MAP_STATE=y -CONFIG_VECTORS_BASE=0xffff0000 -CONFIG_ARM_PATCH_PHYS_VIRT=y -CONFIG_GENERIC_BUG=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_HAVE_KERNEL_GZIP=y -CONFIG_HAVE_KERNEL_LZMA=y -CONFIG_HAVE_KERNEL_XZ=y -CONFIG_HAVE_KERNEL_LZO=y -CONFIG_HAVE_KERNEL_LZ4=y -CONFIG_KERNEL_GZIP=y -# CONFIG_KERNEL_LZMA is not set -# CONFIG_KERNEL_XZ is not set -# CONFIG_KERNEL_LZO is not set -# CONFIG_KERNEL_LZ4 is not set -CONFIG_DEFAULT_HOSTNAME="@DISTRONAME@" -CONFIG_SWAP=y -CONFIG_SYSVIPC=y -CONFIG_SYSVIPC_SYSCTL=y -CONFIG_POSIX_MQUEUE=y -CONFIG_POSIX_MQUEUE_SYSCTL=y -CONFIG_FHANDLE=y -# CONFIG_AUDIT is not set - -# -# IRQ subsystem -# -CONFIG_GENERIC_IRQ_PROBE=y -CONFIG_GENERIC_IRQ_SHOW=y -CONFIG_HARDIRQS_SW_RESEND=y -CONFIG_GENERIC_IRQ_CHIP=y -CONFIG_IRQ_DOMAIN=y -# CONFIG_IRQ_DOMAIN_DEBUG is not set -CONFIG_IRQ_FORCED_THREADING=y -CONFIG_SPARSE_IRQ=y -CONFIG_KTIME_SCALAR=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_IRQ_TIME_ACCOUNTING is not set -# CONFIG_BSD_PROCESS_ACCT is not set -# CONFIG_TASKSTATS is not set - -# -# RCU Subsystem -# -CONFIG_TREE_RCU=y -# CONFIG_PREEMPT_RCU is not set -CONFIG_RCU_STALL_COMMON=y -# CONFIG_RCU_USER_QS is not set -CONFIG_RCU_FANOUT=32 -CONFIG_RCU_FANOUT_LEAF=16 -# CONFIG_RCU_FANOUT_EXACT is not set -# CONFIG_RCU_FAST_NO_HZ is not set -# CONFIG_TREE_RCU_TRACE is not set -CONFIG_RCU_NOCB_CPU=y -# CONFIG_RCU_NOCB_CPU_NONE is not set -# CONFIG_RCU_NOCB_CPU_ZERO is not set -CONFIG_RCU_NOCB_CPU_ALL=y -CONFIG_IKCONFIG=y -CONFIG_IKCONFIG_PROC=y -CONFIG_LOG_BUF_SHIFT=17 -CONFIG_GENERIC_SCHED_CLOCK=y -CONFIG_CGROUPS=y -# CONFIG_CGROUP_DEBUG is not set -# CONFIG_CGROUP_FREEZER is not set -# CONFIG_CGROUP_DEVICE is not set -# CONFIG_CPUSETS is not set -# CONFIG_CGROUP_CPUACCT is not set -# CONFIG_RESOURCE_COUNTERS is not set -# CONFIG_CGROUP_SCHED is not set -# CONFIG_BLK_CGROUP is not set -# CONFIG_CHECKPOINT_RESTORE is not set -# CONFIG_NAMESPACES is not set -# CONFIG_SCHED_AUTOGROUP is not set -# 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 is not set -# CONFIG_RD_LZMA is not set -# CONFIG_RD_XZ is not set -# CONFIG_RD_LZO is not set -# CONFIG_RD_LZ4 is not set -CONFIG_INITRAMFS_COMPRESSION_NONE=y -# CONFIG_INITRAMFS_COMPRESSION_GZIP is not set -# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set -CONFIG_SYSCTL=y -CONFIG_ANON_INODES=y -CONFIG_HAVE_UID16=y -CONFIG_EXPERT=y -# CONFIG_UID16 is not set -CONFIG_SYSCTL_SYSCALL=y -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_PCI_QUIRKS=y -CONFIG_EMBEDDED=y -CONFIG_HAVE_PERF_EVENTS=y -CONFIG_PERF_USE_VMALLOC=y - -# -# Kernel Performance Events And Counters -# -# CONFIG_PERF_EVENTS is not set -# CONFIG_VM_EVENT_COUNTERS is not set -CONFIG_SLUB_DEBUG=y -# CONFIG_COMPAT_BRK is not set -# CONFIG_SLAB is not set -CONFIG_SLUB=y -# CONFIG_SLOB is not set -CONFIG_SLUB_CPU_PARTIAL=y -# CONFIG_SYSTEM_TRUSTED_KEYRING is not set -# CONFIG_PROFILING is not set -CONFIG_HAVE_OPROFILE=y -# CONFIG_KPROBES is not set -CONFIG_JUMP_LABEL=y -# CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set -CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y -CONFIG_ARCH_USE_BUILTIN_BSWAP=y -CONFIG_HAVE_KPROBES=y -CONFIG_HAVE_KRETPROBES=y -CONFIG_HAVE_ARCH_TRACEHOOK=y -CONFIG_HAVE_DMA_ATTRS=y -CONFIG_HAVE_DMA_CONTIGUOUS=y -CONFIG_GENERIC_SMP_IDLE_THREAD=y -CONFIG_GENERIC_IDLE_POLL_SETUP=y -CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y -CONFIG_HAVE_CLK=y -CONFIG_HAVE_DMA_API_DEBUG=y -CONFIG_HAVE_PERF_REGS=y -CONFIG_HAVE_PERF_USER_STACK_DUMP=y -CONFIG_HAVE_ARCH_JUMP_LABEL=y -CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y -CONFIG_HAVE_ARCH_SECCOMP_FILTER=y -CONFIG_HAVE_CC_STACKPROTECTOR=y -# CONFIG_CC_STACKPROTECTOR is not set -CONFIG_CC_STACKPROTECTOR_NONE=y -# CONFIG_CC_STACKPROTECTOR_REGULAR is not set -# CONFIG_CC_STACKPROTECTOR_STRONG is not set -CONFIG_HAVE_CONTEXT_TRACKING=y -CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y -CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y -CONFIG_MODULES_USE_ELF_REL=y -CONFIG_CLONE_BACKWARDS=y -CONFIG_OLD_SIGSUSPEND3=y -CONFIG_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_LBDAF=y -CONFIG_BLK_DEV_BSG=y -CONFIG_BLK_DEV_BSGLIB=y -# CONFIG_BLK_DEV_INTEGRITY is not set -# CONFIG_BLK_CMDLINE_PARSER is not set - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_AIX_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -CONFIG_MAC_PARTITION=y -CONFIG_MSDOS_PARTITION=y -# CONFIG_BSD_DISKLABEL is not set -# CONFIG_MINIX_SUBPARTITION is not set -# CONFIG_SOLARIS_X86_PARTITION is not set -# CONFIG_UNIXWARE_DISKLABEL is not set -CONFIG_LDM_PARTITION=y -# CONFIG_LDM_DEBUG is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_KARMA_PARTITION is not set -CONFIG_EFI_PARTITION=y -# CONFIG_SYSV68_PARTITION is not set -# CONFIG_CMDLINE_PARTITION is not set - -# -# IO Schedulers -# -CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_DEADLINE=y -CONFIG_IOSCHED_CFQ=y -CONFIG_IOSCHED_BFQ=y -CONFIG_CGROUP_BFQIO=y -# CONFIG_DEFAULT_DEADLINE is not set -# CONFIG_DEFAULT_CFQ is not set -CONFIG_DEFAULT_BFQ=y -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="bfq" -CONFIG_INLINE_SPIN_UNLOCK_IRQ=y -CONFIG_INLINE_READ_UNLOCK=y -CONFIG_INLINE_READ_UNLOCK_IRQ=y -CONFIG_INLINE_WRITE_UNLOCK=y -CONFIG_INLINE_WRITE_UNLOCK_IRQ=y -CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y -CONFIG_MUTEX_SPIN_ON_OWNER=y -# CONFIG_FREEZER is not set - -# -# System Type -# -CONFIG_MMU=y -CONFIG_ARCH_MULTIPLATFORM=y -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_REALVIEW is not set -# CONFIG_ARCH_VERSATILE is not set -# CONFIG_ARCH_AT91 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_GEMINI is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_EP93XX is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_NETX is not set -# CONFIG_ARCH_IOP13XX is not set -# CONFIG_ARCH_IOP32X is not set -# CONFIG_ARCH_IOP33X is not set -# CONFIG_ARCH_IXP4XX is not set -# CONFIG_ARCH_DOVE is not set -# CONFIG_ARCH_KIRKWOOD is not set -# CONFIG_ARCH_MV78XX0 is not set -# CONFIG_ARCH_ORION5X is not set -# CONFIG_ARCH_MMP is not set -# CONFIG_ARCH_KS8695 is not set -# CONFIG_ARCH_W90X900 is not set -# CONFIG_ARCH_LPC32XX is not set -# CONFIG_ARCH_PXA is not set -# CONFIG_ARCH_MSM_NODT is not set -# CONFIG_ARCH_SHMOBILE_LEGACY is not set -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_S3C24XX is not set -# CONFIG_ARCH_S3C64XX is not set -# CONFIG_ARCH_S5P64X0 is not set -# CONFIG_ARCH_S5PC100 is not set -# CONFIG_ARCH_S5PV210 is not set -# CONFIG_ARCH_EXYNOS is not set -# CONFIG_ARCH_DAVINCI is not set -# CONFIG_ARCH_OMAP1 is not set - -# -# Multiple platform selection -# - -# -# CPU Core family selection -# -# CONFIG_ARCH_MULTI_V6 is not set -CONFIG_ARCH_MULTI_V7=y -CONFIG_ARCH_MULTI_V6_V7=y -# CONFIG_ARCH_MULTI_CPU_AUTO is not set -# CONFIG_ARCH_MVEBU is not set -# CONFIG_ARCH_BCM is not set -# CONFIG_ARCH_BERLIN is not set -CONFIG_GPIO_PCA953X=y -# CONFIG_ARCH_HIGHBANK is not set -# CONFIG_ARCH_HI3xxx is not set -# CONFIG_ARCH_KEYSTONE is not set -# CONFIG_ARCH_MSM_DT is not set -CONFIG_ARCH_MXC=y - -# -# Freescale i.MX support -# -# CONFIG_MXC_DEBUG_BOARD is not set -CONFIG_HAVE_IMX_ANATOP=y -CONFIG_HAVE_IMX_GPC=y -CONFIG_HAVE_IMX_MMDC=y -CONFIG_HAVE_IMX_SRC=y - -# -# i.MX51 machines: -# -# CONFIG_MACH_IMX51_DT is not set -# CONFIG_MACH_MX51_BABBAGE is not set -# CONFIG_MACH_EUKREA_CPUIMX51SD is not set - -# -# Device tree only -# -# CONFIG_SOC_IMX50 is not set -# CONFIG_SOC_IMX53 is not set -CONFIG_SOC_IMX6=y -CONFIG_SOC_IMX6Q=y -# CONFIG_SOC_IMX6SL is not set -# CONFIG_SOC_IMX6SX is not set -# CONFIG_SOC_VF610 is not set -# CONFIG_ARCH_OMAP3 is not set -# CONFIG_ARCH_OMAP4 is not set -# CONFIG_SOC_OMAP5 is not set -# CONFIG_SOC_AM33XX is not set -# CONFIG_SOC_AM43XX is not set -# CONFIG_SOC_DRA7XX is not set -# CONFIG_ARCH_ROCKCHIP is not set -# CONFIG_ARCH_SOCFPGA is not set -# CONFIG_PLAT_SPEAR is not set -# CONFIG_ARCH_STI is not set -# CONFIG_ARCH_SHMOBILE_MULTI is not set -# CONFIG_ARCH_SUNXI is not set -# CONFIG_ARCH_SIRF is not set -# CONFIG_ARCH_TEGRA is not set -# CONFIG_ARCH_U8500 is not set -# CONFIG_ARCH_VEXPRESS is not set -# CONFIG_ARCH_VIRT is not set -# CONFIG_ARCH_WM8850 is not set -# CONFIG_ARCH_ZYNQ is not set - -# -# Processor Type -# -CONFIG_CPU_V7=y -CONFIG_CPU_32v6K=y -CONFIG_CPU_32v7=y -CONFIG_CPU_ABRT_EV7=y -CONFIG_CPU_PABRT_V7=y -CONFIG_CPU_CACHE_V7=y -CONFIG_CPU_CACHE_VIPT=y -CONFIG_CPU_COPY_V6=y -CONFIG_CPU_TLB_V7=y -CONFIG_CPU_HAS_ASID=y -CONFIG_CPU_CP15=y -CONFIG_CPU_CP15_MMU=y - -# -# Processor Features -# -# CONFIG_ARM_LPAE is not set -# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set -CONFIG_ARM_THUMB=y -# CONFIG_ARM_THUMBEE is not set -CONFIG_ARM_VIRT_EXT=y -# CONFIG_SWP_EMULATE is not set -# CONFIG_CPU_ICACHE_DISABLE is not set -# CONFIG_CPU_DCACHE_DISABLE is not set -# CONFIG_CPU_BPREDICT_DISABLE is not set -CONFIG_KUSER_HELPERS=y -CONFIG_OUTER_CACHE=y -CONFIG_OUTER_CACHE_SYNC=y -CONFIG_MIGHT_HAVE_CACHE_L2X0=y -CONFIG_CACHE_L2X0=y -CONFIG_CACHE_PL310=y -CONFIG_PL310_ERRATA_588369=y -CONFIG_PL310_ERRATA_727915=y -# CONFIG_PL310_ERRATA_753970 is not set -CONFIG_PL310_ERRATA_769419=y -CONFIG_ARM_L1_CACHE_SHIFT_6=y -CONFIG_ARM_L1_CACHE_SHIFT=6 -CONFIG_ARM_DMA_MEM_BUFFERABLE=y -CONFIG_ARM_NR_BANKS=8 -CONFIG_MULTI_IRQ_HANDLER=y -# CONFIG_ARM_ERRATA_430973 is not set -# CONFIG_ARM_ERRATA_643719 is not set -# CONFIG_ARM_ERRATA_720789 is not set -CONFIG_ARM_ERRATA_754322=y -# CONFIG_ARM_ERRATA_754327 is not set -CONFIG_ARM_ERRATA_764369=y -CONFIG_ARM_ERRATA_775420=y -# CONFIG_ARM_ERRATA_798181 is not set -# CONFIG_ARM_ERRATA_773022 is not set - -# -# Bus support -# -CONFIG_PCI=y -CONFIG_PCI_DOMAINS=y -CONFIG_PCI_SYSCALL=y -CONFIG_PCI_MSI=y -# CONFIG_PCI_DEBUG is not set -# CONFIG_PCI_REALLOC_ENABLE_AUTO is not set -# CONFIG_PCI_STUB is not set -# CONFIG_PCI_IOV is not set -# CONFIG_PCI_PRI is not set -# CONFIG_PCI_PASID is not set - -# -# PCI host controller drivers -# -CONFIG_PCIE_DW=y -CONFIG_PCI_IMX6=y -# CONFIG_EP_MODE_IN_EP_RC_SYS is not set -# CONFIG_RC_MODE_IN_EP_RC_SYS is not set -# CONFIG_PCI_HOST_GENERIC is not set -CONFIG_PCIEPORTBUS=y -CONFIG_PCIEAER=y -# CONFIG_PCIE_ECRC is not set -# CONFIG_PCIEAER_INJECT is not set -CONFIG_PCIEASPM=y -# CONFIG_PCIEASPM_DEBUG is not set -CONFIG_PCIEASPM_DEFAULT=y -# CONFIG_PCIEASPM_POWERSAVE is not set -# CONFIG_PCIEASPM_PERFORMANCE is not set -CONFIG_PCIE_PME=y -# CONFIG_PCCARD is not set - -# -# Kernel Features -# -CONFIG_HAVE_SMP=y -CONFIG_SMP=y -CONFIG_SMP_ON_UP=y -CONFIG_ARM_CPU_TOPOLOGY=y -# CONFIG_SCHED_MC is not set -# CONFIG_SCHED_SMT is not set -CONFIG_HAVE_ARM_SCU=y -# CONFIG_HAVE_ARM_ARCH_TIMER is not set -CONFIG_HAVE_ARM_TWD=y -# CONFIG_MCPM is not set -# CONFIG_BIG_LITTLE is not set -CONFIG_VMSPLIT_3G=y -# CONFIG_VMSPLIT_2G is not set -# CONFIG_VMSPLIT_1G is not set -CONFIG_PAGE_OFFSET=0xC0000000 -CONFIG_NR_CPUS=4 -CONFIG_HOTPLUG_CPU=y -# CONFIG_ARM_PSCI is not set -CONFIG_ARCH_NR_GPIO=0 -# CONFIG_PREEMPT_NONE is not set -CONFIG_PREEMPT_VOLUNTARY=y -# CONFIG_PREEMPT is not set -CONFIG_HZ_FIXED=0 -# CONFIG_HZ_100 is not set -# CONFIG_HZ_200 is not set -# CONFIG_HZ_250 is not set -CONFIG_HZ_300=y -# CONFIG_HZ_500 is not set -# CONFIG_HZ_1000 is not set -CONFIG_HZ=300 -CONFIG_SCHED_HRTICK=y -# CONFIG_THUMB2_KERNEL is not set -CONFIG_AEABI=y -# CONFIG_OABI_COMPAT is not set -# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set -# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set -CONFIG_HAVE_ARCH_PFN_VALID=y -CONFIG_HIGHMEM=y -# CONFIG_HIGHPTE is not set -CONFIG_ARCH_WANT_GENERAL_HUGETLB=y -CONFIG_FLATMEM=y -CONFIG_FLAT_NODE_MEM_MAP=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 is not set -CONFIG_ZONE_DMA_FLAG=1 -CONFIG_BOUNCE=y -# CONFIG_KSM is not set -CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 -CONFIG_CROSS_MEMORY_ATTACH=y -CONFIG_CLEANCACHE=y -CONFIG_FRONTSWAP=y -CONFIG_CMA=y -# CONFIG_CMA_DEBUG is not set -# CONFIG_CMA_DEBUGFS is not set -CONFIG_CMA_AREAS=7 -# CONFIG_ZBUD is not set -# CONFIG_ZSWAP is not set -# CONFIG_ZSMALLOC is not set -CONFIG_FORCE_MAX_ZONEORDER=14 -CONFIG_ALIGNMENT_TRAP=y -CONFIG_UACCESS_WITH_MEMCPY=y -# CONFIG_SECCOMP is not set -CONFIG_SWIOTLB=y -CONFIG_IOMMU_HELPER=y -# CONFIG_XEN is not set - -# -# Boot options -# -CONFIG_USE_OF=y -CONFIG_ATAGS=y -# CONFIG_DEPRECATED_PARAM_STRUCT is not set -CONFIG_ZBOOT_ROM_TEXT=0 -CONFIG_ZBOOT_ROM_BSS=0 -# CONFIG_ARM_APPENDED_DTB is not set -CONFIG_CMDLINE="root=/dev/ram0 rdinit=/init noram usbcore.autosuspend=-1 coherent_pool=2M" -# CONFIG_CMDLINE_FROM_BOOTLOADER is not set -CONFIG_CMDLINE_EXTEND=y -# CONFIG_CMDLINE_FORCE is not set -CONFIG_KEXEC=y -CONFIG_ATAGS_PROC=y -# CONFIG_CRASH_DUMP is not set -CONFIG_AUTO_ZRELADDR=y - -# -# CPU Power Management -# - -# -# 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 is not set -# 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_CONSERVATIVE is not set -CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y -CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y -# CONFIG_CPU_FREQ_GOV_USERSPACE is not set -CONFIG_CPU_FREQ_GOV_ONDEMAND=y -CONFIG_CPU_FREQ_GOV_INTERACTIVE=y -# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set -# CONFIG_GENERIC_CPUFREQ_CPU0 is not set - -# -# ARM CPU frequency scaling drivers -# -CONFIG_ARM_IMX6Q_CPUFREQ=y -# CONFIG_ARM_KIRKWOOD_CPUFREQ is not set - -# -# CPU Idle -# -# CONFIG_CPU_IDLE is not set -# CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set - -# -# Floating point emulation -# - -# -# At least one emulation must be selected -# -CONFIG_VFP=y -CONFIG_VFPv3=y -CONFIG_NEON=y -CONFIG_KERNEL_MODE_NEON=y - -# -# Userspace binary formats -# -CONFIG_BINFMT_ELF=y -CONFIG_ARCH_BINFMT_ELF_RANDOMIZE_PIE=y -CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y -CONFIG_BINFMT_SCRIPT=y -# CONFIG_HAVE_AOUT is not set -# CONFIG_BINFMT_MISC is not set -CONFIG_COREDUMP=y - -# -# Power management options -# -# CONFIG_SUSPEND is not set -CONFIG_PM_RUNTIME=y -CONFIG_PM=y -# CONFIG_PM_DEBUG is not set -# CONFIG_APM_EMULATION is not set -CONFIG_ARCH_HAS_OPP=y -CONFIG_PM_OPP=y -CONFIG_PM_CLK=y -CONFIG_PM_GENERIC_DOMAINS=y -# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set -CONFIG_PM_GENERIC_DOMAINS_RUNTIME=y -CONFIG_PM_GENERIC_DOMAINS_OF=y -CONFIG_ARCH_SUSPEND_POSSIBLE=y -CONFIG_ARM_CPU_SUSPEND=y -CONFIG_NET=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=y -# CONFIG_IP_FIB_TRIE_STATS is not set -CONFIG_IP_MULTIPLE_TABLES=y -# CONFIG_IP_ROUTE_MULTIPATH is not set -# CONFIG_IP_ROUTE_VERBOSE 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_MROUTE_MULTIPLE_TABLES is not set -# 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=y -# CONFIG_TCP_CONG_BIC is not set -CONFIG_TCP_CONG_CUBIC=y -# CONFIG_TCP_CONG_WESTWOOD is not set -CONFIG_TCP_CONG_HTCP=m -CONFIG_TCP_CONG_HSTCP=m -# CONFIG_TCP_CONG_HYBLA is not set -CONFIG_TCP_CONG_VEGAS=m -CONFIG_TCP_CONG_SCALABLE=m -# CONFIG_TCP_CONG_LP is not set -CONFIG_TCP_CONG_VENO=m -CONFIG_TCP_CONG_YEAH=m -CONFIG_TCP_CONG_ILLINOIS=m -CONFIG_DEFAULT_CUBIC=y -# CONFIG_DEFAULT_RENO is not set -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_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_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_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 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_BPF_JIT is not set -CONFIG_NET_FLOW_LIMIT=y - -# -# Network testing -# -# CONFIG_NET_PKTGEN 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_BT_WILINK=m -# CONFIG_AF_RXRPC is not set -CONFIG_FIB_RULES=y -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 -CONFIG_HAVE_BPF_JIT=y - -# -# Device Drivers -# - -# -# 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="imx/sdma/sdma-imx6q.bin" -CONFIG_EXTRA_FIRMWARE_DIR="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_SOC_BUS=y -CONFIG_REGMAP=y -CONFIG_REGMAP_AC97=y -CONFIG_REGMAP_I2C=y -CONFIG_REGMAP_SPI=y -CONFIG_REGMAP_MMIO=y -CONFIG_REGMAP_IRQ=y -CONFIG_DMA_SHARED_BUFFER=y -CONFIG_DMA_CMA=y - -# -# Default contiguous memory area size: -# -CONFIG_CMA_SIZE_MBYTES=320 -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_IMX_WEIM=y -# CONFIG_ARM_CCI is not set -# CONFIG_CONNECTOR is not set -CONFIG_MTD=y -# CONFIG_MTD_TESTS is not set -# CONFIG_MTD_REDBOOT_PARTS is not set -CONFIG_MTD_CMDLINE_PARTS=y -# CONFIG_MTD_AFS_PARTS is not set -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 is not set -# CONFIG_MTD_SWAP is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -CONFIG_MTD_JEDECPROBE=y -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=y -CONFIG_MTD_CFI_STAA=y -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=y -# CONFIG_MTD_IMPA7 is not set -# CONFIG_MTD_INTEL_VR_NOR is not set -# CONFIG_MTD_PLATRAM is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -CONFIG_MTD_DATAFLASH=y -# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set -# CONFIG_MTD_DATAFLASH_OTP is not set -CONFIG_MTD_SST25L=y -# 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_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_IDS=y -# CONFIG_MTD_NAND_RICOH is not set -# CONFIG_MTD_NAND_DISKONCHIP is not set -# CONFIG_MTD_NAND_DOCG4 is not set -# CONFIG_MTD_NAND_CAFE is not set -# CONFIG_MTD_NAND_NANDSIM is not set -CONFIG_MTD_NAND_GPMI_NAND=y -# CONFIG_MTD_NAND_PLATFORM is not set -CONFIG_MTD_NAND_MXC=y -# CONFIG_MTD_ONENAND is not set - -# -# LPDDR flash memory drivers -# -# CONFIG_MTD_LPDDR is not set -# CONFIG_MTD_SPI_NOR is not set -CONFIG_MTD_UBI=y -CONFIG_MTD_UBI_WL_THRESHOLD=4096 -CONFIG_MTD_UBI_BEB_LIMIT=20 -# CONFIG_MTD_UBI_FASTMAP is not set -# CONFIG_MTD_UBI_GLUEBI is not set -CONFIG_DTC=y -CONFIG_OF=y - -# -# Device Tree and Open Firmware support -# -# CONFIG_PROC_DEVICETREE is not set -# 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_PCI=y -CONFIG_OF_PCI_IRQ=y -CONFIG_OF_MTD=y -CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y -# CONFIG_PARPORT is not set -CONFIG_BLK_DEV=y -# CONFIG_BLK_DEV_NULL_BLK is not set -# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_UMEM is not set -# CONFIG_BLK_DEV_COW_COMMON is not set -CONFIG_BLK_DEV_LOOP=y -CONFIG_BLK_DEV_LOOP_MIN_COUNT=0 -# CONFIG_BLK_DEV_CRYPTOLOOP is not set -# CONFIG_BLK_DEV_DRBD is not set -CONFIG_BLK_DEV_NBD=y -# CONFIG_BLK_DEV_NVME is not set -# CONFIG_BLK_DEV_SX8 is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_COUNT=16 -CONFIG_BLK_DEV_RAM_SIZE=4096 -# CONFIG_BLK_DEV_XIP is not set -# CONFIG_CDROM_PKTCDVD is not set -# CONFIG_ATA_OVER_ETH is not set -# CONFIG_MG_DISK is not set -# CONFIG_BLK_DEV_RBD is not set -# CONFIG_BLK_DEV_RSXX 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_PHANTOM is not set -# CONFIG_SGI_IOC4 is not set -# CONFIG_TIFM_CORE is not set -# CONFIG_ICS932S401 is not set -# CONFIG_ATMEL_SSC is not set -# CONFIG_ENCLOSURE_SERVICES is not set -# CONFIG_HP_ILO 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_BMP085_I2C is not set -# CONFIG_BMP085_SPI is not set -# CONFIG_PCH_PHUB is not set -# CONFIG_USB_SWITCH_FSA9480 is not set -# CONFIG_LATTICE_ECP3_CONFIG is not set -CONFIG_SRAM=y -# CONFIG_C2PORT is not set - -# -# EEPROM support -# -CONFIG_EEPROM_AT24=y -CONFIG_EEPROM_AT25=y -# CONFIG_EEPROM_LEGACY is not set -# CONFIG_EEPROM_MAX6875 is not set -CONFIG_EEPROM_93CX6=m -# CONFIG_EEPROM_93XX46 is not set -# CONFIG_CB710_CORE is not set - -# -# Texas Instruments shared transport line discipline -# -CONFIG_TI_ST=m -CONFIG_ST_HCI=m -# 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 -# -CONFIG_HAVE_IDE=y -# CONFIG_IDE is not set - -# -# 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_CXGB3_ISCSI is not set -# CONFIG_SCSI_CXGB4_ISCSI is not set -# CONFIG_SCSI_BNX2_ISCSI is not set -# CONFIG_SCSI_BNX2X_FCOE is not set -# CONFIG_BE2ISCSI is not set -# CONFIG_BLK_DEV_3W_XXXX_RAID is not set -# CONFIG_SCSI_HPSA is not set -# CONFIG_SCSI_3W_9XXX is not set -# CONFIG_SCSI_3W_SAS is not set -# CONFIG_SCSI_ACARD is not set -# CONFIG_SCSI_AACRAID is not set -# CONFIG_SCSI_AIC7XXX is not set -# CONFIG_SCSI_AIC79XX is not set -# CONFIG_SCSI_AIC94XX is not set -# CONFIG_SCSI_MVSAS is not set -# CONFIG_SCSI_MVUMI is not set -# CONFIG_SCSI_ARCMSR is not set -# CONFIG_SCSI_ESAS2R is not set -# CONFIG_MEGARAID_NEWGEN is not set -# CONFIG_MEGARAID_LEGACY is not set -# CONFIG_MEGARAID_SAS is not set -# CONFIG_SCSI_MPT2SAS is not set -# CONFIG_SCSI_MPT3SAS is not set -# CONFIG_SCSI_UFSHCD is not set -# CONFIG_SCSI_HPTIOP is not set -# CONFIG_LIBFC is not set -# CONFIG_LIBFCOE is not set -# CONFIG_FCOE is not set -# CONFIG_SCSI_DMX3191D is not set -# CONFIG_SCSI_FUTURE_DOMAIN is not set -# CONFIG_SCSI_IPS is not set -# CONFIG_SCSI_INITIO is not set -# CONFIG_SCSI_INIA100 is not set -# CONFIG_SCSI_STEX is not set -# CONFIG_SCSI_SYM53C8XX_2 is not set -# CONFIG_SCSI_IPR is not set -# CONFIG_SCSI_QLOGIC_1280 is not set -# CONFIG_SCSI_QLA_FC is not set -# CONFIG_SCSI_QLA_ISCSI is not set -# CONFIG_SCSI_LPFC is not set -# CONFIG_SCSI_DC395x is not set -# CONFIG_SCSI_DC390T is not set -# CONFIG_SCSI_NSP32 is not set -# CONFIG_SCSI_DEBUG is not set -# CONFIG_SCSI_PMCRAID is not set -# CONFIG_SCSI_PM8001 is not set -# CONFIG_SCSI_SRP is not set -# CONFIG_SCSI_BFA_FC is not set -# CONFIG_SCSI_CHELSIO_FCOE is not set -# CONFIG_SCSI_DH is not set -# CONFIG_SCSI_OSD_INITIATOR is not set -CONFIG_ATA=y -# CONFIG_ATA_NONSTANDARD is not set -CONFIG_ATA_VERBOSE_ERROR=y -CONFIG_SATA_PMP=y - -# -# Controllers with non-SFF native interface -# -# CONFIG_SATA_AHCI is not set -CONFIG_SATA_AHCI_PLATFORM=y -CONFIG_AHCI_IMX=y -# CONFIG_SATA_INIC162X is not set -# CONFIG_SATA_ACARD_AHCI is not set -# CONFIG_SATA_SIL24 is not set -CONFIG_ATA_SFF=y - -# -# SFF controllers with custom DMA interface -# -# CONFIG_PDC_ADMA is not set -# CONFIG_SATA_QSTOR is not set -# CONFIG_SATA_SX4 is not set -CONFIG_ATA_BMDMA=y - -# -# SATA SFF controllers with BMDMA -# -# CONFIG_ATA_PIIX is not set -# CONFIG_SATA_MV is not set -# CONFIG_SATA_NV is not set -# CONFIG_SATA_PROMISE is not set -# CONFIG_SATA_SIL is not set -# CONFIG_SATA_SIS is not set -# CONFIG_SATA_SVW is not set -# CONFIG_SATA_ULI is not set -# CONFIG_SATA_VIA is not set -# CONFIG_SATA_VITESSE is not set - -# -# PATA SFF controllers with BMDMA -# -# CONFIG_PATA_ALI is not set -# CONFIG_PATA_AMD is not set -# CONFIG_PATA_ARTOP is not set -# CONFIG_PATA_ATIIXP is not set -# CONFIG_PATA_ATP867X is not set -# CONFIG_PATA_CMD64X is not set -# CONFIG_PATA_CYPRESS is not set -# CONFIG_PATA_EFAR is not set -# CONFIG_PATA_HPT366 is not set -# CONFIG_PATA_HPT37X is not set -# CONFIG_PATA_HPT3X2N is not set -# CONFIG_PATA_HPT3X3 is not set -CONFIG_PATA_IMX=y -# CONFIG_PATA_IT8213 is not set -# CONFIG_PATA_IT821X is not set -# CONFIG_PATA_JMICRON is not set -# CONFIG_PATA_MARVELL is not set -# CONFIG_PATA_NETCELL is not set -# CONFIG_PATA_NINJA32 is not set -# CONFIG_PATA_NS87415 is not set -# CONFIG_PATA_OLDPIIX is not set -# CONFIG_PATA_OPTIDMA is not set -# CONFIG_PATA_PDC2027X is not set -# CONFIG_PATA_PDC_OLD is not set -# CONFIG_PATA_RADISYS is not set -# CONFIG_PATA_RDC is not set -# CONFIG_PATA_SCH is not set -# CONFIG_PATA_SERVERWORKS is not set -# CONFIG_PATA_SIL680 is not set -# CONFIG_PATA_SIS is not set -# CONFIG_PATA_TOSHIBA is not set -# CONFIG_PATA_TRIFLEX is not set -# CONFIG_PATA_VIA is not set -# CONFIG_PATA_WINBOND is not set - -# -# PIO-only SFF controllers -# -# CONFIG_PATA_CMD640_PCI is not set -# CONFIG_PATA_MPIIX is not set -# CONFIG_PATA_NS87410 is not set -# CONFIG_PATA_OPTI is not set -# CONFIG_PATA_PLATFORM is not set -# CONFIG_PATA_RZ1000 is not set - -# -# Generic fallback / legacy drivers -# -# CONFIG_ATA_GENERIC is not set -# CONFIG_PATA_LEGACY is not set -# CONFIG_MD is not set -# CONFIG_TARGET_CORE is not set -# CONFIG_FUSION is not set - -# -# IEEE 1394 (FireWire) support -# -# CONFIG_FIREWIRE is not set -# CONFIG_FIREWIRE_NOSY is not set -# CONFIG_I2O is not set -CONFIG_NETDEVICES=y -CONFIG_MII=m -CONFIG_NET_CORE=y -# CONFIG_BONDING is not set -# CONFIG_DUMMY is not set -# CONFIG_EQUALIZER is not set -# CONFIG_NET_FC 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 is not set -# CONFIG_ARCNET is not set - -# -# 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_3COM=y -# CONFIG_VORTEX is not set -# CONFIG_TYPHOON is not set -CONFIG_NET_VENDOR_ADAPTEC=y -# CONFIG_ADAPTEC_STARFIRE is not set -CONFIG_NET_VENDOR_ALTEON=y -# CONFIG_ACENIC is not set -CONFIG_NET_VENDOR_AMD=y -# CONFIG_AMD8111_ETH is not set -# CONFIG_PCNET32 is not set -# CONFIG_NET_VENDOR_ARC is not set -CONFIG_NET_VENDOR_ATHEROS=y -# CONFIG_ATL2 is not set -# CONFIG_ATL1 is not set -# CONFIG_ATL1E is not set -# CONFIG_ATL1C is not set -# CONFIG_ALX is not set -# CONFIG_NET_CADENCE is not set -# CONFIG_NET_VENDOR_BROADCOM is not set -CONFIG_NET_VENDOR_BROCADE=y -# CONFIG_BNA is not set -# CONFIG_NET_CALXEDA_XGMAC is not set -CONFIG_NET_VENDOR_CHELSIO=y -# CONFIG_CHELSIO_T1 is not set -# CONFIG_CHELSIO_T3 is not set -# CONFIG_CHELSIO_T4 is not set -# CONFIG_CHELSIO_T4VF is not set -# CONFIG_NET_VENDOR_CIRRUS is not set -CONFIG_NET_VENDOR_CISCO=y -# CONFIG_ENIC is not set -# CONFIG_DM9000 is not set -# CONFIG_DNET is not set -CONFIG_NET_VENDOR_DEC=y -# CONFIG_NET_TULIP is not set -CONFIG_NET_VENDOR_DLINK=y -# CONFIG_DL2K is not set -# CONFIG_SUNDANCE is not set -CONFIG_NET_VENDOR_EMULEX=y -# CONFIG_BE2NET is not set -CONFIG_NET_VENDOR_EXAR=y -# CONFIG_S2IO is not set -# CONFIG_VXGE is not set -# CONFIG_NET_VENDOR_FARADAY is not set -CONFIG_NET_VENDOR_FREESCALE=y -CONFIG_FEC=y -CONFIG_NET_VENDOR_HP=y -# CONFIG_HP100 is not set -# CONFIG_NET_VENDOR_INTEL is not set -# CONFIG_IP1000 is not set -# CONFIG_JME is not set -# CONFIG_NET_VENDOR_MARVELL is not set -CONFIG_NET_VENDOR_MELLANOX=y -# CONFIG_MLX4_EN is not set -# CONFIG_MLX4_CORE is not set -# CONFIG_MLX5_CORE is not set -# CONFIG_NET_VENDOR_MICREL is not set -# CONFIG_NET_VENDOR_MICROCHIP is not set -CONFIG_NET_VENDOR_MYRI=y -# CONFIG_MYRI10GE is not set -# CONFIG_FEALNX is not set -# CONFIG_NET_VENDOR_NATSEMI is not set -CONFIG_NET_VENDOR_NVIDIA=y -# CONFIG_FORCEDETH is not set -CONFIG_NET_VENDOR_OKI=y -# CONFIG_ETHOC is not set -CONFIG_NET_PACKET_ENGINE=y -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -CONFIG_NET_VENDOR_QLOGIC=y -# CONFIG_QLA3XXX is not set -# CONFIG_QLCNIC is not set -# CONFIG_QLGE is not set -# CONFIG_NETXEN_NIC is not set -CONFIG_NET_VENDOR_REALTEK=y -# CONFIG_8139CP is not set -# CONFIG_8139TOO is not set -# CONFIG_R8169 is not set -# CONFIG_SH_ETH is not set -CONFIG_NET_VENDOR_RDC=y -# CONFIG_R6040 is not set -# CONFIG_NET_VENDOR_SEEQ is not set -CONFIG_NET_VENDOR_SILAN=y -# CONFIG_SC92031 is not set -CONFIG_NET_VENDOR_SIS=y -# CONFIG_SIS900 is not set -# CONFIG_SIS190 is not set -# CONFIG_SFC is not set -# CONFIG_NET_VENDOR_SMSC is not set -# CONFIG_NET_VENDOR_STMICRO is not set -CONFIG_NET_VENDOR_SUN=y -# CONFIG_HAPPYMEAL is not set -# CONFIG_SUNGEM is not set -# CONFIG_CASSINI is not set -# CONFIG_NIU is not set -CONFIG_NET_VENDOR_TEHUTI=y -# CONFIG_TEHUTI is not set -CONFIG_NET_VENDOR_TI=y -# CONFIG_TLAN is not set -# CONFIG_NET_VENDOR_VIA is not set -# CONFIG_NET_VENDOR_WIZNET is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -CONFIG_PHYLIB=y - -# -# 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=y -# CONFIG_SMSC_PHY is not set -CONFIG_BROADCOM_PHY=y -CONFIG_BCM87XX_PHY=y -# 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=m -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_PPP_ASYNC=m -# CONFIG_PPP_SYNC_TTY is not set -# CONFIG_SLIP is not set -CONFIG_SLHC=m - -# -# 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=m -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 is not set -# CONFIG_USB_NET_SR9800 is not set -CONFIG_USB_NET_SMSC75XX=m -CONFIG_USB_NET_SMSC95XX=m -# 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=m -# CONFIG_USB_SIERRA_NET is not set -# CONFIG_USB_VL600 is not set -CONFIG_WLAN=y -CONFIG_LIBERTAS_THINFIRM=m -# CONFIG_LIBERTAS_THINFIRM_DEBUG is not set -CONFIG_LIBERTAS_THINFIRM_USB=m -# CONFIG_ATMEL is not set -# CONFIG_AT76C50X_USB is not set -# CONFIG_PRISM54 is not set -CONFIG_USB_ZD1201=m -CONFIG_USB_NET_RNDIS_WLAN=m -# CONFIG_RTL8180 is not set -CONFIG_RTL8187=m -CONFIG_RTL8187_LEDS=y -# CONFIG_ADM8211 is not set -# CONFIG_MAC80211_HWSIM is not set -# CONFIG_MWL8K is not set -CONFIG_ATH_COMMON=m -CONFIG_ATH_CARDS=m -# CONFIG_ATH_DEBUG is not set -# CONFIG_ATH5K is not set -# CONFIG_ATH5K_PCI is not set -CONFIG_ATH9K_HW=m -CONFIG_ATH9K_COMMON=m -CONFIG_ATH9K_BTCOEX_SUPPORT=y -CONFIG_ATH9K=m -CONFIG_ATH9K_PCI=y -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 is not set -CONFIG_ATH6KL=m -# CONFIG_ATH6KL_SDIO is not set -CONFIG_ATH6KL_USB=m -# CONFIG_ATH6KL_DEBUG is not set -CONFIG_AR5523=m -# CONFIG_WIL6210 is not set -# CONFIG_ATH10K is not set -CONFIG_WCN36XX=m -# CONFIG_WCN36XX_DEBUGFS is not set -CONFIG_B43=m -CONFIG_B43_SSB=y -CONFIG_B43_PCI_AUTOSELECT=y -CONFIG_B43_PCICORE_AUTOSELECT=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_PROTO_BCDC=y -CONFIG_BRCMFMAC_SDIO=y -CONFIG_BRCMFMAC_USB=y -# CONFIG_BRCMFMAC_PCIE is not set -# CONFIG_BRCM_TRACING is not set -# CONFIG_BRCMDBG is not set -# CONFIG_HOSTAP is not set -# CONFIG_IPW2100 is not set -# CONFIG_IPW2200 is not set -CONFIG_IWLWIFI=m -CONFIG_IWLDVM=m -# CONFIG_IWLMVM is not set -CONFIG_IWLWIFI_OPMODE_MODULAR=y - -# -# Debugging Options -# -# CONFIG_IWLWIFI_DEBUG is not set -# CONFIG_IWL4965 is not set -# CONFIG_IWL3945 is not set -# CONFIG_LIBERTAS is not set -# CONFIG_HERMES is not set -CONFIG_P54_COMMON=m -CONFIG_P54_USB=m -# CONFIG_P54_PCI is not set -# CONFIG_P54_SPI is not set -CONFIG_P54_LEDS=y -CONFIG_RT2X00=m -# CONFIG_RT2400PCI is not set -# CONFIG_RT2500PCI is not set -# CONFIG_RT61PCI is not set -# CONFIG_RT2800PCI is not set -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_RTL_CARDS=m -# CONFIG_RTL8192CE is not set -# CONFIG_RTL8192SE is not set -# CONFIG_RTL8192DE is not set -# CONFIG_RTL8723AE is not set -# CONFIG_RTL8188EE is not set -# CONFIG_RTL8192CU is not set -CONFIG_WL_TI=y -# CONFIG_WL1251 is not set -# CONFIG_WL12XX is not set -CONFIG_WL18XX=m -CONFIG_WLCORE=m -# CONFIG_WLCORE_SPI is not set -CONFIG_WLCORE_SDIO=m -CONFIG_WILINK_PLATFORM_DATA=y -CONFIG_ZD1211RW=m -# CONFIG_ZD1211RW_DEBUG is not set -# CONFIG_MWIFIEX is not set -# CONFIG_CW1200 is not set - -# -# Enable WiMAX (Networking options) to see the WiMAX drivers -# -# CONFIG_WAN is not set -# CONFIG_VMXNET3 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 - -# -# 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=y -CONFIG_TOUCHSCREEN_ADS7846=m -# CONFIG_TOUCHSCREEN_AD7877 is not set -# CONFIG_TOUCHSCREEN_AD7879 is not set -# CONFIG_TOUCHSCREEN_ATMEL_MXT is not set -# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set -# CONFIG_TOUCHSCREEN_BU21013 is not set -# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set -# CONFIG_TOUCHSCREEN_CYTTSP_CORE is not set -# CONFIG_TOUCHSCREEN_CYTTSP4_CORE is not set -# CONFIG_TOUCHSCREEN_DA9052 is not set -# CONFIG_TOUCHSCREEN_DYNAPRO is not set -# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set -# CONFIG_TOUCHSCREEN_EETI is not set -CONFIG_TOUCHSCREEN_EGALAX=m -# CONFIG_TOUCHSCREEN_ELAN is not set -# CONFIG_TOUCHSCREEN_FUJITSU is not set -# CONFIG_TOUCHSCREEN_GOODIX is not set -# CONFIG_TOUCHSCREEN_ILI210X is not set -# CONFIG_TOUCHSCREEN_GUNZE is not set -# CONFIG_TOUCHSCREEN_ELO is not set -# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set -# CONFIG_TOUCHSCREEN_WACOM_I2C is not set -# CONFIG_TOUCHSCREEN_MAX11801 is not set -# CONFIG_TOUCHSCREEN_MCS5000 is not set -# CONFIG_TOUCHSCREEN_MMS114 is not set -# CONFIG_TOUCHSCREEN_MTOUCH is not set -# CONFIG_TOUCHSCREEN_INEXIO is not set -# CONFIG_TOUCHSCREEN_MK712 is not set -# CONFIG_TOUCHSCREEN_PENMOUNT is not set -# CONFIG_TOUCHSCREEN_EDT_FT5X06 is not set -# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set -# CONFIG_TOUCHSCREEN_TOUCHWIN is not set -# CONFIG_TOUCHSCREEN_PIXCIR is not set -# CONFIG_TOUCHSCREEN_WM97XX is not set -CONFIG_TOUCHSCREEN_USB_COMPOSITE=m -# CONFIG_TOUCHSCREEN_MC13783 is not set -CONFIG_TOUCHSCREEN_USB_EGALAX=y -CONFIG_TOUCHSCREEN_USB_PANJIT=y -CONFIG_TOUCHSCREEN_USB_3M=y -CONFIG_TOUCHSCREEN_USB_ITM=y -CONFIG_TOUCHSCREEN_USB_ETURBO=y -CONFIG_TOUCHSCREEN_USB_GUNZE=y -CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y -CONFIG_TOUCHSCREEN_USB_IRTOUCH=y -CONFIG_TOUCHSCREEN_USB_IDEALTEK=y -CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y -CONFIG_TOUCHSCREEN_USB_GOTOP=y -CONFIG_TOUCHSCREEN_USB_JASTEC=y -CONFIG_TOUCHSCREEN_USB_ELO=y -CONFIG_TOUCHSCREEN_USB_E2I=y -CONFIG_TOUCHSCREEN_USB_ZYTRONIC=y -CONFIG_TOUCHSCREEN_USB_ETT_TC45USB=y -CONFIG_TOUCHSCREEN_USB_NEXIO=y -CONFIG_TOUCHSCREEN_USB_EASYTOUCH=y -# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set -# CONFIG_TOUCHSCREEN_TSC_SERIO is not set -# CONFIG_TOUCHSCREEN_TSC2005 is not set -# CONFIG_TOUCHSCREEN_TSC2007 is not set -# CONFIG_TOUCHSCREEN_W90X900 is not set -CONFIG_TOUCHSCREEN_ST1232=m -# CONFIG_TOUCHSCREEN_SUR40 is not set -# CONFIG_TOUCHSCREEN_TPS6507X is not set -# CONFIG_TOUCHSCREEN_ZFORCE is not set -CONFIG_INPUT_MISC=y -# CONFIG_INPUT_AD714X is not set -# CONFIG_INPUT_BMA150 is not set -# CONFIG_INPUT_MC13783_PWRBUTTON 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_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_PCF8574 is not set -# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set -# CONFIG_INPUT_DA9052_ONKEY is not set -# CONFIG_INPUT_ADXL34X is not set -# CONFIG_INPUT_IMS_PCU is not set -# CONFIG_INPUT_CMA3000 is not set -# CONFIG_INPUT_ISL29023 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_HW_CONSOLE=y -CONFIG_VT_HW_CONSOLE_BINDING=y -CONFIG_UNIX98_PTYS=y -# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set -# CONFIG_LEGACY_PTYS is not set -# CONFIG_SERIAL_NONSTANDARD is not set -# CONFIG_NOZOMI is not set -# CONFIG_N_GSM is not set -# CONFIG_TRACE_SINK is not set -# CONFIG_DEVKMEM is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_8250 is not set - -# -# Non-8250 serial port support -# -# CONFIG_SERIAL_MAX3100 is not set -# CONFIG_SERIAL_MAX310X is not set -# CONFIG_SERIAL_MFD_HSU is not set -CONFIG_SERIAL_IMX=y -CONFIG_SERIAL_IMX_CONSOLE=y -# CONFIG_SERIAL_SH_SCI is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -# CONFIG_SERIAL_JSM is not set -# 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_PCH_UART is not set -# CONFIG_SERIAL_XILINX_PS_UART is not set -# CONFIG_SERIAL_ARC is not set -# CONFIG_SERIAL_RP2 is not set -# CONFIG_SERIAL_FSL_LPUART is not set -# CONFIG_SERIAL_ST_ASC is not set -# CONFIG_TTY_PRINTK is not set -CONFIG_FSL_OTP=y -# CONFIG_FSL_OTP_WRITE_ENABLE is not set -# CONFIG_HVC_DCC is not set -# 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_EXYNOS is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set -# CONFIG_RAW_DRIVER is not set -# CONFIG_TCG_TPM is not set -CONFIG_DEVPORT=y -CONFIG_I2C=y -CONFIG_I2C_BOARDINFO=y -# CONFIG_I2C_COMPAT is not set -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 is not set -# CONFIG_I2C_SMBUS is not set - -# -# I2C Algorithms -# -CONFIG_I2C_ALGOBIT=y -CONFIG_I2C_ALGOPCF=m -CONFIG_I2C_ALGOPCA=m - -# -# I2C Hardware Bus support -# - -# -# PC SMBus host controller drivers -# -# CONFIG_I2C_ALI1535 is not set -# CONFIG_I2C_ALI1563 is not set -# CONFIG_I2C_ALI15X3 is not set -# CONFIG_I2C_AMD756 is not set -# CONFIG_I2C_AMD8111 is not set -# CONFIG_I2C_I801 is not set -# CONFIG_I2C_ISCH is not set -# CONFIG_I2C_PIIX4 is not set -# CONFIG_I2C_NFORCE2 is not set -# CONFIG_I2C_SIS5595 is not set -# CONFIG_I2C_SIS630 is not set -# CONFIG_I2C_SIS96X is not set -# CONFIG_I2C_VIA is not set -# CONFIG_I2C_VIAPRO is not set - -# -# 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_DESIGNWARE_PCI is not set -# CONFIG_I2C_EG20T is not set -# CONFIG_I2C_GPIO is not set -CONFIG_I2C_IMX=y -# 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 is not set -CONFIG_SPI_IMX=y -# CONFIG_SPI_FSL_SPI is not set -# CONFIG_SPI_OC_TINY is not set -# CONFIG_SPI_PXA2XX is not set -# CONFIG_SPI_PXA2XX_PCI is not set -# CONFIG_SPI_SC18IS602 is not set -# CONFIG_SPI_TOPCLIFF_PCH 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 is not set -# 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_IMX=y -CONFIG_PINCTRL_IMX6Q=y -# CONFIG_PINCTRL_MSM8X74 is not set -# CONFIG_PINCTRL_SINGLE is not set -CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=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 -CONFIG_GPIO_GENERIC=y -# CONFIG_GPIO_DA9052 is not set - -# -# Memory mapped GPIO drivers: -# -# CONFIG_GPIO_GENERIC_PLATFORM is not set -# CONFIG_GPIO_EM is not set -CONFIG_GPIO_MXC=y -# CONFIG_GPIO_RCAR is not set -# CONFIG_GPIO_SCH311X is not set -# CONFIG_GPIO_TS5500 is not set -# CONFIG_GPIO_VX855 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_IRQ 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: -# -# CONFIG_GPIO_BT8XX is not set -# CONFIG_GPIO_AMD8111 is not set -# CONFIG_GPIO_ML_IOH is not set -# CONFIG_GPIO_RDC321X is not set - -# -# 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=m - -# -# 1-wire Bus Masters -# -# CONFIG_W1_MASTER_MATROX is not set -# CONFIG_W1_MASTER_DS2490 is not set -# CONFIG_W1_MASTER_DS2482 is not set -CONFIG_W1_MASTER_MXC=m -# CONFIG_W1_MASTER_DS1WM is not set -CONFIG_W1_MASTER_GPIO=m - -# -# 1-wire Slaves -# -CONFIG_W1_SLAVE_THERM=m -# CONFIG_W1_SLAVE_SMEM is not set -# CONFIG_W1_SLAVE_DS2408 is not set -# CONFIG_W1_SLAVE_DS2413 is not set -# CONFIG_W1_SLAVE_DS2423 is not set -# CONFIG_W1_SLAVE_DS2431 is not set -# CONFIG_W1_SLAVE_DS2433 is not set -# CONFIG_W1_SLAVE_DS2760 is not set -# CONFIG_W1_SLAVE_DS2780 is not set -# CONFIG_W1_SLAVE_DS2781 is not set -# CONFIG_W1_SLAVE_DS28E04 is not set -# CONFIG_W1_SLAVE_BQ27000 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_DA9052 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_IMX6_USB_CHARGER is not set -CONFIG_POWER_RESET=y -CONFIG_POWER_RESET_GPIO=y -# CONFIG_POWER_RESET_RESTART is not set -CONFIG_POWER_RESET_SNVS=y -# 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_DA9052_ADC is not set -# CONFIG_SENSORS_I5K_AMB 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=m -# 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_MAX17135 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_SIS5595 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_VIA686A is not set -# CONFIG_SENSORS_VT1211 is not set -# CONFIG_SENSORS_VT8231 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_SENSORS_MC13783_ADC is not set -# CONFIG_SENSORS_MAG3110 is not set -# CONFIG_MXC_MMA8451 is not set -CONFIG_THERMAL=y -CONFIG_THERMAL_HWMON=y -CONFIG_THERMAL_OF=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_GOV_FAIR_SHARE is not set -CONFIG_THERMAL_GOV_STEP_WISE=y -# CONFIG_THERMAL_GOV_USER_SPACE is not set -CONFIG_CPU_THERMAL=y -# CONFIG_THERMAL_EMULATION is not set -CONFIG_IMX_THERMAL=y -CONFIG_DEVICE_THERMAL=y - -# -# Texas Instruments thermal drivers -# -# CONFIG_WATCHDOG is not set -CONFIG_SSB_POSSIBLE=y - -# -# Sonics Silicon Backplane -# -CONFIG_SSB=y -CONFIG_SSB_SPROM=y -CONFIG_SSB_BLOCKIO=y -CONFIG_SSB_PCIHOST_POSSIBLE=y -CONFIG_SSB_PCIHOST=y -CONFIG_SSB_B43_PCI_BRIDGE=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_PCICORE_POSSIBLE=y -CONFIG_SSB_DRIVER_PCICORE=y -# 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=y -# 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_MFD_ASIC3 is not set -# CONFIG_PMIC_DA903X is not set -CONFIG_PMIC_DA9052=y -# CONFIG_MFD_DA9052_SPI is not set -CONFIG_MFD_DA9052_I2C=y -# CONFIG_MFD_DA9055 is not set -# CONFIG_MFD_DA9063 is not set -CONFIG_MFD_MXC_HDMI=y -# CONFIG_MFD_MXC_HDMI_ANDROID is not set -CONFIG_MFD_MC13XXX=m -CONFIG_MFD_MC13XXX_SPI=m -CONFIG_MFD_MC13XXX_I2C=m -# CONFIG_HTC_EGPIO is not set -# CONFIG_HTC_PASIC3 is not set -# CONFIG_HTC_I2CPLD is not set -# CONFIG_LPC_ICH is not set -# CONFIG_LPC_SCH is not set -# CONFIG_MFD_JANZ_CMODIO 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_MAX17135 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_UCB1400_CORE is not set -# CONFIG_MFD_RDC321X is not set -# CONFIG_MFD_RTSX_PCI 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=y -# 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_TIMBERDALE is not set -# CONFIG_MFD_TC3589X is not set -# CONFIG_MFD_TMIO is not set -# CONFIG_MFD_T7L66XB is not set -# CONFIG_MFD_TC6387XB is not set -# CONFIG_MFD_TC6393XB is not set -# CONFIG_MFD_VX855 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_MFD_TDA1997X is not set -# CONFIG_VEXPRESS_CONFIG is not set -CONFIG_REGULATOR=y -# CONFIG_REGULATOR_DEBUG is not set -CONFIG_REGULATOR_FIXED_VOLTAGE=y -# 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_ANATOP=y -# CONFIG_REGULATOR_DA9052 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_LTC3676 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_MC13783 is not set -# CONFIG_REGULATOR_MC13892 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_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 is not set -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_DMA_CONTIG=y -CONFIG_VIDEOBUF_DVB=m -CONFIG_VIDEOBUF2_CORE=m -CONFIG_VIDEOBUF2_MEMOPS=m -CONFIG_VIDEOBUF2_VMALLOC=m -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=y -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_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=m - -# -# 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=m -# CONFIG_VIDEO_STK1160_AC97 is not set -CONFIG_VIDEO_STK1160=m - -# -# 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 is not set -CONFIG_DVB_USB_IT913X=m -CONFIG_DVB_USB_LME2510=m -# CONFIG_DVB_USB_MXL111SF is not set -CONFIG_DVB_USB_RTL28XXU=m -CONFIG_DVB_USB_DVBSKY=m -# CONFIG_DVB_TTUSB_BUDGET is not set -# CONFIG_DVB_TTUSB_DEC is not set -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=m -# CONFIG_VIDEO_EM28XX_ALSA is not set -CONFIG_VIDEO_EM28XX_DVB=m -CONFIG_VIDEO_EM28XX_RC=m -# CONFIG_MEDIA_PCI_SUPPORT is not set -CONFIG_V4L_PLATFORM_DRIVERS=y -# CONFIG_VIDEO_CAFE_CCIC is not set -# CONFIG_VIDEO_TIMBERDALE is not set -CONFIG_VIDEO_MXC_OUTPUT=y -# CONFIG_VIDEO_MXC_CAPTURE is not set -CONFIG_VIDEO_MXC_IPU_OUTPUT=y -# CONFIG_VIDEO_MXC_PXP_V4L2 is not set -# CONFIG_SOC_CAMERA 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 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 - -# -# 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 -CONFIG_VIDEO_TVP5150=m - -# -# Video and audio decoders -# -CONFIG_VIDEO_CX25840=m - -# -# Video encoders -# - -# -# Camera sensor devices -# -CONFIG_VIDEO_MT9V011=m - -# -# 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_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 -CONFIG_MEDIA_TUNER_SI2157=m - -# -# Multistandard (satellite) frontends -# -CONFIG_DVB_CX24120=m -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_DVBSKY_M88DS3103=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_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 -CONFIG_DVB_SI2168=m -CONFIG_DVB_SP2=m - -# -# Tools to develop new frontends -# -# CONFIG_DVB_DUMMY_FE is not set - -# -# Graphics support -# -CONFIG_VGA_ARB=y -CONFIG_VGA_ARB_MAX_GPUS=16 - -# -# Vivante GPU support -# -CONFIG_VIVANTE_GALCORE=y -# CONFIG_DRM is not set -# CONFIG_VGASTATE is not set -# CONFIG_VIDEO_OUTPUT_CONTROL is not set -CONFIG_VIDEOMODE_HELPERS=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 is not set -# CONFIG_FB_SYS_COPYAREA is not set -# CONFIG_FB_SYS_IMAGEBLIT is not set -# CONFIG_FB_FOREIGN_ENDIAN is not set -# CONFIG_FB_SYS_FOPS is not set -# CONFIG_FB_SVGALIB is not set -# CONFIG_FB_MACMODES is not set -# CONFIG_FB_BACKLIGHT is not set -CONFIG_FB_MODE_HELPERS=y -# CONFIG_FB_TILEBLITTING is not set - -# -# Frame buffer hardware drivers -# -# CONFIG_FB_CIRRUS is not set -# CONFIG_FB_PM2 is not set -# CONFIG_FB_IMX is not set -# CONFIG_FB_CYBER2000 is not set -# CONFIG_FB_ASILIANT is not set -# CONFIG_FB_IMSTT is not set -# CONFIG_FB_OPENCORES is not set -# CONFIG_FB_S1D13XXX is not set -# CONFIG_FB_NVIDIA is not set -# CONFIG_FB_RIVA is not set -# CONFIG_FB_I740 is not set -# CONFIG_FB_MATROX is not set -# CONFIG_FB_RADEON is not set -# CONFIG_FB_ATY128 is not set -# CONFIG_FB_ATY is not set -# CONFIG_FB_S3 is not set -# CONFIG_FB_SAVAGE is not set -# CONFIG_FB_SIS is not set -# CONFIG_FB_NEOMAGIC is not set -# CONFIG_FB_KYRO is not set -# CONFIG_FB_3DFX is not set -# CONFIG_FB_VOODOO1 is not set -# CONFIG_FB_VT8623 is not set -# CONFIG_FB_TRIDENT is not set -# CONFIG_FB_ARK is not set -# CONFIG_FB_PM3 is not set -# CONFIG_FB_CARMINE is not set -# CONFIG_FB_TMIO is not set -# CONFIG_FB_SMSCUFX is not set -CONFIG_FB_UDL=m -# CONFIG_FB_GOLDFISH is not set -# CONFIG_FB_VIRTUAL is not set -CONFIG_FB_VIRTUAL_PHYMEM=y -# CONFIG_FB_METRONOME is not set -# CONFIG_FB_MB862XX is not set -# CONFIG_FB_MX3 is not set -# CONFIG_FB_BROADSHEET is not set -# CONFIG_FB_AUO_K190X is not set -# CONFIG_FB_MXS is not set -# CONFIG_FB_SIMPLE is not set -# CONFIG_EXYNOS_VIDEO is not set -CONFIG_BACKLIGHT_LCD_SUPPORT=y -# CONFIG_LCD_CLASS_DEVICE is not set -CONFIG_BACKLIGHT_CLASS_DEVICE=y -# CONFIG_BACKLIGHT_GENERIC is not set -# CONFIG_BACKLIGHT_PWM is not set -# CONFIG_BACKLIGHT_DA9052 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=y -# CONFIG_BACKLIGHT_LV5207LP is not set -# CONFIG_BACKLIGHT_BD6107 is not set -CONFIG_FB_MXC=y -CONFIG_FB_MXC_SYNC_PANEL=y -# CONFIG_FB_MXC_TVOUT_ADV739X is not set -CONFIG_FB_MXC_LDB=y -# CONFIG_FB_MXC_MIPI_DSI is not set -CONFIG_FB_MXC_HDMI=y -CONFIG_FB_MXC_EDID=y -# CONFIG_FB_MXC_EINK_PANEL is not set -CONFIG_FB_MXC_DCIC=y -# CONFIG_HANNSTAR_CABC 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 -CONFIG_SOUND=y -# CONFIG_SOUND_OSS_CORE is not set -CONFIG_SND=y -CONFIG_SND_TIMER=y -CONFIG_SND_PCM=y -CONFIG_SND_DMAENGINE_PCM=y -CONFIG_SND_HWDEP=m -CONFIG_SND_RAWMIDI=m -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=m -CONFIG_SND_DYNAMIC_MINORS=y -CONFIG_SND_MAX_CARDS=32 -# CONFIG_SND_SUPPORT_OLD_API is not set -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_AC97_CODEC=m -# CONFIG_SND_DRIVERS is not set -CONFIG_SND_PCI=y -# CONFIG_SND_AD1889 is not set -# CONFIG_SND_ALS300 is not set -# CONFIG_SND_ALI5451 is not set -# CONFIG_SND_ATIIXP is not set -# CONFIG_SND_ATIIXP_MODEM is not set -# CONFIG_SND_AU8810 is not set -# CONFIG_SND_AU8820 is not set -# CONFIG_SND_AU8830 is not set -# CONFIG_SND_AW2 is not set -# CONFIG_SND_AZT3328 is not set -# CONFIG_SND_BT87X is not set -# CONFIG_SND_CA0106 is not set -# CONFIG_SND_CMIPCI is not set -# CONFIG_SND_OXYGEN is not set -# CONFIG_SND_CS4281 is not set -# CONFIG_SND_CS46XX is not set -# CONFIG_SND_CS5535AUDIO is not set -# CONFIG_SND_CTXFI is not set -# CONFIG_SND_DARLA20 is not set -# CONFIG_SND_GINA20 is not set -# CONFIG_SND_LAYLA20 is not set -# CONFIG_SND_DARLA24 is not set -# CONFIG_SND_GINA24 is not set -# CONFIG_SND_LAYLA24 is not set -# CONFIG_SND_MONA is not set -# CONFIG_SND_MIA is not set -# CONFIG_SND_ECHO3G is not set -# CONFIG_SND_INDIGO is not set -# CONFIG_SND_INDIGOIO is not set -# CONFIG_SND_INDIGODJ is not set -# CONFIG_SND_INDIGOIOX is not set -# CONFIG_SND_INDIGODJX is not set -# CONFIG_SND_EMU10K1 is not set -# CONFIG_SND_EMU10K1X is not set -# CONFIG_SND_ENS1370 is not set -# CONFIG_SND_ENS1371 is not set -# CONFIG_SND_ES1938 is not set -# CONFIG_SND_ES1968 is not set -# CONFIG_SND_FM801 is not set -# CONFIG_SND_HDA_INTEL is not set -# CONFIG_SND_HDSP is not set -# CONFIG_SND_HDSPM is not set -# CONFIG_SND_ICE1712 is not set -# CONFIG_SND_ICE1724 is not set -# CONFIG_SND_INTEL8X0 is not set -# CONFIG_SND_INTEL8X0M is not set -# CONFIG_SND_KORG1212 is not set -# CONFIG_SND_LOLA is not set -# CONFIG_SND_LX6464ES is not set -# CONFIG_SND_MAESTRO3 is not set -# CONFIG_SND_MIXART is not set -# CONFIG_SND_NM256 is not set -# CONFIG_SND_PCXHR is not set -# CONFIG_SND_RIPTIDE is not set -# CONFIG_SND_RME32 is not set -# CONFIG_SND_RME96 is not set -# CONFIG_SND_RME9652 is not set -# CONFIG_SND_SONICVIBES is not set -# CONFIG_SND_TRIDENT is not set -# CONFIG_SND_VIA82XX is not set -# CONFIG_SND_VIA82XX_MODEM is not set -# CONFIG_SND_VIRTUOSO is not set -# CONFIG_SND_VX222 is not set -# CONFIG_SND_YMFPCI is not set -# CONFIG_SND_ARM is not set -# CONFIG_SND_SPI is not set -CONFIG_SND_USB=y -CONFIG_SND_USB_AUDIO=m -CONFIG_SND_USB_UA101=m -CONFIG_SND_USB_CAIAQ=m -# CONFIG_SND_USB_CAIAQ_INPUT is not set -CONFIG_SND_USB_6FIRE=m -CONFIG_SND_USB_HIFACE=m -CONFIG_SND_SOC=y -CONFIG_SND_SOC_AC97_BUS=y -CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y -# CONFIG_SND_ATMEL_SOC is not set -# CONFIG_SND_DESIGNWARE_I2S is not set - -# -# SoC Audio for Freescale CPUs -# - -# -# Common SoC Audio options for Freescale CPUs: -# -CONFIG_SND_SOC_FSL_ASRC=y -CONFIG_SND_SOC_FSL_SAI=y -CONFIG_SND_SOC_FSL_SSI=y -CONFIG_SND_SOC_FSL_SPDIF=y -# CONFIG_SND_SOC_FSL_ESAI is not set -CONFIG_SND_SOC_FSL_HDMI=y -CONFIG_SND_SOC_IMX_PCM_DMA=y -CONFIG_SND_SOC_IMX_AUDMUX=y -CONFIG_SND_IMX_SOC=y -CONFIG_SND_SOC_IMX_HDMI_DMA=y - -# -# SoC Audio support for Freescale i.MX boards: -# -# CONFIG_SND_SOC_IMX_CS42888 is not set -# CONFIG_SND_SOC_IMX_WM8731 is not set -# CONFIG_SND_SOC_IMX_WM8962 is not set -CONFIG_SND_SOC_IMX_SGTL5000=y -CONFIG_SND_SOC_IMX_AC97_VT1613=y -# CONFIG_SND_SOC_IMX_MQS is not set -CONFIG_SND_SOC_IMX_SPDIF=y -# CONFIG_SND_SOC_IMX_MC13783 is not set -CONFIG_SND_SOC_IMX_HDMI=y -# CONFIG_SND_SOC_IMX_SI476X is not set -# CONFIG_SND_SOC_IMX_TDA1997X is not set -CONFIG_SND_SOC_I2C_AND_SPI=y -# CONFIG_SND_SOC_CS42XX8_I2C is not set -CONFIG_SND_SOC_HDMI_CODEC=y -CONFIG_SND_SOC_SGTL5000=y -CONFIG_SND_SOC_VT1613=y -# CONFIG_SND_SIMPLE_CARD is not set -# CONFIG_SOUND_PRIME is not set -CONFIG_AC97_BUS=y - -# -# HID support -# -CONFIG_HID=y -# CONFIG_HID_BATTERY_STRENGTH is not set -CONFIG_HIDRAW=y -CONFIG_UHID=y -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=y -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_OUYA=y -CONFIG_HID_PANTHERLORD=y -CONFIG_PANTHERLORD_FF=y -CONFIG_HID_PETALYNX=y -# CONFIG_HID_PICOLCD 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=y -# CONFIG_HID_SPEEDLINK is not set -# CONFIG_HID_STEELSERIES is not set -CONFIG_HID_SPINELPLUS=y -CONFIG_HID_SUNPLUS=y -# CONFIG_HID_GREENASIA is not set -CONFIG_HID_SMARTJOYPLUS=m -CONFIG_SMARTJOYPLUS_FF=y -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=y -# 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=m -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 is not set -# CONFIG_USB_OTG_WHITELIST is not set -# CONFIG_USB_OTG_BLACKLIST_HUB is not set -# CONFIG_USB_OTG_FSM is not set -CONFIG_USB_MON=m -# 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=y -CONFIG_USB_EHCI_TT_NEWSCHED=y -CONFIG_USB_EHCI_PCI=y -# CONFIG_USB_EHCI_MXC is not set -# 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 is not set -# CONFIG_USB_UHCI_HCD is not set -# CONFIG_USB_SL811_HCD is not set -# CONFIG_USB_R8A66597_HCD is not set -# CONFIG_USB_IMX21_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=m -# CONFIG_USB_PRINTER is not set -# CONFIG_USB_WDM is not set -# 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=y -CONFIG_USB_CHIPIDEA_UDC=y -CONFIG_USB_CHIPIDEA_HOST=y -# CONFIG_USB_CHIPIDEA_DEBUG is not set - -# -# USB port drivers -# -CONFIG_USB_SERIAL=m -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=m -# CONFIG_USB_SERIAL_WHITEHEAT is not set -# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set -CONFIG_USB_SERIAL_CP210X=m -# CONFIG_USB_SERIAL_CYPRESS_M8 is not set -# CONFIG_USB_SERIAL_EMPEG is not set -CONFIG_USB_SERIAL_FTDI_SIO=m -# 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=m -# 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=m -# 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 is not set -# CONFIG_USB_EMI26 is not set -# CONFIG_USB_ADUTUX is not set -# CONFIG_USB_SEVSEG is not set -# CONFIG_USB_RIO500 is not set -# CONFIG_USB_LEGOTOWER is not set -# CONFIG_USB_LCD is not set -# CONFIG_USB_LED is not set -# CONFIG_USB_CYPRESS_CY7C63 is not set -# CONFIG_USB_CYTHERM is not set -# CONFIG_USB_IDMOUSE is not set -# CONFIG_USB_FTDI_ELAN is not set -# CONFIG_USB_APPLEDISPLAY is not set -# CONFIG_USB_SISUSBVGA is not set -# CONFIG_USB_LD is not set -# CONFIG_USB_TRANCEVIBRATOR is not set -# CONFIG_USB_IOWARRIOR is not set -# CONFIG_USB_TEST is not set -# CONFIG_USB_EHSET_TEST_FIXTURE is not set -# CONFIG_USB_ISIGHTFW is not set -# CONFIG_USB_YUREX is not set -# CONFIG_USB_EZUSB_FX2 is not set -# CONFIG_USB_HSIC_USB3503 is not set - -# -# USB Physical Layer drivers -# -CONFIG_USB_PHY=y -# CONFIG_NOP_USB_XCEIV is not set -# CONFIG_AM335X_PHY_USB 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 is not set -CONFIG_USB_MXS_PHY=y -# CONFIG_USB_RCAR_PHY is not set -# CONFIG_USB_ULPI is not set -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_FSL_USB2 is not set -# CONFIG_USB_FUSB300 is not set -# 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_S3C_HSOTG 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_AMD5536UDC is not set -# CONFIG_USB_NET2272 is not set -# CONFIG_USB_NET2280 is not set -# CONFIG_USB_GOKU is not set -# CONFIG_USB_EG20T is not set -# CONFIG_USB_DUMMY_HCD is not set -CONFIG_USB_LIBCOMPOSITE=m -CONFIG_USB_F_ACM=m -CONFIG_USB_F_SS_LB=m -CONFIG_USB_U_SERIAL=m -CONFIG_USB_U_ETHER=m -CONFIG_USB_F_SERIAL=m -CONFIG_USB_F_OBEX=m -CONFIG_USB_F_ECM=m -CONFIG_USB_F_SUBSET=m -CONFIG_USB_F_RNDIS=m -CONFIG_USB_F_MASS_STORAGE=m -# CONFIG_USB_CONFIGFS is not set -CONFIG_USB_ZERO=m -# CONFIG_USB_AUDIO is not set -CONFIG_USB_ETH=m -CONFIG_USB_ETH_RNDIS=y -# CONFIG_USB_ETH_EEM 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=m -# CONFIG_FSL_UTP is not set -CONFIG_USB_G_SERIAL=m -# 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_UWB is not set -CONFIG_MMC=y -# CONFIG_MMC_DEBUG is not set -CONFIG_MMC_UNSAFE_RESUME=y -# CONFIG_MMC_CLKGATE is not set - -# -# MMC/SD/SDIO Card Drivers -# -CONFIG_MMC_BLOCK=y -CONFIG_MMC_BLOCK_MINORS=32 -CONFIG_MMC_BLOCK_BOUNCE=y -# CONFIG_SDIO_UART is not set -# CONFIG_MMC_TEST is not set - -# -# MMC/SD/SDIO Host Controller Drivers -# -CONFIG_MMC_SDHCI=y -CONFIG_MMC_SDHCI_IO_ACCESSORS=y -# CONFIG_MMC_SDHCI_PCI is not set -CONFIG_MMC_SDHCI_PLTFM=y -# CONFIG_MMC_SDHCI_OF_ARASAN is not set -CONFIG_MMC_SDHCI_ESDHC_IMX=y -# CONFIG_MMC_SDHCI_PXAV3 is not set -# CONFIG_MMC_SDHCI_PXAV2 is not set -# CONFIG_MMC_MXC is not set -# CONFIG_MMC_TIFM_SD is not set -# CONFIG_MMC_CB710 is not set -# CONFIG_MMC_VIA_SDMMC is not set -# CONFIG_MMC_DW is not set -# CONFIG_MMC_VUB300 is not set -# CONFIG_MMC_USHC is not set -# CONFIG_MEMSTICK is not set - -# -# MXC support drivers -# -CONFIG_MXC_IPU=y -CONFIG_MXC_IPU_V3=y - -# -# MXC VPU(Video Processing Unit) support -# -CONFIG_MXC_VPU=y -# CONFIG_MXC_VPU_DEBUG is not set -CONFIG_MX6_VPU_352M=y - -# -# MXC HDMI CEC (Consumer Electronics Control) support -# -CONFIG_MXC_HDMI_CEC=y - -# -# MXC MIPI Support -# -CONFIG_MXC_MIPI_CSI2=y - -# -# MXC Media Local Bus Driver -# -CONFIG_MXC_MLB=y -CONFIG_MXC_MLB150=y -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_DA9052 is not set -# CONFIG_LEDS_DAC124S085 is not set -CONFIG_LEDS_PWM=y -# CONFIG_LEDS_REGULATOR is not set -# CONFIG_LEDS_BD2802 is not set -# CONFIG_LEDS_LT3593 is not set -# CONFIG_LEDS_MC13783 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 is not set -CONFIG_LEDS_TRIGGER_HEARTBEAT=y -# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set -# CONFIG_LEDS_TRIGGER_CPU is not set -# CONFIG_LEDS_TRIGGER_GPIO is not set -CONFIG_LEDS_TRIGGER_DEFAULT_ON=y - -# -# iptables trigger is under Netfilter config (LED target) -# -# CONFIG_LEDS_TRIGGER_TRANSIENT is not set -# CONFIG_LEDS_TRIGGER_CAMERA is not set -# CONFIG_ACCESSIBILITY is not set -# CONFIG_INFINIBAND is not set -# CONFIG_EDAC 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=y -# CONFIG_RTC_DRV_TEST is not set - -# -# I2C RTC drivers -# -CONFIG_RTC_DRV_DS1307=y -# 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=y -# 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_CMOS is not set -# 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_DA9052 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_IMXDI is not set -CONFIG_RTC_DRV_MC13XXX=m -CONFIG_RTC_DRV_MXC=y -CONFIG_RTC_DRV_SNVS=y -# CONFIG_RTC_DRV_MOXART is not set - -# -# HID Sensor RTC drivers -# -# CONFIG_RTC_DRV_HID_SENSOR_TIME is not set -CONFIG_DMADEVICES=y -# CONFIG_DMADEVICES_DEBUG is not set - -# -# DMA Devices -# -# CONFIG_DW_DMAC_CORE is not set -# CONFIG_DW_DMAC is not set -# CONFIG_DW_DMAC_PCI is not set -CONFIG_MX3_IPU=y -CONFIG_MX3_IPU_IRQS=4 -CONFIG_MXC_PXP_V2=y -CONFIG_MXC_PXP_CLIENT_DEVICE=y -# CONFIG_TIMB_DMA is not set -CONFIG_IMX_SDMA=y -# CONFIG_IMX_DMA is not set -CONFIG_MXS_DMA=y -CONFIG_DMA_ENGINE=y -CONFIG_DMA_OF=y - -# -# DMA Clients -# -# CONFIG_ASYNC_TX_DMA is not set -# CONFIG_DMATEST is not set -# CONFIG_AUXDISPLAY is not set -# CONFIG_UIO is not set -# CONFIG_VIRT_DRIVERS is not set - -# -# Virtio drivers -# -# CONFIG_VIRTIO_PCI is not set -# CONFIG_VIRTIO_MMIO is not set - -# -# Microsoft Hyper-V guest support -# -CONFIG_STAGING=y -# CONFIG_ET131X is not set -# CONFIG_USBIP_CORE is not set -CONFIG_W35UND=m -# CONFIG_PRISM2_USB is not set -# CONFIG_ECHO is not set -# CONFIG_COMEDI is not set -# CONFIG_R8187SE is not set -# CONFIG_RTL8192U is not set -# CONFIG_RTLLIB is not set -CONFIG_R8712U=m -CONFIG_R8188EU=m -CONFIG_88EU_AP_MODE=y -# CONFIG_88EU_P2P is not set -# CONFIG_R8821AE is not set -CONFIG_RTS5139=m -# CONFIG_RTS5139_DEBUG is not set -# CONFIG_RTS5208 is not set -# CONFIG_TRANZPORT is not set -# CONFIG_IDE_PHISON is not set -# CONFIG_LINE6_USB is not set -# CONFIG_USB_SERIAL_QUATECH2 is not set -# CONFIG_VT6655 is not set -CONFIG_VT6656=m -# CONFIG_DX_SEP is not set -# CONFIG_FB_SM7XX is not set -# CONFIG_CRYSTALHD is not set -# CONFIG_FB_XGI is not set -# 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_DVB_CXD2099 is not set -# CONFIG_VIDEO_DT3155 is not set -# 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_SOLO6X10 is not set -CONFIG_LIRC_STAGING=y -# CONFIG_LIRC_BT829 is not set -CONFIG_LIRC_IGORPLUGUSB=m -# CONFIG_LIRC_IMON is not set -CONFIG_LIRC_GPIO=m -# CONFIG_LIRC_SASEM is not set -# CONFIG_LIRC_SERIAL is not set -# CONFIG_LIRC_SIR is not set -CONFIG_LIRC_XBOX=m -# CONFIG_LIRC_ZILOG is not set - -# -# Android -# -# CONFIG_ANDROID is not set -# CONFIG_USB_WPAN_HCD is not set -# CONFIG_WIMAX_GDM72XX is not set -# CONFIG_LTE_GDM724X is not set -CONFIG_NET_VENDOR_SILICOM=y -# CONFIG_SBYPASS is not set -# CONFIG_BPCTL 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_DGNC 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_SI5351 is not set -# CONFIG_COMMON_CLK_SI570 is not set -# CONFIG_COMMON_CLK_QCOM is not set - -# -# Hardware Spinlock drivers -# -CONFIG_CLKSRC_OF=y -CONFIG_CLKSRC_MMIO=y -# CONFIG_MAILBOX is not set -# CONFIG_IOMMU_SUPPORT 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_VME_BUS is not set -CONFIG_PWM=y -CONFIG_PWM_SYSFS=y -CONFIG_PWM_IMX=y -# CONFIG_PWM_PCA9685 is not set -CONFIG_IRQCHIP=y -CONFIG_ARM_GIC=y -# CONFIG_IPACK_BUS is not set -CONFIG_ARCH_HAS_RESET_CONTROLLER=y -CONFIG_RESET_CONTROLLER=y -CONFIG_RESET_GPIO=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=m -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -# CONFIG_REISERFS_FS_XATTR is not set -CONFIG_JFS_FS=m -# CONFIG_JFS_POSIX_ACL is not set -# CONFIG_JFS_SECURITY is not set -# CONFIG_JFS_DEBUG is not set -# CONFIG_JFS_STATISTICS is not set -CONFIG_XFS_FS=m -# CONFIG_XFS_QUOTA is not set -# CONFIG_XFS_POSIX_ACL is not set -# CONFIG_XFS_RT is not set -# CONFIG_XFS_WARN is not set -# CONFIG_XFS_DEBUG is not set -# CONFIG_GFS2_FS is not set -# CONFIG_OCFS2_FS is not set -CONFIG_BTRFS_FS=m -# CONFIG_BTRFS_FS_POSIX_ACL is not set -# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set -# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set -# 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=y -# CONFIG_QUOTA is not set -# CONFIG_QUOTACTL is not set -CONFIG_AUTOFS4_FS=y -CONFIG_FUSE_FS=m -# CONFIG_CUSE is not set - -# -# Caches -# -CONFIG_FSCACHE=y -# CONFIG_FSCACHE_STATS is not set -# CONFIG_FSCACHE_HISTOGRAM is not set -# CONFIG_FSCACHE_DEBUG is not set -# CONFIG_FSCACHE_OBJECT_LIST is not set -# CONFIG_CACHEFILES 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_SYSCTL=y -CONFIG_PROC_PAGE_MONITOR=y -CONFIG_SYSFS=y -CONFIG_TMPFS=y -CONFIG_TMPFS_POSIX_ACL=y -CONFIG_TMPFS_XATTR=y -# CONFIG_HUGETLB_PAGE is not set -CONFIG_CONFIGFS_FS=m -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_UBIFS_FS is not set -# CONFIG_LOGFS is not set -# CONFIG_CRAMFS is not set -CONFIG_SQUASHFS=y -# CONFIG_SQUASHFS_FILE_CACHE is not set -CONFIG_SQUASHFS_FILE_DIRECT=y -# CONFIG_SQUASHFS_DECOMP_SINGLE is not set -# CONFIG_SQUASHFS_DECOMP_MULTI is not set -CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU=y -# CONFIG_SQUASHFS_XATTR is not set -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=y -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=y -CONFIG_PNFS_FILE_LAYOUT=y -CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org" -CONFIG_NFS_V4_1_MIGRATION=y -CONFIG_ROOT_NFS=y -CONFIG_NFS_FSCACHE=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_RPCSEC_GSS_KRB5=m -# 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=y -CONFIG_CIFS_SMB311=y -CONFIG_CIFS_FSCACHE=y -# 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_DLM 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 is not set -CONFIG_ENABLE_WARN_DEPRECATED=y -CONFIG_ENABLE_MUST_CHECK=y -CONFIG_FRAME_WARN=1024 -CONFIG_STRIP_ASM_SYMS=y -# 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_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_HIGHMEM is not set -# CONFIG_DEBUG_SHIRQ is not set - -# -# Debug Lockups and Hangs -# -CONFIG_LOCKUP_DETECTOR=y -# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set -CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 -# 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 is not set -# CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set - -# -# 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_DEBUG_KOBJECT is not set -# CONFIG_DEBUG_BUGVERBOSE is not set -# 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_SPARSE_RCU_POINTER is not set -# CONFIG_RCU_TORTURE_TEST is not set -CONFIG_RCU_CPU_STALL_TIMEOUT=21 -# CONFIG_RCU_CPU_STALL_INFO is not set -# CONFIG_RCU_TRACE is not set -# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set -# CONFIG_NOTIFIER_ERROR_INJECTION is not set -# CONFIG_FAULT_INJECTION is not set -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_TRACING_SUPPORT=y -# CONFIG_FTRACE 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_ARM_PTDUMP is not set -# CONFIG_STRICT_DEVMEM is not set -# CONFIG_ARM_UNWIND is not set -# CONFIG_DEBUG_USER is not set -# CONFIG_DEBUG_LL is not set -CONFIG_DEBUG_IMX_UART_PORT=1 -CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S" -# CONFIG_DEBUG_UART_PL01X is not set -# CONFIG_DEBUG_UART_8250 is not set -CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h" -# CONFIG_PID_IN_CONTEXTIDR is not set -# CONFIG_DEBUG_SET_MODULE_RONX 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 is not set -CONFIG_DEFAULT_SECURITY_DAC=y -CONFIG_DEFAULT_SECURITY="" -CONFIG_XOR_BLOCKS=m -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_CRYPTODEV is not set -CONFIG_CRYPTO_MANAGER=y -CONFIG_CRYPTO_MANAGER2=y -# CONFIG_CRYPTO_USER is not set -CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y -# CONFIG_CRYPTO_GF128MUL is not set -# 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=m -# CONFIG_CRYPTO_GCM is not set -CONFIG_CRYPTO_SEQIV=m - -# -# Block modes -# -CONFIG_CRYPTO_CBC=m -CONFIG_CRYPTO_CTR=m -CONFIG_CRYPTO_CTS=m -CONFIG_CRYPTO_ECB=y -# CONFIG_CRYPTO_LRW is not set -# CONFIG_CRYPTO_PCBC is not set -# CONFIG_CRYPTO_XTS is not set - -# -# 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 is not set -# 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_SHA1_ARM=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_AES_ARM=m -# CONFIG_CRYPTO_AES_ARM_BS is not set -# 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 is not set -# CONFIG_CRYPTO_ZLIB is not set -CONFIG_CRYPTO_LZO=m -# CONFIG_CRYPTO_LZ4 is not set -# CONFIG_CRYPTO_LZ4HC is not set - -# -# Random Number Generation -# -# CONFIG_CRYPTO_ANSI_CPRNG is not set -# CONFIG_CRYPTO_USER_API_HASH is not set -# CONFIG_CRYPTO_USER_API_SKCIPHER is not set -CONFIG_CRYPTO_HW=y -# CONFIG_CRYPTO_DEV_HIFN_795X is not set -CONFIG_CRYPTO_DEV_FSL_CAAM=y -CONFIG_CRYPTO_DEV_FSL_CAAM_JR=y -CONFIG_CRYPTO_DEV_FSL_CAAM_RINGSIZE=9 -# CONFIG_CRYPTO_DEV_FSL_CAAM_INTC is not set -CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API=y -CONFIG_CRYPTO_DEV_FSL_CAAM_AHASH_API=y -CONFIG_CRYPTO_DEV_FSL_CAAM_RNG_API=y -# CONFIG_CRYPTO_DEV_FSL_CAAM_RNG_TEST is not set -CONFIG_CRYPTO_DEV_FSL_CAAM_SM=y -CONFIG_CRYPTO_DEV_FSL_CAAM_SM_SLOTSIZE=7 -# CONFIG_CRYPTO_DEV_FSL_CAAM_SM_TEST is not set -CONFIG_CRYPTO_DEV_FSL_CAAM_SECVIO=y -# CONFIG_CRYPTO_DEV_FSL_CAAM_DEBUG is not set -# CONFIG_CRYPTO_DEV_SAHARA is not set -# CONFIG_ASYMMETRIC_KEY_TYPE is not set -# CONFIG_BINARY_PRINTF is not set - -# -# Library routines -# -CONFIG_RAID6_PQ=m -CONFIG_BITREVERSE=y -CONFIG_RATIONAL=y -CONFIG_GENERIC_STRNCPY_FROM_USER=y -CONFIG_GENERIC_STRNLEN_USER=y -CONFIG_GENERIC_NET_UTILS=y -CONFIG_GENERIC_PCI_IOMAP=y -CONFIG_GENERIC_IO=y -CONFIG_STMP_DEVICE=y -CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y -CONFIG_CRC_CCITT=m -CONFIG_CRC16=y -# CONFIG_CRC_T10DIF is not set -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=m -# CONFIG_CRC8 is not set -# CONFIG_RANDOM32_SELFTEST is not set -CONFIG_ZLIB_INFLATE=y -CONFIG_ZLIB_DEFLATE=m -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_GENERIC_ALLOCATOR=y -CONFIG_ASSOCIATIVE_ARRAY=y -CONFIG_HAS_IOMEM=y -CONFIG_HAS_IOPORT=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_OID_REGISTRY=y -CONFIG_FONT_SUPPORT=y -# CONFIG_FONTS is not set -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y -# CONFIG_VIRTUALIZATION is not set diff --git a/projects/imx6/linux/4.4-xbian/linux.arm.conf b/projects/imx6/linux/4.4-xbian/linux.arm.conf deleted file mode 100644 index 57907094f4..0000000000 --- a/projects/imx6/linux/4.4-xbian/linux.arm.conf +++ /dev/null @@ -1,6572 +0,0 @@ -# -# Automatically generated file; DO NOT EDIT. -# Linux/arm 4.4.19 Kernel Configuration -# -CONFIG_ARM=y -CONFIG_ARM_HAS_SG_CHAIN=y -CONFIG_NEED_SG_DMA_LENGTH=y -CONFIG_ARM_DMA_USE_IOMMU=y -CONFIG_ARM_DMA_IOMMU_ALIGNMENT=8 -CONFIG_MIGHT_HAVE_PCI=y -CONFIG_SYS_SUPPORTS_APM_EMULATION=y -CONFIG_HAVE_PROC_CPU=y -CONFIG_STACKTRACE_SUPPORT=y -CONFIG_LOCKDEP_SUPPORT=y -CONFIG_TRACE_IRQFLAGS_SUPPORT=y -CONFIG_RWSEM_XCHGADD_ALGORITHM=y -CONFIG_FIX_EARLYCON_MEM=y -CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y -CONFIG_NEED_DMA_MAP_STATE=y -CONFIG_ARCH_SUPPORTS_UPROBES=y -CONFIG_VECTORS_BASE=0xffff0000 -CONFIG_ARM_PATCH_PHYS_VIRT=y -CONFIG_GENERIC_BUG=y -CONFIG_PGTABLE_LEVELS=2 -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_HAVE_KERNEL_GZIP=y -CONFIG_HAVE_KERNEL_LZMA=y -CONFIG_HAVE_KERNEL_XZ=y -CONFIG_HAVE_KERNEL_LZO=y -CONFIG_HAVE_KERNEL_LZ4=y -CONFIG_KERNEL_GZIP=y -# CONFIG_KERNEL_LZMA is not set -# CONFIG_KERNEL_XZ is not set -# CONFIG_KERNEL_LZO is not set -# CONFIG_KERNEL_LZ4 is not set -CONFIG_DEFAULT_HOSTNAME="@DISTRONAME@" -CONFIG_SWAP=y -CONFIG_SYSVIPC=y -CONFIG_SYSVIPC_SYSCTL=y -CONFIG_POSIX_MQUEUE=y -CONFIG_POSIX_MQUEUE_SYSCTL=y -CONFIG_CROSS_MEMORY_ATTACH=y -CONFIG_FHANDLE=y -# CONFIG_USELIB is not set -# CONFIG_AUDIT is not set -CONFIG_HAVE_ARCH_AUDITSYSCALL=y - -# -# IRQ subsystem -# -CONFIG_GENERIC_IRQ_PROBE=y -CONFIG_GENERIC_IRQ_SHOW=y -CONFIG_GENERIC_IRQ_SHOW_LEVEL=y -CONFIG_HARDIRQS_SW_RESEND=y -CONFIG_GENERIC_IRQ_CHIP=y -CONFIG_IRQ_DOMAIN=y -CONFIG_IRQ_DOMAIN_HIERARCHY=y -CONFIG_GENERIC_MSI_IRQ=y -CONFIG_HANDLE_DOMAIN_IRQ=y -# CONFIG_IRQ_DOMAIN_DEBUG is not set -CONFIG_IRQ_FORCED_THREADING=y -CONFIG_SPARSE_IRQ=y -CONFIG_GENERIC_TIME_VSYSCALL=y -CONFIG_GENERIC_CLOCKEVENTS=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 is not set -CONFIG_HIGH_RES_TIMERS=y - -# -# CPU/Task time and stats accounting -# -# CONFIG_TICK_CPU_ACCOUNTING is not set -# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set -CONFIG_IRQ_TIME_ACCOUNTING=y -CONFIG_BSD_PROCESS_ACCT=y -CONFIG_BSD_PROCESS_ACCT_V3=y -# CONFIG_TASKSTATS is not set - -# -# RCU Subsystem -# -CONFIG_PREEMPT_RCU=y -CONFIG_RCU_EXPERT=y -CONFIG_SRCU=y -# CONFIG_TASKS_RCU is not set -CONFIG_RCU_STALL_COMMON=y -CONFIG_RCU_FANOUT=4 -CONFIG_RCU_FANOUT_LEAF=2 -# CONFIG_TREE_RCU_TRACE is not set -CONFIG_RCU_BOOST=y -CONFIG_RCU_KTHREAD_PRIO=7 -CONFIG_RCU_BOOST_DELAY=200 -CONFIG_RCU_NOCB_CPU=y -CONFIG_RCU_NOCB_CPU_NONE=y -# CONFIG_RCU_NOCB_CPU_ZERO is not set -# CONFIG_RCU_NOCB_CPU_ALL is not set -# CONFIG_RCU_EXPEDITE_BOOT is not set -CONFIG_BUILD_BIN2C=y -CONFIG_IKCONFIG=y -CONFIG_IKCONFIG_PROC=y -CONFIG_LOG_BUF_SHIFT=16 -CONFIG_LOG_CPU_MAX_BUF_SHIFT=13 -CONFIG_GENERIC_SCHED_CLOCK=y -CONFIG_CGROUPS=y -# CONFIG_CGROUP_DEBUG is not set -CONFIG_CGROUP_FREEZER=y -CONFIG_CGROUP_PIDS=y -CONFIG_CGROUP_DEVICE=y -CONFIG_CPUSETS=y -CONFIG_PROC_PID_CPUSET=y -CONFIG_CGROUP_CPUACCT=y -# CONFIG_MEMCG is not set -# CONFIG_CGROUP_PERF is not set -CONFIG_CGROUP_SCHED=y -CONFIG_FAIR_GROUP_SCHED=y -CONFIG_CFS_BANDWIDTH=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 is not set -# CONFIG_SYSFS_DEPRECATED is not set -CONFIG_RELAY=y -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 is not set -# CONFIG_RD_LZMA is not set -# CONFIG_RD_XZ is not set -CONFIG_RD_LZO=y -# CONFIG_RD_LZ4 is not set -# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set -CONFIG_SYSCTL=y -CONFIG_ANON_INODES=y -CONFIG_HAVE_UID16=y -CONFIG_BPF=y -CONFIG_EXPERT=y -# CONFIG_UID16 is not set -CONFIG_MULTIUSER=y -# CONFIG_SGETMASK_SYSCALL is not set -CONFIG_SYSFS_SYSCALL=y -CONFIG_SYSCTL_SYSCALL=y -CONFIG_KALLSYMS=y -CONFIG_PRINTK=y -CONFIG_BUG=y -CONFIG_BASE_FULL=y -CONFIG_FUTEX=y -CONFIG_EPOLL=y -CONFIG_SIGNALFD=y -CONFIG_TIMERFD=y -CONFIG_EVENTFD=y -# CONFIG_BPF_SYSCALL is not set -CONFIG_SHMEM=y -CONFIG_AIO=y -CONFIG_ADVISE_SYSCALLS=y -CONFIG_USERFAULTFD=y -CONFIG_PCI_QUIRKS=y -CONFIG_MEMBARRIER=y -CONFIG_EMBEDDED=y -CONFIG_HAVE_PERF_EVENTS=y -CONFIG_PERF_USE_VMALLOC=y - -# -# Kernel Performance Events And Counters -# -CONFIG_PERF_EVENTS=y -# CONFIG_VM_EVENT_COUNTERS is not set -# CONFIG_SLUB_DEBUG is not set -CONFIG_COMPAT_BRK=y -CONFIG_SLUB=y -# CONFIG_SYSTEM_DATA_VERIFICATION is not set -# CONFIG_PROFILING is not set -CONFIG_TRACEPOINTS=y -CONFIG_HAVE_OPROFILE=y -# CONFIG_KPROBES is not set -# CONFIG_UPROBES is not set -# CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set -CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y -CONFIG_ARCH_USE_BUILTIN_BSWAP=y -CONFIG_HAVE_KPROBES=y -CONFIG_HAVE_KRETPROBES=y -CONFIG_HAVE_OPTPROBES=y -CONFIG_HAVE_ARCH_TRACEHOOK=y -CONFIG_HAVE_DMA_ATTRS=y -CONFIG_HAVE_DMA_CONTIGUOUS=y -CONFIG_GENERIC_SMP_IDLE_THREAD=y -CONFIG_GENERIC_IDLE_POLL_SETUP=y -CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=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_ARCH_WANT_IPC_PARSE_VERSION=y -CONFIG_HAVE_ARCH_SECCOMP_FILTER=y -CONFIG_HAVE_CC_STACKPROTECTOR=y -# CONFIG_CC_STACKPROTECTOR is not set -CONFIG_CC_STACKPROTECTOR_NONE=y -# CONFIG_CC_STACKPROTECTOR_REGULAR is not set -# CONFIG_CC_STACKPROTECTOR_STRONG is not set -CONFIG_HAVE_CONTEXT_TRACKING=y -CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y -CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y -CONFIG_HAVE_MOD_ARCH_SPECIFIC=y -CONFIG_MODULES_USE_ELF_REL=y -CONFIG_ARCH_HAS_ELF_RANDOMIZE=y -CONFIG_CLONE_BACKWARDS=y -CONFIG_OLD_SIGSUSPEND3=y -CONFIG_OLD_SIGACTION=y - -# -# GCOV-based kernel profiling -# -# CONFIG_GCOV_KERNEL is not set -CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y -CONFIG_HAVE_GENERIC_DMA_COHERENT=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_MODULE_COMPRESS is not set -CONFIG_MODULES_TREE_LOOKUP=y -CONFIG_BLOCK=y -CONFIG_LBDAF=y -CONFIG_BLK_DEV_BSG=y -CONFIG_BLK_DEV_BSGLIB=y -CONFIG_BLK_DEV_INTEGRITY=y -# CONFIG_BLK_DEV_THROTTLING is not set -# CONFIG_BLK_CMDLINE_PARSER is not set - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_AIX_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -CONFIG_MAC_PARTITION=y -CONFIG_MSDOS_PARTITION=y -CONFIG_BSD_DISKLABEL=y -CONFIG_MINIX_SUBPARTITION=y -CONFIG_SOLARIS_X86_PARTITION=y -CONFIG_UNIXWARE_DISKLABEL=y -CONFIG_LDM_PARTITION=y -# CONFIG_LDM_DEBUG is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -CONFIG_SUN_PARTITION=y -CONFIG_KARMA_PARTITION=y -CONFIG_EFI_PARTITION=y -# CONFIG_SYSV68_PARTITION is not set -# CONFIG_CMDLINE_PARTITION is not set - -# -# IO Schedulers -# -CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_DEADLINE=y -CONFIG_IOSCHED_CFQ=y -# CONFIG_CFQ_GROUP_IOSCHED is not set -CONFIG_IOSCHED_BFQ=y -# CONFIG_CGROUP_BFQIO is not set -# CONFIG_DEFAULT_DEADLINE is not set -# CONFIG_DEFAULT_CFQ is not set -CONFIG_DEFAULT_BFQ=y -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="bfq" -CONFIG_PADATA=y -CONFIG_ASN1=m -CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y -CONFIG_FREEZER=y - -# -# System Type -# -CONFIG_MMU=y -CONFIG_ARCH_MULTIPLATFORM=y -# CONFIG_ARCH_REALVIEW is not set -# CONFIG_ARCH_VERSATILE is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_GEMINI is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_EP93XX is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_NETX is not set -# CONFIG_ARCH_IOP13XX is not set -# CONFIG_ARCH_IOP32X is not set -# CONFIG_ARCH_IOP33X is not set -# CONFIG_ARCH_IXP4XX is not set -# CONFIG_ARCH_DOVE is not set -# CONFIG_ARCH_MV78XX0 is not set -# CONFIG_ARCH_ORION5X is not set -# CONFIG_ARCH_MMP is not set -# CONFIG_ARCH_KS8695 is not set -# CONFIG_ARCH_W90X900 is not set -# CONFIG_ARCH_LPC32XX is not set -# CONFIG_ARCH_PXA is not set -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_S3C24XX is not set -# CONFIG_ARCH_S3C64XX is not set -# CONFIG_ARCH_DAVINCI is not set -# CONFIG_ARCH_OMAP1 is not set - -# -# Multiple platform selection -# - -# -# CPU Core family selection -# -# CONFIG_ARCH_MULTI_V6 is not set -CONFIG_ARCH_MULTI_V7=y -CONFIG_ARCH_MULTI_V6_V7=y -# CONFIG_ARCH_MULTI_CPU_AUTO is not set -# CONFIG_ARCH_VIRT is not set -# CONFIG_ARCH_MVEBU is not set -# CONFIG_ARCH_ALPINE is not set -# CONFIG_ARCH_AT91 is not set -# CONFIG_ARCH_BCM is not set -# CONFIG_ARCH_BERLIN is not set -# CONFIG_ARCH_DIGICOLOR is not set -# CONFIG_ARCH_HIGHBANK is not set -# CONFIG_ARCH_HISI is not set -# CONFIG_ARCH_KEYSTONE is not set -# CONFIG_ARCH_MESON is not set -CONFIG_ARCH_MXC=y -CONFIG_HAVE_IMX_ANATOP=y -CONFIG_HAVE_IMX_GPC=y -CONFIG_HAVE_IMX_MMDC=y -CONFIG_HAVE_IMX_SRC=y - -# -# Device tree only -# - -# -# Cortex-A platforms -# -# CONFIG_SOC_IMX50 is not set -# CONFIG_SOC_IMX51 is not set -# CONFIG_SOC_IMX53 is not set -CONFIG_SOC_IMX6=y -CONFIG_SOC_IMX6Q=y -# CONFIG_SOC_IMX6SL is not set -# CONFIG_SOC_IMX6SX is not set -# CONFIG_SOC_IMX6UL is not set -# CONFIG_SOC_IMX7D is not set -# CONFIG_SOC_LS1021A is not set - -# -# Cortex-A/Cortex-M asymmetric multiprocessing platforms -# -# CONFIG_SOC_VF610 is not set -# CONFIG_ARCH_MEDIATEK is not set - -# -# TI OMAP/AM/DM/DRA Family -# -# CONFIG_ARCH_OMAP3 is not set -# CONFIG_ARCH_OMAP4 is not set -# CONFIG_SOC_OMAP5 is not set -# CONFIG_SOC_AM33XX is not set -# CONFIG_SOC_AM43XX is not set -# CONFIG_SOC_DRA7XX is not set -# CONFIG_ARCH_QCOM is not set -# CONFIG_ARCH_ROCKCHIP is not set -# CONFIG_ARCH_SOCFPGA is not set -# CONFIG_PLAT_SPEAR is not set -# CONFIG_ARCH_STI is not set -# CONFIG_ARCH_S5PV210 is not set -# CONFIG_ARCH_EXYNOS is not set -# CONFIG_ARCH_SHMOBILE_MULTI is not set -# CONFIG_ARCH_SUNXI is not set -# CONFIG_ARCH_SIRF is not set -# CONFIG_ARCH_TEGRA is not set -# CONFIG_ARCH_UNIPHIER is not set -# CONFIG_ARCH_U8500 is not set -# CONFIG_ARCH_VEXPRESS is not set -# CONFIG_ARCH_WM8850 is not set -# CONFIG_ARCH_ZX is not set -# CONFIG_ARCH_ZYNQ is not set - -# -# Processor Type -# -CONFIG_CPU_V7=y -CONFIG_CPU_32v6K=y -CONFIG_CPU_32v7=y -CONFIG_CPU_ABRT_EV7=y -CONFIG_CPU_PABRT_V7=y -CONFIG_CPU_CACHE_V7=y -CONFIG_CPU_CACHE_VIPT=y -CONFIG_CPU_COPY_V6=y -CONFIG_CPU_TLB_V7=y -CONFIG_CPU_HAS_ASID=y -CONFIG_CPU_CP15=y -CONFIG_CPU_CP15_MMU=y - -# -# Processor Features -# -# CONFIG_ARM_LPAE is not set -# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set -CONFIG_ARM_THUMB=y -CONFIG_ARM_THUMBEE=y -CONFIG_ARM_VIRT_EXT=y -CONFIG_SWP_EMULATE=y -# CONFIG_CPU_ICACHE_DISABLE is not set -# CONFIG_CPU_BPREDICT_DISABLE is not set -CONFIG_KUSER_HELPERS=y -CONFIG_VDSO=y -CONFIG_OUTER_CACHE=y -CONFIG_OUTER_CACHE_SYNC=y -CONFIG_MIGHT_HAVE_CACHE_L2X0=y -CONFIG_CACHE_L2X0=y -# CONFIG_PL310_ERRATA_588369 is not set -# CONFIG_PL310_ERRATA_727915 is not set -# CONFIG_PL310_ERRATA_753970 is not set -CONFIG_PL310_ERRATA_769419=y -CONFIG_ARM_L1_CACHE_SHIFT_6=y -CONFIG_ARM_L1_CACHE_SHIFT=6 -CONFIG_ARM_DMA_MEM_BUFFERABLE=y -CONFIG_ARM_HEAVY_MB=y -# CONFIG_ARM_KERNMEM_PERMS is not set -CONFIG_MULTI_IRQ_HANDLER=y -# CONFIG_ARM_ERRATA_430973 is not set -# CONFIG_ARM_ERRATA_643719 is not set -CONFIG_ARM_ERRATA_720789=y -CONFIG_ARM_ERRATA_754322=y -# CONFIG_ARM_ERRATA_754327 is not set -CONFIG_ARM_ERRATA_764369=y -CONFIG_ARM_ERRATA_775420=y -# CONFIG_ARM_ERRATA_798181 is not set -# CONFIG_ARM_ERRATA_773022 is not set - -# -# Bus support -# -CONFIG_PCI=y -CONFIG_PCI_DOMAINS=y -CONFIG_PCI_DOMAINS_GENERIC=y -CONFIG_PCI_SYSCALL=y -CONFIG_PCI_MSI=y -CONFIG_PCI_REALLOC_ENABLE_AUTO=y -CONFIG_PCI_STUB=y -CONFIG_PCI_ATS=y -CONFIG_PCI_IOV=y -CONFIG_PCI_PRI=y -CONFIG_PCI_PASID=y - -# -# PCI host controller drivers -# -CONFIG_PCIE_DW=y -CONFIG_PCI_IMX6=y -# CONFIG_PCI_HOST_GENERIC is not set -# CONFIG_PCI_LAYERSCAPE is not set -# CONFIG_PCIE_IPROC is not set -# CONFIG_PCIE_ALTERA is not set -CONFIG_PCIEPORTBUS=y -CONFIG_PCIEAER=y -CONFIG_PCIE_ECRC=y -# CONFIG_PCIEAER_INJECT is not set -CONFIG_PCIEASPM=y -# CONFIG_PCIEASPM_DEBUG is not set -CONFIG_PCIEASPM_DEFAULT=y -# CONFIG_PCIEASPM_POWERSAVE is not set -# CONFIG_PCIEASPM_PERFORMANCE is not set -CONFIG_PCIE_PME=y -# CONFIG_PCCARD is not set - -# -# Kernel Features -# -CONFIG_HAVE_SMP=y -CONFIG_SMP=y -CONFIG_SMP_ON_UP=y -CONFIG_ARM_CPU_TOPOLOGY=y -CONFIG_SCHED_MC=y -# CONFIG_SCHED_SMT is not set -CONFIG_HAVE_ARM_SCU=y -# CONFIG_HAVE_ARM_ARCH_TIMER is not set -CONFIG_HAVE_ARM_TWD=y -# CONFIG_MCPM is not set -# CONFIG_BIG_LITTLE is not set -# CONFIG_VMSPLIT_3G is not set -# CONFIG_VMSPLIT_3G_OPT is not set -CONFIG_VMSPLIT_2G=y -# CONFIG_VMSPLIT_1G is not set -CONFIG_PAGE_OFFSET=0x80000000 -CONFIG_NR_CPUS=4 -CONFIG_HOTPLUG_CPU=y -# CONFIG_ARM_PSCI is not set -CONFIG_ARCH_NR_GPIO=0 -CONFIG_PREEMPT=y -CONFIG_PREEMPT_RT_BASE=y -CONFIG_HAVE_PREEMPT_LAZY=y -CONFIG_PREEMPT_LAZY=y -# CONFIG_PREEMPT_NONE is not set -# CONFIG_PREEMPT_VOLUNTARY is not set -# CONFIG_PREEMPT__LL is not set -# CONFIG_PREEMPT_RTB is not set -CONFIG_PREEMPT_RT_FULL=y -CONFIG_PREEMPT_COUNT=y -CONFIG_HZ_FIXED=0 -# CONFIG_HZ_100 is not set -# CONFIG_HZ_200 is not set -# CONFIG_HZ_250 is not set -# CONFIG_HZ_300 is not set -CONFIG_HZ_500=y -# CONFIG_HZ_1000 is not set -CONFIG_HZ=500 -CONFIG_SCHED_HRTICK=y -# CONFIG_THUMB2_KERNEL is not set -CONFIG_AEABI=y -# CONFIG_OABI_COMPAT is not set -# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set -# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set -CONFIG_HAVE_ARCH_PFN_VALID=y -CONFIG_HIGHMEM=y -# CONFIG_HIGHPTE is not set -# CONFIG_CPU_SW_DOMAIN_PAN is not set -CONFIG_HW_PERF_EVENTS=y -CONFIG_ARCH_WANT_GENERAL_HUGETLB=y -# CONFIG_ARM_MODULE_PLTS is not set -CONFIG_FLATMEM=y -CONFIG_FLAT_NODE_MEM_MAP=y -CONFIG_HAVE_MEMBLOCK=y -CONFIG_NO_BOOTMEM=y -CONFIG_MEMORY_ISOLATION=y -# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set -CONFIG_SPLIT_PTLOCK_CPUS=4 -CONFIG_COMPACTION=y -CONFIG_MIGRATION=y -# CONFIG_PHYS_ADDR_T_64BIT is not set -CONFIG_ZONE_DMA_FLAG=0 -CONFIG_BOUNCE=y -# CONFIG_KSM is not set -CONFIG_DEFAULT_MMAP_MIN_ADDR=8192 -# CONFIG_CLEANCACHE is not set -# CONFIG_FRONTSWAP is not set -CONFIG_CMA=y -# CONFIG_CMA_DEBUGFS is not set -CONFIG_CMA_AREAS=7 -# CONFIG_ZPOOL is not set -# CONFIG_ZBUD is not set -# CONFIG_ZSMALLOC is not set -# CONFIG_IDLE_PAGE_TRACKING is not set -CONFIG_FRAME_VECTOR=y -CONFIG_FORCE_MAX_ZONEORDER=14 -CONFIG_ALIGNMENT_TRAP=y -# CONFIG_UACCESS_WITH_MEMCPY is not set -# CONFIG_SECCOMP is not set -CONFIG_SWIOTLB=y -CONFIG_IOMMU_HELPER=y -# CONFIG_XEN is not set - -# -# Boot options -# -CONFIG_USE_OF=y -CONFIG_ATAGS=y -# CONFIG_DEPRECATED_PARAM_STRUCT is not set -CONFIG_ZBOOT_ROM_TEXT=0 -CONFIG_ZBOOT_ROM_BSS=0 -# CONFIG_ARM_APPENDED_DTB is not set -CONFIG_CMDLINE="root=/dev/ram0 rdinit=/init noram usbcore.autosuspend=-1 coherent_pool=2M pci=nomsi" -CONFIG_CMDLINE_FROM_BOOTLOADER=y -# CONFIG_CMDLINE_EXTEND is not set -# CONFIG_CMDLINE_FORCE is not set -# CONFIG_CRASH_DUMP is not set -CONFIG_AUTO_ZRELADDR=y - -# -# CPU Power Management -# - -# -# CPU Frequency scaling -# -CONFIG_CPU_FREQ=y -CONFIG_CPU_FREQ_GOV_COMMON=y -CONFIG_CPU_FREQ_STAT=y -CONFIG_CPU_FREQ_STAT_DETAILS=y -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_CONSERVATIVE is not set -CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y -CONFIG_CPU_FREQ_GOV_USERSPACE=y -CONFIG_CPU_FREQ_GOV_ONDEMAND=y -CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y - -# -# CPU frequency scaling drivers -# -# CONFIG_CPUFREQ_DT is not set -# CONFIG_ARM_BIG_LITTLE_CPUFREQ is not set -CONFIG_ARM_IMX6Q_CPUFREQ=y -# CONFIG_ARM_KIRKWOOD_CPUFREQ is not set -# CONFIG_QORIQ_CPUFREQ is not set - -# -# CPU Idle -# -CONFIG_CPU_IDLE=y -# CONFIG_CPU_IDLE_GOV_LADDER is not set -CONFIG_CPU_IDLE_GOV_MENU=y -CONFIG_DT_IDLE_STATES=y - -# -# ARM CPU Idle Drivers -# -CONFIG_ARM_CPUIDLE=y -# CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set - -# -# Floating point emulation -# - -# -# At least one emulation must be selected -# -CONFIG_VFP=y -CONFIG_VFPv3=y -CONFIG_NEON=y -CONFIG_KERNEL_MODE_NEON=y - -# -# Userspace binary formats -# -CONFIG_BINFMT_ELF=y -CONFIG_BINFMT_SCRIPT=y -# CONFIG_HAVE_AOUT is not set -CONFIG_BINFMT_MISC=m -# CONFIG_COREDUMP is not set - -# -# Power management options -# -# CONFIG_SUSPEND is not set -# CONFIG_HIBERNATION is not set -CONFIG_PM=y -# CONFIG_PM_DEBUG is not set -CONFIG_APM_EMULATION=m -CONFIG_PM_OPP=y -CONFIG_PM_CLK=y -CONFIG_PM_GENERIC_DOMAINS=y -# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set -CONFIG_PM_GENERIC_DOMAINS_OF=y -CONFIG_CPU_PM=y -CONFIG_ARCH_SUSPEND_POSSIBLE=y -CONFIG_ARM_CPU_SUSPEND=y -CONFIG_ARCH_HIBERNATION_POSSIBLE=y -CONFIG_NET=y -CONFIG_NET_INGRESS=y - -# -# Networking options -# -CONFIG_PACKET=y -CONFIG_PACKET_DIAG=y -CONFIG_UNIX=y -CONFIG_UNIX_DIAG=y -CONFIG_XFRM=y -CONFIG_XFRM_ALGO=y -CONFIG_XFRM_USER=y -CONFIG_XFRM_SUB_POLICY=y -CONFIG_XFRM_MIGRATE=y -CONFIG_XFRM_STATISTICS=y -CONFIG_XFRM_IPCOMP=m -CONFIG_NET_KEY=y -CONFIG_NET_KEY_MIGRATE=y -CONFIG_INET=y -CONFIG_IP_MULTICAST=y -CONFIG_IP_ADVANCED_ROUTER=y -# CONFIG_IP_FIB_TRIE_STATS is not set -CONFIG_IP_MULTIPLE_TABLES=y -# CONFIG_IP_ROUTE_MULTIPATH is not set -# CONFIG_IP_ROUTE_VERBOSE is not set -CONFIG_IP_ROUTE_CLASSID=y -CONFIG_IP_PNP=y -CONFIG_IP_PNP_DHCP=y -CONFIG_IP_PNP_BOOTP=y -# CONFIG_IP_PNP_RARP is not set -CONFIG_NET_IPIP=m -CONFIG_NET_IPGRE_DEMUX=m -CONFIG_NET_IP_TUNNEL=m -CONFIG_NET_IPGRE=m -CONFIG_NET_IPGRE_BROADCAST=y -CONFIG_IP_MROUTE=y -# CONFIG_IP_MROUTE_MULTIPLE_TABLES is not set -CONFIG_IP_PIMSM_V1=y -CONFIG_IP_PIMSM_V2=y -CONFIG_SYN_COOKIES=y -CONFIG_NET_IPVTI=m -CONFIG_NET_UDP_TUNNEL=m -# CONFIG_NET_FOU is not set -# CONFIG_NET_FOU_IP_TUNNELS is not set -CONFIG_INET_AH=m -CONFIG_INET_ESP=m -CONFIG_INET_IPCOMP=m -CONFIG_INET_XFRM_TUNNEL=m -CONFIG_INET_TUNNEL=m -CONFIG_INET_XFRM_MODE_TRANSPORT=m -CONFIG_INET_XFRM_MODE_TUNNEL=m -CONFIG_INET_XFRM_MODE_BEET=m -CONFIG_INET_LRO=m -CONFIG_INET_DIAG=y -CONFIG_INET_TCP_DIAG=y -CONFIG_INET_UDP_DIAG=m -CONFIG_TCP_CONG_ADVANCED=y -# CONFIG_TCP_CONG_BIC is not set -CONFIG_TCP_CONG_CUBIC=y -# CONFIG_TCP_CONG_WESTWOOD is not set -CONFIG_TCP_CONG_HTCP=m -CONFIG_TCP_CONG_HSTCP=m -# CONFIG_TCP_CONG_HYBLA is not set -CONFIG_TCP_CONG_VEGAS=m -CONFIG_TCP_CONG_SCALABLE=m -# CONFIG_TCP_CONG_LP is not set -CONFIG_TCP_CONG_VENO=m -CONFIG_TCP_CONG_YEAH=m -CONFIG_TCP_CONG_ILLINOIS=m -# CONFIG_TCP_CONG_DCTCP is not set -CONFIG_TCP_CONG_CDG=m -CONFIG_DEFAULT_CUBIC=y -# CONFIG_DEFAULT_RENO is not set -CONFIG_DEFAULT_TCP_CONG="cubic" -# CONFIG_TCP_MD5SIG is not set -CONFIG_IPV6=m -CONFIG_IPV6_ROUTER_PREF=y -CONFIG_IPV6_ROUTE_INFO=y -CONFIG_IPV6_OPTIMISTIC_DAD=y -CONFIG_INET6_AH=m -CONFIG_INET6_ESP=m -CONFIG_INET6_IPCOMP=m -CONFIG_IPV6_MIP6=m -CONFIG_IPV6_ILA=m -CONFIG_INET6_XFRM_TUNNEL=m -CONFIG_INET6_TUNNEL=m -CONFIG_INET6_XFRM_MODE_TRANSPORT=m -CONFIG_INET6_XFRM_MODE_TUNNEL=m -CONFIG_INET6_XFRM_MODE_BEET=m -CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m -CONFIG_IPV6_VTI=m -CONFIG_IPV6_SIT=m -CONFIG_IPV6_SIT_6RD=y -CONFIG_IPV6_NDISC_NODETYPE=y -CONFIG_IPV6_TUNNEL=m -CONFIG_IPV6_GRE=m -CONFIG_IPV6_MULTIPLE_TABLES=y -CONFIG_IPV6_SUBTREES=y -CONFIG_IPV6_MROUTE=y -CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y -CONFIG_IPV6_PIMSM_V2=y -# CONFIG_NETWORK_SECMARK is not set -CONFIG_NET_PTP_CLASSIFY=y -# CONFIG_NETWORK_PHY_TIMESTAMPING is not set -CONFIG_NETFILTER=y -# CONFIG_NETFILTER_DEBUG is not set -CONFIG_NETFILTER_ADVANCED=y -CONFIG_BRIDGE_NETFILTER=m - -# -# Core Netfilter Configuration -# -CONFIG_NETFILTER_INGRESS=y -CONFIG_NETFILTER_NETLINK=m -CONFIG_NETFILTER_NETLINK_ACCT=m -CONFIG_NETFILTER_NETLINK_QUEUE=m -CONFIG_NETFILTER_NETLINK_LOG=m -CONFIG_NF_CONNTRACK=m -CONFIG_NF_LOG_COMMON=m -CONFIG_NF_CONNTRACK_MARK=y -CONFIG_NF_CONNTRACK_ZONES=y -CONFIG_NF_CONNTRACK_PROCFS=y -CONFIG_NF_CONNTRACK_EVENTS=y -CONFIG_NF_CONNTRACK_TIMEOUT=y -CONFIG_NF_CONNTRACK_TIMESTAMP=y -CONFIG_NF_CONNTRACK_LABELS=y -CONFIG_NF_CT_PROTO_DCCP=m -CONFIG_NF_CT_PROTO_GRE=m -CONFIG_NF_CT_PROTO_SCTP=m -CONFIG_NF_CT_PROTO_UDPLITE=m -CONFIG_NF_CONNTRACK_AMANDA=m -CONFIG_NF_CONNTRACK_FTP=m -CONFIG_NF_CONNTRACK_H323=m -CONFIG_NF_CONNTRACK_IRC=m -CONFIG_NF_CONNTRACK_BROADCAST=m -CONFIG_NF_CONNTRACK_NETBIOS_NS=m -CONFIG_NF_CONNTRACK_SNMP=m -CONFIG_NF_CONNTRACK_PPTP=m -CONFIG_NF_CONNTRACK_SANE=m -CONFIG_NF_CONNTRACK_SIP=m -CONFIG_NF_CONNTRACK_TFTP=m -CONFIG_NF_CT_NETLINK=m -CONFIG_NF_CT_NETLINK_TIMEOUT=m -# CONFIG_NETFILTER_NETLINK_GLUE_CT is not set -CONFIG_NF_NAT=m -CONFIG_NF_NAT_NEEDED=y -CONFIG_NF_NAT_PROTO_DCCP=m -CONFIG_NF_NAT_PROTO_UDPLITE=m -CONFIG_NF_NAT_PROTO_SCTP=m -CONFIG_NF_NAT_AMANDA=m -CONFIG_NF_NAT_FTP=m -CONFIG_NF_NAT_IRC=m -CONFIG_NF_NAT_SIP=m -CONFIG_NF_NAT_TFTP=m -CONFIG_NF_NAT_REDIRECT=m -CONFIG_NETFILTER_SYNPROXY=m -CONFIG_NF_TABLES=m -CONFIG_NF_TABLES_INET=m -CONFIG_NF_TABLES_NETDEV=m -CONFIG_NFT_EXTHDR=m -CONFIG_NFT_META=m -CONFIG_NFT_CT=m -CONFIG_NFT_RBTREE=m -CONFIG_NFT_HASH=m -CONFIG_NFT_COUNTER=m -CONFIG_NFT_LOG=m -CONFIG_NFT_LIMIT=m -CONFIG_NFT_MASQ=m -CONFIG_NFT_REDIR=m -CONFIG_NFT_NAT=m -CONFIG_NFT_QUEUE=m -CONFIG_NFT_REJECT=m -CONFIG_NFT_REJECT_INET=m -CONFIG_NFT_COMPAT=m -CONFIG_NETFILTER_XTABLES=m - -# -# Xtables combined modules -# -CONFIG_NETFILTER_XT_MARK=m -CONFIG_NETFILTER_XT_CONNMARK=m -CONFIG_NETFILTER_XT_SET=m - -# -# Xtables targets -# -CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m -CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m -CONFIG_NETFILTER_XT_TARGET_CONNMARK=m -CONFIG_NETFILTER_XT_TARGET_CT=m -CONFIG_NETFILTER_XT_TARGET_DSCP=m -CONFIG_NETFILTER_XT_TARGET_HL=m -CONFIG_NETFILTER_XT_TARGET_HMARK=m -CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m -CONFIG_NETFILTER_XT_TARGET_LED=m -CONFIG_NETFILTER_XT_TARGET_LOG=m -CONFIG_NETFILTER_XT_TARGET_MARK=m -CONFIG_NETFILTER_XT_NAT=m -CONFIG_NETFILTER_XT_TARGET_NETMAP=m -CONFIG_NETFILTER_XT_TARGET_NFLOG=m -CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m -CONFIG_NETFILTER_XT_TARGET_NOTRACK=m -CONFIG_NETFILTER_XT_TARGET_RATEEST=m -CONFIG_NETFILTER_XT_TARGET_REDIRECT=m -CONFIG_NETFILTER_XT_TARGET_TEE=m -CONFIG_NETFILTER_XT_TARGET_TPROXY=m -CONFIG_NETFILTER_XT_TARGET_TRACE=m -CONFIG_NETFILTER_XT_TARGET_TCPMSS=m -CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m - -# -# Xtables matches -# -CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m -CONFIG_NETFILTER_XT_MATCH_BPF=m -CONFIG_NETFILTER_XT_MATCH_CGROUP=m -CONFIG_NETFILTER_XT_MATCH_CLUSTER=m -CONFIG_NETFILTER_XT_MATCH_COMMENT=m -CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m -CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m -CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m -CONFIG_NETFILTER_XT_MATCH_CONNMARK=m -CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m -CONFIG_NETFILTER_XT_MATCH_CPU=m -CONFIG_NETFILTER_XT_MATCH_DCCP=m -CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m -CONFIG_NETFILTER_XT_MATCH_DSCP=m -CONFIG_NETFILTER_XT_MATCH_ECN=m -CONFIG_NETFILTER_XT_MATCH_ESP=m -CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m -CONFIG_NETFILTER_XT_MATCH_HELPER=m -CONFIG_NETFILTER_XT_MATCH_HL=m -CONFIG_NETFILTER_XT_MATCH_IPCOMP=m -CONFIG_NETFILTER_XT_MATCH_IPRANGE=m -CONFIG_NETFILTER_XT_MATCH_IPVS=m -CONFIG_NETFILTER_XT_MATCH_L2TP=m -CONFIG_NETFILTER_XT_MATCH_LENGTH=m -CONFIG_NETFILTER_XT_MATCH_LIMIT=m -CONFIG_NETFILTER_XT_MATCH_MAC=m -CONFIG_NETFILTER_XT_MATCH_MARK=m -CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m -CONFIG_NETFILTER_XT_MATCH_NFACCT=m -CONFIG_NETFILTER_XT_MATCH_OSF=m -CONFIG_NETFILTER_XT_MATCH_OWNER=m -CONFIG_NETFILTER_XT_MATCH_POLICY=m -CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m -CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m -CONFIG_NETFILTER_XT_MATCH_QUOTA=m -CONFIG_NETFILTER_XT_MATCH_RATEEST=m -CONFIG_NETFILTER_XT_MATCH_REALM=m -CONFIG_NETFILTER_XT_MATCH_RECENT=m -CONFIG_NETFILTER_XT_MATCH_SCTP=m -CONFIG_NETFILTER_XT_MATCH_SOCKET=m -CONFIG_NETFILTER_XT_MATCH_STATE=m -CONFIG_NETFILTER_XT_MATCH_STATISTIC=m -CONFIG_NETFILTER_XT_MATCH_STRING=m -CONFIG_NETFILTER_XT_MATCH_TCPMSS=m -CONFIG_NETFILTER_XT_MATCH_TIME=m -CONFIG_NETFILTER_XT_MATCH_U32=m -CONFIG_IP_SET=m -CONFIG_IP_SET_MAX=256 -CONFIG_IP_SET_BITMAP_IP=m -CONFIG_IP_SET_BITMAP_IPMAC=m -CONFIG_IP_SET_BITMAP_PORT=m -CONFIG_IP_SET_HASH_IP=m -CONFIG_IP_SET_HASH_IPMARK=m -CONFIG_IP_SET_HASH_IPPORT=m -CONFIG_IP_SET_HASH_IPPORTIP=m -CONFIG_IP_SET_HASH_IPPORTNET=m -CONFIG_IP_SET_HASH_MAC=m -CONFIG_IP_SET_HASH_NETPORTNET=m -CONFIG_IP_SET_HASH_NET=m -CONFIG_IP_SET_HASH_NETNET=m -CONFIG_IP_SET_HASH_NETPORT=m -CONFIG_IP_SET_HASH_NETIFACE=m -CONFIG_IP_SET_LIST_SET=m -CONFIG_IP_VS=m -CONFIG_IP_VS_IPV6=y -# CONFIG_IP_VS_DEBUG is not set -CONFIG_IP_VS_TAB_BITS=12 - -# -# IPVS transport protocol load balancing support -# -CONFIG_IP_VS_PROTO_TCP=y -CONFIG_IP_VS_PROTO_UDP=y -CONFIG_IP_VS_PROTO_AH_ESP=y -CONFIG_IP_VS_PROTO_ESP=y -CONFIG_IP_VS_PROTO_AH=y -CONFIG_IP_VS_PROTO_SCTP=y - -# -# IPVS scheduler -# -CONFIG_IP_VS_RR=m -CONFIG_IP_VS_WRR=m -CONFIG_IP_VS_LC=m -CONFIG_IP_VS_WLC=m -CONFIG_IP_VS_FO=m -CONFIG_IP_VS_OVF=m -CONFIG_IP_VS_LBLC=m -CONFIG_IP_VS_LBLCR=m -CONFIG_IP_VS_DH=m -CONFIG_IP_VS_SH=m -CONFIG_IP_VS_SED=m -CONFIG_IP_VS_NQ=m - -# -# IPVS SH scheduler -# -CONFIG_IP_VS_SH_TAB_BITS=8 - -# -# IPVS application helper -# -CONFIG_IP_VS_FTP=m -CONFIG_IP_VS_NFCT=y -CONFIG_IP_VS_PE_SIP=m - -# -# IP: Netfilter Configuration -# -CONFIG_NF_DEFRAG_IPV4=m -CONFIG_NF_CONNTRACK_IPV4=m -CONFIG_NF_CONNTRACK_PROC_COMPAT=y -CONFIG_NF_TABLES_IPV4=m -CONFIG_NFT_CHAIN_ROUTE_IPV4=m -CONFIG_NFT_REJECT_IPV4=m -CONFIG_NFT_DUP_IPV4=m -CONFIG_NF_TABLES_ARP=m -CONFIG_NF_DUP_IPV4=m -CONFIG_NF_LOG_ARP=m -CONFIG_NF_LOG_IPV4=m -CONFIG_NF_REJECT_IPV4=m -CONFIG_NF_NAT_IPV4=m -CONFIG_NFT_CHAIN_NAT_IPV4=m -CONFIG_NF_NAT_MASQUERADE_IPV4=m -CONFIG_NFT_MASQ_IPV4=m -CONFIG_NFT_REDIR_IPV4=m -CONFIG_NF_NAT_SNMP_BASIC=m -CONFIG_NF_NAT_PROTO_GRE=m -CONFIG_NF_NAT_PPTP=m -CONFIG_NF_NAT_H323=m -CONFIG_IP_NF_IPTABLES=m -CONFIG_IP_NF_MATCH_AH=m -CONFIG_IP_NF_MATCH_ECN=m -CONFIG_IP_NF_MATCH_RPFILTER=m -CONFIG_IP_NF_MATCH_TTL=m -CONFIG_IP_NF_FILTER=m -CONFIG_IP_NF_TARGET_REJECT=m -CONFIG_IP_NF_TARGET_SYNPROXY=m -CONFIG_IP_NF_NAT=m -CONFIG_IP_NF_TARGET_MASQUERADE=m -CONFIG_IP_NF_TARGET_NETMAP=m -CONFIG_IP_NF_TARGET_REDIRECT=m -CONFIG_IP_NF_MANGLE=m -CONFIG_IP_NF_TARGET_CLUSTERIP=m -CONFIG_IP_NF_TARGET_ECN=m -CONFIG_IP_NF_TARGET_TTL=m -CONFIG_IP_NF_RAW=m -CONFIG_IP_NF_ARPTABLES=m -CONFIG_IP_NF_ARPFILTER=m -CONFIG_IP_NF_ARP_MANGLE=m - -# -# IPv6: Netfilter Configuration -# -CONFIG_NF_DEFRAG_IPV6=m -CONFIG_NF_CONNTRACK_IPV6=m -CONFIG_NF_TABLES_IPV6=m -CONFIG_NFT_CHAIN_ROUTE_IPV6=m -CONFIG_NFT_REJECT_IPV6=m -CONFIG_NFT_DUP_IPV6=m -CONFIG_NF_DUP_IPV6=m -CONFIG_NF_REJECT_IPV6=m -CONFIG_NF_LOG_IPV6=m -CONFIG_NF_NAT_IPV6=m -CONFIG_NFT_CHAIN_NAT_IPV6=m -CONFIG_NF_NAT_MASQUERADE_IPV6=m -CONFIG_NFT_MASQ_IPV6=m -CONFIG_NFT_REDIR_IPV6=m -CONFIG_IP6_NF_IPTABLES=m -CONFIG_IP6_NF_MATCH_AH=m -CONFIG_IP6_NF_MATCH_EUI64=m -CONFIG_IP6_NF_MATCH_FRAG=m -CONFIG_IP6_NF_MATCH_OPTS=m -CONFIG_IP6_NF_MATCH_HL=m -CONFIG_IP6_NF_MATCH_IPV6HEADER=m -CONFIG_IP6_NF_MATCH_MH=m -CONFIG_IP6_NF_MATCH_RPFILTER=m -CONFIG_IP6_NF_MATCH_RT=m -CONFIG_IP6_NF_TARGET_HL=m -CONFIG_IP6_NF_FILTER=m -CONFIG_IP6_NF_TARGET_REJECT=m -CONFIG_IP6_NF_TARGET_SYNPROXY=m -CONFIG_IP6_NF_MANGLE=m -CONFIG_IP6_NF_RAW=m -CONFIG_IP6_NF_NAT=m -CONFIG_IP6_NF_TARGET_MASQUERADE=m -CONFIG_IP6_NF_TARGET_NPT=m -CONFIG_NF_TABLES_BRIDGE=m -CONFIG_NFT_BRIDGE_META=m -CONFIG_NFT_BRIDGE_REJECT=m -CONFIG_NF_LOG_BRIDGE=m -CONFIG_BRIDGE_NF_EBTABLES=m -CONFIG_BRIDGE_EBT_BROUTE=m -CONFIG_BRIDGE_EBT_T_FILTER=m -CONFIG_BRIDGE_EBT_T_NAT=m -CONFIG_BRIDGE_EBT_802_3=m -CONFIG_BRIDGE_EBT_AMONG=m -CONFIG_BRIDGE_EBT_ARP=m -CONFIG_BRIDGE_EBT_IP=m -CONFIG_BRIDGE_EBT_IP6=m -CONFIG_BRIDGE_EBT_LIMIT=m -CONFIG_BRIDGE_EBT_MARK=m -CONFIG_BRIDGE_EBT_PKTTYPE=m -CONFIG_BRIDGE_EBT_STP=m -CONFIG_BRIDGE_EBT_VLAN=m -CONFIG_BRIDGE_EBT_ARPREPLY=m -CONFIG_BRIDGE_EBT_DNAT=m -CONFIG_BRIDGE_EBT_MARK_T=m -CONFIG_BRIDGE_EBT_REDIRECT=m -CONFIG_BRIDGE_EBT_SNAT=m -CONFIG_BRIDGE_EBT_LOG=m -CONFIG_BRIDGE_EBT_NFLOG=m -CONFIG_IP_DCCP=m -CONFIG_INET_DCCP_DIAG=m - -# -# DCCP CCIDs Configuration -# -# CONFIG_IP_DCCP_CCID2_DEBUG is not set -CONFIG_IP_DCCP_CCID3=y -# CONFIG_IP_DCCP_CCID3_DEBUG is not set -CONFIG_IP_DCCP_TFRC_LIB=y -CONFIG_IP_SCTP=m -# CONFIG_SCTP_DBG_OBJCNT is not set -# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not set -# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1 is not set -CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE=y -# CONFIG_SCTP_COOKIE_HMAC_MD5 is not set -# CONFIG_SCTP_COOKIE_HMAC_SHA1 is not set -CONFIG_RDS=m -CONFIG_RDS_TCP=m -# CONFIG_RDS_DEBUG is not set -CONFIG_TIPC=m -CONFIG_TIPC_MEDIA_UDP=y -# CONFIG_ATM is not set -CONFIG_L2TP=m -# CONFIG_L2TP_DEBUGFS is not set -CONFIG_L2TP_V3=y -CONFIG_L2TP_IP=m -CONFIG_L2TP_ETH=m -CONFIG_STP=m -CONFIG_GARP=m -CONFIG_MRP=m -CONFIG_BRIDGE=m -CONFIG_BRIDGE_IGMP_SNOOPING=y -CONFIG_BRIDGE_VLAN_FILTERING=y -CONFIG_HAVE_NET_DSA=y -CONFIG_NET_DSA=y -CONFIG_NET_DSA_HWMON=y -CONFIG_NET_DSA_TAG_EDSA=y -CONFIG_VLAN_8021Q=m -CONFIG_VLAN_8021Q_GVRP=y -CONFIG_VLAN_8021Q_MVRP=y -# CONFIG_DECNET is not set -CONFIG_LLC=m -CONFIG_LLC2=m -# CONFIG_IPX is not set -CONFIG_ATALK=m -CONFIG_DEV_APPLETALK=m -CONFIG_IPDDP=m -CONFIG_IPDDP_ENCAP=y -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -CONFIG_PHONET=m -# CONFIG_6LOWPAN is not set -# CONFIG_IEEE802154 is not set -CONFIG_NET_SCHED=y - -# -# Queueing/Scheduling -# -CONFIG_NET_SCH_CBQ=y -CONFIG_NET_SCH_HTB=y -CONFIG_NET_SCH_HFSC=m -CONFIG_NET_SCH_PRIO=y -CONFIG_NET_SCH_MULTIQ=m -CONFIG_NET_SCH_RED=m -CONFIG_NET_SCH_SFB=m -CONFIG_NET_SCH_SFQ=y -CONFIG_NET_SCH_TEQL=m -CONFIG_NET_SCH_TBF=m -CONFIG_NET_SCH_GRED=m -CONFIG_NET_SCH_DSMARK=m -CONFIG_NET_SCH_NETEM=m -CONFIG_NET_SCH_DRR=m -CONFIG_NET_SCH_MQPRIO=m -CONFIG_NET_SCH_CHOKE=m -CONFIG_NET_SCH_QFQ=y -CONFIG_NET_SCH_CODEL=m -CONFIG_NET_SCH_FQ_CODEL=m -CONFIG_NET_SCH_FQ=m -CONFIG_NET_SCH_HHF=m -CONFIG_NET_SCH_PIE=m -CONFIG_NET_SCH_INGRESS=m -CONFIG_NET_SCH_PLUG=m - -# -# Classification -# -CONFIG_NET_CLS=y -CONFIG_NET_CLS_BASIC=m -CONFIG_NET_CLS_TCINDEX=m -CONFIG_NET_CLS_ROUTE4=m -CONFIG_NET_CLS_FW=m -CONFIG_NET_CLS_U32=m -CONFIG_CLS_U32_PERF=y -CONFIG_CLS_U32_MARK=y -CONFIG_NET_CLS_RSVP=m -CONFIG_NET_CLS_RSVP6=m -CONFIG_NET_CLS_FLOW=m -CONFIG_NET_CLS_CGROUP=m -CONFIG_NET_CLS_BPF=m -CONFIG_NET_CLS_FLOWER=m -CONFIG_NET_EMATCH=y -CONFIG_NET_EMATCH_STACK=32 -CONFIG_NET_EMATCH_CMP=m -CONFIG_NET_EMATCH_NBYTE=m -CONFIG_NET_EMATCH_U32=m -CONFIG_NET_EMATCH_META=m -CONFIG_NET_EMATCH_TEXT=m -CONFIG_NET_EMATCH_CANID=m -CONFIG_NET_EMATCH_IPSET=m -CONFIG_NET_CLS_ACT=y -CONFIG_NET_ACT_POLICE=m -CONFIG_NET_ACT_GACT=m -CONFIG_GACT_PROB=y -CONFIG_NET_ACT_MIRRED=m -CONFIG_NET_ACT_IPT=m -CONFIG_NET_ACT_NAT=m -CONFIG_NET_ACT_PEDIT=m -CONFIG_NET_ACT_SIMP=m -CONFIG_NET_ACT_SKBEDIT=m -CONFIG_NET_ACT_CSUM=m -CONFIG_NET_ACT_VLAN=m -CONFIG_NET_ACT_BPF=m -CONFIG_NET_ACT_CONNMARK=m -CONFIG_NET_CLS_IND=y -CONFIG_NET_SCH_FIFO=y -# CONFIG_DCB is not set -CONFIG_DNS_RESOLVER=y -# CONFIG_BATMAN_ADV is not set -CONFIG_OPENVSWITCH=m -CONFIG_OPENVSWITCH_GRE=m -CONFIG_OPENVSWITCH_VXLAN=m -CONFIG_VSOCKETS=m -CONFIG_NETLINK_MMAP=y -CONFIG_NETLINK_DIAG=m -CONFIG_MPLS=y -CONFIG_NET_MPLS_GSO=m -# CONFIG_MPLS_ROUTING is not set -# CONFIG_HSR is not set -CONFIG_NET_SWITCHDEV=y -CONFIG_NET_L3_MASTER_DEV=y -CONFIG_RPS=y -CONFIG_RFS_ACCEL=y -CONFIG_XPS=y -CONFIG_CGROUP_NET_PRIO=y -CONFIG_CGROUP_NET_CLASSID=y -CONFIG_NET_RX_BUSY_POLL=y -CONFIG_BQL=y -# CONFIG_BPF_JIT is not set -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=m -CONFIG_CAN_RAW=m -CONFIG_CAN_BCM=m -CONFIG_CAN_GW=m - -# -# CAN Device Drivers -# -# CONFIG_CAN_VCAN is not set -# CONFIG_CAN_SLCAN is not set -CONFIG_CAN_DEV=m -CONFIG_CAN_CALC_BITTIMING=y -# CONFIG_CAN_LEDS is not set -# CONFIG_CAN_TI_HECC is not set -CONFIG_CAN_FLEXCAN=m -# CONFIG_CAN_GRCAN is not set -# CONFIG_CAN_RCAR is not set -# CONFIG_CAN_SJA1000 is not set -# CONFIG_CAN_C_CAN is not set -# CONFIG_CAN_M_CAN is not set -# CONFIG_CAN_CC770 is not set - -# -# CAN SPI interfaces -# -# CONFIG_CAN_MCP251X is not set - -# -# CAN USB interfaces -# -CONFIG_CAN_EMS_USB=m -CONFIG_CAN_ESD_USB2=m -CONFIG_CAN_GS_USB=m -CONFIG_CAN_KVASER_USB=m -CONFIG_CAN_PEAK_USB=m -CONFIG_CAN_8DEV_USB=m -# CONFIG_CAN_SOFTING is not set -# CONFIG_CAN_DEBUG_DEVICES is not set -CONFIG_IRDA=m - -# -# IrDA protocols -# -CONFIG_IRLAN=m -CONFIG_IRNET=m -CONFIG_IRCOMM=m -CONFIG_IRDA_ULTRA=y - -# -# IrDA options -# -# CONFIG_IRDA_CACHE_LAST_LSAP is not set -CONFIG_IRDA_FAST_RR=y -# CONFIG_IRDA_DEBUG is not set - -# -# Infrared-port device drivers -# - -# -# SIR device drivers -# -CONFIG_IRTTY_SIR=m - -# -# Dongle support -# -CONFIG_DONGLE=y -CONFIG_ESI_DONGLE=m -CONFIG_ACTISYS_DONGLE=m -CONFIG_TEKRAM_DONGLE=m -CONFIG_TOIM3232_DONGLE=m -CONFIG_LITELINK_DONGLE=m -CONFIG_MA600_DONGLE=m -CONFIG_GIRBIL_DONGLE=m -CONFIG_MCP2120_DONGLE=m -CONFIG_OLD_BELKIN_DONGLE=m -CONFIG_ACT200L_DONGLE=m -CONFIG_KINGSUN_DONGLE=m -CONFIG_KSDAZZLE_DONGLE=m -CONFIG_KS959_DONGLE=m - -# -# FIR device drivers -# -CONFIG_USB_IRDA=m -CONFIG_SIGMATEL_FIR=m -CONFIG_VLSI_FIR=m -CONFIG_MCS_FIR=m -CONFIG_BT=y -CONFIG_BT_BREDR=y -CONFIG_BT_RFCOMM=m -CONFIG_BT_RFCOMM_TTY=y -CONFIG_BT_BNEP=m -CONFIG_BT_BNEP_MC_FILTER=y -CONFIG_BT_BNEP_PROTO_FILTER=y -CONFIG_BT_CMTP=m -CONFIG_BT_HIDP=y -CONFIG_BT_HS=y -CONFIG_BT_LE=y -# CONFIG_BT_DEBUGFS is not set - -# -# Bluetooth device drivers -# -CONFIG_BT_INTEL=y -CONFIG_BT_BCM=y -CONFIG_BT_RTL=m -CONFIG_BT_QCA=y -CONFIG_BT_HCIBTUSB=m -CONFIG_BT_HCIBTUSB_BCM=y -CONFIG_BT_HCIBTUSB_RTL=y -# CONFIG_BT_HCIBTSDIO is not set -CONFIG_BT_HCIUART=y -CONFIG_BT_HCIUART_H4=y -CONFIG_BT_HCIUART_BCSP=y -CONFIG_BT_HCIUART_ATH3K=y -CONFIG_BT_HCIUART_LL=y -CONFIG_BT_HCIUART_3WIRE=y -CONFIG_BT_HCIUART_INTEL=y -CONFIG_BT_HCIUART_BCM=y -CONFIG_BT_HCIUART_QCA=y -CONFIG_BT_HCIBCM203X=m -CONFIG_BT_HCIBPA10X=m -CONFIG_BT_HCIBFUSB=m -CONFIG_BT_HCIVHCI=m -CONFIG_BT_MRVL=m -CONFIG_BT_MRVL_SDIO=m -CONFIG_BT_ATH3K=m -CONFIG_BT_WILINK=m -CONFIG_AF_RXRPC=m -# CONFIG_AF_RXRPC_DEBUG is not set -# CONFIG_RXKAD is not set -CONFIG_FIB_RULES=y -CONFIG_WIRELESS=y -CONFIG_WIRELESS_EXT=y -CONFIG_WEXT_CORE=y -CONFIG_WEXT_PROC=y -CONFIG_WEXT_SPY=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=y -# CONFIG_CFG80211_REG_CELLULAR_HINTS is not set -# CONFIG_CFG80211_REG_RELAX_NO_IR is not set -# CONFIG_CFG80211_DEFAULT_PS is not set -# CONFIG_CFG80211_DEBUGFS is not set -CONFIG_CFG80211_INTERNAL_REGDB=y -# CONFIG_CFG80211_CRDA_SUPPORT is not set -CONFIG_CFG80211_WEXT=y -CONFIG_CFG80211_WEXT_EXPORT=y -CONFIG_LIB80211=m -CONFIG_LIB80211_CRYPT_WEP=m -CONFIG_LIB80211_CRYPT_CCMP=m -CONFIG_LIB80211_CRYPT_TKIP=m -# CONFIG_LIB80211_DEBUG is not set -CONFIG_MAC80211=m -CONFIG_MAC80211_HAS_RC=y -CONFIG_MAC80211_RC_MINSTREL=y -CONFIG_MAC80211_RC_MINSTREL_HT=y -CONFIG_MAC80211_RC_MINSTREL_VHT=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_MAC80211_STA_HASH_MAX_SIZE=0 -# CONFIG_WIMAX is not set -CONFIG_RFKILL=y -CONFIG_RFKILL_LEDS=y -CONFIG_RFKILL_INPUT=y -CONFIG_RFKILL_REGULATOR=y -CONFIG_RFKILL_GPIO=y -# CONFIG_NET_9P is not set -CONFIG_CAIF=m -# CONFIG_CAIF_DEBUG is not set -CONFIG_CAIF_NETDEV=m -CONFIG_CAIF_USB=m -CONFIG_CEPH_LIB=m -# CONFIG_CEPH_LIB_PRETTYDEBUG is not set -CONFIG_CEPH_LIB_USE_DNS_RESOLVER=y -CONFIG_NFC=m -# CONFIG_NFC_DIGITAL is not set -# CONFIG_NFC_NCI is not set -# CONFIG_NFC_HCI is not set - -# -# Near Field Communication (NFC) devices -# -# CONFIG_NFC_PN533 is not set -# CONFIG_NFC_SIM is not set -CONFIG_LWTUNNEL=y -CONFIG_HAVE_BPF_JIT=y - -# -# Device Drivers -# - -# -# Generic Driver Options -# -CONFIG_UEVENT_HELPER=y -CONFIG_UEVENT_HELPER_PATH="" -CONFIG_DEVTMPFS=y -CONFIG_DEVTMPFS_MOUNT=y -# CONFIG_STANDALONE is not set -# CONFIG_PREVENT_FIRMWARE_BUILD is not set -CONFIG_FW_LOADER=y -CONFIG_FIRMWARE_IN_KERNEL=y -CONFIG_EXTRA_FIRMWARE="imx/sdma/sdma-imx6q.bin" -CONFIG_EXTRA_FIRMWARE_DIR="firmware" -# CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set -CONFIG_WANT_DEV_COREDUMP=y -CONFIG_ALLOW_DEV_COREDUMP=y -CONFIG_DEV_COREDUMP=y -# CONFIG_SYS_HYPERVISOR is not set -# CONFIG_GENERIC_CPU_DEVICES is not set -CONFIG_SOC_BUS=y -CONFIG_REGMAP=y -CONFIG_REGMAP_AC97=y -CONFIG_REGMAP_I2C=y -CONFIG_REGMAP_SPI=y -CONFIG_REGMAP_MMIO=y -CONFIG_REGMAP_IRQ=y -CONFIG_DMA_SHARED_BUFFER=y -# CONFIG_FENCE_TRACE is not set -CONFIG_DMA_CMA=y - -# -# Default contiguous memory area size: -# -CONFIG_CMA_SIZE_MBYTES=320 -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_ARM_CCI400_PMU is not set -# CONFIG_ARM_CCI500_PMU is not set -# CONFIG_ARM_CCN is not set -# CONFIG_BRCMSTB_GISB_ARB is not set -CONFIG_IMX_WEIM=y -# CONFIG_VEXPRESS_CONFIG is not set -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_AFS_PARTS is not set -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 is not set -# CONFIG_MTD_SWAP is not set -# CONFIG_MTD_PARTITIONED_MASTER is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -CONFIG_MTD_JEDECPROBE=y -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=y -CONFIG_MTD_CFI_STAA=y -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=y -# CONFIG_MTD_IMPA7 is not set -# CONFIG_MTD_INTEL_VR_NOR is not set -# CONFIG_MTD_PLATRAM is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -CONFIG_MTD_DATAFLASH=y -# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set -# CONFIG_MTD_DATAFLASH_OTP is not set -# CONFIG_MTD_M25P80 is not set -CONFIG_MTD_SST25L=y -# 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_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_PCI is not set -# CONFIG_MTD_NAND_DENALI_DT is not set -# CONFIG_MTD_NAND_GPIO is not set -# CONFIG_MTD_NAND_OMAP_BCH_BUILD is not set -CONFIG_MTD_NAND_IDS=y -# CONFIG_MTD_NAND_RICOH is not set -# CONFIG_MTD_NAND_DISKONCHIP is not set -# CONFIG_MTD_NAND_DOCG4 is not set -# CONFIG_MTD_NAND_CAFE is not set -# CONFIG_MTD_NAND_NANDSIM is not set -# CONFIG_MTD_NAND_GPMI_NAND is not set -# CONFIG_MTD_NAND_BRCMNAND is not set -# CONFIG_MTD_NAND_PLATFORM is not set -CONFIG_MTD_NAND_MXC=y -# CONFIG_MTD_NAND_HISI504 is not set -# CONFIG_MTD_ONENAND is not set - -# -# LPDDR & LPDDR2 PCM memory drivers -# -# CONFIG_MTD_LPDDR is not set -# CONFIG_MTD_LPDDR2_NVM is not set -CONFIG_MTD_SPI_NOR=m -CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y -CONFIG_SPI_FSL_QUADSPI=m -CONFIG_MTD_UBI=m -CONFIG_MTD_UBI_WL_THRESHOLD=4096 -CONFIG_MTD_UBI_BEB_LIMIT=20 -# CONFIG_MTD_UBI_FASTMAP is not set -# CONFIG_MTD_UBI_GLUEBI is not set -# CONFIG_MTD_UBI_BLOCK is not set -CONFIG_DTC=y -CONFIG_OF=y -# CONFIG_OF_UNITTEST is not set -CONFIG_OF_FLATTREE=y -CONFIG_OF_EARLY_FLATTREE=y -CONFIG_OF_ADDRESS=y -CONFIG_OF_ADDRESS_PCI=y -CONFIG_OF_IRQ=y -CONFIG_OF_NET=y -CONFIG_OF_MDIO=y -CONFIG_OF_PCI=y -CONFIG_OF_PCI_IRQ=y -CONFIG_OF_MTD=y -CONFIG_OF_RESERVED_MEM=y -# CONFIG_OF_OVERLAY is not set -CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y -# CONFIG_PARPORT is not set -CONFIG_BLK_DEV=y -# CONFIG_BLK_DEV_NULL_BLK is not set -# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_UMEM is not set -# CONFIG_BLK_DEV_COW_COMMON is not set -CONFIG_BLK_DEV_LOOP=y -CONFIG_BLK_DEV_LOOP_MIN_COUNT=0 -CONFIG_BLK_DEV_CRYPTOLOOP=m -# CONFIG_BLK_DEV_DRBD is not set -# CONFIG_BLK_DEV_NBD is not set -# CONFIG_BLK_DEV_SX8 is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_COUNT=16 -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_CDROM_PKTCDVD=m -CONFIG_CDROM_PKTCDVD_BUFFERS=8 -# CONFIG_CDROM_PKTCDVD_WCACHE is not set -# CONFIG_ATA_OVER_ETH is not set -CONFIG_MG_DISK=y -CONFIG_MG_DISK_RES=0 -# CONFIG_VIRTIO_BLK is not set -# CONFIG_BLK_DEV_RBD is not set -# CONFIG_BLK_DEV_RSXX is not set -CONFIG_BLK_DEV_NVME=y - -# -# Misc devices -# -# CONFIG_SENSORS_LIS3LV02D is not set -# CONFIG_AD525X_DPOT is not set -# CONFIG_DUMMY_IRQ is not set -CONFIG_HWLAT_DETECTOR=m -# CONFIG_PHANTOM is not set -# CONFIG_SGI_IOC4 is not set -CONFIG_TIFM_CORE=y -CONFIG_TIFM_7XX1=y -# CONFIG_ICS932S401 is not set -CONFIG_ENCLOSURE_SERVICES=y -# CONFIG_HP_ILO 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_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=y -# CONFIG_C2PORT is not set - -# -# EEPROM support -# -CONFIG_EEPROM_AT24=y -CONFIG_EEPROM_AT25=y -# CONFIG_EEPROM_LEGACY is not set -CONFIG_EEPROM_MAX6875=y -CONFIG_EEPROM_93CX6=m -# CONFIG_EEPROM_93XX46 is not set -CONFIG_CB710_CORE=y -# CONFIG_CB710_DEBUG is not set -CONFIG_CB710_DEBUG_ASSUMPTIONS=y - -# -# Texas Instruments shared transport line discipline -# -CONFIG_TI_ST=m -# CONFIG_SENSORS_LIS3_SPI is not set -# CONFIG_SENSORS_LIS3_I2C is not set - -# -# Altera FPGA firmware download module -# -CONFIG_ALTERA_STAPL=m - -# -# Intel MIC Bus Driver -# - -# -# SCIF Bus Driver -# - -# -# Intel MIC Host Driver -# - -# -# Intel MIC Card Driver -# - -# -# SCIF Driver -# - -# -# Intel MIC Coprocessor State Management (COSM) Drivers -# -CONFIG_ECHO=m -# CONFIG_CXL_BASE is not set -# CONFIG_CXL_KERNEL_API is not set -# CONFIG_CXL_EEH is not set -CONFIG_HAVE_IDE=y -# CONFIG_IDE is not set - -# -# SCSI device support -# -CONFIG_SCSI_MOD=y -# CONFIG_RAID_ATTRS is not set -CONFIG_SCSI=y -CONFIG_SCSI_DMA=y -CONFIG_SCSI_NETLINK=y -# CONFIG_SCSI_MQ_DEFAULT is not set -CONFIG_SCSI_PROC_FS=y - -# -# 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=y -# CONFIG_CHR_DEV_SG is not set -CONFIG_CHR_DEV_SCH=m -CONFIG_SCSI_ENCLOSURE=y -# CONFIG_SCSI_CONSTANTS is not set -CONFIG_SCSI_LOGGING=y -# CONFIG_SCSI_SCAN_ASYNC is not set - -# -# SCSI Transports -# -# CONFIG_SCSI_SPI_ATTRS is not set -CONFIG_SCSI_FC_ATTRS=m -CONFIG_SCSI_ISCSI_ATTRS=m -# 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=m -CONFIG_ISCSI_BOOT_SYSFS=m -# CONFIG_SCSI_CXGB3_ISCSI is not set -# CONFIG_SCSI_CXGB4_ISCSI is not set -# CONFIG_SCSI_BNX2_ISCSI is not set -# CONFIG_SCSI_BNX2X_FCOE is not set -# CONFIG_BE2ISCSI is not set -# CONFIG_BLK_DEV_3W_XXXX_RAID is not set -# CONFIG_SCSI_HPSA is not set -# CONFIG_SCSI_3W_9XXX is not set -# CONFIG_SCSI_3W_SAS is not set -# CONFIG_SCSI_ACARD is not set -# CONFIG_SCSI_AACRAID is not set -# CONFIG_SCSI_AIC7XXX is not set -# CONFIG_SCSI_AIC79XX is not set -# CONFIG_SCSI_AIC94XX is not set -# CONFIG_SCSI_MVSAS is not set -# CONFIG_SCSI_MVUMI is not set -# CONFIG_SCSI_ADVANSYS is not set -# CONFIG_SCSI_ARCMSR is not set -# CONFIG_SCSI_ESAS2R is not set -# CONFIG_MEGARAID_NEWGEN is not set -# CONFIG_MEGARAID_LEGACY is not set -# CONFIG_MEGARAID_SAS is not set -# CONFIG_SCSI_MPT3SAS is not set -# CONFIG_SCSI_MPT2SAS is not set -CONFIG_SCSI_UFSHCD=m -# CONFIG_SCSI_UFSHCD_PCI is not set -CONFIG_SCSI_UFSHCD_PLATFORM=m -# CONFIG_SCSI_HPTIOP is not set -CONFIG_LIBFC=m -CONFIG_LIBFCOE=m -# CONFIG_FCOE is not set -# CONFIG_SCSI_SNIC is not set -# CONFIG_SCSI_DMX3191D is not set -# CONFIG_SCSI_FUTURE_DOMAIN is not set -# CONFIG_SCSI_IPS is not set -# CONFIG_SCSI_INITIO is not set -# CONFIG_SCSI_INIA100 is not set -# CONFIG_SCSI_STEX is not set -# CONFIG_SCSI_SYM53C8XX_2 is not set -# CONFIG_SCSI_IPR is not set -# CONFIG_SCSI_QLOGIC_1280 is not set -# CONFIG_SCSI_QLA_FC is not set -# CONFIG_SCSI_QLA_ISCSI is not set -# CONFIG_SCSI_LPFC is not set -# CONFIG_SCSI_DC395x is not set -# CONFIG_SCSI_AM53C974 is not set -# CONFIG_SCSI_NSP32 is not set -# CONFIG_SCSI_WD719X is not set -# CONFIG_SCSI_DEBUG is not set -# CONFIG_SCSI_PMCRAID is not set -# CONFIG_SCSI_PM8001 is not set -# CONFIG_SCSI_BFA_FC is not set -# CONFIG_SCSI_VIRTIO is not set -# CONFIG_SCSI_CHELSIO_FCOE is not set -# CONFIG_SCSI_DH is not set -CONFIG_SCSI_OSD_INITIATOR=m -# CONFIG_SCSI_OSD_ULD is not set -CONFIG_SCSI_OSD_DPRINT_SENSE=1 -# CONFIG_SCSI_OSD_DEBUG is not set -CONFIG_ATA=y -# CONFIG_ATA_NONSTANDARD is not set -# CONFIG_ATA_VERBOSE_ERROR is not set -CONFIG_SATA_PMP=y - -# -# Controllers with non-SFF native interface -# -CONFIG_SATA_AHCI=y -CONFIG_SATA_AHCI_PLATFORM=y -CONFIG_AHCI_IMX=y -# CONFIG_AHCI_CEVA is not set -# CONFIG_AHCI_QORIQ is not set -# CONFIG_SATA_INIC162X is not set -# CONFIG_SATA_ACARD_AHCI is not set -# CONFIG_SATA_SIL24 is not set -CONFIG_ATA_SFF=y - -# -# SFF controllers with custom DMA interface -# -# CONFIG_PDC_ADMA is not set -# CONFIG_SATA_QSTOR is not set -# CONFIG_SATA_SX4 is not set -CONFIG_ATA_BMDMA=y - -# -# SATA SFF controllers with BMDMA -# -# CONFIG_ATA_PIIX is not set -CONFIG_SATA_MV=y -# CONFIG_SATA_NV is not set -# CONFIG_SATA_PROMISE is not set -# CONFIG_SATA_SIL is not set -# CONFIG_SATA_SIS is not set -# CONFIG_SATA_SVW is not set -# CONFIG_SATA_ULI is not set -# CONFIG_SATA_VIA is not set -# CONFIG_SATA_VITESSE is not set - -# -# PATA SFF controllers with BMDMA -# -# CONFIG_PATA_ALI is not set -# CONFIG_PATA_AMD is not set -# CONFIG_PATA_ARTOP is not set -# CONFIG_PATA_ATIIXP is not set -# CONFIG_PATA_ATP867X is not set -# CONFIG_PATA_CMD64X is not set -# CONFIG_PATA_CYPRESS is not set -# CONFIG_PATA_EFAR is not set -# CONFIG_PATA_HPT366 is not set -# CONFIG_PATA_HPT37X is not set -# CONFIG_PATA_HPT3X2N is not set -# CONFIG_PATA_HPT3X3 is not set -CONFIG_PATA_IMX=y -# CONFIG_PATA_IT8213 is not set -# CONFIG_PATA_IT821X is not set -# CONFIG_PATA_JMICRON is not set -# CONFIG_PATA_MARVELL is not set -# CONFIG_PATA_NETCELL is not set -# CONFIG_PATA_NINJA32 is not set -# CONFIG_PATA_NS87415 is not set -# CONFIG_PATA_OLDPIIX is not set -# CONFIG_PATA_OPTIDMA is not set -# CONFIG_PATA_PDC2027X is not set -# CONFIG_PATA_PDC_OLD is not set -# CONFIG_PATA_RADISYS is not set -# CONFIG_PATA_RDC is not set -# CONFIG_PATA_SCH is not set -# CONFIG_PATA_SERVERWORKS is not set -# CONFIG_PATA_SIL680 is not set -# CONFIG_PATA_SIS is not set -# CONFIG_PATA_TOSHIBA is not set -# CONFIG_PATA_TRIFLEX is not set -# CONFIG_PATA_VIA is not set -# CONFIG_PATA_WINBOND is not set - -# -# PIO-only SFF controllers -# -# CONFIG_PATA_CMD640_PCI is not set -# CONFIG_PATA_MPIIX is not set -# CONFIG_PATA_NS87410 is not set -# CONFIG_PATA_OPTI is not set -# CONFIG_PATA_PLATFORM is not set -# CONFIG_PATA_RZ1000 is not set - -# -# Generic fallback / legacy drivers -# -# CONFIG_ATA_GENERIC is not set -# CONFIG_PATA_LEGACY is not set -CONFIG_MD=y -CONFIG_BLK_DEV_MD=y -CONFIG_MD_AUTODETECT=y -CONFIG_MD_LINEAR=y -CONFIG_MD_RAID0=y -CONFIG_MD_RAID1=y -CONFIG_MD_RAID10=y -CONFIG_MD_RAID456=m -CONFIG_MD_MULTIPATH=m -CONFIG_MD_FAULTY=m -# CONFIG_MD_CLUSTER is not set -CONFIG_BLK_DEV_DM_BUILTIN=y -CONFIG_BLK_DEV_DM=m -# CONFIG_DM_MQ_DEFAULT is not set -# CONFIG_DM_DEBUG is not set -CONFIG_DM_BUFIO=m -CONFIG_DM_BIO_PRISON=m -CONFIG_DM_PERSISTENT_DATA=m -# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set -CONFIG_DM_CRYPT=m -CONFIG_DM_SNAPSHOT=m -CONFIG_DM_THIN_PROVISIONING=m -CONFIG_DM_CACHE=m -CONFIG_DM_CACHE_MQ=m -CONFIG_DM_CACHE_SMQ=m -CONFIG_DM_CACHE_CLEANER=m -# CONFIG_DM_ERA is not set -CONFIG_DM_MIRROR=m -CONFIG_DM_LOG_USERSPACE=m -CONFIG_DM_RAID=m -CONFIG_DM_ZERO=m -CONFIG_DM_MULTIPATH=m -CONFIG_DM_MULTIPATH_QL=m -CONFIG_DM_MULTIPATH_ST=m -CONFIG_DM_DELAY=m -CONFIG_DM_UEVENT=y -CONFIG_DM_FLAKEY=m -CONFIG_DM_VERITY=m -# CONFIG_DM_SWITCH is not set -# CONFIG_DM_LOG_WRITES is not set -# CONFIG_TARGET_CORE is not set -# CONFIG_FUSION is not set - -# -# IEEE 1394 (FireWire) support -# -# CONFIG_FIREWIRE is not set -# CONFIG_FIREWIRE_NOSY is not set -CONFIG_NETDEVICES=y -CONFIG_MII=m -CONFIG_NET_CORE=y -CONFIG_BONDING=m -CONFIG_DUMMY=m -CONFIG_EQUALIZER=m -# CONFIG_NET_FC is not set -# CONFIG_IFB is not set -CONFIG_NET_TEAM=m -CONFIG_NET_TEAM_MODE_BROADCAST=m -CONFIG_NET_TEAM_MODE_ROUNDROBIN=m -CONFIG_NET_TEAM_MODE_RANDOM=m -CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m -CONFIG_NET_TEAM_MODE_LOADBALANCE=m -CONFIG_MACVLAN=m -CONFIG_MACVTAP=m -CONFIG_IPVLAN=m -CONFIG_VXLAN=m -# CONFIG_GENEVE is not set -CONFIG_NETCONSOLE=m -CONFIG_NETCONSOLE_DYNAMIC=y -CONFIG_NETPOLL=y -CONFIG_NET_POLL_CONTROLLER=y -CONFIG_TUN=m -# CONFIG_TUN_VNET_CROSS_LE is not set -CONFIG_VETH=m -# CONFIG_VIRTIO_NET is not set -CONFIG_NLMON=m -# CONFIG_NET_VRF is not set -# CONFIG_ARCNET is not set - -# -# CAIF transport drivers -# -CONFIG_CAIF_TTY=m -CONFIG_CAIF_SPI_SLAVE=m -CONFIG_CAIF_SPI_SYNC=y -CONFIG_CAIF_HSI=m -CONFIG_CAIF_VIRTIO=m -# CONFIG_VHOST_NET is not set -CONFIG_VHOST_RING=m -# CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set - -# -# Distributed Switch Architecture drivers -# -CONFIG_NET_DSA_MV88E6XXX=y -# 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_NET_DSA_MV88E6171 is not set -CONFIG_NET_DSA_MV88E6352=y -# CONFIG_NET_DSA_BCM_SF2 is not set -CONFIG_ETHERNET=y -CONFIG_MDIO=m -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_NET_VENDOR_ADAPTEC is not set -# CONFIG_NET_VENDOR_AGERE is not set -# CONFIG_NET_VENDOR_ALTEON is not set -# CONFIG_ALTERA_TSE is not set -# CONFIG_NET_VENDOR_AMD is not set -# CONFIG_NET_VENDOR_ARC is not set -CONFIG_NET_VENDOR_ATHEROS=y -CONFIG_ATL2=m -CONFIG_ATL1=m -CONFIG_ATL1E=m -CONFIG_ATL1C=m -CONFIG_ALX=m -# CONFIG_NET_VENDOR_AURORA is not set -# CONFIG_NET_CADENCE is not set -# CONFIG_NET_VENDOR_BROADCOM is not set -# CONFIG_NET_VENDOR_BROCADE is not set -# CONFIG_NET_VENDOR_CAVIUM is not set -# CONFIG_NET_VENDOR_CHELSIO is not set -# CONFIG_NET_VENDOR_CIRRUS is not set -# CONFIG_NET_VENDOR_CISCO is not set -# CONFIG_DM9000 is not set -# CONFIG_DNET is not set -# CONFIG_NET_VENDOR_DEC is not set -# CONFIG_NET_VENDOR_DLINK is not set -# CONFIG_NET_VENDOR_EMULEX is not set -# CONFIG_NET_VENDOR_EZCHIP is not set -# CONFIG_NET_VENDOR_EXAR is not set -# CONFIG_NET_VENDOR_FARADAY is not set -CONFIG_NET_VENDOR_FREESCALE=y -CONFIG_FEC=y -CONFIG_FSL_PQ_MDIO=y -# CONFIG_FSL_XGMAC_MDIO is not set -CONFIG_GIANFAR=y -# CONFIG_NET_VENDOR_HISILICON is not set -# CONFIG_NET_VENDOR_HP is not set -CONFIG_NET_VENDOR_INTEL=y -# CONFIG_E100 is not set -CONFIG_E1000=m -CONFIG_E1000E=m -CONFIG_IGB=m -CONFIG_IGB_HWMON=y -CONFIG_IGBVF=m -# CONFIG_IXGB is not set -# CONFIG_IXGBE is not set -# CONFIG_IXGBEVF is not set -# CONFIG_I40E is not set -# CONFIG_I40EVF is not set -# CONFIG_FM10K is not set -CONFIG_NET_VENDOR_I825XX=y -# CONFIG_JME is not set -CONFIG_NET_VENDOR_MARVELL=y -CONFIG_MVMDIO=y -# CONFIG_SKGE is not set -# CONFIG_SKY2 is not set -# CONFIG_NET_VENDOR_MELLANOX is not set -# CONFIG_NET_VENDOR_MICREL is not set -# CONFIG_NET_VENDOR_MICROCHIP is not set -# CONFIG_NET_VENDOR_MYRI is not set -# CONFIG_FEALNX is not set -# CONFIG_NET_VENDOR_NATSEMI is not set -# CONFIG_NET_VENDOR_NVIDIA is not set -# CONFIG_NET_VENDOR_OKI is not set -# CONFIG_ETHOC is not set -# CONFIG_NET_PACKET_ENGINE is not set -# CONFIG_NET_VENDOR_QLOGIC is not set -# CONFIG_NET_VENDOR_QUALCOMM is not set -# CONFIG_NET_VENDOR_REALTEK is not set -# CONFIG_NET_VENDOR_RENESAS is not set -# CONFIG_NET_VENDOR_RDC is not set -# CONFIG_NET_VENDOR_ROCKER is not set -# CONFIG_NET_VENDOR_SAMSUNG is not set -# CONFIG_NET_VENDOR_SEEQ is not set -# CONFIG_NET_VENDOR_SILAN is not set -# CONFIG_NET_VENDOR_SIS is not set -# CONFIG_SFC is not set -# CONFIG_NET_VENDOR_SMSC is not set -# CONFIG_NET_VENDOR_STMICRO is not set -# CONFIG_NET_VENDOR_SUN is not set -# CONFIG_NET_VENDOR_SYNOPSYS is not set -# CONFIG_NET_VENDOR_TEHUTI is not set -# CONFIG_NET_VENDOR_TI is not set -# CONFIG_NET_VENDOR_VIA is not set -# CONFIG_NET_VENDOR_WIZNET is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -CONFIG_PHYLIB=y -CONFIG_SWPHY=y - -# -# MII PHY device drivers -# -# CONFIG_AQUANTIA_PHY is not set -CONFIG_AT803X_PHY=y -# CONFIG_AMD_PHY is not set -CONFIG_MARVELL_PHY=y -# CONFIG_DAVICOM_PHY is not set -# CONFIG_QSEMI_PHY is not set -CONFIG_LXT_PHY=m -# CONFIG_CICADA_PHY is not set -# CONFIG_VITESSE_PHY is not set -# CONFIG_TERANETICS_PHY is not set -# CONFIG_SMSC_PHY is not set -# CONFIG_BROADCOM_PHY is not set -# CONFIG_BCM7XXX_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_DP83848_PHY is not set -# CONFIG_DP83867_PHY is not set -CONFIG_MICROCHIP_PHY=y -CONFIG_FIXED_PHY=y -CONFIG_MDIO_BITBANG=y -CONFIG_MDIO_GPIO=y -CONFIG_MDIO_BUS_MUX=y -CONFIG_MDIO_BUS_MUX_GPIO=y -CONFIG_MDIO_BUS_MUX_MMIOREG=y -CONFIG_MDIO_BCM_UNIMAC=m -# CONFIG_MICREL_KS8995MA is not set -CONFIG_PPP=m -CONFIG_PPP_BSDCOMP=m -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_FILTER=y -CONFIG_PPP_MPPE=m -CONFIG_PPP_MULTILINK=y -CONFIG_PPPOE=m -CONFIG_PPTP=m -CONFIG_PPPOL2TP=m -CONFIG_PPP_ASYNC=m -CONFIG_PPP_SYNC_TTY=m -CONFIG_SLIP=m -CONFIG_SLHC=m -CONFIG_SLIP_COMPRESSED=y -CONFIG_SLIP_SMART=y -CONFIG_SLIP_MODE_SLIP6=y -CONFIG_USB_NET_DRIVERS=m -CONFIG_USB_CATC=m -CONFIG_USB_KAWETH=m -CONFIG_USB_PEGASUS=m -CONFIG_USB_RTL8150=m -CONFIG_USB_RTL8152=m -CONFIG_USB_LAN78XX=m -CONFIG_USB_USBNET=m -CONFIG_USB_NET_AX8817X=m -CONFIG_USB_NET_AX88179_178A=m -CONFIG_USB_NET_CDCETHER=m -CONFIG_USB_NET_CDC_EEM=m -CONFIG_USB_NET_CDC_NCM=m -CONFIG_USB_NET_HUAWEI_CDC_NCM=m -CONFIG_USB_NET_CDC_MBIM=m -CONFIG_USB_NET_DM9601=m -CONFIG_USB_NET_SR9700=m -CONFIG_USB_NET_SR9800=m -CONFIG_USB_NET_SMSC75XX=m -CONFIG_USB_NET_SMSC95XX=m -CONFIG_USB_NET_GL620A=m -CONFIG_USB_NET_NET1080=m -CONFIG_USB_NET_PLUSB=m -CONFIG_USB_NET_MCS7830=m -CONFIG_USB_NET_RNDIS_HOST=m -CONFIG_USB_NET_CDC_SUBSET=m -CONFIG_USB_ALI_M5632=y -CONFIG_USB_AN2720=y -CONFIG_USB_BELKIN=y -CONFIG_USB_ARMLINUX=y -CONFIG_USB_EPSON2888=y -CONFIG_USB_KC2190=y -CONFIG_USB_NET_ZAURUS=m -CONFIG_USB_NET_CX82310_ETH=m -CONFIG_USB_NET_KALMIA=m -CONFIG_USB_NET_QMI_WWAN=m -CONFIG_USB_HSO=m -CONFIG_USB_NET_INT51X1=m -# CONFIG_USB_CDC_PHONET is not set -CONFIG_USB_IPHETH=m -CONFIG_USB_SIERRA_NET=m -CONFIG_USB_VL600=m -CONFIG_USB_NET_CH9200=m -CONFIG_WLAN=y -CONFIG_LIBERTAS_THINFIRM=m -# CONFIG_LIBERTAS_THINFIRM_DEBUG is not set -CONFIG_LIBERTAS_THINFIRM_USB=m -CONFIG_ATMEL=m -CONFIG_PCI_ATMEL=m -CONFIG_AT76C50X_USB=m -CONFIG_PRISM54=m -CONFIG_USB_ZD1201=m -CONFIG_USB_NET_RNDIS_WLAN=m -CONFIG_ADM8211=m -CONFIG_RTL8180=m -CONFIG_RTL8187=m -CONFIG_RTL8187_LEDS=y -CONFIG_MAC80211_HWSIM=m -CONFIG_MWL8K=m -CONFIG_ATH_COMMON=m -CONFIG_ATH_CARDS=m -# CONFIG_ATH_DEBUG is not set -# CONFIG_ATH_REG_DYNAMIC_USER_REG_HINTS is not set -CONFIG_ATH5K=m -# CONFIG_ATH5K_DEBUG is not set -# CONFIG_ATH5K_TRACER is not set -CONFIG_ATH5K_PCI=y -# CONFIG_ATH5K_TEST_CHANNELS is not set -CONFIG_ATH9K_HW=m -CONFIG_ATH9K_COMMON=m -CONFIG_ATH9K_BTCOEX_SUPPORT=y -CONFIG_ATH9K=m -CONFIG_ATH9K_PCI=y -CONFIG_ATH9K_AHB=y -# CONFIG_ATH9K_DEBUGFS is not set -# CONFIG_ATH9K_DFS_CERTIFIED is not set -# CONFIG_ATH9K_DYNACK is not set -CONFIG_ATH9K_WOW=y -CONFIG_ATH9K_RFKILL=y -CONFIG_ATH9K_CHANNEL_CONTEXT=y -CONFIG_ATH9K_PCOEM=y -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=m -CONFIG_ATH6KL_USB=m -# CONFIG_ATH6KL_DEBUG is not set -# CONFIG_ATH6KL_TRACING is not set -# CONFIG_ATH6KL_REGDOMAIN is not set -CONFIG_AR5523=m -CONFIG_WIL6210=m -CONFIG_WIL6210_ISR_COR=y -CONFIG_WIL6210_TRACING=y -CONFIG_ATH10K=m -CONFIG_ATH10K_PCI=m -# CONFIG_ATH10K_DEBUG is not set -# CONFIG_ATH10K_DEBUGFS is not set -# CONFIG_ATH10K_TRACING is not set -# CONFIG_ATH10K_DFS_CERTIFIED is not set -CONFIG_WCN36XX=m -# CONFIG_WCN36XX_DEBUGFS is not set -CONFIG_B43=m -CONFIG_B43_BCMA=y -CONFIG_B43_SSB=y -CONFIG_B43_BUSES_BCMA_AND_SSB=y -# CONFIG_B43_BUSES_BCMA is not set -# CONFIG_B43_BUSES_SSB is not set -CONFIG_B43_PCI_AUTOSELECT=y -CONFIG_B43_PCICORE_AUTOSELECT=y -CONFIG_B43_SDIO=y -CONFIG_B43_BCMA_PIO=y -CONFIG_B43_PIO=y -CONFIG_B43_PHY_G=y -CONFIG_B43_PHY_N=y -CONFIG_B43_PHY_LP=y -CONFIG_B43_PHY_HT=y -CONFIG_B43_LEDS=y -CONFIG_B43_HWRNG=y -# CONFIG_B43_DEBUG is not set -CONFIG_B43LEGACY=m -CONFIG_B43LEGACY_PCI_AUTOSELECT=y -CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y -CONFIG_B43LEGACY_LEDS=y -CONFIG_B43LEGACY_HWRNG=y -# CONFIG_B43LEGACY_DEBUG is not set -CONFIG_B43LEGACY_DMA=y -CONFIG_B43LEGACY_PIO=y -CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y -# CONFIG_B43LEGACY_DMA_MODE is not set -# CONFIG_B43LEGACY_PIO_MODE is not set -CONFIG_BRCMUTIL=m -CONFIG_BRCMSMAC=m -CONFIG_BRCMFMAC=m -CONFIG_BRCMFMAC_PROTO_BCDC=y -CONFIG_BRCMFMAC_PROTO_MSGBUF=y -CONFIG_BRCMFMAC_SDIO=y -CONFIG_BRCMFMAC_USB=y -CONFIG_BRCMFMAC_PCIE=y -# CONFIG_BRCM_TRACING is not set -# CONFIG_BRCMDBG is not set -CONFIG_HOSTAP=m -CONFIG_HOSTAP_FIRMWARE=y -CONFIG_HOSTAP_FIRMWARE_NVRAM=y -CONFIG_HOSTAP_PLX=m -CONFIG_HOSTAP_PCI=m -CONFIG_IPW2100=m -CONFIG_IPW2100_MONITOR=y -# CONFIG_IPW2100_DEBUG is not set -CONFIG_IPW2200=m -CONFIG_IPW2200_MONITOR=y -CONFIG_IPW2200_RADIOTAP=y -CONFIG_IPW2200_PROMISCUOUS=y -CONFIG_IPW2200_QOS=y -CONFIG_IPW2200_DEBUG=y -CONFIG_LIBIPW=m -CONFIG_LIBIPW_DEBUG=y -CONFIG_IWLWIFI=m -CONFIG_IWLWIFI_LEDS=y -CONFIG_IWLDVM=m -CONFIG_IWLMVM=m -CONFIG_IWLWIFI_OPMODE_MODULAR=y -# CONFIG_IWLWIFI_BCAST_FILTERING is not set -CONFIG_IWLWIFI_UAPSD=y - -# -# Debugging Options -# -# CONFIG_IWLWIFI_DEBUG is not set -# CONFIG_IWLWIFI_DEVICE_TRACING is not set -CONFIG_IWLEGACY=m -CONFIG_IWL4965=m -CONFIG_IWL3945=m - -# -# iwl3945 / iwl4965 Debugging Options -# -# CONFIG_IWLEGACY_DEBUG is not set -CONFIG_LIBERTAS=m -CONFIG_LIBERTAS_USB=m -CONFIG_LIBERTAS_SDIO=m -CONFIG_LIBERTAS_SPI=m -# CONFIG_LIBERTAS_DEBUG is not set -CONFIG_LIBERTAS_MESH=y -CONFIG_HERMES=m -CONFIG_HERMES_PRISM=y -CONFIG_HERMES_CACHE_FW_ON_INIT=y -CONFIG_PLX_HERMES=m -CONFIG_TMD_HERMES=m -CONFIG_NORTEL_HERMES=m -CONFIG_PCI_HERMES=m -CONFIG_ORINOCO_USB=m -CONFIG_P54_COMMON=m -CONFIG_P54_USB=m -CONFIG_P54_PCI=m -CONFIG_P54_SPI=m -CONFIG_P54_SPI_DEFAULT_EEPROM=y -CONFIG_P54_LEDS=y -CONFIG_RT2X00=m -CONFIG_RT2400PCI=m -CONFIG_RT2500PCI=m -CONFIG_RT61PCI=m -CONFIG_RT2800PCI=m -CONFIG_RT2800PCI_RT33XX=y -CONFIG_RT2800PCI_RT35XX=y -CONFIG_RT2800PCI_RT53XX=y -CONFIG_RT2800PCI_RT3290=y -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_RT2800_LIB_MMIO=m -CONFIG_RT2X00_LIB_MMIO=m -CONFIG_RT2X00_LIB_PCI=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_MEDIATEK=y -CONFIG_MT7601U=m -# CONFIG_RTL8XXXU is not set -# CONFIG_RTL8192CU is not set -CONFIG_WL_TI=y -CONFIG_WL1251=m -CONFIG_WL1251_SPI=m -CONFIG_WL1251_SDIO=m -CONFIG_WL12XX=m -CONFIG_WL18XX=m -CONFIG_WLCORE=m -CONFIG_WLCORE_SPI=m -CONFIG_WLCORE_SDIO=m -CONFIG_WILINK_PLATFORM_DATA=y -CONFIG_ZD1211RW=m -# CONFIG_ZD1211RW_DEBUG is not set -CONFIG_MWIFIEX=m -CONFIG_MWIFIEX_SDIO=m -CONFIG_MWIFIEX_PCIE=m -CONFIG_MWIFIEX_USB=m -CONFIG_CW1200=m -CONFIG_CW1200_WLAN_SDIO=m -CONFIG_CW1200_WLAN_SPI=m -CONFIG_RSI_91X=m -CONFIG_RSI_DEBUGFS=y -CONFIG_RSI_SDIO=m -CONFIG_RSI_USB=m - -# -# Enable WiMAX (Networking options) to see the WiMAX drivers -# -CONFIG_WAN=y -CONFIG_HDLC=m -CONFIG_HDLC_RAW=m -CONFIG_HDLC_RAW_ETH=m -CONFIG_HDLC_CISCO=m -CONFIG_HDLC_FR=m -CONFIG_HDLC_PPP=m - -# -# X.25/LAPB support is disabled -# -# CONFIG_PCI200SYN is not set -CONFIG_WANXL=m -# CONFIG_WANXL_BUILD_FIRMWARE is not set -CONFIG_PC300TOO=m -CONFIG_FARSYNC=m -CONFIG_DSCC4=m -# CONFIG_DSCC4_PCISYNC is not set -# CONFIG_DSCC4_PCI_RST is not set -# CONFIG_DLCI is not set -# CONFIG_VMXNET3 is not set -CONFIG_ISDN=y -CONFIG_ISDN_I4L=m -# CONFIG_ISDN_PPP is not set -# CONFIG_ISDN_AUDIO is not set - -# -# ISDN feature submodules -# -# CONFIG_ISDN_DIVERSION is not set - -# -# ISDN4Linux hardware drivers -# - -# -# Passive cards -# -# CONFIG_ISDN_DRV_HISAX is not set - -# -# Active cards -# -CONFIG_ISDN_CAPI=m -CONFIG_CAPI_TRACE=y -# CONFIG_ISDN_CAPI_CAPI20 is not set -# CONFIG_ISDN_CAPI_CAPIDRV is not set - -# -# CAPI hardware drivers -# -# CONFIG_CAPI_AVM is not set -# CONFIG_CAPI_EICON is not set -CONFIG_ISDN_DRV_GIGASET=m -CONFIG_GIGASET_CAPI=y -# CONFIG_GIGASET_I4L is not set -# CONFIG_GIGASET_DUMMYLL is not set -# CONFIG_GIGASET_BASE is not set -# CONFIG_GIGASET_M105 is not set -# CONFIG_GIGASET_M101 is not set -# CONFIG_GIGASET_DEBUG is not set -CONFIG_HYSDN=m -CONFIG_HYSDN_CAPI=y -CONFIG_MISDN=m -CONFIG_MISDN_DSP=m -CONFIG_MISDN_L1OIP=m - -# -# mISDN hardware drivers -# -CONFIG_MISDN_HFCPCI=m -CONFIG_MISDN_HFCMULTI=m -CONFIG_MISDN_HFCUSB=m -CONFIG_MISDN_AVMFRITZ=m -CONFIG_MISDN_SPEEDFAX=m -CONFIG_MISDN_INFINEON=m -CONFIG_MISDN_W6692=m -CONFIG_MISDN_NETJET=m -CONFIG_MISDN_IPAC=m -CONFIG_MISDN_ISAR=m -CONFIG_ISDN_HDLC=m -# CONFIG_NVM is not set - -# -# Input device support -# -CONFIG_INPUT=y -CONFIG_INPUT_LEDS=m -CONFIG_INPUT_FF_MEMLESS=m -CONFIG_INPUT_POLLDEV=y -CONFIG_INPUT_SPARSEKMAP=m -CONFIG_INPUT_MATRIXKMAP=y - -# -# Userland interfaces -# -CONFIG_INPUT_MOUSEDEV=m -# CONFIG_INPUT_MOUSEDEV_PSAUX is not set -CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 -CONFIG_INPUT_JOYDEV=m -CONFIG_INPUT_EVDEV=y -# CONFIG_INPUT_EVBUG is not set -# CONFIG_INPUT_APMPOWER is not set - -# -# Input Device Drivers -# -CONFIG_INPUT_KEYBOARD=y -# CONFIG_KEYBOARD_ADP5588 is not set -# CONFIG_KEYBOARD_ADP5589 is not set -# CONFIG_KEYBOARD_ATKBD is not set -# CONFIG_KEYBOARD_QT1070 is not set -# CONFIG_KEYBOARD_QT2160 is not set -# CONFIG_KEYBOARD_LKKBD is not set -CONFIG_KEYBOARD_GPIO=y -CONFIG_KEYBOARD_GPIO_POLLED=y -CONFIG_KEYBOARD_TCA6416=m -CONFIG_KEYBOARD_TCA8418=m -CONFIG_KEYBOARD_MATRIX=m -# CONFIG_KEYBOARD_LM8323 is not set -# CONFIG_KEYBOARD_LM8333 is not set -# CONFIG_KEYBOARD_MAX7359 is not set -# CONFIG_KEYBOARD_MCS is not set -# CONFIG_KEYBOARD_MPR121 is not set -CONFIG_KEYBOARD_IMX=m -# CONFIG_KEYBOARD_NEWTON is not set -# CONFIG_KEYBOARD_OPENCORES is not set -# CONFIG_KEYBOARD_SAMSUNG is not set -# CONFIG_KEYBOARD_STOWAWAY is not set -# CONFIG_KEYBOARD_SUNKBD is not set -# CONFIG_KEYBOARD_OMAP4 is not set -CONFIG_KEYBOARD_XTKBD=m -# CONFIG_KEYBOARD_CAP11XX is not set -# CONFIG_KEYBOARD_BCM is not set -CONFIG_INPUT_MOUSE=y -CONFIG_MOUSE_PS2=m -CONFIG_MOUSE_PS2_ALPS=y -CONFIG_MOUSE_PS2_LOGIPS2PP=y -CONFIG_MOUSE_PS2_SYNAPTICS=y -CONFIG_MOUSE_PS2_CYPRESS=y -CONFIG_MOUSE_PS2_TRACKPOINT=y -CONFIG_MOUSE_PS2_ELANTECH=y -# CONFIG_MOUSE_PS2_SENTELIC is not set -# CONFIG_MOUSE_PS2_TOUCHKIT is not set -CONFIG_MOUSE_PS2_FOCALTECH=y -CONFIG_MOUSE_SERIAL=m -CONFIG_MOUSE_APPLETOUCH=m -CONFIG_MOUSE_BCM5974=m -CONFIG_MOUSE_CYAPA=m -CONFIG_MOUSE_ELAN_I2C=m -CONFIG_MOUSE_ELAN_I2C_I2C=y -# CONFIG_MOUSE_ELAN_I2C_SMBUS is not set -CONFIG_MOUSE_VSXXXAA=m -CONFIG_MOUSE_GPIO=m -CONFIG_MOUSE_SYNAPTICS_I2C=m -CONFIG_MOUSE_SYNAPTICS_USB=m -CONFIG_INPUT_JOYSTICK=y -CONFIG_JOYSTICK_ANALOG=m -CONFIG_JOYSTICK_A3D=m -CONFIG_JOYSTICK_ADI=m -CONFIG_JOYSTICK_COBRA=m -CONFIG_JOYSTICK_GF2K=m -CONFIG_JOYSTICK_GRIP=m -CONFIG_JOYSTICK_GRIP_MP=m -CONFIG_JOYSTICK_GUILLEMOT=m -CONFIG_JOYSTICK_INTERACT=m -CONFIG_JOYSTICK_SIDEWINDER=m -CONFIG_JOYSTICK_TMDC=m -CONFIG_JOYSTICK_IFORCE=m -CONFIG_JOYSTICK_IFORCE_USB=y -CONFIG_JOYSTICK_IFORCE_232=y -CONFIG_JOYSTICK_WARRIOR=m -CONFIG_JOYSTICK_MAGELLAN=m -CONFIG_JOYSTICK_SPACEORB=m -CONFIG_JOYSTICK_SPACEBALL=m -CONFIG_JOYSTICK_STINGER=m -CONFIG_JOYSTICK_TWIDJOY=m -CONFIG_JOYSTICK_ZHENHUA=m -CONFIG_JOYSTICK_AS5011=m -CONFIG_JOYSTICK_JOYDUMP=m -CONFIG_JOYSTICK_XPAD=m -CONFIG_JOYSTICK_XPAD_FF=y -CONFIG_JOYSTICK_XPAD_LEDS=y -# CONFIG_INPUT_TABLET is not set -CONFIG_INPUT_TOUCHSCREEN=y -CONFIG_TOUCHSCREEN_PROPERTIES=y -CONFIG_TOUCHSCREEN_88PM860X=m -CONFIG_TOUCHSCREEN_ADS7846=m -CONFIG_TOUCHSCREEN_AD7877=m -CONFIG_TOUCHSCREEN_AD7879=m -CONFIG_TOUCHSCREEN_AD7879_I2C=m -CONFIG_TOUCHSCREEN_AD7879_SPI=m -CONFIG_TOUCHSCREEN_AR1021_I2C=m -CONFIG_TOUCHSCREEN_ATMEL_MXT=m -CONFIG_TOUCHSCREEN_AUO_PIXCIR=m -CONFIG_TOUCHSCREEN_BU21013=m -CONFIG_TOUCHSCREEN_CHIPONE_ICN8318=m -CONFIG_TOUCHSCREEN_CY8CTMG110=m -CONFIG_TOUCHSCREEN_CYTTSP_CORE=m -CONFIG_TOUCHSCREEN_CYTTSP_I2C=m -CONFIG_TOUCHSCREEN_CYTTSP_SPI=m -CONFIG_TOUCHSCREEN_CYTTSP4_CORE=m -CONFIG_TOUCHSCREEN_CYTTSP4_I2C=m -CONFIG_TOUCHSCREEN_CYTTSP4_SPI=m -CONFIG_TOUCHSCREEN_DA9052=m -CONFIG_TOUCHSCREEN_DYNAPRO=m -CONFIG_TOUCHSCREEN_HAMPSHIRE=m -CONFIG_TOUCHSCREEN_EETI=m -CONFIG_TOUCHSCREEN_EGALAX=m -CONFIG_TOUCHSCREEN_FT6236=m -CONFIG_TOUCHSCREEN_FUJITSU=m -CONFIG_TOUCHSCREEN_GOODIX=m -CONFIG_TOUCHSCREEN_ILI210X=m -CONFIG_TOUCHSCREEN_GUNZE=m -CONFIG_TOUCHSCREEN_ELAN=m -CONFIG_TOUCHSCREEN_ELO=m -CONFIG_TOUCHSCREEN_WACOM_W8001=m -CONFIG_TOUCHSCREEN_WACOM_I2C=m -CONFIG_TOUCHSCREEN_MAX11801=m -CONFIG_TOUCHSCREEN_MCS5000=m -CONFIG_TOUCHSCREEN_MMS114=m -CONFIG_TOUCHSCREEN_MTOUCH=m -CONFIG_TOUCHSCREEN_IMX6UL_TSC=m -CONFIG_TOUCHSCREEN_INEXIO=m -CONFIG_TOUCHSCREEN_MK712=m -CONFIG_TOUCHSCREEN_PENMOUNT=m -CONFIG_TOUCHSCREEN_EDT_FT5X06=m -CONFIG_TOUCHSCREEN_TOUCHRIGHT=m -CONFIG_TOUCHSCREEN_TOUCHWIN=m -CONFIG_TOUCHSCREEN_PIXCIR=m -CONFIG_TOUCHSCREEN_WDT87XX_I2C=m -CONFIG_TOUCHSCREEN_WM97XX=m -CONFIG_TOUCHSCREEN_WM9705=y -CONFIG_TOUCHSCREEN_WM9712=y -CONFIG_TOUCHSCREEN_WM9713=y -CONFIG_TOUCHSCREEN_USB_COMPOSITE=m -CONFIG_TOUCHSCREEN_MC13783=m -CONFIG_TOUCHSCREEN_USB_EGALAX=y -CONFIG_TOUCHSCREEN_USB_PANJIT=y -CONFIG_TOUCHSCREEN_USB_3M=y -CONFIG_TOUCHSCREEN_USB_ITM=y -CONFIG_TOUCHSCREEN_USB_ETURBO=y -CONFIG_TOUCHSCREEN_USB_GUNZE=y -CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y -CONFIG_TOUCHSCREEN_USB_IRTOUCH=y -CONFIG_TOUCHSCREEN_USB_IDEALTEK=y -CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y -CONFIG_TOUCHSCREEN_USB_GOTOP=y -CONFIG_TOUCHSCREEN_USB_JASTEC=y -CONFIG_TOUCHSCREEN_USB_ELO=y -CONFIG_TOUCHSCREEN_USB_E2I=y -CONFIG_TOUCHSCREEN_USB_ZYTRONIC=y -CONFIG_TOUCHSCREEN_USB_ETT_TC45USB=y -CONFIG_TOUCHSCREEN_USB_NEXIO=y -CONFIG_TOUCHSCREEN_USB_EASYTOUCH=y -CONFIG_TOUCHSCREEN_TOUCHIT213=m -CONFIG_TOUCHSCREEN_TSC_SERIO=m -CONFIG_TOUCHSCREEN_TSC200X_CORE=m -CONFIG_TOUCHSCREEN_TSC2004=m -CONFIG_TOUCHSCREEN_TSC2005=m -CONFIG_TOUCHSCREEN_TSC2007=m -CONFIG_TOUCHSCREEN_ST1232=m -CONFIG_TOUCHSCREEN_SUR40=m -CONFIG_TOUCHSCREEN_SX8654=m -CONFIG_TOUCHSCREEN_TPS6507X=m -CONFIG_TOUCHSCREEN_ZFORCE=m -CONFIG_TOUCHSCREEN_ROHM_BU21023=m -CONFIG_INPUT_MISC=y -CONFIG_INPUT_88PM860X_ONKEY=m -CONFIG_INPUT_88PM80X_ONKEY=m -CONFIG_INPUT_AD714X=m -CONFIG_INPUT_AD714X_I2C=m -CONFIG_INPUT_AD714X_SPI=m -CONFIG_INPUT_BMA150=m -CONFIG_INPUT_E3X0_BUTTON=m -CONFIG_INPUT_MC13783_PWRBUTTON=m -CONFIG_INPUT_MMA8450=y -CONFIG_INPUT_MPU3050=m -CONFIG_INPUT_GP2A=m -CONFIG_INPUT_GPIO_BEEPER=m -CONFIG_INPUT_GPIO_TILT_POLLED=m -CONFIG_INPUT_ATI_REMOTE2=m -CONFIG_INPUT_KEYSPAN_REMOTE=m -CONFIG_INPUT_KXTJ9=m -CONFIG_INPUT_KXTJ9_POLLED_MODE=y -CONFIG_INPUT_POWERMATE=m -CONFIG_INPUT_YEALINK=m -CONFIG_INPUT_CM109=m -CONFIG_INPUT_REGULATOR_HAPTIC=m -CONFIG_INPUT_UINPUT=m -CONFIG_INPUT_PCF8574=m -CONFIG_INPUT_PWM_BEEPER=m -CONFIG_INPUT_GPIO_ROTARY_ENCODER=m -CONFIG_INPUT_DA9052_ONKEY=m -CONFIG_INPUT_ADXL34X=m -CONFIG_INPUT_ADXL34X_I2C=m -CONFIG_INPUT_ADXL34X_SPI=m -CONFIG_INPUT_IMS_PCU=m -CONFIG_INPUT_CMA3000=m -CONFIG_INPUT_CMA3000_I2C=m -CONFIG_INPUT_SOC_BUTTON_ARRAY=m -CONFIG_INPUT_DRV260X_HAPTICS=m -CONFIG_INPUT_DRV2665_HAPTICS=m -CONFIG_INPUT_DRV2667_HAPTICS=m - -# -# Hardware I/O ports -# -CONFIG_SERIO=m -CONFIG_SERIO_SERPORT=m -# CONFIG_SERIO_PCIPS2 is not set -CONFIG_SERIO_LIBPS2=m -CONFIG_SERIO_RAW=m -CONFIG_SERIO_ALTERA_PS2=m -# CONFIG_SERIO_PS2MULT is not set -# CONFIG_SERIO_ARC_PS2 is not set -# CONFIG_SERIO_APBPS2 is not set -# CONFIG_USERIO is not set -CONFIG_GAMEPORT=m -# CONFIG_GAMEPORT_NS558 is not set -# CONFIG_GAMEPORT_L4 is not set -# CONFIG_GAMEPORT_EMU10K1 is not set -# CONFIG_GAMEPORT_FM801 is not set - -# -# Character devices -# -CONFIG_TTY=y -CONFIG_VT=y -CONFIG_CONSOLE_TRANSLATIONS=y -CONFIG_VT_CONSOLE=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 is not set -# CONFIG_SERIAL_NONSTANDARD is not set -# CONFIG_NOZOMI 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_EARLYCON=y -CONFIG_SERIAL_8250=y -CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y -CONFIG_SERIAL_8250_CONSOLE=y -CONFIG_SERIAL_8250_DMA=y -CONFIG_SERIAL_8250_PCI=y -CONFIG_SERIAL_8250_NR_UARTS=4 -CONFIG_SERIAL_8250_RUNTIME_UARTS=4 -# CONFIG_SERIAL_8250_EXTENDED is not set -CONFIG_SERIAL_8250_FSL=y -CONFIG_SERIAL_8250_DW=m -# CONFIG_SERIAL_8250_EM is not set -# CONFIG_SERIAL_8250_RT288X is not set -# CONFIG_SERIAL_8250_INGENIC is not set -# CONFIG_SERIAL_8250_MID is not set - -# -# Non-8250 serial port support -# -CONFIG_SERIAL_EARLYCON_ARM_SEMIHOST=y -CONFIG_SERIAL_MAX3100=m -CONFIG_SERIAL_MAX310X=m -CONFIG_SERIAL_IMX=y -CONFIG_SERIAL_IMX_CONSOLE=y -# CONFIG_SERIAL_UARTLITE is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -# CONFIG_SERIAL_JSM is not set -# CONFIG_SERIAL_OF_PLATFORM is not set -# CONFIG_SERIAL_SCCNXP is not set -# CONFIG_SERIAL_SC16IS7XX is not set -CONFIG_SERIAL_BCM63XX=m -# 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=m -CONFIG_SERIAL_ARC_NR_PORTS=1 -# CONFIG_SERIAL_RP2 is not set -CONFIG_SERIAL_FSL_LPUART=y -CONFIG_SERIAL_FSL_LPUART_CONSOLE=y -# CONFIG_SERIAL_CONEXANT_DIGICOLOR is not set -# CONFIG_SERIAL_ST_ASC is not set -# CONFIG_SERIAL_STM32 is not set -CONFIG_TTY_PRINTK=m -CONFIG_HVC_DRIVER=y -CONFIG_HVC_DCC=y -# CONFIG_VIRTIO_CONSOLE is not set -# CONFIG_IPMI_HANDLER is not set -CONFIG_HW_RANDOM=y -CONFIG_HW_RANDOM_TIMERIOMEM=m -# CONFIG_HW_RANDOM_VIRTIO is not set -# CONFIG_NVRAM is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set -CONFIG_RAW_DRIVER=m -CONFIG_MAX_RAW_DEVS=256 -# CONFIG_TCG_TPM is not set -CONFIG_DEVPORT=y -# CONFIG_XILLYBUS is not set - -# -# I2C support -# -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=y -CONFIG_I2C_MUX_GPIO=y -CONFIG_I2C_MUX_PCA9541=y -# CONFIG_I2C_MUX_PCA954x is not set -CONFIG_I2C_MUX_PINCTRL=y -# CONFIG_I2C_MUX_REG is not set -CONFIG_I2C_HELPER_AUTO=y -CONFIG_I2C_ALGOBIT=y - -# -# I2C Hardware Bus support -# - -# -# PC SMBus host controller drivers -# -# CONFIG_I2C_ALI1535 is not set -# CONFIG_I2C_ALI1563 is not set -# CONFIG_I2C_ALI15X3 is not set -# CONFIG_I2C_AMD756 is not set -# CONFIG_I2C_AMD8111 is not set -# CONFIG_I2C_I801 is not set -# CONFIG_I2C_ISCH is not set -# CONFIG_I2C_PIIX4 is not set -# CONFIG_I2C_NFORCE2 is not set -# CONFIG_I2C_SIS5595 is not set -# CONFIG_I2C_SIS630 is not set -# CONFIG_I2C_SIS96X is not set -# CONFIG_I2C_VIA is not set -# CONFIG_I2C_VIAPRO is not set - -# -# I2C system bus drivers (mostly embedded / system-on-chip) -# -# CONFIG_I2C_CBUS_GPIO is not set -CONFIG_I2C_DESIGNWARE_CORE=m -CONFIG_I2C_DESIGNWARE_PLATFORM=m -# CONFIG_I2C_DESIGNWARE_PCI is not set -# CONFIG_I2C_EMEV2 is not set -CONFIG_I2C_GPIO=y -CONFIG_I2C_IMX=y -CONFIG_I2C_OCORES=y -# CONFIG_I2C_PCA_PLATFORM is not set -# CONFIG_I2C_PXA_PCI is not set -# CONFIG_I2C_RK3X 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_SLAVE=y -CONFIG_I2C_SLAVE_EEPROM=m -# 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_MASTER=y - -# -# SPI Master Controller Drivers -# -# CONFIG_SPI_ALTERA is not set -CONFIG_SPI_BITBANG=y -# CONFIG_SPI_CADENCE is not set -CONFIG_SPI_GPIO=y -CONFIG_SPI_IMX=m -# CONFIG_SPI_FSL_SPI is not set -# CONFIG_SPI_OC_TINY is not set -# CONFIG_SPI_PXA2XX is not set -# CONFIG_SPI_PXA2XX_PCI is not set -# CONFIG_SPI_ROCKCHIP is not set -# CONFIG_SPI_SC18IS602 is not set -# CONFIG_SPI_XCOMM is not set -# CONFIG_SPI_XILINX is not set -# CONFIG_SPI_ZYNQMP_GQSPI is not set -# CONFIG_SPI_DESIGNWARE is not set - -# -# SPI Protocol Masters -# -CONFIG_SPI_SPIDEV=y -# CONFIG_SPI_TLE62X0 is not set -# CONFIG_SPMI is not set -# CONFIG_HSI is not set - -# -# PPS support -# -CONFIG_PPS=y -# CONFIG_PPS_DEBUG is not set -# CONFIG_NTP_PPS is not set - -# -# PPS clients support -# -# CONFIG_PPS_CLIENT_KTIMER is not set -CONFIG_PPS_CLIENT_LDISC=m -CONFIG_PPS_CLIENT_GPIO=m - -# -# PPS generators support -# - -# -# PTP clock support -# -CONFIG_PTP_1588_CLOCK=y -CONFIG_PTP_1588_CLOCK_GIANFAR=m - -# -# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. -# -CONFIG_PINCTRL=y - -# -# Pin controllers -# -CONFIG_PINMUX=y -CONFIG_PINCONF=y -CONFIG_GENERIC_PINCONF=y -# CONFIG_PINCTRL_AMD is not set -CONFIG_PINCTRL_SINGLE=y -CONFIG_PINCTRL_IMX=y -CONFIG_PINCTRL_IMX6Q=y -CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y -CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y -CONFIG_ARCH_REQUIRE_GPIOLIB=y -CONFIG_GPIOLIB=y -CONFIG_GPIO_DEVRES=y -CONFIG_OF_GPIO=y -CONFIG_GPIOLIB_IRQCHIP=y -CONFIG_GPIO_SYSFS=y -CONFIG_GPIO_GENERIC=y - -# -# Memory mapped GPIO drivers -# -CONFIG_GPIO_74XX_MMIO=y -# CONFIG_GPIO_ALTERA is not set -# CONFIG_GPIO_DWAPB is not set -# CONFIG_GPIO_EM is not set -CONFIG_GPIO_GENERIC_PLATFORM=y -# CONFIG_GPIO_GRGPIO is not set -CONFIG_GPIO_MXC=y -CONFIG_GPIO_SYSCON=y -# CONFIG_GPIO_VX855 is not set -# CONFIG_GPIO_XILINX is not set -# CONFIG_GPIO_ZEVIO is not set -# CONFIG_GPIO_ZX is not set - -# -# I2C GPIO expanders -# -CONFIG_GPIO_ADP5588=m -CONFIG_GPIO_ADNP=m -# CONFIG_GPIO_MAX7300 is not set -# CONFIG_GPIO_MAX732X is not set -CONFIG_GPIO_PCA953X=m -CONFIG_GPIO_PCF857X=m -CONFIG_GPIO_SX150X=y - -# -# MFD GPIO expanders -# -# CONFIG_GPIO_DA9052 is not set - -# -# PCI GPIO expanders -# -# CONFIG_GPIO_AMD8111 is not set -# CONFIG_GPIO_ML_IOH is not set -# CONFIG_GPIO_RDC321X is not set - -# -# SPI GPIO expanders -# -CONFIG_GPIO_74X164=m -# CONFIG_GPIO_MAX7301 is not set -CONFIG_GPIO_MC33880=m - -# -# SPI or I2C GPIO expanders -# -CONFIG_GPIO_MCP23S08=m - -# -# USB GPIO expanders -# -CONFIG_W1=m -CONFIG_W1_CON=y - -# -# 1-wire Bus Masters -# -CONFIG_W1_MASTER_MATROX=m -CONFIG_W1_MASTER_DS2490=m -CONFIG_W1_MASTER_DS2482=m -CONFIG_W1_MASTER_MXC=m -CONFIG_W1_MASTER_DS1WM=m -CONFIG_W1_MASTER_GPIO=m - -# -# 1-wire Slaves -# -CONFIG_W1_SLAVE_THERM=m -CONFIG_W1_SLAVE_SMEM=m -CONFIG_W1_SLAVE_DS2408=m -CONFIG_W1_SLAVE_DS2408_READBACK=y -CONFIG_W1_SLAVE_DS2413=m -CONFIG_W1_SLAVE_DS2406=m -CONFIG_W1_SLAVE_DS2423=m -CONFIG_W1_SLAVE_DS2431=m -CONFIG_W1_SLAVE_DS2433=m -CONFIG_W1_SLAVE_DS2433_CRC=y -CONFIG_W1_SLAVE_DS2760=m -CONFIG_W1_SLAVE_DS2780=m -CONFIG_W1_SLAVE_DS2781=m -CONFIG_W1_SLAVE_DS28E04=m -CONFIG_W1_SLAVE_BQ27000=m -CONFIG_POWER_SUPPLY=y -# CONFIG_POWER_SUPPLY_DEBUG is not set -# CONFIG_PDA_POWER is not set -# CONFIG_APM_POWER is not set -# CONFIG_GENERIC_ADC_BATTERY is not set -CONFIG_TEST_POWER=m -# CONFIG_BATTERY_88PM860X is not set -# CONFIG_BATTERY_DS2760 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_BQ27XXX is not set -# CONFIG_BATTERY_DA9052 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=m -# CONFIG_CHARGER_MANAGER is not set -# CONFIG_CHARGER_BQ2415X is not set -# CONFIG_CHARGER_BQ24190 is not set -# CONFIG_CHARGER_BQ24257 is not set -# CONFIG_CHARGER_BQ24735 is not set -# CONFIG_CHARGER_BQ25890 is not set -# CONFIG_CHARGER_SMB347 is not set -# CONFIG_BATTERY_GAUGE_LTC2941 is not set -# CONFIG_CHARGER_RT9455 is not set -CONFIG_POWER_RESET=y -# CONFIG_POWER_RESET_BRCMSTB is not set -CONFIG_POWER_RESET_GPIO=y -CONFIG_POWER_RESET_GPIO_RESTART=y -CONFIG_POWER_RESET_IMX=y -CONFIG_POWER_RESET_LTC2952=y -CONFIG_POWER_RESET_RESTART=y -CONFIG_POWER_RESET_VERSATILE=y -# CONFIG_POWER_RESET_SNVS is not set -CONFIG_POWER_RESET_SYSCON=y -# CONFIG_POWER_RESET_SYSCON_POWEROFF is not set -CONFIG_POWER_AVS=y -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_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_DA9052_ADC is not set -# CONFIG_SENSORS_I5K_AMB is not set -# CONFIG_SENSORS_F71805F is not set -# CONFIG_SENSORS_F71882FG is not set -# CONFIG_SENSORS_F75375S is not set -CONFIG_SENSORS_MC13783_ADC=y -# CONFIG_SENSORS_GL518SM is not set -# CONFIG_SENSORS_GL520SM is not set -# CONFIG_SENSORS_G760A is not set -# CONFIG_SENSORS_G762 is not set -# CONFIG_SENSORS_GPIO_FAN is not set -# CONFIG_SENSORS_HIH6130 is not set -# CONFIG_SENSORS_IIO_HWMON is not set -# CONFIG_SENSORS_IT87 is not set -# CONFIG_SENSORS_JC42 is not set -# CONFIG_SENSORS_POWR1220 is not set -# CONFIG_SENSORS_LINEAGE is not set -# CONFIG_SENSORS_LTC2945 is not set -# CONFIG_SENSORS_LTC4151 is not set -# CONFIG_SENSORS_LTC4215 is not set -# CONFIG_SENSORS_LTC4222 is not set -# CONFIG_SENSORS_LTC4245 is not set -# CONFIG_SENSORS_LTC4260 is not set -# CONFIG_SENSORS_LTC4261 is not set -CONFIG_SENSORS_MAX1111=m -CONFIG_SENSORS_MAX16065=m -CONFIG_SENSORS_MAX1619=m -CONFIG_SENSORS_MAX1668=m -# 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_MAX31790 is not set -# CONFIG_SENSORS_HTU21 is not set -# CONFIG_SENSORS_MCP3021 is not set -# CONFIG_SENSORS_ADCXX 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_LM95234 is not set -# CONFIG_SENSORS_LM95241 is not set -# CONFIG_SENSORS_LM95245 is not set -# CONFIG_SENSORS_PC87360 is not set -# CONFIG_SENSORS_PC87427 is not set -# CONFIG_SENSORS_NTC_THERMISTOR is not set -# CONFIG_SENSORS_NCT6683 is not set -# CONFIG_SENSORS_NCT6775 is not set -# CONFIG_SENSORS_NCT7802 is not set -# CONFIG_SENSORS_NCT7904 is not set -# CONFIG_SENSORS_PCF8591 is not set -# CONFIG_PMBUS is not set -CONFIG_SENSORS_PWM_FAN=y -# CONFIG_SENSORS_SHT15 is not set -# CONFIG_SENSORS_SHT21 is not set -# CONFIG_SENSORS_SHTC1 is not set -# CONFIG_SENSORS_SIS5595 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_SCH5627 is not set -# CONFIG_SENSORS_SCH5636 is not set -# CONFIG_SENSORS_SMM665 is not set -# CONFIG_SENSORS_ADC128D818 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_TC74 is not set -# CONFIG_SENSORS_THMC50 is not set -# CONFIG_SENSORS_TMP102 is not set -# CONFIG_SENSORS_TMP103 is not set -# CONFIG_SENSORS_TMP401 is not set -# CONFIG_SENSORS_TMP421 is not set -# CONFIG_SENSORS_VIA686A is not set -# CONFIG_SENSORS_VT1211 is not set -# CONFIG_SENSORS_VT8231 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 is not set -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=y -CONFIG_THERMAL_GOV_STEP_WISE=y -# CONFIG_THERMAL_GOV_BANG_BANG is not set -CONFIG_THERMAL_GOV_USER_SPACE=y -# CONFIG_THERMAL_GOV_POWER_ALLOCATOR is not set -CONFIG_CPU_THERMAL=y -CONFIG_CLOCK_THERMAL=y -# CONFIG_DEVFREQ_THERMAL is not set -# CONFIG_THERMAL_EMULATION is not set -CONFIG_IMX_THERMAL=y -CONFIG_WATCHDOG=y -CONFIG_WATCHDOG_CORE=y -# CONFIG_WATCHDOG_NOWAYOUT is not set - -# -# Watchdog Device Drivers -# -CONFIG_SOFT_WATCHDOG=m -# CONFIG_DA9052_WATCHDOG is not set -CONFIG_GPIO_WATCHDOG=m -# CONFIG_XILINX_WATCHDOG is not set -# CONFIG_CADENCE_WATCHDOG is not set -# CONFIG_DW_WATCHDOG is not set -# CONFIG_MAX63XX_WATCHDOG is not set -CONFIG_IMX2_WDT=y -# CONFIG_ALIM7101_WDT is not set -# CONFIG_I6300ESB_WDT is not set -# CONFIG_BCM7038_WDT is not set -# CONFIG_MEN_A21_WDT is not set - -# -# PCI-based Watchdog Cards -# -# CONFIG_PCIPCWATCHDOG is not set -# CONFIG_WDTPCI is not set - -# -# USB-based Watchdog Cards -# -# CONFIG_USBPCWATCHDOG is not set -CONFIG_SSB_POSSIBLE=y - -# -# Sonics Silicon Backplane -# -CONFIG_SSB=y -CONFIG_SSB_SPROM=y -CONFIG_SSB_BLOCKIO=y -CONFIG_SSB_PCIHOST_POSSIBLE=y -CONFIG_SSB_PCIHOST=y -CONFIG_SSB_B43_PCI_BRIDGE=y -CONFIG_SSB_SDIOHOST_POSSIBLE=y -CONFIG_SSB_SDIOHOST=y -# CONFIG_SSB_HOST_SOC is not set -# CONFIG_SSB_SILENT is not set -# CONFIG_SSB_DEBUG is not set -CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y -CONFIG_SSB_DRIVER_PCICORE=y -# CONFIG_SSB_DRIVER_GPIO is not set -CONFIG_BCMA_POSSIBLE=y - -# -# Broadcom specific AMBA -# -CONFIG_BCMA=y -CONFIG_BCMA_BLOCKIO=y -CONFIG_BCMA_HOST_PCI_POSSIBLE=y -CONFIG_BCMA_HOST_PCI=y -# CONFIG_BCMA_HOST_SOC is not set -CONFIG_BCMA_DRIVER_PCI=y -# CONFIG_BCMA_DRIVER_GMAC_CMN is not set -# CONFIG_BCMA_DRIVER_GPIO is not set -# CONFIG_BCMA_DEBUG is not set - -# -# Multifunction device drivers -# -CONFIG_MFD_CORE=y -# 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_ATMEL_FLEXCOM is not set -# CONFIG_MFD_ATMEL_HLCDC is not set -# CONFIG_MFD_BCM590XX is not set -# CONFIG_MFD_AXP20X is not set -# CONFIG_MFD_CROS_EC is not set -# CONFIG_MFD_ASIC3 is not set -# CONFIG_PMIC_DA903X is not set -CONFIG_PMIC_DA9052=y -CONFIG_MFD_DA9052_SPI=y -CONFIG_MFD_DA9052_I2C=y -# CONFIG_MFD_DA9055 is not set -# CONFIG_MFD_DA9062 is not set -# CONFIG_MFD_DA9063 is not set -# CONFIG_MFD_DA9150 is not set -CONFIG_MFD_MXC_HDMI=y -# CONFIG_MFD_DLN2 is not set -CONFIG_MFD_MC13XXX=y -CONFIG_MFD_MC13XXX_SPI=y -CONFIG_MFD_MC13XXX_I2C=y -# CONFIG_MFD_HI6421_PMIC is not set -# CONFIG_HTC_EGPIO is not set -# CONFIG_HTC_PASIC3 is not set -# CONFIG_HTC_I2CPLD is not set -# CONFIG_LPC_ICH is not set -# CONFIG_LPC_SCH is not set -# CONFIG_INTEL_SOC_PMIC is not set -# CONFIG_MFD_JANZ_CMODIO is not set -# CONFIG_MFD_KEMPLD is not set -CONFIG_MFD_88PM800=y -CONFIG_MFD_88PM805=y -CONFIG_MFD_88PM860X=y -# CONFIG_MFD_MAX14577 is not set -# CONFIG_MFD_MAX77686 is not set -# CONFIG_MFD_MAX77693 is not set -# CONFIG_MFD_MAX77843 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_MFD_MT6397 is not set -# CONFIG_MFD_MENF21BMC 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_UCB1400_CORE is not set -# CONFIG_MFD_PM8921_CORE is not set -# CONFIG_MFD_RDC321X is not set -# CONFIG_MFD_RTSX_PCI is not set -# CONFIG_MFD_RT5033 is not set -# CONFIG_MFD_RTSX_USB is not set -# CONFIG_MFD_RC5T583 is not set -# CONFIG_MFD_RK808 is not set -# CONFIG_MFD_RN5T618 is not set -# CONFIG_MFD_SEC_CORE is not set -CONFIG_MFD_SI476X_CORE=m -# CONFIG_MFD_SM501 is not set -# CONFIG_MFD_SKY81452 is not set -# CONFIG_MFD_SMSC is not set -# CONFIG_ABX500_CORE is not set -# CONFIG_MFD_STMPE is not set -CONFIG_MFD_SYSCON=y -# 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_TPS65218 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=m -# CONFIG_MFD_LM3533 is not set -# CONFIG_MFD_TC3589X is not set -# CONFIG_MFD_TMIO is not set -# CONFIG_MFD_T7L66XB is not set -# CONFIG_MFD_TC6387XB is not set -# CONFIG_MFD_TC6393XB is not set -# CONFIG_MFD_VX855 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_MFD_TDA1997X is not set -CONFIG_REGULATOR=y -# CONFIG_REGULATOR_DEBUG is not set -CONFIG_REGULATOR_FIXED_VOLTAGE=y -CONFIG_REGULATOR_VIRTUAL_CONSUMER=y -CONFIG_REGULATOR_USERSPACE_CONSUMER=m -CONFIG_REGULATOR_88PM800=y -CONFIG_REGULATOR_88PM8607=y -# CONFIG_REGULATOR_ACT8865 is not set -# CONFIG_REGULATOR_AD5398 is not set -CONFIG_REGULATOR_ANATOP=y -# CONFIG_REGULATOR_DA9052 is not set -# CONFIG_REGULATOR_DA9210 is not set -# CONFIG_REGULATOR_DA9211 is not set -# CONFIG_REGULATOR_FAN53555 is not set -CONFIG_REGULATOR_GPIO=y -# CONFIG_REGULATOR_ISL9305 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_LTC3589 is not set -# CONFIG_REGULATOR_LTC3676 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_MC13XXX_CORE=y -CONFIG_REGULATOR_MC13783=y -CONFIG_REGULATOR_MC13892=y -# CONFIG_REGULATOR_MT6311 is not set -CONFIG_REGULATOR_PFUZE100=y -CONFIG_REGULATOR_PWM=y -# 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_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_SDR_SUPPORT=y -CONFIG_MEDIA_RC_SUPPORT=y -CONFIG_MEDIA_CONTROLLER=y -CONFIG_VIDEO_DEV=y -CONFIG_VIDEO_V4L2_SUBDEV_API=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_V4L2_MEM2MEM_DEV=m -CONFIG_VIDEO_V4L2_INT_DEVICE=m -CONFIG_VIDEOBUF_GEN=y -CONFIG_VIDEOBUF_DMA_SG=m -CONFIG_VIDEOBUF_VMALLOC=m -CONFIG_VIDEOBUF_DMA_CONTIG=y -CONFIG_VIDEOBUF_DVB=m -CONFIG_VIDEOBUF2_CORE=y -CONFIG_VIDEOBUF2_MEMOPS=m -CONFIG_VIDEOBUF2_DMA_CONTIG=m -CONFIG_VIDEOBUF2_VMALLOC=m -CONFIG_VIDEOBUF2_DMA_SG=m -CONFIG_VIDEOBUF2_DVB=m -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=y -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_SANYO_DECODER=m -CONFIG_IR_SHARP_DECODER=m -CONFIG_IR_MCE_KBD_DECODER=m -CONFIG_IR_XMP_DECODER=m -CONFIG_RC_DEVICES=y -CONFIG_RC_ATI_REMOTE=m -CONFIG_IR_HIX5HD2=m -CONFIG_IR_IMON=m -CONFIG_IR_MCEUSB=m -CONFIG_IR_REDRAT3=m -CONFIG_IR_STREAMZAP=m -CONFIG_IR_IGORPLUGUSB=m -CONFIG_IR_IGUANA=m -CONFIG_IR_TTUSBIR=m -CONFIG_RC_LOOPBACK=m -CONFIG_IR_GPIO_CIR=m -CONFIG_MEDIA_USB_SUPPORT=y - -# -# Webcam devices -# -CONFIG_USB_VIDEO_CLASS=m -CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y -CONFIG_USB_GSPCA=m -CONFIG_USB_M5602=m -CONFIG_USB_STV06XX=m -CONFIG_USB_GL860=m -CONFIG_USB_GSPCA_BENQ=m -CONFIG_USB_GSPCA_CONEX=m -CONFIG_USB_GSPCA_CPIA1=m -CONFIG_USB_GSPCA_DTCS033=m -CONFIG_USB_GSPCA_ETOMS=m -CONFIG_USB_GSPCA_FINEPIX=m -CONFIG_USB_GSPCA_JEILINJ=m -CONFIG_USB_GSPCA_JL2005BCD=m -CONFIG_USB_GSPCA_KINECT=m -CONFIG_USB_GSPCA_KONICA=m -CONFIG_USB_GSPCA_MARS=m -CONFIG_USB_GSPCA_MR97310A=m -CONFIG_USB_GSPCA_NW80X=m -CONFIG_USB_GSPCA_OV519=m -CONFIG_USB_GSPCA_OV534=m -CONFIG_USB_GSPCA_OV534_9=m -CONFIG_USB_GSPCA_PAC207=m -CONFIG_USB_GSPCA_PAC7302=m -CONFIG_USB_GSPCA_PAC7311=m -CONFIG_USB_GSPCA_SE401=m -CONFIG_USB_GSPCA_SN9C2028=m -CONFIG_USB_GSPCA_SN9C20X=m -CONFIG_USB_GSPCA_SONIXB=m -CONFIG_USB_GSPCA_SONIXJ=m -CONFIG_USB_GSPCA_SPCA500=m -CONFIG_USB_GSPCA_SPCA501=m -CONFIG_USB_GSPCA_SPCA505=m -CONFIG_USB_GSPCA_SPCA506=m -CONFIG_USB_GSPCA_SPCA508=m -CONFIG_USB_GSPCA_SPCA561=m -CONFIG_USB_GSPCA_SPCA1528=m -CONFIG_USB_GSPCA_SQ905=m -CONFIG_USB_GSPCA_SQ905C=m -CONFIG_USB_GSPCA_SQ930X=m -CONFIG_USB_GSPCA_STK014=m -CONFIG_USB_GSPCA_STK1135=m -CONFIG_USB_GSPCA_STV0680=m -CONFIG_USB_GSPCA_SUNPLUS=m -CONFIG_USB_GSPCA_T613=m -CONFIG_USB_GSPCA_TOPRO=m -# CONFIG_USB_GSPCA_TOUPTEK is not set -CONFIG_USB_GSPCA_TV8532=m -CONFIG_USB_GSPCA_VC032X=m -CONFIG_USB_GSPCA_VICAM=m -CONFIG_USB_GSPCA_XIRLINK_CIT=m -CONFIG_USB_GSPCA_ZC3XX=m -CONFIG_USB_PWC=m -# CONFIG_USB_PWC_DEBUG is not set -CONFIG_USB_PWC_INPUT_EVDEV=y -CONFIG_VIDEO_CPIA2=m -CONFIG_USB_ZR364XX=m -CONFIG_USB_STKWEBCAM=m -CONFIG_USB_S2255=m -CONFIG_VIDEO_USBTV=m - -# -# 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=m -CONFIG_VIDEO_USBVISION=m -CONFIG_VIDEO_STK1160_COMMON=m -CONFIG_VIDEO_STK1160_AC97=y -CONFIG_VIDEO_STK1160=m -CONFIG_VIDEO_GO7007=m -CONFIG_VIDEO_GO7007_USB=m -CONFIG_VIDEO_GO7007_LOADER=m -CONFIG_VIDEO_GO7007_USB_S2250_BOARD=m - -# -# Analog/digital TV USB devices -# -CONFIG_VIDEO_AU0828=m -CONFIG_VIDEO_AU0828_V4L2=y -CONFIG_VIDEO_AU0828_RC=y -CONFIG_VIDEO_CX231XX=m -CONFIG_VIDEO_CX231XX_RC=y -CONFIG_VIDEO_CX231XX_ALSA=m -CONFIG_VIDEO_CX231XX_DVB=m -CONFIG_VIDEO_TM6000=m -CONFIG_VIDEO_TM6000_ALSA=m -CONFIG_VIDEO_TM6000_DVB=m - -# -# Digital TV USB devices -# -CONFIG_DVB_USB=m -# CONFIG_DVB_USB_DEBUG is not set -CONFIG_DVB_USB_A800=m -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=m -CONFIG_DVB_USB_CXUSB=m -CONFIG_DVB_USB_M920X=m -CONFIG_DVB_USB_DIGITV=m -CONFIG_DVB_USB_VP7045=m -CONFIG_DVB_USB_VP702X=m -CONFIG_DVB_USB_GP8PSK=m -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=m -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=m -CONFIG_DVB_USB_AZ6007=m -CONFIG_DVB_USB_CE6230=m -CONFIG_DVB_USB_EC168=m -CONFIG_DVB_USB_GL861=m -CONFIG_DVB_USB_LME2510=m -CONFIG_DVB_USB_MXL111SF=m -CONFIG_DVB_USB_RTL28XXU=m -CONFIG_DVB_USB_DVBSKY=m -CONFIG_DVB_TTUSB_BUDGET=m -CONFIG_DVB_TTUSB_DEC=m -CONFIG_SMS_USB_DRV=m -CONFIG_DVB_B2C2_FLEXCOP_USB=m -# CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG is not set -CONFIG_DVB_AS102=m - -# -# Webcam, TV (analog/digital) USB devices -# -CONFIG_VIDEO_EM28XX=m -CONFIG_VIDEO_EM28XX_V4L2=m -CONFIG_VIDEO_EM28XX_ALSA=m -CONFIG_VIDEO_EM28XX_DVB=m -CONFIG_VIDEO_EM28XX_RC=m - -# -# Software defined radio USB devices -# -CONFIG_USB_AIRSPY=m -CONFIG_USB_HACKRF=m -CONFIG_USB_MSI2500=m -CONFIG_MEDIA_PCI_SUPPORT=y - -# -# Media capture support -# -CONFIG_VIDEO_SOLO6X10=m -CONFIG_VIDEO_TW68=m - -# -# Media capture/analog TV support -# -CONFIG_VIDEO_IVTV=m -CONFIG_VIDEO_IVTV_ALSA=m -CONFIG_VIDEO_FB_IVTV=m -CONFIG_VIDEO_HEXIUM_GEMINI=m -CONFIG_VIDEO_HEXIUM_ORION=m -CONFIG_VIDEO_MXB=m -CONFIG_VIDEO_DT3155=m - -# -# Media capture/analog/hybrid TV support -# -CONFIG_VIDEO_CX18=m -CONFIG_VIDEO_CX18_ALSA=m -CONFIG_VIDEO_CX23885=m -CONFIG_MEDIA_ALTERA_CI=m -CONFIG_VIDEO_CX25821=m -CONFIG_VIDEO_CX25821_ALSA=m -CONFIG_VIDEO_CX88=m -CONFIG_VIDEO_CX88_ALSA=m -CONFIG_VIDEO_CX88_BLACKBIRD=m -CONFIG_VIDEO_CX88_DVB=m -CONFIG_VIDEO_CX88_ENABLE_VP3054=y -CONFIG_VIDEO_CX88_VP3054=m -CONFIG_VIDEO_CX88_MPEG=m -CONFIG_VIDEO_BT848=m -CONFIG_DVB_BT8XX=m -CONFIG_VIDEO_SAA7134=m -CONFIG_VIDEO_SAA7134_ALSA=m -CONFIG_VIDEO_SAA7134_RC=y -CONFIG_VIDEO_SAA7134_DVB=m -CONFIG_VIDEO_SAA7134_GO7007=m -CONFIG_VIDEO_SAA7164=m - -# -# Media digital TV PCI Adapters -# -CONFIG_DVB_AV7110_IR=y -CONFIG_DVB_AV7110=m -CONFIG_DVB_AV7110_OSD=y -CONFIG_DVB_BUDGET_CORE=m -CONFIG_DVB_BUDGET=m -CONFIG_DVB_BUDGET_CI=m -CONFIG_DVB_BUDGET_AV=m -CONFIG_DVB_BUDGET_PATCH=m -CONFIG_DVB_B2C2_FLEXCOP_PCI=m -# CONFIG_DVB_B2C2_FLEXCOP_PCI_DEBUG is not set -CONFIG_DVB_PLUTO2=m -CONFIG_DVB_DM1105=m -CONFIG_DVB_PT1=m -CONFIG_DVB_PT3=m -CONFIG_MANTIS_CORE=m -CONFIG_DVB_MANTIS=m -CONFIG_DVB_HOPPER=m -CONFIG_DVB_NGENE=m -CONFIG_DVB_DDBRIDGE=m -CONFIG_DVB_SMIPCIE=m -# CONFIG_DVB_NETUP_UNIDVB is not set -CONFIG_V4L_PLATFORM_DRIVERS=y -# CONFIG_VIDEO_CAFE_CCIC is not set -CONFIG_VIDEO_MXC_OUTPUT=y -CONFIG_VIDEO_MXC_CAPTURE=m - -# -# MXC Camera/V4L2 PRP Features support -# -CONFIG_VIDEO_MXC_IPU_CAMERA=y -# CONFIG_VIDEO_MXC_CSI_CAMERA is not set -# CONFIG_MXC_TVIN_TDA1997X is not set -CONFIG_MXC_CAMERA_OV5640=m -CONFIG_MXC_CAMERA_OV5642=m -CONFIG_MXC_CAMERA_OV5640_MIPI=m -CONFIG_MXC_CAMERA_OV5647_MIPI=m -# CONFIG_MXC_HDMI_CSI2_TC358743 is not set -# CONFIG_MXC_TVIN_ADV7180 is not set -CONFIG_MXC_IPU_DEVICE_QUEUE_SDC=m -CONFIG_MXC_IPU_PRP_ENC=m -CONFIG_MXC_IPU_CSI_ENC=m -CONFIG_VIDEO_MXC_IPU_OUTPUT=y -CONFIG_VIDEO_MXC_PXP_V4L2=y -CONFIG_SOC_CAMERA=y -CONFIG_SOC_CAMERA_PLATFORM=y -# CONFIG_VIDEO_XILINX is not set -CONFIG_V4L_MEM2MEM_DRIVERS=y -# CONFIG_VIDEO_CODA is not set -CONFIG_VIDEO_MEM2MEM_DEINTERLACE=m -CONFIG_VIDEO_SH_VEU=m -# CONFIG_V4L_TEST_DRIVERS is not set -# CONFIG_DVB_PLATFORM_DRIVERS is not set - -# -# Supported MMC/SDIO adapters -# -CONFIG_SMS_SDIO_DRV=m -CONFIG_RADIO_ADAPTERS=y -CONFIG_RADIO_TEA575X=m -CONFIG_RADIO_SI470X=y -CONFIG_USB_SI470X=m -CONFIG_I2C_SI470X=m -CONFIG_RADIO_SI4713=m -CONFIG_USB_SI4713=m -CONFIG_PLATFORM_SI4713=m -CONFIG_I2C_SI4713=m -CONFIG_RADIO_SI476X=m -CONFIG_USB_MR800=m -CONFIG_USB_DSBR=m -CONFIG_RADIO_MAXIRADIO=m -CONFIG_RADIO_SHARK=m -CONFIG_RADIO_SHARK2=m -CONFIG_USB_KEENE=m -CONFIG_USB_RAREMONO=m -CONFIG_USB_MA901=m -CONFIG_RADIO_TEA5764=m -CONFIG_RADIO_SAA7706H=m -CONFIG_RADIO_TEF6862=m -CONFIG_RADIO_WL1273=m - -# -# Texas Instruments WL128x FM driver (ST based) -# -CONFIG_RADIO_WL128X=m -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_VIDEO_SAA7146=m -CONFIG_VIDEO_SAA7146_VV=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 is not set -CONFIG_MEDIA_ATTACH=y -CONFIG_VIDEO_IR_I2C=m - -# -# Encoders, decoders, sensors and other helper chips -# - -# -# Audio decoders, processors and mixers -# -CONFIG_VIDEO_TVAUDIO=m -CONFIG_VIDEO_TDA7432=m -CONFIG_VIDEO_TDA9840=m -CONFIG_VIDEO_TEA6415C=m -CONFIG_VIDEO_TEA6420=m -CONFIG_VIDEO_MSP3400=m -CONFIG_VIDEO_CS5345=m -CONFIG_VIDEO_CS53L32A=m -CONFIG_VIDEO_TLV320AIC23B=m -CONFIG_VIDEO_UDA1342=m -CONFIG_VIDEO_WM8775=m -CONFIG_VIDEO_WM8739=m -CONFIG_VIDEO_VP27SMPX=m -CONFIG_VIDEO_SONY_BTF_MPX=m - -# -# RDS decoders -# -CONFIG_VIDEO_SAA6588=m - -# -# Video decoders -# -CONFIG_VIDEO_ADV7180=m -CONFIG_VIDEO_ADV7183=m -CONFIG_VIDEO_ADV7604=m -CONFIG_VIDEO_ADV7842=m -CONFIG_VIDEO_BT819=m -CONFIG_VIDEO_BT856=m -CONFIG_VIDEO_BT866=m -CONFIG_VIDEO_KS0127=m -CONFIG_VIDEO_ML86V7667=m -CONFIG_VIDEO_SAA7110=m -CONFIG_VIDEO_SAA711X=m -CONFIG_VIDEO_TC358743=m -CONFIG_VIDEO_TVP514X=m -CONFIG_VIDEO_TVP5150=m -CONFIG_VIDEO_TVP7002=m -CONFIG_VIDEO_TW2804=m -CONFIG_VIDEO_TW9903=m -CONFIG_VIDEO_TW9906=m -CONFIG_VIDEO_VPX3220=m - -# -# Video and audio decoders -# -CONFIG_VIDEO_SAA717X=m -CONFIG_VIDEO_CX25840=m - -# -# Video encoders -# -CONFIG_VIDEO_SAA7127=m -CONFIG_VIDEO_SAA7185=m -CONFIG_VIDEO_ADV7170=m -CONFIG_VIDEO_ADV7175=m -CONFIG_VIDEO_ADV7343=m -CONFIG_VIDEO_ADV7393=m -CONFIG_VIDEO_ADV7511=m -CONFIG_VIDEO_AD9389B=m -CONFIG_VIDEO_AK881X=m -CONFIG_VIDEO_THS8200=m - -# -# Camera sensor devices -# -CONFIG_VIDEO_APTINA_PLL=m -CONFIG_VIDEO_SMIAPP_PLL=m -CONFIG_VIDEO_OV2659=m -CONFIG_VIDEO_OV7640=m -CONFIG_VIDEO_OV7670=m -CONFIG_VIDEO_OV9650=m -CONFIG_VIDEO_VS6624=m -CONFIG_VIDEO_MT9M032=m -CONFIG_VIDEO_MT9P031=m -CONFIG_VIDEO_MT9T001=m -CONFIG_VIDEO_MT9V011=m -CONFIG_VIDEO_MT9V032=m -CONFIG_VIDEO_SR030PC30=m -CONFIG_VIDEO_NOON010PC30=m -CONFIG_VIDEO_M5MOLS=m -CONFIG_VIDEO_S5K6AA=m -CONFIG_VIDEO_S5K6A3=m -CONFIG_VIDEO_S5K4ECGX=m -CONFIG_VIDEO_S5K5BAF=m -CONFIG_VIDEO_SMIAPP=m -CONFIG_VIDEO_S5C73M3=m - -# -# Flash devices -# -CONFIG_VIDEO_ADP1653=m -CONFIG_VIDEO_AS3645A=m -CONFIG_VIDEO_LM3560=m -CONFIG_VIDEO_LM3646=m - -# -# Video improvement chips -# -CONFIG_VIDEO_UPD64031A=m -CONFIG_VIDEO_UPD64083=m - -# -# Audio/Video compression chips -# -CONFIG_VIDEO_SAA6752HS=m - -# -# Miscellaneous helper chips -# -CONFIG_VIDEO_THS7303=m -CONFIG_VIDEO_M52790=m - -# -# Sensors used on soc_camera driver -# - -# -# soc_camera sensor drivers -# -CONFIG_SOC_CAMERA_IMX074=m -CONFIG_SOC_CAMERA_MT9M001=m -CONFIG_SOC_CAMERA_MT9M111=m -CONFIG_SOC_CAMERA_MT9T031=m -CONFIG_SOC_CAMERA_MT9T112=m -CONFIG_SOC_CAMERA_MT9V022=m -CONFIG_SOC_CAMERA_OV2640=m -CONFIG_SOC_CAMERA_OV5642=m -CONFIG_SOC_CAMERA_OV6650=m -CONFIG_SOC_CAMERA_OV772X=m -CONFIG_SOC_CAMERA_OV9640=m -CONFIG_SOC_CAMERA_OV9740=m -CONFIG_SOC_CAMERA_RJ54N1=m -CONFIG_SOC_CAMERA_TW9910=m -CONFIG_MEDIA_TUNER=y - -# -# Customize TV tuners -# -CONFIG_MEDIA_TUNER_SIMPLE=m -CONFIG_MEDIA_TUNER_TDA8290=m -CONFIG_MEDIA_TUNER_TDA827X=m -CONFIG_MEDIA_TUNER_TDA18271=m -CONFIG_MEDIA_TUNER_TDA9887=m -CONFIG_MEDIA_TUNER_TEA5761=m -CONFIG_MEDIA_TUNER_TEA5767=m -CONFIG_MEDIA_TUNER_MSI001=m -CONFIG_MEDIA_TUNER_MT20XX=m -CONFIG_MEDIA_TUNER_MT2060=m -CONFIG_MEDIA_TUNER_MT2063=m -CONFIG_MEDIA_TUNER_MT2266=m -CONFIG_MEDIA_TUNER_MT2131=m -CONFIG_MEDIA_TUNER_QT1010=m -CONFIG_MEDIA_TUNER_XC2028=m -CONFIG_MEDIA_TUNER_XC5000=m -CONFIG_MEDIA_TUNER_XC4000=m -CONFIG_MEDIA_TUNER_MXL5005S=m -CONFIG_MEDIA_TUNER_MXL5007T=m -CONFIG_MEDIA_TUNER_MC44S803=m -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_M88RS6000T=m -CONFIG_MEDIA_TUNER_TUA9001=m -CONFIG_MEDIA_TUNER_SI2157=m -CONFIG_MEDIA_TUNER_IT913X=m -CONFIG_MEDIA_TUNER_R820T=m -CONFIG_MEDIA_TUNER_MXL301RF=m -CONFIG_MEDIA_TUNER_QM1D1C0042=m - -# -# Customise DVB Frontends -# - -# -# 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 -CONFIG_DVB_SI2165=m - -# -# DVB-S (satellite) frontends -# -CONFIG_DVB_CX24110=m -CONFIG_DVB_CX24123=m -CONFIG_DVB_MT312=m -CONFIG_DVB_ZL10036=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_TDA8083=m -CONFIG_DVB_TDA10086=m -CONFIG_DVB_TDA8261=m -CONFIG_DVB_VES1X93=m -CONFIG_DVB_TUNER_ITD1000=m -CONFIG_DVB_TUNER_CX24113=m -CONFIG_DVB_TDA826X=m -CONFIG_DVB_TUA6100=m -CONFIG_DVB_CX24116=m -CONFIG_DVB_CX24117=m -CONFIG_DVB_CX24120=m -CONFIG_DVB_SI21XX=m -CONFIG_DVB_TS2020=m -CONFIG_DVB_DS3000=m -CONFIG_DVB_MB86A16=m -CONFIG_DVB_TDA10071=m - -# -# DVB-T (terrestrial) frontends -# -CONFIG_DVB_SP8870=m -CONFIG_DVB_SP887X=m -CONFIG_DVB_CX22700=m -CONFIG_DVB_CX22702=m -CONFIG_DVB_S5H1432=m -CONFIG_DVB_DRXD=m -CONFIG_DVB_L64781=m -CONFIG_DVB_TDA1004X=m -CONFIG_DVB_NXT6000=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_DIB9000=m -CONFIG_DVB_TDA10048=m -CONFIG_DVB_AF9013=m -CONFIG_DVB_EC100=m -CONFIG_DVB_HD29L2=m -CONFIG_DVB_STV0367=m -CONFIG_DVB_CXD2820R=m -CONFIG_DVB_CXD2841ER=m -CONFIG_DVB_RTL2830=m -CONFIG_DVB_RTL2832=m -CONFIG_DVB_RTL2832_SDR=m -CONFIG_DVB_SI2168=m -CONFIG_DVB_AS102_FE=m - -# -# DVB-C (cable) frontends -# -CONFIG_DVB_VES1820=m -CONFIG_DVB_TDA10021=m -CONFIG_DVB_TDA10023=m -CONFIG_DVB_STV0297=m - -# -# ATSC (North American/Korean Terrestrial/Cable DTV) frontends -# -CONFIG_DVB_NXT200X=m -CONFIG_DVB_OR51211=m -CONFIG_DVB_OR51132=m -CONFIG_DVB_BCM3510=m -CONFIG_DVB_LGDT330X=m -CONFIG_DVB_LGDT3305=m -CONFIG_DVB_LGDT3306A=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 - -# -# ISDB-S (satellite) & ISDB-T (terrestrial) frontends -# -CONFIG_DVB_TC90522=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_DRX39XYJ=m -CONFIG_DVB_LNBH25=m -CONFIG_DVB_LNBP21=m -CONFIG_DVB_LNBP22=m -CONFIG_DVB_ISL6405=m -CONFIG_DVB_ISL6421=m -CONFIG_DVB_ISL6423=m -CONFIG_DVB_A8293=m -CONFIG_DVB_SP2=m -CONFIG_DVB_LGS8GL5=m -CONFIG_DVB_LGS8GXX=m -CONFIG_DVB_ATBM8830=m -CONFIG_DVB_TDA665x=m -CONFIG_DVB_IX2505V=m -CONFIG_DVB_M88RS2000=m -CONFIG_DVB_AF9033=m -CONFIG_DVB_HORUS3A=m -CONFIG_DVB_ASCOT2E=m - -# -# Tools to develop new frontends -# -CONFIG_DVB_DUMMY_FE=m - -# -# Graphics support -# -CONFIG_VGA_ARB=y -CONFIG_VGA_ARB_MAX_GPUS=16 -# CONFIG_IMX_IPUV3_CORE is not set -CONFIG_DRM=y -# CONFIG_DRM_FBDEV_EMULATION is not set -# CONFIG_DRM_TDFX is not set -# CONFIG_DRM_R128 is not set -# CONFIG_DRM_RADEON is not set -# CONFIG_DRM_AMDGPU is not set -# CONFIG_DRM_NOUVEAU is not set -# CONFIG_DRM_MGA is not set -# CONFIG_DRM_VIA is not set -# CONFIG_DRM_SAVAGE is not set -# CONFIG_DRM_VGEM is not set -# CONFIG_DRM_EXYNOS is not set -# CONFIG_DRM_UDL is not set -# CONFIG_DRM_AST is not set -# CONFIG_DRM_MGAG200 is not set -# CONFIG_DRM_CIRRUS_QEMU is not set -# CONFIG_DRM_ARMADA is not set -# CONFIG_DRM_TILCDC is not set -# CONFIG_DRM_QXL is not set -# CONFIG_DRM_BOCHS is not set -# CONFIG_DRM_VIRTIO_GPU is not set -# CONFIG_DRM_FSL_DCU is not set -CONFIG_DRM_BRIDGE=y - -# -# Display Interface Bridges -# -# CONFIG_DRM_NXP_PTN3460 is not set -# CONFIG_DRM_PARADE_PS8622 is not set -# CONFIG_DRM_STI is not set -CONFIG_DRM_VIVANTE=m - -# -# Frame buffer Devices -# -CONFIG_FB=y -CONFIG_FIRMWARE_EDID=y -CONFIG_FB_CMDLINE=y -# 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=y -CONFIG_FB_MODE_HELPERS=y -# CONFIG_FB_TILEBLITTING is not set - -# -# Frame buffer hardware drivers -# -# CONFIG_FB_CIRRUS is not set -# CONFIG_FB_PM2 is not set -# CONFIG_FB_IMX is not set -# CONFIG_FB_CYBER2000 is not set -# CONFIG_FB_ASILIANT is not set -# CONFIG_FB_IMSTT is not set -# CONFIG_FB_UVESA is not set -# CONFIG_FB_OPENCORES is not set -# CONFIG_FB_S1D13XXX is not set -# CONFIG_FB_NVIDIA is not set -# CONFIG_FB_RIVA is not set -# CONFIG_FB_I740 is not set -# CONFIG_FB_MATROX is not set -# CONFIG_FB_RADEON is not set -# CONFIG_FB_ATY128 is not set -# CONFIG_FB_ATY is not set -# CONFIG_FB_S3 is not set -# CONFIG_FB_SAVAGE is not set -# CONFIG_FB_SIS is not set -# CONFIG_FB_NEOMAGIC is not set -# CONFIG_FB_KYRO is not set -# CONFIG_FB_3DFX is not set -# CONFIG_FB_VOODOO1 is not set -# CONFIG_FB_VT8623 is not set -# CONFIG_FB_TRIDENT is not set -# CONFIG_FB_ARK is not set -# CONFIG_FB_PM3 is not set -# CONFIG_FB_CARMINE is not set -# CONFIG_FB_SMSCUFX is not set -# CONFIG_FB_UDL is not set -# CONFIG_FB_IBM_GXT4500 is not set -# CONFIG_FB_VIRTUAL is not set -# CONFIG_FB_METRONOME is not set -# CONFIG_FB_MB862XX is not set -# CONFIG_FB_BROADSHEET is not set -# CONFIG_FB_AUO_K190X is not set -# CONFIG_FB_MXS is not set -# CONFIG_FB_SIMPLE is not set -# CONFIG_FB_SSD1307 is not set -# CONFIG_FB_SM712 is not set -CONFIG_FB_MXC=y -CONFIG_FB_MXC_SYNC_PANEL=y -# CONFIG_FB_MXC_TVOUT_ADV739X is not set -CONFIG_FB_MXC_LDB=y -# CONFIG_FB_MXC_MIPI_DSI is not set -CONFIG_FB_MXC_HDMI=y -CONFIG_FB_MXC_DCIC=y -CONFIG_FB_MXC_EDID=y -# CONFIG_FB_MXC_EINK_PANEL 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=m -# 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 is not set -CONFIG_BACKLIGHT_PWM=m -# CONFIG_BACKLIGHT_DA9052 is not set -# CONFIG_BACKLIGHT_PM8941_WLED is not set -# CONFIG_BACKLIGHT_ADP8860 is not set -# CONFIG_BACKLIGHT_ADP8870 is not set -# CONFIG_BACKLIGHT_88PM860X 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_VGASTATE is not set -CONFIG_VIDEOMODE_HELPERS=y -CONFIG_HDMI=y - -# -# 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_SOUND=y -# CONFIG_SOUND_OSS_CORE is not set -CONFIG_SND=y -CONFIG_SND_TIMER=y -CONFIG_SND_PCM=y -CONFIG_SND_DMAENGINE_PCM=y -CONFIG_SND_HWDEP=m -CONFIG_SND_RAWMIDI=m -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_PCM_TIMER=y -CONFIG_SND_HRTIMER=y -# CONFIG_SND_DYNAMIC_MINORS is not set -# CONFIG_SND_SUPPORT_OLD_API is not set -CONFIG_SND_PROC_FS=y -# CONFIG_SND_VERBOSE_PROCFS is not set -# 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_MPU401_UART=m -CONFIG_SND_AC97_CODEC=m -CONFIG_SND_DRIVERS=y -CONFIG_SND_DUMMY=m -CONFIG_SND_ALOOP=m -CONFIG_SND_MTPAV=m -CONFIG_SND_SERIAL_U16550=m -CONFIG_SND_MPU401=m -CONFIG_SND_AC97_POWER_SAVE=y -CONFIG_SND_AC97_POWER_SAVE_DEFAULT=1 -CONFIG_SND_PCI=y -# CONFIG_SND_AD1889 is not set -# CONFIG_SND_ATIIXP is not set -# CONFIG_SND_ATIIXP_MODEM is not set -# CONFIG_SND_AU8810 is not set -# CONFIG_SND_AU8820 is not set -# CONFIG_SND_AU8830 is not set -# CONFIG_SND_AW2 is not set -# CONFIG_SND_BT87X is not set -# CONFIG_SND_CA0106 is not set -# CONFIG_SND_CMIPCI is not set -# CONFIG_SND_OXYGEN is not set -# CONFIG_SND_CS4281 is not set -# CONFIG_SND_CS46XX is not set -# CONFIG_SND_CTXFI is not set -# CONFIG_SND_DARLA20 is not set -# CONFIG_SND_GINA20 is not set -# CONFIG_SND_LAYLA20 is not set -# CONFIG_SND_DARLA24 is not set -# CONFIG_SND_GINA24 is not set -# CONFIG_SND_LAYLA24 is not set -# CONFIG_SND_MONA is not set -# CONFIG_SND_MIA is not set -# CONFIG_SND_ECHO3G is not set -# CONFIG_SND_INDIGO is not set -# CONFIG_SND_INDIGOIO is not set -# CONFIG_SND_INDIGODJ is not set -# CONFIG_SND_INDIGOIOX is not set -# CONFIG_SND_INDIGODJX is not set -# CONFIG_SND_ENS1370 is not set -# CONFIG_SND_ENS1371 is not set -# CONFIG_SND_FM801 is not set -# CONFIG_SND_HDSP is not set -# CONFIG_SND_HDSPM is not set -# CONFIG_SND_ICE1724 is not set -# CONFIG_SND_INTEL8X0 is not set -# CONFIG_SND_INTEL8X0M is not set -# CONFIG_SND_KORG1212 is not set -# CONFIG_SND_LOLA is not set -# CONFIG_SND_LX6464ES is not set -# CONFIG_SND_MIXART is not set -# CONFIG_SND_NM256 is not set -# CONFIG_SND_PCXHR is not set -# CONFIG_SND_RIPTIDE is not set -# CONFIG_SND_RME32 is not set -# CONFIG_SND_RME96 is not set -# CONFIG_SND_RME9652 is not set -# CONFIG_SND_SE6X is not set -# CONFIG_SND_VIA82XX is not set -# CONFIG_SND_VIA82XX_MODEM is not set -# CONFIG_SND_VIRTUOSO is not set -# CONFIG_SND_VX222 is not set -# CONFIG_SND_YMFPCI is not set - -# -# HD-Audio -# -# CONFIG_SND_HDA_INTEL is not set -CONFIG_SND_HDA_PREALLOC_SIZE=1024 -CONFIG_SND_ARM=y -CONFIG_SND_SPI=y -CONFIG_SND_USB=y -CONFIG_SND_USB_AUDIO=m -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_BCD2000=m -CONFIG_SND_USB_LINE6=m -CONFIG_SND_USB_POD=m -CONFIG_SND_USB_PODHD=m -CONFIG_SND_USB_TONEPORT=m -CONFIG_SND_USB_VARIAX=m -CONFIG_SND_SOC=y -CONFIG_SND_SOC_AC97_BUS=y -CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y -# CONFIG_SND_ATMEL_SOC is not set -# CONFIG_SND_DESIGNWARE_I2S is not set - -# -# SoC Audio for Freescale CPUs -# - -# -# Common SoC Audio options for Freescale CPUs: -# -# CONFIG_SND_SOC_FSL_ASRC is not set -CONFIG_SND_SOC_FSL_SAI=y -CONFIG_SND_SOC_FSL_SSI=y -CONFIG_SND_SOC_FSL_SPDIF=y -CONFIG_SND_SOC_FSL_ESAI=y -CONFIG_SND_SOC_FSL_HDMI=y -CONFIG_SND_SOC_FSL_UTILS=y -CONFIG_SND_SOC_IMX_PCM_DMA=y -CONFIG_SND_SOC_IMX_HDMI_DMA=y -CONFIG_SND_SOC_IMX_AUDMUX=y -CONFIG_SND_IMX_SOC=y - -# -# SoC Audio support for Freescale i.MX boards: -# -# CONFIG_SND_SOC_EUKREA_TLV320 is not set -# CONFIG_SND_SOC_IMX_WM8731 is not set -# CONFIG_SND_SOC_IMX_WM8962 is not set -# CONFIG_SND_SOC_IMX_ES8328 is not set -CONFIG_SND_SOC_IMX_SGTL5000=y -CONFIG_SND_SOC_IMX_AC97_VT1613=y -CONFIG_SND_SOC_IMX_SPDIF=y -# CONFIG_SND_SOC_IMX_MC13783 is not set -CONFIG_SND_SOC_IMX_HDMI=y -CONFIG_SND_SOC_FSL_ASOC_CARD=m -# CONFIG_SND_SOC_IMX_TDA1997X is not set - -# -# Allwinner SoC Audio support -# -# CONFIG_SND_SUN4I_CODEC is not set -# CONFIG_SND_SOC_XTFPGA_I2S is not set -CONFIG_SND_SOC_I2C_AND_SPI=y - -# -# CODEC drivers -# -# CONFIG_SND_SOC_AC97_CODEC is not set -# CONFIG_SND_SOC_ADAU1701 is not set -# CONFIG_SND_SOC_AK4104 is not set -# CONFIG_SND_SOC_AK4554 is not set -# CONFIG_SND_SOC_AK4613 is not set -# CONFIG_SND_SOC_AK4642 is not set -# CONFIG_SND_SOC_AK5386 is not set -# CONFIG_SND_SOC_ALC5623 is not set -# CONFIG_SND_SOC_CS35L32 is not set -# CONFIG_SND_SOC_CS42L51_I2C is not set -# CONFIG_SND_SOC_CS42L52 is not set -# CONFIG_SND_SOC_CS42L56 is not set -# CONFIG_SND_SOC_CS42L73 is not set -# CONFIG_SND_SOC_CS4265 is not set -# CONFIG_SND_SOC_CS4270 is not set -# CONFIG_SND_SOC_CS4271_I2C is not set -# CONFIG_SND_SOC_CS4271_SPI is not set -# CONFIG_SND_SOC_CS42XX8_I2C is not set -# CONFIG_SND_SOC_CS4349 is not set -CONFIG_SND_SOC_HDMI_CODEC=y -# CONFIG_SND_SOC_ES8328 is not set -# CONFIG_SND_SOC_GTM601 is not set -# CONFIG_SND_SOC_PCM1681 is not set -# CONFIG_SND_SOC_PCM1792A is not set -# CONFIG_SND_SOC_PCM512x_I2C is not set -# CONFIG_SND_SOC_PCM512x_SPI is not set -# CONFIG_SND_SOC_RT5631 is not set -# CONFIG_SND_SOC_RT5677_SPI is not set -CONFIG_SND_SOC_SGTL5000=y -CONFIG_SND_SOC_VT1613=y -CONFIG_SND_SOC_SI476X=m -# CONFIG_SND_SOC_SIRF_AUDIO_CODEC is not set -CONFIG_SND_SOC_SPDIF=y -# CONFIG_SND_SOC_SSM2602_SPI is not set -# CONFIG_SND_SOC_SSM2602_I2C is not set -# CONFIG_SND_SOC_SSM4567 is not set -# CONFIG_SND_SOC_STA32X is not set -# CONFIG_SND_SOC_STA350 is not set -# CONFIG_SND_SOC_STI_SAS is not set -# CONFIG_SND_SOC_TAS2552 is not set -# CONFIG_SND_SOC_TAS5086 is not set -# CONFIG_SND_SOC_TAS571X is not set -# CONFIG_SND_SOC_TFA9879 is not set -# CONFIG_SND_SOC_TLV320AIC23_I2C is not set -# CONFIG_SND_SOC_TLV320AIC23_SPI is not set -# CONFIG_SND_SOC_TLV320AIC31XX is not set -# CONFIG_SND_SOC_TLV320AIC3X is not set -# CONFIG_SND_SOC_TS3A227E is not set -# CONFIG_SND_SOC_WM8510 is not set -# CONFIG_SND_SOC_WM8523 is not set -# CONFIG_SND_SOC_WM8580 is not set -# CONFIG_SND_SOC_WM8711 is not set -# CONFIG_SND_SOC_WM8728 is not set -# CONFIG_SND_SOC_WM8731 is not set -# CONFIG_SND_SOC_WM8737 is not set -# CONFIG_SND_SOC_WM8741 is not set -# CONFIG_SND_SOC_WM8750 is not set -# CONFIG_SND_SOC_WM8753 is not set -# CONFIG_SND_SOC_WM8770 is not set -# CONFIG_SND_SOC_WM8776 is not set -# CONFIG_SND_SOC_WM8804_I2C is not set -# CONFIG_SND_SOC_WM8804_SPI is not set -# CONFIG_SND_SOC_WM8903 is not set -CONFIG_SND_SOC_WM8962=m -# CONFIG_SND_SOC_WM8978 is not set -# CONFIG_SND_SOC_TPA6130A2 is not set -# CONFIG_SND_SIMPLE_CARD is not set -# CONFIG_SOUND_PRIME is not set -CONFIG_AC97_BUS=y - -# -# HID support -# -CONFIG_HID=y -CONFIG_HID_BATTERY_STRENGTH=y -CONFIG_HIDRAW=y -CONFIG_UHID=m -CONFIG_HID_GENERIC=y - -# -# Special HID drivers -# -CONFIG_HID_A4TECH=m -CONFIG_HID_ACRUX=m -CONFIG_HID_ACRUX_FF=y -CONFIG_HID_APPLE=m -CONFIG_HID_APPLEIR=m -CONFIG_HID_AUREAL=m -CONFIG_HID_BELKIN=m -CONFIG_HID_BETOP_FF=m -CONFIG_HID_CHERRY=m -CONFIG_HID_CHICONY=m -# CONFIG_HID_CORSAIR is not set -CONFIG_HID_PRODIKEYS=m -CONFIG_HID_CP2112=m -CONFIG_HID_CYPRESS=m -CONFIG_HID_DRAGONRISE=m -CONFIG_DRAGONRISE_FF=y -CONFIG_HID_EMS_FF=m -CONFIG_HID_ELECOM=m -CONFIG_HID_ELO=m -CONFIG_HID_EZKEY=m -# CONFIG_HID_GEMBIRD is not set -# CONFIG_HID_GFRM is not set -CONFIG_HID_HOLTEK=m -CONFIG_HOLTEK_FF=y -CONFIG_HID_GT683R=m -CONFIG_HID_KEYTOUCH=m -CONFIG_HID_KYE=m -CONFIG_HID_UCLOGIC=m -CONFIG_HID_WALTOP=m -CONFIG_HID_GYRATION=m -CONFIG_HID_ICADE=m -CONFIG_HID_TWINHAN=m -CONFIG_HID_KENSINGTON=m -CONFIG_HID_LCPOWER=m -CONFIG_HID_LENOVO=m -CONFIG_HID_LOGITECH=m -CONFIG_HID_LOGITECH_DJ=m -CONFIG_HID_LOGITECH_HIDPP=m -CONFIG_LOGITECH_FF=y -CONFIG_LOGIRUMBLEPAD2_FF=y -CONFIG_LOGIG940_FF=y -CONFIG_LOGIWHEELS_FF=y -CONFIG_HID_MAGICMOUSE=m -CONFIG_HID_MICROSOFT=m -CONFIG_HID_MONTEREY=m -CONFIG_HID_MULTITOUCH=m -CONFIG_HID_NTRIG=m -CONFIG_HID_ORTEK=m -CONFIG_HID_OUYA=m -CONFIG_HID_PANTHERLORD=m -CONFIG_PANTHERLORD_FF=y -CONFIG_HID_PENMOUNT=m -CONFIG_HID_PETALYNX=m -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=y -CONFIG_HID_PLANTRONICS=m -CONFIG_HID_PRIMAX=m -CONFIG_HID_ROCCAT=m -CONFIG_HID_SAITEK=m -CONFIG_HID_SAMSUNG=m -CONFIG_HID_SONY=m -CONFIG_SONY_FF=y -CONFIG_HID_SPEEDLINK=m -CONFIG_HID_STEELSERIES=m -CONFIG_HID_SPINELPLUS=m -CONFIG_HID_SUNPLUS=m -CONFIG_HID_RMI=m -CONFIG_HID_GREENASIA=m -CONFIG_GREENASIA_FF=y -CONFIG_HID_SMARTJOYPLUS=m -CONFIG_SMARTJOYPLUS_FF=y -CONFIG_HID_TIVO=m -CONFIG_HID_TOPSEED=m -CONFIG_HID_THINGM=m -CONFIG_HID_THRUSTMASTER=m -CONFIG_THRUSTMASTER_FF=y -CONFIG_HID_WACOM=m -CONFIG_HID_WIIMOTE=m -CONFIG_HID_XINMO=m -CONFIG_HID_ZEROPLUS=m -CONFIG_ZEROPLUS_FF=y -CONFIG_HID_ZYDACRON=m -CONFIG_HID_SENSOR_HUB=m -CONFIG_HID_SENSOR_CUSTOM_SENSOR=m - -# -# USB HID support -# -CONFIG_USB_HID=y -CONFIG_HID_PID=y -CONFIG_USB_HIDDEV=y - -# -# I2C HID support -# -CONFIG_I2C_HID=m -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_ANNOUNCE_NEW_DEVICES is not set - -# -# Miscellaneous USB options -# -CONFIG_USB_DEFAULT_PERSIST=y -# CONFIG_USB_DYNAMIC_MINORS is not set -CONFIG_USB_OTG=y -# CONFIG_USB_OTG_WHITELIST is not set -# CONFIG_USB_OTG_BLACKLIST_HUB is not set -CONFIG_USB_OTG_FSM=y -# CONFIG_USB_ULPI_BUS 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=y -CONFIG_USB_XHCI_PCI=y -CONFIG_USB_XHCI_PLATFORM=y -CONFIG_USB_EHCI_HCD=y -CONFIG_USB_EHCI_ROOT_HUB_TT=y -CONFIG_USB_EHCI_TT_NEWSCHED=y -CONFIG_USB_FSL_MPH_DR_OF=y -CONFIG_USB_EHCI_PCI=y -CONFIG_USB_EHCI_MXC=y -CONFIG_USB_EHCI_HCD_PLATFORM=y -# CONFIG_USB_OXU210HP_HCD is not set -# CONFIG_USB_ISP116X_HCD is not set -# CONFIG_USB_ISP1362_HCD is not set -# CONFIG_USB_FOTG210_HCD is not set -# CONFIG_USB_MAX3421_HCD is not set -# CONFIG_USB_OHCI_HCD is not set -# CONFIG_USB_UHCI_HCD is not set -# CONFIG_USB_SL811_HCD is not set -# CONFIG_USB_R8A66597_HCD is not set -# CONFIG_USB_IMX21_HCD is not set -# CONFIG_USB_HCD_BCMA is not set -# CONFIG_USB_HCD_SSB is not set -# CONFIG_USB_HCD_TEST_MODE is not set - -# -# USB Device Class drivers -# -CONFIG_USB_ACM=m -CONFIG_USB_PRINTER=m -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=y -# CONFIG_REALTEK_AUTOPM is not set -CONFIG_USB_STORAGE_DATAFAB=y -CONFIG_USB_STORAGE_FREECOM=y -CONFIG_USB_STORAGE_ISD200=y -CONFIG_USB_STORAGE_USBAT=y -CONFIG_USB_STORAGE_SDDR09=y -CONFIG_USB_STORAGE_SDDR55=y -CONFIG_USB_STORAGE_JUMPSHOT=y -CONFIG_USB_STORAGE_ALAUDA=y -CONFIG_USB_STORAGE_ONETOUCH=y -CONFIG_USB_STORAGE_KARMA=m -CONFIG_USB_STORAGE_CYPRESS_ATACB=y -CONFIG_USB_STORAGE_ENE_UB6250=y -CONFIG_USB_UAS=y - -# -# USB Imaging devices -# -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_MICROTEK is not set -CONFIG_USBIP_CORE=m -CONFIG_USBIP_VHCI_HCD=m -CONFIG_USBIP_HOST=m -# CONFIG_USBIP_DEBUG is not set -CONFIG_USB_MUSB_HDRC=m -CONFIG_USB_MUSB_HOST=y -# CONFIG_USB_MUSB_GADGET is not set -# CONFIG_USB_MUSB_DUAL_ROLE is not set - -# -# Platform Glue Layer -# - -# -# MUSB DMA mode -# -CONFIG_MUSB_PIO_ONLY=y -CONFIG_USB_DWC3=m -# CONFIG_USB_DWC3_HOST is not set -# CONFIG_USB_DWC3_GADGET is not set -CONFIG_USB_DWC3_DUAL_ROLE=y - -# -# Platform Glue Driver Support -# -CONFIG_USB_DWC3_PCI=m -CONFIG_USB_DWC2=m -# CONFIG_USB_DWC2_HOST is not set - -# -# Gadget/Dual-role mode requires USB Gadget support to be enabled -# -# CONFIG_USB_DWC2_PERIPHERAL is not set -CONFIG_USB_DWC2_DUAL_ROLE=y -CONFIG_USB_DWC2_PCI=m -# CONFIG_USB_DWC2_DEBUG is not set -# CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set -CONFIG_USB_CHIPIDEA=y -CONFIG_USB_CHIPIDEA_OF=y -CONFIG_USB_CHIPIDEA_PCI=y -# CONFIG_USB_CHIPIDEA_UDC is not set -CONFIG_USB_CHIPIDEA_HOST=y -# CONFIG_USB_CHIPIDEA_DEBUG is not set -# CONFIG_USB_ISP1760 is not set - -# -# USB port drivers -# -CONFIG_USB_SERIAL=y -CONFIG_USB_SERIAL_CONSOLE=y -CONFIG_USB_SERIAL_GENERIC=y -CONFIG_USB_SERIAL_SIMPLE=m -CONFIG_USB_SERIAL_AIRCABLE=m -CONFIG_USB_SERIAL_ARK3116=m -CONFIG_USB_SERIAL_BELKIN=m -CONFIG_USB_SERIAL_CH341=m -CONFIG_USB_SERIAL_WHITEHEAT=m -CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m -CONFIG_USB_SERIAL_CP210X=m -CONFIG_USB_SERIAL_CYPRESS_M8=m -CONFIG_USB_SERIAL_EMPEG=m -CONFIG_USB_SERIAL_FTDI_SIO=m -CONFIG_USB_SERIAL_VISOR=m -CONFIG_USB_SERIAL_IPAQ=m -CONFIG_USB_SERIAL_IR=m -CONFIG_USB_SERIAL_EDGEPORT=m -CONFIG_USB_SERIAL_EDGEPORT_TI=m -CONFIG_USB_SERIAL_F81232=m -CONFIG_USB_SERIAL_GARMIN=m -CONFIG_USB_SERIAL_IPW=m -CONFIG_USB_SERIAL_IUU=m -CONFIG_USB_SERIAL_KEYSPAN_PDA=m -CONFIG_USB_SERIAL_KEYSPAN=m -CONFIG_USB_SERIAL_KEYSPAN_MPR=y -CONFIG_USB_SERIAL_KEYSPAN_USA28=y -CONFIG_USB_SERIAL_KEYSPAN_USA28X=y -CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y -CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y -CONFIG_USB_SERIAL_KEYSPAN_USA19=y -CONFIG_USB_SERIAL_KEYSPAN_USA18X=y -CONFIG_USB_SERIAL_KEYSPAN_USA19W=y -CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y -CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y -CONFIG_USB_SERIAL_KEYSPAN_USA49W=y -CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y -CONFIG_USB_SERIAL_KLSI=m -CONFIG_USB_SERIAL_KOBIL_SCT=m -CONFIG_USB_SERIAL_MCT_U232=m -CONFIG_USB_SERIAL_METRO=m -CONFIG_USB_SERIAL_MOS7720=m -CONFIG_USB_SERIAL_MOS7840=m -CONFIG_USB_SERIAL_MXUPORT=m -CONFIG_USB_SERIAL_NAVMAN=m -CONFIG_USB_SERIAL_PL2303=m -CONFIG_USB_SERIAL_OTI6858=m -CONFIG_USB_SERIAL_QCAUX=m -CONFIG_USB_SERIAL_QUALCOMM=m -CONFIG_USB_SERIAL_SPCP8X5=m -CONFIG_USB_SERIAL_SAFE=m -CONFIG_USB_SERIAL_SAFE_PADDED=y -CONFIG_USB_SERIAL_SIERRAWIRELESS=m -CONFIG_USB_SERIAL_SYMBOL=m -CONFIG_USB_SERIAL_TI=m -CONFIG_USB_SERIAL_CYBERJACK=m -CONFIG_USB_SERIAL_XIRCOM=m -CONFIG_USB_SERIAL_WWAN=m -CONFIG_USB_SERIAL_OPTION=m -CONFIG_USB_SERIAL_OMNINET=m -CONFIG_USB_SERIAL_OPTICON=m -CONFIG_USB_SERIAL_XSENS_MT=m -CONFIG_USB_SERIAL_WISHBONE=m -CONFIG_USB_SERIAL_SSU100=m -CONFIG_USB_SERIAL_QT2=m -CONFIG_USB_SERIAL_DEBUG=m - -# -# 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=m -CONFIG_USB_CYTHERM=m -CONFIG_USB_IDMOUSE=m -# 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 is not set -CONFIG_USB_EZUSB_FX2=m -CONFIG_USB_HSIC_USB3503=m -# CONFIG_USB_LINK_LAYER_TEST is not set -# CONFIG_USB_CHAOSKEY is not set - -# -# USB Physical Layer drivers -# -CONFIG_USB_PHY=y -CONFIG_NOP_USB_XCEIV=y -CONFIG_AM335X_CONTROL_USB=m -CONFIG_AM335X_PHY_USB=m -CONFIG_USB_GPIO_VBUS=m -CONFIG_USB_ISP1301=y -CONFIG_USB_MXS_PHY=y -# CONFIG_USB_ULPI is not set -CONFIG_USB_GADGET=y -# 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_FSL_USB2=y -# CONFIG_USB_FUSB300 is not set -# 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=m -# CONFIG_USB_M66592 is not set -# CONFIG_USB_BDC_UDC is not set -# CONFIG_USB_AMD5536UDC is not set -# CONFIG_USB_NET2272 is not set -# CONFIG_USB_NET2280 is not set -# CONFIG_USB_GOKU is not set -# CONFIG_USB_EG20T is not set -# CONFIG_USB_GADGET_XILINX is not set -# CONFIG_USB_DUMMY_HCD is not set -CONFIG_USB_LIBCOMPOSITE=m -CONFIG_USB_F_ACM=m -CONFIG_USB_F_SS_LB=m -CONFIG_USB_U_SERIAL=m -CONFIG_USB_U_ETHER=m -CONFIG_USB_F_SERIAL=m -CONFIG_USB_F_OBEX=m -CONFIG_USB_F_NCM=m -CONFIG_USB_F_ECM=m -CONFIG_USB_F_EEM=m -CONFIG_USB_F_SUBSET=m -CONFIG_USB_F_RNDIS=m -CONFIG_USB_F_MASS_STORAGE=m -CONFIG_USB_F_FS=m -CONFIG_USB_F_UAC1=m -CONFIG_USB_F_UAC2=m -CONFIG_USB_F_UVC=m -CONFIG_USB_F_MIDI=m -CONFIG_USB_F_HID=m -CONFIG_USB_F_PRINTER=m -CONFIG_USB_CONFIGFS=m -CONFIG_USB_CONFIGFS_SERIAL=y -CONFIG_USB_CONFIGFS_ACM=y -CONFIG_USB_CONFIGFS_OBEX=y -CONFIG_USB_CONFIGFS_NCM=y -CONFIG_USB_CONFIGFS_ECM=y -CONFIG_USB_CONFIGFS_ECM_SUBSET=y -CONFIG_USB_CONFIGFS_RNDIS=y -CONFIG_USB_CONFIGFS_EEM=y -# CONFIG_USB_CONFIGFS_PHONET is not set -CONFIG_USB_CONFIGFS_MASS_STORAGE=y -CONFIG_USB_CONFIGFS_F_LB_SS=y -CONFIG_USB_CONFIGFS_F_FS=y -CONFIG_USB_CONFIGFS_F_UAC1=y -CONFIG_USB_CONFIGFS_F_UAC2=y -CONFIG_USB_CONFIGFS_F_MIDI=y -CONFIG_USB_CONFIGFS_F_HID=y -CONFIG_USB_CONFIGFS_F_UVC=y -CONFIG_USB_CONFIGFS_F_PRINTER=y -CONFIG_USB_ZERO=m -# CONFIG_USB_ZERO_HNPTEST is not set -CONFIG_USB_AUDIO=m -# CONFIG_GADGET_UAC1 is not set -CONFIG_USB_ETH=m -CONFIG_USB_ETH_RNDIS=y -# CONFIG_USB_ETH_EEM is not set -CONFIG_USB_G_NCM=m -CONFIG_USB_GADGETFS=m -CONFIG_USB_FUNCTIONFS=m -# CONFIG_USB_FUNCTIONFS_ETH is not set -# CONFIG_USB_FUNCTIONFS_RNDIS is not set -CONFIG_USB_FUNCTIONFS_GENERIC=y -CONFIG_USB_MASS_STORAGE=m -CONFIG_USB_G_SERIAL=m -CONFIG_USB_MIDI_GADGET=m -CONFIG_USB_G_PRINTER=m -CONFIG_USB_CDC_COMPOSITE=m -# CONFIG_USB_G_NOKIA is not set -CONFIG_USB_G_ACM_MS=m -CONFIG_USB_G_MULTI=m -CONFIG_USB_G_MULTI_RNDIS=y -# CONFIG_USB_G_MULTI_CDC is not set -CONFIG_USB_G_HID=m -# CONFIG_USB_G_DBGP is not set -CONFIG_USB_G_WEBCAM=m -CONFIG_USB_LED_TRIG=y -# CONFIG_UWB is not set -CONFIG_MMC=y -# CONFIG_MMC_DEBUG is not set - -# -# MMC/SD/SDIO Card Drivers -# -CONFIG_MMC_BLOCK=y -CONFIG_MMC_BLOCK_MINORS=8 -CONFIG_MMC_BLOCK_BOUNCE=y -CONFIG_SDIO_UART=y -# CONFIG_MMC_TEST is not set - -# -# MMC/SD/SDIO Host Controller Drivers -# -CONFIG_MMC_SDHCI=y -CONFIG_MMC_SDHCI_IO_ACCESSORS=y -# CONFIG_MMC_SDHCI_PCI is not set -CONFIG_MMC_SDHCI_PLTFM=y -CONFIG_MMC_SDHCI_OF_ARASAN=m -# CONFIG_MMC_SDHCI_OF_AT91 is not set -# CONFIG_MMC_SDHCI_OF_ESDHC is not set -CONFIG_MMC_SDHCI_ESDHC_IMX=y -# CONFIG_MMC_SDHCI_F_SDH30 is not set -# CONFIG_MMC_MXC is not set -CONFIG_MMC_TIFM_SD=m -CONFIG_MMC_CB710=m -# CONFIG_MMC_VIA_SDMMC is not set -# CONFIG_MMC_DW is not set -CONFIG_MMC_VUB300=m -CONFIG_MMC_USHC=y -CONFIG_MMC_USDHI6ROL0=m -CONFIG_MMC_TOSHIBA_PCI=m -# CONFIG_MMC_MTK is not set -# CONFIG_MEMSTICK is not set -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y -# CONFIG_LEDS_CLASS_FLASH is not set - -# -# LED drivers -# -CONFIG_LEDS_88PM860X=y -# CONFIG_LEDS_BCM6328 is not set -# CONFIG_LEDS_BCM6358 is not set -# CONFIG_LEDS_LM3530 is not set -# CONFIG_LEDS_LM3642 is not set -# CONFIG_LEDS_PCA9532 is not set -CONFIG_LEDS_GPIO=m -# 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_LP8860 is not set -# CONFIG_LEDS_PCA955X is not set -# CONFIG_LEDS_PCA963X is not set -# CONFIG_LEDS_DA9052 is not set -# CONFIG_LEDS_DAC124S085 is not set -CONFIG_LEDS_PWM=y -CONFIG_LEDS_REGULATOR=m -# CONFIG_LEDS_BD2802 is not set -# CONFIG_LEDS_LT3593 is not set -# CONFIG_LEDS_MC13783 is not set -# CONFIG_LEDS_TCA6507 is not set -# CONFIG_LEDS_TLC591XX is not set -# CONFIG_LEDS_LM355x is not set - -# -# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM) -# -# CONFIG_LEDS_BLINKM is not set -# CONFIG_LEDS_SYSCON is not set - -# -# LED Triggers -# -CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_TIMER=y -CONFIG_LEDS_TRIGGER_ONESHOT=m -CONFIG_LEDS_TRIGGER_HEARTBEAT=y -CONFIG_LEDS_TRIGGER_BACKLIGHT=m -CONFIG_LEDS_TRIGGER_GPIO=m -CONFIG_LEDS_TRIGGER_DEFAULT_ON=y - -# -# iptables trigger is under Netfilter config (LED target) -# -CONFIG_LEDS_TRIGGER_TRANSIENT=m -CONFIG_LEDS_TRIGGER_CAMERA=m -# CONFIG_ACCESSIBILITY is not set -# CONFIG_INFINIBAND is not set -CONFIG_EDAC_ATOMIC_SCRUB=y -CONFIG_EDAC_SUPPORT=y -# CONFIG_EDAC is not set -CONFIG_RTC_LIB=y -CONFIG_RTC_CLASS=y -CONFIG_RTC_HCTOSYS=y -CONFIG_RTC_HCTOSYS_DEVICE="rtc0" -# CONFIG_RTC_SYSTOHC is not set -# 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=y -# CONFIG_RTC_DRV_TEST is not set - -# -# I2C RTC drivers -# -CONFIG_RTC_DRV_88PM860X=y -CONFIG_RTC_DRV_88PM80X=y -# CONFIG_RTC_DRV_ABB5ZES3 is not set -# CONFIG_RTC_DRV_ABX80X is not set -# 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=y -# CONFIG_RTC_DRV_PCF8563 is not set -# CONFIG_RTC_DRV_PCF85063 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=y -# 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 -# CONFIG_RTC_DRV_RV8803 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_DS1343 is not set -# CONFIG_RTC_DRV_DS1347 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 -# CONFIG_RTC_DRV_MCP795 is not set - -# -# Platform RTC drivers -# -CONFIG_RTC_DRV_CMOS=y -# CONFIG_RTC_DRV_DS1286 is not set -# CONFIG_RTC_DRV_DS1511 is not set -# CONFIG_RTC_DRV_DS1553 is not set -# CONFIG_RTC_DRV_DS1685_FAMILY is not set -# CONFIG_RTC_DRV_DS1742 is not set -# CONFIG_RTC_DRV_DS2404 is not set -# CONFIG_RTC_DRV_DA9052 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_ZYNQMP is not set - -# -# on-CPU RTC drivers -# -CONFIG_RTC_DRV_IMXDI=y -CONFIG_RTC_DRV_MC13XXX=y -CONFIG_RTC_DRV_MXC=y -CONFIG_RTC_DRV_SNVS=y - -# -# HID Sensor RTC drivers -# -# CONFIG_RTC_DRV_HID_SENSOR_TIME is not set -CONFIG_DMADEVICES=y -# CONFIG_DMADEVICES_DEBUG is not set - -# -# DMA Devices -# -CONFIG_DMA_ENGINE=y -CONFIG_DMA_VIRTUAL_CHANNELS=y -CONFIG_DMA_OF=y -CONFIG_FSL_EDMA=m -# CONFIG_IMX_DMA is not set -CONFIG_IMX_SDMA=y -CONFIG_INTEL_IDMA64=y -CONFIG_MXS_DMA=y -# CONFIG_MX3_IPU is not set -CONFIG_MXC_PXP_V2=y -CONFIG_MXC_PXP_CLIENT_DEVICE=y -# CONFIG_NBPFAXI_DMA is not set -CONFIG_DW_DMAC_CORE=m -CONFIG_DW_DMAC=m -CONFIG_DW_DMAC_PCI=m - -# -# DMA Clients -# -CONFIG_ASYNC_TX_DMA=y -# CONFIG_DMATEST is not set -# CONFIG_AUXDISPLAY is not set -CONFIG_UIO=m -# CONFIG_UIO_CIF is not set -CONFIG_UIO_PDRV_GENIRQ=m -CONFIG_UIO_DMEM_GENIRQ=m -# CONFIG_UIO_AEC is not set -# CONFIG_UIO_SERCOS3 is not set -CONFIG_UIO_PCI_GENERIC=m -# CONFIG_UIO_NETX is not set -# CONFIG_UIO_PRUSS is not set -# CONFIG_UIO_MF624 is not set -# CONFIG_VFIO is not set -# CONFIG_VIRT_DRIVERS is not set -CONFIG_VIRTIO=m - -# -# Virtio drivers -# -# CONFIG_VIRTIO_PCI is not set -# CONFIG_VIRTIO_BALLOON is not set -# CONFIG_VIRTIO_INPUT is not set -# CONFIG_VIRTIO_MMIO is not set - -# -# Microsoft Hyper-V guest support -# -CONFIG_STAGING=y -CONFIG_PRISM2_USB=m -CONFIG_COMEDI=m -# CONFIG_COMEDI_DEBUG is not set -CONFIG_COMEDI_DEFAULT_BUF_SIZE_KB=2048 -CONFIG_COMEDI_DEFAULT_BUF_MAXSIZE_KB=20480 -# CONFIG_COMEDI_MISC_DRIVERS is not set -# CONFIG_COMEDI_ISA_DRIVERS is not set -# CONFIG_COMEDI_PCI_DRIVERS is not set -# CONFIG_COMEDI_USB_DRIVERS is not set -# CONFIG_COMEDI_8255_SA is not set -# CONFIG_COMEDI_KCOMEDILIB is not set -CONFIG_RTL8192U=m -CONFIG_RTLLIB=m -CONFIG_RTLLIB_CRYPTO_CCMP=m -CONFIG_RTLLIB_CRYPTO_TKIP=m -CONFIG_RTLLIB_CRYPTO_WEP=m -CONFIG_RTL8192E=m -CONFIG_R8712U=m -CONFIG_R8188EU=m -CONFIG_88EU_AP_MODE=y -CONFIG_R8723AU=m -CONFIG_8723AU_AP_MODE=y -CONFIG_8723AU_BT_COEXIST=y -CONFIG_RTS5208=m -# CONFIG_VT6655 is not set -# CONFIG_VT6656 is not set - -# -# IIO staging drivers -# - -# -# Accelerometers -# -# CONFIG_ADIS16201 is not set -# CONFIG_ADIS16203 is not set -# CONFIG_ADIS16204 is not set -# CONFIG_ADIS16209 is not set -# CONFIG_ADIS16220 is not set -# CONFIG_ADIS16240 is not set -# CONFIG_LIS3L02DQ is not set -# CONFIG_SCA3000 is not set - -# -# Analog to digital converters -# -# CONFIG_AD7606 is not set -# CONFIG_AD7780 is not set -# CONFIG_AD7816 is not set -# CONFIG_AD7192 is not set -# CONFIG_AD7280 is not set - -# -# Analog digital bi-direction converters -# -# CONFIG_ADT7316 is not set - -# -# Capacitance to digital converters -# -# CONFIG_AD7150 is not set -# CONFIG_AD7152 is not set -# CONFIG_AD7746 is not set - -# -# Direct Digital Synthesis -# -# CONFIG_AD9832 is not set -# CONFIG_AD9834 is not set - -# -# Digital gyroscope sensors -# -# CONFIG_ADIS16060 is not set - -# -# Network Analyzer, Impedance Converters -# -# CONFIG_AD5933 is not set - -# -# Light sensors -# -# CONFIG_SENSORS_ISL29018 is not set -# CONFIG_SENSORS_ISL29028 is not set -# CONFIG_TSL2583 is not set -# CONFIG_TSL2x7x is not set - -# -# Magnetometer sensors -# -# CONFIG_SENSORS_HMC5843_I2C is not set -# CONFIG_SENSORS_HMC5843_SPI is not set - -# -# Active energy metering IC -# -# CONFIG_ADE7753 is not set -# CONFIG_ADE7754 is not set -# CONFIG_ADE7758 is not set -# CONFIG_ADE7759 is not set -# CONFIG_ADE7854 is not set - -# -# Resolver to digital converters -# -# CONFIG_AD2S90 is not set -# CONFIG_AD2S1200 is not set -# CONFIG_AD2S1210 is not set - -# -# Triggers - standalone -# -CONFIG_IIO_PERIODIC_RTC_TRIGGER=m -# CONFIG_IIO_SIMPLE_DUMMY is not set -# CONFIG_FB_SM750 is not set -# CONFIG_FB_XGI is not set - -# -# Speakup console speech -# -CONFIG_SPEAKUP=m -CONFIG_SPEAKUP_SYNTH_ACNTSA=m -CONFIG_SPEAKUP_SYNTH_APOLLO=m -CONFIG_SPEAKUP_SYNTH_AUDPTR=m -CONFIG_SPEAKUP_SYNTH_BNS=m -CONFIG_SPEAKUP_SYNTH_DECTLK=m -CONFIG_SPEAKUP_SYNTH_DECEXT=m -CONFIG_SPEAKUP_SYNTH_LTLK=m -CONFIG_SPEAKUP_SYNTH_SOFT=m -CONFIG_SPEAKUP_SYNTH_SPKOUT=m -CONFIG_SPEAKUP_SYNTH_TXPRT=m -CONFIG_SPEAKUP_SYNTH_DUMMY=m -CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4=m -CONFIG_STAGING_MEDIA=y -CONFIG_I2C_BCM2048=m -CONFIG_DVB_CXD2099=m -CONFIG_DVB_MN88472=m -CONFIG_DVB_MN88473=m -CONFIG_LIRC_STAGING=y -CONFIG_LIRC_BT829=m -CONFIG_LIRC_IMON=m -CONFIG_LIRC_HB=m -CONFIG_LIRC_XBOX=m -CONFIG_LIRC_SASEM=m -CONFIG_LIRC_SERIAL=m -CONFIG_LIRC_SERIAL_TRANSMITTER=y -CONFIG_LIRC_SIR=m -CONFIG_LIRC_ZILOG=m -CONFIG_LIRC_ATIUSB=m - -# -# Android -# -# CONFIG_STAGING_BOARD is not set -CONFIG_WIMAX_GDM72XX=m -CONFIG_WIMAX_GDM72XX_QOS=y -CONFIG_WIMAX_GDM72XX_K_MODE=y -CONFIG_WIMAX_GDM72XX_WIMAX2=y -CONFIG_WIMAX_GDM72XX_USB=y -# CONFIG_WIMAX_GDM72XX_SDIO is not set -CONFIG_WIMAX_GDM72XX_USB_PM=y -CONFIG_LTE_GDM724X=m -CONFIG_MTD_SPINAND_MT29F=m -# CONFIG_MTD_SPINAND_ONDIEECC is not set -# CONFIG_LUSTRE_FS is not set -CONFIG_DGNC=m -CONFIG_DGAP=m -# CONFIG_GS_FPGABOOT is not set -# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set -CONFIG_FB_TFT=m -CONFIG_FB_TFT_AGM1264K_FL=m -CONFIG_FB_TFT_BD663474=m -CONFIG_FB_TFT_HX8340BN=m -CONFIG_FB_TFT_HX8347D=m -CONFIG_FB_TFT_HX8353D=m -CONFIG_FB_TFT_HX8357D=m -CONFIG_FB_TFT_ILI9163=m -CONFIG_FB_TFT_ILI9320=m -CONFIG_FB_TFT_ILI9325=m -CONFIG_FB_TFT_ILI9340=m -CONFIG_FB_TFT_ILI9341=m -CONFIG_FB_TFT_ILI9481=m -CONFIG_FB_TFT_ILI9486=m -CONFIG_FB_TFT_PCD8544=m -CONFIG_FB_TFT_RA8875=m -CONFIG_FB_TFT_S6D02A1=m -CONFIG_FB_TFT_S6D1121=m -CONFIG_FB_TFT_SSD1289=m -CONFIG_FB_TFT_SSD1306=m -CONFIG_FB_TFT_SSD1331=m -CONFIG_FB_TFT_SSD1351=m -CONFIG_FB_TFT_ST7735R=m -CONFIG_FB_TFT_ST7789V=m -CONFIG_FB_TFT_TINYLCD=m -CONFIG_FB_TFT_TLS8204=m -CONFIG_FB_TFT_UC1611=m -CONFIG_FB_TFT_UC1701=m -CONFIG_FB_TFT_UPD161704=m -CONFIG_FB_TFT_WATTEROTT=m -CONFIG_FB_FLEX=m -CONFIG_FB_TFT_FBTFT_DEVICE=m -# CONFIG_WILC1000_DRIVER is not set -# CONFIG_MOST is not set -# CONFIG_CHROME_PLATFORMS is not set -CONFIG_CLKDEV_LOOKUP=y -CONFIG_HAVE_CLK_PREPARE=y -CONFIG_COMMON_CLK=y - -# -# Common Clock Framework -# -# CONFIG_COMMON_CLK_SI5351 is not set -# CONFIG_COMMON_CLK_SI514 is not set -# CONFIG_COMMON_CLK_SI570 is not set -# CONFIG_COMMON_CLK_CDCE925 is not set -# CONFIG_CLK_QORIQ is not set -# CONFIG_COMMON_CLK_PWM is not set -# CONFIG_COMMON_CLK_PXA is not set -# CONFIG_COMMON_CLK_CDCE706 is not set - -# -# Hardware Spinlock drivers -# - -# -# Clock Source drivers -# -CONFIG_CLKSRC_OF=y -CONFIG_CLKSRC_PROBE=y -CONFIG_CLKSRC_MMIO=y -# CONFIG_ARM_TIMER_SP804 is not set -# CONFIG_ATMEL_PIT is not set -# CONFIG_SH_TIMER_CMT is not set -# CONFIG_SH_TIMER_MTU2 is not set -# CONFIG_SH_TIMER_TMU is not set -# CONFIG_EM_TIMER_STI is not set -CONFIG_CLKSRC_IMX_GPT=y -# CONFIG_MAILBOX is not set -CONFIG_IOMMU_API=y -CONFIG_IOMMU_SUPPORT=y - -# -# Generic IOMMU Pagetable Support -# -CONFIG_IOMMU_IO_PGTABLE=y -CONFIG_IOMMU_IO_PGTABLE_LPAE=y -# CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set -CONFIG_OF_IOMMU=y -CONFIG_ARM_SMMU=y - -# -# Remoteproc drivers -# -# CONFIG_STE_MODEM_RPROC is not set - -# -# Rpmsg drivers -# - -# -# SOC (System On Chip) specific Drivers -# -# CONFIG_SOC_BRCMSTB is not set -# CONFIG_SUNXI_SRAM is not set -# CONFIG_SOC_TI is not set -CONFIG_PM_DEVFREQ=y - -# -# DEVFREQ Governors -# -CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y -CONFIG_DEVFREQ_GOV_PERFORMANCE=y -CONFIG_DEVFREQ_GOV_POWERSAVE=y -CONFIG_DEVFREQ_GOV_USERSPACE=y - -# -# DEVFREQ Drivers -# -CONFIG_PM_DEVFREQ_EVENT=y -CONFIG_EXTCON=y - -# -# Extcon Device Drivers -# -CONFIG_EXTCON_ADC_JACK=m -CONFIG_EXTCON_GPIO=y -CONFIG_EXTCON_RT8973A=m -CONFIG_EXTCON_SM5502=m -CONFIG_EXTCON_USB_GPIO=y -CONFIG_MEMORY=y -CONFIG_IIO=m -CONFIG_IIO_BUFFER=y -# CONFIG_IIO_BUFFER_CB is not set -CONFIG_IIO_KFIFO_BUF=m -CONFIG_IIO_TRIGGERED_BUFFER=m -CONFIG_IIO_TRIGGER=y -CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 - -# -# Accelerometers -# -# CONFIG_BMA180 is not set -# CONFIG_BMC150_ACCEL is not set -# CONFIG_HID_SENSOR_ACCEL_3D is not set -# CONFIG_IIO_ST_ACCEL_3AXIS is not set -# CONFIG_KXSD9 is not set -# CONFIG_KXCJK1013 is not set -# CONFIG_MMA8452 is not set -# CONFIG_MMA9551 is not set -# CONFIG_MMA9553 is not set -# CONFIG_MXC4005 is not set -# CONFIG_STK8312 is not set -# CONFIG_STK8BA50 is not set - -# -# Analog to digital converters -# -# CONFIG_AD7266 is not set -# CONFIG_AD7291 is not set -# CONFIG_AD7298 is not set -# CONFIG_AD7476 is not set -# CONFIG_AD7791 is not set -# CONFIG_AD7793 is not set -# CONFIG_AD7887 is not set -# CONFIG_AD7923 is not set -# CONFIG_AD799X is not set -# CONFIG_CC10001_ADC is not set -# CONFIG_HI8435 is not set -# CONFIG_MAX1027 is not set -# CONFIG_MAX1363 is not set -# CONFIG_MCP320X is not set -# CONFIG_MCP3422 is not set -# CONFIG_NAU7802 is not set -# CONFIG_TI_ADC081C is not set -# CONFIG_TI_ADC128S052 is not set -# CONFIG_VF610_ADC is not set - -# -# Amplifiers -# -# CONFIG_AD8366 is not set - -# -# Chemical Sensors -# -# CONFIG_VZ89X is not set - -# -# Hid Sensor IIO Common -# -CONFIG_HID_SENSOR_IIO_COMMON=m -CONFIG_HID_SENSOR_IIO_TRIGGER=m - -# -# SSP Sensor Common -# -# CONFIG_IIO_SSP_SENSORHUB is not set - -# -# Digital to analog converters -# -# CONFIG_AD5064 is not set -# CONFIG_AD5360 is not set -# CONFIG_AD5380 is not set -# CONFIG_AD5421 is not set -# CONFIG_AD5446 is not set -# CONFIG_AD5449 is not set -# CONFIG_AD5504 is not set -# CONFIG_AD5624R_SPI is not set -# CONFIG_AD5686 is not set -# CONFIG_AD5755 is not set -# CONFIG_AD5764 is not set -# CONFIG_AD5791 is not set -# CONFIG_AD7303 is not set -# CONFIG_M62332 is not set -# CONFIG_MAX517 is not set -# CONFIG_MAX5821 is not set -# CONFIG_MCP4725 is not set -# CONFIG_MCP4922 is not set - -# -# Frequency Synthesizers DDS/PLL -# - -# -# Clock Generator/Distribution -# -# CONFIG_AD9523 is not set - -# -# Phase-Locked Loop (PLL) frequency synthesizers -# -# CONFIG_ADF4350 is not set - -# -# Digital gyroscope sensors -# -# CONFIG_ADIS16080 is not set -# CONFIG_ADIS16130 is not set -# CONFIG_ADIS16136 is not set -# CONFIG_ADIS16260 is not set -# CONFIG_ADXRS450 is not set -# CONFIG_BMG160 is not set -CONFIG_HID_SENSOR_GYRO_3D=m -# CONFIG_IIO_ST_GYRO_3AXIS is not set -# CONFIG_ITG3200 is not set - -# -# Humidity sensors -# -CONFIG_DHT11=m -# CONFIG_HDC100X is not set -# CONFIG_HTU21 is not set -# CONFIG_SI7005 is not set -# CONFIG_SI7020 is not set - -# -# Inertial measurement units -# -# CONFIG_ADIS16400 is not set -# CONFIG_ADIS16480 is not set -# CONFIG_KMX61 is not set -# CONFIG_INV_MPU6050_IIO is not set - -# -# Light sensors -# -# CONFIG_ADJD_S311 is not set -# CONFIG_AL3320A is not set -# CONFIG_APDS9300 is not set -# CONFIG_APDS9960 is not set -# CONFIG_BH1750 is not set -# CONFIG_CM32181 is not set -# CONFIG_CM3232 is not set -# CONFIG_CM3323 is not set -# CONFIG_CM36651 is not set -# CONFIG_GP2AP020A00F is not set -# CONFIG_ISL29125 is not set -# CONFIG_HID_SENSOR_ALS is not set -# CONFIG_HID_SENSOR_PROX is not set -# CONFIG_JSA1212 is not set -# CONFIG_RPR0521 is not set -# CONFIG_LTR501 is not set -# CONFIG_OPT3001 is not set -# CONFIG_PA12203001 is not set -# CONFIG_STK3310 is not set -# CONFIG_TCS3414 is not set -# CONFIG_TCS3472 is not set -# CONFIG_SENSORS_TSL2563 is not set -# CONFIG_TSL4531 is not set -# CONFIG_US5182D is not set -# CONFIG_VCNL4000 is not set - -# -# Magnetometer sensors -# -# CONFIG_AK8975 is not set -# CONFIG_AK09911 is not set -# CONFIG_BMC150_MAGN is not set -# CONFIG_MAG3110 is not set -# CONFIG_HID_SENSOR_MAGNETOMETER_3D is not set -# CONFIG_MMC35240 is not set -# CONFIG_IIO_ST_MAGN_3AXIS is not set - -# -# Inclinometer sensors -# -# CONFIG_HID_SENSOR_INCLINOMETER_3D is not set -# CONFIG_HID_SENSOR_DEVICE_ROTATION is not set - -# -# Triggers - standalone -# -CONFIG_IIO_INTERRUPT_TRIGGER=m -CONFIG_IIO_SYSFS_TRIGGER=m - -# -# Digital potentiometers -# -# CONFIG_MCP4531 is not set - -# -# Pressure sensors -# -# CONFIG_BMP280 is not set -# CONFIG_HID_SENSOR_PRESS is not set -# CONFIG_MPL115 is not set -# CONFIG_MPL3115 is not set -# CONFIG_MS5611 is not set -# CONFIG_MS5637 is not set -# CONFIG_IIO_ST_PRESS is not set -# CONFIG_T5403 is not set - -# -# Lightning sensors -# -# CONFIG_AS3935 is not set - -# -# Proximity sensors -# -# CONFIG_LIDAR_LITE_V2 is not set -# CONFIG_SX9500 is not set - -# -# Temperature sensors -# -# CONFIG_MLX90614 is not set -# CONFIG_TMP006 is not set -# CONFIG_TSYS01 is not set -# CONFIG_TSYS02D is not set -# CONFIG_NTB is not set -# CONFIG_VME_BUS is not set -CONFIG_PWM=y -CONFIG_PWM_SYSFS=y -CONFIG_PWM_FSL_FTM=y -CONFIG_PWM_IMX=y -CONFIG_PWM_PCA9685=y -CONFIG_IRQCHIP=y -CONFIG_ARM_GIC=y -# CONFIG_IPACK_BUS is not set -CONFIG_ARCH_HAS_RESET_CONTROLLER=y -CONFIG_RESET_CONTROLLER=y -# CONFIG_FMC is not set - -# -# PHY Subsystem -# -CONFIG_GENERIC_PHY=y -CONFIG_PHY_PXA_28NM_HSIC=y -CONFIG_PHY_PXA_28NM_USB2=y -# CONFIG_BCM_KONA_USB2_PHY is not set -# CONFIG_PHY_SAMSUNG_USB2 is not set -CONFIG_POWERCAP=y -# CONFIG_MCB is not set - -# -# Performance monitor support -# -CONFIG_ARM_PMU=y -CONFIG_RAS=y -# CONFIG_THUNDERBOLT is not set - -# -# Android -# -# CONFIG_ANDROID is not set -CONFIG_NVMEM=y -CONFIG_NVMEM_IMX_OCOTP=m -# CONFIG_STM is not set -# CONFIG_STM_DUMMY is not set -# CONFIG_STM_SOURCE_CONSOLE is not set -# CONFIG_INTEL_TH is not set - -# -# FPGA Configuration Support -# -# CONFIG_FPGA is not set - -# -# MXC support drivers -# -CONFIG_MXC_IPU=y - -# -# Vivante GPU support -# -# CONFIG_MXC_GPU_VIV is not set -CONFIG_MXC_GPU_VIV_V5=y -CONFIG_MXC_IPU_V3_FSL=y - -# -# MXC VPU(Video Processing Unit) support -# -CONFIG_MXC_VPU=y -# CONFIG_MXC_VPU_DEBUG is not set -# CONFIG_MX6_VPU_352M is not set - -# -# MXC HDMI CEC (Consumer Electronics Control) support -# -CONFIG_MXC_HDMI_CEC=y - -# -# MXC MIPI Support -# -CONFIG_MXC_MIPI_CSI2=y - -# -# MXC Media Local Bus Driver -# -CONFIG_MXC_MLB=y -CONFIG_MXC_MLB150=m - -# -# Firmware Drivers -# -CONFIG_FIRMWARE_MEMMAP=y - -# -# 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_EXT2=y -CONFIG_EXT4_FS_POSIX_ACL=y -CONFIG_EXT4_FS_SECURITY=y -CONFIG_EXT4_ENCRYPTION=m -CONFIG_EXT4_FS_ENCRYPTION=y -# CONFIG_EXT4_DEBUG is not set -CONFIG_JBD2=y -# CONFIG_JBD2_DEBUG is not set -CONFIG_FS_MBCACHE=y -CONFIG_REISERFS_FS=m -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -CONFIG_REISERFS_FS_XATTR=y -CONFIG_REISERFS_FS_POSIX_ACL=y -# CONFIG_REISERFS_FS_SECURITY is not set -CONFIG_JFS_FS=m -CONFIG_JFS_POSIX_ACL=y -CONFIG_JFS_SECURITY=y -# CONFIG_JFS_DEBUG is not set -# CONFIG_JFS_STATISTICS is not set -CONFIG_XFS_FS=m -CONFIG_XFS_QUOTA=y -CONFIG_XFS_POSIX_ACL=y -# CONFIG_XFS_RT is not set -# CONFIG_XFS_WARN is not set -# CONFIG_XFS_DEBUG is not set -# CONFIG_GFS2_FS is not set -# CONFIG_OCFS2_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 is not set -# CONFIG_BTRFS_DEBUG is not set -# CONFIG_BTRFS_ASSERT is not set -# CONFIG_NILFS2_FS is not set -CONFIG_F2FS_FS=m -CONFIG_F2FS_STAT_FS=y -CONFIG_F2FS_FS_XATTR=y -CONFIG_F2FS_FS_POSIX_ACL=y -# CONFIG_F2FS_FS_SECURITY is not set -# CONFIG_F2FS_CHECK_FS is not set -# CONFIG_F2FS_FS_ENCRYPTION is not set -# CONFIG_F2FS_IO_TRACE 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=y -CONFIG_QUOTA=y -# CONFIG_QUOTA_NETLINK_INTERFACE is not set -CONFIG_PRINT_QUOTA_WARNING=y -# CONFIG_QUOTA_DEBUG is not set -CONFIG_QUOTA_TREE=m -CONFIG_QFMT_V1=m -CONFIG_QFMT_V2=m -CONFIG_QUOTACTL=y -CONFIG_AUTOFS4_FS=y -CONFIG_FUSE_FS=y -CONFIG_CUSE=y -CONFIG_OVERLAY_FS=y - -# -# Caches -# -CONFIG_FSCACHE=m -# CONFIG_FSCACHE_STATS is not set -# CONFIG_FSCACHE_HISTOGRAM is not set -# CONFIG_FSCACHE_DEBUG is not set -# CONFIG_FSCACHE_OBJECT_LIST is not set -CONFIG_CACHEFILES=m -# CONFIG_CACHEFILES_DEBUG is not set -# CONFIG_CACHEFILES_HISTOGRAM 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=y -CONFIG_VFAT_FS=y -CONFIG_FAT_DEFAULT_CODEPAGE=437 -CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" -# CONFIG_NTFS_FS is not set - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -CONFIG_PROC_SYSCTL=y -CONFIG_PROC_PAGE_MONITOR=y -CONFIG_PROC_CHILDREN=y -CONFIG_KERNFS=y -CONFIG_SYSFS=y -CONFIG_TMPFS=y -CONFIG_TMPFS_POSIX_ACL=y -CONFIG_TMPFS_XATTR=y -# CONFIG_HUGETLB_PAGE is not set -CONFIG_CONFIGFS_FS=y -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=m -CONFIG_HFSPLUS_FS=m -# 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=m -CONFIG_JFFS2_FS_DEBUG=0 -CONFIG_JFFS2_FS_WRITEBUFFER=y -# CONFIG_JFFS2_FS_WBUF_VERIFY is not set -# CONFIG_JFFS2_SUMMARY is not set -# CONFIG_JFFS2_FS_XATTR is not set -# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set -CONFIG_JFFS2_ZLIB=y -# CONFIG_JFFS2_LZO is not set -CONFIG_JFFS2_RTIME=y -# CONFIG_JFFS2_RUBIN is not set -CONFIG_UBIFS_FS=m -# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set -CONFIG_UBIFS_FS_LZO=y -CONFIG_UBIFS_FS_ZLIB=y -# CONFIG_UBIFS_ATIME_SUPPORT is not set -CONFIG_LOGFS=m -# CONFIG_CRAMFS is not set -CONFIG_SQUASHFS=y -CONFIG_SQUASHFS_FILE_CACHE=y -# CONFIG_SQUASHFS_FILE_DIRECT is not set -# CONFIG_SQUASHFS_DECOMP_SINGLE is not set -CONFIG_SQUASHFS_DECOMP_MULTI=y -# CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU is not set -CONFIG_SQUASHFS_XATTR=y -CONFIG_SQUASHFS_ZLIB=y -CONFIG_SQUASHFS_LZ4=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=m -CONFIG_ROMFS_BACKED_BY_BLOCK=y -# CONFIG_ROMFS_BACKED_BY_MTD is not set -# CONFIG_ROMFS_BACKED_BY_BOTH is not set -CONFIG_ROMFS_ON_BLOCK=y -# CONFIG_PSTORE is not set -CONFIG_SYSV_FS=m -# CONFIG_UFS_FS is not set -CONFIG_NETWORK_FILESYSTEMS=y -CONFIG_NFS_FS=y -CONFIG_NFS_V2=y -CONFIG_NFS_V3=y -CONFIG_NFS_V3_ACL=y -CONFIG_NFS_V4=y -# CONFIG_NFS_SWAP is not set -# CONFIG_NFS_V4_1 is not set -CONFIG_ROOT_NFS=y -# CONFIG_NFS_USE_LEGACY_DNS is not set -CONFIG_NFS_USE_KERNEL_DNS=y -CONFIG_NFS_DEBUG=y -CONFIG_NFSD=m -CONFIG_NFSD_V2_ACL=y -CONFIG_NFSD_V3=y -CONFIG_NFSD_V3_ACL=y -CONFIG_NFSD_V4=y -# CONFIG_NFSD_PNFS is not set -CONFIG_GRACE_PERIOD=y -CONFIG_LOCKD=y -CONFIG_LOCKD_V4=y -CONFIG_NFS_ACL_SUPPORT=y -CONFIG_NFS_COMMON=y -CONFIG_SUNRPC=y -CONFIG_SUNRPC_GSS=y -CONFIG_RPCSEC_GSS_KRB5=m -CONFIG_SUNRPC_DEBUG=y -# CONFIG_CEPH_FS is not set -CONFIG_CIFS=m -# CONFIG_CIFS_STATS is not set -CONFIG_CIFS_WEAK_PW_HASH=y -# CONFIG_CIFS_UPCALL is not set -CONFIG_CIFS_XATTR=y -CONFIG_CIFS_POSIX=y -CONFIG_CIFS_ACL=y -# CONFIG_CIFS_DEBUG is not set -CONFIG_CIFS_DFS_UPCALL=y -CONFIG_CIFS_SMB2=y -CONFIG_CIFS_SMB311=y -CONFIG_CIFS_FSCACHE=y -CONFIG_NCP_FS=m -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS 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=m -CONFIG_NLS_CODEPAGE_775=m -CONFIG_NLS_CODEPAGE_850=y -CONFIG_NLS_CODEPAGE_852=y -CONFIG_NLS_CODEPAGE_855=m -CONFIG_NLS_CODEPAGE_857=m -CONFIG_NLS_CODEPAGE_860=m -CONFIG_NLS_CODEPAGE_861=m -CONFIG_NLS_CODEPAGE_862=m -CONFIG_NLS_CODEPAGE_863=m -CONFIG_NLS_CODEPAGE_864=m -CONFIG_NLS_CODEPAGE_865=m -CONFIG_NLS_CODEPAGE_866=m -CONFIG_NLS_CODEPAGE_869=m -CONFIG_NLS_CODEPAGE_936=m -CONFIG_NLS_CODEPAGE_950=m -CONFIG_NLS_CODEPAGE_932=m -CONFIG_NLS_CODEPAGE_949=m -CONFIG_NLS_CODEPAGE_874=m -CONFIG_NLS_ISO8859_8=m -CONFIG_NLS_CODEPAGE_1250=y -CONFIG_NLS_CODEPAGE_1251=y -CONFIG_NLS_ASCII=y -CONFIG_NLS_ISO8859_1=y -CONFIG_NLS_ISO8859_2=y -CONFIG_NLS_ISO8859_3=m -CONFIG_NLS_ISO8859_4=m -CONFIG_NLS_ISO8859_5=m -CONFIG_NLS_ISO8859_6=m -CONFIG_NLS_ISO8859_7=m -CONFIG_NLS_ISO8859_9=m -CONFIG_NLS_ISO8859_13=m -CONFIG_NLS_ISO8859_14=m -CONFIG_NLS_ISO8859_15=m -CONFIG_NLS_KOI8_R=m -CONFIG_NLS_KOI8_U=m -CONFIG_NLS_MAC_ROMAN=m -CONFIG_NLS_MAC_CELTIC=m -CONFIG_NLS_MAC_CENTEURO=m -CONFIG_NLS_MAC_CROATIAN=m -CONFIG_NLS_MAC_CYRILLIC=m -CONFIG_NLS_MAC_GAELIC=m -CONFIG_NLS_MAC_GREEK=m -CONFIG_NLS_MAC_ICELAND=m -CONFIG_NLS_MAC_INUIT=m -CONFIG_NLS_MAC_ROMANIAN=m -CONFIG_NLS_MAC_TURKISH=m -CONFIG_NLS_UTF8=y -CONFIG_DLM=m -# CONFIG_DLM_DEBUG is not set - -# -# Kernel hacking -# - -# -# printk and dmesg options -# -CONFIG_PRINTK_TIME=y -CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 -CONFIG_DYNAMIC_DEBUG=y - -# -# Compile-time checks and compiler options -# -CONFIG_ENABLE_WARN_DEPRECATED=y -CONFIG_ENABLE_MUST_CHECK=y -CONFIG_FRAME_WARN=1024 -CONFIG_STRIP_ASM_SYMS=y -# CONFIG_UNUSED_SYMBOLS is not set -CONFIG_DEBUG_FS=y -# CONFIG_HEADERS_CHECK is not set -# CONFIG_DEBUG_SECTION_MISMATCH is not set -CONFIG_SECTION_MISMATCH_WARN_ONLY=y -CONFIG_MAGIC_SYSRQ=y -CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1 -# CONFIG_DEBUG_KERNEL is not set - -# -# Memory Debugging -# -# CONFIG_PAGE_EXTENSION is not set -# CONFIG_SLUB_STATS is not set -CONFIG_HAVE_DEBUG_KMEMLEAK=y -# CONFIG_DEBUG_MEMORY_INIT is not set - -# -# Debug Lockups and Hangs -# -CONFIG_PANIC_ON_OOPS=y -CONFIG_PANIC_ON_OOPS_VALUE=1 -CONFIG_PANIC_TIMEOUT=1 -# CONFIG_SCHED_INFO is not set -# CONFIG_DEBUG_TIMEKEEPING is not set - -# -# Lock Debugging (spinlocks, mutexes, etc...) -# -CONFIG_STACKTRACE=y -CONFIG_DEBUG_BUGVERBOSE=y - -# -# RCU Debugging -# -# CONFIG_PROVE_RCU is not set -# CONFIG_SPARSE_RCU_POINTER is not set -# CONFIG_TORTURE_TEST is not set -CONFIG_RCU_CPU_STALL_TIMEOUT=300 -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 is not set -# CONFIG_IRQSOFF_TRACER is not set -# CONFIG_PREEMPT_TRACER is not set -# CONFIG_SCHED_TRACER is not set -# CONFIG_MISSED_TIMER_OFFSETS_HIST is not set -# CONFIG_FTRACE_SYSCALLS is not set -# 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 is not set -# CONFIG_BLK_DEV_IO_TRACE is not set -# CONFIG_UPROBE_EVENT is not set -# CONFIG_PROBE_EVENTS is not set -CONFIG_DYNAMIC_FTRACE=y -# CONFIG_FUNCTION_PROFILER is not set -CONFIG_FTRACE_MCOUNT_RECORD=y -# CONFIG_FTRACE_STARTUP_TEST is not set -# CONFIG_TRACEPOINT_BENCHMARK is not set -# CONFIG_RING_BUFFER_BENCHMARK is not set -# CONFIG_RING_BUFFER_STARTUP_TEST is not set -# CONFIG_TRACE_ENUM_MAP_FILE is not set -# CONFIG_TRACING_EVENTS_GPIO is not set - -# -# Runtime Testing -# -# CONFIG_LKDTM is not set -# CONFIG_ATOMIC64_SELFTEST is not set -# CONFIG_ASYNC_RAID6_TEST is not set -# CONFIG_TEST_HEXDUMP is not set -# CONFIG_TEST_STRING_HELPERS is not set -# CONFIG_TEST_KSTRTOX is not set -# CONFIG_TEST_PRINTF is not set -# CONFIG_TEST_RHASHTABLE is not set -# CONFIG_DMA_API_DEBUG is not set -# CONFIG_TEST_LKM is not set -# CONFIG_TEST_USER_COPY is not set -# CONFIG_TEST_BPF is not set -# CONFIG_TEST_FIRMWARE is not set -# CONFIG_TEST_UDELAY is not set -# CONFIG_MEMTEST is not set -# CONFIG_TEST_STATIC_KEYS is not set -# CONFIG_SAMPLES is not set -CONFIG_HAVE_ARCH_KGDB=y -# CONFIG_STRICT_DEVMEM is not set -CONFIG_ARM_UNWIND=y -# CONFIG_DEBUG_USER is not set -CONFIG_DEBUG_IMX_UART_PORT=1 -CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S" -# CONFIG_DEBUG_UART_8250 is not set -CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h" -# CONFIG_PID_IN_CONTEXTIDR is not set -# CONFIG_DEBUG_SET_MODULE_RONX is not set -# CONFIG_CORESIGHT is not set - -# -# Security options -# -CONFIG_KEYS=y -# CONFIG_PERSISTENT_KEYRINGS is not set -# CONFIG_BIG_KEYS is not set -CONFIG_ENCRYPTED_KEYS=y -# CONFIG_SECURITY_DMESG_RESTRICT is not set -# CONFIG_SECURITY is not set -# CONFIG_SECURITYFS is not set -CONFIG_DEFAULT_SECURITY_DAC=y -CONFIG_DEFAULT_SECURITY="" -CONFIG_XOR_BLOCKS=y -CONFIG_ASYNC_CORE=m -CONFIG_ASYNC_MEMCPY=m -CONFIG_ASYNC_XOR=m -CONFIG_ASYNC_PQ=m -CONFIG_ASYNC_RAID6_RECOV=m -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_RNG_DEFAULT=y -CONFIG_CRYPTO_PCOMP=y -CONFIG_CRYPTO_PCOMP2=y -CONFIG_CRYPTO_AKCIPHER2=y -CONFIG_CRYPTO_AKCIPHER=m -CONFIG_CRYPTO_RSA=m -CONFIG_CRYPTO_CRYPTODEV=y -CONFIG_CRYPTO_MANAGER=y -CONFIG_CRYPTO_MANAGER2=y -CONFIG_CRYPTO_USER=m -CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y -CONFIG_CRYPTO_GF128MUL=y -CONFIG_CRYPTO_NULL=y -CONFIG_CRYPTO_NULL2=y -CONFIG_CRYPTO_PCRYPT=y -CONFIG_CRYPTO_WORKQUEUE=y -CONFIG_CRYPTO_CRYPTD=y -CONFIG_CRYPTO_MCRYPTD=m -CONFIG_CRYPTO_AUTHENC=y -# CONFIG_CRYPTO_TEST is not set - -# -# Authenticated Encryption with Associated Data -# -CONFIG_CRYPTO_CCM=y -CONFIG_CRYPTO_GCM=y -CONFIG_CRYPTO_CHACHA20POLY1305=m -CONFIG_CRYPTO_SEQIV=y -CONFIG_CRYPTO_ECHAINIV=m - -# -# Block modes -# -CONFIG_CRYPTO_CBC=y -CONFIG_CRYPTO_CTR=y -CONFIG_CRYPTO_CTS=y -CONFIG_CRYPTO_ECB=y -CONFIG_CRYPTO_LRW=y -CONFIG_CRYPTO_PCBC=y -CONFIG_CRYPTO_XTS=y -CONFIG_CRYPTO_KEYWRAP=m - -# -# Hash modes -# -CONFIG_CRYPTO_CMAC=y -CONFIG_CRYPTO_HMAC=y -CONFIG_CRYPTO_XCBC=y -CONFIG_CRYPTO_VMAC=y - -# -# Digest -# -CONFIG_CRYPTO_CRC32C=y -CONFIG_CRYPTO_CRC32=y -CONFIG_CRYPTO_CRCT10DIF=y -CONFIG_CRYPTO_GHASH=y -CONFIG_CRYPTO_POLY1305=m -CONFIG_CRYPTO_MD4=y -CONFIG_CRYPTO_MD5=y -CONFIG_CRYPTO_MICHAEL_MIC=y -CONFIG_CRYPTO_RMD128=m -CONFIG_CRYPTO_RMD160=m -CONFIG_CRYPTO_RMD256=m -CONFIG_CRYPTO_RMD320=m -CONFIG_CRYPTO_SHA1=y -CONFIG_CRYPTO_SHA256=y -CONFIG_CRYPTO_SHA512=y -CONFIG_CRYPTO_TGR192=m -CONFIG_CRYPTO_WP512=m - -# -# Ciphers -# -CONFIG_CRYPTO_AES=y -CONFIG_CRYPTO_ANUBIS=m -CONFIG_CRYPTO_ARC4=y -CONFIG_CRYPTO_BLOWFISH=m -CONFIG_CRYPTO_BLOWFISH_COMMON=m -CONFIG_CRYPTO_CAMELLIA=m -CONFIG_CRYPTO_CAST_COMMON=m -CONFIG_CRYPTO_CAST5=m -CONFIG_CRYPTO_CAST6=m -CONFIG_CRYPTO_DES=y -CONFIG_CRYPTO_FCRYPT=m -CONFIG_CRYPTO_KHAZAD=m -CONFIG_CRYPTO_SALSA20=m -CONFIG_CRYPTO_CHACHA20=m -CONFIG_CRYPTO_SEED=m -CONFIG_CRYPTO_SERPENT=m -CONFIG_CRYPTO_TEA=y -CONFIG_CRYPTO_TWOFISH=y -CONFIG_CRYPTO_TWOFISH_COMMON=y - -# -# Compression -# -CONFIG_CRYPTO_DEFLATE=y -CONFIG_CRYPTO_ZLIB=y -CONFIG_CRYPTO_LZO=y -CONFIG_CRYPTO_842=m -CONFIG_CRYPTO_LZ4=y -CONFIG_CRYPTO_LZ4HC=y - -# -# Random Number Generation -# -CONFIG_CRYPTO_ANSI_CPRNG=m -CONFIG_CRYPTO_DRBG_MENU=y -CONFIG_CRYPTO_DRBG_HMAC=y -# CONFIG_CRYPTO_DRBG_HASH is not set -# CONFIG_CRYPTO_DRBG_CTR is not set -CONFIG_CRYPTO_DRBG=y -CONFIG_CRYPTO_JITTERENTROPY=y -CONFIG_CRYPTO_USER_API=m -CONFIG_CRYPTO_USER_API_HASH=m -CONFIG_CRYPTO_USER_API_SKCIPHER=m -CONFIG_CRYPTO_USER_API_RNG=m -# CONFIG_CRYPTO_USER_API_AEAD is not set -CONFIG_CRYPTO_HASH_INFO=y -CONFIG_CRYPTO_HW=y -# CONFIG_CRYPTO_DEV_HIFN_795X is not set -CONFIG_CRYPTO_DEV_FSL_CAAM=y -CONFIG_CRYPTO_DEV_FSL_CAAM_JR=y -CONFIG_CRYPTO_DEV_FSL_CAAM_RINGSIZE=9 -# CONFIG_CRYPTO_DEV_FSL_CAAM_INTC is not set -CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API=y -CONFIG_CRYPTO_DEV_FSL_CAAM_AHASH_API=y -CONFIG_CRYPTO_DEV_FSL_CAAM_RNG_API=y -CONFIG_CRYPTO_DEV_FSL_CAAM_IMX=y -CONFIG_CRYPTO_DEV_FSL_CAAM_LE=y -# CONFIG_CRYPTO_DEV_FSL_CAAM_SM is not set -# CONFIG_CRYPTO_DEV_FSL_CAAM_SECVIO is not set -# CONFIG_CRYPTO_DEV_FSL_CAAM_DEBUG is not set -# CONFIG_CRYPTO_DEV_SAHARA is not set -# CONFIG_CRYPTO_DEV_MXS_DCP is not set -CONFIG_ASYMMETRIC_KEY_TYPE=m -CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m -CONFIG_PUBLIC_KEY_ALGO_RSA=m -CONFIG_X509_CERTIFICATE_PARSER=m -CONFIG_PKCS7_MESSAGE_PARSER=m -# CONFIG_PKCS7_TEST_KEY is not set - -# -# Certificates for signature checking -# -# CONFIG_SYSTEM_TRUSTED_KEYRING is not set -# CONFIG_ARM_CRYPTO is not set -CONFIG_BINARY_PRINTF=y - -# -# Library routines -# -CONFIG_RAID6_PQ=y -CONFIG_BITREVERSE=y -CONFIG_HAVE_ARCH_BITREVERSE=y -CONFIG_RATIONAL=y -CONFIG_GENERIC_STRNCPY_FROM_USER=y -CONFIG_GENERIC_STRNLEN_USER=y -CONFIG_GENERIC_NET_UTILS=y -CONFIG_GENERIC_PCI_IOMAP=y -CONFIG_GENERIC_IO=y -CONFIG_STMP_DEVICE=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=y -CONFIG_LIBCRC32C=y -CONFIG_CRC8=m -# CONFIG_AUDIT_ARCH_COMPAT_GENERIC is not set -# CONFIG_RANDOM32_SELFTEST is not set -CONFIG_842_COMPRESS=m -CONFIG_842_DECOMPRESS=m -CONFIG_ZLIB_INFLATE=y -CONFIG_ZLIB_DEFLATE=y -CONFIG_LZO_COMPRESS=y -CONFIG_LZO_DECOMPRESS=y -CONFIG_LZ4_COMPRESS=y -CONFIG_LZ4HC_COMPRESS=y -CONFIG_LZ4_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=y -CONFIG_XZ_DEC_ARMTHUMB=y -# CONFIG_XZ_DEC_SPARC is not set -CONFIG_XZ_DEC_BCJ=y -# CONFIG_XZ_DEC_TEST is not set -CONFIG_DECOMPRESS_GZIP=y -CONFIG_DECOMPRESS_LZO=y -CONFIG_GENERIC_ALLOCATOR=y -CONFIG_TEXTSEARCH=y -CONFIG_TEXTSEARCH_KMP=m -CONFIG_TEXTSEARCH_BM=m -CONFIG_TEXTSEARCH_FSM=m -CONFIG_BTREE=y -CONFIG_ASSOCIATIVE_ARRAY=y -CONFIG_HAS_IOMEM=y -CONFIG_HAS_IOPORT_MAP=y -CONFIG_HAS_DMA=y -CONFIG_CPU_RMAP=y -CONFIG_DQL=y -CONFIG_GLOB=y -# CONFIG_GLOB_SELFTEST is not set -CONFIG_NLATTR=y -CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y -CONFIG_CLZ_TAB=y -CONFIG_CORDIC=y -# CONFIG_DDR is not set -CONFIG_MPILIB=m -CONFIG_LIBFDT=y -CONFIG_OID_REGISTRY=y -CONFIG_FONT_SUPPORT=y -# CONFIG_FONTS is not set -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y -# CONFIG_SG_SPLIT is not set -CONFIG_ARCH_HAS_SG_CHAIN=y -# CONFIG_VIRTUALIZATION is not set diff --git a/projects/imx6/options b/projects/imx6/options deleted file mode 100644 index 4dab4f8129..0000000000 --- a/projects/imx6/options +++ /dev/null @@ -1,132 +0,0 @@ -################################################################################ -# setup system defaults -################################################################################ - - # The TARGET_CPU variable controls which processor should be targeted for - # generated code. - case $TARGET_ARCH in - arm) - TARGET_CPU="cortex-a9" - TARGET_FLOAT="hard" - TARGET_FPU="neon" - TARGET_FEATURES="32bit neon" - ;; - esac - - # Bootloader to use (syslinux / u-boot / bcm2835-bootloader) - BOOTLOADER="u-boot" - - # u-boot version to use (default) - UBOOT_VERSION="imx6-cuboxi" - - # Configuration for u-boot - UBOOT_CONFIG="mx6_cubox-i_config \ - matrix" - - # for second u-boot - UBOOT_CONFIG_V2="udoo_config \ - tbs2910_config" - - # Target Configfile for u-boot - UBOOT_CONFIGFILE="" - - # Kernel target - KERNEL_TARGET="zImage" - - # Kernel extra targets to build - KERNEL_UBOOT_EXTRA_TARGET=" - imx6q-cubox-i.dtb imx6dl-cubox-i.dtb \ - imx6q-cubox-i-som-v15.dtb imx6dl-cubox-i-som-v15.dtb \ - imx6q-hummingboard.dtb imx6dl-hummingboard.dtb \ - imx6q-hummingboard-som-v15.dtb imx6dl-hummingboard-som-v15.dtb \ - imx6q-hummingboard2.dtb imx6dl-hummingboard2.dtb \ - imx6q-hummingboard2-som-v15.dtb imx6dl-hummingboard2-som-v15.dtb \ - imx6q-tbs2910.dtb \ - imx6q-udoo.dtb imx6dl-udoo.dtb \ - imx6q-udoo-7lvds.dtb imx6dl-udoo-7lvds.dtb \ - imx6q-udoo-15lvds.dtb imx6dl-udoo-15lvds.dtb" - - # Additional kernel make parameters (for example to specify the u-boot loadaddress) - KERNEL_MAKE_EXTRACMD="" - - # Kernel to use. - # default is 4.4 from xbian - if [ "$LINUX_VERSION" = "3.14-sr" ]; then - LINUX="imx6-$LINUX_VERSION" - - # OpenGL-ES implementation to use - OPENGLES="imx-gpu-viv" - elif [ "$LINUX_VERSION" = "4.8-xbian" ]; then - LINUX="imx6-$LINUX_VERSION" - - # OpenGL-ES implementation to use - OPENGLES="gpu-viv-bin-mx6q" - elif [ "$LINUX_VERSION" = "4.10-xbian" ]; then - LINUX="imx6-$LINUX_VERSION" - - # OpenGL-ES implementation to use - OPENGLES="gpu-viv-bin-mx6q" - else - LINUX="imx6-4.4-xbian" - - # OpenGL-ES implementation to use - OPENGLES="imx-gpu-viv" - fi - -################################################################################ -# setup build defaults -################################################################################ - - # Project CFLAGS - PROJECT_CFLAGS="" - - # 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" - - # 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) - # Space separated list is supported, - # e.g. GRAPHIC_DRIVERS="i915 i965 r300 r600 radeonsi nvidia" - GRAPHIC_DRIVERS="" - - # KODI Player implementation to use (default / bcm2835-driver / libfslvpuwrap) - KODIPLAYER_DRIVER="libfslvpuwrap" - - # Modules to install in initramfs for early boot - INITRAMFS_MODULES="" - - # additional drivers to install: - # for a list of additional drivers see packages/linux-drivers - # Space separated list is supported, - # e.g. ADDITIONAL_DRIVERS="DRIVER1 DRIVER2" - ADDITIONAL_DRIVERS="$ADDITIONAL_DRIVERS" - - # 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 brcmfmac_sdio-firmware-imx" - - # build and install ATV IR remote support (yes / no) - ATVCLIENT_SUPPORT="no" - - # build with installer (yes / no) - INSTALLER_SUPPORT="no" - diff --git a/projects/imx6/patches/RTL8192EU/RTL8192EU-010-compile-3.14.patch b/projects/imx6/patches/RTL8192EU/RTL8192EU-010-compile-3.14.patch deleted file mode 100644 index ce08da9805..0000000000 --- a/projects/imx6/patches/RTL8192EU/RTL8192EU-010-compile-3.14.patch +++ /dev/null @@ -1,40 +0,0 @@ -diff --git a/os_dep/linux/ioctl_cfg80211.c b/os_dep/linux/ioctl_cfg80211.c -index 2b92c93..f3722fb 100644 ---- a/os_dep/linux/ioctl_cfg80211.c -+++ b/os_dep/linux/ioctl_cfg80211.c -@@ -659,7 +659,7 @@ void rtw_cfg80211_ibss_indicate_connect(_adapter *padapter) - struct wlan_network *cur_network = &(pmlmepriv->cur_network); - struct wireless_dev *pwdev = padapter->rtw_wdev; - struct cfg80211_bss *bss = NULL; --#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0)) -+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) - struct wiphy *wiphy = pwdev->wiphy; - int freq = 2412; - struct ieee80211_channel *notify_channel; -@@ -667,7 +667,7 @@ void rtw_cfg80211_ibss_indicate_connect(_adapter *padapter) - - DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter)); - --#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0)) -+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) - freq = rtw_ch2freq(cur_network->network.Configuration.DSConfig); - - if (0) -@@ -723,7 +723,7 @@ void rtw_cfg80211_ibss_indicate_connect(_adapter *padapter) - DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" BSS not found !!\n", FUNC_ADPT_ARG(padapter)); - } - //notify cfg80211 that device joined an IBSS --#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0)) -+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) - notify_channel = ieee80211_get_channel(wiphy, freq); - cfg80211_ibss_joined(padapter->pnetdev, cur_network->network.MacAddress, notify_channel, GFP_ATOMIC); - #else -@@ -5739,7 +5739,7 @@ static int cfg80211_rtw_tdls_mgmt(struct wiphy *wiphy, - u8 action_code, - u8 dialog_token, - u16 status_code, --#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0)) -+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) - u32 peer_capability, - #endif - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 17, 0)) diff --git a/projects/imx6/patches/RTL8812AU/RTL8812AU-010-compile-3.14.patch b/projects/imx6/patches/RTL8812AU/RTL8812AU-010-compile-3.14.patch deleted file mode 100644 index 8316b2d4da..0000000000 --- a/projects/imx6/patches/RTL8812AU/RTL8812AU-010-compile-3.14.patch +++ /dev/null @@ -1,40 +0,0 @@ -diff --git a/os_dep/linux/ioctl_cfg80211.c b/os_dep/linux/ioctl_cfg80211.c -index 5895645..e09b7c3 100644 ---- a/os_dep/linux/ioctl_cfg80211.c -+++ b/os_dep/linux/ioctl_cfg80211.c -@@ -613,7 +613,7 @@ void rtw_cfg80211_ibss_indicate_connect(_adapter *padapter) - struct wlan_network *cur_network = &(pmlmepriv->cur_network); - struct wireless_dev *pwdev = padapter->rtw_wdev; - struct cfg80211_bss *bss = NULL; --#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0)) -+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) - struct wiphy *wiphy = pwdev->wiphy; - int freq = 2412; - struct ieee80211_channel *notify_channel; -@@ -621,7 +621,7 @@ void rtw_cfg80211_ibss_indicate_connect(_adapter *padapter) - - RTW_INFO(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter)); - --#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0)) -+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) - freq = rtw_ch2freq(cur_network->network.Configuration.DSConfig); - - if (0) -@@ -669,7 +669,7 @@ void rtw_cfg80211_ibss_indicate_connect(_adapter *padapter) - RTW_PRINT(FUNC_ADPT_FMT" BSS not found !!\n", FUNC_ADPT_ARG(padapter)); - } - /* notify cfg80211 that device joined an IBSS */ --#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0)) -+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) - notify_channel = ieee80211_get_channel(wiphy, freq); - cfg80211_ibss_joined(padapter->pnetdev, cur_network->network.MacAddress, notify_channel, GFP_ATOMIC); - #else -@@ -5512,7 +5512,7 @@ static int cfg80211_rtw_tdls_mgmt(struct wiphy *wiphy, - u8 action_code, - u8 dialog_token, - u16 status_code, --#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0)) -+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) - u32 peer_capability, - #endif - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 17, 0)) diff --git a/projects/imx6/patches/alsa-lib/alsa-lib-enable_imx_passthrough_over_spdif_old_kernel.patch b/projects/imx6/patches/alsa-lib/alsa-lib-enable_imx_passthrough_over_spdif_old_kernel.patch deleted file mode 100644 index cec715362e..0000000000 --- a/projects/imx6/patches/alsa-lib/alsa-lib-enable_imx_passthrough_over_spdif_old_kernel.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/src/conf/cards/aliases.conf b/src/conf/cards/aliases.conf -index 18a920f..cbe7e42 100644 ---- a/src/conf/cards/aliases.conf -+++ b/src/conf/cards/aliases.conf -@@ -2,6 +2,8 @@ - # Define aliases for various drivers - # - -+'On-board_SPDIF' cards.imx-spdif -+'Integrated_SPDI' cards.imx-spdif - YMF724 cards.YMF744 - YMF724F cards.YMF744 - YMF740 cards.YMF744 diff --git a/projects/imx6/patches/libcec/3.14-sr/libcec-100-from-openbricks-3.14.patch b/projects/imx6/patches/libcec/3.14-sr/libcec-100-from-openbricks-3.14.patch deleted file mode 100644 index f982215fe1..0000000000 --- a/projects/imx6/patches/libcec/3.14-sr/libcec-100-from-openbricks-3.14.patch +++ /dev/null @@ -1,743 +0,0 @@ -From e9d9bfee5506a7b00312f62722009a0194f81dfd Mon Sep 17 00:00:00 2001 -From: Peter Vicman -Date: Sat, 3 Dec 2016 13:53:30 +0100 -Subject: [PATCH] patch for libcec from openbricks - -libcec base: libcec-209884d -libcec openbricks: - https://github.com/warped-rudi/libcec/tree/libcec4-imx 47e1d6aba475616fc267aa0c2097949b55cfdedc ---- - include/cectypes.h | 11 + - src/libcec/CECTypeUtils.h | 2 + - src/libcec/CMakeLists.txt | 2 + - src/libcec/adapter/AdapterFactory.cpp | 28 +- - .../adapter/IMX/IMXCECAdapterCommunication.cpp | 321 +++++++++++++++++++++ - .../adapter/IMX/IMXCECAdapterCommunication.h | 115 ++++++++ - src/libcec/adapter/IMX/IMXCECAdapterDetection.cpp | 42 +++ - src/libcec/adapter/IMX/IMXCECAdapterDetection.h | 36 +++ - src/libcec/cmake/CheckPlatformSupport.cmake | 13 + - src/libcec/cmake/DisplayPlatformSupport.cmake | 10 +- - src/libcec/env.h.in | 3 + - 11 files changed, 579 insertions(+), 4 deletions(-) - create mode 100644 src/libcec/adapter/IMX/IMXCECAdapterCommunication.cpp - create mode 100644 src/libcec/adapter/IMX/IMXCECAdapterCommunication.h - create mode 100644 src/libcec/adapter/IMX/IMXCECAdapterDetection.cpp - create mode 100644 src/libcec/adapter/IMX/IMXCECAdapterDetection.h - -diff --git a/include/cectypes.h b/include/cectypes.h -index 9c91842..68e90e0 100644 ---- a/include/cectypes.h -+++ b/include/cectypes.h -@@ -292,6 +292,16 @@ namespace CEC { - #define CEC_AOCEC_VIRTUAL_COM "AOCEC" - - /*! -+ * the path to use for the i.MX CEC wire -+ */ -+#define CEC_IMX_PATH "/dev/mxc_hdmi_cec" -+ -+/*! -+ * the name of the virtual COM port to use for the i.MX CEC wire -+ */ -+#define CEC_IMX_VIRTUAL_COM "i.MX" -+ -+/*! - * Mimimum client version - */ - #define CEC_MIN_LIB_VERSION 4 -@@ -861,6 +871,7 @@ typedef enum cec_adapter_type - ADAPTERTYPE_RPI = 0x100, - ADAPTERTYPE_TDA995x = 0x200, - ADAPTERTYPE_EXYNOS = 0x300, -+ ADAPTERTYPE_IMX = 0x400, - ADAPTERTYPE_AOCEC = 0x500 - } cec_adapter_type; - -diff --git a/src/libcec/CECTypeUtils.h b/src/libcec/CECTypeUtils.h -index 0d0cf17..f6c818a 100644 ---- a/src/libcec/CECTypeUtils.h -+++ b/src/libcec/CECTypeUtils.h -@@ -766,6 +766,8 @@ namespace CEC - return "Raspberry Pi"; - case ADAPTERTYPE_TDA995x: - return "TDA995x"; -+ case ADAPTERTYPE_IMX: -+ return "i.MX"; - default: - return "unknown"; - } -diff --git a/src/libcec/CMakeLists.txt b/src/libcec/CMakeLists.txt -index d3eefa3..a8fb9d0 100644 ---- a/src/libcec/CMakeLists.txt -+++ b/src/libcec/CMakeLists.txt -@@ -103,6 +103,8 @@ set(CEC_HEADERS devices/CECRecordingDevice.h - adapter/RPi/RPiCECAdapterMessageQueue.h - adapter/RPi/RPiCECAdapterCommunication.h - adapter/RPi/RPiCECAdapterDetection.h -+ adapter/IMX/IMXCECAdapterCommunication.h -+ adapter/IMX/IMXCECAdapterDetection.h - CECInputBuffer.h - platform/util/baudrate.h - platform/util/edid.h -diff --git a/src/libcec/adapter/AdapterFactory.cpp b/src/libcec/adapter/AdapterFactory.cpp -index 1e946e6..045c93e 100644 ---- a/src/libcec/adapter/AdapterFactory.cpp -+++ b/src/libcec/adapter/AdapterFactory.cpp -@@ -63,6 +63,11 @@ - #include "AOCEC/AOCECAdapterCommunication.h" - #endif - -+#if defined(HAVE_IMX_API) -+#include "IMX/IMXCECAdapterDetection.h" -+#include "IMX/IMXCECAdapterCommunication.h" -+#endif -+ - using namespace CEC; - - int8_t CAdapterFactory::FindAdapters(cec_adapter *deviceList, uint8_t iBufSize, const char *strDevicePath /* = NULL */) -@@ -143,8 +148,21 @@ int8_t CAdapterFactory::DetectAdapters(cec_adapter_descriptor *deviceList, uint8 - } - #endif - -+#if defined(HAVE_IMX_API) -+ if (iAdaptersFound < iBufSize && CIMXCECAdapterDetection::FindAdapter() && -+ (!strDevicePath || !strcmp(strDevicePath, CEC_IMX_VIRTUAL_COM))) -+ { -+ snprintf(deviceList[iAdaptersFound].strComPath, sizeof(deviceList[iAdaptersFound].strComPath), CEC_IMX_PATH); -+ snprintf(deviceList[iAdaptersFound].strComName, sizeof(deviceList[iAdaptersFound].strComName), CEC_IMX_VIRTUAL_COM); -+ deviceList[iAdaptersFound].iVendorId = IMX_ADAPTER_VID; -+ deviceList[iAdaptersFound].iProductId = IMX_ADAPTER_PID; -+ deviceList[iAdaptersFound].adapterType = ADAPTERTYPE_IMX; -+ iAdaptersFound++; -+ } -+#endif - --#if !defined(HAVE_RPI_API) && !defined(HAVE_P8_USB) && !defined(HAVE_TDA995X_API) && !defined(HAVE_AOCEC_API) -+#if !defined(HAVE_RPI_API) && !defined(HAVE_P8_USB) && !defined(HAVE_TDA995X_API) && \ -+ !defined(HAVE_EXYNOS_API) && !defined(HAVE_AOCEC_API) && !defined(HAVE_IMX_API) - #error "libCEC doesn't have support for any type of adapter. please check your build system or configuration" - #endif - -@@ -173,11 +191,17 @@ IAdapterCommunication *CAdapterFactory::GetInstance(const char *strPort, uint16_ - return new CRPiCECAdapterCommunication(m_lib->m_cec); - #endif - -+#if defined(HAVE_IMX_API) -+ if (!strcmp(strPort, CEC_IMX_VIRTUAL_COM)) -+ return new CIMXCECAdapterCommunication(m_lib->m_cec); -+#endif -+ - #if defined(HAVE_P8_USB) - return new CUSBCECAdapterCommunication(m_lib->m_cec, strPort, iBaudRate); - #endif - --#if !defined(HAVE_RPI_API) && !defined(HAVE_P8_USB) && !defined(HAVE_TDA995X_API) && !defined(HAVE_EXYNOS_API) && !defined(HAVE_AOCEC_API) -+#if !defined(HAVE_RPI_API) && !defined(HAVE_P8_USB) && !defined(HAVE_TDA995X_API) && \ -+ !defined(HAVE_EXYNOS_API) && !defined(HAVE_AOCEC_API) && !defined(HAVE_IMX_API) - return NULL; - #endif - } -diff --git a/src/libcec/adapter/IMX/IMXCECAdapterCommunication.cpp b/src/libcec/adapter/IMX/IMXCECAdapterCommunication.cpp -new file mode 100644 -index 0000000..f433b03 ---- /dev/null -+++ b/src/libcec/adapter/IMX/IMXCECAdapterCommunication.cpp -@@ -0,0 +1,321 @@ -+/* -+ * This file is part of the libCEC(R) library. -+ * -+ * libCEC(R) is Copyright (C) 2011-2013 Pulse-Eight Limited. All rights reserved. -+ * libCEC(R) is an original work, containing original code. -+ * -+ * libCEC(R) is a trademark of Pulse-Eight Limited. -+ * -+ * IMX adpater port is Copyright (C) 2013 by Stephan Rafin -+ * -+ * You can redistribute this file and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * -+ */ -+ -+#include "env.h" -+ -+#if defined(HAVE_IMX_API) -+#include "IMXCECAdapterCommunication.h" -+ -+#include "p8-platform/sockets/cdevsocket.h" -+#include "CECTypeUtils.h" -+#include "LibCEC.h" -+ -+/* -+ * Ioctl definitions from kernel header -+ */ -+#define HDMICEC_IOC_MAGIC 'H' -+#define HDMICEC_IOC_SETLOGICALADDRESS _IOW(HDMICEC_IOC_MAGIC, 1, unsigned char) -+#define HDMICEC_IOC_STARTDEVICE _IO(HDMICEC_IOC_MAGIC, 2) -+#define HDMICEC_IOC_STOPDEVICE _IO(HDMICEC_IOC_MAGIC, 3) -+#define HDMICEC_IOC_GETPHYADDRESS _IOR(HDMICEC_IOC_MAGIC, 4, unsigned char[4]) -+ -+#define MAX_CEC_MESSAGE_LEN 17 -+ -+#define MESSAGE_TYPE_RECEIVE_SUCCESS 1 -+#define MESSAGE_TYPE_NOACK 2 -+#define MESSAGE_TYPE_DISCONNECTED 3 -+#define MESSAGE_TYPE_CONNECTED 4 -+#define MESSAGE_TYPE_SEND_SUCCESS 5 -+ -+typedef struct hdmi_cec_event{ -+ int event_type; -+ int msg_len; -+ unsigned char msg[MAX_CEC_MESSAGE_LEN]; -+}hdmi_cec_event; -+ -+ -+using namespace std; -+using namespace CEC; -+using namespace P8PLATFORM; -+ -+#define LIB_CEC m_callback->GetLib() -+ -+// these are defined in nxp private header file -+#define CEC_MSG_SUCCESS 0x00 /*Message transmisson Succeed*/ -+#define CEC_CSP_OFF_STATE 0x80 /*CSP in Off State*/ -+#define CEC_BAD_REQ_SERVICE 0x81 /*Bad .req service*/ -+#define CEC_MSG_FAIL_UNABLE_TO_ACCESS 0x82 /*Message transmisson failed: Unable to access CEC line*/ -+#define CEC_MSG_FAIL_ARBITRATION_ERROR 0x83 /*Message transmisson failed: Arbitration error*/ -+#define CEC_MSG_FAIL_BIT_TIMMING_ERROR 0x84 /*Message transmisson failed: Bit timming error*/ -+#define CEC_MSG_FAIL_DEST_NOT_ACK 0x85 /*Message transmisson failed: Destination Address not aknowledged*/ -+#define CEC_MSG_FAIL_DATA_NOT_ACK 0x86 /*Message transmisson failed: Databyte not acknowledged*/ -+ -+ -+CIMXCECAdapterCommunication::CIMXCECAdapterCommunication(IAdapterCommunicationCallback *callback) : -+ IAdapterCommunication(callback) -+{ -+ CLockObject lock(m_mutex); -+ -+ m_iNextMessage = 0; -+ m_logicalAddress = CECDEVICE_UNKNOWN; -+ m_bLogicalAddressRegistered = false; -+ m_bInitialised = false; -+ m_dev = new CCDevSocket(CEC_IMX_PATH); -+} -+ -+CIMXCECAdapterCommunication::~CIMXCECAdapterCommunication(void) -+{ -+ Close(); -+ -+ CLockObject lock(m_mutex); -+ delete m_dev; -+ m_dev = 0; -+} -+ -+bool CIMXCECAdapterCommunication::IsOpen(void) -+{ -+ return IsInitialised() && m_dev->IsOpen(); -+} -+ -+bool CIMXCECAdapterCommunication::Open(uint32_t iTimeoutMs, bool UNUSED(bSkipChecks), bool bStartListening) -+{ -+ if (m_dev->Open(iTimeoutMs)) -+ { -+ if (!bStartListening || CreateThread()) { -+ if (m_dev->Ioctl(HDMICEC_IOC_STARTDEVICE, NULL) == 0) { -+ m_bInitialised = true; -+ return true; -+ } -+ LIB_CEC->AddLog(CEC_LOG_ERROR, "%s: Unable to start device\n", __func__); -+ } -+ m_dev->Close(); -+ } -+ -+ return false; -+} -+ -+ -+void CIMXCECAdapterCommunication::Close(void) -+{ -+ StopThread(0); -+ -+ CLockObject lock(m_mutex); -+ if (!m_bInitialised) { -+ return; -+ } -+ if (m_dev->Ioctl(HDMICEC_IOC_STOPDEVICE, NULL) != 0) { -+ LIB_CEC->AddLog(CEC_LOG_ERROR, "%s: Unable to stop device\n", __func__); -+ } -+ m_dev->Close(); -+ m_bInitialised = false; -+} -+ -+ -+std::string CIMXCECAdapterCommunication::GetError(void) const -+{ -+ std::string strError(m_strError); -+ return strError; -+} -+ -+ -+cec_adapter_message_state CIMXCECAdapterCommunication::Write( -+ const cec_command &data, bool &UNUSED(bRetry), uint8_t UNUSED(iLineTimeout), bool UNUSED(bIsReply)) -+{ -+ int error, msg_len = 1; -+ unsigned char message[MAX_CEC_MESSAGE_LEN]; -+ -+ if ((size_t)data.parameters.size + data.opcode_set + 1 > sizeof(message)) -+ { -+ LIB_CEC->AddLog(CEC_LOG_ERROR, "%s: data size too large !", __func__); -+ return ADAPTER_MESSAGE_STATE_ERROR; -+ } -+ -+ message[0] = (data.initiator << 4) | (data.destination & 0x0f); -+ if (data.opcode_set) -+ { -+ message[1] = data.opcode; -+ msg_len++; -+ memcpy(&message[2], data.parameters.data, data.parameters.size); -+ msg_len+=data.parameters.size; -+ } -+ -+ if (m_dev->Write(message, msg_len) == msg_len) -+ return ADAPTER_MESSAGE_STATE_SENT_ACKED; -+ -+ error = m_dev->GetErrorNumber(); -+ if (error == EIO) -+ return ADAPTER_MESSAGE_STATE_SENT_NOT_ACKED; -+ -+ if (error != EAGAIN) -+ LIB_CEC->AddLog(CEC_LOG_ERROR, "%s: write error %d", __func__, error); -+ -+ return ADAPTER_MESSAGE_STATE_ERROR; -+} -+ -+ -+uint16_t CIMXCECAdapterCommunication::GetFirmwareVersion(void) -+{ -+ /* FIXME add ioctl ? */ -+ return 1; -+} -+ -+ -+cec_vendor_id CIMXCECAdapterCommunication::GetVendorId(void) -+{ -+ return CEC_VENDOR_UNKNOWN; -+} -+ -+ -+uint16_t CIMXCECAdapterCommunication::GetPhysicalAddress(void) -+{ -+ uint32_t info; -+ uint16_t phy_addr; -+ -+ if (m_dev->Ioctl(HDMICEC_IOC_GETPHYADDRESS, &info) != 0) -+ { -+ LIB_CEC->AddLog(CEC_LOG_ERROR, "%s: HDMICEC_IOC_GETPHYADDRESS failed !", __func__); -+ return CEC_INVALID_PHYSICAL_ADDRESS; -+ } -+ /* Rebuild 16 bit raw value from fsl 32 bits value */ -+ phy_addr = ((info & 0x0f) << 12) | (info & 0x0f00) | -+ ((info & 0x0f0000) >> 12) | ((info & 0x0f000000) >> 24); -+ -+ return phy_addr; -+} -+ -+ -+cec_logical_addresses CIMXCECAdapterCommunication::GetLogicalAddresses(void) -+{ -+ cec_logical_addresses addresses; -+ addresses.Clear(); -+ -+ CLockObject lock(m_mutex); -+ if ((m_logicalAddress & (CECDEVICE_UNKNOWN | CECDEVICE_UNREGISTERED)) == 0) -+ addresses.Set(m_logicalAddress); -+ -+ return addresses; -+} -+ -+void CIMXCECAdapterCommunication::HandleLogicalAddressLost(cec_logical_address UNUSED(oldAddress)) -+{ -+ UnregisterLogicalAddress(); -+} -+ -+bool CIMXCECAdapterCommunication::UnregisterLogicalAddress(void) -+{ -+ CLockObject lock(m_mutex); -+ if (!m_bLogicalAddressRegistered) -+ return true; -+ -+ if (m_dev->Ioctl(HDMICEC_IOC_SETLOGICALADDRESS, (void *)CECDEVICE_BROADCAST) != 0) -+ { -+ LIB_CEC->AddLog(CEC_LOG_ERROR, "%s: HDMICEC_IOC_SETLOGICALADDRESS failed !", __func__); -+ return false; -+ } -+ -+ m_logicalAddress = CECDEVICE_UNKNOWN; -+ m_bLogicalAddressRegistered = false; -+ return true; -+} -+ -+bool CIMXCECAdapterCommunication::RegisterLogicalAddress(const cec_logical_address address) -+{ -+ CLockObject lock(m_mutex); -+ -+ if (m_logicalAddress == address && m_bLogicalAddressRegistered) -+ { -+ return true; -+ } -+ -+ if (m_dev->Ioctl(HDMICEC_IOC_SETLOGICALADDRESS, (void *)address) != 0) -+ { -+ LIB_CEC->AddLog(CEC_LOG_ERROR, "%s: HDMICEC_IOC_SETLOGICALADDRESS failed !", __func__); -+ return false; -+ } -+ -+ m_logicalAddress = address; -+ m_bLogicalAddressRegistered = true; -+ return true; -+} -+ -+bool CIMXCECAdapterCommunication::SetLogicalAddresses(const cec_logical_addresses &addresses) -+{ -+ int log_addr = addresses.primary; -+ -+ return RegisterLogicalAddress((cec_logical_address)log_addr); -+} -+ -+void *CIMXCECAdapterCommunication::Process(void) -+{ -+ hdmi_cec_event event; -+ int ret; -+ -+ cec_logical_address initiator, destination; -+ -+ while (!IsStopped()) -+ { -+ ret = m_dev->Read((char *)&event, sizeof(event), 1000); -+ if (ret > 0) -+ { -+ -+ initiator = cec_logical_address(event.msg[0] >> 4); -+ destination = cec_logical_address(event.msg[0] & 0x0f); -+ -+ //LIB_CEC->AddLog(CEC_LOG_DEBUG, "%s: Read data : type : %d initiator %d dest %d", __func__, event.event_type, initiator, destination); -+ if (event.event_type == MESSAGE_TYPE_RECEIVE_SUCCESS) -+ /* Message received */ -+ { -+ cec_command cmd; -+ -+ cec_command::Format( -+ cmd, initiator, destination, -+ ( event.msg_len > 1 ) ? cec_opcode(event.msg[1]) : CEC_OPCODE_NONE); -+ -+ for( uint8_t i = 2; i < event.msg_len; i++ ) -+ cmd.parameters.PushBack(event.msg[i]); -+ -+ if (!IsStopped()) -+ m_callback->OnCommandReceived(cmd); -+ } -+ -+ if (event.event_type == MESSAGE_TYPE_CONNECTED) -+ /* HDMI has just been reconnected - Notify phy address*/ -+ { -+ uint16_t iNewAddress = GetPhysicalAddress(); -+ m_callback->HandlePhysicalAddressChanged(iNewAddress); -+ } -+ /* We are not interested in other events */ -+ } /*else { -+ LIB_CEC->AddLog(CEC_LOG_DEBUG, "%s: Read returned %d", __func__, ret); -+ }*/ -+ -+ } -+ -+ return 0; -+} -+ -+#endif // HAVE_IMX_API -diff --git a/src/libcec/adapter/IMX/IMXCECAdapterCommunication.h b/src/libcec/adapter/IMX/IMXCECAdapterCommunication.h -new file mode 100644 -index 0000000..7862656 ---- /dev/null -+++ b/src/libcec/adapter/IMX/IMXCECAdapterCommunication.h -@@ -0,0 +1,115 @@ -+#pragma once -+/* -+ * This file is part of the libCEC(R) library. -+ * -+ * libCEC(R) is Copyright (C) 2011-2013 Pulse-Eight Limited. All rights reserved. -+ * libCEC(R) is an original work, containing original code. -+ * -+ * libCEC(R) is a trademark of Pulse-Eight Limited. -+ * -+ * IMX adpater port is Copyright (C) 2013 by Stephan Rafin -+ * -+ * You can redistribute this file and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * -+ */ -+ -+#if defined(HAVE_IMX_API) -+ -+#include "p8-platform/threads/mutex.h" -+#include "p8-platform/threads/threads.h" -+#include "p8-platform/sockets/socket.h" -+#include "adapter/AdapterCommunication.h" -+#include -+ -+#define IMX_ADAPTER_VID 0x0471 /*FIXME TBD*/ -+#define IMX_ADAPTER_PID 0x1001 -+ -+ -+ -+namespace P8PLATFORM -+{ -+ class CCDevSocket; -+}; -+ -+ -+namespace CEC -+{ -+ class CIMXCECAdapterCommunication : public IAdapterCommunication, public P8PLATFORM::CThread -+ { -+ public: -+ /*! -+ * @brief Create a new USB-CEC communication handler. -+ * @param callback The callback to use for incoming CEC commands. -+ */ -+ CIMXCECAdapterCommunication(IAdapterCommunicationCallback *callback); -+ virtual ~CIMXCECAdapterCommunication(void); -+ -+ /** @name IAdapterCommunication implementation */ -+ ///{ -+ bool Open(uint32_t iTimeoutMs = CEC_DEFAULT_CONNECT_TIMEOUT, bool bSkipChecks = false, bool bStartListening = true); -+ void Close(void); -+ bool IsOpen(void); -+ std::string GetError(void) const; -+ cec_adapter_message_state Write(const cec_command &data, bool &bRetry, uint8_t iLineTimeout, bool bIsReply); -+ -+ bool SetLineTimeout(uint8_t UNUSED(iTimeout)) { return true; } -+ bool StartBootloader(void) { return false; } -+ bool SetLogicalAddresses(const cec_logical_addresses &addresses); -+ cec_logical_addresses GetLogicalAddresses(void); -+ bool PingAdapter(void) { return IsInitialised(); } -+ uint16_t GetFirmwareVersion(void); -+ uint32_t GetFirmwareBuildDate(void) { return 0; } -+ bool IsRunningLatestFirmware(void) { return true; } -+ bool PersistConfiguration(const libcec_configuration & UNUSED(configuration)) { return false; } -+ bool GetConfiguration(libcec_configuration & UNUSED(configuration)) { return false; } -+ std::string GetPortName(void) { return std::string("IMX"); } -+ uint16_t GetPhysicalAddress(void); -+ bool SetControlledMode(bool UNUSED(controlled)) { return true; } -+ cec_vendor_id GetVendorId(void); -+ bool SupportsSourceLogicalAddress(const cec_logical_address address) { return address > CECDEVICE_TV && address <= CECDEVICE_BROADCAST; } -+ cec_adapter_type GetAdapterType(void) { return ADAPTERTYPE_IMX; } -+ uint16_t GetAdapterVendorId(void) const { return IMX_ADAPTER_VID; } -+ uint16_t GetAdapterProductId(void) const { return IMX_ADAPTER_PID; } -+ void HandleLogicalAddressLost(cec_logical_address UNUSED(oldAddress)); -+ void SetActiveSource(bool UNUSED(bSetTo), bool UNUSED(bClientUnregistered)) {} -+ bool RegisterLogicalAddress(const cec_logical_address address); -+ ///} -+ -+ /** @name P8PLATFORM::CThread implementation */ -+ ///{ -+ void *Process(void); -+ ///} -+ -+ private: -+ bool IsInitialised(void) const { return m_bInitialised; }; -+ bool UnregisterLogicalAddress(void); -+ -+ std::string m_strError; /**< current error message */ -+ -+ cec_logical_address m_logicalAddress; -+ -+ P8PLATFORM::CMutex m_mutex; -+ P8PLATFORM::CCDevSocket *m_dev; /**< the device connection */ -+ bool m_bLogicalAddressRegistered; -+ bool m_bInitialised; -+ -+ P8PLATFORM::CMutex m_messageMutex; -+ uint32_t m_iNextMessage; -+ }; -+ -+}; -+ -+#endif -diff --git a/src/libcec/adapter/IMX/IMXCECAdapterDetection.cpp b/src/libcec/adapter/IMX/IMXCECAdapterDetection.cpp -new file mode 100644 -index 0000000..dc4dca0 ---- /dev/null -+++ b/src/libcec/adapter/IMX/IMXCECAdapterDetection.cpp -@@ -0,0 +1,42 @@ -+/* -+ * This file is part of the libCEC(R) library. -+ * -+ * libCEC(R) is Copyright (C) 2011-2013 Pulse-Eight Limited. All rights reserved. -+ * libCEC(R) is an original work, containing original code. -+ * -+ * libCEC(R) is a trademark of Pulse-Eight Limited. -+ * -+ * IMX adpater port is Copyright (C) 2013 by Stephan Rafin -+ * -+ * You can redistribute this file and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * -+ */ -+ -+#include "env.h" -+#include -+ -+#if defined(HAVE_IMX_API) -+#include "IMXCECAdapterDetection.h" -+ -+ -+using namespace CEC; -+ -+bool CIMXCECAdapterDetection::FindAdapter(void) -+{ -+ return access(CEC_IMX_PATH, 0) == 0; -+} -+ -+#endif -diff --git a/src/libcec/adapter/IMX/IMXCECAdapterDetection.h b/src/libcec/adapter/IMX/IMXCECAdapterDetection.h -new file mode 100644 -index 0000000..14af8d8 ---- /dev/null -+++ b/src/libcec/adapter/IMX/IMXCECAdapterDetection.h -@@ -0,0 +1,36 @@ -+#pragma once -+/* -+ * This file is part of the libCEC(R) library. -+ * -+ * libCEC(R) is Copyright (C) 2011-2013 Pulse-Eight Limited. All rights reserved. -+ * libCEC(R) is an original work, containing original code. -+ * -+ * libCEC(R) is a trademark of Pulse-Eight Limited. -+ * -+ * IMX adpater port is Copyright (C) 2013 by Stephan Rafin -+ * -+ * You can redistribute this file and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * -+ */ -+ -+namespace CEC -+{ -+ class CIMXCECAdapterDetection -+ { -+ public: -+ static bool FindAdapter(void); -+ }; -+} -diff --git a/src/libcec/cmake/CheckPlatformSupport.cmake b/src/libcec/cmake/CheckPlatformSupport.cmake -index 532f213..4ef5d75 100644 ---- a/src/libcec/cmake/CheckPlatformSupport.cmake -+++ b/src/libcec/cmake/CheckPlatformSupport.cmake -@@ -10,6 +10,7 @@ - # HAVE_TDA995X_API ON if TDA995X is supported - # HAVE_EXYNOS_API ON if Exynos is supported - # HAVE_AOCEC_API ON if AOCEC is supported -+# HAVE_IMX_API ON if iMX.6 is supported - # HAVE_P8_USB ON if Pulse-Eight devices are supported - # HAVE_P8_USB_DETECT ON if Pulse-Eight devices can be auto-detected - # HAVE_DRM_EDID_PARSER ON if DRM EDID parsing is supported -@@ -148,6 +149,18 @@ else() - else() - set(HAVE_AOCEC_API 0) - endif() -+ -+ # i.MX6 -+ if (${HAVE_IMX_API}) -+ set(LIB_INFO "${LIB_INFO}, 'i.MX6'") -+ set(HAVE_IMX_API 1) -+ set(CEC_SOURCES_ADAPTER_IMX adapter/IMX/IMXCECAdapterCommunication.cpp -+ adapter/IMX/IMXCECAdapterDetection.cpp) -+ source_group("Source Files\\adapter\\IMX" FILES ${CEC_SOURCES_ADAPTER_IMX}) -+ list(APPEND CEC_SOURCES ${CEC_SOURCES_ADAPTER_IMX}) -+ else() -+ set(HAVE_IMX_API 0) -+ endif() - endif() - - # rt -diff --git a/src/libcec/cmake/DisplayPlatformSupport.cmake b/src/libcec/cmake/DisplayPlatformSupport.cmake -index 7ec10f5..2262638 100644 ---- a/src/libcec/cmake/DisplayPlatformSupport.cmake -+++ b/src/libcec/cmake/DisplayPlatformSupport.cmake -@@ -50,6 +50,12 @@ else() - message(STATUS "AOCEC support: no") - endif() - -+if (HAVE_IMX_API) -+ message(STATUS "i.MX6 support: yes") -+else() -+ message(STATUS "i.MX6 support: no") -+ endif() -+ - if (HAVE_PYTHON) - message(STATUS "Python support: version ${PYTHONLIBS_VERSION_STRING} (${PYTHON_VERSION})") - else() - -diff --git a/src/libcec/env.h.in b/src/libcec/env.h.in -index fe6c83d..e96bcd5 100644 ---- a/src/libcec/env.h.in -+++ b/src/libcec/env.h.in -@@ -73,6 +73,9 @@ - /* Define to 1 for TDA995x support */ - #cmakedefine HAVE_TDA995X_API @HAVE_TDA995X_API@ - -+/* Define to 1 for IMX support */ -+#cmakedefine HAVE_IMX_API @HAVE_IMX_API@ -+ - /* Define to 1 for Exynos support */ - #cmakedefine HAVE_EXYNOS_API @HAVE_EXYNOS_API@ - --- -2.7.1 - diff --git a/projects/imx6/patches/libcec/4.4-xbian/libcec-100-from-xbian.patch b/projects/imx6/patches/libcec/4.4-xbian/libcec-100-from-xbian.patch deleted file mode 100644 index 35ddcbfbea..0000000000 --- a/projects/imx6/patches/libcec/4.4-xbian/libcec-100-from-xbian.patch +++ /dev/null @@ -1,1758 +0,0 @@ -From 714ce8ee2ba07fe88249b8033d875f58ed21a4ab Mon Sep 17 00:00:00 2001 -From: Peter Vicman -Date: Thu, 12 Jan 2017 09:36:24 +0100 -Subject: [PATCH] patch for libcec from xbian - -libcec base: libcec-2fc92b5 -libcec xbian: - https://github.com/xbianonpi/xbian-sources-libcec/tree/masterv4 e12f92586ccda4fe20814c93d5830ed3a33f3a4e ---- - CMakeLists.txt | 6 + - debian/control | 7 +- - debian/libcec4-dev.install | 1 + - debian/libcec4.install | 2 + - include/cec.h | 2 + - include/cectypes.h | 47 ++- - src/cec-client/CMakeLists.txt | 4 +- - src/cecc-client/cecc-client.c | 2 +- - src/libcec/CECClient.cpp | 12 +- - src/libcec/CECClient.h | 1 + - src/libcec/CECProcessor.cpp | 6 + - src/libcec/CECProcessor.h | 1 + - src/libcec/CECTypeUtils.h | 2 + - src/libcec/CMakeLists.txt | 22 +- - src/libcec/LibCEC.cpp | 5 + - src/libcec/LibCEC.h | 1 + - src/libcec/adapter/AdapterFactory.cpp | 27 +- - .../adapter/IMX/IMXCECAdapterCommunication.cpp | 381 +++++++++++++++++++++ - .../adapter/IMX/IMXCECAdapterCommunication.h | 139 ++++++++ - src/libcec/adapter/IMX/IMXCECAdapterDetection.cpp | 42 +++ - src/libcec/adapter/IMX/IMXCECAdapterDetection.h | 36 ++ - src/libcec/adapter/IMX/IMXCECAdapterMessageQueue.h | 118 +++++++ - src/libcec/adapter/IMX/mxc_hdmi-cec.h | 47 +++ - src/libcec/cmake/CheckPlatformSupport.cmake | 49 ++- - src/libcec/cmake/DisplayPlatformSupport.cmake | 10 +- - src/libcec/cmake/LinkPlatformSupport.cmake | 7 +- - src/libcec/cmake/git-rev.sh | 2 +- - src/libcec/devices/CECBusDevice.cpp | 11 +- - src/libcec/devices/CECBusDevice.h | 2 + - src/libcec/env.h.in | 3 + - src/libcec/implementations/CECCommandHandler.cpp | 16 +- - src/libcec/implementations/CECCommandHandler.h | 7 +- - src/libcec/implementations/GRCommandHandler.cpp | 92 +++++ - src/libcec/implementations/GRCommandHandler.h | 53 +++ - 34 files changed, 1102 insertions(+), 61 deletions(-) - create mode 100644 src/libcec/adapter/IMX/IMXCECAdapterCommunication.cpp - create mode 100644 src/libcec/adapter/IMX/IMXCECAdapterCommunication.h - create mode 100644 src/libcec/adapter/IMX/IMXCECAdapterDetection.cpp - create mode 100644 src/libcec/adapter/IMX/IMXCECAdapterDetection.h - create mode 100644 src/libcec/adapter/IMX/IMXCECAdapterMessageQueue.h - create mode 100644 src/libcec/adapter/IMX/mxc_hdmi-cec.h - create mode 100644 src/libcec/implementations/GRCommandHandler.cpp - create mode 100644 src/libcec/implementations/GRCommandHandler.h - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 4f01662..7c19dd5 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -5,6 +5,12 @@ set(LIBCEC_VERSION_MAJOR 4) - set(LIBCEC_VERSION_MINOR 0) - set(LIBCEC_VERSION_PATCH 1) - -+find_program(CCACHE_FOUND ccache) -+if(CCACHE_FOUND) -+ set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) -+ set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache) -+endif(CCACHE_FOUND) -+ - # cec-client - add_subdirectory(src/cec-client) - add_dependencies(cec-client cec) -diff --git a/debian/control b/debian/control -index e05a063..1675c1b 100644 ---- a/debian/control -+++ b/debian/control -@@ -20,6 +20,7 @@ Vcs-Browser: http://anonscm.debian.org/gitweb/?p=collab-maint/libcec.git - Package: libcec4-dev - Architecture: any - Section: libdevel -+Replaces: libcec-dev - Depends: libcec4 (= ${binary:Version}), - ${misc:Depends} - Description: libCEC communication Library (development files) -@@ -30,6 +31,7 @@ Description: libCEC communication Library (development files) - Package: libcec4 - Architecture: any - Multi-Arch: same -+Replaces: libcec3 - Pre-Depends: ${misc:Pre-Depends} - Depends: ${shlibs:Depends}, ${misc:Depends} - Description: libCEC communication Library (shared library) -@@ -40,6 +42,7 @@ Description: libCEC communication Library (shared library) - Package: cec-utils - Architecture: any - Section: utils -+Replaces: xbian-package-cec - Depends: libcec4 (= ${binary:Version}), - ${shlibs:Depends}, - ${misc:Depends} -@@ -60,6 +63,8 @@ Description: Python bindings for libCEC - - Package: libcec - Architecture: any --Depends: ${shlibs:Depends}, ${misc:Depends}, libcec4 (= ${binary:Version}) -+Depends: ${shlibs:Depends}, ${misc:Depends}, libcec4 (= ${binary:Version}), python-libcec, cec-utils, libcec4-dev -+Provides: xbian-package-cec -+Breaks: xbian-package-cec (<<10.0) - Description: Meta package libCEC. - -diff --git a/debian/libcec4-dev.install b/debian/libcec4-dev.install -index e5bbd96..15a3585 100644 ---- a/debian/libcec4-dev.install -+++ b/debian/libcec4-dev.install -@@ -1,3 +1,4 @@ - usr/include - usr/lib/pkgconfig - usr/lib/*/*.so -+usr/lib/p8-platform -diff --git a/debian/libcec4.install b/debian/libcec4.install -index ca5ebe3..ac5e50a 100644 ---- a/debian/libcec4.install -+++ b/debian/libcec4.install -@@ -1 +1,3 @@ - usr/lib/*/libcec.so.* -+usr/lib/libp*.a -+ -diff --git a/include/cec.h b/include/cec.h -index 71450ae..b4a7d78 100644 ---- a/include/cec.h -+++ b/include/cec.h -@@ -389,6 +389,8 @@ namespace CEC - */ - virtual uint16_t GetAdapterProductId(void) const = 0; - -+ virtual bool TransmitSystemAudioModeRequest(void) = 0; -+ - virtual const char* ToString(const cec_menu_state state) = 0; - virtual const char* ToString(const cec_version version) = 0; - virtual const char* ToString(const cec_power_status status) = 0; -diff --git a/include/cectypes.h b/include/cectypes.h -index 9c91842..9fa69fc 100644 ---- a/include/cectypes.h -+++ b/include/cectypes.h -@@ -267,9 +267,19 @@ namespace CEC { - #define CEC_TDA995x_VIRTUAL_COM "CuBox" - - /*! -+ * the path to use for the i.MX CEC wire -+ */ -+#define CEC_IMX_PATH "/dev/mxc_hdmi_cec" -+ -+/*! -+ * the name of the virtual COM port to use for the i.MX CEC wire -+ */ -+#define CEC_IMX_VIRTUAL_COM "i.MX" -+ -+/*! - * the path to use for the Exynos HDMI CEC device - */ --#define CEC_EXYNOS_PATH "/dev/CEC" -+#define CEC_EXYNOS_PATH "/dev/CEC" - - /*! - * the name of the virtual COM port to use for the EXYNOS' CEC wire -@@ -296,6 +306,8 @@ namespace CEC { - */ - #define CEC_MIN_LIB_VERSION 4 - -+#define CEC_LIB_VERSION_MAJOR 4 -+ - #define MSGSTART 0xFF - #define MSGEND 0xFE - #define MSGESC 0xFD -@@ -861,6 +873,7 @@ typedef enum cec_adapter_type - ADAPTERTYPE_RPI = 0x100, - ADAPTERTYPE_TDA995x = 0x200, - ADAPTERTYPE_EXYNOS = 0x300, -+ ADAPTERTYPE_IMX = 0x400, - ADAPTERTYPE_AOCEC = 0x500 - } cec_adapter_type; - -@@ -1245,7 +1258,7 @@ typedef struct cec_device_type_list - typedef struct cec_logical_addresses - { - cec_logical_address primary; /**< the primary logical address to use */ -- int addresses[16]; /**< the list of addresses */ -+ uint16_t addresses; /**< the list of addresses */ - - #ifdef __cplusplus - /*! -@@ -1254,8 +1267,7 @@ typedef struct cec_logical_addresses - void Clear(void) - { - primary = CECDEVICE_UNREGISTERED; -- for (unsigned int iPtr = 0; iPtr < 16; iPtr++) -- addresses[iPtr] = 0; -+ addresses = 0; - } - - /*! -@@ -1263,7 +1275,7 @@ typedef struct cec_logical_addresses - */ - bool IsEmpty(void) const - { -- return primary == CECDEVICE_UNREGISTERED; -+ return primary == CECDEVICE_UNREGISTERED && addresses == 0; - } - - /*! -@@ -1272,11 +1284,7 @@ typedef struct cec_logical_addresses - */ - uint16_t AckMask(void) const - { -- uint16_t mask = 0; -- for (unsigned int iPtr = 0; iPtr < 16; iPtr++) -- if (addresses[iPtr] == 1) -- mask |= 0x1 << iPtr; -- return mask; -+ return addresses; - } - - /*! -@@ -1288,7 +1296,7 @@ typedef struct cec_logical_addresses - if (primary == CECDEVICE_UNREGISTERED) - primary = address; - -- addresses[(int) address] = 1; -+ addresses |= (1 << (int) address); - } - - /*! -@@ -1300,7 +1308,7 @@ typedef struct cec_logical_addresses - if (primary == address) - primary = CECDEVICE_UNREGISTERED; - -- addresses[(int) address] = 0; -+ addresses &= ~(uint16_t)(1 << (int) address); - } - - /*! -@@ -1308,7 +1316,7 @@ typedef struct cec_logical_addresses - * @param address The address to check. - * @return True when set, false otherwise. - */ -- bool IsSet(cec_logical_address address) const { return addresses[(int) address] == 1; } -+ bool IsSet(cec_logical_address address) const { return (addresses & (1 << (int) address)); } - - /*! - * @brief Check whether an address is set in this list. -@@ -1317,18 +1325,9 @@ typedef struct cec_logical_addresses - */ - bool operator[](uint8_t pos) const { return pos < 16 ? IsSet((cec_logical_address) pos) : false; } - -- bool operator==(const cec_logical_addresses &other) const -- { -- bool bEqual(true); -- for (uint8_t iPtr = 0; iPtr < 16; iPtr++) -- bEqual &= ((addresses[(int)iPtr] == 1) == other[iPtr]); -- return bEqual; -- } -+ bool operator==(const cec_logical_addresses &other) const { return addresses == other.addresses; } - -- bool operator!=(const cec_logical_addresses &other) const -- { -- return !(*this == other); -- } -+ bool operator!=(const cec_logical_addresses &other) const { return !(*this == other); } - #endif - } cec_logical_addresses; - -diff --git a/src/cec-client/CMakeLists.txt b/src/cec-client/CMakeLists.txt -index 2cb42bb..c708fdb 100644 ---- a/src/cec-client/CMakeLists.txt -+++ b/src/cec-client/CMakeLists.txt -@@ -13,9 +13,9 @@ include(CheckLibraryExists) - include(CheckIncludeFiles) - include(CheckCXXCompilerFlag) - --check_cxx_compiler_flag("-std=c++11" SUPPORTS_CXX11) -+check_cxx_compiler_flag("-std=c++0x" SUPPORTS_CXX11) - if (SUPPORTS_CXX11) -- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") -+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") - endif() - - find_package(p8-platform REQUIRED) -diff --git a/src/cecc-client/cecc-client.c b/src/cecc-client/cecc-client.c -index 3373109..914d4d4 100644 ---- a/src/cecc-client/cecc-client.c -+++ b/src/cecc-client/cecc-client.c -@@ -337,7 +337,7 @@ static int cec_process_command_scan(const char* data) - activeSource = g_iface.get_active_source(g_iface.connection); - for (iPtr = 0; iPtr < 16; iPtr++) - { -- if (addresses.addresses[iPtr]) -+ if (addresses.addresses & (1 << iPtr)) - { - cec_menu_language lang; - cec_osd_name osdName; -diff --git a/src/libcec/CECClient.cpp b/src/libcec/CECClient.cpp -index b777faa..9f6e7c5 100644 ---- a/src/libcec/CECClient.cpp -+++ b/src/libcec/CECClient.cpp -@@ -139,10 +139,6 @@ bool CCECClient::OnRegister(void) - // set the physical address - SetPhysicalAddress(m_configuration); - -- // make the primary device the active source if the option is set -- if (m_configuration.bActivateSource == 1) -- GetPrimaryDevice()->ActivateSource(500); -- - return true; - } - -@@ -350,12 +346,13 @@ bool CCECClient::AllocateLogicalAddresses(void) - if (address == CECDEVICE_UNKNOWN) - { - LIB_CEC->AddLog(CEC_LOG_ERROR, "%s - failed to allocate device '%d', type '%s'", __FUNCTION__, iPtr, ToString(m_configuration.deviceTypes.types[iPtr])); -- return false; -+ continue; - } - - // display the registered LA - LIB_CEC->AddLog(CEC_LOG_DEBUG, "%s - device '%d', type '%s', LA '%X'", __FUNCTION__, iPtr, ToString(m_configuration.deviceTypes.types[iPtr]), address); - m_configuration.logicalAddresses.Set(address); -+ break; - } - - // persist the new configuration -@@ -1540,6 +1537,11 @@ bool CCECClient::IsLibCECActiveSource(void) - return bReturn; - } - -+bool CCECClient::TransmitSystemAudioModeRequest(void) -+{ -+ return m_processor ? m_processor->TransmitSystemAudioModeRequest(m_configuration.logicalAddresses.primary) : false; -+} -+ - void CCECClient::SourceActivated(const cec_logical_address logicalAddress) - { - LIB_CEC->AddLog(CEC_LOG_NOTICE, ">> source activated: %s (%x)", ToString(logicalAddress), logicalAddress); -diff --git a/src/libcec/CECClient.h b/src/libcec/CECClient.h -index 49528ee..f02775c 100644 ---- a/src/libcec/CECClient.h -+++ b/src/libcec/CECClient.h -@@ -298,6 +298,7 @@ namespace CEC - virtual void RescanActiveDevices(void); - virtual bool IsLibCECActiveSource(void); - bool AudioEnable(bool enable); -+ virtual bool TransmitSystemAudioModeRequest(void); - - // configuration - virtual bool GetCurrentConfiguration(libcec_configuration &configuration); -diff --git a/src/libcec/CECProcessor.cpp b/src/libcec/CECProcessor.cpp -index 8ce46c5..e31e24a 100644 ---- a/src/libcec/CECProcessor.cpp -+++ b/src/libcec/CECProcessor.cpp -@@ -712,6 +712,12 @@ bool CCECProcessor::TransmitPendingActiveSourceCommands(void) - return bReturn; - } - -+bool CCECProcessor::TransmitSystemAudioModeRequest(cec_logical_address initiator) -+{ -+ CCECBusDevice *device = m_busDevices->At(initiator); -+ return device && device->TransmitSystemAudioModeRequest(initiator); -+} -+ - CCECTV *CCECProcessor::GetTV(void) const - { - return CCECBusDevice::AsTV(m_busDevices->At(CECDEVICE_TV)); -diff --git a/src/libcec/CECProcessor.h b/src/libcec/CECProcessor.h -index 08917b9..1971dee 100644 ---- a/src/libcec/CECProcessor.h -+++ b/src/libcec/CECProcessor.h -@@ -149,6 +149,7 @@ namespace CEC - bool GetDeviceInformation(const char *strPort, libcec_configuration *config, uint32_t iTimeoutMs = CEC_DEFAULT_CONNECT_TIMEOUT); - - bool TransmitPendingActiveSourceCommands(void); -+ bool TransmitSystemAudioModeRequest(cec_logical_address initiator); - - CCECDeviceMap *GetDevices(void) const { return m_busDevices; } - CLibCEC *GetLib(void) const { return m_libcec; } -diff --git a/src/libcec/CECTypeUtils.h b/src/libcec/CECTypeUtils.h -index 0d0cf17..f6c818a 100644 ---- a/src/libcec/CECTypeUtils.h -+++ b/src/libcec/CECTypeUtils.h -@@ -766,6 +766,8 @@ namespace CEC - return "Raspberry Pi"; - case ADAPTERTYPE_TDA995x: - return "TDA995x"; -+ case ADAPTERTYPE_IMX: -+ return "i.MX"; - default: - return "unknown"; - } -diff --git a/src/libcec/CMakeLists.txt b/src/libcec/CMakeLists.txt -index d3eefa3..6a33abf 100644 ---- a/src/libcec/CMakeLists.txt -+++ b/src/libcec/CMakeLists.txt -@@ -13,9 +13,9 @@ include(CheckIncludeFiles) - include(CheckCXXCompilerFlag) - include(../../cmake/UseMultiArch.cmake) - --check_cxx_compiler_flag("-std=c++11" SUPPORTS_CXX11) -+check_cxx_compiler_flag("-std=c++0x" SUPPORTS_CXX11) - if (SUPPORTS_CXX11) -- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") -+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") - endif() - - find_package(p8-platform REQUIRED) -@@ -64,7 +64,8 @@ set(CEC_SOURCES_IMPLEMENTATIONS implementations/ANCommandHandler.cpp - implementations/RLCommandHandler.cpp - implementations/PHCommandHandler.cpp - implementations/RHCommandHandler.cpp -- implementations/AQCommandHandler.cpp) -+ implementations/AQCommandHandler.cpp -+ implementations/GRCommandHandler.cpp) - - # /platform/* - set(CEC_SOURCES_PLATFORM platform/adl/adl-edid.cpp -@@ -124,6 +125,7 @@ set(CEC_HEADERS devices/CECRecordingDevice.h - implementations/RHCommandHandler.h - implementations/PHCommandHandler.h - implementations/AQCommandHandler.h -+ implementations/GRCommandHandler.h - CECProcessor.h) - source_group("Header Files" FILES ${CEC_HEADERS}) - -@@ -176,13 +178,17 @@ install(FILES ${PROJECT_SOURCE_DIR}/../../include/cec.h - DESTINATION include/libcec) - - # libCEC target --add_library(cec SHARED ${CEC_SOURCES}) --install(TARGETS cec -+add_library(cecobj OBJECT ${CEC_SOURCES}) -+set_property(TARGET ${cecobj} PROPERTY POSITION_INDEPENDENT_CODE 1) -+add_library(cec SHARED $) -+add_library(cecstatic STATIC $) -+set_target_properties(cecstatic PROPERTIES OUTPUT_NAME cec) -+install(TARGETS cec cecstatic - DESTINATION ${LIB_DESTINATION}) --set_target_properties(cec PROPERTIES VERSION ${LIBCEC_VERSION_MAJOR}.${LIBCEC_VERSION_MINOR}.${LIBCEC_VERSION_PATCH} -+set_target_properties(cec cecstatic PROPERTIES VERSION ${LIBCEC_VERSION_MAJOR}.${LIBCEC_VERSION_MINOR}.${LIBCEC_VERSION_PATCH} - SOVERSION ${LIBCEC_VERSION_MAJOR}) --target_link_libraries(cec ${p8-platform_LIBRARIES}) --target_link_libraries(cec ${CMAKE_THREAD_LIBS_INIT}) -+target_link_libraries(cec cecstatic ${p8-platform_LIBRARIES}) -+target_link_libraries(cec cecstatic ${CMAKE_THREAD_LIBS_INIT}) - - include(cmake/LinkPlatformSupport.cmake) - include(cmake/DisplayPlatformSupport.cmake) -diff --git a/src/libcec/LibCEC.cpp b/src/libcec/LibCEC.cpp -index 8eedaa7..9562e06 100644 ---- a/src/libcec/LibCEC.cpp -+++ b/src/libcec/LibCEC.cpp -@@ -624,3 +624,8 @@ bool CLibCEC::AudioEnable(bool enable) - m_client->AudioEnable(enable) : - false; - } -+ -+bool CLibCEC::TransmitSystemAudioModeRequest(void) -+{ -+ return m_client ? m_client->TransmitSystemAudioModeRequest() : false; -+} -diff --git a/src/libcec/LibCEC.h b/src/libcec/LibCEC.h -index 7155926..b9e393b 100644 ---- a/src/libcec/LibCEC.h -+++ b/src/libcec/LibCEC.h -@@ -109,6 +109,7 @@ namespace CEC - bool PersistConfiguration(libcec_configuration *configuration); - void RescanActiveDevices(void); - bool IsLibCECActiveSource(void); -+ bool TransmitSystemAudioModeRequest(void); - - const char* ToString(const cec_menu_state state) { return CCECTypeUtils::ToString(state); } - const char* ToString(const cec_version version) { return CCECTypeUtils::ToString(version); } -diff --git a/src/libcec/adapter/AdapterFactory.cpp b/src/libcec/adapter/AdapterFactory.cpp -index 91195ea..e2460ad 100644 ---- a/src/libcec/adapter/AdapterFactory.cpp -+++ b/src/libcec/adapter/AdapterFactory.cpp -@@ -63,6 +63,11 @@ - #include "AOCEC/AOCECAdapterCommunication.h" - #endif - -+#if defined(HAVE_IMX_API) -+#include "IMX/IMXCECAdapterDetection.h" -+#include "IMX/IMXCECAdapterCommunication.h" -+#endif -+ - using namespace CEC; - - int8_t CAdapterFactory::FindAdapters(cec_adapter *deviceList, uint8_t iBufSize, const char *strDevicePath /* = NULL */) -@@ -143,8 +148,21 @@ int8_t CAdapterFactory::DetectAdapters(cec_adapter_descriptor *deviceList, uint8 - } - #endif - -+#if defined(HAVE_IMX_API) -+ if (iAdaptersFound < iBufSize && CIMXCECAdapterDetection::FindAdapter() && -+ (!strDevicePath || !strcmp(strDevicePath, CEC_IMX_VIRTUAL_COM))) -+ { -+ snprintf(deviceList[iAdaptersFound].strComPath, sizeof(deviceList[iAdaptersFound].strComPath), CEC_IMX_PATH); -+ snprintf(deviceList[iAdaptersFound].strComName, sizeof(deviceList[iAdaptersFound].strComName), CEC_IMX_VIRTUAL_COM); -+ deviceList[iAdaptersFound].iVendorId = IMX_ADAPTER_VID; -+ deviceList[iAdaptersFound].iProductId = IMX_ADAPTER_PID; -+ deviceList[iAdaptersFound].adapterType = ADAPTERTYPE_IMX; -+ iAdaptersFound++; -+ } -+#endif -+ - --#if !defined(HAVE_RPI_API) && !defined(HAVE_P8_USB) && !defined(HAVE_TDA995X_API) && !defined(HAVE_AOCEC_API) -+#if !defined(HAVE_RPI_API) && !defined(HAVE_P8_USB) && !defined(HAVE_TDA995X_API) && !defined(HAVE_AOCEC_API) && !defined(HAVE_IMX_API) - #error "libCEC doesn't have support for any type of adapter. please check your build system or configuration" - #endif - -@@ -173,11 +191,16 @@ IAdapterCommunication *CAdapterFactory::GetInstance(const char *strPort, uint16_ - return new CRPiCECAdapterCommunication(m_lib->m_cec); - #endif - -+#if defined(HAVE_IMX_API) -+ if (!strcmp(strPort, CEC_IMX_VIRTUAL_COM)) -+ return new CIMXCECAdapterCommunication(m_lib->m_cec); -+#endif -+ - #if defined(HAVE_P8_USB) - return new CUSBCECAdapterCommunication(m_lib->m_cec, strPort, iBaudRate); - #endif - --#if !defined(HAVE_RPI_API) && !defined(HAVE_P8_USB) && !defined(HAVE_TDA995X_API) && !defined(HAVE_EXYNOS_API) && !defined(HAVE_AOCEC_API) -+#if !defined(HAVE_RPI_API) && !defined(HAVE_P8_USB) && !defined(HAVE_TDA995X_API) && !defined(HAVE_EXYNOS_API) && !defined(HAVE_AOCEC_API) && !defined(HAVE_IMX_API) - return NULL; - #endif - } -diff --git a/src/libcec/adapter/IMX/IMXCECAdapterCommunication.cpp b/src/libcec/adapter/IMX/IMXCECAdapterCommunication.cpp -new file mode 100644 -index 0000000..212dd75 ---- /dev/null -+++ b/src/libcec/adapter/IMX/IMXCECAdapterCommunication.cpp -@@ -0,0 +1,381 @@ -+/* -+ * This file is part of the libCEC(R) library. -+ * -+ * libCEC(R) is Copyright (C) 2011-2013 Pulse-Eight Limited. All rights reserved. -+ * libCEC(R) is an original work, containing original code. -+ * -+ * libCEC(R) is a trademark of Pulse-Eight Limited. -+ * -+ * IMX adpater port is Copyright (C) 2013 by Stephan Rafin -+ * Copyright (C) 2014 by Matus Kral -+ * -+ * You can redistribute this file and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * -+ */ -+ -+#include "env.h" -+ -+#if defined(HAVE_IMX_API) -+#include "IMXCECAdapterCommunication.h" -+ -+#include "CECTypeUtils.h" -+#include "LibCEC.h" -+#include -+#include -+#include -+ -+using namespace std; -+using namespace CEC; -+using namespace P8PLATFORM; -+ -+#include "IMXCECAdapterMessageQueue.h" -+ -+#define LIB_CEC m_callback->GetLib() -+ -+// these are defined in nxp private header file -+#define CEC_MSG_SUCCESS 0x00 /*Message transmisson Succeed*/ -+#define CEC_CSP_OFF_STATE 0x80 /*CSP in Off State*/ -+#define CEC_BAD_REQ_SERVICE 0x81 /*Bad .req service*/ -+#define CEC_MSG_FAIL_UNABLE_TO_ACCESS 0x82 /*Message transmisson failed: Unable to access CEC line*/ -+#define CEC_MSG_FAIL_ARBITRATION_ERROR 0x83 /*Message transmisson failed: Arbitration error*/ -+#define CEC_MSG_FAIL_BIT_TIMMING_ERROR 0x84 /*Message transmisson failed: Bit timming error*/ -+#define CEC_MSG_FAIL_DEST_NOT_ACK 0x85 /*Message transmisson failed: Destination Address not aknowledged*/ -+#define CEC_MSG_FAIL_DATA_NOT_ACK 0x86 /*Message transmisson failed: Databyte not acknowledged*/ -+ -+CIMXCECAdapterCommunication::CIMXCECAdapterCommunication(IAdapterCommunicationCallback *callback) : -+ IAdapterCommunication(callback), -+ m_PAReporter(NULL) -+{ -+ CLockObject lock(m_mutex); -+ -+ m_iNextMessage = 0; -+ m_logicalAddress = CECDEVICE_UNKNOWN; -+ m_bLogicalAddressRegistered = false; -+ m_bInitialised = false; -+ m_dev = new CCDevSocket(CEC_IMX_PATH); -+ m_physicalAddress = -1; -+} -+ -+CIMXCECAdapterCommunication::~CIMXCECAdapterCommunication(void) -+{ -+ Close(); -+ SAFE_DELETE(m_PAReporter); -+ delete m_dev; -+ m_dev = 0; -+} -+ -+bool CIMXCECAdapterCommunication::IsOpen(void) -+{ -+ return IsInitialised() && m_dev->IsOpen(); -+} -+ -+bool CIMXCECAdapterCommunication::Open(uint32_t iTimeoutMs, bool UNUSED(bSkipChecks), bool bStartListening) -+{ -+ if (m_dev->Open(iTimeoutMs)) -+ { -+ if (!bStartListening || CreateThread()) { -+ if (m_dev->Ioctl(HDMICEC_IOC_STARTDEVICE, NULL) == 0) { -+ m_bInitialised = true; -+ RegisterLogicalAddress(CECDEVICE_BROADCAST); -+ return true; -+ } -+ LIB_CEC->AddLog(CEC_LOG_ERROR, "%s: Unable to start device\n", __func__); -+ } -+ m_dev->Close(); -+ } -+ -+ return false; -+} -+ -+ -+void CIMXCECAdapterCommunication::Close(void) -+{ -+ m_bInitialised = false; -+ if (m_dev->Ioctl(HDMICEC_IOC_STOPDEVICE, NULL) != 0) -+ { -+ LIB_CEC->AddLog(CEC_LOG_ERROR, "%s: Unable to stop device\n", __func__); -+ } -+ StopThread(false); -+ m_dev->Close(); -+} -+ -+ -+std::string CIMXCECAdapterCommunication::GetError(void) const -+{ -+ std::string strError(m_strError); -+ return strError; -+} -+ -+ -+cec_adapter_message_state CIMXCECAdapterCommunication::Write( -+ const cec_command &data, bool &bRetry, uint8_t iLineTimeout, bool UNUSED(bIsReply)) -+{ -+ unsigned char message[MAX_MESSAGE_LEN]; -+ CIMXCECAdapterMessageQueueEntry *entry; -+ int msg_len = 1; -+ cec_adapter_message_state rc = ADAPTER_MESSAGE_STATE_ERROR; -+ -+ bRetry = true; -+ if ((size_t)data.parameters.size + data.opcode_set + 1 > sizeof(message)) -+ { -+ LIB_CEC->AddLog(CEC_LOG_ERROR, "%s: data size too large !", __func__); -+ bRetry = false; -+ return rc; -+ } -+ -+ message[0] = (data.initiator << 4) | (data.destination & 0x0f); -+ if (data.opcode_set) -+ { -+ message[1] = data.opcode; -+ msg_len++; -+ memcpy(&message[2], data.parameters.data, data.parameters.size); -+ msg_len+=data.parameters.size; -+ } -+ -+ entry = new CIMXCECAdapterMessageQueueEntry(message[0], data.opcode); -+ m_messageMutex.Lock(); -+ uint32_t msgKey = ++m_iNextMessage; -+ m_messages.insert(make_pair(msgKey, entry)); -+ m_messageMutex.Unlock(); -+ -+ if (m_dev->Write(message, msg_len) > 0) -+ { -+ if (entry->Wait(data.transmit_timeout ? data.transmit_timeout : iLineTimeout *1000)) -+ { -+ int status = entry->Result(); -+ -+ if (status == MESSAGE_TYPE_NOACK) -+ rc = ADAPTER_MESSAGE_STATE_SENT_NOT_ACKED; -+ else if (status == MESSAGE_TYPE_SEND_SUCCESS) -+ rc = ADAPTER_MESSAGE_STATE_SENT_ACKED; -+ -+ bRetry = false; -+ } -+ else -+ { -+ rc = ADAPTER_MESSAGE_STATE_WAITING_TO_BE_SENT; -+#ifdef CEC_DEBUGGING -+ LIB_CEC->AddLog(CEC_LOG_DEBUG, "%s: command timed out !", __func__); -+#endif -+ } -+ } -+ else -+ { -+ Sleep(CEC_DEFAULT_TRANSMIT_RETRY_WAIT); -+#ifdef CEC_DEBUGGING -+ LIB_CEC->AddLog(CEC_LOG_WARNING, "%s: write failed !", __func__); -+#endif -+ } -+ -+ m_messageMutex.Lock(); -+ m_messages.erase(msgKey); -+ m_messageMutex.Unlock(); -+ -+ delete entry; -+ -+ return rc; -+} -+ -+ -+uint16_t CIMXCECAdapterCommunication::GetFirmwareVersion(void) -+{ -+ /* FIXME add ioctl ? */ -+ return 0; -+} -+ -+ -+cec_vendor_id CIMXCECAdapterCommunication::GetVendorId(void) -+{ -+ return CEC_VENDOR_UNKNOWN; -+} -+ -+ -+uint16_t CIMXCECAdapterCommunication::GetPhysicalAddress(void) -+{ -+ uint8_t phy_addr[4]; -+ uint16_t pa_tmp; -+ -+ if (m_dev->Ioctl(HDMICEC_IOC_GETPHYADDRESS, &phy_addr) != 0) -+ { -+ LIB_CEC->AddLog(CEC_LOG_ERROR, "%s: HDMICEC_IOC_GETPHYADDRESS failed !", __func__); -+ return CEC_INVALID_PHYSICAL_ADDRESS; -+ } -+ -+ if ((pa_tmp = ((phy_addr[0] << 4 | phy_addr[1]) << 8) | (phy_addr[2] << 4 | phy_addr[3]))) -+ m_physicalAddress = pa_tmp; -+ -+ return m_physicalAddress; -+} -+ -+ -+cec_logical_addresses CIMXCECAdapterCommunication::GetLogicalAddresses(void) -+{ -+ cec_logical_addresses addresses; -+ addresses.Clear(); -+ -+ CLockObject lock(m_mutex); -+ if (m_bLogicalAddressRegistered) -+ addresses.Set(m_logicalAddress); -+ -+ return addresses; -+} -+ -+void CIMXCECAdapterCommunication::HandleLogicalAddressLost(cec_logical_address UNUSED(oldAddress)) -+{ -+ UnregisterLogicalAddress(); -+} -+ -+bool CIMXCECAdapterCommunication::UnregisterLogicalAddress(void) -+{ -+ { -+ CLockObject lock(m_mutex); -+ if (!m_bLogicalAddressRegistered) -+ return true; -+ } -+ -+#ifdef CEC_DEBUGGING -+ LIB_CEC->AddLog(CEC_LOG_DEBUG, "%s - releasing previous logical address", __func__); -+#endif -+ return RegisterLogicalAddress(CECDEVICE_BROADCAST); -+} -+ -+bool CIMXCECAdapterCommunication::RegisterLogicalAddress(const cec_logical_address address) -+{ -+ { -+ CLockObject lock(m_mutex); -+ if ((m_logicalAddress == address && m_bLogicalAddressRegistered) || -+ (m_logicalAddress == address && address == CECDEVICE_BROADCAST)) -+ { -+ return true; -+ } -+ } -+ -+#ifdef CEC_DEBUGGING -+ LIB_CEC->AddLog(CEC_LOG_DEBUG, "%s: %x to %x", __func__, m_logicalAddress, address); -+#endif -+ -+ if (m_dev->Ioctl(HDMICEC_IOC_SETLOGICALADDRESS, (void *)address) != 0) -+ { -+ LIB_CEC->AddLog(CEC_LOG_ERROR, "%s: HDMICEC_IOC_SETLOGICALADDRESS failed !", __func__); -+ return false; -+ } -+ -+ CLockObject lock(m_mutex); -+ -+ m_logicalAddress = address; -+ m_bLogicalAddressRegistered = (address != CECDEVICE_BROADCAST) ? true : false; -+ return true; -+} -+ -+bool CIMXCECAdapterCommunication::SetLogicalAddresses(const cec_logical_addresses &addresses) -+{ -+ int log_addr = addresses.primary; -+ -+ return RegisterLogicalAddress((cec_logical_address)log_addr); -+} -+ -+ -+void *CIMXCECAdapterCommunication::Process(void) -+{ -+ bool bHandled; -+ hdmi_cec_event event; -+ int ret; -+ -+ cec_logical_address initiator, destination; -+ -+ while (!IsStopped()) -+ { -+ if (IsInitialised() && (ret = m_dev->Read((char *)&event, sizeof(event), 0)) > 0) -+ { -+ -+ initiator = cec_logical_address(event.msg[0] >> 4); -+ destination = cec_logical_address(event.msg[0] & 0x0f); -+ -+ if (event.event_type == MESSAGE_TYPE_RECEIVE_SUCCESS) -+ { -+ cec_command cmd; -+ -+ cec_command::Format( -+ cmd, initiator, destination, -+ ( event.msg_len > 1 ) ? cec_opcode(event.msg[1]) : CEC_OPCODE_NONE); -+ -+ for( uint8_t i = 2; i < event.msg_len; i++ ) -+ cmd.parameters.PushBack(event.msg[i]); -+ -+ if (!IsStopped()) { -+ m_callback->OnCommandReceived(cmd); -+ } -+ } -+ else if (event.event_type == MESSAGE_TYPE_SEND_SUCCESS -+ || event.event_type == MESSAGE_TYPE_NOACK) -+ { -+ bHandled = false; -+ -+ m_messageMutex.Lock(); -+ for (map::iterator it = m_messages.begin(); -+ !bHandled && it != m_messages.end(); it++) -+ { -+ bHandled = it->second->Received(event.event_type, event.msg[0], (cec_opcode)event.msg[1]); -+ } -+ m_messageMutex.Unlock(); -+ -+ if (!bHandled) -+ LIB_CEC->AddLog(CEC_LOG_WARNING, "%s: response not matched !", __func__); -+ } -+ else if (event.event_type == MESSAGE_TYPE_DISCONNECTED) -+ { -+ /* HDMI Hotplug event - disconnect */ -+ } -+ else if (event.event_type == MESSAGE_TYPE_CONNECTED) -+ { -+ if (m_physicalAddress == 0xffff) -+ continue; -+ /* HDMI Hotplug event - connect */ -+ uint16_t oldAddress = m_physicalAddress; -+ -+ if (oldAddress != GetPhysicalAddress()) { -+ if (m_PAReporter) -+ while (m_PAReporter->IsRunning()) Sleep(5); -+ delete m_PAReporter; -+ -+ m_PAReporter = new CCECPAChangedReporter(m_callback, m_physicalAddress); -+ m_PAReporter->CreateThread(false); -+ } -+#ifdef CEC_DEBUGGING -+ LIB_CEC->AddLog(CEC_LOG_DEBUG, "%s: plugin event received", __func__); -+#endif -+ } -+ else -+ LIB_CEC->AddLog(CEC_LOG_WARNING, "%s: unhandled response received %d!", __func__, event.event_type); -+ } -+ } -+ -+ return 0; -+} -+ -+CCECPAChangedReporter::CCECPAChangedReporter(IAdapterCommunicationCallback *callback, uint16_t newPA) : -+ m_callback(callback), -+ m_newPA(newPA) -+{ -+} -+ -+void* CCECPAChangedReporter::Process(void) -+{ -+ m_callback->HandlePhysicalAddressChanged(m_newPA); -+ return NULL; -+} -+ -+#endif // HAVE_IMX_API -diff --git a/src/libcec/adapter/IMX/IMXCECAdapterCommunication.h b/src/libcec/adapter/IMX/IMXCECAdapterCommunication.h -new file mode 100644 -index 0000000..2da38c1 ---- /dev/null -+++ b/src/libcec/adapter/IMX/IMXCECAdapterCommunication.h -@@ -0,0 +1,139 @@ -+#pragma once -+/* -+ * This file is part of the libCEC(R) library. -+ * -+ * libCEC(R) is Copyright (C) 2011-2013 Pulse-Eight Limited. All rights reserved. -+ * libCEC(R) is an original work, containing original code. -+ * -+ * libCEC(R) is a trademark of Pulse-Eight Limited. -+ * -+ * IMX adpater port is Copyright (C) 2013 by Stephan Rafin -+ * Copyright (C) 2014 by Matus Kral -+ * -+ * You can redistribute this file and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * -+ */ -+ -+#if defined(HAVE_IMX_API) -+ -+#include "adapter/AdapterCommunication.h" -+#include -+#include -+#include -+#include "adapter/IMX/mxc_hdmi-cec.h" -+#include -+ -+#define IMX_ADAPTER_VID 0x0471 /*FIXME TBD*/ -+#define IMX_ADAPTER_PID 0x1001 -+ -+typedef struct hdmi_cec_event{ -+ uint8_t event_type; -+ uint8_t msg_len; -+ uint8_t msg[MAX_MESSAGE_LEN]; -+}hdmi_cec_event; -+ -+ -+namespace P8PLATFORM -+{ -+ class CCDevSocket; -+}; -+ -+namespace CEC -+{ -+ class CIMXCECAdapterMessageQueueEntry; -+ -+ class CCECPAChangedReporter : public P8PLATFORM::CThread -+ { -+ public: -+ CCECPAChangedReporter(IAdapterCommunicationCallback *callback, uint16_t newPA); -+ void* Process(void); -+ -+ private: -+ IAdapterCommunicationCallback *m_callback; -+ uint16_t m_newPA; -+ }; -+ -+ class CIMXCECAdapterCommunication : public IAdapterCommunication, public P8PLATFORM::CThread -+ { -+ public: -+ /*! -+ * @brief Create a new USB-CEC communication handler. -+ * @param callback The callback to use for incoming CEC commands. -+ */ -+ CIMXCECAdapterCommunication(IAdapterCommunicationCallback *callback); -+ virtual ~CIMXCECAdapterCommunication(void); -+ -+ /** @name IAdapterCommunication implementation */ -+ ///{ -+ bool Open(uint32_t iTimeoutMs = CEC_DEFAULT_CONNECT_TIMEOUT, bool bSkipChecks = false, bool bStartListening = true); -+ void Close(void); -+ bool IsOpen(void); -+ std::string GetError(void) const; -+ cec_adapter_message_state Write(const cec_command &data, bool &bRetry, uint8_t iLineTimeout, bool bIsReply); -+ -+ bool SetLineTimeout(uint8_t UNUSED(iTimeout)) { return true; } -+ bool StartBootloader(void) { return false; } -+ bool SetLogicalAddresses(const cec_logical_addresses &addresses); -+ cec_logical_addresses GetLogicalAddresses(void); -+ bool PingAdapter(void) { return IsInitialised(); } -+ uint16_t GetFirmwareVersion(void); -+ uint32_t GetFirmwareBuildDate(void) { return 0; } -+ bool IsRunningLatestFirmware(void) { return true; } -+ bool PersistConfiguration(const libcec_configuration & UNUSED(configuration)) { return false; } -+ bool GetConfiguration(libcec_configuration & UNUSED(configuration)) { return false; } -+ std::string GetPortName(void) { return std::string("IMX"); } -+ uint16_t GetPhysicalAddress(void); -+ bool SetControlledMode(bool UNUSED(controlled)) { return true; } -+ cec_vendor_id GetVendorId(void); -+ void HandleLogicalAddressLost(cec_logical_address UNUSED(oldAddress)); -+ bool SupportsSourceLogicalAddress(const cec_logical_address address) { return address > CECDEVICE_TV && address <= CECDEVICE_BROADCAST; } -+ cec_adapter_type GetAdapterType(void) { return ADAPTERTYPE_IMX; } -+ uint16_t GetAdapterVendorId(void) const { return IMX_ADAPTER_VID; } -+ uint16_t GetAdapterProductId(void) const { return IMX_ADAPTER_PID; } -+ void SetActiveSource(bool UNUSED(bSetTo), bool UNUSED(bClientUnregistered)) {} -+ ///} -+ -+ /** @name PLATFORM::CThread implementation */ -+ ///{ -+ void *Process(void); -+ ///} -+ -+ private: -+ bool IsInitialised(void) { return m_bInitialised; }; -+ bool RegisterLogicalAddress(const cec_logical_address address); -+ bool UnregisterLogicalAddress(void); -+ -+ std::string m_strError; /**< current error message */ -+ -+ cec_logical_address m_logicalAddress; -+ uint16_t m_physicalAddress; -+ -+ P8PLATFORM::CMutex m_mutex; -+ P8PLATFORM::CCDevSocket *m_dev; /**< the device connection */ -+ -+ P8PLATFORM::CMutex m_messageMutex; -+ uint32_t m_iNextMessage; -+ std::map m_messages; -+ -+ bool m_bLogicalAddressRegistered; -+ bool m_bInitialised; -+ -+ CCECPAChangedReporter *m_PAReporter; -+ }; -+ -+}; -+ -+#endif -diff --git a/src/libcec/adapter/IMX/IMXCECAdapterDetection.cpp b/src/libcec/adapter/IMX/IMXCECAdapterDetection.cpp -new file mode 100644 -index 0000000..6c93c45 ---- /dev/null -+++ b/src/libcec/adapter/IMX/IMXCECAdapterDetection.cpp -@@ -0,0 +1,42 @@ -+/* -+ * This file is part of the libCEC(R) library. -+ * -+ * libCEC(R) is Copyright (C) 2011-2013 Pulse-Eight Limited. All rights reserved. -+ * libCEC(R) is an original work, containing original code. -+ * -+ * libCEC(R) is a trademark of Pulse-Eight Limited. -+ * -+ * IMX adpater port is Copyright (C) 2013 by Stephan Rafin -+ * -+ * You can redistribute this file and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * -+ */ -+ -+#include "env.h" -+#include -+ -+#if defined(HAVE_IMX_API) -+#include "IMXCECAdapterDetection.h" -+ -+ -+using namespace CEC; -+ -+bool CIMXCECAdapterDetection::FindAdapter(void) -+{ -+ return access(CEC_IMX_PATH, 0) == 0; -+} -+ -+#endif -diff --git a/src/libcec/adapter/IMX/IMXCECAdapterDetection.h b/src/libcec/adapter/IMX/IMXCECAdapterDetection.h -new file mode 100644 -index 0000000..d54891d ---- /dev/null -+++ b/src/libcec/adapter/IMX/IMXCECAdapterDetection.h -@@ -0,0 +1,36 @@ -+#pragma once -+/* -+ * This file is part of the libCEC(R) library. -+ * -+ * libCEC(R) is Copyright (C) 2011-2013 Pulse-Eight Limited. All rights reserved. -+ * libCEC(R) is an original work, containing original code. -+ * -+ * libCEC(R) is a trademark of Pulse-Eight Limited. -+ * -+ * IMX adpater port is Copyright (C) 2013 by Stephan Rafin -+ * -+ * You can redistribute this file and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * -+ */ -+ -+namespace CEC -+{ -+ class CIMXCECAdapterDetection -+ { -+ public: -+ static bool FindAdapter(void); -+ }; -+} -diff --git a/src/libcec/adapter/IMX/IMXCECAdapterMessageQueue.h b/src/libcec/adapter/IMX/IMXCECAdapterMessageQueue.h -new file mode 100644 -index 0000000..e54c192 ---- /dev/null -+++ b/src/libcec/adapter/IMX/IMXCECAdapterMessageQueue.h -@@ -0,0 +1,118 @@ -+#pragma once -+/* -+ * This file is part of the libCEC(R) library. -+ * -+ * libCEC(R) is Copyright (C) 2011-2013 Pulse-Eight Limited. All rights reserved. -+ * libCEC(R) is an original work, containing original code. -+ * -+ * libCEC(R) is a trademark of Pulse-Eight Limited. -+ * -+ * This program is dual-licensed; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * -+ * Alternatively, you can license this library under a commercial license, -+ * please contact Pulse-Eight Licensing for more information. -+ * -+ * For more information contact: -+ * Pulse-Eight Licensing -+ * http://www.pulse-eight.com/ -+ * http://www.pulse-eight.net/ -+ */ -+ -+#include -+ -+namespace CEC -+{ -+ using namespace P8PLATFORM; -+ -+ class CIMXCECAdapterMessageQueueEntry -+ { -+ public: -+ CIMXCECAdapterMessageQueueEntry(uint8_t addrs, cec_opcode opcode) -+ : m_bWaiting(true), m_retval((uint32_t)-1), m_bSucceeded(false) -+ { -+ m_opcode = opcode; -+ m_addrs = addrs; -+ } -+ -+ virtual ~CIMXCECAdapterMessageQueueEntry(void) {} -+ -+ /*! -+ * @brief Query result from worker thread -+ */ -+ uint32_t Result() const -+ { -+ return m_retval; -+ } -+ -+ /*! -+ * @brief Signal waiting threads -+ */ -+ void Broadcast(void) -+ { -+ CLockObject lock(m_mutex); -+ m_condition.Broadcast(); -+ } -+ -+ /*! -+ * @brief Signal waiting thread(s) when message matches this entry -+ */ -+ bool Received(int response, uint8_t addrs, cec_opcode opcode) -+ { -+ CLockObject lock(m_mutex); -+ -+ if (!(m_addrs == addrs && m_opcode == opcode)) -+ return false; -+ -+ m_retval = response; -+ m_bSucceeded = true; -+ m_condition.Signal(); -+ return true; -+ } -+ -+ /*! -+ * @brief Wait for a response to this command. -+ * @param iTimeout The timeout to use while waiting. -+ * @return True when a response was received before the timeout passed, false otherwise. -+ */ -+ bool Wait(uint32_t iTimeout) -+ { -+ CLockObject lock(m_mutex); -+ -+ bool bReturn = m_bSucceeded ? true : m_condition.Wait(m_mutex, m_bSucceeded, iTimeout); -+ m_bWaiting = false; -+ return bReturn; -+ } -+ -+ /*! -+ * @return True while a thread is waiting for a signal or isn't waiting yet, false otherwise. -+ */ -+ bool IsWaiting(void) -+ { -+ CLockObject lock(m_mutex); -+ return m_bWaiting; -+ } -+ -+ private: -+ bool m_bWaiting; /**< true while a thread is waiting or when it hasn't started waiting yet */ -+ P8PLATFORM::CCondition m_condition; /**< the condition to wait on */ -+ P8PLATFORM::CMutex m_mutex; /**< mutex for changes to this class */ -+ int m_retval; -+ bool m_bSucceeded; -+ uint8_t m_addrs; -+ cec_opcode m_opcode; -+ }; -+ -+}; -diff --git a/src/libcec/adapter/IMX/mxc_hdmi-cec.h b/src/libcec/adapter/IMX/mxc_hdmi-cec.h -new file mode 100644 -index 0000000..bc5bbce ---- /dev/null -+++ b/src/libcec/adapter/IMX/mxc_hdmi-cec.h -@@ -0,0 +1,47 @@ -+/* -+ * Copyright 2005-2013 Freescale Semiconductor, Inc. All Rights Reserved. -+ */ -+ -+/* -+ * The code contained herein is licensed under the GNU General Public -+ * License. You may obtain a copy of the GNU General Public License -+ * Version 2 or later at the following locations: -+ * -+ * http://www.opensource.org/licenses/gpl-license.html -+ * http://www.gnu.org/copyleft/gpl.html -+ */ -+#ifndef _HDMICEC_H_ -+#define _HDMICEC_H_ -+#include -+ -+/* -+ * Ioctl definitions -+ */ -+ -+/* Use 'k' as magic number */ -+#define HDMICEC_IOC_MAGIC 'H' -+/* -+ * S means "Set" through a ptr, -+ * T means "Tell" directly with the argument value -+ * G means "Get": reply by setting through a pointer -+ * Q means "Query": response is on the return value -+ * X means "eXchange": G and S atomically -+ * H means "sHift": T and Q atomically -+ */ -+#define HDMICEC_IOC_SETLOGICALADDRESS \ -+ _IOW(HDMICEC_IOC_MAGIC, 1, unsigned char) -+#define HDMICEC_IOC_STARTDEVICE _IO(HDMICEC_IOC_MAGIC, 2) -+#define HDMICEC_IOC_STOPDEVICE _IO(HDMICEC_IOC_MAGIC, 3) -+#define HDMICEC_IOC_GETPHYADDRESS \ -+ _IOR(HDMICEC_IOC_MAGIC, 4, unsigned char[4]) -+ -+#define MAX_MESSAGE_LEN 16 -+ -+#define MESSAGE_TYPE_RECEIVE_SUCCESS 1 -+#define MESSAGE_TYPE_NOACK 2 -+#define MESSAGE_TYPE_DISCONNECTED 3 -+#define MESSAGE_TYPE_CONNECTED 4 -+#define MESSAGE_TYPE_SEND_SUCCESS 5 -+ -+#endif /* !_HDMICEC_H_ */ -+ -diff --git a/src/libcec/cmake/CheckPlatformSupport.cmake b/src/libcec/cmake/CheckPlatformSupport.cmake -index 532f213..a89e404 100644 ---- a/src/libcec/cmake/CheckPlatformSupport.cmake -+++ b/src/libcec/cmake/CheckPlatformSupport.cmake -@@ -91,24 +91,49 @@ else() - endif() - - # xrandr -- check_include_files("X11/Xlib.h;X11/Xatom.h;X11/extensions/Xrandr.h" HAVE_RANDR_HEADERS) -- check_library_exists(Xrandr XRRGetScreenResources "" HAVE_RANDR_LIB) -- if (HAVE_RANDR_HEADERS AND HAVE_RANDR_LIB) -- set(LIB_INFO "${LIB_INFO}, randr") -- list(APPEND CEC_SOURCES_PLATFORM platform/X11/randr-edid.cpp) -- SET(HAVE_RANDR ON CACHE BOOL "xrandr supported" FORCE) -+ if (${HAVE_RANDR_API}) -+ check_include_files("X11/Xlib.h;X11/Xatom.h;X11/extensions/Xrandr.h" HAVE_RANDR_HEADERS) -+ check_library_exists(Xrandr XRRGetScreenResources "" HAVE_RANDR_LIB) -+ if (HAVE_RANDR_HEADERS AND HAVE_RANDR_LIB) -+ set(LIB_INFO "${LIB_INFO}, randr") -+ list(APPEND CEC_SOURCES_PLATFORM platform/X11/randr-edid.cpp) -+ set(HAVE_RANDR 1) -+ else() -+ set(HAVE_RANDR 0) -+ endif() -+ else() -+ set(HAVE_RANDR 0) - endif() - -+ # iMX6 -+ if (${HAVE_IMX_API}) -+ set(LIB_INFO "${LIB_INFO}, iMX6") -+ set(HAVE_IMX_API 1) -+ set(CEC_SOURCES_ADAPTER_IMX adapter/IMX/IMXCECAdapterDetection.cpp -+ adapter/IMX/IMXCECAdapterCommunication.cpp) -+ source_group("Source Files\\adapter\\iMX6" FILES ${CEC_SOURCES_ADAPTER_IMX}) -+ list(APPEND CEC_SOURCES ${CEC_SOURCES_ADAPTER_IMX}) -+ set(HAVE_RPI_API 0) -+ else() -+ set(HAVE_IMX_API 0) -+ set(HAVE_RPI_API 1) -+ endif() -+ - # raspberry pi -- find_library(RPI_BCM_HOST bcm_host "${RPI_LIB_DIR}") -- check_library_exists(bcm_host bcm_host_init "${RPI_LIB_DIR}" HAVE_RPI_LIB) -- if (HAVE_RPI_LIB) -- SET(HAVE_RPI_API ON CACHE BOOL "raspberry pi supported" FORCE) -+ if (HAVE_RPI_API) -+ find_library(RPI_BCM_HOST bcm_host "${RPI_LIB_DIR}") -+ check_library_exists(bcm_host bcm_host_init "${RPI_LIB_DIR}" HAVE_RPI_API) -+ endif() -+ if (HAVE_RPI_API) - find_library(RPI_VCOS vcos "${RPI_LIB_DIR}") - find_library(RPI_VCHIQ_ARM vchiq_arm "${RPI_LIB_DIR}") - include_directories(${RPI_INCLUDE_DIR} ${RPI_INCLUDE_DIR}/interface/vcos/pthreads ${RPI_INCLUDE_DIR}/interface/vmcs_host/linux) - -- set(LIB_INFO "${LIB_INFO}, RPi") -+ set(LIB_INFO "${LIB_INFO}, 'RPi'") -+ # find includes files on Raspberry Pi -+ include_directories(/opt/vc/include /opt/vc/include/interface/vcos/pthreads /opt/vc/include/interface/vmcs_host/linux) -+ list(APPEND CMAKE_REQUIRED_LIBRARIES "vcos") -+ list(APPEND CMAKE_REQUIRED_LIBRARIES "vchiq_arm") - set(CEC_SOURCES_ADAPTER_RPI adapter/RPi/RPiCECAdapterDetection.cpp - adapter/RPi/RPiCECAdapterCommunication.cpp - adapter/RPi/RPiCECAdapterMessageQueue.cpp) -@@ -148,6 +173,8 @@ else() - else() - set(HAVE_AOCEC_API 0) - endif() -+ -+ - endif() - - # rt -diff --git a/src/libcec/cmake/DisplayPlatformSupport.cmake b/src/libcec/cmake/DisplayPlatformSupport.cmake -index 7ec10f5..2262638 100644 ---- a/src/libcec/cmake/DisplayPlatformSupport.cmake -+++ b/src/libcec/cmake/DisplayPlatformSupport.cmake -@@ -51,4 +51,9 @@ else() - endif() - -+if (HAVE_IMX_API) -+ message(STATUS "i.MX6 support: yes") -+else() -+ message(STATUS "i.MX6 support: no") -+endif() - - if (HAVE_PYTHON) -diff --git a/src/libcec/cmake/LinkPlatformSupport.cmake b/src/libcec/cmake/LinkPlatformSupport.cmake -index fc27353..b203f6f 100644 ---- a/src/libcec/cmake/LinkPlatformSupport.cmake -+++ b/src/libcec/cmake/LinkPlatformSupport.cmake -@@ -28,7 +28,12 @@ endif() - - # raspberry pi - if (HAVE_RPI_API) -- target_link_libraries(cec ${RPI_VCOS} ${RPI_VCHIQ_ARM} ${RPI_BCM_HOST}) -+ find_library (VCOS vcos) -+ target_link_libraries(cec ${VCOS}) -+ find_library (VCHIQ_ARM vchiq_arm) -+ target_link_libraries(cec ${VCHIP_ARM}) -+ find_library (BCM_HOST bcm_host) -+ target_link_libraries(cec ${BCM_HOST}) - endif() - - # Apple -diff --git a/src/libcec/cmake/git-rev.sh b/src/libcec/cmake/git-rev.sh -index db682c1..15b6a23 100755 ---- a/src/libcec/cmake/git-rev.sh -+++ b/src/libcec/cmake/git-rev.sh -@@ -2,7 +2,7 @@ - - ## cmake doesn't read the variable when it doesn't end with a newline, and I haven't figured out how to have it add a newline directly... - if git rev-parse --git-dir > /dev/null 2>&1; then -- last_tag=`git describe --tags --abbrev=0` -+ last_tag=`git describe --tags --abbrev=0 --all` - last_hash=`git --no-pager log --abbrev=7 -n 1 --pretty=format:"%h"` - commits_since_tag=`git log ${last_tag}..HEAD --oneline | wc -l` - git_dirty=`git diff HEAD | wc -l` -diff --git a/src/libcec/devices/CECBusDevice.cpp b/src/libcec/devices/CECBusDevice.cpp -index 99f762c..be72b05 100644 ---- a/src/libcec/devices/CECBusDevice.cpp -+++ b/src/libcec/devices/CECBusDevice.cpp -@@ -44,6 +44,7 @@ - #include "implementations/RLCommandHandler.h" - #include "implementations/RHCommandHandler.h" - #include "implementations/AQCommandHandler.h" -+#include "implementations/GRCommandHandler.h" - #include "LibCEC.h" - #include "CECTypeUtils.h" - #include -@@ -217,6 +218,9 @@ bool CCECBusDevice::ReplaceHandler(bool bActivateSource /* = true */) - case CEC_VENDOR_SHARP2: - m_handler = new CAQCommandHandler(this, iTransmitTimeout, iTransmitWait, iTransmitRetries, iActiveSourcePending); - break; -+ case CEC_VENDOR_GRUNDIG: -+ m_handler = new CGRCommandHandler(this, iTransmitTimeout, iTransmitWait, iTransmitRetries, iActiveSourcePending); -+ break; - default: - m_handler = new CCECCommandHandler(this, iTransmitTimeout, iTransmitWait, iTransmitRetries, iActiveSourcePending); - break; -@@ -1263,7 +1267,7 @@ bool CCECBusDevice::PowerOn(const cec_logical_address initiator) - - MarkBusy(); - cec_power_status currentStatus; -- if (m_iLogicalAddress == CECDEVICE_TV || -+ if ((m_iLogicalAddress == CECDEVICE_TV && !ImageViewOnSent()) || - ((currentStatus = GetPowerStatus(initiator, false)) != CEC_POWER_STATUS_IN_TRANSITION_STANDBY_TO_ON && - currentStatus != CEC_POWER_STATUS_ON)) - { -@@ -1498,3 +1502,8 @@ bool CCECBusDevice::TransmitMuteAudio(const cec_logical_address source) - return TransmitKeypress(source, CEC_USER_CONTROL_CODE_MUTE) && - TransmitKeyRelease(source); - } -+ -+bool CCECBusDevice::TransmitSystemAudioModeRequest(const cec_logical_address initiator) -+{ -+ return m_handler->TransmitSystemAudioModeRequest(initiator, m_iPhysicalAddress, false); -+} -diff --git a/src/libcec/devices/CECBusDevice.h b/src/libcec/devices/CECBusDevice.h -index b8255aa..8493d48 100644 ---- a/src/libcec/devices/CECBusDevice.h -+++ b/src/libcec/devices/CECBusDevice.h -@@ -199,6 +199,8 @@ namespace CEC - void SignalOpcode(cec_opcode opcode); - bool WaitForOpcode(cec_opcode opcode); - -+ virtual bool TransmitSystemAudioModeRequest(const cec_logical_address initiator); -+ - CCECAudioSystem * AsAudioSystem(void); - static CCECAudioSystem * AsAudioSystem(CCECBusDevice *device); - CCECPlaybackDevice * AsPlaybackDevice(void); -diff --git a/src/libcec/env.h.in b/src/libcec/env.h.in -index 0774a1c..14c7704 100644 ---- a/src/libcec/env.h.in -+++ b/src/libcec/env.h.in -@@ -70,6 +70,9 @@ - /* Define to 1 for Raspberry Pi support */ - #cmakedefine HAVE_RPI_API @HAVE_RPI_API@ - -+/* Define to 1 for iMX6 support */ -+#cmakedefine HAVE_IMX_API @HAVE_IMX_API@ -+ - /* Define to 1 for TDA995x support */ - #cmakedefine HAVE_TDA995X_API @HAVE_TDA995X_API@ - -diff --git a/src/libcec/implementations/CECCommandHandler.cpp b/src/libcec/implementations/CECCommandHandler.cpp -index 71c2230..5a1e7a0 100644 ---- a/src/libcec/implementations/CECCommandHandler.cpp -+++ b/src/libcec/implementations/CECCommandHandler.cpp -@@ -62,6 +62,7 @@ CCECCommandHandler::CCECCommandHandler(CCECBusDevice *busDevice, - m_iTransmitRetries(iTransmitRetries), - m_bHandlerInited(false), - m_bOPTSendDeckStatusUpdateOnActiveSource(false), -+ m_bOPTSendMenuStatusUpdateOnActiveSource(true), - m_vendorId(CEC_VENDOR_UNKNOWN), - m_iActiveSourcePending(iActiveSourcePending), - m_iPowerStatusRequested(0) -@@ -1133,6 +1134,19 @@ bool CCECCommandHandler::TransmitAudioStatus(const cec_logical_address iInitiato - return Transmit(command, false, bIsReply); - } - -+bool CCECCommandHandler::TransmitSystemAudioModeRequest(const cec_logical_address iInitiator, uint16_t iPhysicalAddress, bool bIsReply) -+{ -+ cec_command command; -+ cec_command::Format(command, iInitiator, CECDEVICE_AUDIOSYSTEM, CEC_OPCODE_SYSTEM_AUDIO_MODE_REQUEST); -+ command.parameters.PushBack((uint8_t) ((iPhysicalAddress >> 8) & 0xFF)); -+ command.parameters.PushBack((uint8_t) (iPhysicalAddress & 0xFF)); -+ -+ if (Transmit(command, true, bIsReply)) -+ return true; -+ -+ return false; -+} -+ - bool CCECCommandHandler::TransmitSetSystemAudioMode(const cec_logical_address iInitiator, const cec_logical_address iDestination, cec_system_audio_status state, bool bIsReply) - { - cec_command command; -@@ -1307,7 +1321,7 @@ bool CCECCommandHandler::ActivateSource(bool bTransmitDelayedCommandsOnly /* = f - if (!bActiveSourceFailed && bSourceSwitchAllowed) - { - bActiveSourceFailed = !m_busDevice->TransmitActiveSource(false); -- if (bTvPresent && !bActiveSourceFailed) -+ if (bTvPresent && !bActiveSourceFailed && SendMenuStatusUpdateOnActiveSource()) - m_busDevice->TransmitMenuState(CECDEVICE_TV, false); - - // update the deck status for playback devices -diff --git a/src/libcec/implementations/CECCommandHandler.h b/src/libcec/implementations/CECCommandHandler.h -index 8ff9a1e..eb52ed3 100644 ---- a/src/libcec/implementations/CECCommandHandler.h -+++ b/src/libcec/implementations/CECCommandHandler.h -@@ -60,7 +60,9 @@ namespace CEC - virtual bool HandleCommand(const cec_command &command); - virtual cec_vendor_id GetVendorId(void) { return m_vendorId; }; - virtual void SetVendorId(cec_vendor_id vendorId) { m_vendorId = vendorId; } -- static bool HasSpecificHandler(cec_vendor_id vendorId) { return vendorId == CEC_VENDOR_LG || vendorId == CEC_VENDOR_SAMSUNG || vendorId == CEC_VENDOR_PANASONIC || vendorId == CEC_VENDOR_PHILIPS || vendorId == CEC_VENDOR_SHARP || vendorId == CEC_VENDOR_SHARP2 || vendorId == CEC_VENDOR_TOSHIBA || vendorId == CEC_VENDOR_TOSHIBA2 || vendorId == CEC_VENDOR_ONKYO;} -+ static bool HasSpecificHandler(cec_vendor_id vendorId) { return vendorId == CEC_VENDOR_LG || vendorId == CEC_VENDOR_SAMSUNG || vendorId == CEC_VENDOR_PANASONIC || vendorId == CEC_VENDOR_PHILIPS -+ || vendorId == CEC_VENDOR_SHARP || vendorId == CEC_VENDOR_SHARP2 || vendorId == CEC_VENDOR_TOSHIBA || vendorId == CEC_VENDOR_TOSHIBA2 || vendorId == CEC_VENDOR_ONKYO -+ || vendorId == CEC_VENDOR_GRUNDIG; } - - virtual bool InitHandler(void) { return true; } - virtual bool ActivateSource(bool bTransmitDelayedCommandsOnly = false); -@@ -89,6 +91,7 @@ namespace CEC - virtual bool TransmitPowerState(const cec_logical_address iInitiator, const cec_logical_address iDestination, cec_power_status state, bool bIsReply); - virtual bool TransmitVendorID(const cec_logical_address iInitiator, const cec_logical_address iDestination, uint64_t iVendorId, bool bIsReply); - virtual bool TransmitAudioStatus(const cec_logical_address iInitiator, const cec_logical_address iDestination, uint8_t state, bool bIsReply); -+ virtual bool TransmitSystemAudioModeRequest(const cec_logical_address iInitiator, uint16_t iPhysicalAddress, bool bIsReply); - virtual bool TransmitSetSystemAudioMode(const cec_logical_address iInitiator, const cec_logical_address iDestination, cec_system_audio_status state, bool bIsReply); - virtual bool TransmitSystemAudioModeStatus(const cec_logical_address iInitiator, const cec_logical_address iDestination, cec_system_audio_status state, bool bIsReply); - virtual bool TransmitDeckStatus(const cec_logical_address iInitiator, const cec_logical_address iDestination, cec_deck_info state, bool bIsReply); -@@ -97,6 +100,7 @@ namespace CEC - virtual bool TransmitSystemAudioModeRequest(const cec_logical_address iInitiator, uint16_t iPhysicalAddress); - virtual bool TransmitSetStreamPath(uint16_t iStreamPath, bool bIsReply); - virtual bool SendDeckStatusUpdateOnActiveSource(void) const { return m_bOPTSendDeckStatusUpdateOnActiveSource; }; -+ virtual bool SendMenuStatusUpdateOnActiveSource(void) const { return m_bOPTSendMenuStatusUpdateOnActiveSource; }; - - virtual void ScheduleActivateSource(uint64_t iDelay); - -@@ -165,6 +169,7 @@ namespace CEC - int8_t m_iTransmitRetries; - bool m_bHandlerInited; - bool m_bOPTSendDeckStatusUpdateOnActiveSource; -+ bool m_bOPTSendMenuStatusUpdateOnActiveSource; - cec_vendor_id m_vendorId; - int64_t m_iActiveSourcePending; - P8PLATFORM::CMutex m_mutex; -diff --git a/src/libcec/implementations/GRCommandHandler.cpp b/src/libcec/implementations/GRCommandHandler.cpp -new file mode 100644 -index 0000000..af49af9 ---- /dev/null -+++ b/src/libcec/implementations/GRCommandHandler.cpp -@@ -0,0 +1,92 @@ -+/* -+ * This file is part of the libCEC(R) library. -+ * -+ * libCEC(R) is Copyright (C) 2011-2015 Pulse-Eight Limited. All rights reserved. -+ * libCEC(R) is an original work, containing original code. -+ * -+ * libCEC(R) is a trademark of Pulse-Eight Limited. -+ * -+ * This program is dual-licensed; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -+ * 02110-1301 USA -+ * -+ * -+ * Alternatively, you can license this library under a commercial license, -+ * please contact Pulse-Eight Licensing for more information. -+ * -+ * For more information contact: -+ * Pulse-Eight Licensing -+ * http://www.pulse-eight.com/ -+ * http://www.pulse-eight.net/ -+ */ -+ -+#include "env.h" -+#include "GRCommandHandler.h" -+ -+#include "devices/CECBusDevice.h" -+#include "CECProcessor.h" -+#include "LibCEC.h" -+#include "CECClient.h" -+ -+using namespace CEC; -+ -+#define LIB_CEC m_busDevice->GetProcessor()->GetLib() -+#define ToString(p) LIB_CEC->ToString(p) -+ -+CGRCommandHandler::CGRCommandHandler(CCECBusDevice *busDevice, -+ int32_t iTransmitTimeout /* = CEC_DEFAULT_TRANSMIT_TIMEOUT */, -+ int32_t iTransmitWait /* = CEC_DEFAULT_TRANSMIT_WAIT */, -+ int8_t iTransmitRetries /* = CEC_DEFAULT_TRANSMIT_RETRIES */, -+ int64_t iActiveSourcePending /* = 0 */) : -+ CCECCommandHandler(busDevice, iTransmitTimeout, iTransmitWait, iTransmitRetries, iActiveSourcePending) -+{ -+ m_vendorId = CEC_VENDOR_GRUNDIG; -+ m_bOPTSendMenuStatusUpdateOnActiveSource = false; -+ -+ m_busDevice->SetCecVersion(CEC_VERSION_1_3A); -+ -+ /* Grundig devices return "" as language */ -+ cec_menu_language lang; -+ snprintf(lang, 4, "eng"); -+ m_busDevice->SetMenuLanguage(lang); -+} -+ -+bool CGRCommandHandler::InitHandler(void) -+{ -+ if (m_bHandlerInited) -+ return true; -+ m_bHandlerInited = true; -+ -+ if (m_busDevice->GetLogicalAddress() != CECDEVICE_TV) -+ return true; -+ -+ CCECBusDevice *primary = m_processor->GetPrimaryDevice(); -+ if (primary && primary->GetLogicalAddress() != CECDEVICE_UNREGISTERED) -+ { -+ /* imitate Toshiba devices */ -+ if (m_busDevice->GetLogicalAddress() != primary->GetLogicalAddress()) -+ { -+ primary->SetVendorId(CEC_VENDOR_GRUNDIG); -+ primary->ReplaceHandler(false); -+ } -+ -+ if (m_busDevice->GetLogicalAddress() == CECDEVICE_TV) -+ { -+ /* send the vendor id */ -+ primary->TransmitVendorID(CECDEVICE_BROADCAST, false, false); -+ } -+ } -+ -+ return true; -+} -diff --git a/src/libcec/implementations/GRCommandHandler.h b/src/libcec/implementations/GRCommandHandler.h -new file mode 100644 -index 0000000..e01c7fc ---- /dev/null -+++ b/src/libcec/implementations/GRCommandHandler.h -@@ -0,0 +1,53 @@ -+#pragma once -+/* -+ * This file is part of the libCEC(R) library. -+ * -+ * libCEC(R) is Copyright (C) 2011-2015 Pulse-Eight Limited. All rights reserved. -+ * libCEC(R) is an original work, containing original code. -+ * -+ * libCEC(R) is a trademark of Pulse-Eight Limited. -+ * -+ * This program is dual-licensed; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -+ * 02110-1301 USA -+ * -+ * -+ * Alternatively, you can license this library under a commercial license, -+ * please contact Pulse-Eight Licensing for more information. -+ * -+ * For more information contact: -+ * Pulse-Eight Licensing -+ * http://www.pulse-eight.com/ -+ * http://www.pulse-eight.net/ -+ */ -+ -+#include "env.h" -+#include "CECCommandHandler.h" -+#include "p8-platform/threads/threads.h" -+ -+namespace CEC -+{ -+ class CGRCommandHandler : public CCECCommandHandler -+ { -+ public: -+ CGRCommandHandler(CCECBusDevice *busDevice, -+ int32_t iTransmitTimeout = CEC_DEFAULT_TRANSMIT_TIMEOUT, -+ int32_t iTransmitWait = CEC_DEFAULT_TRANSMIT_WAIT, -+ int8_t iTransmitRetries = CEC_DEFAULT_TRANSMIT_RETRIES, -+ int64_t iActiveSourcePending = 0); -+ -+ bool InitHandler(void); -+ virtual ~CGRCommandHandler(void) {}; -+ }; -+}; --- -2.7.4 - diff --git a/projects/imx6/patches/linux/3.14-sr/linux-001-LLVMLinux_use_static_inline_in_ARM_ftrace.h.patch b/projects/imx6/patches/linux/3.14-sr/linux-001-LLVMLinux_use_static_inline_in_ARM_ftrace.h.patch deleted file mode 100644 index 8091ff256f..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-001-LLVMLinux_use_static_inline_in_ARM_ftrace.h.patch +++ /dev/null @@ -1,52 +0,0 @@ -From aeea3592a13bf12861943e44fc48f1f270941f8d Mon Sep 17 00:00:00 2001 -From: Behan Webster -Date: Wed, 24 Sep 2014 01:06:46 +0100 -Subject: ARM: 8158/1: LLVMLinux: use static inline in ARM ftrace.h - -With compilers which follow the C99 standard (like modern versions of gcc and -clang), "extern inline" does the wrong thing (emits code for an externally -linkable version of the inline function). In this case using static inline -and removing the NULL version of return_address in return_address.c does -the right thing. - -Signed-off-by: Behan Webster -Reviewed-by: Mark Charlebois -Acked-by: Steven Rostedt -Signed-off-by: Russell King ---- - arch/arm/include/asm/ftrace.h | 2 +- - arch/arm/kernel/return_address.c | 5 ----- - 2 files changed, 1 insertion(+), 6 deletions(-) - -diff --git a/arch/arm/include/asm/ftrace.h b/arch/arm/include/asm/ftrace.h -index 39eb16b..bfe2a2f 100644 ---- a/arch/arm/include/asm/ftrace.h -+++ b/arch/arm/include/asm/ftrace.h -@@ -45,7 +45,7 @@ void *return_address(unsigned int); - - #else - --extern inline void *return_address(unsigned int level) -+static inline void *return_address(unsigned int level) - { - return NULL; - } -diff --git a/arch/arm/kernel/return_address.c b/arch/arm/kernel/return_address.c -index fafedd8..f6aa84d 100644 ---- a/arch/arm/kernel/return_address.c -+++ b/arch/arm/kernel/return_address.c -@@ -63,11 +63,6 @@ void *return_address(unsigned int level) - #warning "TODO: return_address should use unwind tables" - #endif - --void *return_address(unsigned int level) --{ -- return NULL; --} -- - #endif /* if defined(CONFIG_FRAME_POINTER) && !defined(CONFIG_ARM_UNWIND) / else */ - - EXPORT_SYMBOL_GPL(return_address); --- -cgit v0.11.2 - diff --git a/projects/imx6/patches/linux/3.14-sr/linux-002-ARM-LLVMLinux-Change-extern-inline-to-static-inline.patch b/projects/imx6/patches/linux/3.14-sr/linux-002-ARM-LLVMLinux-Change-extern-inline-to-static-inline.patch deleted file mode 100644 index 0ab03fb9da..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-002-ARM-LLVMLinux-Change-extern-inline-to-static-inline.patch +++ /dev/null @@ -1,59 +0,0 @@ -From a2561791169351cbf1ac5ca0c4299a0eef7eca65 Mon Sep 17 00:00:00 2001 -From: Behan Webster -Date: Tue, 3 Sep 2013 22:27:26 -0400 -Subject: [PATCH] ARM: LLVMLinux: Change "extern inline" to "static inline" in - glue-cache.h - -With compilers which follow the C99 standard (like modern versions of gcc and -clang), "extern inline" does the wrong thing (emits code for an externally -linkable version of the inline function). "static inline" is the correct choice -instead. - -Author: Behan Webster -Signed-off-by: Behan Webster -Reviewed-by: Mark Charlebois ---- - arch/arm/include/asm/glue-cache.h | 22 +++++++++++----------- - 1 file changed, 11 insertions(+), 11 deletions(-) - -diff --git a/arch/arm/include/asm/glue-cache.h b/arch/arm/include/asm/glue-cache.h -index c81adc0..a3c24cd 100644 ---- a/arch/arm/include/asm/glue-cache.h -+++ b/arch/arm/include/asm/glue-cache.h -@@ -130,22 +130,22 @@ - #endif - - #ifndef __ASSEMBLER__ --extern inline void nop_flush_icache_all(void) { } --extern inline void nop_flush_kern_cache_all(void) { } --extern inline void nop_flush_kern_cache_louis(void) { } --extern inline void nop_flush_user_cache_all(void) { } --extern inline void nop_flush_user_cache_range(unsigned long a, -+static inline void nop_flush_icache_all(void) { } -+static inline void nop_flush_kern_cache_all(void) { } -+static inline void nop_flush_kern_cache_louis(void) { } -+static inline void nop_flush_user_cache_all(void) { } -+static inline void nop_flush_user_cache_range(unsigned long a, - unsigned long b, unsigned int c) { } - --extern inline void nop_coherent_kern_range(unsigned long a, unsigned long b) { } --extern inline int nop_coherent_user_range(unsigned long a, -+static inline void nop_coherent_kern_range(unsigned long a, unsigned long b) { } -+static inline int nop_coherent_user_range(unsigned long a, - unsigned long b) { return 0; } --extern inline void nop_flush_kern_dcache_area(void *a, size_t s) { } -+static inline void nop_flush_kern_dcache_area(void *a, size_t s) { } - --extern inline void nop_dma_flush_range(const void *a, const void *b) { } -+static inline void nop_dma_flush_range(const void *a, const void *b) { } - --extern inline void nop_dma_map_area(const void *s, size_t l, int f) { } --extern inline void nop_dma_unmap_area(const void *s, size_t l, int f) { } -+static inline void nop_dma_map_area(const void *s, size_t l, int f) { } -+static inline void nop_dma_unmap_area(const void *s, size_t l, int f) { } - #endif - - #ifndef MULTI_CACHE --- -2.1.4 - diff --git a/projects/imx6/patches/linux/3.14-sr/linux-003-rename-sgtl5000-codec.patch b/projects/imx6/patches/linux/3.14-sr/linux-003-rename-sgtl5000-codec.patch deleted file mode 100644 index b8d92a7cc8..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-003-rename-sgtl5000-codec.patch +++ /dev/null @@ -1,67 +0,0 @@ -From 99069dc5c3343339c31337cdc5175b2b527395cb Mon Sep 17 00:00:00 2001 -From: Peter Vicman -Date: Fri, 31 Mar 2017 19:02:34 +0200 -Subject: [PATCH] rename sgtl5000 codec - ---- - arch/arm/boot/dts/imx6qdl-hummingboard-som-v15.dtsi | 2 +- - arch/arm/boot/dts/imx6qdl-hummingboard.dtsi | 2 +- - arch/arm/boot/dts/imx6qdl-hummingboard2-som-v15.dtsi | 2 +- - arch/arm/boot/dts/imx6qdl-hummingboard2.dtsi | 2 +- - 4 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/arch/arm/boot/dts/imx6qdl-hummingboard-som-v15.dtsi b/arch/arm/boot/dts/imx6qdl-hummingboard-som-v15.dtsi -index 4efdb27..f889904 100644 ---- a/arch/arm/boot/dts/imx6qdl-hummingboard-som-v15.dtsi -+++ b/arch/arm/boot/dts/imx6qdl-hummingboard-som-v15.dtsi -@@ -135,7 +135,7 @@ - "Mic Jack", "Mic Bias", - "Headphone Jack", "HP_OUT"; - compatible = "fsl,imx-audio-sgtl5000"; -- model = "On-board Codec"; -+ model = "imx-sgtl5000"; - mux-ext-port = <5>; - mux-int-port = <1>; - cpu-dai = <&ssi1>; -diff --git a/arch/arm/boot/dts/imx6qdl-hummingboard.dtsi b/arch/arm/boot/dts/imx6qdl-hummingboard.dtsi -index b58db39..80b376c 100644 ---- a/arch/arm/boot/dts/imx6qdl-hummingboard.dtsi -+++ b/arch/arm/boot/dts/imx6qdl-hummingboard.dtsi -@@ -135,7 +135,7 @@ - "Mic Jack", "Mic Bias", - "Headphone Jack", "HP_OUT"; - compatible = "fsl,imx-audio-sgtl5000"; -- model = "On-board Codec"; -+ model = "imx-sgtl5000"; - mux-ext-port = <5>; - mux-int-port = <1>; - cpu-dai = <&ssi1>; -diff --git a/arch/arm/boot/dts/imx6qdl-hummingboard2-som-v15.dtsi b/arch/arm/boot/dts/imx6qdl-hummingboard2-som-v15.dtsi -index 76ecfa2..6cb5aab 100644 ---- a/arch/arm/boot/dts/imx6qdl-hummingboard2-som-v15.dtsi -+++ b/arch/arm/boot/dts/imx6qdl-hummingboard2-som-v15.dtsi -@@ -168,7 +168,7 @@ - "Mic Jack", "Mic Bias", - "Headphone Jack", "HP_OUT"; - compatible = "fsl,imx-audio-sgtl5000"; -- model = "On-board Codec"; -+ model = "imx-sgtl5000"; - mux-ext-port = <5>; - mux-int-port = <1>; - cpu-dai = <&ssi1>; -diff --git a/arch/arm/boot/dts/imx6qdl-hummingboard2.dtsi b/arch/arm/boot/dts/imx6qdl-hummingboard2.dtsi -index eb9f3c9..fcfc87c 100644 ---- a/arch/arm/boot/dts/imx6qdl-hummingboard2.dtsi -+++ b/arch/arm/boot/dts/imx6qdl-hummingboard2.dtsi -@@ -168,7 +168,7 @@ - "Mic Jack", "Mic Bias", - "Headphone Jack", "HP_OUT"; - compatible = "fsl,imx-audio-sgtl5000"; -- model = "On-board Codec"; -+ model = "imx-sgtl5000"; - mux-ext-port = <5>; - mux-int-port = <1>; - cpu-dai = <&ssi1>; --- -2.7.4 - diff --git a/projects/imx6/patches/linux/3.14-sr/linux-004-fix-build-with-gcc-5.patch b/projects/imx6/patches/linux/3.14-sr/linux-004-fix-build-with-gcc-5.patch deleted file mode 100644 index 89800d7bca..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-004-fix-build-with-gcc-5.patch +++ /dev/null @@ -1,16 +0,0 @@ -# see https://github.com/wongsyrone/openwrt-1/commit/93c0a5173414cfa7684547de3c3a1f3dc4240383 -# and https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65932 - -diff -Naur linux-cuboxi-3.14-ea83bda.orig/arch/arm/Makefile linux-cuboxi-3.14-ea83bda/arch/arm/Makefile ---- linux-cuboxi-3.14-ea83bda.orig/arch/arm/Makefile 2015-05-06 10:05:43.000000000 -0700 -+++ linux-cuboxi-3.14-ea83bda/arch/arm/Makefile 2015-10-05 13:51:43.641612713 -0700 -@@ -120,7 +120,8 @@ - endif - - # Need -Uarm for gcc < 3.x --KBUILD_CFLAGS +=$(CFLAGS_ABI) $(CFLAGS_ISA) $(arch-y) $(tune-y) $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) -msoft-float -Uarm -+# Maybe we need -fno-ipa-sra for gcc > 4.9.x -+KBUILD_CFLAGS +=$(CFLAGS_ABI) $(CFLAGS_ISA) $(arch-y) $(tune-y) $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) -msoft-float -Uarm -fno-ipa-sra - KBUILD_AFLAGS +=$(CFLAGS_ABI) $(AFLAGS_ISA) $(arch-y) $(tune-y) -include asm/unified.h -msoft-float - - CHECKFLAGS += -D__arm__ diff --git a/projects/imx6/patches/linux/3.14-sr/linux-005-pci-suspend-fix.patch b/projects/imx6/patches/linux/3.14-sr/linux-005-pci-suspend-fix.patch deleted file mode 100644 index 130518ffa5..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-005-pci-suspend-fix.patch +++ /dev/null @@ -1,15 +0,0 @@ -Fix build error when CONFIG_PM_SLEEP is not set - ---- a/drivers/pci/host/pci-imx6.c 2017-01-14 19:50:14.159715318 +0100 -+++ b/drivers/pci/host/pci-imx6.c 2017-01-14 19:50:42.182645605 +0100 -@@ -1311,7 +1311,9 @@ static struct platform_driver imx6_pcie_ - .name = "imx6q-pcie", - .owner = THIS_MODULE, - .of_match_table = imx6_pcie_of_match, -+#ifdef CONFIG_PM_SLEEP - .pm = &pci_imx_pm_ops, -+#endif - }, - .shutdown = imx6_pcie_shutdown, - }; - diff --git a/projects/imx6/patches/linux/3.14-sr/linux-007-config_cmdline.patch b/projects/imx6/patches/linux/3.14-sr/linux-007-config_cmdline.patch deleted file mode 100644 index 60b772db0e..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-007-config_cmdline.patch +++ /dev/null @@ -1,36 +0,0 @@ -diff -urN a/drivers/of/fdt.c b/drivers/of/fdt.c ---- a/drivers/of/fdt.c 2015-01-13 20:49:42.799509145 +0100 -+++ b/drivers/of/fdt.c 2015-01-13 20:56:29.118557900 +0100 -@@ -804,6 +804,7 @@ - { - unsigned long l; - char *p; -+ char tmp_command_line[COMMAND_LINE_SIZE] = CONFIG_CMDLINE; - - pr_debug("search \"chosen\", depth: %d, uname: %s\n", depth, uname); - -@@ -822,12 +823,23 @@ - * CONFIG_CMDLINE is meant to be a default in case nothing else - * managed to set the command line, unless CONFIG_CMDLINE_FORCE - * is set in which case we override whatever was found earlier. -+ * -+ * But we do prepend CONFIG_CMDLINE to bootloader arguments anyway. - */ - #ifdef CONFIG_CMDLINE - #ifndef CONFIG_CMDLINE_FORCE - if (!((char *)data)[0]) --#endif - strlcpy(data, CONFIG_CMDLINE, COMMAND_LINE_SIZE); -+ else { -+ /* append bootloader arguments to CONFIG_CMDLINE */ -+ strlcat(tmp_command_line, " ", COMMAND_LINE_SIZE); -+ strlcat(tmp_command_line, data, COMMAND_LINE_SIZE); -+ /* copy everything back */ -+ strlcpy(data, tmp_command_line, COMMAND_LINE_SIZE); -+ } -+#else -+ strlcpy(data, CONFIG_CMDLINE, COMMAND_LINE_SIZE); -+#endif /* CONFIG_CMDLINE_FORCE */ - #endif /* CONFIG_CMDLINE */ - - pr_debug("Command line is: %s\n", (char*)data); diff --git a/projects/imx6/patches/linux/3.14-sr/linux-010_tivo_slide_pro.patch b/projects/imx6/patches/linux/3.14-sr/linux-010_tivo_slide_pro.patch deleted file mode 100644 index 4fea696523..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-010_tivo_slide_pro.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 716d6bc9f73bd366d4b64b473055af79810d67fc Mon Sep 17 00:00:00 2001 -From: Forest -Date: Thu, 12 Mar 2015 23:43:12 -0700 -Subject: [PATCH] hid: enable all buttons on the TiVo Slide Pro remote - -The linux kernel has supported the TiVo Slide remote control for some time, -but does not recognize the USB ID of the newer Slide Pro. This patch adds -the missing data structures so the newer remote will be recognized by the -driver, thereby allowing the TiVo, LiveTV, and Thumbs Up/Down buttons to be -mapped with a hwdb file. - -Signed-off-by: Forest ---- - drivers/hid/hid-core.c | 1 + - drivers/hid/hid-ids.h | 1 + - drivers/hid/hid-tivo.c | 1 + - 3 files changed, 3 insertions(+) - -diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c -index 1d0f2b6..722a925 100644 ---- a/drivers/hid/hid-core.c -+++ b/drivers/hid/hid-core.c -@@ -1980,6 +1980,7 @@ static const struct hid_device_id hid_have_special_driver[] = { - { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb65a) }, - { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_TIVO, USB_DEVICE_ID_TIVO_SLIDE_BT) }, - { HID_USB_DEVICE(USB_VENDOR_ID_TIVO, USB_DEVICE_ID_TIVO_SLIDE) }, -+ { HID_USB_DEVICE(USB_VENDOR_ID_TIVO, USB_DEVICE_ID_TIVO_SLIDE_PRO) }, - { HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED, USB_DEVICE_ID_TOPSEED_CYBERLINK) }, - { HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED2, USB_DEVICE_ID_TOPSEED2_RF_COMBO) }, - { HID_USB_DEVICE(USB_VENDOR_ID_TWINHAN, USB_DEVICE_ID_TWINHAN_IR_REMOTE) }, -diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h -index 2dd6485..c739d3b 100644 ---- a/drivers/hid/hid-ids.h -+++ b/drivers/hid/hid-ids.h -@@ -900,6 +900,7 @@ - #define USB_VENDOR_ID_TIVO 0x150a - #define USB_DEVICE_ID_TIVO_SLIDE_BT 0x1200 - #define USB_DEVICE_ID_TIVO_SLIDE 0x1201 -+#define USB_DEVICE_ID_TIVO_SLIDE_PRO 0x1203 - - #define USB_VENDOR_ID_TOPSEED 0x0766 - #define USB_DEVICE_ID_TOPSEED_CYBERLINK 0x0204 -diff --git a/drivers/hid/hid-tivo.c b/drivers/hid/hid-tivo.c -index d790d8d..d986969 100644 ---- a/drivers/hid/hid-tivo.c -+++ b/drivers/hid/hid-tivo.c -@@ -64,6 +64,7 @@ static const struct hid_device_id tivo_devices[] = { - /* TiVo Slide Bluetooth remote, pairs with a Broadcom dongle */ - { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_TIVO, USB_DEVICE_ID_TIVO_SLIDE_BT) }, - { HID_USB_DEVICE(USB_VENDOR_ID_TIVO, USB_DEVICE_ID_TIVO_SLIDE) }, -+ { HID_USB_DEVICE(USB_VENDOR_ID_TIVO, USB_DEVICE_ID_TIVO_SLIDE_PRO) }, - { } - }; - MODULE_DEVICE_TABLE(hid, tivo_devices); --- -1.9.1 - diff --git a/projects/imx6/patches/linux/3.14-sr/linux-020-gpio-ir-recv-add-timeout-on-idle.patch b/projects/imx6/patches/linux/3.14-sr/linux-020-gpio-ir-recv-add-timeout-on-idle.patch deleted file mode 100644 index 0bcd535813..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-020-gpio-ir-recv-add-timeout-on-idle.patch +++ /dev/null @@ -1,146 +0,0 @@ -From 3fb136f3392dfb2530fd490718b0652f1001b36b Mon Sep 17 00:00:00 2001 -From: Eric Nelson -Date: Wed, 23 Sep 2015 11:07:08 -0300 -Subject: [PATCH] [media] rc: gpio-ir-recv: add timeout on idle - -Many decoders require a trailing space (period without IR illumination) -to be delivered before completing a decode. - -Since the gpio-ir-recv driver only delivers events on gpio transitions, -a single IR symbol (caused by a quick touch on an IR remote) will not -be properly decoded without the use of a timer to flush the tail end -state of the IR receiver. - -This patch initializes and uses a timer and the timeout field of rcdev -to complete the stream and allow decode. - -The timeout can be overridden through the use of the LIRC_SET_REC_TIMEOUT -ioctl. - -Signed-off-by: Eric Nelson -Acked-by: Sean Young -Signed-off-by: Mauro Carvalho Chehab ---- - drivers/media/rc/gpio-ir-recv.c | 22 ++++++++++++++++++++++ - 1 file changed, 22 insertions(+) - -diff --git a/drivers/media/rc/gpio-ir-recv.c b/drivers/media/rc/gpio-ir-recv.c -index 6050de1..5b63b1f 100644 ---- a/drivers/media/rc/gpio-ir-recv.c -+++ b/drivers/media/rc/gpio-ir-recv.c -@@ -30,6 +30,7 @@ struct gpio_rc_dev { - struct rc_dev *rcdev; - int gpio_nr; - bool active_low; -+ struct timer_list flush_timer; - }; - - #ifdef CONFIG_OF -@@ -93,12 +94,26 @@ static irqreturn_t gpio_ir_recv_irq(int irq, void *dev_id) - if (rc < 0) - goto err_get_value; - -+ mod_timer(&gpio_dev->flush_timer, -+ jiffies + nsecs_to_jiffies(gpio_dev->rcdev->timeout)); -+ - ir_raw_event_handle(gpio_dev->rcdev); - - err_get_value: - return IRQ_HANDLED; - } - -+static void flush_timer(unsigned long arg) -+{ -+ struct gpio_rc_dev *gpio_dev = (struct gpio_rc_dev *)arg; -+ DEFINE_IR_RAW_EVENT(ev); -+ -+ ev.timeout = true; -+ ev.duration = gpio_dev->rcdev->timeout; -+ ir_raw_event_store(gpio_dev->rcdev, &ev); -+ ir_raw_event_handle(gpio_dev->rcdev); -+} -+ - static int gpio_ir_recv_probe(struct platform_device *pdev) - { - struct gpio_rc_dev *gpio_dev; -@@ -144,6 +159,9 @@ static int gpio_ir_recv_probe(struct platform_device *pdev) - rcdev->input_id.version = 0x0100; - rcdev->dev.parent = &pdev->dev; - rcdev->driver_name = GPIO_IR_DRIVER_NAME; -+ rcdev->min_timeout = 0; -+ rcdev->timeout = IR_DEFAULT_TIMEOUT; -+ rcdev->max_timeout = 10 * IR_DEFAULT_TIMEOUT; - if (pdata->allowed_protos) - rcdev->allowed_protos = pdata->allowed_protos; - else -@@ -154,6 +172,9 @@ static int gpio_ir_recv_probe(struct platform_device *pdev) - gpio_dev->gpio_nr = pdata->gpio_nr; - gpio_dev->active_low = pdata->active_low; - -+ setup_timer(&gpio_dev->flush_timer, flush_timer, -+ (unsigned long)gpio_dev); -+ - rc = gpio_request(pdata->gpio_nr, "gpio-ir-recv"); - if (rc < 0) - goto err_gpio_request; -@@ -196,6 +217,7 @@ static int gpio_ir_recv_remove(struct platform_device *pdev) - struct gpio_rc_dev *gpio_dev = platform_get_drvdata(pdev); - - free_irq(gpio_to_irq(gpio_dev->gpio_nr), gpio_dev); -+ del_timer_sync(&gpio_dev->flush_timer); - rc_unregister_device(gpio_dev->rcdev); - gpio_free(gpio_dev->gpio_nr); - kfree(gpio_dev); - - -From f3331b8d48456a8113abbaf1985a0ca50e4d17a3 Mon Sep 17 00:00:00 2001 -From: Eric Nelson -Date: Sat, 3 Oct 2015 08:18:50 -0700 -Subject: [PATCH] [media] rc-core: define a default timeout for drivers - -A default timeout value of 125 ms should work for all decoders. - -Declare a constant to help standardize its' use. - -Signed-off-by: Eric Nelson -Signed-off-by: Mauro Carvalho Chehab ---- - include/media/rc-core.h | 1 + - 1 file changed, 1 insertion(+) - ---- a/include/media/rc-core.h -+++ b/include/media/rc-core.h -@@ -194,6 +194,7 @@ static inline void init_ir_raw_event(str - memset(ev, 0, sizeof(*ev)); - } - -+#define IR_DEFAULT_TIMEOUT MS_TO_NS(125) - #define IR_MAX_DURATION 0xFFFFFFFF /* a bit more than 4 seconds */ - #define US_TO_NS(usec) ((usec) * 1000) - #define MS_TO_US(msec) ((msec) * 1000) - - -From e9da7a4b685413c72c12320cb5b03cb5d5cb536a Mon Sep 17 00:00:00 2001 -From: Peter Vicman -Date: Mon, 27 Mar 2017 18:55:18 +0200 -Subject: [PATCH] export symbol nsecs_to_jiffies used by gpio-ir-recv - ---- - kernel/time.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/kernel/time.c b/kernel/time.c -index f60ffd0..d54d6db 100644 ---- a/kernel/time.c -+++ b/kernel/time.c -@@ -704,6 +704,7 @@ unsigned long nsecs_to_jiffies(u64 n) - { - return (unsigned long)nsecs_to_jiffies64(n); - } -+EXPORT_SYMBOL(nsecs_to_jiffies); - - /* - * Add two timespec values and do a safety check for overflow. --- -2.7.4 - diff --git a/projects/imx6/patches/linux/3.14-sr/linux-051-ouya_controller_support.patch b/projects/imx6/patches/linux/3.14-sr/linux-051-ouya_controller_support.patch deleted file mode 100644 index 48b36bdfa7..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-051-ouya_controller_support.patch +++ /dev/null @@ -1,315 +0,0 @@ -diff -Naur linux-3.15-rc6.orig/drivers/hid/hid-core.c linux-3.15-rc6/drivers/hid/hid-core.c ---- linux-3.15-rc6.orig/drivers/hid/hid-core.c 2014-06-06 13:46:49.711845049 -0700 -+++ linux-3.15-rc6/drivers/hid/hid-core.c 2014-06-06 13:50:33.019965538 -0700 -@@ -1848,6 +1848,7 @@ - { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_18) }, - { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_PKB1700) }, - { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_WKB2000) }, -+ { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_OUYA, USB_DEVICE_ID_OUYA_CONTROLLER) }, - { HID_USB_DEVICE(USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE) }, - { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS, USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_1) }, - { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS, USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_2) }, -diff -Naur linux-3.15-rc6.orig/drivers/hid/hid-ids.h linux-3.15-rc6/drivers/hid/hid-ids.h ---- linux-3.15-rc6.orig/drivers/hid/hid-ids.h 2014-06-06 13:46:49.711845049 -0700 -+++ linux-3.15-rc6/drivers/hid/hid-ids.h 2014-06-06 13:51:36.146564828 -0700 -@@ -700,6 +700,9 @@ - #define USB_DEVICE_ID_ORTEK_PKB1700 0x1700 - #define USB_DEVICE_ID_ORTEK_WKB2000 0x2000 - -+#define USB_VENDOR_ID_OUYA 0x2836 -+#define USB_DEVICE_ID_OUYA_CONTROLLER 0x0001 -+ - #define USB_VENDOR_ID_PANASONIC 0x04da - #define USB_DEVICE_ID_PANABOARD_UBT780 0x1044 - #define USB_DEVICE_ID_PANABOARD_UBT880 0x104d -diff -Naur linux-3.15-rc6.orig/drivers/hid/hid-ouya.c linux-3.15-rc6/drivers/hid/hid-ouya.c ---- linux-3.15-rc6.orig/drivers/hid/hid-ouya.c 1969-12-31 16:00:00.000000000 -0800 -+++ linux-3.15-rc6/drivers/hid/hid-ouya.c 2014-06-06 13:52:22.785007560 -0700 -@@ -0,0 +1,260 @@ -+/* -+ * HID driver for OUYA Game Controller(s) -+ * -+ * Copyright (c) 2013 OUYA -+ */ -+ -+#include -+#include -+#include -+#include -+ -+#include "hid-ids.h" -+ -+#define OUYA_TOUCHPAD_FIXUP (1 << 0) -+ -+struct ouya_sc { -+ unsigned long quirks; -+}; -+ -+/* Fixed report descriptor */ -+static __u8 ouya_rdesc_fixed[] = { -+ -+ 0x05, 0x01, /* Usage Page (Desktop), */ -+ 0x09, 0x05, /* Usage (Game Pad), */ -+ -+ 0xA1, 0x01, /* Collection (Application), */ -+ 0x85, 0x07, /* Report ID (7), */ -+ -+ 0xA1, 0x00, /* Collection (Physical), */ -+ 0x09, 0x30, /* Usage (X), */ -+ 0x09, 0x31, /* Usage (Y), */ -+ 0x15, 0x00, /* Logical Minimum (0), */ -+ 0x26, 0xFF, 0x00, /* Logical Maximum (255), */ -+ 0x35, 0x00, /* Physical Minimum (0), */ -+ 0x46, 0xFF, 0x00, /* Physical Maximum (255), */ -+ 0x95, 0x02, /* Report Count (2), */ -+ 0x75, 0x08, /* Report Size (8), */ -+ 0x81, 0x02, /* Input (Variable), */ -+ 0xC0, /* End Collection, */ -+ -+ 0xA1, 0x00, /* Collection (Physical), */ -+ 0x09, 0x33, /* Usage (Rx), */ -+ 0x09, 0x34, /* Usage (Ry), */ -+ 0x15, 0x00, /* Logical Minimum (0), */ -+ 0x26, 0xFF, 0x00, /* Logical Maximum (255), */ -+ 0x35, 0x00, /* Physical Minimum (0), */ -+ 0x46, 0xFF, 0x00, /* Physical Maximum (255), */ -+ 0x95, 0x02, /* Report Count (2), */ -+ 0x75, 0x08, /* Report Size (8), */ -+ 0x81, 0x02, /* Input (Variable), */ -+ 0xC0, /* End Collection, */ -+ -+ 0xA1, 0x00, /* Collection (Physical), */ -+ 0x09, 0x32, /* Usage (Z), */ -+ 0x15, 0x00, /* Logical Minimum (0), */ -+ 0x26, 0xFF, 0x00, /* Logical Maximum (255), */ -+ 0x35, 0x00, /* Physical Minimum (0), */ -+ 0x46, 0xFF, 0x00, /* Physical Maximum (255), */ -+ 0x95, 0x01, /* Report Count (1), */ -+ 0x75, 0x08, /* Report Size (8), */ -+ 0x81, 0x02, /* Input (Variable), */ -+ 0xC0, /* End Collection, */ -+ -+ 0xA1, 0x00, /* Collection (Physical), */ -+ 0x09, 0x35, /* Usage (Rz), */ -+ 0x15, 0x00, /* Logical Minimum (0), */ -+ 0x26, 0xFF, 0x00, /* Logical Maximum (255), */ -+ 0x35, 0x00, /* Physical Minimum (0), */ -+ 0x46, 0xFF, 0x00, /* Physical Maximum (255), */ -+ 0x95, 0x01, /* Report Count (1), */ -+ 0x75, 0x08, /* Report Size (8), */ -+ 0x81, 0x02, /* Input (Variable), */ -+ 0xC0, /* End Collection, */ -+ -+ 0x05, 0x09, /* Usage Page (Button), */ -+ 0x19, 0x01, /* Usage Minimum (01h), */ -+ 0x29, 0x10, /* Usage Maximum (10h), */ -+ 0x95, 0x10, /* Report Count (16), */ -+ 0x75, 0x01, /* Report Size (1), */ -+ 0x81, 0x02, /* Input (Variable), */ -+ -+ /* ORIGINAL REPORT DESCRIPTOR FOR TOUCHPAD INPUT */ -+ /* 06 00 ff a1 02 09 02 15 00 26 ff 00 35 00 46 ff 00 95 03 75 08 81 02 c0 */ -+ -+ 0x06, 0x00, 0xFF, /* Usage Page (Custom), */ -+ 0x09, 0x02, /* Usage (Mouse), */ -+ 0x09, 0x01, /* Usage (Pointer), */ -+ 0xA1, 0x00, /* Collection (Physical), */ -+ 0x05, 0x09, /* Usage Page (Button), */ -+ 0x19, 0x01, /* Usage Minimum (01h), */ -+ 0x29, 0x03, /* Usage Maximum (03h), */ -+ 0x15, 0x00, /* Logical Minimum (0), */ -+ 0x25, 0x01, /* Logical Maximum (1), */ -+ 0x95, 0x03, /* Report Count (3), */ -+ 0x75, 0x01, /* Report Size (1), */ -+ 0x81, 0x02, /* Input (Variable), */ -+ 0x95, 0x01, /* Report Count (1), */ -+ 0x75, 0x05, /* Report Size (5), */ -+ 0x81, 0x01, /* Input (Constant), */ -+ 0x05, 0x01, /* Usage Page (Desktop), */ -+ 0x09, 0x30, /* Usage (X), */ -+ 0x09, 0x31, /* Usage (Y), */ -+ 0x15, 0x81, /* Logical Minimum (-127), */ -+ 0x25, 0x7f, /* Logical Maximum (127), */ -+ 0x95, 0x02, /* Report Count (2), */ -+ 0x75, 0x08, /* Report Size (8), */ -+ 0x81, 0x06, /* Input (Relative), */ -+ 0xC0, /* End Collection, */ -+ -+ 0x06, 0x00, 0xFF, /* Usage Page (Custom), */ -+ 0xA1, 0x02, /* Collection (Logical), */ -+ 0x75, 0x08, /* Report Size (8), */ -+ 0x95, 0x07, /* Report Count (7), */ -+ 0x46, 0xFF, 0x00, /* Physical Maximum (255), */ -+ 0x26, 0xFF, 0x00, /* Logical Maximum (255), */ -+ 0x09, 0x01, /* Usage (Pointer), */ -+ 0x91, 0x02, /* Output (Variable), */ -+ 0xC0, /* End Collection, */ -+ -+ 0xC0, /* End Collection */ -+ -+ -+ 0x06, 0x00, 0xFF, /* Usage Page (Custom), */ -+ 0x05, 0x0C, /* Usage Page (Consumer), */ -+ 0x09, 0x01, /* Usage (Consumer Control), */ -+ -+ 0xA1, 0x01, /* Collection (Application), */ -+ 0x85, 0x03, /* Report ID (3), */ -+ 0x05, 0x01, /* Usage Page (Desktop), */ -+ 0x09, 0x06, /* Usage (Keyboard), */ -+ 0xA1, 0x02, /* Collection (Logical), */ -+ 0x05, 0x06, /* Usage Page (Generic), */ -+ 0x09, 0x20, /* Usage (Battery Strgth), */ -+ 0x15, 0x00, /* Logical Minimum (0), */ -+ 0x26, 0xFF, 0x00, /* Logical Maximum (255), */ -+ 0x75, 0x08, /* Report Size (8), */ -+ 0x95, 0x01, /* Report Count (1), */ -+ 0x81, 0x02, /* Input (Variable), */ -+ 0x06, 0xBC, 0xFF, /* Usage Page (Custom), */ -+ -+ 0x0A, 0xAD, 0xBD, /* UNKNOWN */ -+ -+ 0x75, 0x08, /* Report Size (8), */ -+ 0x95, 0x06, /* Report Count (6), */ -+ 0x81, 0x02, /* Input (Variable), */ -+ 0xC0, /* End Collection, */ -+ -+ 0xC0, /* End Collection */ -+ -+ 0x00 -+}; -+ -+static __u8 *ouya_report_fixup(struct hid_device *hdev, __u8 *rdesc, -+ unsigned int *rsize) -+{ -+ struct ouya_sc *sc = hid_get_drvdata(hdev); -+ -+ if (sc->quirks & OUYA_TOUCHPAD_FIXUP) { -+ rdesc = ouya_rdesc_fixed; -+ *rsize = sizeof(ouya_rdesc_fixed); -+ } -+ return rdesc; -+} -+ -+static int ouya_input_mapping(struct hid_device *hdev, struct hid_input *hi, -+ struct hid_field *field, struct hid_usage *usage, -+ unsigned long **bit, int *max) -+{ -+ struct ouya_sc *sc = hid_get_drvdata(hdev); -+ -+ if (!(sc->quirks & OUYA_TOUCHPAD_FIXUP)) { -+ return 0; -+ } -+ -+ if ((usage->hid & 0x90000) == 0x90000 && -+ (field->physical & 0xff000000) == 0xff000000 && -+ usage->collection_index == 5 && -+ field->report_count == 3) { -+ -+ hid_map_usage(hi, usage, bit, max, EV_KEY, BTN_MOUSE + (usage->hid - 0x90001)); -+ -+ return 1; -+ } -+ -+ return 0; -+} -+ -+static int ouya_probe(struct hid_device *hdev, const struct hid_device_id *id) -+{ -+ int ret; -+ struct ouya_sc *sc; -+ -+ sc = kzalloc(sizeof(*sc), GFP_KERNEL); -+ if (sc == NULL) { -+ hid_err(hdev, "can't alloc ouya descriptor\n"); -+ return -ENOMEM; -+ } -+ -+ if(((hdev->version & 0xff00) == 0x0100 && (hdev->version & 0xff) >= 0x04) || -+ ((hdev->version & 0xff00) == 0xe100 && (hdev->version & 0xff) >= 0x3a)) { -+ hid_info(hdev, "ouya controller - new version\n"); -+ sc->quirks = OUYA_TOUCHPAD_FIXUP; -+ } else { -+ sc->quirks = 0; -+ } -+ hid_set_drvdata(hdev, sc); -+ -+ ret = hid_parse(hdev); -+ if (ret) { -+ hid_err(hdev, "parse failed\n"); -+ goto err_free; -+ } -+ -+ ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT | -+ HID_CONNECT_HIDDEV_FORCE); -+ if (ret) { -+ hid_err(hdev, "hw start failed\n"); -+ goto err_free; -+ } -+ -+ return 0; -+ -+err_free: -+ kfree(sc); -+ return ret; -+} -+ -+static void ouya_remove(struct hid_device *hdev) -+{ -+ hid_hw_stop(hdev); -+ kfree(hid_get_drvdata(hdev)); -+} -+ -+static const struct hid_device_id ouya_devices[] = { -+ { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_OUYA, USB_DEVICE_ID_OUYA_CONTROLLER) }, -+ { } -+}; -+MODULE_DEVICE_TABLE(hid, ouya_devices); -+ -+static struct hid_driver ouya_driver = { -+ .name = "ouya", -+ .id_table = ouya_devices, -+ .probe = ouya_probe, -+ .remove = ouya_remove, -+ .input_mapping = ouya_input_mapping, -+ .report_fixup = ouya_report_fixup -+}; -+ -+static int __init ouya_init(void) -+{ -+ return hid_register_driver(&ouya_driver); -+} -+ -+static void __exit ouya_exit(void) -+{ -+ hid_unregister_driver(&ouya_driver); -+} -+ -+module_init(ouya_init); -+module_exit(ouya_exit); -diff -Naur linux-3.15-rc6.orig/drivers/hid/Kconfig linux-3.15-rc6/drivers/hid/Kconfig ---- linux-3.15-rc6.orig/drivers/hid/Kconfig 2014-06-06 13:46:49.710845040 -0700 -+++ linux-3.15-rc6/drivers/hid/Kconfig 2014-06-06 13:48:41.674908325 -0700 -@@ -499,6 +499,12 @@ - - Ortek WKB-2000 - - Skycable wireless presenter - -+config HID_OUYA -+ tristate "OUYA Game Controller" -+ depends on USB_HID -+ ---help--- -+ Support for OUYA Game Controller. -+ - config HID_PANTHERLORD - tristate "Pantherlord/GreenAsia game controller" - depends on HID -diff -Naur linux-3.15-rc6.orig/drivers/hid/Makefile linux-3.15-rc6/drivers/hid/Makefile ---- linux-3.15-rc6.orig/drivers/hid/Makefile 2014-06-06 13:46:49.710845040 -0700 -+++ linux-3.15-rc6/drivers/hid/Makefile 2014-06-06 13:49:23.951309760 -0700 -@@ -68,6 +68,7 @@ - obj-$(CONFIG_HID_MULTITOUCH) += hid-multitouch.o - obj-$(CONFIG_HID_NTRIG) += hid-ntrig.o - obj-$(CONFIG_HID_ORTEK) += hid-ortek.o -+obj-$(CONFIG_HID_OUYA) += hid-ouya.o - obj-$(CONFIG_HID_PRODIKEYS) += hid-prodikeys.o - obj-$(CONFIG_HID_PANTHERLORD) += hid-pl.o - obj-$(CONFIG_HID_PETALYNX) += hid-petalynx.o diff --git a/projects/imx6/patches/linux/3.14-sr/linux-052-XBOX_remote_support.patch b/projects/imx6/patches/linux/3.14-sr/linux-052-XBOX_remote_support.patch deleted file mode 100644 index 6b43f9b315..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-052-XBOX_remote_support.patch +++ /dev/null @@ -1,1029 +0,0 @@ -diff -Naur linux-3.9.4/drivers/staging/media/lirc/Kconfig linux-3.9.4.patch/drivers/staging/media/lirc/Kconfig ---- linux-3.9.4/drivers/staging/media/lirc/Kconfig 2013-05-24 20:45:59.000000000 +0200 -+++ linux-3.9.4.patch/drivers/staging/media/lirc/Kconfig 2013-05-30 18:18:57.238957100 +0200 -@@ -63,10 +63,17 @@ - help - Driver for the SIR IrDA port - -+config LIRC_XBOX -+ tristate "XBOX USB IR Remote" -+ depends on LIRC && USB -+ help -+ Driver for the Microsoft XBOX USB IR Remote -+ - config LIRC_ZILOG - tristate "Zilog/Hauppauge IR Transmitter" - depends on LIRC && I2C - help - Driver for the Zilog/Hauppauge IR Transmitter, found on - PVR-150/500, HVR-1200/1250/1700/1800, HD-PVR and other cards -+ - endif -diff -Naur linux-3.9.4/drivers/staging/media/lirc/lirc_xbox.c linux-3.9.4.patch/drivers/staging/media/lirc/lirc_xbox.c ---- linux-3.9.4/drivers/staging/media/lirc/lirc_xbox.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-3.9.4.patch/drivers/staging/media/lirc/lirc_xbox.c 2013-05-30 18:40:22.523775446 +0200 -@@ -0,0 +1,995 @@ -+/* -+ * lirc_xbox - USB remote support for LIRC -+ * (supports Microsoft XBOX DVD Dongle) -+ * -+ * Copyright (C) 2003-2004 Paul Miller -+ * -+ * This driver was derived from: -+ * Vladimir Dergachev 's 2002 -+ * "USB ATI Remote support" (input device) -+ * Adrian Dewhurst 's 2002 -+ * "USB StreamZap remote driver" (LIRC) -+ * Artur Lipowski 's 2002 -+ * "lirc_dev" and "lirc_gpio" LIRC modules -+ * Michael Wojciechowski -+ * initial xbox support -+ * Vassilis Virvilis 2006 -+ * reworked the patch for lirc submission -+ * Paul Miller's 2004 -+ * lirc_atiusb - removed all ati remote support -+ * $Id: lirc_xbox.c,v 1.88 2011/06/03 11:11:11 jmartin Exp $ -+ */ -+ -+/* -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -+ */ -+ -+#include -+ -+//#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 33) -+//#include -+//#endif -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+//#include "drivers/kcompat.h" -+//#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35) -+#include -+#include -+//#else -+//#include "drivers/lirc.h" -+//#include "drivers/lirc_dev/lirc_dev.h" -+//#endif -+ -+#define DRIVER_VERSION "$Revision: 0.01 $" -+#define DRIVER_AUTHOR "Jason Martin " -+#define DRIVER_DESC "XBOX DVD Dongle USB remote driver for LIRC" -+#define DRIVER_NAME "lirc_xbox" -+ -+#define CODE_LENGTH 6 -+#define CODE_MIN_LENGTH 6 -+#define DECODE_LENGTH 1 -+ -+#ifndef URB_ASYNC_UNLINK -+#define URB_ASYNC_UNLINK 0 -+#endif -+ -+/* module parameters */ -+#ifdef CONFIG_USB_DEBUG -+static int debug = 1; -+#else -+static int debug; -+#endif -+ -+#define dprintk(fmt, args...) \ -+ do { \ -+ if (debug) \ -+ printk(KERN_DEBUG fmt, ## args); \ -+ } while (0) -+ -+/* -+ * USB_BUFF_LEN must be the maximum value of the code_length array. -+ * It is used for static arrays. -+ */ -+#define USB_BUFF_LEN 6 -+ -+static int mask = 0xFFFF; /* channel acceptance bit mask */ -+static int unique; /* enable channel-specific codes */ -+static int repeat = 10; /* repeat time in 1/100 sec */ -+static unsigned long repeat_jiffies; /* repeat timeout */ -+ -+/* get hi and low bytes of a 16-bits int */ -+#define HI(a) ((unsigned char)((a) >> 8)) -+#define LO(a) ((unsigned char)((a) & 0xff)) -+ -+/* general constants */ -+#define SEND_FLAG_IN_PROGRESS 1 -+#define SEND_FLAG_COMPLETE 2 -+#define FREE_ALL 0xFF -+ -+/* endpoints */ -+#define EP_KEYS 0 -+#define EP_MOUSE 1 -+#define EP_MOUSE_ADDR 0x81 -+#define EP_KEYS_ADDR 0x82 -+ -+/* USB vendor ids for XBOX DVD Dongles */ -+#define VENDOR_MS1 0x040b -+#define VENDOR_MS2 0x045e -+#define VENDOR_MS3 0xFFFF -+ -+static struct usb_device_id usb_remote_table[] = { -+ /* Gamester Xbox DVD Movie Playback Kit IR */ -+ { USB_DEVICE(VENDOR_MS1, 0x6521) }, -+ -+ /* Microsoft Xbox DVD Movie Playback Kit IR */ -+ { USB_DEVICE(VENDOR_MS2, 0x0284) }, -+ -+ /* -+ * Some Chinese manufacturer -- conflicts with the joystick from the -+ * same manufacturer -+ */ -+ { USB_DEVICE(VENDOR_MS3, 0xFFFF) }, -+ -+ /* Terminating entry */ -+ { } -+}; -+ -+/* init strings */ -+#define USB_OUTLEN 7 -+ -+static char init1[] = {0x01, 0x00, 0x20, 0x14}; -+static char init2[] = {0x01, 0x00, 0x20, 0x14, 0x20, 0x20, 0x20}; -+ -+struct in_endpt { -+ /* inner link in list of endpoints for the remote specified by ir */ -+ struct list_head iep_list_link; -+ struct xbox_dev *ir; -+ struct urb *urb; -+ struct usb_endpoint_descriptor *ep; -+ -+ /* buffers and dma */ -+ unsigned char *buf; -+ unsigned int len; -+ dma_addr_t dma; -+ -+ /* handle repeats */ -+ unsigned char old[USB_BUFF_LEN]; -+ unsigned long old_jiffies; -+}; -+ -+struct out_endpt { -+ struct xbox_dev *ir; -+ struct urb *urb; -+ struct usb_endpoint_descriptor *ep; -+ -+ /* buffers and dma */ -+ unsigned char *buf; -+ dma_addr_t dma; -+ -+ /* handle sending (init strings) */ -+ int send_flags; -+ wait_queue_head_t wait; -+}; -+ -+ -+/* data structure for each usb remote */ -+struct xbox_dev { -+ /* inner link in list of all remotes managed by this module */ -+ struct list_head remote_list_link; -+ /* Number of usb interfaces associated with this device */ -+ int dev_refcount; -+ -+ /* usb */ -+ struct usb_device *usbdev; -+ /* Head link to list of all inbound endpoints in this remote */ -+ struct list_head iep_listhead; -+ struct out_endpt *out_init; -+ int devnum; -+ -+ /* lirc */ -+ struct lirc_driver *d; -+ int connected; -+ -+ /* locking */ -+ struct mutex lock; -+}; -+ -+/* list of all registered devices via the remote_list_link in xbox_dev */ -+static struct list_head remote_list; -+ -+/* -+ * Convenience macros to retrieve a pointer to the surrounding struct from -+ * the given list_head reference within, pointed at by link. -+ */ -+#define get_iep_from_link(link) \ -+ list_entry((link), struct in_endpt, iep_list_link); -+#define get_irctl_from_link(link) \ -+ list_entry((link), struct xbox_dev, remote_list_link); -+ -+/* send packet - used to initialize remote */ -+static void send_packet(struct out_endpt *oep, u16 cmd, unsigned char *data) -+{ -+ struct xbox_dev *ir = oep->ir; -+ DECLARE_WAITQUEUE(wait, current); -+ int timeout = HZ; /* 1 second */ -+ unsigned char buf[USB_OUTLEN]; -+ -+ dprintk(DRIVER_NAME "[%d]: send called (%#x)\n", ir->devnum, cmd); -+ -+ mutex_lock(&ir->lock); -+ oep->urb->transfer_buffer_length = LO(cmd) + 1; -+ oep->urb->dev = oep->ir->usbdev; -+ oep->send_flags = SEND_FLAG_IN_PROGRESS; -+ -+ memcpy(buf+1, data, LO(cmd)); -+ buf[0] = HI(cmd); -+ memcpy(oep->buf, buf, LO(cmd)+1); -+ -+ set_current_state(TASK_INTERRUPTIBLE); -+ add_wait_queue(&oep->wait, &wait); -+ -+ if (usb_submit_urb(oep->urb, GFP_ATOMIC)) { -+ set_current_state(TASK_RUNNING); -+ remove_wait_queue(&oep->wait, &wait); -+ mutex_unlock(&ir->lock); -+ return; -+ } -+ mutex_unlock(&ir->lock); -+ -+ while (timeout && (oep->urb->status == -EINPROGRESS) -+ && !(oep->send_flags & SEND_FLAG_COMPLETE)) { -+ timeout = schedule_timeout(timeout); -+ rmb(); -+ } -+ -+ dprintk(DRIVER_NAME "[%d]: send complete (%#x)\n", ir->devnum, cmd); -+ -+ set_current_state(TASK_RUNNING); -+ remove_wait_queue(&oep->wait, &wait); -+ oep->urb->transfer_flags |= URB_ASYNC_UNLINK; -+ usb_unlink_urb(oep->urb); -+} -+ -+static int unregister_from_lirc(struct xbox_dev *ir) -+{ -+ struct lirc_driver *d = ir->d; -+ int devnum; -+ -+ devnum = ir->devnum; -+ dprintk(DRIVER_NAME "[%d]: unregister from lirc called\n", devnum); -+ -+ lirc_unregister_driver(d->minor); -+ -+ printk(DRIVER_NAME "[%d]: usb remote disconnected\n", devnum); -+ return 0; -+} -+ -+static int set_use_inc(void *data) -+{ -+ struct xbox_dev *ir = data; -+ struct list_head *pos, *n; -+ struct in_endpt *iep; -+ int rtn; -+ -+ if (!ir) { -+ printk(DRIVER_NAME "[?]: set_use_inc called with no context\n"); -+ return -EIO; -+ } -+ dprintk(DRIVER_NAME "[%d]: set use inc\n", ir->devnum); -+ -+ mutex_lock(&ir->lock); -+ if (!ir->connected) { -+ if (!ir->usbdev) { -+ mutex_unlock(&ir->lock); -+ dprintk(DRIVER_NAME "[%d]: !ir->usbdev\n", ir->devnum); -+ return -ENOENT; -+ } -+ -+ /* Iterate through the inbound endpoints */ -+ list_for_each_safe(pos, n, &ir->iep_listhead) { -+ /* extract the current in_endpt */ -+ iep = get_iep_from_link(pos); -+ iep->urb->dev = ir->usbdev; -+ dprintk(DRIVER_NAME "[%d]: linking iep 0x%02x (%p)\n", -+ ir->devnum, iep->ep->bEndpointAddress, iep); -+ rtn = usb_submit_urb(iep->urb, GFP_ATOMIC); -+ if (rtn) { -+ printk(DRIVER_NAME "[%d]: open result = %d " -+ "error submitting urb\n", -+ ir->devnum, rtn); -+ mutex_unlock(&ir->lock); -+ return -EIO; -+ } -+ } -+ ir->connected = 1; -+ } -+ mutex_unlock(&ir->lock); -+ -+ return 0; -+} -+ -+static void set_use_dec(void *data) -+{ -+ struct xbox_dev *ir = data; -+ struct list_head *pos, *n; -+ struct in_endpt *iep; -+ -+ if (!ir) { -+ printk(DRIVER_NAME "[?]: set_use_dec called with no context\n"); -+ return; -+ } -+ dprintk(DRIVER_NAME "[%d]: set use dec\n", ir->devnum); -+ -+ mutex_lock(&ir->lock); -+ if (ir->connected) { -+ /* Free inbound usb urbs */ -+ list_for_each_safe(pos, n, &ir->iep_listhead) { -+ iep = get_iep_from_link(pos); -+ dprintk(DRIVER_NAME "[%d]: unlinking iep 0x%02x (%p)\n", -+ ir->devnum, iep->ep->bEndpointAddress, iep); -+ usb_kill_urb(iep->urb); -+ } -+ ir->connected = 0; -+ } -+ mutex_unlock(&ir->lock); -+} -+ -+static void print_data(struct in_endpt *iep, char *buf, int len) -+{ -+ const int clen = CODE_LENGTH; -+ char codes[clen * 3 + 1]; -+ int i; -+ -+ if (len <= 0) -+ return; -+ -+ for (i = 0; i < len && i < clen; i++) -+ snprintf(codes+i*3, 4, "%02x ", buf[i] & 0xFF); -+ printk(DRIVER_NAME "[%d]: data received %s (ep=0x%x length=%d)\n", -+ iep->ir->devnum, codes, iep->ep->bEndpointAddress, len); -+} -+ -+static int code_check_xbox(struct in_endpt *iep, int len) -+{ -+ // struct xbox_dev *ir = iep->ir; -+ const int clen = CODE_LENGTH; -+ -+ if (len != clen) { -+ dprintk(DRIVER_NAME ": We got %d instead of %d bytes from xbox " -+ "ir.. ?\n", len, clen); -+ return -1; -+ } -+ -+ /* check for repeats */ -+ if (memcmp(iep->old, iep->buf, len) == 0) { -+ if (iep->old_jiffies + repeat_jiffies > jiffies) -+ return -1; -+ } else { -+ /* -+ * the third byte of xbox ir packet seems to contain key info -+ * the last two bytes are.. some kind of clock? -+ */ -+ iep->buf[0] = iep->buf[2]; -+ memset(iep->buf + 1, 0, len - 1); -+ memcpy(iep->old, iep->buf, len); -+ } -+ iep->old_jiffies = jiffies; -+ -+ return 0; -+} -+ -+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) -+static void usb_remote_recv(struct urb *urb, struct pt_regs *regs) -+#else -+static void usb_remote_recv(struct urb *urb) -+#endif -+{ -+ struct in_endpt *iep; -+ int len, result = -1; -+ -+ if (!urb) -+ return; -+ iep = urb->context; -+ if (!iep) { -+ urb->transfer_flags |= URB_ASYNC_UNLINK; -+ usb_unlink_urb(urb); -+ return; -+ } -+ if (!iep->ir->usbdev) -+ return; -+ -+ len = urb->actual_length; -+ if (debug) -+ print_data(iep, urb->transfer_buffer, len); -+ -+ switch (urb->status) { -+ -+ case 0: -+ result = code_check_xbox(iep, len); -+ -+ if (result < 0) -+ break; -+ -+ lirc_buffer_write(iep->ir->d->rbuf, iep->buf); -+ wake_up(&iep->ir->d->rbuf->wait_poll); -+ break; -+ -+ case -ECONNRESET: -+ case -ENOENT: -+ case -ESHUTDOWN: -+ urb->transfer_flags |= URB_ASYNC_UNLINK; -+ usb_unlink_urb(urb); -+ return; -+ -+ case -EPIPE: -+ default: -+ break; -+ } -+ -+ usb_submit_urb(urb, GFP_ATOMIC); -+} -+ -+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) -+static void usb_remote_send(struct urb *urb, struct pt_regs *regs) -+#else -+static void usb_remote_send(struct urb *urb) -+#endif -+{ -+ struct out_endpt *oep; -+ -+ if (!urb) -+ return; -+ oep = urb->context; -+ if (!oep) { -+ urb->transfer_flags |= URB_ASYNC_UNLINK; -+ usb_unlink_urb(urb); -+ return; -+ } -+ if (!oep->ir->usbdev) -+ return; -+ -+ dprintk(DRIVER_NAME "[%d]: usb out called\n", oep->ir->devnum); -+ -+ if (urb->status) -+ return; -+ -+ oep->send_flags |= SEND_FLAG_COMPLETE; -+ wmb(); -+ if (waitqueue_active(&oep->wait)) -+ wake_up(&oep->wait); -+} -+ -+ -+/* -+ * Initialization and removal -+ */ -+ -+/* -+ * Free iep according to mem_failure which specifies a checkpoint into the -+ * initialization sequence for rollback recovery. -+ */ -+static void free_in_endpt(struct in_endpt *iep, int mem_failure) -+{ -+ struct xbox_dev *ir; -+ dprintk(DRIVER_NAME ": free_in_endpt(%p, %d)\n", iep, mem_failure); -+ if (!iep) -+ return; -+ -+ ir = iep->ir; -+ if (!ir) { -+ dprintk(DRIVER_NAME ": free_in_endpt: WARNING! null ir\n"); -+ return; -+ } -+ mutex_lock(&ir->lock); -+ switch (mem_failure) { -+ case FREE_ALL: -+ case 5: -+ list_del(&iep->iep_list_link); -+ dprintk(DRIVER_NAME "[%d]: free_in_endpt removing ep=0x%0x " -+ "from list\n", ir->devnum, iep->ep->bEndpointAddress); -+ case 4: -+ if (iep->urb) { -+ iep->urb->transfer_flags |= URB_ASYNC_UNLINK; -+ usb_unlink_urb(iep->urb); -+ usb_free_urb(iep->urb); -+ iep->urb = 0; -+ } else -+ dprintk(DRIVER_NAME "[%d]: free_in_endpt null urb!\n", -+ ir->devnum); -+ case 3: -+ usb_free_coherent(iep->ir->usbdev, iep->len, iep->buf, iep->dma); -+ iep->buf = 0; -+ case 2: -+ kfree(iep); -+ } -+ mutex_unlock(&ir->lock); -+} -+ -+/* -+ * Construct a new inbound endpoint for this remote, and add it to the list of -+ * in_epts in ir. -+ */ -+static struct in_endpt *new_in_endpt(struct xbox_dev *ir, -+ struct usb_endpoint_descriptor *ep) -+{ -+ struct usb_device *dev = ir->usbdev; -+ struct in_endpt *iep; -+ int pipe, maxp, len, addr; -+ int mem_failure; -+ -+ addr = ep->bEndpointAddress; -+ pipe = usb_rcvintpipe(dev, addr); -+ maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe)); -+ -+/* len = (maxp > USB_BUFLEN) ? USB_BUFLEN : maxp; -+ * len -= (len % CODE_LENGTH); */ -+ len = CODE_LENGTH; -+ -+ dprintk(DRIVER_NAME "[%d]: acceptable inbound endpoint (0x%x) found " -+ "(maxp=%d len=%d)\n", ir->devnum, addr, maxp, len); -+ -+ mem_failure = 0; -+ iep = kzalloc(sizeof(*iep), GFP_KERNEL); -+ if (!iep) { -+ mem_failure = 1; -+ goto new_in_endpt_failure_check; -+ } -+ iep->ir = ir; -+ iep->ep = ep; -+ iep->len = len; -+ -+ iep->buf = usb_alloc_coherent(dev, len, GFP_ATOMIC, &iep->dma); -+ if (!iep->buf) { -+ mem_failure = 2; -+ goto new_in_endpt_failure_check; -+ } -+ -+ iep->urb = usb_alloc_urb(0, GFP_KERNEL); -+ if (!iep->urb) -+ mem_failure = 3; -+ -+new_in_endpt_failure_check: -+ -+ if (mem_failure) { -+ free_in_endpt(iep, mem_failure); -+ printk(DRIVER_NAME "[%d]: ep=0x%x out of memory (code=%d)\n", -+ ir->devnum, addr, mem_failure); -+ return NULL; -+ } -+ list_add_tail(&iep->iep_list_link, &ir->iep_listhead); -+ dprintk(DRIVER_NAME "[%d]: adding ep=0x%0x to list\n", -+ ir->devnum, iep->ep->bEndpointAddress); -+ return iep; -+} -+ -+static void free_out_endpt(struct out_endpt *oep, int mem_failure) -+{ -+ struct xbox_dev *ir; -+ dprintk(DRIVER_NAME ": free_out_endpt(%p, %d)\n", oep, mem_failure); -+ if (!oep) -+ return; -+ -+ wake_up_all(&oep->wait); -+ -+ ir = oep->ir; -+ if (!ir) { -+ dprintk(DRIVER_NAME ": free_out_endpt: WARNING! null ir\n"); -+ return; -+ } -+ mutex_lock(&ir->lock); -+ switch (mem_failure) { -+ case FREE_ALL: -+ case 4: -+ if (oep->urb) { -+ oep->urb->transfer_flags |= URB_ASYNC_UNLINK; -+ usb_unlink_urb(oep->urb); -+ usb_free_urb(oep->urb); -+ oep->urb = 0; -+ } else { -+ dprintk(DRIVER_NAME "[%d]: free_out_endpt: null urb!\n", -+ ir->devnum); -+ } -+ case 3: -+ usb_free_coherent(oep->ir->usbdev, USB_OUTLEN, -+ oep->buf, oep->dma); -+ oep->buf = 0; -+ case 2: -+ kfree(oep); -+ } -+ mutex_unlock(&ir->lock); -+} -+ -+static struct out_endpt *new_out_endpt(struct xbox_dev *ir, -+ struct usb_endpoint_descriptor *ep) -+{ -+ struct usb_device *dev = ir->usbdev; -+ struct out_endpt *oep; -+ int mem_failure; -+ -+ dprintk(DRIVER_NAME "[%d]: acceptable outbound endpoint (0x%x) found\n", -+ ir->devnum, ep->bEndpointAddress); -+ -+ mem_failure = 0; -+ oep = kzalloc(sizeof(*oep), GFP_KERNEL); -+ if (!oep) -+ mem_failure = 1; -+ else { -+ oep->ir = ir; -+ oep->ep = ep; -+ init_waitqueue_head(&oep->wait); -+ -+ oep->buf = usb_alloc_coherent(dev, USB_OUTLEN, -+ GFP_ATOMIC, &oep->dma); -+ if (!oep->buf) -+ mem_failure = 2; -+ else { -+ oep->urb = usb_alloc_urb(0, GFP_KERNEL); -+ if (!oep->urb) -+ mem_failure = 3; -+ } -+ } -+ if (mem_failure) { -+ free_out_endpt(oep, mem_failure); -+ printk(DRIVER_NAME "[%d]: ep=0x%x out of memory (code=%d)\n", -+ ir->devnum, ep->bEndpointAddress, mem_failure); -+ return NULL; -+ } -+ return oep; -+} -+ -+static void free_irctl(struct xbox_dev *ir, int mem_failure) -+{ -+ struct list_head *pos, *n; -+ struct in_endpt *in; -+ dprintk(DRIVER_NAME ": free_irctl(%p, %d)\n", ir, mem_failure); -+ -+ if (!ir) -+ return; -+ -+ list_for_each_safe(pos, n, &ir->iep_listhead) { -+ in = get_iep_from_link(pos); -+ free_in_endpt(in, FREE_ALL); -+ } -+ if (ir->out_init) { -+ free_out_endpt(ir->out_init, FREE_ALL); -+ ir->out_init = NULL; -+ } -+ -+ mutex_lock(&ir->lock); -+ switch (mem_failure) { -+ case FREE_ALL: -+ case 6: -+ if (!--ir->dev_refcount) { -+ list_del(&ir->remote_list_link); -+ dprintk(DRIVER_NAME "[%d]: free_irctl: removing " -+ "remote from list\n", ir->devnum); -+ } else { -+ dprintk(DRIVER_NAME "[%d]: free_irctl: refcount at %d," -+ "aborting free_irctl\n", -+ ir->devnum, ir->dev_refcount); -+ mutex_unlock(&ir->lock); -+ return; -+ } -+ case 5: -+ case 4: -+ case 3: -+ if (ir->d) { -+ switch (mem_failure) { -+ case 5: -+ lirc_buffer_free(ir->d->rbuf); -+ case 4: -+ kfree(ir->d->rbuf); -+ case 3: -+ kfree(ir->d); -+ } -+ } else -+ printk(DRIVER_NAME "[%d]: ir->d is a null pointer!\n", -+ ir->devnum); -+ case 2: -+ mutex_unlock(&ir->lock); -+ kfree(ir); -+ return; -+ } -+ mutex_unlock(&ir->lock); -+} -+ -+static struct xbox_dev *new_irctl(struct usb_interface *intf) -+{ -+ struct usb_device *dev = interface_to_usbdev(intf); -+ struct xbox_dev *ir; -+ struct lirc_driver *driver; -+ int devnum, dclen; -+ int mem_failure; -+ -+ devnum = dev->devnum; -+ -+ dprintk(DRIVER_NAME "[%d]: remote type = XBOX DVD Dongle\n", devnum); -+ -+ mem_failure = 0; -+ ir = kzalloc(sizeof(*ir), GFP_KERNEL); -+ if (!ir) { -+ mem_failure = 1; -+ goto new_irctl_failure_check; -+ } -+ -+ dclen = DECODE_LENGTH; -+ -+ /* -+ * add this infrared remote struct to remote_list, keeping track -+ * of the number of drivers registered. -+ */ -+ dprintk(DRIVER_NAME "[%d]: adding remote to list\n", devnum); -+ list_add_tail(&ir->remote_list_link, &remote_list); -+ ir->dev_refcount = 1; -+ -+ driver = kzalloc(sizeof(*driver), GFP_KERNEL); -+ if (!driver) { -+ mem_failure = 2; -+ goto new_irctl_failure_check; -+ } -+ -+ ir->d = driver; -+ driver->rbuf = kmalloc(sizeof(*(driver->rbuf)), GFP_KERNEL); -+ if (!driver->rbuf) { -+ mem_failure = 3; -+ goto new_irctl_failure_check; -+ } -+ -+ if (lirc_buffer_init(driver->rbuf, dclen, 2)) { -+ mem_failure = 4; -+ goto new_irctl_failure_check; -+ } -+ -+ strcpy(driver->name, DRIVER_NAME " "); -+ driver->minor = -1; -+ driver->code_length = dclen * 8; -+ driver->features = LIRC_CAN_REC_LIRCCODE; -+ driver->data = ir; -+ driver->set_use_inc = &set_use_inc; -+ driver->set_use_dec = &set_use_dec; -+ driver->dev = &intf->dev; -+ driver->owner = THIS_MODULE; -+ ir->usbdev = dev; -+ ir->devnum = devnum; -+ -+ mutex_init(&ir->lock); -+ INIT_LIST_HEAD(&ir->iep_listhead); -+ -+new_irctl_failure_check: -+ -+ if (mem_failure) { -+ free_irctl(ir, mem_failure); -+ printk(DRIVER_NAME "[%d]: out of memory (code=%d)\n", -+ devnum, mem_failure); -+ return NULL; -+ } -+ return ir; -+} -+ -+/* -+ * Scan the global list of remotes to see if the device listed is one of them. -+ * If it is, the corresponding xbox_dev is returned, with its dev_refcount -+ * incremented. Otherwise, returns null. -+ */ -+static struct xbox_dev *get_prior_reg_ir(struct usb_device *dev) -+{ -+ struct list_head *pos; -+ struct xbox_dev *ir = NULL; -+ -+ dprintk(DRIVER_NAME "[%d]: scanning remote_list...\n", dev->devnum); -+ list_for_each(pos, &remote_list) { -+ ir = get_irctl_from_link(pos); -+ if (ir->usbdev != dev) { -+ dprintk(DRIVER_NAME "[%d]: device %d isn't it...", -+ dev->devnum, ir->devnum); -+ ir = NULL; -+ } else { -+ dprintk(DRIVER_NAME "[%d]: prior instance found.\n", -+ dev->devnum); -+ ir->dev_refcount++; -+ break; -+ } -+ } -+ return ir; -+} -+ -+/* -+ * If the USB interface has an out endpoint for control. -+ */ -+static void send_outbound_init(struct xbox_dev *ir) -+{ -+ if (ir->out_init) { -+ struct out_endpt *oep = ir->out_init; -+ dprintk(DRIVER_NAME "[%d]: usb_remote_probe: initializing " -+ "outbound ep\n", ir->devnum); -+ usb_fill_int_urb(oep->urb, ir->usbdev, -+ usb_sndintpipe(ir->usbdev, oep->ep->bEndpointAddress), -+ oep->buf, USB_OUTLEN, usb_remote_send, -+ oep, oep->ep->bInterval); -+ oep->urb->transfer_dma = oep->dma; -+ oep->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; -+ -+ send_packet(oep, 0x8004, init1); -+ send_packet(oep, 0x8007, init2); -+ } -+} -+ -+/* Log driver and usb info */ -+static void log_usb_dev_info(struct usb_device *dev) -+{ -+ char buf[63], name[128] = ""; -+ -+ if (dev->descriptor.iManufacturer -+ && usb_string(dev, dev->descriptor.iManufacturer, -+ buf, sizeof(buf)) > 0) -+ strlcpy(name, buf, sizeof(name)); -+ if (dev->descriptor.iProduct -+ && usb_string(dev, dev->descriptor.iProduct, buf, sizeof(buf)) > 0) -+ snprintf(name + strlen(name), sizeof(name) - strlen(name), -+ " %s", buf); -+ printk(DRIVER_NAME "[%d]: %s on usb%d:%d\n", dev->devnum, name, -+ dev->bus->busnum, dev->devnum); -+} -+ -+ -+static int usb_remote_probe(struct usb_interface *intf, -+ const struct usb_device_id *id) -+{ -+ struct usb_device *dev = interface_to_usbdev(intf); -+ struct usb_host_interface *idesc; -+ struct usb_endpoint_descriptor *ep; -+ struct in_endpt *iep; -+ struct xbox_dev *ir; -+ int i; -+ -+ dprintk(DRIVER_NAME "[%d]: usb_remote_probe: dev:%p, intf:%p, id:%p)\n", -+ dev->devnum, dev, intf, id); -+ -+ idesc = intf->cur_altsetting; -+ -+ /* Check if a usb remote has already been registered for this device */ -+ ir = get_prior_reg_ir(dev); -+ -+ if (!ir) { -+ ir = new_irctl(intf); -+ if (!ir) -+ return -ENOMEM; -+ } -+ -+ /* -+ * step through the endpoints to find first in and first out endpoint -+ * of type interrupt transfer -+ */ -+ for (i = 0; i < idesc->desc.bNumEndpoints; ++i) { -+ ep = &idesc->endpoint[i].desc; -+ dprintk(DRIVER_NAME "[%d]: processing endpoint %d\n", -+ dev->devnum, i); -+ if (((ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == -+ USB_DIR_IN) && -+ ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == -+ USB_ENDPOINT_XFER_INT)) { -+ -+ iep = new_in_endpt(ir, ep); -+ if (iep) -+ { -+ usb_fill_int_urb(iep->urb, dev, -+ usb_rcvintpipe(dev, -+ iep->ep->bEndpointAddress), -+ iep->buf, iep->len, usb_remote_recv, -+ iep, iep->ep->bInterval); -+ iep->urb->transfer_dma = iep->dma; -+ iep->urb->transfer_flags |= -+ URB_NO_TRANSFER_DMA_MAP; -+ } -+ } -+ -+ if (((ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == -+ USB_DIR_OUT) && -+ ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == -+ USB_ENDPOINT_XFER_INT) && -+ (ir->out_init == NULL)) -+ ir->out_init = new_out_endpt(ir, ep); -+ } -+ if (list_empty(&ir->iep_listhead)) { -+ printk(DRIVER_NAME "[%d]: inbound endpoint not found\n", -+ ir->devnum); -+ free_irctl(ir, FREE_ALL); -+ return -ENODEV; -+ } -+ if (ir->dev_refcount == 1) { -+ ir->d->minor = lirc_register_driver(ir->d); -+ if (ir->d->minor < 0) { -+ free_irctl(ir, FREE_ALL); -+ return -ENODEV; -+ } -+ -+ /* Note new driver registration in kernel logs */ -+ log_usb_dev_info(dev); -+ -+ /* outbound data (initialization) */ -+ send_outbound_init(ir); -+ } -+ -+ usb_set_intfdata(intf, ir); -+ return 0; -+} -+ -+static void usb_remote_disconnect(struct usb_interface *intf) -+{ -+ /* struct usb_device *dev = interface_to_usbdev(intf); */ -+ struct xbox_dev *ir = usb_get_intfdata(intf); -+ usb_set_intfdata(intf, NULL); -+ -+ dprintk(DRIVER_NAME ": disconnecting remote %d:\n", -+ (ir ? ir->devnum : -1)); -+ if (!ir || !ir->d) -+ return; -+ -+ if (ir->usbdev) { -+ /* Only unregister once */ -+ ir->usbdev = NULL; -+ unregister_from_lirc(ir); -+ } -+ -+ /* This also removes the current remote from remote_list */ -+ free_irctl(ir, FREE_ALL); -+} -+ -+static struct usb_driver usb_remote_driver = { -+ .name = DRIVER_NAME, -+ .probe = usb_remote_probe, -+ .disconnect = usb_remote_disconnect, -+ .id_table = usb_remote_table -+}; -+ -+static int __init usb_remote_init(void) -+{ -+ int i; -+ -+ INIT_LIST_HEAD(&remote_list); -+ -+ printk(KERN_INFO "\n" DRIVER_NAME ": " DRIVER_DESC " " -+ DRIVER_VERSION "\n"); -+ printk(DRIVER_NAME ": " DRIVER_AUTHOR "\n"); -+ dprintk(DRIVER_NAME ": debug mode enabled: " -+ "$Id: lirc_xbox.c,v 1.88 2011/06/05 11:11:11 jmartin Exp $\n"); -+ -+ repeat_jiffies = repeat*HZ/100; -+ -+ i = usb_register(&usb_remote_driver); -+ if (i) { -+ printk(DRIVER_NAME ": usb register failed, result = %d\n", i); -+ return -ENODEV; -+ } -+ -+ return 0; -+} -+ -+static void __exit usb_remote_exit(void) -+{ -+ usb_deregister(&usb_remote_driver); -+} -+ -+module_init(usb_remote_init); -+module_exit(usb_remote_exit); -+ -+MODULE_DESCRIPTION(DRIVER_DESC); -+MODULE_AUTHOR(DRIVER_AUTHOR); -+MODULE_LICENSE("GPL"); -+MODULE_DEVICE_TABLE(usb, usb_remote_table); -+ -+module_param(debug, bool, S_IRUGO | S_IWUSR); -+MODULE_PARM_DESC(debug, "Debug enabled or not (default: 0)"); -+ -+module_param(mask, int, S_IRUGO | S_IWUSR); -+MODULE_PARM_DESC(mask, "Set channel acceptance bit mask (default: 0xFFFF)"); -+ -+module_param(unique, bool, S_IRUGO | S_IWUSR); -+MODULE_PARM_DESC(unique, "Enable channel-specific codes (default: 0)"); -+ -+module_param(repeat, int, S_IRUGO | S_IWUSR); -+MODULE_PARM_DESC(repeat, "Repeat timeout (1/100 sec) (default: 10)"); -diff -Naur linux-3.9.4/drivers/staging/media/lirc/Makefile linux-3.9.4.patch/drivers/staging/media/lirc/Makefile ---- linux-3.9.4/drivers/staging/media/lirc/Makefile 2013-05-24 20:45:59.000000000 +0200 -+++ linux-3.9.4.patch/drivers/staging/media/lirc/Makefile 2013-05-30 18:17:39.163634834 +0200 -@@ -10,4 +10,5 @@ - obj-$(CONFIG_LIRC_SASEM) += lirc_sasem.o - obj-$(CONFIG_LIRC_SERIAL) += lirc_serial.o - obj-$(CONFIG_LIRC_SIR) += lirc_sir.o -+obj-$(CONFIG_LIRC_XBOX) += lirc_xbox.o - obj-$(CONFIG_LIRC_ZILOG) += lirc_zilog.o diff --git a/projects/imx6/patches/linux/3.14-sr/linux-053-spinelplus-remote-0.2.patch b/projects/imx6/patches/linux/3.14-sr/linux-053-spinelplus-remote-0.2.patch deleted file mode 100644 index f110183d85..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-053-spinelplus-remote-0.2.patch +++ /dev/null @@ -1,161 +0,0 @@ -diff -Naur linux-3.9/drivers/hid/hid-core.c linux-3.9.patch/drivers/hid/hid-core.c ---- linux-3.9/drivers/hid/hid-core.c 2013-04-29 02:36:01.000000000 +0200 -+++ linux-3.9.patch/drivers/hid/hid-core.c 2013-04-29 17:08:40.528324010 +0200 -@@ -1681,6 +1681,9 @@ - { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_PKB1700) }, - { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_WKB2000) }, - { HID_USB_DEVICE(USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE) }, -+ { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS, USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_1) }, -+ { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS, USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_2) }, -+ { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS, USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_3) }, - { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_KEYBOARD) }, - #if IS_ENABLED(CONFIG_HID_ROCCAT) - { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONE) }, -diff -Naur linux-3.9/drivers/hid/hid-ids.h linux-3.9.patch/drivers/hid/hid-ids.h ---- linux-3.9/drivers/hid/hid-ids.h 2013-04-29 02:36:01.000000000 +0200 -+++ linux-3.9.patch/drivers/hid/hid-ids.h 2013-04-29 17:08:40.537323981 +0200 -@@ -663,6 +663,9 @@ - - #define USB_VENDOR_ID_PHILIPS 0x0471 - #define USB_DEVICE_ID_PHILIPS_IEEE802154_DONGLE 0x0617 -+#define USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_1 0x206c -+#define USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_2 0x20cc -+#define USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_3 0x0613 - - #define USB_VENDOR_ID_PI_ENGINEERING 0x05f3 - #define USB_DEVICE_ID_PI_ENGINEERING_VEC_USB_FOOTPEDAL 0xff -diff -Naur linux-3.9/drivers/hid/hid-spinelplus.c linux-3.9.patch/drivers/hid/hid-spinelplus.c ---- linux-3.9/drivers/hid/hid-spinelplus.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-3.9.patch/drivers/hid/hid-spinelplus.c 2013-04-29 17:08:40.537323981 +0200 -@@ -0,0 +1,104 @@ -+/* -+ * HID driver for "PHILIPS MCE USB IR Receiver- Spinel plus" remotes -+ * -+ * Copyright (c) 2010 Panagiotis Skintzos -+ * -+ * Renamed to Spinel, cleanup and modified to also support -+ * Spinel Plus 0471:20CC by Stephan Raue 2012. -+ */ -+ -+/* -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License as published by the Free -+ * Software Foundation; either version 2 of the License, or (at your option) -+ * any later version. -+ */ -+ -+#include -+#include -+#include -+#include -+ -+#include "hid-ids.h" -+ -+#define spinelplus_map_key(c) set_bit(EV_REP, hi->input->evbit); \ -+ hid_map_usage_clear(hi, usage, bit, max, EV_KEY, (c)) -+ -+static int spinelplus_input_mapping(struct hid_device *hdev, -+ struct hid_input *hi, struct hid_field *field, struct hid_usage *usage, -+ unsigned long **bit, int *max) -+{ -+ switch (usage->hid) { -+ case 0xffbc000d: spinelplus_map_key(KEY_MEDIA); break; -+ case 0xffbc0024: spinelplus_map_key(KEY_MEDIA); break; -+ case 0xffbc0027: spinelplus_map_key(KEY_ZOOM); break; -+ case 0xffbc0033: spinelplus_map_key(KEY_HOME); break; -+ case 0xffbc0035: spinelplus_map_key(KEY_CAMERA); break; -+ case 0xffbc0036: spinelplus_map_key(KEY_EPG); break; -+ case 0xffbc0037: spinelplus_map_key(KEY_DVD); break; -+ case 0xffbc0038: spinelplus_map_key(KEY_HOME); break; -+ case 0xffbc0039: spinelplus_map_key(KEY_MP3); break; -+ case 0xffbc003a: spinelplus_map_key(KEY_VIDEO); break; -+ case 0xffbc005a: spinelplus_map_key(KEY_TEXT); break; -+ case 0xffbc005b: spinelplus_map_key(KEY_RED); break; -+ case 0xffbc005c: spinelplus_map_key(KEY_GREEN); break; -+ case 0xffbc005d: spinelplus_map_key(KEY_YELLOW); break; -+ case 0xffbc005e: spinelplus_map_key(KEY_BLUE); break; -+ default: -+ return 0; -+ } -+ return 1; -+} -+ -+static int spinelplus_probe(struct hid_device *hdev, -+ const struct hid_device_id *id) -+{ -+ int ret; -+ /* Connect only to hid input (not hiddev & hidraw)*/ -+ unsigned int cmask = HID_CONNECT_HIDINPUT; -+ -+ ret = hid_parse(hdev); -+ if (ret) { -+ dev_err(&hdev->dev, "parse failed\n"); -+ goto err_free; -+ } -+ -+ ret = hid_hw_start(hdev, cmask); -+ if (ret) { -+ dev_err(&hdev->dev, "hw start failed\n"); -+ goto err_free; -+ } -+ -+ return 0; -+err_free: -+ return ret; -+} -+ -+static const struct hid_device_id spinelplus_devices[] = { -+ { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS,USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_1) }, -+ { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS,USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_2) }, -+ { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS,USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_3) }, -+ { } -+}; -+MODULE_DEVICE_TABLE(hid, spinelplus_devices); -+ -+static struct hid_driver spinelplus_driver = { -+ .name = "SpinelPlus", -+ .id_table = spinelplus_devices, -+ .input_mapping = spinelplus_input_mapping, -+ .probe = spinelplus_probe, -+}; -+ -+static int __init spinelplus_init(void) -+{ -+ return hid_register_driver(&spinelplus_driver); -+} -+ -+static void __exit spinelplus_exit(void) -+{ -+ hid_unregister_driver(&spinelplus_driver); -+} -+ -+module_init(spinelplus_init); -+module_exit(spinelplus_exit); -+MODULE_LICENSE("GPL"); -diff -Naur linux-3.9/drivers/hid/Kconfig linux-3.9.patch/drivers/hid/Kconfig ---- linux-3.9/drivers/hid/Kconfig 2013-04-29 02:36:01.000000000 +0200 -+++ linux-3.9.patch/drivers/hid/Kconfig 2013-04-29 17:08:40.538323977 +0200 -@@ -602,6 +602,12 @@ - ---help--- - Support for Steelseries SRW-S1 steering wheel - -+config HID_SPINELPLUS -+ tristate "Spinel Plus remote control" -+ depends on USB_HID -+ ---help--- -+ Say Y here if you have a Spinel Plus (0471:206c/20cc/0613) remote -+ - config HID_SUNPLUS - tristate "Sunplus wireless desktop" - depends on USB_HID -diff -Naur linux-3.9/drivers/hid/Makefile linux-3.9.patch/drivers/hid/Makefile ---- linux-3.9/drivers/hid/Makefile 2013-04-29 02:36:01.000000000 +0200 -+++ linux-3.9.patch/drivers/hid/Makefile 2013-04-29 17:09:26.744173841 +0200 -@@ -101,6 +101,7 @@ - obj-$(CONFIG_HID_SMARTJOYPLUS) += hid-sjoy.o - obj-$(CONFIG_HID_SONY) += hid-sony.o - obj-$(CONFIG_HID_SPEEDLINK) += hid-speedlink.o -+obj-$(CONFIG_HID_SPINELPLUS) += hid-spinelplus.o - obj-$(CONFIG_HID_STEELSERIES) += hid-steelseries.o - obj-$(CONFIG_HID_SUNPLUS) += hid-sunplus.o - obj-$(CONFIG_HID_GREENASIA) += hid-gaff.o diff --git a/projects/imx6/patches/linux/3.14-sr/linux-055-add_Formosa_eHome_Infrared_Receiver.patch b/projects/imx6/patches/linux/3.14-sr/linux-055-add_Formosa_eHome_Infrared_Receiver.patch deleted file mode 100644 index e2afb63e3d..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-055-add_Formosa_eHome_Infrared_Receiver.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- linux-3.2.2.orig/drivers/media/rc/mceusb.c 2012-01-30 23:37:12.374473509 +0100 -+++ linux-3.2.2/drivers/media/rc/mceusb.c 2012-01-30 23:40:57.989652931 +0100 -@@ -350,6 +350,8 @@ - { USB_DEVICE(VENDOR_FORMOSA, 0xe015) }, - /* Formosa21 / eHome Infrared Receiver */ - { USB_DEVICE(VENDOR_FORMOSA, 0xe016) }, -+ /* Formosa21 / eHome Infrared Receiver */ -+ { USB_DEVICE(VENDOR_FORMOSA, 0xe042) }, - /* Formosa aim / Trust MCE Infrared Receiver */ - { USB_DEVICE(VENDOR_FORMOSA, 0xe017), - .driver_info = MCE_GEN2_NO_TX }, diff --git a/projects/imx6/patches/linux/3.14-sr/linux-056-add_Adaptec_eHome_Infrared_Receiver.patch b/projects/imx6/patches/linux/3.14-sr/linux-056-add_Adaptec_eHome_Infrared_Receiver.patch deleted file mode 100644 index a063ac1425..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-056-add_Adaptec_eHome_Infrared_Receiver.patch +++ /dev/null @@ -1,21 +0,0 @@ -diff --git a/drivers/media/rc/mceusb.c b/drivers/media/rc/mceusb.c -index baa1203..fee1f95 100644 ---- a/drivers/media/rc/mceusb.c -+++ b/drivers/media/rc/mceusb.c -@@ -200,6 +200,7 @@ static bool debug; - #define VENDOR_CONEXANT 0x0572 - #define VENDOR_TWISTEDMELON 0x2596 - #define VENDOR_HAUPPAUGE 0x2040 -+#define VENDOR_ADAPTEC 0x03f3 - - enum mceusb_model_type { - MCE_GEN2 = 0, /* Most boards */ -@@ -414,6 +415,8 @@ static struct usb_device_id mceusb_dev_table[] = { - /* Hauppauge WINTV-HVR-HVR 930C-HD - based on cx231xx */ - { USB_DEVICE(VENDOR_HAUPPAUGE, 0xb130), - .driver_info = HAUPPAUGE_CX_HYBRID_TV }, -+ /* Adaptec / HP eHome Receiver */ -+ { USB_DEVICE(VENDOR_ADAPTEC, 0x0094) }, - /* Terminating entry */ - { } - }; diff --git a/projects/imx6/patches/linux/3.14-sr/linux-057-Removed-MCE-customer-code-restriction-in-rc6-decode.patch b/projects/imx6/patches/linux/3.14-sr/linux-057-Removed-MCE-customer-code-restriction-in-rc6-decode.patch deleted file mode 100644 index 9f84e6659f..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-057-Removed-MCE-customer-code-restriction-in-rc6-decode.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- linux/drivers/media/rc/ir-rc6-decoder.c 2012-11-25 22:08:13.148418669 -0800 -+++ linux.patch/drivers/media/rc/ir-rc6-decoder.c 2012-11-25 22:07:48.864417975 -0800 -@@ -39,7 +39,6 @@ - #define RC6_STARTBIT_MASK 0x08 /* for the header bits */ - #define RC6_6A_MCE_TOGGLE_MASK 0x8000 /* for the body bits */ - #define RC6_6A_LCC_MASK 0xffff0000 /* RC6-6A-32 long customer code mask */ --#define RC6_6A_MCE_CC 0x800f0000 /* MCE customer code */ - #ifndef CHAR_BIT - #define CHAR_BIT 8 /* Normally in */ - #endif -@@ -242,9 +241,8 @@ again: - } - - scancode = data->body; -- if (data->count == RC6_6A_32_NBITS && -- (scancode & RC6_6A_LCC_MASK) == RC6_6A_MCE_CC) { -- /* MCE RC */ -+ if (data->count == RC6_6A_32_NBITS) { -+ /* MCE compatible RC */ - toggle = (scancode & RC6_6A_MCE_TOGGLE_MASK) ? 1 : 0; - scancode &= ~RC6_6A_MCE_TOGGLE_MASK; - } else { diff --git a/projects/imx6/patches/linux/3.14-sr/linux-057-add_SMK_Manufacturing_Inc_Infrared_Receiver.patch b/projects/imx6/patches/linux/3.14-sr/linux-057-add_SMK_Manufacturing_Inc_Infrared_Receiver.patch deleted file mode 100644 index 67fc7a0de8..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-057-add_SMK_Manufacturing_Inc_Infrared_Receiver.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff -Naur linux-3.9.4/drivers/media/rc/mceusb.c linux-3.9.4.patch/drivers/media/rc/mceusb.c ---- linux-3.9.4/drivers/media/rc/mceusb.c 2013-05-24 20:45:59.000000000 +0200 -+++ linux-3.9.4.patch/drivers/media/rc/mceusb.c 2013-05-27 12:28:12.811230633 +0200 -@@ -309,6 +309,9 @@ - /* SMK/I-O Data GV-MC7/RCKIT Receiver */ - { USB_DEVICE(VENDOR_SMK, 0x0353), - .driver_info = MCE_GEN2_NO_TX }, -+ /* SMK Manufacturing, Inc. Receiver */ -+ { USB_DEVICE(VENDOR_SMK, 0x0357), -+ .driver_info = MCE_GEN2_NO_TX }, - /* Tatung eHome Infrared Transceiver */ - { USB_DEVICE(VENDOR_TATUNG, 0x9150) }, - /* Shuttle eHome Infrared Transceiver */ diff --git a/projects/imx6/patches/linux/3.14-sr/linux-058.05-hid_sony-add_autorepeat_for_PS3_remotes.patch b/projects/imx6/patches/linux/3.14-sr/linux-058.05-hid_sony-add_autorepeat_for_PS3_remotes.patch deleted file mode 100644 index ac0b7c6466..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-058.05-hid_sony-add_autorepeat_for_PS3_remotes.patch +++ /dev/null @@ -1,59 +0,0 @@ -Betreff: [RFC] hid/sony: add autorepeat for PS3 remotes -Von: David Dillow -Datum: 28.06.2013 04:28 -An: linux-input@vger.kernel.org -Kopie (CC): Stephan Raue - -Some applications using the PS3 remote would like to have autorepeat -from the device. Use the input subsystem's software emulation to provide -this capability, and enable those that don't need it to turn it off. ---- -I'm not sure this is the correct approach, or if it is even appropriate -for a remote to do autorepeat. However, the media/rc subsystem does do -it by default, and it's been requested by users, so there is at least -some demand. - -This compiled against the hid-sony driver with the PS3 remote changes -merged, but I have done no testing of it. If the approach seems -reasonable, I'll try to test it when the MythTV is idle. - - drivers/hid/hid-sony.c | 20 ++++++++++++++++++++ - 1 file changed, 20 insertions(+) - -diff -Naur linux-3.14/drivers/hid/hid-sony.c linux-3.14.patch/drivers/hid/hid-sony.c ---- linux-3.14/drivers/hid/hid-sony.c 2014-03-31 05:40:15.000000000 +0200 -+++ linux-3.14.patch/drivers/hid/hid-sony.c 2014-03-31 11:50:35.755949680 +0200 -@@ -546,6 +546,24 @@ - return 1; - } - -+static int ps3remote_setup_repeat(struct hid_device *hdev) -+{ -+ struct hid_input *hidinput = list_first_entry(&hdev->inputs, -+ struct hid_input, list); -+ struct input_dev *input = hidinput->input; -+ -+ /* -+ * Set up autorepeat defaults per the remote control subsystem; -+ * this must be done after hid_hw_start(), as having these non-zero -+ * at the time of input_register_device() tells the input system that -+ * the hardware does the autorepeat, and the PS3 remote does not. -+ */ -+ set_bit(EV_REP, input->evbit); -+ input->rep[REP_DELAY] = 500; -+ input->rep[REP_PERIOD] = 125; -+ -+ return 0; -+} - - /* Sony Vaio VGX has wrongly mouse pointer declared as constant */ - static __u8 *sony_report_fixup(struct hid_device *hdev, __u8 *rdesc, -@@ -1074,6 +1092,8 @@ - } - else if (sc->quirks & SIXAXIS_CONTROLLER_BT) - ret = sixaxis_set_operational_bt(hdev); -+ else if (sc->quirks & PS3REMOTE) -+ ret = ps3remote_setup_repeat(hdev); - else if (sc->quirks & DUALSHOCK4_CONTROLLER_USB) { - /* Report 5 (31 bytes) is used to send data to the controller via USB */ - ret = sony_set_output_report(sc, 0x05, 248); diff --git a/projects/imx6/patches/linux/3.14-sr/linux-058.06-hid_sony-add_SMK_link.patch b/projects/imx6/patches/linux/3.14-sr/linux-058.06-hid_sony-add_SMK_link.patch deleted file mode 100644 index a9b505c693..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-058.06-hid_sony-add_SMK_link.patch +++ /dev/null @@ -1,38 +0,0 @@ -diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c -index 61b604f..0ad4515 100644 ---- a/drivers/hid/hid-core.c -+++ b/drivers/hid/hid-core.c -@@ -1828,6 +1828,7 @@ static const struct hid_device_id hid_have_special_driver[] = { - { HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_IR_REMOTE) }, - { HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE) }, - { HID_USB_DEVICE(USB_VENDOR_ID_SKYCABLE, USB_DEVICE_ID_SKYCABLE_WIRELESS_PRESENTER) }, -+ { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SONY_PS3_BDREMOTE) }, - { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_BUZZ_CONTROLLER) }, - { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_WIRELESS_BUZZ_CONTROLLER) }, - { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_BDREMOTE) }, -diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h -index 0af8e93..f14b038 100644 ---- a/drivers/hid/hid-ids.h -+++ b/drivers/hid/hid-ids.h -@@ -775,6 +775,7 @@ - #define USB_VENDOR_ID_SKYCABLE 0x1223 - #define USB_DEVICE_ID_SKYCABLE_WIRELESS_PRESENTER 0x3F07 - -+#define USB_VENDOR_ID_SMK 0x0609 - #define USB_VENDOR_ID_SONY 0x054c - #define USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE 0x024b - #define USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE 0x0374 -diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c -index 1235405..69e2bf6 100644 ---- a/drivers/hid/hid-sony.c -+++ b/drivers/hid/hid-sony.c -@@ -1153,6 +1153,9 @@ static const struct hid_device_id sony_devices[] = { - .driver_data = DUALSHOCK4_CONTROLLER_USB }, - { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER), - .driver_data = DUALSHOCK4_CONTROLLER_BT }, -+ /* SMK-Link Universal Remote Control VP3700 */ -+ { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SONY_PS3_BDREMOTE), -+ .driver_data = PS3REMOTE }, - { } - }; - MODULE_DEVICE_TABLE(hid, sony_devices); diff --git a/projects/imx6/patches/linux/3.14-sr/linux-059-remove_some_xpad_pids-0.2.patch b/projects/imx6/patches/linux/3.14-sr/linux-059-remove_some_xpad_pids-0.2.patch deleted file mode 100644 index 4a6d1c7a08..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-059-remove_some_xpad_pids-0.2.patch +++ /dev/null @@ -1,11 +0,0 @@ -diff -Naur linux-3.8.4/drivers/input/joystick/xpad.c linux-3.8.4.patch/drivers/input/joystick/xpad.c ---- linux-3.8.4/drivers/input/joystick/xpad.c 2013-03-20 21:11:19.000000000 +0100 -+++ linux-3.8.4.patch/drivers/input/joystick/xpad.c 2013-03-26 20:24:29.273978355 +0100 -@@ -174,7 +174,6 @@ - { 0x1bad, 0xf901, "Gamestop Xbox 360 Controller", 0, XTYPE_XBOX360 }, - { 0x1bad, 0xf903, "Tron Xbox 360 controller", 0, XTYPE_XBOX360 }, - { 0x24c6, 0x5300, "PowerA MINI PROEX Controller", 0, XTYPE_XBOX360 }, -- { 0xffff, 0xffff, "Chinese-made Xbox Controller", 0, XTYPE_XBOX }, - { 0x0000, 0x0000, "Generic X-Box pad", 0, XTYPE_UNKNOWN } - }; - diff --git a/projects/imx6/patches/linux/3.14-sr/linux-060-add_AUGUST_DVB-T205.patch b/projects/imx6/patches/linux/3.14-sr/linux-060-add_AUGUST_DVB-T205.patch deleted file mode 100644 index 78a3468d38..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-060-add_AUGUST_DVB-T205.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -Naur linux-cuboxi-3.14-aab1674/drivers/media/usb/dvb-usb-v2/rtl28xxu.c linux-cuboxi-3.14-aab1674.patch/drivers/media/usb/dvb-usb-v2/rtl28xxu.c ---- linux-cuboxi-3.14-aab1674/drivers/media/usb/dvb-usb-v2/rtl28xxu.c 2014-08-26 14:31:42.000000000 +0200 -+++ linux-cuboxi-3.14-aab1674.patch/drivers/media/usb/dvb-usb-v2/rtl28xxu.c 2014-08-26 18:23:05.035432084 +0200 -@@ -1441,6 +1441,8 @@ - &rtl2832u_props, "Sveon STV20", NULL) }, - { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_SVEON_STV27, - &rtl2832u_props, "Sveon STV27", NULL) }, -+ { DVB_USB_DEVICE(USB_VID_GTEK, 0xa803, -+ &rtl2832u_props, "Realtek RTL2832U reference design", NULL) }, - - /* RTL2832P devices: */ - { DVB_USB_DEVICE(USB_VID_HANFTEK, 0x0131, diff --git a/projects/imx6/patches/linux/3.14-sr/linux-061-valve-xpad-rework.patch b/projects/imx6/patches/linux/3.14-sr/linux-061-valve-xpad-rework.patch deleted file mode 100644 index c485a63e49..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-061-valve-xpad-rework.patch +++ /dev/null @@ -1,462 +0,0 @@ ---- a/drivers/input/joystick/xpad.c 2016-11-02 11:32:23.105562200 +0100 -+++ b/drivers/input/joystick/xpad.c 2016-11-02 11:33:00.065676100 +0100 -@@ -281,17 +281,21 @@ struct usb_xpad { - struct urb *irq_out; /* urb for interrupt out report */ - unsigned char *odata; /* output data */ - dma_addr_t odata_dma; -- struct mutex odata_mutex; -+ spinlock_t odata_lock; - #endif - - #if defined(CONFIG_JOYSTICK_XPAD_LEDS) - struct xpad_led *led; - #endif -+ -+ int joydev_id; - - char phys[64]; /* physical device path */ - - int mapping; /* map d-pad to buttons or to axes */ - int xtype; /* type of xbox device */ -+ -+ const char *name; - }; - - /* -@@ -435,6 +439,109 @@ static void xpad360_process_packet(struc - - input_sync(dev); - } -+static void xpad_send_led_command(struct usb_xpad *xpad, int command); -+static int xpad_open(struct input_dev *dev); -+static void xpad_close(struct input_dev *dev); -+static void xpad_set_up_abs(struct input_dev *input_dev, signed short abs); -+static int xpad_init_ff(struct usb_xpad *xpad); -+static int xpad_find_joydev(struct device *dev, void *data) -+{ -+ if (strstr(dev_name(dev), "js")) -+ return 1; -+ -+ return 0; -+} -+ -+static struct workqueue_struct *my_wq; -+ -+typedef struct { -+ struct work_struct my_work; -+ struct usb_xpad *xpad; -+} my_work_t; -+ -+static void my_wq_function( struct work_struct *work) -+{ -+ my_work_t *my_work = (my_work_t *)work; -+ -+ struct usb_xpad *xpad = my_work->xpad; -+ -+ if (xpad->pad_present) { -+ -+ struct input_dev *input_dev; -+ int i; -+ -+ input_dev = input_allocate_device(); -+ -+ xpad->dev = input_dev; -+ input_dev->name = xpad->name; -+ input_dev->phys = xpad->phys; -+ usb_to_input_id(xpad->udev, &input_dev->id); -+ input_dev->dev.parent = &xpad->intf->dev; -+ -+ input_set_drvdata(input_dev, xpad); -+ -+ input_dev->open = xpad_open; -+ input_dev->close = xpad_close; -+ -+ input_dev->evbit[0] = BIT_MASK(EV_KEY); -+ -+ if (!(xpad->mapping & MAP_STICKS_TO_NULL)) { -+ input_dev->evbit[0] |= BIT_MASK(EV_ABS); -+ /* set up axes */ -+ for (i = 0; xpad_abs[i] >= 0; i++) -+ xpad_set_up_abs(input_dev, xpad_abs[i]); -+ } -+ -+ /* set up standard buttons */ -+ for (i = 0; xpad_common_btn[i] >= 0; i++) -+ __set_bit(xpad_common_btn[i], input_dev->keybit); -+ -+ /* set up model-specific ones */ -+ if (xpad->xtype == XTYPE_XBOX360 || xpad->xtype == XTYPE_XBOX360W) { -+ for (i = 0; xpad360_btn[i] >= 0; i++) -+ __set_bit(xpad360_btn[i], input_dev->keybit); -+ } else { -+ for (i = 0; xpad_btn[i] >= 0; i++) -+ __set_bit(xpad_btn[i], input_dev->keybit); -+ } -+ -+ if (xpad->mapping & MAP_DPAD_TO_BUTTONS) { -+ for (i = 0; xpad_btn_pad[i] >= 0; i++) -+ __set_bit(xpad_btn_pad[i], input_dev->keybit); -+ } else { -+ for (i = 0; xpad_abs_pad[i] >= 0; i++) -+ xpad_set_up_abs(input_dev, xpad_abs_pad[i]); -+ } -+ -+ if (xpad->mapping & MAP_TRIGGERS_TO_BUTTONS) { -+ for (i = 0; xpad_btn_triggers[i] >= 0; i++) -+ __set_bit(xpad_btn_triggers[i], input_dev->keybit); -+ } else { -+ for (i = 0; xpad_abs_triggers[i] >= 0; i++) -+ xpad_set_up_abs(input_dev, xpad_abs_triggers[i]); -+ } -+ -+ input_register_device(xpad->dev); -+ -+ { -+ struct device* joydev_dev = device_find_child(&xpad->dev->dev, NULL, xpad_find_joydev); -+ -+ if (joydev_dev) { -+// printk("found joydev child with minor %i\n", MINOR(joydev_dev->devt)); -+ xpad->joydev_id = MINOR(joydev_dev->devt); -+ xpad_send_led_command(xpad, (xpad->joydev_id % 4) + 2); -+ } -+ } -+ -+ xpad_init_ff(xpad); -+ } else { -+ input_unregister_device(xpad->dev); -+ } -+ -+ kfree( (void *)work ); -+ -+ return; -+} - - /* - * xpad360w_process_packet -@@ -456,11 +563,35 @@ static void xpad360w_process_packet(stru - /* Presence change */ - if (data[0] & 0x08) { - if (data[1] & 0x80) { -- xpad->pad_present = 1; -- usb_submit_urb(xpad->bulk_out, GFP_ATOMIC); -- } else -- xpad->pad_present = 0; -+ -+ if (!xpad->pad_present) -+ { -+ my_work_t * work; -+ xpad->pad_present = 1; -+ usb_submit_urb(xpad->bulk_out, GFP_ATOMIC); -+ -+ work = (my_work_t *)kmalloc(sizeof(my_work_t), GFP_KERNEL); -+ INIT_WORK( (struct work_struct *)work, my_wq_function ); -+ work->xpad = xpad; -+ queue_work( my_wq, (struct work_struct *)work ); -+ } -+ -+ } else { -+ if (xpad->pad_present) -+ { -+ my_work_t * work; -+ xpad->pad_present = 0; -+ -+ work = (my_work_t *)kmalloc(sizeof(my_work_t), GFP_KERNEL); -+ INIT_WORK( (struct work_struct *)work, my_wq_function ); -+ work->xpad = xpad; -+ queue_work( my_wq, (struct work_struct *)work ); -+ } -+// printk("got kill packet for id %i\n", xpad->joydev_id); -+ } - } -+ -+// printk("xpad packet %hhX %hhX %hhX %hhX %hhX %hhX\n", data[0], data[1], data[2], data[3], data[4], data[5]); - - /* Valid pad data */ - if (!(data[1] & 0x1)) -@@ -476,6 +607,8 @@ static void xpad_irq_in(struct urb *urb) - int retval, status; - - status = urb->status; -+ -+// printk("xpad_irq_in %i\n", status); - - switch (status) { - case 0: -@@ -584,8 +717,6 @@ static int xpad_init_output(struct usb_i - goto fail1; - } - -- mutex_init(&xpad->odata_mutex); -- - xpad->irq_out = usb_alloc_urb(0, GFP_KERNEL); - if (!xpad->irq_out) { - error = -ENOMEM; -@@ -714,15 +845,38 @@ struct xpad_led { - - static void xpad_send_led_command(struct usb_xpad *xpad, int command) - { -- if (command >= 0 && command < 14) { -- mutex_lock(&xpad->odata_mutex); -- xpad->odata[0] = 0x01; -- xpad->odata[1] = 0x03; -- xpad->odata[2] = command; -- xpad->irq_out->transfer_buffer_length = 3; -- usb_submit_urb(xpad->irq_out, GFP_KERNEL); -- mutex_unlock(&xpad->odata_mutex); -+ if ((unsigned)command > 15) -+ return; -+ -+ spin_lock(&xpad->odata_lock); -+ -+ switch (xpad->xtype) { -+ -+ case XTYPE_XBOX360: -+ xpad->odata[0] = 0x01; -+ xpad->odata[1] = 0x03; -+ xpad->odata[2] = command; -+ xpad->irq_out->transfer_buffer_length = 3; -+ break; -+ case XTYPE_XBOX360W: -+ xpad->odata[0] = 0x00; -+ xpad->odata[1] = 0x00; -+ xpad->odata[2] = 0x08; -+ xpad->odata[3] = 0x40 + (command % 0x0e); -+ xpad->odata[4] = 0x00; -+ xpad->odata[5] = 0x00; -+ xpad->odata[6] = 0x00; -+ xpad->odata[7] = 0x00; -+ xpad->odata[8] = 0x00; -+ xpad->odata[9] = 0x00; -+ xpad->odata[10] = 0x00; -+ xpad->odata[11] = 0x00; -+ xpad->irq_out->transfer_buffer_length = 12; -+ break; - } -+ -+ usb_submit_urb(xpad->irq_out, GFP_KERNEL); -+ spin_unlock(&xpad->odata_lock); - } - - static void xpad_led_set(struct led_classdev *led_cdev, -@@ -741,8 +895,10 @@ static int xpad_led_probe(struct usb_xpa - struct xpad_led *led; - struct led_classdev *led_cdev; - int error; -+ -+// printk("xpad_led_probe\n"); - -- if (xpad->xtype != XTYPE_XBOX360) -+ if (xpad->xtype != XTYPE_XBOX360 && xpad->xtype != XTYPE_XBOX360W) - return 0; - - xpad->led = led = kzalloc(sizeof(struct xpad_led), GFP_KERNEL); -@@ -765,11 +921,6 @@ static int xpad_led_probe(struct usb_xpa - return error; - } - -- /* -- * Light up the segment corresponding to controller number -- */ -- xpad_send_led_command(xpad, (led_no % 4) + 2); -- - return 0; - } - -@@ -791,6 +942,7 @@ static void xpad_led_disconnect(struct u - static int xpad_open(struct input_dev *dev) - { - struct usb_xpad *xpad = input_get_drvdata(dev); -+// printk("xpad open driver data %x\n", (unsigned int)xpad); - - /* URB was submitted in probe */ - if (xpad->xtype == XTYPE_XBOX360W) -@@ -846,19 +998,20 @@ static int xpad_probe(struct usb_interfa - if (intf->cur_altsetting->desc.bNumEndpoints != 2) - return -ENODEV; - -+ if (!my_wq) { -+ my_wq = create_workqueue("xpad_queue"); -+ } -+ - for (i = 0; xpad_device[i].idVendor; i++) { - if ((le16_to_cpu(udev->descriptor.idVendor) == xpad_device[i].idVendor) && - (le16_to_cpu(udev->descriptor.idProduct) == xpad_device[i].idProduct)) - break; - } - - xpad = kzalloc(sizeof(struct usb_xpad), GFP_KERNEL); -- input_dev = input_allocate_device(); -- if (!xpad || !input_dev) { -- error = -ENOMEM; -- goto fail1; -- } - -+ xpad->name = xpad_device[i].name; -+ - xpad->idata = usb_alloc_coherent(udev, XPAD_PKT_LEN, - GFP_KERNEL, &xpad->idata_dma); - if (!xpad->idata) { -@@ -894,65 +1047,12 @@ static int xpad_probe(struct usb_interfa - xpad->mapping |= MAP_STICKS_TO_NULL; - } - -- xpad->dev = input_dev; -- usb_make_path(udev, xpad->phys, sizeof(xpad->phys)); -- strlcat(xpad->phys, "/input0", sizeof(xpad->phys)); -- -- input_dev->name = xpad_device[i].name; -- input_dev->phys = xpad->phys; -- usb_to_input_id(udev, &input_dev->id); -- input_dev->dev.parent = &intf->dev; -- -- input_set_drvdata(input_dev, xpad); -- -- input_dev->open = xpad_open; -- input_dev->close = xpad_close; -- -- input_dev->evbit[0] = BIT_MASK(EV_KEY); -- -- if (!(xpad->mapping & MAP_STICKS_TO_NULL)) { -- input_dev->evbit[0] |= BIT_MASK(EV_ABS); -- /* set up axes */ -- for (i = 0; xpad_abs[i] >= 0; i++) -- xpad_set_up_abs(input_dev, xpad_abs[i]); -- } -- -- /* set up standard buttons */ -- for (i = 0; xpad_common_btn[i] >= 0; i++) -- __set_bit(xpad_common_btn[i], input_dev->keybit); -- -- /* set up model-specific ones */ -- if (xpad->xtype == XTYPE_XBOX360 || xpad->xtype == XTYPE_XBOX360W) { -- for (i = 0; xpad360_btn[i] >= 0; i++) -- __set_bit(xpad360_btn[i], input_dev->keybit); -- } else { -- for (i = 0; xpad_btn[i] >= 0; i++) -- __set_bit(xpad_btn[i], input_dev->keybit); -- } -- -- if (xpad->mapping & MAP_DPAD_TO_BUTTONS) { -- for (i = 0; xpad_btn_pad[i] >= 0; i++) -- __set_bit(xpad_btn_pad[i], input_dev->keybit); -- } else { -- for (i = 0; xpad_abs_pad[i] >= 0; i++) -- xpad_set_up_abs(input_dev, xpad_abs_pad[i]); -- } -- -- if (xpad->mapping & MAP_TRIGGERS_TO_BUTTONS) { -- for (i = 0; xpad_btn_triggers[i] >= 0; i++) -- __set_bit(xpad_btn_triggers[i], input_dev->keybit); -- } else { -- for (i = 0; xpad_abs_triggers[i] >= 0; i++) -- xpad_set_up_abs(input_dev, xpad_abs_triggers[i]); -- } -- - error = xpad_init_output(intf, xpad); - if (error) - goto fail3; - -- error = xpad_init_ff(xpad); -- if (error) -- goto fail4; -+ usb_make_path(xpad->udev, xpad->phys, sizeof(xpad->phys)); -+ strlcat(xpad->phys, "/input0", sizeof(xpad->phys)); - - error = xpad_led_probe(xpad); - if (error) -@@ -966,10 +1066,6 @@ static int xpad_probe(struct usb_interfa - xpad->irq_in->transfer_dma = xpad->idata_dma; - xpad->irq_in->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; - -- error = input_register_device(xpad->dev); -- if (error) -- goto fail6; -- - usb_set_intfdata(intf, xpad); - - if (xpad->xtype == XTYPE_XBOX360W) { -@@ -977,6 +1073,7 @@ static int xpad_probe(struct usb_interfa - * Setup the message to set the LEDs on the - * controller when it shows up - */ -+ spin_lock(&xpad->odata_lock); - xpad->bulk_out = usb_alloc_urb(0, GFP_KERNEL); - if (!xpad->bulk_out) { - error = -ENOMEM; -@@ -1028,23 +1125,55 @@ static int xpad_probe(struct usb_interfa - */ - xpad->irq_in->dev = xpad->udev; - error = usb_submit_urb(xpad->irq_in, GFP_KERNEL); -+ -+ spin_unlock(&xpad->odata_lock); - if (error) - goto fail9; -+ -+ // I don't know how to check controller state on driver load so just slam them -+ // off so that people have to turn them on, triggering a state update -+ -+ // got the power off packet from an OSX reverse-engineered driver: -+ // http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller/OsxDriver#toc1 -+ spin_lock(&xpad->odata_lock); -+ xpad->odata[0] = 0x00; -+ xpad->odata[1] = 0x00; -+ xpad->odata[2] = 0x08; -+ xpad->odata[3] = 0xC0; -+ xpad->odata[4] = 0x00; -+ xpad->odata[5] = 0x00; -+ xpad->odata[6] = 0x00; -+ xpad->odata[7] = 0x00; -+ xpad->odata[8] = 0x00; -+ xpad->odata[9] = 0x00; -+ xpad->odata[10] = 0x00; -+ xpad->odata[11] = 0x00; -+ xpad->irq_out->transfer_buffer_length = 12; -+ usb_submit_urb(xpad->irq_out, GFP_KERNEL); -+ spin_unlock(&xpad->odata_lock); -+ } else { -+ my_work_t *work; -+ xpad->pad_present = 1; -+ -+ work = (my_work_t *)kmalloc(sizeof(my_work_t), GFP_KERNEL); -+ INIT_WORK( (struct work_struct *)work, my_wq_function ); -+ work->xpad = xpad; -+ queue_work( my_wq, (struct work_struct *)work ); - } - - return 0; - - fail9: kfree(xpad->bdata); - fail8: usb_free_urb(xpad->bulk_out); -- fail7: input_unregister_device(input_dev); -- input_dev = NULL; -+ fail7: //input_unregister_device(input_dev); -+ //input_dev = NULL; - fail6: xpad_led_disconnect(xpad); -- fail5: if (input_dev) -- input_ff_destroy(input_dev); -+ fail5: //if (input_dev) -+ //input_ff_destroy(input_dev); - fail4: xpad_deinit_output(xpad); - fail3: usb_free_urb(xpad->irq_in); - fail2: usb_free_coherent(udev, XPAD_PKT_LEN, xpad->idata, xpad->idata_dma); -- fail1: input_free_device(input_dev); -+ fail1: //input_free_device(input_dev); - kfree(xpad); - return error; - -@@ -1054,8 +1183,14 @@ static void xpad_disconnect(struct usb_i - { - struct usb_xpad *xpad = usb_get_intfdata (intf); - -+// printk("xpad_disconnect\n"); - xpad_led_disconnect(xpad); -- input_unregister_device(xpad->dev); -+ -+ if (xpad->pad_present) -+ { -+ xpad->pad_present = 0; -+ input_unregister_device(xpad->dev); -+ } - xpad_deinit_output(xpad); - - if (xpad->xtype == XTYPE_XBOX360W) { diff --git a/projects/imx6/patches/linux/3.14-sr/linux-062-imon_pad_ignore_diagonal.patch b/projects/imx6/patches/linux/3.14-sr/linux-062-imon_pad_ignore_diagonal.patch deleted file mode 100644 index 677de3ed7f..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-062-imon_pad_ignore_diagonal.patch +++ /dev/null @@ -1,21 +0,0 @@ -diff -Naur linux-3.16.1/drivers/media/rc/imon.c linux-3.16.1.patch/drivers/media/rc/imon.c ---- linux-3.16.1/drivers/media/rc/imon.c 2014-08-14 04:36:35.000000000 +0200 -+++ linux-3.16.1.patch/drivers/media/rc/imon.c 2014-08-15 13:57:16.587620642 +0200 -@@ -1344,6 +1344,17 @@ - } - } else { - /* -+ * For users without stabilized, just ignore any value getting -+ * to close to the diagonal. -+ */ -+ if ((abs(rel_y) < 2 && abs(rel_x) < 2) || -+ abs(abs(rel_y) - abs(rel_x)) < 2 ) { -+ spin_lock_irqsave(&ictx->kc_lock, flags); -+ ictx->kc = KEY_UNKNOWN; -+ spin_unlock_irqrestore(&ictx->kc_lock, flags); -+ return; -+ } -+ /* - * Hack alert: instead of using keycodes, we have - * to use hard-coded scancodes here... - */ diff --git a/projects/imx6/patches/linux/3.14-sr/linux-203-stb0899_enable_low_symbol_rate.patch b/projects/imx6/patches/linux/3.14-sr/linux-203-stb0899_enable_low_symbol_rate.patch deleted file mode 100644 index f302b6ce1b..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-203-stb0899_enable_low_symbol_rate.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -Naur linux-3.7.2/drivers/media/dvb-frontends/stb0899_drv.c linux-3.7.2.patch/drivers/media/dvb-frontends/stb0899_drv.c ---- linux-3.7.2/drivers/media/dvb-frontends/stb0899_drv.c 2013-01-11 18:19:28.000000000 +0100 -+++ linux-3.7.2.patch/drivers/media/dvb-frontends/stb0899_drv.c 2013-01-16 10:25:43.479645317 +0100 -@@ -1581,7 +1581,7 @@ - .frequency_max = 2150000, - .frequency_stepsize = 0, - .frequency_tolerance = 0, -- .symbol_rate_min = 5000000, -+ .symbol_rate_min = 1000000, - .symbol_rate_max = 45000000, - - .caps = FE_CAN_INVERSION_AUTO | diff --git a/projects/imx6/patches/linux/3.14-sr/linux-210-dvbsky.patch b/projects/imx6/patches/linux/3.14-sr/linux-210-dvbsky.patch deleted file mode 100644 index 7102fc318b..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-210-dvbsky.patch +++ /dev/null @@ -1,6132 +0,0 @@ -diff --git a/drivers/media/dvb-frontends/Kconfig b/drivers/media/dvb-frontends/Kconfig -index 49db718..6ddcfc9 100644 ---- a/drivers/media/dvb-frontends/Kconfig -+++ b/drivers/media/dvb-frontends/Kconfig -@@ -248,6 +248,20 @@ config DVB_CX24117 - help - A Dual DVB-S/S2 tuner module. Say Y when you want to support this frontend. - -+config DVB_DVBSKY_M88DS3103 -+ tristate "Montage M88DS3103 based (dvbsky)" -+ depends on DVB_CORE && I2C -+ default m if !MEDIA_SUBDRV_AUTOSELECT -+ help -+ A DVB-S/S2 tuner module. Say Y when you want to support this frontend. -+ -+config DVB_DVBSKY_M88DC2800 -+ tristate "Montage M88DC2800 based (dvbsky)" -+ depends on DVB_CORE && I2C -+ default m if !MEDIA_SUBDRV_AUTOSELECT -+ help -+ A DVB-C tuner module. Say Y when you want to support this frontend. -+ - config DVB_SI21XX - tristate "Silicon Labs SI21XX based" - depends on DVB_CORE && I2C -diff --git a/drivers/media/dvb-frontends/Makefile b/drivers/media/dvb-frontends/Makefile -index 9b21488..edaae0d 100644 ---- a/drivers/media/dvb-frontends/Makefile -+++ b/drivers/media/dvb-frontends/Makefile -@@ -112,4 +112,5 @@ obj-$(CONFIG_DVB_RTL2830) += rtl2830.o - obj-$(CONFIG_DVB_RTL2832) += rtl2832.o - obj-$(CONFIG_DVB_M88RS2000) += m88rs2000.o - obj-$(CONFIG_DVB_AF9033) += af9033.o -- -+obj-$(CONFIG_DVB_DVBSKY_M88DS3103) += dvbsky_m88ds3103.o -+obj-$(CONFIG_DVB_DVBSKY_M88DC2800) += dvbsky_m88dc2800.o -diff --git a/drivers/media/dvb-frontends/dvbsky_m88dc2800.c b/drivers/media/dvb-frontends/dvbsky_m88dc2800.c -new file mode 100644 -index 0000000..3c933b4 ---- /dev/null -+++ b/drivers/media/dvb-frontends/dvbsky_m88dc2800.c -@@ -0,0 +1,2124 @@ -+/* -+ M88DC2800/M88TC2800 - DVB-C demodulator and tuner from Montage -+ -+ Copyright (C) 2012 Max nibble -+ Copyright (C) 2011 Montage Technology / www.montage-tech.com -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+*/ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include "dvb_frontend.h" -+#include "dvbsky_m88dc2800.h" -+ -+struct dvbsky_m88dc2800_state { -+ struct i2c_adapter *i2c; -+ const struct dvbsky_m88dc2800_config *config; -+ struct dvb_frontend frontend; -+ u32 freq; -+ u32 ber; -+ u32 sym; -+ u16 qam; -+ u8 inverted; -+ u32 xtal; -+ /* tuner state */ -+ u8 tuner_init_OK; /* Tuner initialize status */ -+ u8 tuner_dev_addr; /* Tuner device address */ -+ u32 tuner_freq; /* RF frequency to be set, unit: KHz */ -+ u16 tuner_qam; /* Reserved */ -+ u16 tuner_mode; -+ u8 tuner_bandwidth; /* Bandwidth of the channel, unit: MHz, 6/7/8 */ -+ u8 tuner_loopthrough; /* Tuner loop through switch, 0/1 */ -+ u32 tuner_crystal; /* Tuner crystal frequency, unit: KHz */ -+ u32 tuner_dac; /* Tuner DAC frequency, unit: KHz */ -+ u16 tuner_mtt; /* Tuner chip version, D1: 0x0d, E0: 0x0e, E1: 0x8e */ -+ u16 tuner_custom_cfg; -+ u32 tuner_version; /* Tuner driver version number */ -+ u32 tuner_time; -+}; -+ -+static int debug; -+module_param(debug, int, 0644); -+MODULE_PARM_DESC(debug, "Activates frontend debugging (default:0)"); -+ -+#define dprintk(args...) \ -+ do { \ -+ if (debug) \ -+ printk(KERN_INFO "m88dc2800: " args); \ -+ } while (0) -+ -+ -+static int dvbsky_m88dc2800_i2c_write(struct dvbsky_m88dc2800_state *state, u8 addr, -+ u8 * p_data, u8 len) -+{ -+ struct i2c_msg msg = { .flags = 0 }; -+ -+ msg.addr = addr; -+ msg.buf = p_data; -+ msg.len = len; -+ -+ return i2c_transfer(state->i2c, &msg, 1); -+} -+ -+static int dvbsky_m88dc2800_i2c_read(struct dvbsky_m88dc2800_state *state, u8 addr, -+ u8 * p_data, u8 len) -+{ -+ struct i2c_msg msg = { .flags = I2C_M_RD }; -+ -+ msg.addr = addr; -+ msg.buf = p_data; -+ msg.len = len; -+ -+ return i2c_transfer(state->i2c, &msg, 1); -+} -+ -+/*demod register operations.*/ -+static int WriteReg(struct dvbsky_m88dc2800_state *state, u8 reg, u8 data) -+{ -+ u8 buf[] = { reg, data }; -+ u8 addr = state->config->demod_address; -+ int err; -+ -+ dprintk("%s: write reg 0x%02x, value 0x%02x\n", __func__, reg, data); -+ -+ err = dvbsky_m88dc2800_i2c_write(state, addr, buf, 2); -+ -+ if (err != 1) { -+ printk(KERN_ERR -+ "%s: writereg error(err == %i, reg == 0x%02x," -+ " value == 0x%02x)\n", __func__, err, reg, data); -+ return -EIO; -+ } -+ return 0; -+} -+ -+static int ReadReg(struct dvbsky_m88dc2800_state *state, u8 reg) -+{ -+ int ret; -+ u8 b0[] = { reg }; -+ u8 b1[] = { 0 }; -+ u8 addr = state->config->demod_address; -+ -+ ret = dvbsky_m88dc2800_i2c_write(state, addr, b0, 1); -+ -+ if (ret != 1) { -+ printk(KERN_ERR "%s: reg=0x%x (error=%d)\n", -+ __func__, reg, ret); -+ return -EIO; -+ } -+ -+ ret = dvbsky_m88dc2800_i2c_read(state, addr, b1, 1); -+ -+ dprintk("%s: read reg 0x%02x, value 0x%02x\n", __func__, reg, b1[0]); -+ return b1[0]; -+} -+ -+static int _mt_fe_tn_set_reg(struct dvbsky_m88dc2800_state *state, u8 reg, -+ u8 data) -+{ -+ int ret; -+ u8 buf[2]; -+ u8 addr = state->tuner_dev_addr; -+ -+ buf[1] = ReadReg(state, 0x86); -+ buf[1] |= 0x80; -+ ret = WriteReg(state, 0x86, buf[1]); -+ -+ buf[0] = reg; -+ buf[1] = data; -+ -+ ret = dvbsky_m88dc2800_i2c_write(state, addr, buf, 2); -+ if (ret != 1) -+ return -EIO; -+ return 0; -+} -+ -+static int _mt_fe_tn_get_reg(struct dvbsky_m88dc2800_state *state, u8 reg, -+ u8 * p_data) -+{ -+ int ret; -+ u8 buf[2]; -+ u8 addr = state->tuner_dev_addr; -+ -+ buf[1] = ReadReg(state, 0x86); -+ buf[1] |= 0x80; -+ ret = WriteReg(state, 0x86, buf[1]); -+ -+ buf[0] = reg; -+ ret = dvbsky_m88dc2800_i2c_write(state, addr, buf, 1); -+ -+ msleep(1); -+ -+ buf[1] = ReadReg(state, 0x86); -+ buf[1] |= 0x80; -+ ret = WriteReg(state, 0x86, buf[1]); -+ -+ return dvbsky_m88dc2800_i2c_read(state, addr, p_data, 1); -+} -+ -+/* Tuner operation functions.*/ -+static int _mt_fe_tn_set_RF_front_tc2800(struct dvbsky_m88dc2800_state *state) -+{ -+ u32 freq_KHz = state->tuner_freq; -+ u8 a, b, c; -+ if (state->tuner_mtt == 0xD1) { /* D1 */ -+ if (freq_KHz <= 123000) { -+ if (freq_KHz <= 56000) { -+ a = 0x00; b = 0x00; c = 0x00; -+ } else if (freq_KHz <= 64000) { -+ a = 0x10; b = 0x01; c = 0x08; -+ } else if (freq_KHz <= 72000) { -+ a = 0x20; b = 0x02; c = 0x10; -+ } else if (freq_KHz <= 80000) { -+ a = 0x30; b = 0x03; c = 0x18; -+ } else if (freq_KHz <= 88000) { -+ a = 0x40; b = 0x04; c = 0x20; -+ } else if (freq_KHz <= 96000) { -+ a = 0x50; b = 0x05; c = 0x28; -+ } else if (freq_KHz <= 104000) { -+ a = 0x60; b = 0x06; c = 0x30; -+ } else { -+ a = 0x70; b = 0x07; c = 0x38; -+ } -+ _mt_fe_tn_set_reg(state, 0x58, 0x9b); -+ _mt_fe_tn_set_reg(state, 0x59, a); -+ _mt_fe_tn_set_reg(state, 0x5d, b); -+ _mt_fe_tn_set_reg(state, 0x5e, c); -+ _mt_fe_tn_set_reg(state, 0x5a, 0x75); -+ _mt_fe_tn_set_reg(state, 0x73, 0x0c); -+ } else { /* if (freq_KHz > 112000) */ -+ _mt_fe_tn_set_reg(state, 0x58, 0x7b); -+ if (freq_KHz <= 304000) { -+ if (freq_KHz <= 136000) { -+ _mt_fe_tn_set_reg(state, 0x5e, 0x40); -+ } else if (freq_KHz <= 160000) { -+ _mt_fe_tn_set_reg(state, 0x5e, 0x48); -+ } else if (freq_KHz <= 184000) { -+ _mt_fe_tn_set_reg(state, 0x5e, 0x50); -+ } else if (freq_KHz <= 208000) { -+ _mt_fe_tn_set_reg(state, 0x5e, 0x58); -+ } else if (freq_KHz <= 232000) { -+ _mt_fe_tn_set_reg(state, 0x5e, 0x60); -+ } else if (freq_KHz <= 256000) { -+ _mt_fe_tn_set_reg(state, 0x5e, 0x68); -+ } else if (freq_KHz <= 280000) { -+ _mt_fe_tn_set_reg(state, 0x5e, 0x70); -+ } else { /* if (freq_KHz <= 304000) */ -+ _mt_fe_tn_set_reg(state, 0x5e, 0x78); -+ } -+ if (freq_KHz <= 171000) { -+ _mt_fe_tn_set_reg(state, 0x73, 0x08); -+ } else if (freq_KHz <= 211000) { -+ _mt_fe_tn_set_reg(state, 0x73, 0x0a); -+ } else { -+ _mt_fe_tn_set_reg(state, 0x73, 0x0e); -+ } -+ } else { /* if (freq_KHz > 304000) */ -+ _mt_fe_tn_set_reg(state, 0x5e, 0x88); -+ if (freq_KHz <= 400000) { -+ _mt_fe_tn_set_reg(state, 0x73, 0x0c); -+ } else if (freq_KHz <= 450000) { -+ _mt_fe_tn_set_reg(state, 0x73, 0x09); -+ } else if (freq_KHz <= 550000) { -+ _mt_fe_tn_set_reg(state, 0x73, 0x0e); -+ } else if (freq_KHz <= 650000) { -+ _mt_fe_tn_set_reg(state, 0x73, 0x0d); -+ } else { /*if (freq_KHz > 650000) */ -+ _mt_fe_tn_set_reg(state, 0x73, 0x0e); -+ } -+ } -+ } -+ if (freq_KHz > 800000) -+ _mt_fe_tn_set_reg(state, 0x87, 0x24); -+ else if (freq_KHz > 700000) -+ _mt_fe_tn_set_reg(state, 0x87, 0x34); -+ else if (freq_KHz > 500000) -+ _mt_fe_tn_set_reg(state, 0x87, 0x44); -+ else if (freq_KHz > 300000) -+ _mt_fe_tn_set_reg(state, 0x87, 0x43); -+ else if (freq_KHz > 220000) -+ _mt_fe_tn_set_reg(state, 0x87, 0x54); -+ else if (freq_KHz > 110000) -+ _mt_fe_tn_set_reg(state, 0x87, 0x14); -+ else -+ _mt_fe_tn_set_reg(state, 0x87, 0x54); -+ if (freq_KHz > 600000) -+ _mt_fe_tn_set_reg(state, 0x6a, 0x53); -+ else if (freq_KHz > 500000) -+ _mt_fe_tn_set_reg(state, 0x6a, 0x57); -+ else -+ _mt_fe_tn_set_reg(state, 0x6a, 0x59); -+ if (freq_KHz < 200000) { -+ _mt_fe_tn_set_reg(state, 0x20, 0x5d); -+ } else if (freq_KHz < 500000) { -+ _mt_fe_tn_set_reg(state, 0x20, 0x7d); -+ } else { -+ _mt_fe_tn_set_reg(state, 0x20, 0xfd); -+ } /* end of 0xD1 */ -+ } else if (state->tuner_mtt == 0xE1) { /* E1 */ -+ if (freq_KHz <= 112000) { /* 123MHz */ -+ if (freq_KHz <= 56000) { -+ _mt_fe_tn_set_reg(state, 0x5c, 0x01); -+ } else if (freq_KHz <= 64000) { -+ _mt_fe_tn_set_reg(state, 0x5c, 0x09); -+ } else if (freq_KHz <= 72000) { -+ _mt_fe_tn_set_reg(state, 0x5c, 0x11); -+ } else if (freq_KHz <= 80000) { -+ _mt_fe_tn_set_reg(state, 0x5c, 0x19); -+ } else if (freq_KHz <= 88000) { -+ _mt_fe_tn_set_reg(state, 0x5c, 0x21); -+ } else if (freq_KHz <= 96000) { -+ _mt_fe_tn_set_reg(state, 0x5c, 0x29); -+ } else if (freq_KHz <= 104000) { -+ _mt_fe_tn_set_reg(state, 0x5c, 0x31); -+ } else { /* if (freq_KHz <= 112000) */ -+ _mt_fe_tn_set_reg(state, 0x5c, 0x39); -+ } -+ _mt_fe_tn_set_reg(state, 0x5b, 0x30); -+ } else { /* if (freq_KHz > 112000) */ -+ if (freq_KHz <= 304000) { -+ if (freq_KHz <= 136000) { -+ _mt_fe_tn_set_reg(state, 0x5c, 0x41); -+ } else if (freq_KHz <= 160000) { -+ _mt_fe_tn_set_reg(state, 0x5c, 0x49); -+ } else if (freq_KHz <= 184000) { -+ _mt_fe_tn_set_reg(state, 0x5c, 0x51); -+ } else if (freq_KHz <= 208000) { -+ _mt_fe_tn_set_reg(state, 0x5c, 0x59); -+ } else if (freq_KHz <= 232000) { -+ _mt_fe_tn_set_reg(state, 0x5c, 0x61); -+ } else if (freq_KHz <= 256000) { -+ _mt_fe_tn_set_reg(state, 0x5c, 0x69); -+ } else if (freq_KHz <= 280000) { -+ _mt_fe_tn_set_reg(state, 0x5c, 0x71); -+ } else { /* if (freq_KHz <= 304000) */ -+ _mt_fe_tn_set_reg(state, 0x5c, 0x79); -+ } -+ if (freq_KHz <= 150000) { -+ _mt_fe_tn_set_reg(state, 0x5b, 0x28); -+ } else if (freq_KHz <= 256000) { -+ _mt_fe_tn_set_reg(state, 0x5b, 0x29); -+ } else { -+ _mt_fe_tn_set_reg(state, 0x5b, 0x2a); -+ } -+ } else { /* if (freq_KHz > 304000) */ -+ if (freq_KHz <= 400000) { -+ _mt_fe_tn_set_reg(state, 0x5c, 0x89); -+ } else if (freq_KHz <= 450000) { -+ _mt_fe_tn_set_reg(state, 0x5c, 0x91); -+ } else if (freq_KHz <= 650000) { -+ _mt_fe_tn_set_reg(state, 0x5c, 0x98); -+ } else if (freq_KHz <= 850000) { -+ _mt_fe_tn_set_reg(state, 0x5c, 0xa0); -+ } else { -+ _mt_fe_tn_set_reg(state, 0x5c, 0xa8); -+ } -+ _mt_fe_tn_set_reg(state, 0x5b, 0x08); -+ } -+ } -+ } /* end of 0xE1 */ -+ return 0; -+} -+ -+static int _mt_fe_tn_cali_PLL_tc2800(struct dvbsky_m88dc2800_state *state, -+ u32 freq_KHz, -+ u32 cali_freq_thres_div2, -+ u32 cali_freq_thres_div3r, -+ u32 cali_freq_thres_div3) -+{ -+ s32 N, F, MUL; -+ u8 buf, tmp, tmp2; -+ s32 M; -+ const s32 crystal_KHz = state->tuner_crystal; -+ if (state->tuner_mtt == 0xD1) { -+ M = state->tuner_crystal / 4000; -+ if (freq_KHz > cali_freq_thres_div2) { -+ MUL = 4; -+ tmp = 2; -+ } else if (freq_KHz > 300000) { -+ MUL = 8; -+ tmp = 3; -+ } else if (freq_KHz > (cali_freq_thres_div2 / 2)) { -+ MUL = 8; -+ tmp = 4; -+ } else if (freq_KHz > (cali_freq_thres_div2 / 4)) { -+ MUL = 16; -+ tmp = 5; -+ } else if (freq_KHz > (cali_freq_thres_div2 / 8)) { -+ MUL = 32; -+ tmp = 6; -+ } else if (freq_KHz > (cali_freq_thres_div2 / 16)) { -+ MUL = 64; -+ tmp = 7; -+ } else { /* invalid */ -+ MUL = 0; -+ tmp = 0; -+ return 1; -+ } -+ } else if (state->tuner_mtt == 0xE1) { -+ M = state->tuner_crystal / 1000; -+ _mt_fe_tn_set_reg(state, 0x30, 0xff); -+ _mt_fe_tn_set_reg(state, 0x32, 0xe0); -+ _mt_fe_tn_set_reg(state, 0x33, 0x86); -+ _mt_fe_tn_set_reg(state, 0x37, 0x70); -+ _mt_fe_tn_set_reg(state, 0x38, 0x20); -+ _mt_fe_tn_set_reg(state, 0x39, 0x18); -+ _mt_fe_tn_set_reg(state, 0x89, 0x83); -+ if (freq_KHz > cali_freq_thres_div2) { -+ M = M / 4; -+ MUL = 4; -+ tmp = 2; -+ tmp2 = M + 16; /* 48 */ -+ } else if (freq_KHz > cali_freq_thres_div3r) { -+ M = M / 3; -+ MUL = 6; -+ tmp = 2; -+ tmp2 = M + 32; /* 32 */ -+ } else if (freq_KHz > cali_freq_thres_div3) { -+ M = M / 3; -+ MUL = 6; -+ tmp = 2; -+ tmp2 = M; /* 16 */ -+ } else if (freq_KHz > 304000) { -+ M = M / 4; -+ MUL = 8; -+ tmp = 3; -+ tmp2 = M + 16; /* 48 */ -+ } else if (freq_KHz > (cali_freq_thres_div2 / 2)) { -+ M = M / 4; -+ MUL = 8; -+ tmp = 4; -+ tmp2 = M + 16; /* 48 */ -+ } else if (freq_KHz > (cali_freq_thres_div3r / 2)) { -+ M = M / 3; -+ MUL = 12; -+ tmp = 4; -+ tmp2 = M + 32; /* 32 */ -+ } else if (freq_KHz > (cali_freq_thres_div3 / 2)) { -+ M = M / 3; -+ MUL = 12; -+ tmp = 4; -+ tmp2 = M; /* 16 */ -+ } else if (freq_KHz > (cali_freq_thres_div2 / 4)) { -+ M = M / 4; -+ MUL = 16; -+ tmp = 5; -+ tmp2 = M + 16; /* 48 */ -+ } else if (freq_KHz > (cali_freq_thres_div3r / 4)) { -+ M = M / 3; -+ MUL = 24; -+ tmp = 5; -+ tmp2 = M + 32; /* 32 */ -+ } else if (freq_KHz > (cali_freq_thres_div3 / 4)) { -+ M = M / 3; -+ MUL = 24; -+ tmp = 5; -+ tmp2 = M; /* 16 */ -+ } else if (freq_KHz > (cali_freq_thres_div2 / 8)) { -+ M = M / 4; -+ MUL = 32; -+ tmp = 6; -+ tmp2 = M + 16; /* 48 */ -+ } else if (freq_KHz > (cali_freq_thres_div3r / 8)) { -+ M = M / 3; -+ MUL = 48; -+ tmp = 6; -+ tmp2 = M + 32; /* 32 */ -+ } else if (freq_KHz > (cali_freq_thres_div3 / 8)) { -+ M = M / 3; -+ MUL = 48; -+ tmp = 6; -+ tmp2 = M; /* 16 */ -+ } else if (freq_KHz > (cali_freq_thres_div2 / 16)) { -+ M = M / 4; -+ MUL = 64; -+ tmp = 7; -+ tmp2 = M + 16; /* 48 */ -+ } else if (freq_KHz > (cali_freq_thres_div3r / 16)) { -+ M = M / 3; -+ MUL = 96; -+ tmp = 7; -+ tmp2 = M + 32; /* 32 */ -+ } else if (freq_KHz > (cali_freq_thres_div3 / 16)) { -+ M = M / 3; -+ MUL = 96; -+ tmp = 7; -+ tmp2 = M; /* 16 */ -+ } else { /* invalid */ -+ M = M / 4; -+ MUL = 0; -+ tmp = 0; -+ tmp2 = 48; -+ return 1; -+ } -+ if (freq_KHz == 291000) { -+ M = state->tuner_crystal / 1000 / 3; -+ MUL = 12; -+ tmp = 4; -+ tmp2 = M + 32; /* 32 */ -+ } -+ /* -+ if (freq_KHz == 578000) { -+ M = state->tuner_crystal / 1000 / 4; -+ MUL = 4; -+ tmp = 2; -+ tmp2 = M + 16; // 48 -+ } -+ */ -+ if (freq_KHz == 690000) { -+ M = state->tuner_crystal / 1000 / 3; -+ MUL = 4; -+ tmp = 2; -+ tmp2 = M + 16; /* 48 */ -+ } -+ _mt_fe_tn_get_reg(state, 0x33, &buf); -+ buf &= 0xc0; -+ buf += tmp2; -+ _mt_fe_tn_set_reg(state, 0x33, buf); -+ } else { -+ return 1; -+ } -+ _mt_fe_tn_get_reg(state, 0x39, &buf); -+ buf &= 0xf8; -+ buf += tmp; -+ _mt_fe_tn_set_reg(state, 0x39, buf); -+ N = (freq_KHz * MUL * M / crystal_KHz) / 2 * 2 - 256; -+ buf = (N >> 8) & 0xcf; -+ if (state->tuner_mtt == 0xE1) { -+ buf |= 0x30; -+ } -+ _mt_fe_tn_set_reg(state, 0x34, buf); -+ buf = N & 0xff; -+ _mt_fe_tn_set_reg(state, 0x35, buf); -+ F = ((freq_KHz * MUL * M / (crystal_KHz / 1000) / 2) - -+ (freq_KHz * MUL * M / crystal_KHz / 2 * 1000)) * 64 / 1000; -+ buf = F & 0xff; -+ _mt_fe_tn_set_reg(state, 0x36, buf); -+ if (F == 0) { -+ if (state->tuner_mtt == 0xD1) { -+ _mt_fe_tn_set_reg(state, 0x3d, 0xca); -+ } else if (state->tuner_mtt == 0xE1) { -+ _mt_fe_tn_set_reg(state, 0x3d, 0xfe); -+ } else { -+ return 1; -+ } -+ _mt_fe_tn_set_reg(state, 0x3e, 0x9c); -+ _mt_fe_tn_set_reg(state, 0x3f, 0x34); -+ } -+ if (F > 0) { -+ if (state->tuner_mtt == 0xD1) { -+ if ((F == 32) || (F == 16) || (F == 48)) { -+ _mt_fe_tn_set_reg(state, 0x3e, 0xa4); -+ _mt_fe_tn_set_reg(state, 0x3d, 0x4a); -+ _mt_fe_tn_set_reg(state, 0x3f, 0x36); -+ } else { -+ _mt_fe_tn_set_reg(state, 0x3e, 0xa4); -+ _mt_fe_tn_set_reg(state, 0x3d, 0x4a); -+ _mt_fe_tn_set_reg(state, 0x3f, 0x36); -+ } -+ } else if (state->tuner_mtt == 0xE1) { -+ _mt_fe_tn_set_reg(state, 0x3e, 0xa4); -+ _mt_fe_tn_set_reg(state, 0x3d, 0x7e); -+ _mt_fe_tn_set_reg(state, 0x3f, 0x36); -+ _mt_fe_tn_set_reg(state, 0x89, 0x84); -+ _mt_fe_tn_get_reg(state, 0x39, &buf); -+ buf = buf & 0x1f; -+ _mt_fe_tn_set_reg(state, 0x39, buf); -+ _mt_fe_tn_get_reg(state, 0x32, &buf); -+ buf = buf | 0x02; -+ _mt_fe_tn_set_reg(state, 0x32, buf); -+ } else { -+ return 1; -+ } -+ } -+ _mt_fe_tn_set_reg(state, 0x41, 0x00); -+ if (state->tuner_mtt == 0xD1) { -+ msleep(5); -+ } else if (state->tuner_mtt == 0xE1) { -+ msleep(2); -+ } else { -+ return 1; -+ } -+ _mt_fe_tn_set_reg(state, 0x41, 0x02); -+ _mt_fe_tn_set_reg(state, 0x30, 0x7f); -+ _mt_fe_tn_set_reg(state, 0x30, 0xff); -+ _mt_fe_tn_set_reg(state, 0x31, 0x80); -+ _mt_fe_tn_set_reg(state, 0x31, 0x00); -+ -+ return 0; -+} -+ -+static int _mt_fe_tn_set_PLL_freq_tc2800(struct dvbsky_m88dc2800_state *state) -+{ -+ u8 buf, buf1; -+ u32 freq_thres_div2_KHz, freq_thres_div3r_KHz, -+ freq_thres_div3_KHz; -+ const u32 freq_KHz = state->tuner_freq; -+ if (state->tuner_mtt == 0xD1) { -+ _mt_fe_tn_set_reg(state, 0x32, 0xe1); -+ _mt_fe_tn_set_reg(state, 0x33, 0xa6); -+ _mt_fe_tn_set_reg(state, 0x37, 0x7f); -+ _mt_fe_tn_set_reg(state, 0x38, 0x20); -+ _mt_fe_tn_set_reg(state, 0x39, 0x18); -+ _mt_fe_tn_set_reg(state, 0x40, 0x40); -+ freq_thres_div2_KHz = 520000; -+ _mt_fe_tn_cali_PLL_tc2800(state, freq_KHz, -+ freq_thres_div2_KHz, 0, 0); -+ msleep(5); -+ _mt_fe_tn_get_reg(state, 0x3a, &buf); -+ buf1 = buf; -+ buf = buf & 0x03; -+ buf1 = buf1 & 0x01; -+ if ((buf1 == 0) || (buf == 3)) { -+ freq_thres_div2_KHz = 420000; -+ _mt_fe_tn_cali_PLL_tc2800(state, freq_KHz, -+ freq_thres_div2_KHz, 0, -+ 0); -+ msleep(5); -+ _mt_fe_tn_get_reg(state, 0x3a, &buf); -+ buf = buf & 0x07; -+ if (buf == 5) { -+ freq_thres_div2_KHz = 520000; -+ _mt_fe_tn_cali_PLL_tc2800(state, freq_KHz, -+ freq_thres_div2_KHz, -+ 0, 0); -+ msleep(5); -+ } -+ } -+ _mt_fe_tn_get_reg(state, 0x38, &buf); -+ _mt_fe_tn_set_reg(state, 0x38, buf); -+ _mt_fe_tn_get_reg(state, 0x32, &buf); -+ buf = buf | 0x10; -+ _mt_fe_tn_set_reg(state, 0x32, buf); -+ _mt_fe_tn_set_reg(state, 0x30, 0x7f); -+ _mt_fe_tn_set_reg(state, 0x30, 0xff); -+ _mt_fe_tn_get_reg(state, 0x32, &buf); -+ buf = buf & 0xdf; -+ _mt_fe_tn_set_reg(state, 0x32, buf); -+ _mt_fe_tn_set_reg(state, 0x40, 0x0); -+ _mt_fe_tn_set_reg(state, 0x30, 0x7f); -+ _mt_fe_tn_set_reg(state, 0x30, 0xff); -+ _mt_fe_tn_set_reg(state, 0x31, 0x80); -+ _mt_fe_tn_set_reg(state, 0x31, 0x00); -+ msleep(5); -+ _mt_fe_tn_get_reg(state, 0x39, &buf); -+ buf = buf >> 5; -+ if (buf < 5) { -+ _mt_fe_tn_get_reg(state, 0x39, &buf); -+ buf = buf | 0xa0; -+ buf = buf & 0xbf; -+ _mt_fe_tn_set_reg(state, 0x39, buf); -+ _mt_fe_tn_get_reg(state, 0x32, &buf); -+ buf = buf | 0x02; -+ _mt_fe_tn_set_reg(state, 0x32, buf); -+ } -+ _mt_fe_tn_get_reg(state, 0x37, &buf); -+ if (buf > 0x70) { -+ buf = 0x7f; -+ _mt_fe_tn_set_reg(state, 0x40, 0x40); -+ } -+ _mt_fe_tn_set_reg(state, 0x37, buf); -+ _mt_fe_tn_get_reg(state, 0x38, &buf); -+ if (buf < 0x0f) { -+ buf = (buf & 0x0f) << 2; -+ buf = buf + 0x0f; -+ _mt_fe_tn_set_reg(state, 0x37, buf); -+ } else if (buf < 0x1f) { -+ buf = buf + 0x0f; -+ _mt_fe_tn_set_reg(state, 0x37, buf); -+ } -+ _mt_fe_tn_get_reg(state, 0x32, &buf); -+ buf = (buf | 0x20) & 0xef; -+ _mt_fe_tn_set_reg(state, 0x32, buf); -+ _mt_fe_tn_set_reg(state, 0x41, 0x00); -+ msleep(5); -+ _mt_fe_tn_set_reg(state, 0x41, 0x02); -+ } else if (state->tuner_mtt == 0xE1) { -+ freq_thres_div2_KHz = 580000; -+ freq_thres_div3r_KHz = 500000; -+ freq_thres_div3_KHz = 440000; -+ _mt_fe_tn_cali_PLL_tc2800(state, freq_KHz, -+ freq_thres_div2_KHz, -+ freq_thres_div3r_KHz, -+ freq_thres_div3_KHz); -+ msleep(3); -+ _mt_fe_tn_get_reg(state, 0x38, &buf); -+ _mt_fe_tn_set_reg(state, 0x38, buf); -+ _mt_fe_tn_set_reg(state, 0x30, 0x7f); -+ _mt_fe_tn_set_reg(state, 0x30, 0xff); -+ _mt_fe_tn_set_reg(state, 0x31, 0x80); -+ _mt_fe_tn_set_reg(state, 0x31, 0x00); -+ msleep(3); -+ _mt_fe_tn_get_reg(state, 0x38, &buf); -+ _mt_fe_tn_set_reg(state, 0x38, buf); -+ _mt_fe_tn_get_reg(state, 0x32, &buf); -+ buf = buf | 0x10; -+ _mt_fe_tn_set_reg(state, 0x32, buf); -+ _mt_fe_tn_set_reg(state, 0x30, 0x7f); -+ _mt_fe_tn_set_reg(state, 0x30, 0xff); -+ _mt_fe_tn_get_reg(state, 0x32, &buf); -+ buf = buf & 0xdf; -+ _mt_fe_tn_set_reg(state, 0x32, buf); -+ _mt_fe_tn_set_reg(state, 0x31, 0x80); -+ _mt_fe_tn_set_reg(state, 0x31, 0x00); -+ msleep(3); -+ _mt_fe_tn_get_reg(state, 0x37, &buf); -+ _mt_fe_tn_set_reg(state, 0x37, buf); -+ /* -+ if ((freq_KHz == 802000) || (freq_KHz == 826000)) { -+ _mt_fe_tn_set_reg(state, 0x37, 0x5e); -+ } -+ */ -+ _mt_fe_tn_get_reg(state, 0x32, &buf); -+ buf = (buf & 0xef) | 0x30; -+ _mt_fe_tn_set_reg(state, 0x32, buf); -+ _mt_fe_tn_set_reg(state, 0x41, 0x00); -+ msleep(2); -+ _mt_fe_tn_set_reg(state, 0x41, 0x02); -+ } else { -+ return 1; -+ } -+ return 0; -+} -+ -+static int _mt_fe_tn_set_BB_tc2800(struct dvbsky_m88dc2800_state *state) -+{ -+ return 0; -+} -+ -+ static int _mt_fe_tn_set_appendix_tc2800(struct dvbsky_m88dc2800_state *state) -+ -+{ -+ u8 buf; -+ const u32 freq_KHz = state->tuner_freq; -+ if (state->tuner_mtt == 0xD1) { -+ if ((freq_KHz == 123000) || (freq_KHz == 147000) || -+ (freq_KHz == 171000) || (freq_KHz == 195000)) { -+ _mt_fe_tn_set_reg(state, 0x20, 0x1b); -+ } -+ if ((freq_KHz == 371000) || (freq_KHz == 419000) || -+ (freq_KHz == 610000) || (freq_KHz == 730000) || -+ (freq_KHz == 754000) || (freq_KHz == 826000)) { -+ _mt_fe_tn_get_reg(state, 0x0d, &buf); -+ _mt_fe_tn_set_reg(state, 0x0d, (u8) (buf + 1)); -+ } -+ if ((freq_KHz == 522000) || (freq_KHz == 578000) || -+ (freq_KHz == 634000) || (freq_KHz == 690000) || -+ (freq_KHz == 834000)) { -+ _mt_fe_tn_get_reg(state, 0x0d, &buf); -+ _mt_fe_tn_set_reg(state, 0x0d, (u8) (buf - 1)); -+ } -+ } else if (state->tuner_mtt == 0xE1) { -+ _mt_fe_tn_set_reg(state, 0x20, 0xfc); -+ if (freq_KHz == 123000 || freq_KHz == 147000 || -+ freq_KHz == 171000 || freq_KHz == 195000 || -+ freq_KHz == 219000 || freq_KHz == 267000 || -+ freq_KHz == 291000 || freq_KHz == 339000 || -+ freq_KHz == 387000 || freq_KHz == 435000 || -+ freq_KHz == 482000 || freq_KHz == 530000 || -+ freq_KHz == 722000 || -+ (state->tuner_custom_cfg == 1 && freq_KHz == 315000)) { -+ _mt_fe_tn_set_reg(state, 0x20, 0x5c); -+ } -+ } -+ return 0; -+} -+ -+ static int _mt_fe_tn_set_DAC_tc2800(struct dvbsky_m88dc2800_state *state) -+{ -+ u8 buf, tempnumber; -+ s32 N; -+ s32 f1f2number, f1, f2, delta1, Totalnum1; -+ s32 cntT, cntin, NCOI, z0, z1, z2, tmp; -+ u32 fc, fadc, fsd, f2d; -+ u32 FreqTrue108_Hz; -+ s32 M = state->tuner_crystal / 4000; -+ /* const u8 bandwidth = state->tuner_bandwidth; */ -+ const u16 DAC_fre = 108; -+ const u32 crystal_KHz = state->tuner_crystal; -+ const u32 DACFreq_KHz = state->tuner_dac; -+ const u32 freq_KHz = state->tuner_freq; -+ -+ if (state->tuner_mtt == 0xE1) { -+ _mt_fe_tn_get_reg(state, 0x33, &buf); -+ M = buf & 0x0f; -+ if (M == 0) -+ M = 6; -+ } -+ _mt_fe_tn_get_reg(state, 0x34, &buf); -+ N = buf & 0x07; -+ _mt_fe_tn_get_reg(state, 0x35, &buf); -+ N = (N << 8) + buf; -+ buf = ((N + 256) * crystal_KHz / M / DAC_fre + 500) / 1000; -+ if (state->tuner_mtt == 0xE1) { -+ _mt_fe_tn_set_appendix_tc2800(state); -+ if (freq_KHz == 187000 || freq_KHz == 195000 || -+ freq_KHz == 131000 || freq_KHz == 211000 || -+ freq_KHz == 219000 || freq_KHz == 227000 || -+ freq_KHz == 267000 || freq_KHz == 299000 || -+ freq_KHz == 347000 || freq_KHz == 363000 || -+ freq_KHz == 395000 || freq_KHz == 403000 || -+ freq_KHz == 435000 || freq_KHz == 482000 || -+ freq_KHz == 474000 || freq_KHz == 490000 || -+ freq_KHz == 610000 || freq_KHz == 642000 || -+ freq_KHz == 666000 || freq_KHz == 722000 || -+ freq_KHz == 754000 || -+ ((freq_KHz == 379000 || freq_KHz == 467000 || -+ freq_KHz == 762000) && state->tuner_custom_cfg != 1)) { -+ buf = buf + 1; -+ } -+ if (freq_KHz == 123000 || freq_KHz == 139000 || -+ freq_KHz == 147000 || freq_KHz == 171000 || -+ freq_KHz == 179000 || freq_KHz == 203000 || -+ freq_KHz == 235000 || freq_KHz == 251000 || -+ freq_KHz == 259000 || freq_KHz == 283000 || -+ freq_KHz == 331000 || freq_KHz == 363000 || -+ freq_KHz == 371000 || freq_KHz == 387000 || -+ freq_KHz == 411000 || freq_KHz == 427000 || -+ freq_KHz == 443000 || freq_KHz == 451000 || -+ freq_KHz == 459000 || freq_KHz == 506000 || -+ freq_KHz == 514000 || freq_KHz == 538000 || -+ freq_KHz == 546000 || freq_KHz == 554000 || -+ freq_KHz == 562000 || freq_KHz == 570000 || -+ freq_KHz == 578000 || freq_KHz == 602000 || -+ freq_KHz == 626000 || freq_KHz == 658000 || -+ freq_KHz == 690000 || freq_KHz == 714000 || -+ freq_KHz == 746000 || freq_KHz == 522000 || -+ freq_KHz == 826000 || freq_KHz == 155000 || -+ freq_KHz == 530000 || -+ ((freq_KHz == 275000 || freq_KHz == 355000) && -+ state->tuner_custom_cfg != 1) || -+ ((freq_KHz == 467000 || freq_KHz == 762000 || -+ freq_KHz == 778000 || freq_KHz == 818000) && -+ state->tuner_custom_cfg == 1)) { -+ buf = buf - 1; -+ } -+ } -+ _mt_fe_tn_set_reg(state, 0x0e, buf); -+ _mt_fe_tn_set_reg(state, 0x0d, buf); -+ f1f2number = -+ (((DACFreq_KHz * M * buf) / crystal_KHz) << 16) / (N + 256) + -+ (((DACFreq_KHz * M * buf) % crystal_KHz) << 16) / ((N + 256) * -+ crystal_KHz); -+ _mt_fe_tn_set_reg(state, 0xf1, (f1f2number & 0xff00) >> 8); -+ _mt_fe_tn_set_reg(state, 0xf2, f1f2number & 0x00ff); -+ FreqTrue108_Hz = -+ (N + 256) * crystal_KHz / (M * buf) * 1000 + -+ (((N + 256) * crystal_KHz) % (M * buf)) * 1000 / (M * buf); -+ f1 = 4096; -+ fc = FreqTrue108_Hz; -+ fadc = fc / 4; -+ fsd = 27000000; -+ f2d = state->tuner_bandwidth * 1000 / 2 - 150; -+ f2 = (fsd / 250) * f2d / ((fc + 500) / 1000); -+ delta1 = ((f1 - f2) << 15) / f2; -+ Totalnum1 = ((f1 - f2) << 15) - delta1 * f2; -+ cntT = f2; -+ cntin = Totalnum1; -+ NCOI = delta1; -+ z0 = cntin; -+ z1 = cntT; -+ z2 = NCOI; -+ tempnumber = (z0 & 0xff00) >> 8; -+ _mt_fe_tn_set_reg(state, 0xc9, (u8) (tempnumber & 0x0f)); -+ tempnumber = (z0 & 0xff); -+ _mt_fe_tn_set_reg(state, 0xca, tempnumber); -+ tempnumber = (z1 & 0xff00) >> 8; -+ _mt_fe_tn_set_reg(state, 0xcb, tempnumber); -+ tempnumber = (z1 & 0xff); -+ _mt_fe_tn_set_reg(state, 0xcc, tempnumber); -+ tempnumber = (z2 & 0xff00) >> 8; -+ _mt_fe_tn_set_reg(state, 0xcd, tempnumber); -+ tempnumber = (z2 & 0xff); -+ _mt_fe_tn_set_reg(state, 0xce, tempnumber); -+ tmp = f1; -+ f1 = f2; -+ f2 = tmp / 2; -+ delta1 = ((f1 - f2) << 15) / f2; -+ Totalnum1 = ((f1 - f2) << 15) - delta1 * f2; -+ NCOI = (f1 << 15) / f2 - (1 << 15); -+ cntT = f2; -+ cntin = Totalnum1; -+ z0 = cntin; -+ z1 = cntT; -+ z2 = NCOI; -+ tempnumber = (z0 & 0xff00) >> 8; -+ _mt_fe_tn_set_reg(state, 0xd9, (u8) (tempnumber & 0x0f)); -+ tempnumber = (z0 & 0xff); -+ _mt_fe_tn_set_reg(state, 0xda, tempnumber); -+ tempnumber = (z1 & 0xff00) >> 8; -+ _mt_fe_tn_set_reg(state, 0xdb, tempnumber); -+ tempnumber = (z1 & 0xff); -+ _mt_fe_tn_set_reg(state, 0xdc, tempnumber); -+ tempnumber = (z2 & 0xff00) >> 8; -+ _mt_fe_tn_set_reg(state, 0xdd, tempnumber); -+ tempnumber = (z2 & 0xff); -+ _mt_fe_tn_set_reg(state, 0xde, tempnumber); -+ -+ return 0; -+} -+ -+static int _mt_fe_tn_preset_tc2800(struct dvbsky_m88dc2800_state *state) -+{ -+ if (state->tuner_mtt == 0xD1) { -+ _mt_fe_tn_set_reg(state, 0x19, 0x4a); -+ _mt_fe_tn_set_reg(state, 0x1b, 0x4b); -+ _mt_fe_tn_set_reg(state, 0x04, 0x04); -+ _mt_fe_tn_set_reg(state, 0x17, 0x0d); -+ _mt_fe_tn_set_reg(state, 0x62, 0x6c); -+ _mt_fe_tn_set_reg(state, 0x63, 0xf4); -+ _mt_fe_tn_set_reg(state, 0x1f, 0x0e); -+ _mt_fe_tn_set_reg(state, 0x6b, 0xf4); -+ _mt_fe_tn_set_reg(state, 0x14, 0x01); -+ _mt_fe_tn_set_reg(state, 0x5a, 0x75); -+ _mt_fe_tn_set_reg(state, 0x66, 0x74); -+ _mt_fe_tn_set_reg(state, 0x72, 0xe0); -+ _mt_fe_tn_set_reg(state, 0x70, 0x07); -+ _mt_fe_tn_set_reg(state, 0x15, 0x7b); -+ _mt_fe_tn_set_reg(state, 0x55, 0x71); -+ _mt_fe_tn_set_reg(state, 0x75, 0x55); -+ _mt_fe_tn_set_reg(state, 0x76, 0xac); -+ _mt_fe_tn_set_reg(state, 0x77, 0x6c); -+ _mt_fe_tn_set_reg(state, 0x78, 0x8b); -+ _mt_fe_tn_set_reg(state, 0x79, 0x42); -+ _mt_fe_tn_set_reg(state, 0x7a, 0xd2); -+ _mt_fe_tn_set_reg(state, 0x81, 0x01); -+ _mt_fe_tn_set_reg(state, 0x82, 0x00); -+ _mt_fe_tn_set_reg(state, 0x82, 0x02); -+ _mt_fe_tn_set_reg(state, 0x82, 0x04); -+ _mt_fe_tn_set_reg(state, 0x82, 0x06); -+ _mt_fe_tn_set_reg(state, 0x82, 0x08); -+ _mt_fe_tn_set_reg(state, 0x82, 0x09); -+ _mt_fe_tn_set_reg(state, 0x82, 0x29); -+ _mt_fe_tn_set_reg(state, 0x82, 0x49); -+ _mt_fe_tn_set_reg(state, 0x82, 0x58); -+ _mt_fe_tn_set_reg(state, 0x82, 0x59); -+ _mt_fe_tn_set_reg(state, 0x82, 0x98); -+ _mt_fe_tn_set_reg(state, 0x82, 0x99); -+ _mt_fe_tn_set_reg(state, 0x10, 0x05); -+ _mt_fe_tn_set_reg(state, 0x10, 0x0d); -+ _mt_fe_tn_set_reg(state, 0x11, 0x95); -+ _mt_fe_tn_set_reg(state, 0x11, 0x9d); -+ if (state->tuner_loopthrough != 0) { -+ _mt_fe_tn_set_reg(state, 0x67, 0x25); -+ } else { -+ _mt_fe_tn_set_reg(state, 0x67, 0x05); -+ } -+ } else if (state->tuner_mtt == 0xE1) { -+ _mt_fe_tn_set_reg(state, 0x1b, 0x47); -+ if (state->tuner_mode == 0) { /* DVB-C */ -+ _mt_fe_tn_set_reg(state, 0x66, 0x74); -+ _mt_fe_tn_set_reg(state, 0x62, 0x2c); -+ _mt_fe_tn_set_reg(state, 0x63, 0x54); -+ _mt_fe_tn_set_reg(state, 0x68, 0x0b); -+ _mt_fe_tn_set_reg(state, 0x14, 0x00); -+ } else { /* CTTB */ -+ _mt_fe_tn_set_reg(state, 0x66, 0x74); -+ _mt_fe_tn_set_reg(state, 0x62, 0x0c); -+ _mt_fe_tn_set_reg(state, 0x63, 0x54); -+ _mt_fe_tn_set_reg(state, 0x68, 0x0b); -+ _mt_fe_tn_set_reg(state, 0x14, 0x05); -+ } -+ _mt_fe_tn_set_reg(state, 0x6f, 0x00); -+ _mt_fe_tn_set_reg(state, 0x84, 0x04); -+ _mt_fe_tn_set_reg(state, 0x5e, 0xbe); -+ _mt_fe_tn_set_reg(state, 0x87, 0x07); -+ _mt_fe_tn_set_reg(state, 0x8a, 0x1f); -+ _mt_fe_tn_set_reg(state, 0x8b, 0x1f); -+ _mt_fe_tn_set_reg(state, 0x88, 0x30); -+ _mt_fe_tn_set_reg(state, 0x58, 0x34); -+ _mt_fe_tn_set_reg(state, 0x61, 0x8c); -+ _mt_fe_tn_set_reg(state, 0x6a, 0x42); -+ } -+ return 0; -+} -+ -+static int mt_fe_tn_wakeup_tc2800(struct dvbsky_m88dc2800_state *state) -+{ -+ _mt_fe_tn_set_reg(state, 0x16, 0xb1); -+ _mt_fe_tn_set_reg(state, 0x09, 0x7d); -+ return 0; -+} -+ -+ static int mt_fe_tn_sleep_tc2800(struct dvbsky_m88dc2800_state *state) -+{ -+ _mt_fe_tn_set_reg(state, 0x16, 0xb0); -+ _mt_fe_tn_set_reg(state, 0x09, 0x6d); -+ return 0; -+} -+ -+ static int mt_fe_tn_init_tc2800(struct dvbsky_m88dc2800_state *state) -+{ -+ if (state->tuner_init_OK != 1) { -+ state->tuner_dev_addr = 0x61; /* TUNER_I2C_ADDR_TC2800 */ -+ state->tuner_freq = 650000; -+ state->tuner_qam = 0; -+ state->tuner_mode = 0; // 0: DVB-C, 1: CTTB -+ state->tuner_bandwidth = 8; -+ state->tuner_loopthrough = 0; -+ state->tuner_crystal = 24000; -+ state->tuner_dac = 7200; -+ state->tuner_mtt = 0x00; -+ state->tuner_custom_cfg = 0; -+ state->tuner_version = 30022; /* Driver version number */ -+ state->tuner_time = 12092611; -+ state->tuner_init_OK = 1; -+ } -+ _mt_fe_tn_set_reg(state, 0x2b, 0x46); -+ _mt_fe_tn_set_reg(state, 0x2c, 0x75); -+ if (state->tuner_mtt == 0x00) { -+ u8 tmp = 0; -+ _mt_fe_tn_get_reg(state, 0x01, &tmp); -+ printk(KERN_INFO "m88dc2800: tuner id = 0x%02x ", tmp); -+ switch (tmp) { -+ case 0x0d: -+ state->tuner_mtt = 0xD1; -+ break; -+ case 0x8e: -+ default: -+ state->tuner_mtt = 0xE1; -+ break; -+ } -+ } -+ return 0; -+} -+ -+ static int mt_fe_tn_set_freq_tc2800(struct dvbsky_m88dc2800_state *state, -+ u32 freq_KHz) -+{ -+ u8 buf; -+ u8 buf1; -+ -+ mt_fe_tn_init_tc2800(state); -+ state->tuner_freq = freq_KHz; -+ _mt_fe_tn_set_reg(state, 0x21, freq_KHz > 500000 ? 0xb9 : 0x99); -+ mt_fe_tn_wakeup_tc2800(state); -+ _mt_fe_tn_set_reg(state, 0x05, 0x7f); -+ _mt_fe_tn_set_reg(state, 0x06, 0xf8); -+ _mt_fe_tn_set_RF_front_tc2800(state); -+ _mt_fe_tn_set_PLL_freq_tc2800(state); -+ _mt_fe_tn_set_DAC_tc2800(state); -+ _mt_fe_tn_set_BB_tc2800(state); -+ _mt_fe_tn_preset_tc2800(state); -+ _mt_fe_tn_set_reg(state, 0x05, 0x00); -+ _mt_fe_tn_set_reg(state, 0x06, 0x00); -+ if (state->tuner_mtt == 0xD1) { -+ _mt_fe_tn_set_reg(state, 0x00, 0x01); -+ _mt_fe_tn_set_reg(state, 0x00, 0x00); -+ msleep(5); -+ _mt_fe_tn_set_reg(state, 0x41, 0x00); -+ msleep(5); -+ _mt_fe_tn_set_reg(state, 0x41, 0x02); -+ -+ _mt_fe_tn_get_reg(state, 0x69, &buf1); -+ buf1 = buf1 & 0x0f; -+ _mt_fe_tn_get_reg(state, 0x61, &buf); -+ buf = buf & 0x0f; -+ if (buf == 0x0c) -+ _mt_fe_tn_set_reg(state, 0x6a, 0x59); -+ if (buf1 > 0x02) { -+ if (freq_KHz > 600000) -+ _mt_fe_tn_set_reg(state, 0x66, 0x44); -+ else if (freq_KHz > 500000) -+ _mt_fe_tn_set_reg(state, 0x66, 0x64); -+ else -+ _mt_fe_tn_set_reg(state, 0x66, 0x74); -+ } -+ if (buf1 < 0x03) { -+ if (freq_KHz > 800000) -+ _mt_fe_tn_set_reg(state, 0x87, 0x64); -+ else if (freq_KHz > 600000) -+ _mt_fe_tn_set_reg(state, 0x87, 0x54); -+ else if (freq_KHz > 500000) -+ _mt_fe_tn_set_reg(state, 0x87, 0x54); -+ else if (freq_KHz > 300000) -+ _mt_fe_tn_set_reg(state, 0x87, 0x43); -+ else if (freq_KHz > 220000) -+ _mt_fe_tn_set_reg(state, 0x87, 0x54); -+ else if (freq_KHz > 110000) -+ _mt_fe_tn_set_reg(state, 0x87, 0x14); -+ else -+ _mt_fe_tn_set_reg(state, 0x87, 0x54); -+ msleep(5); -+ } else if (buf < 0x0c) { -+ if (freq_KHz > 800000) -+ _mt_fe_tn_set_reg(state, 0x87, 0x14); -+ else if (freq_KHz > 600000) -+ _mt_fe_tn_set_reg(state, 0x87, 0x14); -+ else if (freq_KHz > 500000) -+ _mt_fe_tn_set_reg(state, 0x87, 0x34); -+ else if (freq_KHz > 300000) -+ _mt_fe_tn_set_reg(state, 0x87, 0x43); -+ else if (freq_KHz > 220000) -+ _mt_fe_tn_set_reg(state, 0x87, 0x54); -+ else if (freq_KHz > 110000) -+ _mt_fe_tn_set_reg(state, 0x87, 0x14); -+ else -+ _mt_fe_tn_set_reg(state, 0x87, 0x54); -+ msleep(5); -+ } -+ } else if ((state->tuner_mtt == 0xE1)) { -+ _mt_fe_tn_set_reg(state, 0x00, 0x01); -+ _mt_fe_tn_set_reg(state, 0x00, 0x00); -+ msleep(20); -+ _mt_fe_tn_get_reg(state, 0x32, &buf); -+ buf = (buf & 0xef) | 0x28; -+ _mt_fe_tn_set_reg(state, 0x32, buf); -+ msleep(50); -+ _mt_fe_tn_get_reg(state, 0x38, &buf); -+ _mt_fe_tn_set_reg(state, 0x38, buf); -+ _mt_fe_tn_get_reg(state, 0x32, &buf); -+ buf = (buf & 0xf7) | 0x10; -+ _mt_fe_tn_set_reg(state, 0x32, buf); -+ msleep(10); -+ _mt_fe_tn_get_reg(state, 0x69, &buf); -+ buf = buf & 0x03; -+ _mt_fe_tn_set_reg(state, 0x2a, buf); -+ if (buf > 0) { -+ msleep(20); -+ _mt_fe_tn_get_reg(state, 0x84, &buf); -+ buf = buf & 0x1f; -+ _mt_fe_tn_set_reg(state, 0x68, 0x0a); -+ _mt_fe_tn_get_reg(state, 0x88, &buf1); -+ buf1 = buf1 & 0x1f; -+ if (buf <= buf1) -+ _mt_fe_tn_set_reg(state, 0x66, 0x44); -+ else -+ _mt_fe_tn_set_reg(state, 0x66, 0x74); -+ } else { -+ if (freq_KHz <= 600000) -+ _mt_fe_tn_set_reg(state, 0x68, 0x0c); -+ else -+ _mt_fe_tn_set_reg(state, 0x68, 0x0e); -+ _mt_fe_tn_set_reg(state, 0x30, 0xfb); -+ _mt_fe_tn_set_reg(state, 0x30, 0xff); -+ _mt_fe_tn_set_reg(state, 0x31, 0x04); -+ _mt_fe_tn_set_reg(state, 0x31, 0x00); -+ } -+ if (state->tuner_loopthrough != 0) { -+ _mt_fe_tn_get_reg(state, 0x28, &buf); -+ if (buf == 0) { -+ _mt_fe_tn_set_reg(state, 0x28, 0xff); -+ _mt_fe_tn_get_reg(state, 0x61, &buf); -+ buf = buf & 0x0f; -+ if (buf > 9) -+ _mt_fe_tn_set_reg(state, 0x67, 0x74); -+ else if (buf > 6) -+ _mt_fe_tn_set_reg(state, 0x67, 0x64); -+ else if (buf > 3) -+ _mt_fe_tn_set_reg(state, 0x67, 0x54); -+ else -+ _mt_fe_tn_set_reg(state, 0x67, 0x44); -+ } -+ } else { -+ _mt_fe_tn_set_reg(state, 0x67, 0x34); -+ } -+ } else { -+ return 1; -+ } -+ return 0; -+} -+ -+ -+/* -+static int mt_fe_tn_set_BB_filter_band_tc2800(struct dvbsky_m88dc2800_state *state, -+ u8 bandwidth) -+{ -+ u8 buf, tmp; -+ -+ _mt_fe_tn_get_reg(state, 0x53, &tmp); -+ -+ if (bandwidth == 6) -+ buf = 0x01 << 1; -+ else if (bandwidth == 7) -+ buf = 0x02 << 1; -+ else if (bandwidth == 8) -+ buf = 0x04 << 1; -+ else -+ buf = 0x04 << 1; -+ -+ tmp &= 0xf1; -+ tmp |= buf; -+ _mt_fe_tn_set_reg(state, 0x53, tmp); -+ state->tuner_bandwidth = bandwidth; -+ return 0; -+} -+*/ -+ -+static s32 mt_fe_tn_get_signal_strength_tc2800(struct dvbsky_m88dc2800_state -+ *state) -+{ -+ s32 level = -107; -+ s32 tmp1, tmp2, tmp3, tmp4, tmp5, tmp6; -+ s32 val1, val2, val; -+ s32 result2, result3, result4, result5, result6; -+ s32 append; -+ u8 tmp; -+ s32 freq_KHz = (s32) state->tuner_freq; -+ if (state->tuner_mtt == 0xD1) { -+ _mt_fe_tn_get_reg(state, 0x61, &tmp); -+ tmp1 = tmp & 0x0f; -+ _mt_fe_tn_get_reg(state, 0x69, &tmp); -+ tmp2 = tmp & 0x0f; -+ _mt_fe_tn_get_reg(state, 0x73, &tmp); -+ tmp3 = tmp & 0x07; -+ _mt_fe_tn_get_reg(state, 0x7c, &tmp); -+ tmp4 = (tmp >> 4) & 0x0f; -+ _mt_fe_tn_get_reg(state, 0x7b, &tmp); -+ tmp5 = tmp & 0x0f; -+ _mt_fe_tn_get_reg(state, 0x7f, &tmp); -+ tmp6 = (tmp >> 5) & 0x01; -+ if (tmp1 > 6) { -+ val1 = 0; -+ if (freq_KHz <= 200000) { -+ val2 = (tmp1 - 6) * 267; -+ } else if (freq_KHz <= 600000) { -+ val2 = (tmp1 - 6) * 280; -+ } else { -+ val2 = (tmp1 - 6) * 290; -+ } -+ val = val1 + val2; -+ } else { -+ if (tmp1 == 0) { -+ val1 = -550; -+ } else { -+ val1 = 0; -+ } -+ if ((tmp1 < 4) && (freq_KHz >= 506000)) { -+ val1 = -850; -+ } -+ val2 = 0; -+ val = val1 + val2; -+ } -+ if (freq_KHz <= 95000) { -+ result2 = tmp2 * 289; -+ } else if (freq_KHz <= 155000) { -+ result2 = tmp2 * 278; -+ } else if (freq_KHz <= 245000) { -+ result2 = tmp2 * 267; -+ } else if (freq_KHz <= 305000) { -+ result2 = tmp2 * 256; -+ } else if (freq_KHz <= 335000) { -+ result2 = tmp2 * 244; -+ } else if (freq_KHz <= 425000) { -+ result2 = tmp2 * 233; -+ } else if (freq_KHz <= 575000) { -+ result2 = tmp2 * 222; -+ } else if (freq_KHz <= 665000) { -+ result2 = tmp2 * 211; -+ } else { -+ result2 = tmp2 * 200; -+ } -+ result3 = (6 - tmp3) * 100; -+ result4 = 300 * tmp4; -+ result5 = 50 * tmp5; -+ result6 = 300 * tmp6; -+ if (freq_KHz < 105000) { -+ append = -450; -+ } else if (freq_KHz <= 227000) { -+ append = -4 * (freq_KHz / 1000 - 100) + 150; -+ } else if (freq_KHz <= 305000) { -+ append = -4 * (freq_KHz / 1000 - 100); -+ } else if (freq_KHz <= 419000) { -+ append = 500 - 40 * (freq_KHz / 1000 - 300) / 17 + 130; -+ } else if (freq_KHz <= 640000) { -+ append = 500 - 40 * (freq_KHz / 1000 - 300) / 17; -+ } else { -+ append = -500; -+ } -+ level = append - (val + result2 + result3 + result4 + -+ result5 + result6); -+ level /= 100; -+ } else if (state->tuner_mtt == 0xE1) { -+ _mt_fe_tn_get_reg(state, 0x61, &tmp); -+ tmp1 = tmp & 0x0f; -+ _mt_fe_tn_get_reg(state, 0x84, &tmp); -+ tmp2 = tmp & 0x1f; -+ _mt_fe_tn_get_reg(state, 0x69, &tmp); -+ tmp3 = tmp & 0x03; -+ _mt_fe_tn_get_reg(state, 0x73, &tmp); -+ tmp4 = tmp & 0x0f; -+ _mt_fe_tn_get_reg(state, 0x7c, &tmp); -+ tmp5 = (tmp >> 4) & 0x0f; -+ _mt_fe_tn_get_reg(state, 0x7b, &tmp); -+ tmp6 = tmp & 0x0f; -+ if (freq_KHz < 151000) { -+ result2 = (1150 - freq_KHz / 100) * 163 / 33 + 4230; -+ result3 = (1150 - freq_KHz / 100) * 115 / 33 + 1850; -+ result4 = -3676 * (freq_KHz / 1000) / 100 + 6115; -+ } else if (freq_KHz < 257000) { -+ result2 = (1540 - freq_KHz / 100) * 11 / 4 + 3870; -+ result3 = (1540 - freq_KHz / 100) * 205 / 96 + 2100; -+ result4 = -21 * freq_KHz / 1000 + 5084; -+ } else if (freq_KHz < 305000) { -+ result2 = (2620 - freq_KHz / 100) * 5 / 3 + 2770; -+ result3 = (2620 - freq_KHz / 100) * 10 / 7 + 1700; -+ result4 = 650; -+ } else if (freq_KHz < 449000) { -+ result2 = (307 - freq_KHz / 1000) * 82 / 27 + 11270; -+ result3 = (3100 - freq_KHz / 100) * 5 / 3 + 10000; -+ result4 = 134 * freq_KHz / 10000 + 11875; -+ } else { -+ result2 = (307 - freq_KHz / 1000) * 82 / 27 + 11270; -+ result3 = 8400; -+ result4 = 5300; -+ } -+ if (tmp1 > 6) { -+ val1 = result2; -+ val2 = 2900; -+ val = 500; -+ } else if (tmp1 > 0) { -+ val1 = result3; -+ val2 = 2700; -+ val = 500; -+ } else { -+ val1 = result4; -+ val2 = 2700; -+ val = 400; -+ } -+ level = val1 - (val2 * tmp1 + 500 * tmp2 + 3000 * tmp3 - -+ 500 * tmp4 + 3000 * tmp5 + val * tmp6) - 1000; -+ level /= 1000; -+ } -+ return level; -+} -+ -+ -+/* m88dc2800 operation functions */ -+u8 M88DC2000GetLock(struct dvbsky_m88dc2800_state * state) -+{ -+ u8 u8ret = 0; -+ if (ReadReg(state, 0x80) < 0x06) { -+ if ((ReadReg(state, 0xdf) & 0x80) == 0x80 -+ &&(ReadReg(state, 0x91) & 0x23) == 0x03 -+ &&(ReadReg(state, 0x43) & 0x08) == 0x08) -+ u8ret = 1; -+ else -+ u8ret = 0; -+ } else { -+ if ((ReadReg(state, 0x85) & 0x08) == 0x08) -+ u8ret = 1; -+ else -+ u8ret = 0; -+ } -+ dprintk("%s, lock=%d\n", __func__, u8ret); -+ return u8ret; -+} -+ -+static int M88DC2000SetTsType(struct dvbsky_m88dc2800_state *state, u8 type) -+{ -+ u8 regC2H; -+ -+ if (type == 3) { -+ WriteReg(state, 0x84, 0x6A); -+ WriteReg(state, 0xC0, 0x43); -+ WriteReg(state, 0xE2, 0x06); -+ regC2H = ReadReg(state, 0xC2); -+ regC2H &= 0xC0; -+ regC2H |= 0x1B; -+ WriteReg(state, 0xC2, regC2H); -+ WriteReg(state, 0xC1, 0x60); /* common interface */ -+ } else if (type == 1) { -+ WriteReg(state, 0x84, 0x6A); -+ WriteReg(state, 0xC0, 0x47); /* serial format */ -+ WriteReg(state, 0xE2, 0x02); -+ regC2H = ReadReg(state, 0xC2); -+ regC2H &= 0xC7; -+ WriteReg(state, 0xC2, regC2H); -+ WriteReg(state, 0xC1, 0x00); -+ } else { -+ WriteReg(state, 0x84, 0x6C); -+ WriteReg(state, 0xC0, 0x43); /* parallel format */ -+ WriteReg(state, 0xE2, 0x06); -+ regC2H = ReadReg(state, 0xC2); -+ regC2H &= 0xC7; -+ WriteReg(state, 0xC2, regC2H); -+ WriteReg(state, 0xC1, 0x00); -+ } -+ return 0; -+} -+ -+static int M88DC2000RegInitial_TC2800(struct dvbsky_m88dc2800_state *state) -+{ -+ u8 RegE3H, RegE4H; -+ -+ WriteReg(state, 0x00, 0x48); -+ WriteReg(state, 0x01, 0x09); -+ WriteReg(state, 0xFB, 0x0A); -+ WriteReg(state, 0xFC, 0x0B); -+ WriteReg(state, 0x02, 0x0B); -+ WriteReg(state, 0x03, 0x18); -+ WriteReg(state, 0x05, 0x0D); -+ WriteReg(state, 0x36, 0x80); -+ WriteReg(state, 0x43, 0x40); -+ WriteReg(state, 0x55, 0x7A); -+ WriteReg(state, 0x56, 0xD9); -+ WriteReg(state, 0x57, 0xDF); -+ WriteReg(state, 0x58, 0x39); -+ WriteReg(state, 0x5A, 0x00); -+ WriteReg(state, 0x5C, 0x71); -+ WriteReg(state, 0x5D, 0x23); -+ WriteReg(state, 0x86, 0x40); -+ WriteReg(state, 0xF9, 0x08); -+ WriteReg(state, 0x61, 0x40); -+ WriteReg(state, 0x62, 0x0A); -+ WriteReg(state, 0x90, 0x06); -+ WriteReg(state, 0xDE, 0x00); -+ WriteReg(state, 0xA0, 0x03); -+ WriteReg(state, 0xDF, 0x81); -+ WriteReg(state, 0xFA, 0x40); -+ WriteReg(state, 0x37, 0x10); -+ WriteReg(state, 0xF0, 0x40); -+ WriteReg(state, 0xF2, 0x9C); -+ WriteReg(state, 0xF3, 0x40); -+ RegE3H = ReadReg(state, 0xE3); -+ RegE4H = ReadReg(state, 0xE4); -+ if (((RegE3H & 0xC0) == 0x00) && ((RegE4H & 0xC0) == 0x00)) { -+ WriteReg(state, 0x30, 0xFF); -+ WriteReg(state, 0x31, 0x00); -+ WriteReg(state, 0x32, 0x00); -+ WriteReg(state, 0x33, 0x00); -+ WriteReg(state, 0x35, 0x32); -+ WriteReg(state, 0x40, 0x00); -+ WriteReg(state, 0x41, 0x10); -+ WriteReg(state, 0xF1, 0x02); -+ WriteReg(state, 0xF4, 0x04); -+ WriteReg(state, 0xF5, 0x00); -+ WriteReg(state, 0x42, 0x14); -+ WriteReg(state, 0xE1, 0x25); -+ } else if (((RegE3H & 0xC0) == 0x80) && ((RegE4H & 0xC0) == 0x40)) { -+ WriteReg(state, 0x30, 0xFF); -+ WriteReg(state, 0x31, 0x00); -+ WriteReg(state, 0x32, 0x00); -+ WriteReg(state, 0x33, 0x00); -+ WriteReg(state, 0x35, 0x32); -+ WriteReg(state, 0x39, 0x00); -+ WriteReg(state, 0x3A, 0x00); -+ WriteReg(state, 0x40, 0x00); -+ WriteReg(state, 0x41, 0x10); -+ WriteReg(state, 0xF1, 0x00); -+ WriteReg(state, 0xF4, 0x00); -+ WriteReg(state, 0xF5, 0x40); -+ WriteReg(state, 0x42, 0x14); -+ WriteReg(state, 0xE1, 0x25); -+ } else if ((RegE3H == 0x80 || RegE3H == 0x81) -+ && (RegE4H == 0x80 || RegE4H == 0x81)) { -+ WriteReg(state, 0x30, 0xFF); -+ WriteReg(state, 0x31, 0x00); -+ WriteReg(state, 0x32, 0x00); -+ WriteReg(state, 0x33, 0x00); -+ WriteReg(state, 0x35, 0x32); -+ WriteReg(state, 0x39, 0x00); -+ WriteReg(state, 0x3A, 0x00); -+ WriteReg(state, 0xF1, 0x00); -+ WriteReg(state, 0xF4, 0x00); -+ WriteReg(state, 0xF5, 0x40); -+ WriteReg(state, 0x42, 0x24); -+ WriteReg(state, 0xE1, 0x25); -+ WriteReg(state, 0x92, 0x7F); -+ WriteReg(state, 0x93, 0x91); -+ WriteReg(state, 0x95, 0x00); -+ WriteReg(state, 0x2B, 0x33); -+ WriteReg(state, 0x2A, 0x2A); -+ WriteReg(state, 0x2E, 0x80); -+ WriteReg(state, 0x25, 0x25); -+ WriteReg(state, 0x2D, 0xFF); -+ WriteReg(state, 0x26, 0xFF); -+ WriteReg(state, 0x27, 0x00); -+ WriteReg(state, 0x24, 0x25); -+ WriteReg(state, 0xA4, 0xFF); -+ WriteReg(state, 0xA3, 0x0D); -+ } else { -+ WriteReg(state, 0x30, 0xFF); -+ WriteReg(state, 0x31, 0x00); -+ WriteReg(state, 0x32, 0x00); -+ WriteReg(state, 0x33, 0x00); -+ WriteReg(state, 0x35, 0x32); -+ WriteReg(state, 0x39, 0x00); -+ WriteReg(state, 0x3A, 0x00); -+ WriteReg(state, 0xF1, 0x00); -+ WriteReg(state, 0xF4, 0x00); -+ WriteReg(state, 0xF5, 0x40); -+ WriteReg(state, 0x42, 0x24); -+ WriteReg(state, 0xE1, 0x27); -+ WriteReg(state, 0x92, 0x7F); -+ WriteReg(state, 0x93, 0x91); -+ WriteReg(state, 0x95, 0x00); -+ WriteReg(state, 0x2B, 0x33); -+ WriteReg(state, 0x2A, 0x2A); -+ WriteReg(state, 0x2E, 0x80); -+ WriteReg(state, 0x25, 0x25); -+ WriteReg(state, 0x2D, 0xFF); -+ WriteReg(state, 0x26, 0xFF); -+ WriteReg(state, 0x27, 0x00); -+ WriteReg(state, 0x24, 0x25); -+ WriteReg(state, 0xA4, 0xFF); -+ WriteReg(state, 0xA3, 0x10); -+ } -+ WriteReg(state, 0xF6, 0x4E); -+ WriteReg(state, 0xF7, 0x20); -+ WriteReg(state, 0x89, 0x02); -+ WriteReg(state, 0x14, 0x08); -+ WriteReg(state, 0x6F, 0x0D); -+ WriteReg(state, 0x10, 0xFF); -+ WriteReg(state, 0x11, 0x00); -+ WriteReg(state, 0x12, 0x30); -+ WriteReg(state, 0x13, 0x23); -+ WriteReg(state, 0x60, 0x00); -+ WriteReg(state, 0x69, 0x00); -+ WriteReg(state, 0x6A, 0x03); -+ WriteReg(state, 0xE0, 0x75); -+ WriteReg(state, 0x8D, 0x29); -+ WriteReg(state, 0x4E, 0xD8); -+ WriteReg(state, 0x88, 0x80); -+ WriteReg(state, 0x52, 0x79); -+ WriteReg(state, 0x53, 0x03); -+ WriteReg(state, 0x59, 0x30); -+ WriteReg(state, 0x5E, 0x02); -+ WriteReg(state, 0x5F, 0x0F); -+ WriteReg(state, 0x71, 0x03); -+ WriteReg(state, 0x72, 0x12); -+ WriteReg(state, 0x73, 0x12); -+ -+ return 0; -+} -+ -+static int M88DC2000AutoTSClock_P(struct dvbsky_m88dc2800_state *state, u32 sym, -+ u16 qam) -+{ -+ u32 dataRate; -+ u8 clk_div, value; -+ printk(KERN_INFO -+ "m88dc2800: M88DC2000AutoTSClock_P, symrate=%d qam=%d\n", -+ sym, qam); -+ switch (qam) { -+ case 16: -+ dataRate = 4; -+ break; -+ case 32: -+ dataRate = 5; -+ break; -+ case 128: -+ dataRate = 7; -+ break; -+ case 256: -+ dataRate = 8; -+ break; -+ case 64: -+ default: -+ dataRate = 6; -+ break; -+ } -+ dataRate *= sym * 105; -+ dataRate /= 800; -+ if (dataRate <= 4115) -+ clk_div = 0x05; -+ else if (dataRate <= 4800) -+ clk_div = 0x04; -+ else if (dataRate <= 5760) -+ clk_div = 0x03; -+ else if (dataRate <= 7200) -+ clk_div = 0x02; -+ else if (dataRate <= 9600) -+ clk_div = 0x01; -+ else -+ clk_div = 0x00; -+ value = ReadReg(state, 0xC2); -+ value &= 0xc0; -+ value |= clk_div; -+ WriteReg(state, 0xC2, value); -+ return 0; -+} -+ -+static int M88DC2000AutoTSClock_C(struct dvbsky_m88dc2800_state *state, u32 sym, -+ u16 qam) -+{ -+ u32 dataRate; -+ u8 clk_div, value; -+ printk(KERN_INFO -+ "m88dc2800: M88DC2000AutoTSClock_C, symrate=%d qam=%d\n", -+ sym, qam); -+ switch (qam) { -+ case 16: -+ dataRate = 4; -+ break; -+ case 32: -+ dataRate = 5; -+ break; -+ case 128: -+ dataRate = 7; -+ break; -+ case 256: -+ dataRate = 8; -+ break; -+ case 64: -+ default: -+ dataRate = 6; -+ break; -+ } -+ dataRate *= sym * 105; -+ dataRate /= 800; -+ if (dataRate <= 4115) -+ clk_div = 0x3F; -+ else if (dataRate <= 4800) -+ clk_div = 0x36; -+ else if (dataRate <= 5760) -+ clk_div = 0x2D; -+ else if (dataRate <= 7200) -+ clk_div = 0x24; -+ else if (dataRate <= 9600) -+ clk_div = 0x1B; -+ else -+ clk_div = 0x12; -+ value = ReadReg(state, 0xC2); -+ value &= 0xc0; -+ value |= clk_div; -+ WriteReg(state, 0xC2, value); -+ return 0; -+} -+ -+static int M88DC2000SetTxMode(struct dvbsky_m88dc2800_state *state, u8 inverted, -+ u8 j83) -+{ -+ u8 value = 0; -+ if (inverted) -+ value |= 0x08; /* spectrum inverted */ -+ if (j83) -+ value |= 0x01; /* J83C */ -+ WriteReg(state, 0x83, value); -+ return 0; -+} -+ -+static int M88DC2000SoftReset(struct dvbsky_m88dc2800_state *state) -+{ -+ WriteReg(state, 0x80, 0x01); -+ WriteReg(state, 0x82, 0x00); -+ msleep(1); -+ WriteReg(state, 0x80, 0x00); -+ return 0; -+} -+ -+static int M88DC2000SetSym(struct dvbsky_m88dc2800_state *state, u32 sym, u32 xtal) -+{ -+ u8 value; -+ u8 reg6FH, reg12H; -+ u64 fValue; -+ u32 dwValue; -+ -+ printk(KERN_INFO "%s, sym=%d, xtal=%d\n", __func__, sym, xtal); -+ fValue = 4294967296 * (sym + 10); -+ do_div(fValue, xtal); -+ -+ /* fValue = 4294967296 * (sym + 10) / xtal; */ -+ dwValue = (u32) fValue; -+ printk(KERN_INFO "%s, fvalue1=%x\n", __func__, dwValue); -+ WriteReg(state, 0x58, (u8) ((dwValue >> 24) & 0xff)); -+ WriteReg(state, 0x57, (u8) ((dwValue >> 16) & 0xff)); -+ WriteReg(state, 0x56, (u8) ((dwValue >> 8) & 0xff)); -+ WriteReg(state, 0x55, (u8) ((dwValue >> 0) & 0xff)); -+ -+ /* fValue = 2048 * xtal / sym; */ -+ fValue = 2048 * xtal; -+ do_div(fValue, sym); -+ dwValue = (u32) fValue; -+ printk(KERN_INFO "%s, fvalue2=%x\n", __func__, dwValue); -+ WriteReg(state, 0x5D, (u8) ((dwValue >> 8) & 0xff)); -+ WriteReg(state, 0x5C, (u8) ((dwValue >> 0) & 0xff)); -+ value = ReadReg(state, 0x5A); -+ if (((dwValue >> 16) & 0x0001) == 0) -+ value &= 0x7F; -+ else -+ value |= 0x80; -+ WriteReg(state, 0x5A, value); -+ value = ReadReg(state, 0x89); -+ if (sym <= 1800) -+ value |= 0x01; -+ else -+ value &= 0xFE; -+ WriteReg(state, 0x89, value); -+ if (sym >= 6700) { -+ reg6FH = 0x0D; -+ reg12H = 0x30; -+ } else if (sym >= 4000) { -+ fValue = 22 * 4096 / sym; -+ reg6FH = (u8) fValue; -+ reg12H = 0x30; -+ } else if (sym >= 2000) { -+ fValue = 14 * 4096 / sym; -+ reg6FH = (u8) fValue; -+ reg12H = 0x20; -+ } else { -+ fValue = 7 * 4096 / sym; -+ reg6FH = (u8) fValue; -+ reg12H = 0x10; -+ } -+ WriteReg(state, 0x6F, reg6FH); -+ WriteReg(state, 0x12, reg12H); -+ if (((ReadReg(state, 0xE3) & 0x80) == 0x80) -+ && ((ReadReg(state, 0xE4) & 0x80) == 0x80)) { -+ if (sym < 3000) { -+ WriteReg(state, 0x6C, 0x16); -+ WriteReg(state, 0x6D, 0x10); -+ WriteReg(state, 0x6E, 0x18); -+ } else { -+ WriteReg(state, 0x6C, 0x14); -+ WriteReg(state, 0x6D, 0x0E); -+ WriteReg(state, 0x6E, 0x36); -+ } -+ } else { -+ WriteReg(state, 0x6C, 0x16); -+ WriteReg(state, 0x6D, 0x10); -+ WriteReg(state, 0x6E, 0x18); -+ } -+ return 0; -+} -+ -+static int M88DC2000SetQAM(struct dvbsky_m88dc2800_state *state, u16 qam) -+{ -+ u8 reg00H, reg4AH, regC2H, reg44H, reg4CH, reg4DH, reg74H, value; -+ u8 reg8BH, reg8EH; -+ printk(KERN_INFO "%s, qam=%d\n", __func__, qam); -+ regC2H = ReadReg(state, 0xC2); -+ regC2H &= 0xF8; -+ switch (qam) { -+ case 16: /* 16 QAM */ -+ reg00H = 0x08; -+ reg4AH = 0x0F; -+ regC2H |= 0x02; -+ reg44H = 0xAA; -+ reg4CH = 0x0C; -+ reg4DH = 0xF7; -+ reg74H = 0x0E; -+ if (((ReadReg(state, 0xE3) & 0x80) == 0x80) -+ && ((ReadReg(state, 0xE4) & 0x80) == 0x80)) { -+ reg8BH = 0x5A; -+ reg8EH = 0xBD; -+ } else { -+ reg8BH = 0x5B; -+ reg8EH = 0x9D; -+ } -+ WriteReg(state, 0x6E, 0x18); -+ break; -+ case 32: /* 32 QAM */ -+ reg00H = 0x18; -+ reg4AH = 0xFB; -+ regC2H |= 0x02; -+ reg44H = 0xAA; -+ reg4CH = 0x0C; -+ reg4DH = 0xF7; -+ reg74H = 0x0E; -+ if (((ReadReg(state, 0xE3) & 0x80) == 0x80) -+ && ((ReadReg(state, 0xE4) & 0x80) == 0x80)) { -+ reg8BH = 0x5A; -+ reg8EH = 0xBD; -+ } else { -+ reg8BH = 0x5B; -+ reg8EH = 0x9D; -+ } -+ WriteReg(state, 0x6E, 0x18); -+ break; -+ case 64: /* 64 QAM */ -+ reg00H = 0x48; -+ reg4AH = 0xCD; -+ regC2H |= 0x02; -+ reg44H = 0xAA; -+ reg4CH = 0x0C; -+ reg4DH = 0xF7; -+ reg74H = 0x0E; -+ if (((ReadReg(state, 0xE3) & 0x80) == 0x80) -+ && ((ReadReg(state, 0xE4) & 0x80) == 0x80)) { -+ reg8BH = 0x5A; -+ reg8EH = 0xBD; -+ } else { -+ reg8BH = 0x5B; -+ reg8EH = 0x9D; -+ } -+ break; -+ case 128: /* 128 QAM */ -+ reg00H = 0x28; -+ reg4AH = 0xFF; -+ regC2H |= 0x02; -+ reg44H = 0xA9; -+ reg4CH = 0x08; -+ reg4DH = 0xF5; -+ reg74H = 0x0E; -+ reg8BH = 0x5B; -+ reg8EH = 0x9D; -+ break; -+ case 256: /* 256 QAM */ -+ reg00H = 0x38; -+ reg4AH = 0xCD; -+ if (((ReadReg(state, 0xE3) & 0x80) == 0x80) -+ && ((ReadReg(state, 0xE4) & 0x80) == 0x80)) { -+ regC2H |= 0x02; -+ } else { -+ regC2H |= 0x01; -+ } -+ reg44H = 0xA9; -+ reg4CH = 0x08; -+ reg4DH = 0xF5; -+ reg74H = 0x0E; -+ reg8BH = 0x5B; -+ reg8EH = 0x9D; -+ break; -+ default: /* 64 QAM */ -+ reg00H = 0x48; -+ reg4AH = 0xCD; -+ regC2H |= 0x02; -+ reg44H = 0xAA; -+ reg4CH = 0x0C; -+ reg4DH = 0xF7; -+ reg74H = 0x0E; -+ if (((ReadReg(state, 0xE3) & 0x80) == 0x80) -+ && ((ReadReg(state, 0xE4) & 0x80) == 0x80)) { -+ reg8BH = 0x5A; -+ reg8EH = 0xBD; -+ } else { -+ reg8BH = 0x5B; -+ reg8EH = 0x9D; -+ } -+ break; -+ } -+ WriteReg(state, 0x00, reg00H); -+ value = ReadReg(state, 0x88); -+ value |= 0x08; -+ WriteReg(state, 0x88, value); -+ WriteReg(state, 0x4B, 0xFF); -+ WriteReg(state, 0x4A, reg4AH); -+ value &= 0xF7; -+ WriteReg(state, 0x88, value); -+ WriteReg(state, 0xC2, regC2H); -+ WriteReg(state, 0x44, reg44H); -+ WriteReg(state, 0x4C, reg4CH); -+ WriteReg(state, 0x4D, reg4DH); -+ WriteReg(state, 0x74, reg74H); -+ WriteReg(state, 0x8B, reg8BH); -+ WriteReg(state, 0x8E, reg8EH); -+ return 0; -+} -+ -+static int M88DC2000WriteTuner_TC2800(struct dvbsky_m88dc2800_state *state, -+ u32 freq_KHz) -+{ -+ printk(KERN_INFO "%s, freq=%d KHz\n", __func__, freq_KHz); -+ return mt_fe_tn_set_freq_tc2800(state, freq_KHz); -+} -+ -+static int dvbsky_m88dc2800_init(struct dvb_frontend *fe) -+{ -+ dprintk("%s()\n", __func__); -+ return 0; -+} -+ -+static int dvbsky_m88dc2800_set_parameters(struct dvb_frontend *fe) -+{ -+ struct dtv_frontend_properties *c = &fe->dtv_property_cache; -+ u8 is_annex_c, is_update; -+ u16 temp_qam; -+ s32 waiting_time; -+ struct dvbsky_m88dc2800_state *state = fe->demodulator_priv; -+ -+ is_annex_c = c->delivery_system == SYS_DVBC_ANNEX_C ? 1 : 0; -+ -+ switch (c->modulation) { -+ case QAM_16: -+ temp_qam = 16; -+ break; -+ case QAM_32: -+ temp_qam = 32; -+ break; -+ case QAM_128: -+ temp_qam = 128; -+ break; -+ case QAM_256: -+ temp_qam = 256; -+ break; -+ default: /* QAM_64 */ -+ temp_qam = 64; -+ break; -+ } -+ -+ state->inverted = c->inversion == INVERSION_ON ? 1 : 0; -+ -+ printk(KERN_INFO -+ "m88dc2800: state, freq=%d qam=%d sym=%d inverted=%d xtal=%d\n", -+ state->freq, state->qam, state->sym, state->inverted, -+ state->xtal); -+ printk(KERN_INFO -+ "m88dc2800: set frequency to %d qam=%d symrate=%d annex-c=%d\n", -+ c->frequency, temp_qam, c->symbol_rate, is_annex_c); -+ -+ is_update = 0; -+ WriteReg(state, 0x80, 0x01); -+ if (c->frequency != state->freq) { -+ M88DC2000WriteTuner_TC2800(state, c->frequency / 1000); -+ state->freq = c->frequency; -+ } -+ if (c->symbol_rate != state->sym) { -+ M88DC2000SetSym(state, c->symbol_rate / 1000, state->xtal); -+ state->sym = c->symbol_rate; -+ is_update = 1; -+ } -+ if (temp_qam != state->qam) { -+ M88DC2000SetQAM(state, temp_qam); -+ state->qam = temp_qam; -+ is_update = 1; -+ } -+ -+ if (is_update != 0) { -+ if (state->config->ts_mode == 3) -+ M88DC2000AutoTSClock_C(state, state->sym / 1000, -+ temp_qam); -+ else -+ M88DC2000AutoTSClock_P(state, state->sym / 1000, -+ temp_qam); -+ } -+ -+ M88DC2000SetTxMode(state, state->inverted, is_annex_c); -+ M88DC2000SoftReset(state); -+ if (((ReadReg(state, 0xE3) & 0x80) == 0x80) -+ && ((ReadReg(state, 0xE4) & 0x80) == 0x80)) -+ waiting_time = 800; -+ else -+ waiting_time = 500; -+ while (waiting_time > 0) { -+ msleep(50); -+ waiting_time -= 50; -+ if (M88DC2000GetLock(state)) -+ return 0; -+ } -+ -+ state->inverted = (state->inverted != 0) ? 0 : 1; -+ M88DC2000SetTxMode(state, state->inverted, is_annex_c); -+ M88DC2000SoftReset(state); -+ if (((ReadReg(state, 0xE3) & 0x80) == 0x80) && -+ ((ReadReg(state, 0xE4) & 0x80) == 0x80)) -+ waiting_time = 800; -+ else -+ waiting_time = 500; -+ while (waiting_time > 0) { -+ msleep(50); -+ waiting_time -= 50; -+ if (M88DC2000GetLock(state)) -+ return 0; -+ } -+ return 0; -+} -+ -+static int dvbsky_m88dc2800_read_status(struct dvb_frontend *fe, -+ fe_status_t * status) -+{ -+ struct dvbsky_m88dc2800_state *state = fe->demodulator_priv; -+ *status = 0; -+ -+ if (M88DC2000GetLock(state)) { -+ *status = FE_HAS_SIGNAL | FE_HAS_CARRIER -+ |FE_HAS_SYNC | FE_HAS_VITERBI | FE_HAS_LOCK; -+ } -+ return 0; -+} -+ -+static int dvbsky_m88dc2800_read_ber(struct dvb_frontend *fe, u32 * ber) -+{ -+ struct dvbsky_m88dc2800_state *state = fe->demodulator_priv; -+ u16 tmp; -+ -+ if (M88DC2000GetLock(state) == 0) { -+ state->ber = 0; -+ } else if ((ReadReg(state, 0xA0) & 0x80) != 0x80) { -+ tmp = ReadReg(state, 0xA2) << 8; -+ tmp += ReadReg(state, 0xA1); -+ state->ber = tmp; -+ WriteReg(state, 0xA0, 0x05); -+ WriteReg(state, 0xA0, 0x85); -+ } -+ *ber = state->ber; -+ return 0; -+} -+ -+static int dvbsky_m88dc2800_read_signal_strength(struct dvb_frontend *fe, -+ u16 * strength) -+{ -+ struct dvbsky_m88dc2800_state *state = fe->demodulator_priv; -+ s16 tuner_strength; -+ -+ tuner_strength = mt_fe_tn_get_signal_strength_tc2800(state); -+ *strength = tuner_strength < -107 ? 0 : tuner_strength + 107; -+ -+ return 0; -+} -+ -+static int dvbsky_m88dc2800_read_snr(struct dvb_frontend *fe, u16 * snr) -+{ -+ static const u32 mes_log[] = { -+ 0, 3010, 4771, 6021, 6990, 7781, 8451, 9031, 9542, 10000, -+ 10414, 10792, 11139, 11461, 11761, 12041, 12304, 12553, 12788, -+ 13010, 13222, 13424, 13617, 13802, 13979, 14150, 14314, 14472, -+ 14624, 14771, 14914, 15052, 15185, 15315, 15441, 15563, 15682, -+ 15798, 15911, 16021, 16128, 16232, 16335, 16435, 16532, 16628, -+ 16721, 16812, 16902, 16990, 17076, 17160, 17243, 17324, 17404, -+ 17482, 17559, 17634, 17709, 17782, 17853, 17924, 17993, 18062, -+ 18129, 18195, 18261, 18325, 18388, 18451, 18513, 18573, 18633, -+ 18692, 18751, 18808, 18865, 18921, 18976, 19031 -+ }; -+ struct dvbsky_m88dc2800_state *state = fe->demodulator_priv; -+ u8 i; -+ u32 _snr, mse; -+ -+ if ((ReadReg(state, 0x91) & 0x23) != 0x03) { -+ *snr = 0; -+ return 0; -+ } -+ mse = 0; -+ for (i = 0; i < 30; i++) { -+ mse += (ReadReg(state, 0x08) << 8) + ReadReg(state, 0x07); -+ } -+ mse /= 30; -+ if (mse > 80) -+ mse = 80; -+ switch (state->qam) { -+ case 16: -+ _snr = 34080; -+ break; /* 16QAM */ -+ case 32: -+ _snr = 37600; -+ break; /* 32QAM */ -+ case 64: -+ _snr = 40310; -+ break; /* 64QAM */ -+ case 128: -+ _snr = 43720; -+ break; /* 128QAM */ -+ case 256: -+ _snr = 46390; -+ break; /* 256QAM */ -+ default: -+ _snr = 40310; -+ break; -+ } -+ _snr -= mes_log[mse - 1]; /* C - 10*log10(MSE) */ -+ _snr /= 1000; -+ if (_snr > 0xff) -+ _snr = 0xff; -+ *snr = _snr; -+ return 0; -+} -+ -+static int dvbsky_m88dc2800_read_ucblocks(struct dvb_frontend *fe, u32 * ucblocks) -+{ -+ struct dvbsky_m88dc2800_state *state = fe->demodulator_priv; -+ u8 u8Value; -+ -+ u8Value = ReadReg(state, 0xdf); -+ u8Value |= 0x02; /* Hold */ -+ WriteReg(state, 0xdf, u8Value); -+ -+ *ucblocks = ReadReg(state, 0xd5); -+ *ucblocks = (*ucblocks << 8) | ReadReg(state, 0xd4); -+ -+ u8Value &= 0xfe; /* Clear */ -+ WriteReg(state, 0xdf, u8Value); -+ u8Value &= 0xfc; /* Update */ -+ u8Value |= 0x01; -+ WriteReg(state, 0xdf, u8Value); -+ -+ return 0; -+} -+ -+static int dvbsky_m88dc2800_sleep(struct dvb_frontend *fe) -+{ -+ struct dvbsky_m88dc2800_state *state = fe->demodulator_priv; -+ -+ mt_fe_tn_sleep_tc2800(state); -+ state->freq = 0; -+ -+ return 0; -+} -+ -+static void dvbsky_m88dc2800_release(struct dvb_frontend *fe) -+{ -+ struct dvbsky_m88dc2800_state *state = fe->demodulator_priv; -+ kfree(state); -+} -+ -+static struct dvb_frontend_ops dvbsky_m88dc2800_ops; -+ -+struct dvb_frontend *dvbsky_m88dc2800_attach(const struct dvbsky_m88dc2800_config -+ *config, struct i2c_adapter *i2c) -+{ -+ struct dvbsky_m88dc2800_state *state = NULL; -+ -+ /* allocate memory for the internal state */ -+ state = kzalloc(sizeof(struct dvbsky_m88dc2800_state), GFP_KERNEL); -+ if (state == NULL) -+ goto error; -+ -+ /* setup the state */ -+ state->config = config; -+ state->i2c = i2c; -+ state->xtal = 28800; -+ -+ WriteReg(state, 0x80, 0x01); -+ M88DC2000RegInitial_TC2800(state); -+ M88DC2000SetTsType(state, state->config->ts_mode); -+ mt_fe_tn_init_tc2800(state); -+ -+ /* create dvb_frontend */ -+ memcpy(&state->frontend.ops, &dvbsky_m88dc2800_ops, -+ sizeof(struct dvb_frontend_ops)); -+ state->frontend.demodulator_priv = state; -+ return &state->frontend; -+ -+ error: -+ kfree(state); -+ return NULL; -+} -+ -+EXPORT_SYMBOL(dvbsky_m88dc2800_attach); -+ -+static struct dvb_frontend_ops dvbsky_m88dc2800_ops = { -+ .delsys = {SYS_DVBC_ANNEX_A, SYS_DVBC_ANNEX_C}, -+ .info = { -+ .name = "Montage M88DC2800 DVB-C", -+ .frequency_stepsize = 62500, -+ .frequency_min = 48000000, -+ .frequency_max = 870000000, -+ .symbol_rate_min = 870000, -+ .symbol_rate_max = 9000000, -+ .caps = FE_CAN_QAM_16 | FE_CAN_QAM_32 | FE_CAN_QAM_64 | -+ FE_CAN_QAM_128 | FE_CAN_QAM_256 | FE_CAN_FEC_AUTO -+ }, -+ .release = dvbsky_m88dc2800_release, -+ .init = dvbsky_m88dc2800_init, -+ .sleep = dvbsky_m88dc2800_sleep, -+ .set_frontend = dvbsky_m88dc2800_set_parameters, -+ .read_status = dvbsky_m88dc2800_read_status, -+ .read_ber = dvbsky_m88dc2800_read_ber, -+ .read_signal_strength = dvbsky_m88dc2800_read_signal_strength, -+ .read_snr = dvbsky_m88dc2800_read_snr, -+ .read_ucblocks = dvbsky_m88dc2800_read_ucblocks, -+}; -+ -+MODULE_DESCRIPTION("Montage DVB-C demodulator driver"); -+MODULE_AUTHOR("Max Nibble "); -+MODULE_LICENSE("GPL"); -+MODULE_VERSION("1.00"); -diff --git a/drivers/media/dvb-frontends/dvbsky_m88dc2800.h b/drivers/media/dvb-frontends/dvbsky_m88dc2800.h -new file mode 100644 -index 0000000..0844a66 ---- /dev/null -+++ b/drivers/media/dvb-frontends/dvbsky_m88dc2800.h -@@ -0,0 +1,44 @@ -+/* -+ M88DC2800/M88TC2800 - DVB-C demodulator and tuner from Montage -+ -+ Copyright (C) 2012 Max Nibble -+ Copyright (C) 2011 Montage Technology - www.montage-tech.com -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+*/ -+ -+#ifndef dvbsky_m88dc2800_H -+#define dvbsky_m88dc2800_H -+ -+#include -+#include -+ -+struct dvbsky_m88dc2800_config { -+ u8 demod_address; -+ u8 ts_mode; -+}; -+ -+#if IS_ENABLED(CONFIG_DVB_DVBSKY_M88DC2800) -+extern struct dvb_frontend* dvbsky_m88dc2800_attach(const struct dvbsky_m88dc2800_config* config, -+ struct i2c_adapter* i2c); -+#else -+static inline struct dvb_frontend* dvbsky_m88dc2800_attach(const struct dvbsky_m88dc2800_config* config, -+ struct i2c_adapter* i2c) -+{ -+ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); -+ return NULL; -+} -+#endif /* CONFIG_DVB_DVBSKY_M88DC2800 */ -+#endif /* dvbsky_m88dc2800_H */ -diff --git a/drivers/media/dvb-frontends/dvbsky_m88ds3103.c b/drivers/media/dvb-frontends/dvbsky_m88ds3103.c -new file mode 100644 -index 0000000..99985a7 ---- /dev/null -+++ b/drivers/media/dvb-frontends/dvbsky_m88ds3103.c -@@ -0,0 +1,1707 @@ -+/* -+ Montage Technology M88DS3103/M88TS2022 - DVBS/S2 Satellite demod/tuner driver -+ -+ Copyright (C) 2011 Max nibble -+ Copyright (C) 2010 Montage Technology -+ Copyright (C) 2009 Konstantin Dimitrov. -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "dvb_frontend.h" -+#include "dvbsky_m88ds3103.h" -+#include "dvbsky_m88ds3103_priv.h" -+ -+static int debug; -+module_param(debug, int, 0644); -+MODULE_PARM_DESC(debug, "Activates frontend debugging (default:0)"); -+ -+#define dprintk(args...) \ -+ do { \ -+ if (debug) \ -+ printk(KERN_INFO "m88ds3103: " args); \ -+ } while (0) -+ -+/*demod register operations.*/ -+static int dvbsky_m88ds3103_writereg(struct dvbsky_m88ds3103_state *state, int reg, int data) -+{ -+ u8 buf[] = { reg, data }; -+ struct i2c_msg msg = { .addr = state->config->demod_address, -+ .flags = 0, .buf = buf, .len = 2 }; -+ int err; -+ -+ if (debug > 1) -+ printk("m88ds3103: %s: write reg 0x%02x, value 0x%02x\n", -+ __func__, reg, data); -+ -+ err = i2c_transfer(state->i2c, &msg, 1); -+ if (err != 1) { -+ printk(KERN_ERR "%s: writereg error(err == %i, reg == 0x%02x," -+ " value == 0x%02x)\n", __func__, err, reg, data); -+ return -EREMOTEIO; -+ } -+ return 0; -+} -+ -+static int dvbsky_m88ds3103_readreg(struct dvbsky_m88ds3103_state *state, u8 reg) -+{ -+ int ret; -+ u8 b0[] = { reg }; -+ u8 b1[] = { 0 }; -+ struct i2c_msg msg[] = { -+ { .addr = state->config->demod_address, .flags = 0, -+ .buf = b0, .len = 1 }, -+ { .addr = state->config->demod_address, .flags = I2C_M_RD, -+ .buf = b1, .len = 1 } -+ }; -+ ret = i2c_transfer(state->i2c, msg, 2); -+ -+ if (ret != 2) { -+ printk(KERN_ERR "%s: reg=0x%x (error=%d)\n", -+ __func__, reg, ret); -+ return ret; -+ } -+ -+ if (debug > 1) -+ printk(KERN_INFO "m88ds3103: read reg 0x%02x, value 0x%02x\n", -+ reg, b1[0]); -+ -+ return b1[0]; -+} -+ -+/*tuner register operations.*/ -+static int dvbsky_m88ds3103_tuner_writereg(struct dvbsky_m88ds3103_state *state, int reg, int data) -+{ -+ u8 buf[] = { reg, data }; -+ struct i2c_msg msg = { .addr = 0x60, -+ .flags = 0, .buf = buf, .len = 2 }; -+ int err; -+ -+ dvbsky_m88ds3103_writereg(state, 0x03, 0x11); -+ err = i2c_transfer(state->i2c, &msg, 1); -+ -+ if (err != 1) { -+ printk("%s: writereg error(err == %i, reg == 0x%02x," -+ " value == 0x%02x)\n", __func__, err, reg, data); -+ return -EREMOTEIO; -+ } -+ -+ return 0; -+} -+ -+static int dvbsky_m88ds3103_tuner_readreg(struct dvbsky_m88ds3103_state *state, u8 reg) -+{ -+ int ret; -+ u8 b0[] = { reg }; -+ u8 b1[] = { 0 }; -+ struct i2c_msg msg[] = { -+ { .addr = 0x60, .flags = 0, -+ .buf = b0, .len = 1 }, -+ { .addr = 0x60, .flags = I2C_M_RD, -+ .buf = b1, .len = 1 } -+ }; -+ -+ dvbsky_m88ds3103_writereg(state, 0x03, 0x11); -+ ret = i2c_transfer(state->i2c, msg, 2); -+ -+ if (ret != 2) { -+ printk(KERN_ERR "%s: reg=0x%x(error=%d)\n", __func__, reg, ret); -+ return ret; -+ } -+ -+ return b1[0]; -+} -+ -+/* Bulk demod I2C write, for firmware download. */ -+static int dvbsky_m88ds3103_writeregN(struct dvbsky_m88ds3103_state *state, int reg, -+ const u8 *data, u16 len) -+{ -+ int ret = -EREMOTEIO; -+ struct i2c_msg msg; -+ u8 *buf; -+ -+ buf = kmalloc(len + 1, GFP_KERNEL); -+ if (buf == NULL) { -+ printk("Unable to kmalloc\n"); -+ ret = -ENOMEM; -+ goto error; -+ } -+ -+ *(buf) = reg; -+ memcpy(buf + 1, data, len); -+ -+ msg.addr = state->config->demod_address; -+ msg.flags = 0; -+ msg.buf = buf; -+ msg.len = len + 1; -+ -+ if (debug > 1) -+ printk(KERN_INFO "m88ds3103: %s: write regN 0x%02x, len = %d\n", -+ __func__, reg, len); -+ -+ ret = i2c_transfer(state->i2c, &msg, 1); -+ if (ret != 1) { -+ printk(KERN_ERR "%s: writereg error(err == %i, reg == 0x%02x\n", -+ __func__, ret, reg); -+ ret = -EREMOTEIO; -+ } -+ -+error: -+ kfree(buf); -+ -+ return ret; -+} -+ -+static int dvbsky_m88ds3103_load_firmware(struct dvb_frontend *fe) -+{ -+ struct dvbsky_m88ds3103_state *state = fe->demodulator_priv; -+ const struct firmware *fw; -+ int i, ret = 0; -+ -+ dprintk("%s()\n", __func__); -+ -+ if (state->skip_fw_load) -+ return 0; -+ /* Load firmware */ -+ /* request the firmware, this will block until someone uploads it */ -+ if(state->demod_id == DS3000_ID){ -+ printk(KERN_INFO "%s: Waiting for firmware upload (%s)...\n", __func__, -+ DS3000_DEFAULT_FIRMWARE); -+ ret = request_firmware(&fw, DS3000_DEFAULT_FIRMWARE, -+ state->i2c->dev.parent); -+ }else if(state->demod_id == DS3103_ID){ -+ printk(KERN_INFO "%s: Waiting for firmware upload (%s)...\n", __func__, -+ DS3103_DEFAULT_FIRMWARE); -+ ret = request_firmware(&fw, DS3103_DEFAULT_FIRMWARE, -+ state->i2c->dev.parent); -+ } -+ -+ printk(KERN_INFO "%s: Waiting for firmware upload(2)...\n", __func__); -+ if (ret) { -+ printk(KERN_ERR "%s: No firmware uploaded (timeout or file not " -+ "found?)\n", __func__); -+ return ret; -+ } -+ -+ /* Make sure we don't recurse back through here during loading */ -+ state->skip_fw_load = 1; -+ -+ dprintk("Firmware is %zu bytes (%02x %02x .. %02x %02x)\n", -+ fw->size, -+ fw->data[0], -+ fw->data[1], -+ fw->data[fw->size - 2], -+ fw->data[fw->size - 1]); -+ -+ /* stop internal mcu. */ -+ dvbsky_m88ds3103_writereg(state, 0xb2, 0x01); -+ /* split firmware to download.*/ -+ for(i = 0; i < FW_DOWN_LOOP; i++){ -+ ret = dvbsky_m88ds3103_writeregN(state, 0xb0, &(fw->data[FW_DOWN_SIZE*i]), FW_DOWN_SIZE); -+ if(ret != 1) break; -+ } -+ /* start internal mcu. */ -+ if(ret == 1) -+ dvbsky_m88ds3103_writereg(state, 0xb2, 0x00); -+ -+ release_firmware(fw); -+ -+ dprintk("%s: Firmware upload %s\n", __func__, -+ ret == 1 ? "complete" : "failed"); -+ -+ if(ret == 1) ret = 0; -+ -+ /* Ensure firmware is always loaded if required */ -+ state->skip_fw_load = 0; -+ -+ return ret; -+} -+ -+ -+static int dvbsky_m88ds3103_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage) -+{ -+ struct dvbsky_m88ds3103_state *state = fe->demodulator_priv; -+ u8 data; -+ -+ dprintk("%s(%d)\n", __func__, voltage); -+ -+ dprintk("m88ds3103:pin_ctrl = (%02x)\n", state->config->pin_ctrl); -+ -+ if(state->config->set_voltage) -+ state->config->set_voltage(fe, voltage); -+ -+ data = dvbsky_m88ds3103_readreg(state, 0xa2); -+ -+ if(state->config->pin_ctrl & 0x80){ /*If control pin is assigned.*/ -+ data &= ~0x03; /* bit0 V/H, bit1 off/on */ -+ if(state->config->pin_ctrl & 0x02) -+ data |= 0x02; -+ -+ switch (voltage) { -+ case SEC_VOLTAGE_18: -+ if((state->config->pin_ctrl & 0x01) == 0) -+ data |= 0x01; -+ break; -+ case SEC_VOLTAGE_13: -+ if(state->config->pin_ctrl & 0x01) -+ data |= 0x01; -+ break; -+ case SEC_VOLTAGE_OFF: -+ if(state->config->pin_ctrl & 0x02) -+ data &= ~0x02; -+ else -+ data |= 0x02; -+ break; -+ } -+ } -+ -+ dvbsky_m88ds3103_writereg(state, 0xa2, data); -+ -+ return 0; -+} -+ -+static int dvbsky_m88ds3103_read_status(struct dvb_frontend *fe, fe_status_t* status) -+{ -+ struct dvbsky_m88ds3103_state *state = fe->demodulator_priv; -+ int lock = 0; -+ -+ *status = 0; -+ -+ switch (state->delivery_system){ -+ case SYS_DVBS: -+ lock = dvbsky_m88ds3103_readreg(state, 0xd1); -+ dprintk("%s: SYS_DVBS status=%x.\n", __func__, lock); -+ -+ if ((lock & 0x07) == 0x07){ -+ /*if((dvbsky_m88ds3103_readreg(state, 0x0d) & 0x07) == 0x07)*/ -+ *status = FE_HAS_SIGNAL | FE_HAS_CARRIER -+ | FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_LOCK; -+ -+ } -+ break; -+ case SYS_DVBS2: -+ lock = dvbsky_m88ds3103_readreg(state, 0x0d); -+ dprintk("%s: SYS_DVBS2 status=%x.\n", __func__, lock); -+ -+ if ((lock & 0x8f) == 0x8f) -+ *status = FE_HAS_SIGNAL | FE_HAS_CARRIER -+ | FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_LOCK; -+ -+ break; -+ default: -+ break; -+ } -+ -+ return 0; -+} -+ -+static int dvbsky_m88ds3103_read_ber(struct dvb_frontend *fe, u32* ber) -+{ -+ struct dvbsky_m88ds3103_state *state = fe->demodulator_priv; -+ u8 tmp1, tmp2, tmp3; -+ u32 ldpc_frame_cnt, pre_err_packags, code_rate_fac = 0; -+ -+ dprintk("%s()\n", __func__); -+ -+ switch (state->delivery_system) { -+ case SYS_DVBS: -+ dvbsky_m88ds3103_writereg(state, 0xf9, 0x04); -+ tmp3 = dvbsky_m88ds3103_readreg(state, 0xf8); -+ if ((tmp3&0x10) == 0){ -+ tmp1 = dvbsky_m88ds3103_readreg(state, 0xf7); -+ tmp2 = dvbsky_m88ds3103_readreg(state, 0xf6); -+ tmp3 |= 0x10; -+ dvbsky_m88ds3103_writereg(state, 0xf8, tmp3); -+ state->preBer = (tmp1<<8) | tmp2; -+ } -+ break; -+ case SYS_DVBS2: -+ tmp1 = dvbsky_m88ds3103_readreg(state, 0x7e) & 0x0f; -+ switch(tmp1){ -+ case 0: code_rate_fac = 16008 - 80; break; -+ case 1: code_rate_fac = 21408 - 80; break; -+ case 2: code_rate_fac = 25728 - 80; break; -+ case 3: code_rate_fac = 32208 - 80; break; -+ case 4: code_rate_fac = 38688 - 80; break; -+ case 5: code_rate_fac = 43040 - 80; break; -+ case 6: code_rate_fac = 48408 - 80; break; -+ case 7: code_rate_fac = 51648 - 80; break; -+ case 8: code_rate_fac = 53840 - 80; break; -+ case 9: code_rate_fac = 57472 - 80; break; -+ case 10: code_rate_fac = 58192 - 80; break; -+ } -+ -+ tmp1 = dvbsky_m88ds3103_readreg(state, 0xd7) & 0xff; -+ tmp2 = dvbsky_m88ds3103_readreg(state, 0xd6) & 0xff; -+ tmp3 = dvbsky_m88ds3103_readreg(state, 0xd5) & 0xff; -+ ldpc_frame_cnt = (tmp1 << 16) | (tmp2 << 8) | tmp3; -+ -+ tmp1 = dvbsky_m88ds3103_readreg(state, 0xf8) & 0xff; -+ tmp2 = dvbsky_m88ds3103_readreg(state, 0xf7) & 0xff; -+ pre_err_packags = tmp1<<8 | tmp2; -+ -+ if (ldpc_frame_cnt > 1000){ -+ dvbsky_m88ds3103_writereg(state, 0xd1, 0x01); -+ dvbsky_m88ds3103_writereg(state, 0xf9, 0x01); -+ dvbsky_m88ds3103_writereg(state, 0xf9, 0x00); -+ dvbsky_m88ds3103_writereg(state, 0xd1, 0x00); -+ state->preBer = pre_err_packags; -+ } -+ break; -+ default: -+ break; -+ } -+ *ber = state->preBer; -+ -+ return 0; -+} -+ -+static int dvbsky_m88ds3103_read_signal_strength(struct dvb_frontend *fe, -+ u16 *signal_strength) -+{ -+ struct dvbsky_m88ds3103_state *state = fe->demodulator_priv; -+ u16 gain; -+ u8 gain1, gain2, gain3 = 0; -+ -+ dprintk("%s()\n", __func__); -+ -+ gain1 = dvbsky_m88ds3103_tuner_readreg(state, 0x3d) & 0x1f; -+ dprintk("%s: gain1 = 0x%02x \n", __func__, gain1); -+ -+ if (gain1 > 15) gain1 = 15; -+ gain2 = dvbsky_m88ds3103_tuner_readreg(state, 0x21) & 0x1f; -+ dprintk("%s: gain2 = 0x%02x \n", __func__, gain2); -+ -+ if(state->tuner_id == TS2022_ID){ -+ gain3 = (dvbsky_m88ds3103_tuner_readreg(state, 0x66)>>3) & 0x07; -+ dprintk("%s: gain3 = 0x%02x \n", __func__, gain3); -+ -+ if (gain2 > 16) gain2 = 16; -+ if (gain2 < 2) gain2 = 2; -+ if (gain3 > 6) gain3 = 6; -+ }else{ -+ if (gain2 > 13) gain2 = 13; -+ gain3 = 0; -+ } -+ -+ gain = gain1*23 + gain2*35 + gain3*29; -+ *signal_strength = 60000 - gain*55; -+ -+ return 0; -+} -+ -+ -+static int dvbsky_m88ds3103_read_snr(struct dvb_frontend *fe, u16 *p_snr) -+{ -+ struct dvbsky_m88ds3103_state *state = fe->demodulator_priv; -+ u8 val, npow1, npow2, spow1, cnt; -+ u16 tmp, snr; -+ u32 npow, spow, snr_total; -+ static const u16 mes_log10[] ={ -+ 0, 3010, 4771, 6021, 6990, 7781, 8451, 9031, 9542, 10000, -+ 10414, 10792, 11139, 11461, 11761, 12041, 12304, 12553, 12788, 13010, -+ 13222, 13424, 13617, 13802, 13979, 14150, 14314, 14472, 14624, 14771, -+ 14914, 15052, 15185, 15315, 15441, 15563, 15682, 15798, 15911, 16021, -+ 16128, 16232, 16335, 16435, 16532, 16628, 16721, 16812, 16902, 16990, -+ 17076, 17160, 17243, 17324, 17404, 17482, 17559, 17634, 17709, 17782, -+ 17853, 17924, 17993, 18062, 18129, 18195, 18261, 18325, 18388, 18451, -+ 18513, 18573, 18633, 18692, 18751, 18808, 18865, 18921, 18976, 19031 -+ }; -+ static const u16 mes_loge[] ={ -+ 0, 6931, 10986, 13863, 16094, 17918, 19459, 20794, 21972, 23026, -+ 23979, 24849, 25649, 26391, 27081, 27726, 28332, 28904, 29444, 29957, -+ 30445, 30910, 31355, 31781, 32189, 32581, 32958, 33322, 33673, 34012, -+ 34340, 34657, -+ }; -+ -+ dprintk("%s()\n", __func__); -+ -+ snr = 0; -+ -+ switch (state->delivery_system){ -+ case SYS_DVBS: -+ cnt = 10; snr_total = 0; -+ while(cnt > 0){ -+ val = dvbsky_m88ds3103_readreg(state, 0xff); -+ snr_total += val; -+ cnt--; -+ } -+ tmp = (u16)(snr_total/80); -+ if(tmp > 0){ -+ if (tmp > 32) tmp = 32; -+ snr = (mes_loge[tmp - 1] * 100) / 45; -+ }else{ -+ snr = 0; -+ } -+ break; -+ case SYS_DVBS2: -+ cnt = 10; npow = 0; spow = 0; -+ while(cnt >0){ -+ npow1 = dvbsky_m88ds3103_readreg(state, 0x8c) & 0xff; -+ npow2 = dvbsky_m88ds3103_readreg(state, 0x8d) & 0xff; -+ npow += (((npow1 & 0x3f) + (u16)(npow2 << 6)) >> 2); -+ -+ spow1 = dvbsky_m88ds3103_readreg(state, 0x8e) & 0xff; -+ spow += ((spow1 * spow1) >> 1); -+ cnt--; -+ } -+ npow /= 10; spow /= 10; -+ if(spow == 0){ -+ snr = 0; -+ }else if(npow == 0){ -+ snr = 19; -+ }else{ -+ if(spow > npow){ -+ tmp = (u16)(spow / npow); -+ if (tmp > 80) tmp = 80; -+ snr = mes_log10[tmp - 1]*3; -+ }else{ -+ tmp = (u16)(npow / spow); -+ if (tmp > 80) tmp = 80; -+ snr = -(mes_log10[tmp - 1] / 1000); -+ } -+ } -+ break; -+ default: -+ break; -+ } -+ *p_snr = snr; -+ -+ return 0; -+} -+ -+ -+static int dvbsky_m88ds3103_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks) -+{ -+ struct dvbsky_m88ds3103_state *state = fe->demodulator_priv; -+ u8 tmp1, tmp2, tmp3, data; -+ -+ dprintk("%s()\n", __func__); -+ -+ switch (state->delivery_system) { -+ case SYS_DVBS: -+ data = dvbsky_m88ds3103_readreg(state, 0xf8); -+ data |= 0x40; -+ dvbsky_m88ds3103_writereg(state, 0xf8, data); -+ tmp1 = dvbsky_m88ds3103_readreg(state, 0xf5); -+ tmp2 = dvbsky_m88ds3103_readreg(state, 0xf4); -+ *ucblocks = (tmp1 <<8) | tmp2; -+ data &= ~0x20; -+ dvbsky_m88ds3103_writereg(state, 0xf8, data); -+ data |= 0x20; -+ dvbsky_m88ds3103_writereg(state, 0xf8, data); -+ data &= ~0x40; -+ dvbsky_m88ds3103_writereg(state, 0xf8, data); -+ break; -+ case SYS_DVBS2: -+ tmp1 = dvbsky_m88ds3103_readreg(state, 0xda); -+ tmp2 = dvbsky_m88ds3103_readreg(state, 0xd9); -+ tmp3 = dvbsky_m88ds3103_readreg(state, 0xd8); -+ *ucblocks = (tmp1 <<16)|(tmp2 <<8)|tmp3; -+ data = dvbsky_m88ds3103_readreg(state, 0xd1); -+ data |= 0x01; -+ dvbsky_m88ds3103_writereg(state, 0xd1, data); -+ data &= ~0x01; -+ dvbsky_m88ds3103_writereg(state, 0xd1, data); -+ break; -+ default: -+ break; -+ } -+ return 0; -+} -+ -+static int dvbsky_m88ds3103_set_tone(struct dvb_frontend *fe, fe_sec_tone_mode_t tone) -+{ -+ struct dvbsky_m88ds3103_state *state = fe->demodulator_priv; -+ u8 data_a1, data_a2; -+ -+ dprintk("%s(%d)\n", __func__, tone); -+ if ((tone != SEC_TONE_ON) && (tone != SEC_TONE_OFF)) { -+ printk(KERN_ERR "%s: Invalid, tone=%d\n", __func__, tone); -+ return -EINVAL; -+ } -+ -+ data_a1 = dvbsky_m88ds3103_readreg(state, 0xa1); -+ data_a2 = dvbsky_m88ds3103_readreg(state, 0xa2); -+ if(state->demod_id == DS3103_ID) -+ data_a2 &= 0xdf; /* Normal mode */ -+ switch (tone) { -+ case SEC_TONE_ON: -+ dprintk("%s: SEC_TONE_ON\n", __func__); -+ data_a1 |= 0x04; -+ data_a1 &= ~0x03; -+ data_a1 &= ~0x40; -+ data_a2 &= ~0xc0; -+ break; -+ case SEC_TONE_OFF: -+ dprintk("%s: SEC_TONE_OFF\n", __func__); -+ data_a2 &= ~0xc0; -+ data_a2 |= 0x80; -+ break; -+ } -+ dvbsky_m88ds3103_writereg(state, 0xa2, data_a2); -+ dvbsky_m88ds3103_writereg(state, 0xa1, data_a1); -+ return 0; -+} -+ -+static int dvbsky_m88ds3103_send_diseqc_msg(struct dvb_frontend *fe, -+ struct dvb_diseqc_master_cmd *d) -+{ -+ struct dvbsky_m88ds3103_state *state = fe->demodulator_priv; -+ int i, ret = 0; -+ u8 tmp, time_out; -+ -+ /* Dump DiSEqC message */ -+ if (debug) { -+ printk(KERN_INFO "m88ds3103: %s(", __func__); -+ for (i = 0 ; i < d->msg_len ;) { -+ printk(KERN_INFO "0x%02x", d->msg[i]); -+ if (++i < d->msg_len) -+ printk(KERN_INFO ", "); -+ } -+ } -+ -+ tmp = dvbsky_m88ds3103_readreg(state, 0xa2); -+ tmp &= ~0xc0; -+ if(state->demod_id == DS3103_ID) -+ tmp &= ~0x20; -+ dvbsky_m88ds3103_writereg(state, 0xa2, tmp); -+ -+ for (i = 0; i < d->msg_len; i ++) -+ dvbsky_m88ds3103_writereg(state, (0xa3+i), d->msg[i]); -+ -+ tmp = dvbsky_m88ds3103_readreg(state, 0xa1); -+ tmp &= ~0x38; -+ tmp &= ~0x40; -+ tmp |= ((d->msg_len-1) << 3) | 0x07; -+ tmp &= ~0x80; -+ dvbsky_m88ds3103_writereg(state, 0xa1, tmp); -+ /* 1.5 * 9 * 8 = 108ms */ -+ time_out = 150; -+ while (time_out > 0){ -+ msleep(10); -+ time_out -= 10; -+ tmp = dvbsky_m88ds3103_readreg(state, 0xa1); -+ if ((tmp & 0x40) == 0) -+ break; -+ } -+ if (time_out == 0){ -+ tmp = dvbsky_m88ds3103_readreg(state, 0xa1); -+ tmp &= ~0x80; -+ tmp |= 0x40; -+ dvbsky_m88ds3103_writereg(state, 0xa1, tmp); -+ ret = 1; -+ } -+ tmp = dvbsky_m88ds3103_readreg(state, 0xa2); -+ tmp &= ~0xc0; -+ tmp |= 0x80; -+ dvbsky_m88ds3103_writereg(state, 0xa2, tmp); -+ return ret; -+} -+ -+ -+static int dvbsky_m88ds3103_diseqc_send_burst(struct dvb_frontend *fe, -+ fe_sec_mini_cmd_t burst) -+{ -+ struct dvbsky_m88ds3103_state *state = fe->demodulator_priv; -+ u8 val, time_out; -+ -+ dprintk("%s()\n", __func__); -+ -+ val = dvbsky_m88ds3103_readreg(state, 0xa2); -+ val &= ~0xc0; -+ if(state->demod_id == DS3103_ID) -+ val &= 0xdf; /* Normal mode */ -+ dvbsky_m88ds3103_writereg(state, 0xa2, val); -+ /* DiSEqC burst */ -+ if (burst == SEC_MINI_B) -+ dvbsky_m88ds3103_writereg(state, 0xa1, 0x01); -+ else -+ dvbsky_m88ds3103_writereg(state, 0xa1, 0x02); -+ -+ msleep(13); -+ -+ time_out = 5; -+ do{ -+ val = dvbsky_m88ds3103_readreg(state, 0xa1); -+ if ((val & 0x40) == 0) -+ break; -+ msleep(1); -+ time_out --; -+ } while (time_out > 0); -+ -+ val = dvbsky_m88ds3103_readreg(state, 0xa2); -+ val &= ~0xc0; -+ val |= 0x80; -+ dvbsky_m88ds3103_writereg(state, 0xa2, val); -+ -+ return 0; -+} -+ -+static void dvbsky_m88ds3103_release(struct dvb_frontend *fe) -+{ -+ struct dvbsky_m88ds3103_state *state = fe->demodulator_priv; -+ -+ dprintk("%s\n", __func__); -+ kfree(state); -+} -+ -+static int dvbsky_m88ds3103_check_id(struct dvbsky_m88ds3103_state *state) -+{ -+ int val_00, val_01; -+ -+ /*check demod id*/ -+ val_01 = dvbsky_m88ds3103_readreg(state, 0x01); -+ printk(KERN_INFO "DS3000 chip version: %x attached.\n", val_01); -+ -+ if(val_01 == 0xD0) -+ state->demod_id = DS3103_ID; -+ else if(val_01 == 0xC0) -+ state->demod_id = DS3000_ID; -+ else -+ state->demod_id = UNKNOW_ID; -+ -+ /*check tuner id*/ -+ val_00 = dvbsky_m88ds3103_tuner_readreg(state, 0x00); -+ printk(KERN_INFO "TS202x chip version[1]: %x attached.\n", val_00); -+ val_00 &= 0x03; -+ if(val_00 == 0) -+ { -+ dvbsky_m88ds3103_tuner_writereg(state, 0x00, 0x01); -+ msleep(3); -+ } -+ dvbsky_m88ds3103_tuner_writereg(state, 0x00, 0x03); -+ msleep(5); -+ -+ val_00 = dvbsky_m88ds3103_tuner_readreg(state, 0x00); -+ printk(KERN_INFO "TS202x chip version[2]: %x attached.\n", val_00); -+ val_00 &= 0xff; -+ if((val_00 == 0x01) || (val_00 == 0x41) || (val_00 == 0x81)) -+ state->tuner_id = TS2020_ID; -+ else if(((val_00 & 0xc0)== 0xc0) || (val_00 == 0x83)) -+ state->tuner_id = TS2022_ID; -+ else -+ state->tuner_id = UNKNOW_ID; -+ -+ return state->demod_id; -+} -+ -+static struct dvb_frontend_ops dvbsky_m88ds3103_ops; -+static int dvbsky_m88ds3103_initilaze(struct dvb_frontend *fe); -+ -+struct dvb_frontend *dvbsky_m88ds3103_attach(const struct dvbsky_m88ds3103_config *config, -+ struct i2c_adapter *i2c) -+{ -+ struct dvbsky_m88ds3103_state *state = NULL; -+ -+ dprintk("%s\n", __func__); -+ -+ /* allocate memory for the internal state */ -+ state = kzalloc(sizeof(struct dvbsky_m88ds3103_state), GFP_KERNEL); -+ if (state == NULL) { -+ printk(KERN_ERR "Unable to kmalloc\n"); -+ goto error2; -+ } -+ -+ state->config = config; -+ state->i2c = i2c; -+ state->preBer = 0xffff; -+ state->delivery_system = SYS_DVBS; /*Default to DVB-S.*/ -+ -+ /* check demod id */ -+ if(dvbsky_m88ds3103_check_id(state) == UNKNOW_ID){ -+ printk(KERN_ERR "Unable to find Montage chip\n"); -+ goto error3; -+ } -+ -+ memcpy(&state->frontend.ops, &dvbsky_m88ds3103_ops, -+ sizeof(struct dvb_frontend_ops)); -+ state->frontend.demodulator_priv = state; -+ -+ dvbsky_m88ds3103_initilaze(&state->frontend); -+ -+ return &state->frontend; -+ -+error3: -+ kfree(state); -+error2: -+ return NULL; -+} -+EXPORT_SYMBOL(dvbsky_m88ds3103_attach); -+ -+static int dvbsky_m88ds3103_set_carrier_offset(struct dvb_frontend *fe, -+ s32 carrier_offset_khz) -+{ -+ struct dvbsky_m88ds3103_state *state = fe->demodulator_priv; -+ s32 tmp; -+ -+ tmp = carrier_offset_khz; -+ tmp *= 65536; -+ -+ tmp = (2*tmp + MT_FE_MCLK_KHZ) / (2*MT_FE_MCLK_KHZ); -+ -+ if (tmp < 0) -+ tmp += 65536; -+ -+ dvbsky_m88ds3103_writereg(state, 0x5f, tmp >> 8); -+ dvbsky_m88ds3103_writereg(state, 0x5e, tmp & 0xff); -+ -+ return 0; -+} -+ -+static int dvbsky_m88ds3103_set_symrate(struct dvb_frontend *fe) -+{ -+ struct dvbsky_m88ds3103_state *state = fe->demodulator_priv; -+ struct dtv_frontend_properties *c = &fe->dtv_property_cache; -+ u16 value; -+ -+ value = (((c->symbol_rate / 1000) << 15) + (MT_FE_MCLK_KHZ / 4)) / (MT_FE_MCLK_KHZ / 2); -+ dvbsky_m88ds3103_writereg(state, 0x61, value & 0x00ff); -+ dvbsky_m88ds3103_writereg(state, 0x62, (value & 0xff00) >> 8); -+ -+ return 0; -+} -+ -+static int dvbsky_m88ds3103_set_CCI(struct dvb_frontend *fe) -+{ -+ struct dvbsky_m88ds3103_state *state = fe->demodulator_priv; -+ u8 tmp; -+ -+ tmp = dvbsky_m88ds3103_readreg(state, 0x56); -+ tmp &= ~0x01; -+ dvbsky_m88ds3103_writereg(state, 0x56, tmp); -+ -+ tmp = dvbsky_m88ds3103_readreg(state, 0x76); -+ tmp &= ~0x80; -+ dvbsky_m88ds3103_writereg(state, 0x76, tmp); -+ -+ return 0; -+} -+ -+static int dvbsky_m88ds3103_init_reg(struct dvbsky_m88ds3103_state *state, const u8 *p_reg_tab, u32 size) -+{ -+ u32 i; -+ -+ for(i = 0; i < size; i+=2) -+ dvbsky_m88ds3103_writereg(state, p_reg_tab[i], p_reg_tab[i+1]); -+ -+ return 0; -+} -+ -+static int dvbsky_m88ds3103_get_locked_sym_rate(struct dvbsky_m88ds3103_state *state, u32 *sym_rate_KSs) -+{ -+ u16 tmp; -+ u32 sym_rate_tmp; -+ u8 val_0x6d, val_0x6e; -+ -+ val_0x6d = dvbsky_m88ds3103_readreg(state, 0x6d); -+ val_0x6e = dvbsky_m88ds3103_readreg(state, 0x6e); -+ -+ tmp = (u16)((val_0x6e<<8) | val_0x6d); -+ -+ sym_rate_tmp = (u32)(tmp * MT_FE_MCLK_KHZ); -+ sym_rate_tmp = (u32)(sym_rate_tmp / (1<<16)); -+ *sym_rate_KSs = sym_rate_tmp; -+ -+ return 0; -+} -+ -+static int dvbsky_m88ds3103_get_channel_info(struct dvbsky_m88ds3103_state *state, u8 *p_mode, u8 *p_coderate) -+{ -+ u8 tmp, val_0x7E; -+ -+ if(state->delivery_system == SYS_DVBS2){ -+ val_0x7E = dvbsky_m88ds3103_readreg(state, 0x7e); -+ tmp = (u8)((val_0x7E&0xC0) >> 6); -+ *p_mode = tmp; -+ tmp = (u8)(val_0x7E & 0x0f); -+ *p_coderate = tmp; -+ } else { -+ *p_mode = 0; -+ tmp = dvbsky_m88ds3103_readreg(state, 0xe6); -+ tmp = (u8)(tmp >> 5); -+ *p_coderate = tmp; -+ } -+ -+ return 0; -+} -+ -+static int dvbsky_m88ds3103_set_clock_ratio(struct dvbsky_m88ds3103_state *state) -+{ -+ u8 val, mod_fac, tmp1, tmp2; -+ u32 input_datarate, locked_sym_rate_KSs; -+ u32 MClk_KHz = 96000; -+ u8 mod_mode, code_rate, divid_ratio = 0; -+ -+ locked_sym_rate_KSs = 0; -+ dvbsky_m88ds3103_get_locked_sym_rate(state, &locked_sym_rate_KSs); -+ if(locked_sym_rate_KSs == 0) -+ return 0; -+ -+ dvbsky_m88ds3103_get_channel_info(state, &mod_mode, &code_rate); -+ -+ if (state->delivery_system == SYS_DVBS2) -+ { -+ switch(mod_mode) { -+ case 1: mod_fac = 3; break; -+ case 2: mod_fac = 4; break; -+ case 3: mod_fac = 5; break; -+ default: mod_fac = 2; break; -+ } -+ -+ switch(code_rate) { -+ case 0: input_datarate = locked_sym_rate_KSs*mod_fac/8/4; break; -+ case 1: input_datarate = locked_sym_rate_KSs*mod_fac/8/3; break; -+ case 2: input_datarate = locked_sym_rate_KSs*mod_fac*2/8/5; break; -+ case 3: input_datarate = locked_sym_rate_KSs*mod_fac/8/2; break; -+ case 4: input_datarate = locked_sym_rate_KSs*mod_fac*3/8/5; break; -+ case 5: input_datarate = locked_sym_rate_KSs*mod_fac*2/8/3; break; -+ case 6: input_datarate = locked_sym_rate_KSs*mod_fac*3/8/4; break; -+ case 7: input_datarate = locked_sym_rate_KSs*mod_fac*4/8/5; break; -+ case 8: input_datarate = locked_sym_rate_KSs*mod_fac*5/8/6; break; -+ case 9: input_datarate = locked_sym_rate_KSs*mod_fac*8/8/9; break; -+ case 10: input_datarate = locked_sym_rate_KSs*mod_fac*9/8/10; break; -+ default: input_datarate = locked_sym_rate_KSs*mod_fac*2/8/3; break; -+ } -+ -+ if(state->demod_id == DS3000_ID) -+ input_datarate = input_datarate * 115 / 100; -+ -+ if(input_datarate < 4800) {tmp1 = 15;tmp2 = 15;} //4.8MHz TS clock -+ else if(input_datarate < 4966) {tmp1 = 14;tmp2 = 15;} //4.966MHz TS clock -+ else if(input_datarate < 5143) {tmp1 = 14;tmp2 = 14;} //5.143MHz TS clock -+ else if(input_datarate < 5333) {tmp1 = 13;tmp2 = 14;} //5.333MHz TS clock -+ else if(input_datarate < 5538) {tmp1 = 13;tmp2 = 13;} //5.538MHz TS clock -+ else if(input_datarate < 5760) {tmp1 = 12;tmp2 = 13;} //5.76MHz TS clock allan 0809 -+ else if(input_datarate < 6000) {tmp1 = 12;tmp2 = 12;} //6MHz TS clock -+ else if(input_datarate < 6260) {tmp1 = 11;tmp2 = 12;} //6.26MHz TS clock -+ else if(input_datarate < 6545) {tmp1 = 11;tmp2 = 11;} //6.545MHz TS clock -+ else if(input_datarate < 6857) {tmp1 = 10;tmp2 = 11;} //6.857MHz TS clock -+ else if(input_datarate < 7200) {tmp1 = 10;tmp2 = 10;} //7.2MHz TS clock -+ else if(input_datarate < 7578) {tmp1 = 9;tmp2 = 10;} //7.578MHz TS clock -+ else if(input_datarate < 8000) {tmp1 = 9;tmp2 = 9;} //8MHz TS clock -+ else if(input_datarate < 8470) {tmp1 = 8;tmp2 = 9;} //8.47MHz TS clock -+ else if(input_datarate < 9000) {tmp1 = 8;tmp2 = 8;} //9MHz TS clock -+ else if(input_datarate < 9600) {tmp1 = 7;tmp2 = 8;} //9.6MHz TS clock -+ else if(input_datarate < 10285) {tmp1 = 7;tmp2 = 7;} //10.285MHz TS clock -+ else if(input_datarate < 12000) {tmp1 = 6;tmp2 = 6;} //12MHz TS clock -+ else if(input_datarate < 14400) {tmp1 = 5;tmp2 = 5;} //14.4MHz TS clock -+ else if(input_datarate < 18000) {tmp1 = 4;tmp2 = 4;} //18MHz TS clock -+ else {tmp1 = 3;tmp2 = 3;} //24MHz TS clock -+ -+ if(state->demod_id == DS3000_ID) { -+ val = (u8)((tmp1<<4) + tmp2); -+ dvbsky_m88ds3103_writereg(state, 0xfe, val); -+ } else { -+ tmp1 = dvbsky_m88ds3103_readreg(state, 0x22); -+ tmp2 = dvbsky_m88ds3103_readreg(state, 0x24); -+ -+ tmp1 >>= 6; -+ tmp1 &= 0x03; -+ tmp2 >>= 6; -+ tmp2 &= 0x03; -+ -+ if((tmp1 == 0x00) && (tmp2 == 0x01)) -+ MClk_KHz = 144000; -+ else if((tmp1 == 0x00) && (tmp2 == 0x03)) -+ MClk_KHz = 72000; -+ else if((tmp1 == 0x01) && (tmp2 == 0x01)) -+ MClk_KHz = 115200; -+ else if((tmp1 == 0x02) && (tmp2 == 0x01)) -+ MClk_KHz = 96000; -+ else if((tmp1 == 0x03) && (tmp2 == 0x00)) -+ MClk_KHz = 192000; -+ else -+ return 0; -+ -+ if(input_datarate < 5200) /*Max. 2011-12-23 11:55*/ -+ input_datarate = 5200; -+ -+ if(input_datarate != 0) -+ divid_ratio = (u8)(MClk_KHz / input_datarate); -+ else -+ divid_ratio = 0xFF; -+ -+ if(divid_ratio > 128) -+ divid_ratio = 128; -+ -+ if(divid_ratio < 2) -+ divid_ratio = 2; -+ -+ tmp1 = (u8)(divid_ratio / 2); -+ tmp2 = (u8)(divid_ratio / 2); -+ -+ if((divid_ratio % 2) != 0) -+ tmp2 += 1; -+ -+ tmp1 -= 1; -+ tmp2 -= 1; -+ -+ tmp1 &= 0x3f; -+ tmp2 &= 0x3f; -+ -+ val = dvbsky_m88ds3103_readreg(state, 0xfe); -+ val &= 0xF0; -+ val |= (tmp2 >> 2) & 0x0f; -+ dvbsky_m88ds3103_writereg(state, 0xfe, val); -+ -+ val = (u8)((tmp2 & 0x03) << 6); -+ val |= tmp1; -+ dvbsky_m88ds3103_writereg(state, 0xea, val); -+ } -+ } else { -+ mod_fac = 2; -+ -+ switch(code_rate) { -+ case 4: input_datarate = locked_sym_rate_KSs*mod_fac/2/8; break; -+ case 3: input_datarate = locked_sym_rate_KSs*mod_fac*2/3/8; break; -+ case 2: input_datarate = locked_sym_rate_KSs*mod_fac*3/4/8; break; -+ case 1: input_datarate = locked_sym_rate_KSs*mod_fac*5/6/8; break; -+ case 0: input_datarate = locked_sym_rate_KSs*mod_fac*7/8/8; break; -+ default: input_datarate = locked_sym_rate_KSs*mod_fac*3/4/8; break; -+ } -+ -+ if(state->demod_id == DS3000_ID) -+ input_datarate = input_datarate * 115 / 100; -+ -+ if(input_datarate < 6857) {tmp1 = 7;tmp2 = 7;} //6.857MHz TS clock -+ else if(input_datarate < 7384) {tmp1 = 6;tmp2 = 7;} //7.384MHz TS clock -+ else if(input_datarate < 8000) {tmp1 = 6;tmp2 = 6;} //8MHz TS clock -+ else if(input_datarate < 8727) {tmp1 = 5;tmp2 = 6;} //8.727MHz TS clock -+ else if(input_datarate < 9600) {tmp1 = 5;tmp2 = 5;} //9.6MHz TS clock -+ else if(input_datarate < 10666) {tmp1 = 4;tmp2 = 5;} //10.666MHz TS clock -+ else if(input_datarate < 12000) {tmp1 = 4;tmp2 = 4;} //12MHz TS clock -+ else if(input_datarate < 13714) {tmp1 = 3;tmp2 = 4;} //13.714MHz TS clock -+ else if(input_datarate < 16000) {tmp1 = 3;tmp2 = 3;} //16MHz TS clock -+ else if(input_datarate < 19200) {tmp1 = 2;tmp2 = 3;} //19.2MHz TS clock -+ else {tmp1 = 2;tmp2 = 2;} //24MHz TS clock -+ -+ if(state->demod_id == DS3000_ID) { -+ val = dvbsky_m88ds3103_readreg(state, 0xfe); -+ val &= 0xc0; -+ val |= ((u8)((tmp1<<3) + tmp2)); -+ dvbsky_m88ds3103_writereg(state, 0xfe, val); -+ } else { -+ if(input_datarate < 5200) /*Max. 2011-12-23 11:55*/ -+ input_datarate = 5200; -+ -+ if(input_datarate != 0) -+ divid_ratio = (u8)(MClk_KHz / input_datarate); -+ else -+ divid_ratio = 0xFF; -+ -+ if(divid_ratio > 128) -+ divid_ratio = 128; -+ -+ if(divid_ratio < 2) -+ divid_ratio = 2; -+ -+ tmp1 = (u8)(divid_ratio / 2); -+ tmp2 = (u8)(divid_ratio / 2); -+ -+ if((divid_ratio % 2) != 0) -+ tmp2 += 1; -+ -+ tmp1 -= 1; -+ tmp2 -= 1; -+ -+ tmp1 &= 0x3f; -+ tmp2 &= 0x3f; -+ -+ val = dvbsky_m88ds3103_readreg(state, 0xfe); -+ val &= 0xF0; -+ val |= (tmp2 >> 2) & 0x0f; -+ dvbsky_m88ds3103_writereg(state, 0xfe, val); -+ -+ val = (u8)((tmp2 & 0x03) << 6); -+ val |= tmp1; -+ dvbsky_m88ds3103_writereg(state, 0xea, val); -+ } -+ } -+ return 0; -+} -+ -+static int dvbsky_m88ds3103_demod_connect(struct dvb_frontend *fe, s32 carrier_offset_khz) -+{ -+ struct dvbsky_m88ds3103_state *state = fe->demodulator_priv; -+ struct dtv_frontend_properties *c = &fe->dtv_property_cache; -+ u16 value; -+ u8 val1,val2,data; -+ -+ dprintk("connect delivery system = %d\n", state->delivery_system); -+ -+ /* ds3000 global reset */ -+ dvbsky_m88ds3103_writereg(state, 0x07, 0x80); -+ dvbsky_m88ds3103_writereg(state, 0x07, 0x00); -+ /* ds3000 build-in uC reset */ -+ dvbsky_m88ds3103_writereg(state, 0xb2, 0x01); -+ /* ds3000 software reset */ -+ dvbsky_m88ds3103_writereg(state, 0x00, 0x01); -+ -+ switch (state->delivery_system) { -+ case SYS_DVBS: -+ /* initialise the demod in DVB-S mode */ -+ if(state->demod_id == DS3000_ID){ -+ dvbsky_m88ds3103_init_reg(state, ds3000_dvbs_init_tab, sizeof(ds3000_dvbs_init_tab)); -+ -+ value = dvbsky_m88ds3103_readreg(state, 0xfe); -+ value &= 0xc0; -+ value |= 0x1b; -+ dvbsky_m88ds3103_writereg(state, 0xfe, value); -+ -+ if(state->config->ci_mode) -+ val1 = 0x80; -+ else if(state->config->ts_mode) -+ val1 = 0x60; -+ else -+ val1 = 0x20; -+ dvbsky_m88ds3103_writereg(state, 0xfd, val1); -+ -+ }else if(state->demod_id == DS3103_ID){ -+ dvbsky_m88ds3103_init_reg(state, ds3103_dvbs_init_tab, sizeof(ds3103_dvbs_init_tab)); -+ -+ /* set ts clock */ -+ if(state->config->ci_mode == 2){ -+ val1 = 6; val2 = 6; -+ }else if(state->config->ts_mode == 0) { -+ val1 = 3; val2 = 3; -+ }else{ -+ val1 = 0; val2 = 0; -+ } -+ val1 -= 1; val2 -= 1; -+ val1 &= 0x3f; val2 &= 0x3f; -+ data = dvbsky_m88ds3103_readreg(state, 0xfe); -+ data &= 0xf0; -+ data |= (val2 >> 2) & 0x0f; -+ dvbsky_m88ds3103_writereg(state, 0xfe, data); -+ data = (val2 & 0x03) << 6; -+ data |= val1; -+ dvbsky_m88ds3103_writereg(state, 0xea, data); -+ -+ dvbsky_m88ds3103_writereg(state, 0x4d, 0xfd & dvbsky_m88ds3103_readreg(state, 0x4d)); -+ dvbsky_m88ds3103_writereg(state, 0x30, 0xef & dvbsky_m88ds3103_readreg(state, 0x30)); -+ -+ /* set master clock */ -+ val1 = dvbsky_m88ds3103_readreg(state, 0x22); -+ val2 = dvbsky_m88ds3103_readreg(state, 0x24); -+ -+ val1 &= 0x3f; -+ val2 &= 0x3f; -+ val1 |= 0x80; -+ val2 |= 0x40; -+ -+ dvbsky_m88ds3103_writereg(state, 0x22, val1); -+ dvbsky_m88ds3103_writereg(state, 0x24, val2); -+ -+ if(state->config->ci_mode){ -+ if(state->config->ci_mode == 2) -+ val1 = 0x43; -+ else -+ val1 = 0x03; -+ } -+ else if(state->config->ts_mode) -+ val1 = 0x06; -+ else -+ val1 = 0x42; -+ dvbsky_m88ds3103_writereg(state, 0xfd, val1); -+ } -+ break; -+ case SYS_DVBS2: -+ /* initialise the demod in DVB-S2 mode */ -+ if(state->demod_id == DS3000_ID){ -+ dvbsky_m88ds3103_init_reg(state, ds3000_dvbs2_init_tab, sizeof(ds3000_dvbs2_init_tab)); -+ -+ if (c->symbol_rate >= 30000000) -+ dvbsky_m88ds3103_writereg(state, 0xfe, 0x54); -+ else -+ dvbsky_m88ds3103_writereg(state, 0xfe, 0x98); -+ -+ }else if(state->demod_id == DS3103_ID){ -+ dvbsky_m88ds3103_init_reg(state, ds3103_dvbs2_init_tab, sizeof(ds3103_dvbs2_init_tab)); -+ -+ /* set ts clock */ -+ if(state->config->ci_mode == 2){ -+ val1 = 6; val2 = 6; -+ }else if(state->config->ts_mode == 0){ -+ val1 = 5; val2 = 4; -+ }else{ -+ val1 = 0; val2 = 0; -+ } -+ val1 -= 1; val2 -= 1; -+ val1 &= 0x3f; val2 &= 0x3f; -+ data = dvbsky_m88ds3103_readreg(state, 0xfe); -+ data &= 0xf0; -+ data |= (val2 >> 2) & 0x0f; -+ dvbsky_m88ds3103_writereg(state, 0xfe, data); -+ data = (val2 & 0x03) << 6; -+ data |= val1; -+ dvbsky_m88ds3103_writereg(state, 0xea, data); -+ -+ dvbsky_m88ds3103_writereg(state, 0x4d, 0xfd & dvbsky_m88ds3103_readreg(state, 0x4d)); -+ dvbsky_m88ds3103_writereg(state, 0x30, 0xef & dvbsky_m88ds3103_readreg(state, 0x30)); -+ -+ /* set master clock */ -+ val1 = dvbsky_m88ds3103_readreg(state, 0x22); -+ val2 = dvbsky_m88ds3103_readreg(state, 0x24); -+ -+ val1 &= 0x3f; -+ val2 &= 0x3f; -+ if((state->config->ci_mode == 2) || (state->config->ts_mode == 1)){ -+ val1 |= 0x80; -+ val2 |= 0x40; -+ }else{ -+ if (c->symbol_rate >= 28000000){ -+ val1 |= 0xc0; -+ }else if (c->symbol_rate >= 18000000){ -+ val2 |= 0x40; -+ }else{ -+ val1 |= 0x80; -+ val2 |= 0x40; -+ } -+ } -+ dvbsky_m88ds3103_writereg(state, 0x22, val1); -+ dvbsky_m88ds3103_writereg(state, 0x24, val2); -+ } -+ -+ if(state->config->ci_mode){ -+ if(state->config->ci_mode == 2) -+ val1 = 0x43; -+ else -+ val1 = 0x03; -+ } -+ else if(state->config->ts_mode) -+ val1 = 0x06; -+ else -+ val1 = 0x42; -+ dvbsky_m88ds3103_writereg(state, 0xfd, val1); -+ -+ break; -+ default: -+ return 1; -+ } -+ /* disable 27MHz clock output */ -+ dvbsky_m88ds3103_writereg(state, 0x29, 0x80); -+ /* enable ac coupling */ -+ dvbsky_m88ds3103_writereg(state, 0x25, 0x8a); -+ -+ if ((c->symbol_rate / 1000) <= 3000){ -+ dvbsky_m88ds3103_writereg(state, 0xc3, 0x08); /* 8 * 32 * 100 / 64 = 400*/ -+ dvbsky_m88ds3103_writereg(state, 0xc8, 0x20); -+ dvbsky_m88ds3103_writereg(state, 0xc4, 0x08); /* 8 * 0 * 100 / 128 = 0*/ -+ dvbsky_m88ds3103_writereg(state, 0xc7, 0x00); -+ }else if((c->symbol_rate / 1000) <= 10000){ -+ dvbsky_m88ds3103_writereg(state, 0xc3, 0x08); /* 8 * 16 * 100 / 64 = 200*/ -+ dvbsky_m88ds3103_writereg(state, 0xc8, 0x10); -+ dvbsky_m88ds3103_writereg(state, 0xc4, 0x08); /* 8 * 0 * 100 / 128 = 0*/ -+ dvbsky_m88ds3103_writereg(state, 0xc7, 0x00); -+ }else{ -+ dvbsky_m88ds3103_writereg(state, 0xc3, 0x08); /* 8 * 6 * 100 / 64 = 75*/ -+ dvbsky_m88ds3103_writereg(state, 0xc8, 0x06); -+ dvbsky_m88ds3103_writereg(state, 0xc4, 0x08); /* 8 * 0 * 100 / 128 = 0*/ -+ dvbsky_m88ds3103_writereg(state, 0xc7, 0x00); -+ } -+ -+ dvbsky_m88ds3103_set_symrate(fe); -+ -+ dvbsky_m88ds3103_set_CCI(fe); -+ -+ dvbsky_m88ds3103_set_carrier_offset(fe, carrier_offset_khz); -+ -+ /* ds3000 out of software reset */ -+ dvbsky_m88ds3103_writereg(state, 0x00, 0x00); -+ /* start ds3000 build-in uC */ -+ dvbsky_m88ds3103_writereg(state, 0xb2, 0x00); -+ -+ return 0; -+} -+ -+static int dvbsky_m88ds3103_set_frontend(struct dvb_frontend *fe) -+{ -+ struct dvbsky_m88ds3103_state *state = fe->demodulator_priv; -+ struct dtv_frontend_properties *c = &fe->dtv_property_cache; -+ -+ int i; -+ fe_status_t status; -+ u8 lpf_mxdiv, mlpf_max, mlpf_min, nlpf, div4, capCode, changePLL; -+ s32 offset_khz, lpf_offset_KHz; -+ u16 value, ndiv, lpf_coeff; -+ u32 f3db, gdiv28, realFreq; -+ u8 RFgain; -+ -+ dprintk("%s() ", __func__); -+ dprintk("c frequency = %d\n", c->frequency); -+ dprintk("symbol rate = %d\n", c->symbol_rate); -+ dprintk("delivery system = %d\n", c->delivery_system); -+ -+ state->delivery_system = c->delivery_system; -+ -+ realFreq = c->frequency; -+ lpf_offset_KHz = 0; -+ if(c->symbol_rate < 5000000){ -+ lpf_offset_KHz = FREQ_OFFSET_AT_SMALL_SYM_RATE_KHz; -+ realFreq += FREQ_OFFSET_AT_SMALL_SYM_RATE_KHz; -+ } -+ -+ if (state->config->set_ts_params) -+ state->config->set_ts_params(fe, 0); -+ -+ div4 = 0; -+ RFgain = 0; -+ if(state->tuner_id == TS2022_ID){ -+ dvbsky_m88ds3103_tuner_writereg(state, 0x10, 0x0a); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x11, 0x40); -+ if (realFreq < 1103000) { -+ dvbsky_m88ds3103_tuner_writereg(state, 0x10, 0x1b); -+ div4 = 1; -+ ndiv = (realFreq * (6 + 8) * 4)/MT_FE_CRYSTAL_KHZ; -+ }else { -+ ndiv = (realFreq * (6 + 8) * 2)/MT_FE_CRYSTAL_KHZ; -+ } -+ ndiv = ndiv + ndiv%2; -+ if(ndiv < 4095) -+ ndiv = ndiv - 1024; -+ else if (ndiv < 6143) -+ ndiv = ndiv + 1024; -+ else -+ ndiv = ndiv + 3072; -+ -+ dvbsky_m88ds3103_tuner_writereg(state, 0x01, (ndiv & 0x3f00) >> 8); -+ }else{ -+ dvbsky_m88ds3103_tuner_writereg(state, 0x10, 0x00); -+ if (realFreq < 1146000){ -+ dvbsky_m88ds3103_tuner_writereg(state, 0x10, 0x11); -+ div4 = 1; -+ ndiv = (realFreq * (6 + 8) * 4) / MT_FE_CRYSTAL_KHZ; -+ }else{ -+ dvbsky_m88ds3103_tuner_writereg(state, 0x10, 0x01); -+ ndiv = (realFreq * (6 + 8) * 2) / MT_FE_CRYSTAL_KHZ; -+ } -+ ndiv = ndiv + ndiv%2; -+ ndiv = ndiv - 1024; -+ dvbsky_m88ds3103_tuner_writereg(state, 0x01, (ndiv>>8)&0x0f); -+ } -+ /* set pll */ -+ dvbsky_m88ds3103_tuner_writereg(state, 0x02, ndiv & 0x00ff); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x03, 0x06); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x51, 0x0f); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x51, 0x1f); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x50, 0x10); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x50, 0x00); -+ -+ if(state->tuner_id == TS2022_ID){ -+ if(( realFreq >= 1650000 ) && (realFreq <= 1850000)){ -+ msleep(5); -+ value = dvbsky_m88ds3103_tuner_readreg(state, 0x14); -+ value &= 0x7f; -+ if(value < 64){ -+ dvbsky_m88ds3103_tuner_writereg(state, 0x10, 0x82); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x11, 0x6f); -+ -+ dvbsky_m88ds3103_tuner_writereg(state, 0x51, 0x0f); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x51, 0x1f); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x50, 0x10); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x50, 0x00); -+ } -+ } -+ msleep(5); -+ value = dvbsky_m88ds3103_tuner_readreg(state, 0x14); -+ value &= 0x1f; -+ -+ if(value > 19){ -+ value = dvbsky_m88ds3103_tuner_readreg(state, 0x10); -+ value &= 0x1d; -+ dvbsky_m88ds3103_tuner_writereg(state, 0x10, value); -+ } -+ }else{ -+ msleep(5); -+ value = dvbsky_m88ds3103_tuner_readreg(state, 0x66); -+ changePLL = (((value & 0x80) >> 7) != div4); -+ -+ if(changePLL){ -+ dvbsky_m88ds3103_tuner_writereg(state, 0x10, 0x11); -+ div4 = 1; -+ ndiv = (realFreq * (6 + 8) * 4)/MT_FE_CRYSTAL_KHZ; -+ ndiv = ndiv + ndiv%2; -+ ndiv = ndiv - 1024; -+ -+ dvbsky_m88ds3103_tuner_writereg(state, 0x01, (ndiv>>8) & 0x0f); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x02, ndiv & 0xff); -+ -+ dvbsky_m88ds3103_tuner_writereg(state, 0x51, 0x0f); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x51, 0x1f); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x50, 0x10); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x50, 0x00); -+ } -+ } -+ /*set the RF gain*/ -+ if(state->tuner_id == TS2020_ID) -+ dvbsky_m88ds3103_tuner_writereg(state, 0x60, 0x79); -+ -+ dvbsky_m88ds3103_tuner_writereg(state, 0x51, 0x17); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x51, 0x1f); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x50, 0x08); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x50, 0x00); -+ msleep(5); -+ -+ if(state->tuner_id == TS2020_ID){ -+ RFgain = dvbsky_m88ds3103_tuner_readreg(state, 0x3d); -+ RFgain &= 0x0f; -+ if(RFgain < 15){ -+ if(RFgain < 4) -+ RFgain = 0; -+ else -+ RFgain = RFgain -3; -+ value = ((RFgain << 3) | 0x01) & 0x79; -+ dvbsky_m88ds3103_tuner_writereg(state, 0x60, value); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x51, 0x17); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x51, 0x1f); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x50, 0x08); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x50, 0x00); -+ } -+ } -+ -+ /* set the LPF */ -+ if(state->tuner_id == TS2022_ID){ -+ dvbsky_m88ds3103_tuner_writereg(state, 0x25, 0x00); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x27, 0x70); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x41, 0x09); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x08, 0x0b); -+ } -+ -+ f3db = ((c->symbol_rate / 1000) *135) / 200 + 2000; -+ f3db += lpf_offset_KHz; -+ if (f3db < 7000) -+ f3db = 7000; -+ if (f3db > 40000) -+ f3db = 40000; -+ -+ gdiv28 = (MT_FE_CRYSTAL_KHZ / 1000 * 1694 + 500) / 1000; -+ dvbsky_m88ds3103_tuner_writereg(state, 0x04, gdiv28 & 0xff); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x51, 0x1b); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x51, 0x1f); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x50, 0x04); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x50, 0x00); -+ msleep(5); -+ -+ value = dvbsky_m88ds3103_tuner_readreg(state, 0x26); -+ capCode = value & 0x3f; -+ if(state->tuner_id == TS2022_ID){ -+ dvbsky_m88ds3103_tuner_writereg(state, 0x41, 0x0d); -+ -+ dvbsky_m88ds3103_tuner_writereg(state, 0x51, 0x1b); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x51, 0x1f); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x50, 0x04); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x50, 0x00); -+ -+ msleep(2); -+ -+ value = dvbsky_m88ds3103_tuner_readreg(state, 0x26); -+ value &= 0x3f; -+ value = (capCode + value) / 2; -+ } -+ else -+ value = capCode; -+ -+ gdiv28 = gdiv28 * 207 / (value * 2 + 151); -+ mlpf_max = gdiv28 * 135 / 100; -+ mlpf_min = gdiv28 * 78 / 100; -+ if (mlpf_max > 63) -+ mlpf_max = 63; -+ -+ if(state->tuner_id == TS2022_ID) -+ lpf_coeff = 3200; -+ else -+ lpf_coeff = 2766; -+ -+ nlpf = (f3db * gdiv28 * 2 / lpf_coeff / (MT_FE_CRYSTAL_KHZ / 1000) + 1) / 2 ; -+ if (nlpf > 23) nlpf = 23; -+ if (nlpf < 1) nlpf = 1; -+ -+ lpf_mxdiv = (nlpf * (MT_FE_CRYSTAL_KHZ / 1000) * lpf_coeff * 2 / f3db + 1) / 2; -+ -+ if (lpf_mxdiv < mlpf_min){ -+ nlpf++; -+ lpf_mxdiv = (nlpf * (MT_FE_CRYSTAL_KHZ / 1000) * lpf_coeff * 2 / f3db + 1) / 2; -+ } -+ -+ if (lpf_mxdiv > mlpf_max) -+ lpf_mxdiv = mlpf_max; -+ -+ dvbsky_m88ds3103_tuner_writereg(state, 0x04, lpf_mxdiv); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x06, nlpf); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x51, 0x1b); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x51, 0x1f); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x50, 0x04); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x50, 0x00); -+ msleep(5); -+ -+ if(state->tuner_id == TS2022_ID){ -+ msleep(2); -+ value = dvbsky_m88ds3103_tuner_readreg(state, 0x26); -+ capCode = value & 0x3f; -+ -+ dvbsky_m88ds3103_tuner_writereg(state, 0x41, 0x09); -+ -+ dvbsky_m88ds3103_tuner_writereg(state, 0x51, 0x1b); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x51, 0x1f); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x50, 0x04); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x50, 0x00); -+ -+ msleep(2); -+ value = dvbsky_m88ds3103_tuner_readreg(state, 0x26); -+ value &= 0x3f; -+ value = (capCode + value) / 2; -+ -+ value = value | 0x80; -+ dvbsky_m88ds3103_tuner_writereg(state, 0x25, value); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x27, 0x30); -+ -+ dvbsky_m88ds3103_tuner_writereg(state, 0x08, 0x09); -+ } -+ -+ /* Set the BB gain */ -+ dvbsky_m88ds3103_tuner_writereg(state, 0x51, 0x1e); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x51, 0x1f); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x50, 0x01); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x50, 0x00); -+ if(state->tuner_id == TS2020_ID){ -+ if(RFgain == 15){ -+ msleep(40); -+ value = dvbsky_m88ds3103_tuner_readreg(state, 0x21); -+ value &= 0x0f; -+ if(value < 3){ -+ dvbsky_m88ds3103_tuner_writereg(state, 0x60, 0x61); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x51, 0x17); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x51, 0x1f); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x50, 0x08); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x50, 0x00); -+ } -+ } -+ } -+ msleep(60); -+ -+ offset_khz = (ndiv - ndiv % 2 + 1024) * MT_FE_CRYSTAL_KHZ -+ / (6 + 8) / (div4 + 1) / 2 - realFreq; -+ -+ dvbsky_m88ds3103_demod_connect(fe, offset_khz+lpf_offset_KHz); -+ -+ for (i = 0; i < 30 ; i++) { -+ dvbsky_m88ds3103_read_status(fe, &status); -+ if (status & FE_HAS_LOCK){ -+ break; -+ } -+ msleep(20); -+ } -+ -+ if (status & FE_HAS_LOCK){ -+ if(state->config->ci_mode == 2) -+ dvbsky_m88ds3103_set_clock_ratio(state); -+ if(state->config->start_ctrl){ -+ if(state->first_lock == 0){ -+ state->config->start_ctrl(fe); -+ state->first_lock = 1; -+ } -+ } -+ } -+ -+ return 0; -+} -+ -+static int dvbsky_m88ds3103_tune(struct dvb_frontend *fe, -+ bool re_tune, -+ unsigned int mode_flags, -+ unsigned int *delay, -+ fe_status_t *status) -+{ -+ *delay = HZ / 5; -+ -+ dprintk("%s() ", __func__); -+ dprintk("re_tune = %d\n", re_tune); -+ -+ if (re_tune) { -+ int ret = dvbsky_m88ds3103_set_frontend(fe); -+ if (ret) -+ return ret; -+ } -+ -+ return dvbsky_m88ds3103_read_status(fe, status); -+} -+ -+static enum dvbfe_algo dvbsky_m88ds3103_get_algo(struct dvb_frontend *fe) -+{ -+ return DVBFE_ALGO_HW; -+} -+ -+ /* -+ * Power config will reset and load initial firmware if required -+ */ -+static int dvbsky_m88ds3103_initilaze(struct dvb_frontend *fe) -+{ -+ struct dvbsky_m88ds3103_state *state = fe->demodulator_priv; -+ int ret; -+ -+ dprintk("%s()\n", __func__); -+ /* hard reset */ -+ dvbsky_m88ds3103_writereg(state, 0x07, 0x80); -+ dvbsky_m88ds3103_writereg(state, 0x07, 0x00); -+ msleep(1); -+ -+ dvbsky_m88ds3103_writereg(state, 0x08, 0x01 | dvbsky_m88ds3103_readreg(state, 0x08)); -+ msleep(1); -+ -+ if(state->tuner_id == TS2020_ID){ -+ /* TS2020 init */ -+ dvbsky_m88ds3103_tuner_writereg(state, 0x42, 0x73); -+ msleep(2); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x05, 0x01); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x62, 0xb5); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x07, 0x02); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x08, 0x01); -+ } -+ else if(state->tuner_id == TS2022_ID){ -+ /* TS2022 init */ -+ dvbsky_m88ds3103_tuner_writereg(state, 0x62, 0x6c); -+ msleep(2); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x42, 0x6c); -+ msleep(2); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x7d, 0x9d); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x7c, 0x9a); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x7a, 0x76); -+ -+ dvbsky_m88ds3103_tuner_writereg(state, 0x3b, 0x01); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x63, 0x88); -+ -+ dvbsky_m88ds3103_tuner_writereg(state, 0x61, 0x85); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x22, 0x30); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x30, 0x40); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x20, 0x23); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x24, 0x02); -+ dvbsky_m88ds3103_tuner_writereg(state, 0x12, 0xa0); -+ } -+ -+ if(state->demod_id == DS3103_ID){ -+ dvbsky_m88ds3103_writereg(state, 0x07, 0xe0); -+ dvbsky_m88ds3103_writereg(state, 0x07, 0x00); -+ msleep(1); -+ } -+ dvbsky_m88ds3103_writereg(state, 0xb2, 0x01); -+ -+ /* Load the firmware if required */ -+ ret = dvbsky_m88ds3103_load_firmware(fe); -+ if (ret != 0){ -+ printk(KERN_ERR "%s: Unable initialize firmware\n", __func__); -+ return ret; -+ } -+ if(state->demod_id == DS3103_ID){ -+ dvbsky_m88ds3103_writereg(state, 0x4d, 0xfd & dvbsky_m88ds3103_readreg(state, 0x4d)); -+ dvbsky_m88ds3103_writereg(state, 0x30, 0xef & dvbsky_m88ds3103_readreg(state, 0x30)); -+ } -+ -+ return 0; -+} -+ -+/* -+ * Initialise or wake up device -+ */ -+static int dvbsky_m88ds3103_initfe(struct dvb_frontend *fe) -+{ -+ struct dvbsky_m88ds3103_state *state = fe->demodulator_priv; -+ u8 val; -+ -+ dprintk("%s()\n", __func__); -+ -+ /* 1st step to wake up demod */ -+ dvbsky_m88ds3103_writereg(state, 0x08, 0x01 | dvbsky_m88ds3103_readreg(state, 0x08)); -+ dvbsky_m88ds3103_writereg(state, 0x04, 0xfe & dvbsky_m88ds3103_readreg(state, 0x04)); -+ dvbsky_m88ds3103_writereg(state, 0x23, 0xef & dvbsky_m88ds3103_readreg(state, 0x23)); -+ -+ /* 2nd step to wake up tuner */ -+ val = dvbsky_m88ds3103_tuner_readreg(state, 0x00) & 0xff; -+ if((val & 0x01) == 0){ -+ dvbsky_m88ds3103_tuner_writereg(state, 0x00, 0x01); -+ msleep(50); -+ } -+ dvbsky_m88ds3103_tuner_writereg(state, 0x00, 0x03); -+ msleep(50); -+ -+ return 0; -+} -+ -+/* Put device to sleep */ -+static int dvbsky_m88ds3103_sleep(struct dvb_frontend *fe) -+{ -+ struct dvbsky_m88ds3103_state *state = fe->demodulator_priv; -+ -+ dprintk("%s()\n", __func__); -+ -+ /* 1st step to sleep tuner */ -+ dvbsky_m88ds3103_tuner_writereg(state, 0x00, 0x00); -+ -+ /* 2nd step to sleep demod */ -+ dvbsky_m88ds3103_writereg(state, 0x08, 0xfe & dvbsky_m88ds3103_readreg(state, 0x08)); -+ dvbsky_m88ds3103_writereg(state, 0x04, 0x01 | dvbsky_m88ds3103_readreg(state, 0x04)); -+ dvbsky_m88ds3103_writereg(state, 0x23, 0x10 | dvbsky_m88ds3103_readreg(state, 0x23)); -+ -+ -+ return 0; -+} -+ -+static struct dvb_frontend_ops dvbsky_m88ds3103_ops = { -+ .delsys = { SYS_DVBS, SYS_DVBS2}, -+ .info = { -+ .name = "Montage DS3103/TS2022", -+ .type = FE_QPSK, -+ .frequency_min = 950000, -+ .frequency_max = 2150000, -+ .frequency_stepsize = 1011, /* kHz for QPSK frontends */ -+ .frequency_tolerance = 5000, -+ .symbol_rate_min = 1000000, -+ .symbol_rate_max = 45000000, -+ .caps = FE_CAN_INVERSION_AUTO | -+ FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | -+ FE_CAN_FEC_4_5 | FE_CAN_FEC_5_6 | FE_CAN_FEC_6_7 | -+ FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO | -+ FE_CAN_2G_MODULATION | -+ FE_CAN_QPSK | FE_CAN_RECOVER -+ }, -+ -+ .release = dvbsky_m88ds3103_release, -+ -+ .init = dvbsky_m88ds3103_initfe, -+ .sleep = dvbsky_m88ds3103_sleep, -+ .read_status = dvbsky_m88ds3103_read_status, -+ .read_ber = dvbsky_m88ds3103_read_ber, -+ .read_signal_strength = dvbsky_m88ds3103_read_signal_strength, -+ .read_snr = dvbsky_m88ds3103_read_snr, -+ .read_ucblocks = dvbsky_m88ds3103_read_ucblocks, -+ .set_tone = dvbsky_m88ds3103_set_tone, -+ .set_voltage = dvbsky_m88ds3103_set_voltage, -+ .diseqc_send_master_cmd = dvbsky_m88ds3103_send_diseqc_msg, -+ .diseqc_send_burst = dvbsky_m88ds3103_diseqc_send_burst, -+ .get_frontend_algo = dvbsky_m88ds3103_get_algo, -+ .tune = dvbsky_m88ds3103_tune, -+ .set_frontend = dvbsky_m88ds3103_set_frontend, -+}; -+ -+MODULE_DESCRIPTION("DVB Frontend module for Montage DS3103/TS2022 hardware"); -+MODULE_AUTHOR("Max nibble"); -+MODULE_LICENSE("GPL"); -diff --git a/drivers/media/dvb-frontends/dvbsky_m88ds3103.h b/drivers/media/dvb-frontends/dvbsky_m88ds3103.h -new file mode 100644 -index 0000000..df95253 ---- /dev/null -+++ b/drivers/media/dvb-frontends/dvbsky_m88ds3103.h -@@ -0,0 +1,53 @@ -+/* -+ Montage Technology M88DS3103/M88TS2022 - DVBS/S2 Satellite demod/tuner driver -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ */ -+ -+#ifndef dvbsky_m88ds3103_H -+#define dvbsky_m88ds3103_H -+ -+#include -+#include -+ -+struct dvbsky_m88ds3103_config { -+ /* the demodulator's i2c address */ -+ u8 demod_address; -+ u8 ci_mode; -+ u8 pin_ctrl; -+ u8 ts_mode; /* 0: Parallel, 1: Serial */ -+ -+ /* Set device param to start dma */ -+ int (*set_ts_params)(struct dvb_frontend *fe, int is_punctured); -+ /* Start to transfer data */ -+ int (*start_ctrl)(struct dvb_frontend *fe); -+ /* Set LNB voltage */ -+ int (*set_voltage)(struct dvb_frontend* fe, fe_sec_voltage_t voltage); -+}; -+ -+#if IS_ENABLED(CONFIG_DVB_DVBSKY_M88DS3103) -+extern struct dvb_frontend *dvbsky_m88ds3103_attach( -+ const struct dvbsky_m88ds3103_config *config, -+ struct i2c_adapter *i2c); -+#else -+static inline struct dvb_frontend *dvbsky_m88ds3103_attach( -+ const struct dvbsky_m88ds3103_config *config, -+ struct i2c_adapter *i2c) -+{ -+ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); -+ return NULL; -+} -+#endif /* CONFIG_DVB_DVBSKY_M88DS3103 */ -+#endif /* dvbsky_m88ds3103_H */ -diff --git a/drivers/media/dvb-frontends/dvbsky_m88ds3103_priv.h b/drivers/media/dvb-frontends/dvbsky_m88ds3103_priv.h -new file mode 100644 -index 0000000..dfb3f8b ---- /dev/null -+++ b/drivers/media/dvb-frontends/dvbsky_m88ds3103_priv.h -@@ -0,0 +1,403 @@ -+/* -+ Montage Technology M88DS3103/M88TS2022 - DVBS/S2 Satellite demod/tuner driver -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ */ -+ -+#ifndef dvbsky_m88ds3103_PRIV_H -+#define dvbsky_m88ds3103_PRIV_H -+ -+#define FW_DOWN_SIZE 32 -+#define FW_DOWN_LOOP (8192/FW_DOWN_SIZE) -+#define DS3103_DEFAULT_FIRMWARE "dvb-fe-ds3103.fw" -+#define DS3000_DEFAULT_FIRMWARE "dvb-fe-ds300x.fw" -+#define MT_FE_MCLK_KHZ 96000 /* in kHz */ -+#define MT_FE_CRYSTAL_KHZ 27000 /* in kHz */ -+#define FREQ_OFFSET_AT_SMALL_SYM_RATE_KHz 3000 -+#define DS3000_ID 0x3000 -+#define DS3103_ID 0x3103 -+#define TS2020_ID 0x2020 -+#define TS2022_ID 0x2022 -+#define UNKNOW_ID 0x0000 -+ -+struct dvbsky_m88ds3103_state { -+ struct i2c_adapter *i2c; -+ const struct dvbsky_m88ds3103_config *config; -+ -+ struct dvb_frontend frontend; -+ -+ u32 preBer; -+ u8 skip_fw_load; -+ u8 first_lock; /* The first time of signal lock */ -+ u16 demod_id; /* demod chip type */ -+ u16 tuner_id; /* tuner chip type */ -+ fe_delivery_system_t delivery_system; -+}; -+ -+/* For M88DS3103 demod dvbs mode.*/ -+static u8 ds3103_dvbs_init_tab[] = { -+ 0x23, 0x07, -+ 0x08, 0x03, -+ 0x0c, 0x02, -+ 0x21, 0x54, -+ 0x25, 0x82, -+ 0x27, 0x31, -+ 0x30, 0x08, -+ 0x31, 0x40, -+ 0x32, 0x32, -+ 0x33, 0x35, -+ 0x35, 0xff, -+ 0x3a, 0x00, -+ 0x37, 0x10, -+ 0x38, 0x10, -+ 0x39, 0x02, -+ 0x42, 0x60, -+ 0x4a, 0x80, -+ 0x4b, 0x04, -+ 0x4d, 0x91, -+ 0x5d, 0xc8, -+ 0x50, 0x36, -+ 0x51, 0x36, -+ 0x52, 0x36, -+ 0x53, 0x36, -+ 0x63, 0x0f, -+ 0x64, 0x30, -+ 0x65, 0x40, -+ 0x68, 0x26, -+ 0x69, 0x4c, -+ 0x70, 0x20, -+ 0x71, 0x70, -+ 0x72, 0x04, -+ 0x73, 0x00, -+ 0x70, 0x40, -+ 0x71, 0x70, -+ 0x72, 0x04, -+ 0x73, 0x00, -+ 0x70, 0x60, -+ 0x71, 0x70, -+ 0x72, 0x04, -+ 0x73, 0x00, -+ 0x70, 0x80, -+ 0x71, 0x70, -+ 0x72, 0x04, -+ 0x73, 0x00, -+ 0x70, 0xa0, -+ 0x71, 0x70, -+ 0x72, 0x04, -+ 0x73, 0x00, -+ 0x70, 0x1f, -+ 0x76, 0x38, -+ 0x77, 0xa6, -+ 0x78, 0x0c, -+ 0x79, 0x80, -+ 0x7f, 0x14, -+ 0x7c, 0x00, -+ 0xae, 0x82, -+ 0x80, 0x64, -+ 0x81, 0x66, -+ 0x82, 0x44, -+ 0x85, 0x04, -+ 0xcd, 0xf4, -+ 0x90, 0x33, -+ 0xa0, 0x44, -+ 0xc0, 0x08, -+ 0xc3, 0x10, -+ 0xc4, 0x08, -+ 0xc5, 0xf0, -+ 0xc6, 0xff, -+ 0xc7, 0x00, -+ 0xc8, 0x1a, -+ 0xc9, 0x80, -+ 0xe0, 0xf8, -+ 0xe6, 0x8b, -+ 0xd0, 0x40, -+ 0xf8, 0x20, -+ 0xfa, 0x0f, -+ 0x00, 0x00, -+ 0xbd, 0x01, -+ 0xb8, 0x00, -+}; -+/* For M88DS3103 demod dvbs2 mode.*/ -+static u8 ds3103_dvbs2_init_tab[] = { -+ 0x23, 0x07, -+ 0x08, 0x07, -+ 0x0c, 0x02, -+ 0x21, 0x54, -+ 0x25, 0x82, -+ 0x27, 0x31, -+ 0x30, 0x08, -+ 0x32, 0x32, -+ 0x33, 0x35, -+ 0x35, 0xff, -+ 0x3a, 0x00, -+ 0x37, 0x10, -+ 0x38, 0x10, -+ 0x39, 0x02, -+ 0x42, 0x60, -+ 0x4a, 0x80, -+ 0x4b, 0x04, -+ 0x4d, 0x91, -+ 0x5d, 0xc8, -+ 0x50, 0x36, -+ 0x51, 0x36, -+ 0x52, 0x36, -+ 0x53, 0x36, -+ 0x63, 0x0f, -+ 0x64, 0x10, -+ 0x65, 0x20, -+ 0x68, 0x46, -+ 0x69, 0xcd, -+ 0x70, 0x20, -+ 0x71, 0x70, -+ 0x72, 0x04, -+ 0x73, 0x00, -+ 0x70, 0x40, -+ 0x71, 0x70, -+ 0x72, 0x04, -+ 0x73, 0x00, -+ 0x70, 0x60, -+ 0x71, 0x70, -+ 0x72, 0x04, -+ 0x73, 0x00, -+ 0x70, 0x80, -+ 0x71, 0x70, -+ 0x72, 0x04, -+ 0x73, 0x00, -+ 0x70, 0xa0, -+ 0x71, 0x70, -+ 0x72, 0x04, -+ 0x73, 0x00, -+ 0x70, 0x1f, -+ 0x76, 0x38, -+ 0x77, 0xa6, -+ 0x78, 0x0c, -+ 0x79, 0x80, -+ 0x7f, 0x14, -+ 0x85, 0x08, -+ 0xcd, 0xf4, -+ 0x90, 0x33, -+ 0x86, 0x00, -+ 0x87, 0x0f, -+ 0x89, 0x00, -+ 0x8b, 0x44, -+ 0x8c, 0x66, -+ 0x9d, 0xc1, -+ 0x8a, 0x10, -+ 0xad, 0x40, -+ 0xa0, 0x44, -+ 0xc0, 0x08, -+ 0xc1, 0x10, -+ 0xc2, 0x08, -+ 0xc3, 0x10, -+ 0xc4, 0x08, -+ 0xc5, 0xf0, -+ 0xc6, 0xff, -+ 0xc7, 0x00, -+ 0xc8, 0x1a, -+ 0xc9, 0x80, -+ 0xca, 0x23, -+ 0xcb, 0x24, -+ 0xcc, 0xf4, -+ 0xce, 0x74, -+ 0x00, 0x00, -+ 0xbd, 0x01, -+ 0xb8, 0x00, -+}; -+ -+/* For M88DS3000 demod dvbs mode.*/ -+static u8 ds3000_dvbs_init_tab[] = { -+ 0x23, 0x05, -+ 0x08, 0x03, -+ 0x0c, 0x02, -+ 0x21, 0x54, -+ 0x25, 0x82, -+ 0x27, 0x31, -+ 0x30, 0x08, -+ 0x31, 0x40, -+ 0x32, 0x32, -+ 0x33, 0x35, -+ 0x35, 0xff, -+ 0x3a, 0x00, -+ 0x37, 0x10, -+ 0x38, 0x10, -+ 0x39, 0x02, -+ 0x42, 0x60, -+ 0x4a, 0x40, -+ 0x4b, 0x04, -+ 0x4d, 0x91, -+ 0x5d, 0xc8, -+ 0x50, 0x77, -+ 0x51, 0x77, -+ 0x52, 0x36, -+ 0x53, 0x36, -+ 0x56, 0x01, -+ 0x63, 0x47, -+ 0x64, 0x30, -+ 0x65, 0x40, -+ 0x68, 0x26, -+ 0x69, 0x4c, -+ 0x70, 0x20, -+ 0x71, 0x70, -+ 0x72, 0x04, -+ 0x73, 0x00, -+ 0x70, 0x40, -+ 0x71, 0x70, -+ 0x72, 0x04, -+ 0x73, 0x00, -+ 0x70, 0x60, -+ 0x71, 0x70, -+ 0x72, 0x04, -+ 0x73, 0x00, -+ 0x70, 0x80, -+ 0x71, 0x70, -+ 0x72, 0x04, -+ 0x73, 0x00, -+ 0x70, 0xa0, -+ 0x71, 0x70, -+ 0x72, 0x04, -+ 0x73, 0x00, -+ 0x70, 0x1f, -+ 0x76, 0x00, -+ 0x77, 0xd1, -+ 0x78, 0x0c, -+ 0x79, 0x80, -+ 0x7f, 0x04, -+ 0x7c, 0x00, -+ 0x80, 0x86, -+ 0x81, 0xa6, -+ 0x85, 0x04, -+ 0xcd, 0xf4, -+ 0x90, 0x33, -+ 0xa0, 0x44, -+ 0xc0, 0x18, -+ 0xc3, 0x10, -+ 0xc4, 0x08, -+ 0xc5, 0x80, -+ 0xc6, 0x80, -+ 0xc7, 0x0a, -+ 0xc8, 0x1a, -+ 0xc9, 0x80, -+ 0xfe, 0xb6, -+ 0xe0, 0xf8, -+ 0xe6, 0x8b, -+ 0xd0, 0x40, -+ 0xf8, 0x20, -+ 0xfa, 0x0f, -+ 0xad, 0x20, -+ 0xae, 0x07, -+ 0xb8, 0x00, -+}; -+ -+/* For M88DS3000 demod dvbs2 mode.*/ -+static u8 ds3000_dvbs2_init_tab[] = { -+ 0x23, 0x0f, -+ 0x08, 0x07, -+ 0x0c, 0x02, -+ 0x21, 0x54, -+ 0x25, 0x82, -+ 0x27, 0x31, -+ 0x30, 0x08, -+ 0x31, 0x32, -+ 0x32, 0x32, -+ 0x33, 0x35, -+ 0x35, 0xff, -+ 0x3a, 0x00, -+ 0x37, 0x10, -+ 0x38, 0x10, -+ 0x39, 0x02, -+ 0x42, 0x60, -+ 0x4a, 0x80, -+ 0x4b, 0x04, -+ 0x4d, 0x91, -+ 0x5d, 0x88, -+ 0x50, 0x36, -+ 0x51, 0x36, -+ 0x52, 0x36, -+ 0x53, 0x36, -+ 0x63, 0x60, -+ 0x64, 0x10, -+ 0x65, 0x10, -+ 0x68, 0x04, -+ 0x69, 0x29, -+ 0x70, 0x20, -+ 0x71, 0x70, -+ 0x72, 0x04, -+ 0x73, 0x00, -+ 0x70, 0x40, -+ 0x71, 0x70, -+ 0x72, 0x04, -+ 0x73, 0x00, -+ 0x70, 0x60, -+ 0x71, 0x70, -+ 0x72, 0x04, -+ 0x73, 0x00, -+ 0x70, 0x80, -+ 0x71, 0x70, -+ 0x72, 0x04, -+ 0x73, 0x00, -+ 0x70, 0xa0, -+ 0x71, 0x70, -+ 0x72, 0x04, -+ 0x73, 0x00, -+ 0x70, 0x1f, -+ 0xa0, 0x44, -+ 0xc0, 0x08, -+ 0xc1, 0x10, -+ 0xc2, 0x08, -+ 0xc3, 0x10, -+ 0xc4, 0x08, -+ 0xc5, 0xf0, -+ 0xc6, 0xf0, -+ 0xc7, 0x0a, -+ 0xc8, 0x1a, -+ 0xc9, 0x80, -+ 0xca, 0x23, -+ 0xcb, 0x24, -+ 0xce, 0x74, -+ 0x56, 0x01, -+ 0x90, 0x03, -+ 0x76, 0x80, -+ 0x77, 0x42, -+ 0x78, 0x0a, -+ 0x79, 0x80, -+ 0xad, 0x40, -+ 0xae, 0x07, -+ 0x7f, 0xd4, -+ 0x7c, 0x00, -+ 0x80, 0xa8, -+ 0x81, 0xda, -+ 0x7c, 0x01, -+ 0x80, 0xda, -+ 0x81, 0xec, -+ 0x7c, 0x02, -+ 0x80, 0xca, -+ 0x81, 0xeb, -+ 0x7c, 0x03, -+ 0x80, 0xba, -+ 0x81, 0xdb, -+ 0x85, 0x08, -+ 0x86, 0x00, -+ 0x87, 0x02, -+ 0x89, 0x80, -+ 0x8b, 0x44, -+ 0x8c, 0xaa, -+ 0x8a, 0x10, -+ 0xba, 0x00, -+ 0xf5, 0x04, -+ 0xd2, 0x32, -+ 0xb8, 0x00, -+}; -+ -+#endif /* dvbsky_m88ds3103_PRIV_H */ -diff --git a/drivers/media/pci/cx23885/Kconfig b/drivers/media/pci/cx23885/Kconfig -index d1dcb1d..a5fbc89 100644 ---- a/drivers/media/pci/cx23885/Kconfig -+++ b/drivers/media/pci/cx23885/Kconfig -@@ -23,6 +23,8 @@ config VIDEO_CX23885 - select DVB_STB6100 if MEDIA_SUBDRV_AUTOSELECT - select DVB_STV6110 if MEDIA_SUBDRV_AUTOSELECT - select DVB_CX24116 if MEDIA_SUBDRV_AUTOSELECT -+ select DVB_DVBSKY_M88DS3103 if MEDIA_SUBDRV_AUTOSELECT -+ select DVB_DVBSKY_M88DC2800 if MEDIA_SUBDRV_AUTOSELECT - select DVB_CX24117 if MEDIA_SUBDRV_AUTOSELECT - select DVB_STV0900 if MEDIA_SUBDRV_AUTOSELECT - select DVB_DS3000 if MEDIA_SUBDRV_AUTOSELECT -diff --git a/drivers/media/pci/cx23885/cimax2.c b/drivers/media/pci/cx23885/cimax2.c -index 16fa7ea..2b63f78 100644 ---- a/drivers/media/pci/cx23885/cimax2.c -+++ b/drivers/media/pci/cx23885/cimax2.c -@@ -426,7 +426,7 @@ int netup_poll_ci_slot_status(struct dvb_ca_en50221 *en50221, - return state->status; - } - --int netup_ci_init(struct cx23885_tsport *port) -+int netup_ci_init(struct cx23885_tsport *port, bool isDVBSky) - { - struct netup_ci_state *state; - u8 cimax_init[34] = { -@@ -475,6 +475,11 @@ int netup_ci_init(struct cx23885_tsport *port) - goto err; - } - -+ if(isDVBSky) { -+ cimax_init[32] = 0x22; -+ cimax_init[33] = 0x00; -+ } -+ - port->port_priv = state; - - switch (port->nr) { -@@ -548,3 +553,19 @@ void netup_ci_exit(struct cx23885_tsport *port) - dvb_ca_en50221_release(&state->ca); - kfree(state); - } -+ -+/* CI irq handler for DVBSky board*/ -+int dvbsky_ci_slot_status(struct cx23885_dev *dev) -+{ -+ struct cx23885_tsport *port = NULL; -+ struct netup_ci_state *state = NULL; -+ -+ ci_dbg_print("%s:\n", __func__); -+ -+ port = &dev->ts1; -+ state = port->port_priv; -+ schedule_work(&state->work); -+ ci_dbg_print("%s: Wakeup CI0\n", __func__); -+ -+ return 1; -+} -diff --git a/drivers/media/pci/cx23885/cimax2.h b/drivers/media/pci/cx23885/cimax2.h -index 518744a..39f3db7 100644 ---- a/drivers/media/pci/cx23885/cimax2.h -+++ b/drivers/media/pci/cx23885/cimax2.h -@@ -41,7 +41,9 @@ extern int netup_ci_slot_ts_ctl(struct dvb_ca_en50221 *en50221, int slot); - extern int netup_ci_slot_status(struct cx23885_dev *dev, u32 pci_status); - extern int netup_poll_ci_slot_status(struct dvb_ca_en50221 *en50221, - int slot, int open); --extern int netup_ci_init(struct cx23885_tsport *port); -+extern int netup_ci_init(struct cx23885_tsport *port, bool isDVBSky); - extern void netup_ci_exit(struct cx23885_tsport *port); - -+extern int dvbsky_ci_slot_status(struct cx23885_dev *dev); -+ - #endif -diff --git a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx23885/cx23885-cards.c -index 79f20c8..cb00710 100644 ---- a/drivers/media/pci/cx23885/cx23885-cards.c -+++ b/drivers/media/pci/cx23885/cx23885-cards.c -@@ -613,6 +613,34 @@ struct cx23885_board cx23885_boards[] = { - .name = "TeVii S471", - .portb = CX23885_MPEG_DVB, - }, -+ [CX23885_BOARD_BST_PS8512] = { -+ .name = "Bestunar PS8512", -+ .portb = CX23885_MPEG_DVB, -+ }, -+ [CX23885_BOARD_DVBSKY_S950] = { -+ .name = "DVBSKY S950", -+ .portb = CX23885_MPEG_DVB, -+ }, -+ [CX23885_BOARD_DVBSKY_S952] = { -+ .name = "DVBSKY S952", -+ .portb = CX23885_MPEG_DVB, -+ .portc = CX23885_MPEG_DVB, -+ }, -+ [CX23885_BOARD_DVBSKY_S950_CI] = { -+ .ci_type = 3, -+ .name = "DVBSKY S950CI DVB-S2 CI", -+ .portb = CX23885_MPEG_DVB, -+ }, -+ [CX23885_BOARD_DVBSKY_C2800E_CI] = { -+ .ci_type = 3, -+ .name = "DVBSKY C2800E DVB-C CI", -+ .portb = CX23885_MPEG_DVB, -+ }, -+ [CX23885_BOARD_DVBSKY_T9580] = { -+ .name = "DVBSKY T9580", -+ .portb = CX23885_MPEG_DVB, -+ .portc = CX23885_MPEG_DVB, -+ }, - [CX23885_BOARD_PROF_8000] = { - .name = "Prof Revolution DVB-S2 8000", - .portb = CX23885_MPEG_DVB, -@@ -874,6 +902,30 @@ struct cx23885_subid cx23885_subids[] = { - .subdevice = 0x9022, - .card = CX23885_BOARD_TEVII_S471, - }, { -+ .subvendor = 0x14f1, -+ .subdevice = 0x8512, -+ .card = CX23885_BOARD_BST_PS8512, -+ }, { -+ .subvendor = 0x4254, -+ .subdevice = 0x0950, -+ .card = CX23885_BOARD_DVBSKY_S950, -+ }, { -+ .subvendor = 0x4254, -+ .subdevice = 0x0952, -+ .card = CX23885_BOARD_DVBSKY_S952, -+ }, { -+ .subvendor = 0x4254, -+ .subdevice = 0x950C, -+ .card = CX23885_BOARD_DVBSKY_S950_CI, -+ }, { -+ .subvendor = 0x4254, -+ .subdevice = 0x2800, -+ .card = CX23885_BOARD_DVBSKY_C2800E_CI, -+ }, { -+ .subvendor = 0x4254, -+ .subdevice = 0x9580, -+ .card = CX23885_BOARD_DVBSKY_T9580, -+ }, { - .subvendor = 0x8000, - .subdevice = 0x3034, - .card = CX23885_BOARD_PROF_8000, -@@ -1483,9 +1535,84 @@ void cx23885_gpio_setup(struct cx23885_dev *dev) - cx_set(GP0_IO, 0x00040004); - mdelay(60); - break; -+ case CX23885_BOARD_DVBSKY_S950: -+ case CX23885_BOARD_BST_PS8512: -+ cx23885_gpio_enable(dev, GPIO_2, 1); -+ cx23885_gpio_clear(dev, GPIO_2); -+ msleep(100); -+ cx23885_gpio_set(dev, GPIO_2); -+ break; -+ case CX23885_BOARD_DVBSKY_S952: -+ case CX23885_BOARD_DVBSKY_T9580: -+ cx_write(MC417_CTL, 0x00000037);/* enable GPIO3-18 pins */ -+ -+ cx23885_gpio_enable(dev, GPIO_2, 1); -+ cx23885_gpio_enable(dev, GPIO_11, 1); -+ -+ cx23885_gpio_clear(dev, GPIO_2); -+ cx23885_gpio_clear(dev, GPIO_11); -+ msleep(100); -+ cx23885_gpio_set(dev, GPIO_2); -+ cx23885_gpio_set(dev, GPIO_11); -+ break; -+ case CX23885_BOARD_DVBSKY_S950_CI: -+ case CX23885_BOARD_DVBSKY_C2800E_CI: -+ /* GPIO-0 INTA from CiMax, input -+ GPIO-1 reset CiMax, output, high active -+ GPIO-2 reset demod, output, low active -+ GPIO-3 to GPIO-10 data/addr for CAM -+ GPIO-11 ~CS0 to CiMax1 -+ GPIO-12 ~CS1 to CiMax2 -+ GPIO-13 ADL0 load LSB addr -+ GPIO-14 ADL1 load MSB addr -+ GPIO-15 ~RDY from CiMax -+ GPIO-17 ~RD to CiMax -+ GPIO-18 ~WR to CiMax -+ */ -+ cx_set(GP0_IO, 0x00060002); /* GPIO 1/2 as output */ -+ cx_clear(GP0_IO, 0x00010004); /*GPIO 0 as input*/ -+ mdelay(100);/* reset delay */ -+ cx_set(GP0_IO, 0x00060004); /* GPIO as out, reset high */ -+ cx_clear(GP0_IO, 0x00010002); -+ cx_write(MC417_CTL, 0x00000037);/* enable GPIO3-18 pins */ -+ /* GPIO-15 IN as ~ACK, rest as OUT */ -+ cx_write(MC417_OEN, 0x00001000); -+ /* ~RD, ~WR high; ADL0, ADL1 low; ~CS0, ~CS1 high */ -+ cx_write(MC417_RWD, 0x0000c300); -+ /* enable irq */ -+ cx_write(GPIO_ISM, 0x00000000);/* INTERRUPTS active low*/ -+ break; - } - } - -+static int cx23885_ir_patch(struct i2c_adapter *i2c, u8 reg, u8 mask) -+{ -+ struct i2c_msg msgs[2]; -+ u8 tx_buf[2], rx_buf[1]; -+ /* Write register address */ -+ tx_buf[0] = reg; -+ msgs[0].addr = 0x4c; -+ msgs[0].flags = 0; -+ msgs[0].len = 1; -+ msgs[0].buf = (char *) tx_buf; -+ /* Read data from register */ -+ msgs[1].addr = 0x4c; -+ msgs[1].flags = I2C_M_RD; -+ msgs[1].len = 1; -+ msgs[1].buf = (char *) rx_buf; -+ -+ i2c_transfer(i2c, msgs, 2); -+ -+ tx_buf[0] = reg; -+ tx_buf[1] = rx_buf[0] | mask; -+ msgs[0].addr = 0x4c; -+ msgs[0].flags = 0; -+ msgs[0].len = 2; -+ msgs[0].buf = (char *) tx_buf; -+ -+ return i2c_transfer(i2c, msgs, 1); -+} -+ - int cx23885_ir_init(struct cx23885_dev *dev) - { - static struct v4l2_subdev_io_pin_config ir_rxtx_pin_cfg[] = { -@@ -1573,6 +1700,23 @@ int cx23885_ir_init(struct cx23885_dev *dev) - v4l2_subdev_call(dev->sd_cx25840, core, s_io_pin_config, - ir_rx_pin_cfg_count, ir_rx_pin_cfg); - break; -+ case CX23885_BOARD_BST_PS8512: -+ case CX23885_BOARD_DVBSKY_S950: -+ case CX23885_BOARD_DVBSKY_S952: -+ case CX23885_BOARD_DVBSKY_S950_CI: -+ case CX23885_BOARD_DVBSKY_C2800E_CI: -+ case CX23885_BOARD_DVBSKY_T9580: -+ dev->sd_ir = cx23885_find_hw(dev, CX23885_HW_AV_CORE); -+ if (dev->sd_ir == NULL) { -+ ret = -ENODEV; -+ break; -+ } -+ v4l2_subdev_call(dev->sd_cx25840, core, s_io_pin_config, -+ ir_rx_pin_cfg_count, ir_rx_pin_cfg); -+ -+ cx23885_ir_patch(&(dev->i2c_bus[2].i2c_adap),0x1f,0x80); -+ cx23885_ir_patch(&(dev->i2c_bus[2].i2c_adap),0x23,0x80); -+ break; - case CX23885_BOARD_HAUPPAUGE_HVR1250: - if (!enable_885_ir) - break; -@@ -1602,6 +1746,12 @@ void cx23885_ir_fini(struct cx23885_dev *dev) - cx23888_ir_remove(dev); - dev->sd_ir = NULL; - break; -+ case CX23885_BOARD_BST_PS8512: -+ case CX23885_BOARD_DVBSKY_S950: -+ case CX23885_BOARD_DVBSKY_S952: -+ case CX23885_BOARD_DVBSKY_S950_CI: -+ case CX23885_BOARD_DVBSKY_C2800E_CI: -+ case CX23885_BOARD_DVBSKY_T9580: - case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL: - case CX23885_BOARD_TEVII_S470: - case CX23885_BOARD_HAUPPAUGE_HVR1250: -@@ -1649,6 +1799,12 @@ void cx23885_ir_pci_int_enable(struct cx23885_dev *dev) - if (dev->sd_ir) - cx23885_irq_add_enable(dev, PCI_MSK_IR); - break; -+ case CX23885_BOARD_BST_PS8512: -+ case CX23885_BOARD_DVBSKY_S950: -+ case CX23885_BOARD_DVBSKY_S952: -+ case CX23885_BOARD_DVBSKY_S950_CI: -+ case CX23885_BOARD_DVBSKY_C2800E_CI: -+ case CX23885_BOARD_DVBSKY_T9580: - case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL: - case CX23885_BOARD_TEVII_S470: - case CX23885_BOARD_HAUPPAUGE_HVR1250: -@@ -1752,6 +1908,10 @@ void cx23885_card_setup(struct cx23885_dev *dev) - ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ - ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; - break; -+ case CX23885_BOARD_BST_PS8512: -+ case CX23885_BOARD_DVBSKY_S950: -+ case CX23885_BOARD_DVBSKY_S950_CI: -+ case CX23885_BOARD_DVBSKY_C2800E_CI: - case CX23885_BOARD_TEVII_S470: - case CX23885_BOARD_TEVII_S471: - case CX23885_BOARD_DVBWORLD_2005: -@@ -1800,6 +1960,22 @@ void cx23885_card_setup(struct cx23885_dev *dev) - ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ - ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; - break; -+ case CX23885_BOARD_DVBSKY_S952: -+ ts1->gen_ctrl_val = 0x5; /* Parallel */ -+ ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ -+ ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; -+ ts2->gen_ctrl_val = 0xe; /* Serial bus + punctured clock */ -+ ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */ -+ ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; -+ break; -+ case CX23885_BOARD_DVBSKY_T9580: -+ ts1->gen_ctrl_val = 0x5; /* Parallel */ -+ ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ -+ ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; -+ ts2->gen_ctrl_val = 0x8; /* Serial bus */ -+ ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */ -+ ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; -+ break; - case CX23885_BOARD_HAUPPAUGE_HVR1250: - case CX23885_BOARD_HAUPPAUGE_HVR1500: - case CX23885_BOARD_HAUPPAUGE_HVR1500Q: -@@ -1857,6 +2033,12 @@ void cx23885_card_setup(struct cx23885_dev *dev) - case CX23885_BOARD_MPX885: - case CX23885_BOARD_MYGICA_X8507: - case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL: -+ case CX23885_BOARD_BST_PS8512: -+ case CX23885_BOARD_DVBSKY_S950: -+ case CX23885_BOARD_DVBSKY_S952: -+ case CX23885_BOARD_DVBSKY_S950_CI: -+ case CX23885_BOARD_DVBSKY_C2800E_CI: -+ case CX23885_BOARD_DVBSKY_T9580: - case CX23885_BOARD_AVERMEDIA_HC81R: - case CX23885_BOARD_TBS_6980: - case CX23885_BOARD_TBS_6981: -diff --git a/drivers/media/pci/cx23885/cx23885-core.c b/drivers/media/pci/cx23885/cx23885-core.c -index edcd79d..4b57eef 100644 ---- a/drivers/media/pci/cx23885/cx23885-core.c -+++ b/drivers/media/pci/cx23885/cx23885-core.c -@@ -1909,6 +1909,10 @@ static irqreturn_t cx23885_irq(int irq, void *dev_id) - (pci_status & PCI_MSK_GPIO0)) - handled += altera_ci_irq(dev); - -+ if (cx23885_boards[dev->board].ci_type == 3 && -+ (pci_status & PCI_MSK_GPIO0)) -+ handled += dvbsky_ci_slot_status(dev); -+ - if (ts1_status) { - if (cx23885_boards[dev->board].portb == CX23885_MPEG_DVB) - handled += cx23885_irq_ts(ts1, ts1_status); -@@ -2141,6 +2145,8 @@ static int cx23885_initdev(struct pci_dev *pci_dev, - cx23885_irq_add_enable(dev, PCI_MSK_GPIO1 | PCI_MSK_GPIO0); - break; - case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF: -+ case CX23885_BOARD_DVBSKY_S950_CI: -+ case CX23885_BOARD_DVBSKY_C2800E_CI: - cx23885_irq_add_enable(dev, PCI_MSK_GPIO0); - break; - } -diff --git a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/cx23885-dvb.c -index 0549205..201523a 100644 ---- a/drivers/media/pci/cx23885/cx23885-dvb.c -+++ b/drivers/media/pci/cx23885/cx23885-dvb.c -@@ -52,6 +52,8 @@ - #include "lnbh24.h" - #include "cx24116.h" - #include "cx24117.h" -+#include "dvbsky_m88ds3103.h" -+#include "dvbsky_m88dc2800.h" - #include "cimax2.h" - #include "lgs8gxx.h" - #include "netup-eeprom.h" -@@ -507,6 +509,93 @@ static struct xc5000_config mygica_x8507_xc5000_config = { - .if_khz = 4000, - }; - -+/* bst control */ -+int bst_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage) -+{ -+ struct cx23885_tsport *port = fe->dvb->priv; -+ struct cx23885_dev *dev = port->dev; -+ -+ cx23885_gpio_enable(dev, GPIO_1, 1); -+ cx23885_gpio_enable(dev, GPIO_0, 1); -+ -+ switch (voltage) { -+ case SEC_VOLTAGE_13: -+ cx23885_gpio_set(dev, GPIO_1); -+ cx23885_gpio_clear(dev, GPIO_0); -+ break; -+ case SEC_VOLTAGE_18: -+ cx23885_gpio_set(dev, GPIO_1); -+ cx23885_gpio_set(dev, GPIO_0); -+ break; -+ case SEC_VOLTAGE_OFF: -+ cx23885_gpio_clear(dev, GPIO_1); -+ cx23885_gpio_clear(dev, GPIO_0); -+ break; -+ } -+ return 0; -+} -+ -+int dvbsky_set_voltage_sec(struct dvb_frontend *fe, fe_sec_voltage_t voltage) -+{ -+ struct cx23885_tsport *port = fe->dvb->priv; -+ struct cx23885_dev *dev = port->dev; -+ -+ cx23885_gpio_enable(dev, GPIO_12, 1); -+ cx23885_gpio_enable(dev, GPIO_13, 1); -+ -+ switch (voltage) { -+ case SEC_VOLTAGE_13: -+ cx23885_gpio_set(dev, GPIO_13); -+ cx23885_gpio_clear(dev, GPIO_12); -+ break; -+ case SEC_VOLTAGE_18: -+ cx23885_gpio_set(dev, GPIO_13); -+ cx23885_gpio_set(dev, GPIO_12); -+ break; -+ case SEC_VOLTAGE_OFF: -+ cx23885_gpio_clear(dev, GPIO_13); -+ cx23885_gpio_clear(dev, GPIO_12); -+ break; -+ } -+ return 0; -+} -+ -+/* bestunar single dvb-s2 */ -+static struct dvbsky_m88ds3103_config bst_ds3103_config = { -+ .demod_address = 0x68, -+ .ci_mode = 0, -+ .pin_ctrl = 0x82, -+ .ts_mode = 0, -+ .set_voltage = bst_set_voltage, -+}; -+/* DVBSKY dual dvb-s2 */ -+static struct dvbsky_m88ds3103_config dvbsky_ds3103_config_pri = { -+ .demod_address = 0x68, -+ .ci_mode = 0, -+ .pin_ctrl = 0x82, -+ .ts_mode = 0, -+ .set_voltage = bst_set_voltage, -+}; -+static struct dvbsky_m88ds3103_config dvbsky_ds3103_config_sec = { -+ .demod_address = 0x68, -+ .ci_mode = 0, -+ .pin_ctrl = 0x82, -+ .ts_mode = 1, -+ .set_voltage = dvbsky_set_voltage_sec, -+}; -+ -+static struct dvbsky_m88ds3103_config dvbsky_ds3103_ci_config = { -+ .demod_address = 0x68, -+ .ci_mode = 2, -+ .pin_ctrl = 0x82, -+ .ts_mode = 0, -+}; -+ -+static struct dvbsky_m88dc2800_config dvbsky_dc2800_config = { -+ .demod_address = 0x1c, -+ .ts_mode = 3, -+}; -+ - static struct stv090x_config prof_8000_stv090x_config = { - .device = STV0903, - .demod_mode = STV090x_SINGLE, -@@ -1311,6 +1400,57 @@ static int dvb_register(struct cx23885_tsport *port) - &tevii_ts2020_config, &i2c_bus->i2c_adap); - } - break; -+ case CX23885_BOARD_BST_PS8512: -+ case CX23885_BOARD_DVBSKY_S950: -+ i2c_bus = &dev->i2c_bus[1]; -+ fe0->dvb.frontend = dvb_attach(dvbsky_m88ds3103_attach, -+ &bst_ds3103_config, -+ &i2c_bus->i2c_adap); -+ break; -+ case CX23885_BOARD_DVBSKY_S952: -+ switch (port->nr) { -+ /* port B */ -+ case 1: -+ i2c_bus = &dev->i2c_bus[1]; -+ fe0->dvb.frontend = dvb_attach(dvbsky_m88ds3103_attach, -+ &dvbsky_ds3103_config_pri, -+ &i2c_bus->i2c_adap); -+ break; -+ /* port C */ -+ case 2: -+ i2c_bus = &dev->i2c_bus[0]; -+ fe0->dvb.frontend = dvb_attach(dvbsky_m88ds3103_attach, -+ &dvbsky_ds3103_config_sec, -+ &i2c_bus->i2c_adap); -+ break; -+ } -+ break; -+ case CX23885_BOARD_DVBSKY_S950_CI: -+ i2c_bus = &dev->i2c_bus[1]; -+ fe0->dvb.frontend = dvb_attach(dvbsky_m88ds3103_attach, -+ &dvbsky_ds3103_ci_config, -+ &i2c_bus->i2c_adap); -+ break; -+ case CX23885_BOARD_DVBSKY_C2800E_CI: -+ i2c_bus = &dev->i2c_bus[1]; -+ fe0->dvb.frontend = dvb_attach(dvbsky_m88dc2800_attach, -+ &dvbsky_dc2800_config, -+ &i2c_bus->i2c_adap); -+ break; -+ case CX23885_BOARD_DVBSKY_T9580: -+ switch (port->nr) { -+ /* port B */ -+ case 1: -+ i2c_bus = &dev->i2c_bus[1]; -+ fe0->dvb.frontend = dvb_attach(dvbsky_m88ds3103_attach, -+ &dvbsky_ds3103_config_pri, -+ &i2c_bus->i2c_adap); -+ break; -+ /* port C */ -+ case 2: -+ break; -+ } -+ break; - case CX23885_BOARD_PROF_8000: - i2c_bus = &dev->i2c_bus[0]; - -@@ -1386,7 +1526,7 @@ static int dvb_register(struct cx23885_tsport *port) - printk(KERN_INFO "NetUP Dual DVB-S2 CI card port%d MAC=%pM\n", - port->nr, port->frontends.adapter.proposed_mac); - -- netup_ci_init(port); -+ netup_ci_init(port, false); - break; - } - case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF: { -@@ -1413,6 +1553,41 @@ static int dvb_register(struct cx23885_tsport *port) - memcpy(port->frontends.adapter.proposed_mac, eeprom + 0xa0, 6); - break; - } -+ case CX23885_BOARD_BST_PS8512: -+ case CX23885_BOARD_DVBSKY_S950: -+ case CX23885_BOARD_DVBSKY_S952: -+ case CX23885_BOARD_DVBSKY_T9580:{ -+ u8 eeprom[256]; /* 24C02 i2c eeprom */ -+ -+ if(port->nr > 2) -+ break; -+ -+ dev->i2c_bus[0].i2c_client.addr = 0xa0 >> 1; -+ tveeprom_read(&dev->i2c_bus[0].i2c_client, eeprom, sizeof(eeprom)); -+ printk(KERN_INFO "DVBSKY PCIe MAC= %pM\n", eeprom + 0xc0+(port->nr-1)*8); -+ memcpy(port->frontends.adapter.proposed_mac, eeprom + 0xc0 + -+ (port->nr-1)*8, 6); -+ break; -+ } -+ case CX23885_BOARD_DVBSKY_S950_CI: { -+ u8 eeprom[256]; /* 24C02 i2c eeprom */ -+ -+ if(port->nr > 2) -+ break; -+ -+ dev->i2c_bus[0].i2c_client.addr = 0xa0 >> 1; -+ tveeprom_read(&dev->i2c_bus[0].i2c_client, eeprom, sizeof(eeprom)); -+ printk(KERN_INFO "DVBSKY PCIe MAC= %pM\n", eeprom + 0xc0+(port->nr-1)*8); -+ memcpy(port->frontends.adapter.proposed_mac, eeprom + 0xc0 + -+ (port->nr-1)*8, 6); -+ -+ netup_ci_init(port, true); -+ break; -+ } -+ case CX23885_BOARD_DVBSKY_C2800E_CI: { -+ netup_ci_init(port, true); -+ break; -+ } - } - - return ret; -@@ -1495,6 +1670,8 @@ int cx23885_dvb_unregister(struct cx23885_tsport *port) - - switch (port->dev->board) { - case CX23885_BOARD_NETUP_DUAL_DVBS2_CI: -+ case CX23885_BOARD_DVBSKY_S950_CI: -+ case CX23885_BOARD_DVBSKY_C2800E_CI: - netup_ci_exit(port); - break; - case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF: -diff --git a/drivers/media/pci/cx23885/cx23885-input.c b/drivers/media/pci/cx23885/cx23885-input.c -index 8a49e7c..a5e4639 100644 ---- a/drivers/media/pci/cx23885/cx23885-input.c -+++ b/drivers/media/pci/cx23885/cx23885-input.c -@@ -89,6 +89,12 @@ void cx23885_input_rx_work_handler(struct cx23885_dev *dev, u32 events) - case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL: - case CX23885_BOARD_TEVII_S470: - case CX23885_BOARD_HAUPPAUGE_HVR1250: -+ case CX23885_BOARD_BST_PS8512: -+ case CX23885_BOARD_DVBSKY_S950: -+ case CX23885_BOARD_DVBSKY_S952: -+ case CX23885_BOARD_DVBSKY_S950_CI: -+ case CX23885_BOARD_DVBSKY_C2800E_CI: -+ case CX23885_BOARD_DVBSKY_T9580: - case CX23885_BOARD_MYGICA_X8507: - case CX23885_BOARD_TBS_6980: - case CX23885_BOARD_TBS_6981: -@@ -143,6 +149,12 @@ static int cx23885_input_ir_start(struct cx23885_dev *dev) - case CX23885_BOARD_HAUPPAUGE_HVR1850: - case CX23885_BOARD_HAUPPAUGE_HVR1290: - case CX23885_BOARD_HAUPPAUGE_HVR1250: -+ case CX23885_BOARD_BST_PS8512: -+ case CX23885_BOARD_DVBSKY_S950: -+ case CX23885_BOARD_DVBSKY_S952: -+ case CX23885_BOARD_DVBSKY_S950_CI: -+ case CX23885_BOARD_DVBSKY_C2800E_CI: -+ case CX23885_BOARD_DVBSKY_T9580: - case CX23885_BOARD_MYGICA_X8507: - /* - * The IR controller on this board only returns pulse widths. -@@ -295,6 +307,18 @@ int cx23885_input_init(struct cx23885_dev *dev) - /* A guess at the remote */ - rc_map = RC_MAP_TEVII_NEC; - break; -+ case CX23885_BOARD_BST_PS8512: -+ case CX23885_BOARD_DVBSKY_S950: -+ case CX23885_BOARD_DVBSKY_S952: -+ case CX23885_BOARD_DVBSKY_S950_CI: -+ case CX23885_BOARD_DVBSKY_C2800E_CI: -+ case CX23885_BOARD_DVBSKY_T9580: -+ /* Integrated CX2388[58] IR controller */ -+ driver_type = RC_DRIVER_IR_RAW; -+ allowed_protos = RC_BIT_ALL; -+ /* A guess at the remote */ -+ rc_map = RC_MAP_DVBSKY; -+ break; - case CX23885_BOARD_MYGICA_X8507: - /* Integrated CX23885 IR controller */ - driver_type = RC_DRIVER_IR_RAW; -diff --git a/drivers/media/pci/cx23885/cx23885.h b/drivers/media/pci/cx23885/cx23885.h -index 0fa4048..7084a4e 100644 ---- a/drivers/media/pci/cx23885/cx23885.h -+++ b/drivers/media/pci/cx23885/cx23885.h -@@ -97,6 +97,14 @@ - #define CX23885_BOARD_TBS_6980 41 - #define CX23885_BOARD_LEADTEK_WINFAST_PXPVR2200 42 - -+#define CX23885_BOARD_BASE_INDEX 43 -+#define CX23885_BOARD_BST_PS8512 (CX23885_BOARD_BASE_INDEX) -+#define CX23885_BOARD_DVBSKY_S952 (CX23885_BOARD_BASE_INDEX+1) -+#define CX23885_BOARD_DVBSKY_S950 (CX23885_BOARD_BASE_INDEX+2) -+#define CX23885_BOARD_DVBSKY_S950_CI (CX23885_BOARD_BASE_INDEX+3) -+#define CX23885_BOARD_DVBSKY_C2800E_CI (CX23885_BOARD_BASE_INDEX+4) -+#define CX23885_BOARD_DVBSKY_T9580 (CX23885_BOARD_BASE_INDEX+5) -+ - #define GPIO_0 0x00000001 - #define GPIO_1 0x00000002 - #define GPIO_2 0x00000004 -@@ -234,7 +242,7 @@ struct cx23885_board { - */ - u32 clk_freq; - struct cx23885_input input[MAX_CX23885_INPUT]; -- int ci_type; /* for NetUP */ -+ int ci_type; /* 1 and 2 for NetUP, 3 for DVBSky. */ - /* Force bottom field first during DMA (888 workaround) */ - u32 force_bff; - }; -diff --git a/drivers/media/pci/cx88/Kconfig b/drivers/media/pci/cx88/Kconfig -index a63a9ad..7deb300 100644 ---- a/drivers/media/pci/cx88/Kconfig -+++ b/drivers/media/pci/cx88/Kconfig -@@ -57,6 +57,7 @@ config VIDEO_CX88_DVB - select DVB_ISL6421 if MEDIA_SUBDRV_AUTOSELECT - select DVB_S5H1411 if MEDIA_SUBDRV_AUTOSELECT - select DVB_CX24116 if MEDIA_SUBDRV_AUTOSELECT -+ select DVB_DVBSKY_M88DS3103 if MEDIA_SUBDRV_AUTOSELECT - select DVB_STV0299 if MEDIA_SUBDRV_AUTOSELECT - select DVB_STV0288 if MEDIA_SUBDRV_AUTOSELECT - select DVB_STB6000 if MEDIA_SUBDRV_AUTOSELECT -diff --git a/drivers/media/pci/cx88/cx88-cards.c b/drivers/media/pci/cx88/cx88-cards.c -index e18a7ac..317511d 100644 ---- a/drivers/media/pci/cx88/cx88-cards.c -+++ b/drivers/media/pci/cx88/cx88-cards.c -@@ -2314,6 +2314,18 @@ static const struct cx88_board cx88_boards[] = { - } }, - .mpeg = CX88_MPEG_DVB, - }, -+ [CX88_BOARD_BST_PS8312] = { -+ .name = "Bestunar PS8312 DVB-S/S2", -+ .tuner_type = UNSET, -+ .radio_type = UNSET, -+ .tuner_addr = ADDR_UNSET, -+ .radio_addr = ADDR_UNSET, -+ .input = { { -+ .type = CX88_VMUX_DVB, -+ .vmux = 0, -+ } }, -+ .mpeg = CX88_MPEG_DVB, -+ }, - }; - - /* ------------------------------------------------------------------ */ -@@ -2818,6 +2830,10 @@ static const struct cx88_subid cx88_subids[] = { - .subvendor = 0x1822, - .subdevice = 0x0023, - .card = CX88_BOARD_TWINHAN_VP1027_DVBS, -+ }, { -+ .subvendor = 0x14f1, -+ .subdevice = 0x8312, -+ .card = CX88_BOARD_BST_PS8312, - }, - }; - -@@ -3551,6 +3567,12 @@ static void cx88_card_setup(struct cx88_core *core) - cx_write(MO_SRST_IO, 1); - msleep(100); - break; -+ case CX88_BOARD_BST_PS8312: -+ cx_write(MO_GP1_IO, 0x808000); -+ msleep(100); -+ cx_write(MO_GP1_IO, 0x808080); -+ msleep(100); -+ break; - } /*end switch() */ - - -diff --git a/drivers/media/pci/cx88/cx88-dvb.c b/drivers/media/pci/cx88/cx88-dvb.c -index 053ed1b..955b916 100644 ---- a/drivers/media/pci/cx88/cx88-dvb.c -+++ b/drivers/media/pci/cx88/cx88-dvb.c -@@ -54,6 +54,7 @@ - #include "stv0288.h" - #include "stb6000.h" - #include "cx24116.h" -+#include "dvbsky_m88ds3103.h" - #include "stv0900.h" - #include "stb6100.h" - #include "stb6100_proc.h" -@@ -459,6 +460,56 @@ static int tevii_dvbs_set_voltage(struct dvb_frontend *fe, - return core->prev_set_voltage(fe, voltage); - return 0; - } -+/*CX88_BOARD_BST_PS8312*/ -+static int bst_dvbs_set_voltage(struct dvb_frontend *fe, -+ fe_sec_voltage_t voltage) -+{ -+ struct cx8802_dev *dev= fe->dvb->priv; -+ struct cx88_core *core = dev->core; -+ -+ cx_write(MO_GP1_IO, 0x111111); -+ switch (voltage) { -+ case SEC_VOLTAGE_13: -+ cx_write(MO_GP1_IO, 0x020200); -+ break; -+ case SEC_VOLTAGE_18: -+ cx_write(MO_GP1_IO, 0x020202); -+ break; -+ case SEC_VOLTAGE_OFF: -+ cx_write(MO_GP1_IO, 0x111100); -+ break; -+ } -+ -+ if (core->prev_set_voltage) -+ return core->prev_set_voltage(fe, voltage); -+ return 0; -+} -+ -+static int bst_dvbs_set_voltage_v2(struct dvb_frontend *fe, -+ fe_sec_voltage_t voltage) -+{ -+ struct cx8802_dev *dev= fe->dvb->priv; -+ struct cx88_core *core = dev->core; -+ -+ cx_write(MO_GP1_IO, 0x111101); -+ switch (voltage) { -+ case SEC_VOLTAGE_13: -+ cx_write(MO_GP1_IO, 0x020200); -+ break; -+ case SEC_VOLTAGE_18: -+ -+ cx_write(MO_GP1_IO, 0x020202); -+ break; -+ case SEC_VOLTAGE_OFF: -+ -+ cx_write(MO_GP1_IO, 0x111110); -+ break; -+ } -+ -+ if (core->prev_set_voltage) -+ return core->prev_set_voltage(fe, voltage); -+ return 0; -+} - - static int vp1027_set_voltage(struct dvb_frontend *fe, - fe_sec_voltage_t voltage) -@@ -706,6 +757,11 @@ static struct ts2020_config tevii_ts2020_config = { - .clk_out_div = 1, - }; - -+static struct dvbsky_m88ds3103_config dvbsky_ds3103_config = { -+ .demod_address = 0x68, -+ .set_ts_params = ds3000_set_ts_param, -+}; -+ - static const struct stv0900_config prof_7301_stv0900_config = { - .demod_address = 0x6a, - /* demod_mode = 0,*/ -@@ -1487,6 +1543,35 @@ static int dvb_register(struct cx8802_dev *dev) - tevii_dvbs_set_voltage; - } - break; -+ case CX88_BOARD_BST_PS8312: -+ fe0->dvb.frontend = dvb_attach(dvbsky_m88ds3103_attach, -+ &dvbsky_ds3103_config, -+ &core->i2c_adap); -+ if (fe0->dvb.frontend != NULL){ -+ int ret; -+ u8 b0[] = { 0x60 }; -+ u8 b1[2] = { 0 }; -+ struct i2c_msg msg[] = { -+ { -+ .addr = 0x50, -+ .flags = 0, -+ .buf = b0, -+ .len = 1 -+ }, { -+ .addr = 0x50, -+ .flags = I2C_M_RD, -+ .buf = b1, -+ .len = 2 -+ } -+ }; -+ ret = i2c_transfer(&core->i2c_adap, msg, 2); -+ printk("PS8312: config = %02x, %02x", b1[0],b1[1]); -+ if(b1[0] == 0xaa) -+ fe0->dvb.frontend->ops.set_voltage = bst_dvbs_set_voltage_v2; -+ else -+ fe0->dvb.frontend->ops.set_voltage = bst_dvbs_set_voltage; -+ } -+ break; - case CX88_BOARD_OMICOM_SS4_PCI: - case CX88_BOARD_TBS_8920: - case CX88_BOARD_PROF_7300: -diff --git a/drivers/media/pci/cx88/cx88-input.c b/drivers/media/pci/cx88/cx88-input.c -index f29e18c..42a911c 100644 ---- a/drivers/media/pci/cx88/cx88-input.c -+++ b/drivers/media/pci/cx88/cx88-input.c -@@ -419,6 +419,10 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci) - rc_type = RC_BIT_NEC; - ir->sampling = 0xff00; /* address */ - break; -+ case CX88_BOARD_BST_PS8312: -+ ir_codes = RC_MAP_DVBSKY; -+ ir->sampling = 0xff00; /* address */ -+ break; - } - - if (!ir_codes) { -diff --git a/drivers/media/pci/cx88/cx88.h b/drivers/media/pci/cx88/cx88.h -index 28893a6..5fa5f48 100644 ---- a/drivers/media/pci/cx88/cx88.h -+++ b/drivers/media/pci/cx88/cx88.h -@@ -237,6 +237,7 @@ extern const struct sram_channel cx88_sram_channels[]; - #define CX88_BOARD_WINFAST_DTV1800H_XC4000 88 - #define CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F36 89 - #define CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F43 90 -+#define CX88_BOARD_BST_PS8312 91 - - enum cx88_itype { - CX88_VMUX_COMPOSITE1 = 1, -diff --git a/drivers/media/rc/keymaps/Makefile b/drivers/media/rc/keymaps/Makefile -index 0b8c549..abf6079 100644 ---- a/drivers/media/rc/keymaps/Makefile -+++ b/drivers/media/rc/keymaps/Makefile -@@ -28,6 +28,7 @@ obj-$(CONFIG_RC_MAP) += rc-adstech-dvb-t-pci.o \ - rc-dm1105-nec.o \ - rc-dntv-live-dvb-t.o \ - rc-dntv-live-dvbt-pro.o \ -+ rc-dvbsky.o \ - rc-em-terratec.o \ - rc-encore-enltv2.o \ - rc-encore-enltv.o \ -diff --git a/drivers/media/rc/keymaps/rc-dvbsky.c b/drivers/media/rc/keymaps/rc-dvbsky.c -new file mode 100644 -index 0000000..bfc41fb ---- /dev/null -+++ b/drivers/media/rc/keymaps/rc-dvbsky.c -@@ -0,0 +1,78 @@ -+/* rc-dvbsky.c - Keytable for Dvbsky Remote Controllers -+ * -+ * keymap imported from ir-keymaps.c -+ * -+ * -+ * Copyright (c) 2010-2012 by Nibble Max -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+#include -+#include -+/* -+ * This table contains the complete RC5 code, instead of just the data part -+ */ -+ -+static struct rc_map_table rc5_dvbsky[] = { -+ { 0x0000, KEY_0 }, -+ { 0x0001, KEY_1 }, -+ { 0x0002, KEY_2 }, -+ { 0x0003, KEY_3 }, -+ { 0x0004, KEY_4 }, -+ { 0x0005, KEY_5 }, -+ { 0x0006, KEY_6 }, -+ { 0x0007, KEY_7 }, -+ { 0x0008, KEY_8 }, -+ { 0x0009, KEY_9 }, -+ { 0x000a, KEY_MUTE }, -+ { 0x000d, KEY_OK }, -+ { 0x000b, KEY_STOP }, -+ { 0x000c, KEY_EXIT }, -+ { 0x000e, KEY_CAMERA }, /*Snap shot*/ -+ { 0x000f, KEY_SUBTITLE }, /*PIP*/ -+ { 0x0010, KEY_VOLUMEUP }, -+ { 0x0011, KEY_VOLUMEDOWN }, -+ { 0x0012, KEY_FAVORITES }, -+ { 0x0013, KEY_LIST }, /*Info*/ -+ { 0x0016, KEY_PAUSE }, -+ { 0x0017, KEY_PLAY }, -+ { 0x001f, KEY_RECORD }, -+ { 0x0020, KEY_CHANNELDOWN }, -+ { 0x0021, KEY_CHANNELUP }, -+ { 0x0025, KEY_POWER2 }, -+ { 0x0026, KEY_REWIND }, -+ { 0x0027, KEY_FASTFORWARD }, -+ { 0x0029, KEY_LAST }, -+ { 0x002b, KEY_MENU }, -+ { 0x002c, KEY_EPG }, -+ { 0x002d, KEY_ZOOM }, -+}; -+ -+static struct rc_map_list rc5_dvbsky_map = { -+ .map = { -+ .scan = rc5_dvbsky, -+ .size = ARRAY_SIZE(rc5_dvbsky), -+ .rc_type = RC_TYPE_RC5, -+ .name = RC_MAP_DVBSKY, -+ } -+}; -+ -+static int __init init_rc_map_rc5_dvbsky(void) -+{ -+ return rc_map_register(&rc5_dvbsky_map); -+} -+ -+static void __exit exit_rc_map_rc5_dvbsky(void) -+{ -+ rc_map_unregister(&rc5_dvbsky_map); -+} -+ -+module_init(init_rc_map_rc5_dvbsky) -+module_exit(exit_rc_map_rc5_dvbsky) -+ -+MODULE_LICENSE("GPL"); -+MODULE_AUTHOR("Nibble Max "); -diff --git a/drivers/media/usb/dvb-usb-v2/Kconfig b/drivers/media/usb/dvb-usb-v2/Kconfig -index 2059d0c..24a4ec2 100644 ---- a/drivers/media/usb/dvb-usb-v2/Kconfig -+++ b/drivers/media/usb/dvb-usb-v2/Kconfig -@@ -147,3 +147,9 @@ config DVB_USB_RTL28XXU - help - Say Y here to support the Realtek RTL28xxU DVB USB receiver. - -+config DVB_USB_DVBSKY -+ tristate "DVBSky USB2.0 support" -+ depends on DVB_USB_V2 -+ select DVB_DVBSKY_M88DS3103 if MEDIA_SUBDRV_AUTOSELECT -+ help -+ Say Y here to support the USB receivers from DVBSky. -diff --git a/drivers/media/usb/dvb-usb-v2/Makefile b/drivers/media/usb/dvb-usb-v2/Makefile -index 2c06714..926f12d 100644 ---- a/drivers/media/usb/dvb-usb-v2/Makefile -+++ b/drivers/media/usb/dvb-usb-v2/Makefile -@@ -40,6 +40,9 @@ obj-$(CONFIG_DVB_USB_MXL111SF) += mxl111sf-tuner.o - dvb-usb-rtl28xxu-objs := rtl28xxu.o - obj-$(CONFIG_DVB_USB_RTL28XXU) += dvb-usb-rtl28xxu.o - -+dvb-usb-dvbsky-objs := dvbsky.o -+obj-$(CONFIG_DVB_USB_DVBSKY) += dvb-usb-dvbsky.o -+ - ccflags-y += -I$(srctree)/drivers/media/dvb-core - ccflags-y += -I$(srctree)/drivers/media/dvb-frontends - ccflags-y += -I$(srctree)/drivers/media/tuners -diff --git a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2/dvbsky.c -new file mode 100644 -index 0000000..9033d92 ---- /dev/null -+++ b/drivers/media/usb/dvb-usb-v2/dvbsky.c -@@ -0,0 +1,739 @@ -+/* -+ * Driver for DVBSky USB2.0 receiver -+ * -+ * Copyright (C) 2013 Max nibble -+ * -+ * CIMax code is copied and modified from: -+ * CIMax2(R) SP2 driver in conjunction with NetUp Dual DVB-S2 CI card -+ * Copyright (C) 2009 NetUP Inc. -+ * Copyright (C) 2009 Igor M. Liplianin -+ * Copyright (C) 2009 Abylay Ospan -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ */ -+ -+#include "dvb_ca_en50221.h" -+#include "dvb_usb.h" -+#include "dvbsky_m88ds3103.h" -+ -+static int dvbsky_debug; -+module_param(dvbsky_debug, int, 0644); -+MODULE_PARM_DESC(dvbsky_debug, "Activates dvbsky usb debugging (default:0)"); -+ -+#define DVBSKY_CI_CTL 0x04 -+#define DVBSKY_CI_RD 1 -+ -+#define dprintk(args...) \ -+ do { \ -+ if (dvbsky_debug) \ -+ printk(KERN_INFO "dvbsky_usb: " args); \ -+ } while (0) -+ -+DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); -+ -+struct dvbsky_state { -+ struct mutex stream_mutex; -+ u8 has_ci; -+ u8 ci_attached; -+ struct dvb_ca_en50221 ci; -+ unsigned long next_status_checked_time; -+ u8 ci_i2c_addr; -+ u8 current_ci_flag; -+ int ci_status; -+}; -+ -+static int dvbsky_stream_ctrl(struct dvb_usb_device *d, u8 onoff) -+{ -+ struct dvbsky_state *state = d_to_priv(d); -+ int ret; -+ u8 obuf_pre[3] = { 0x37, 0, 0 }; -+ u8 obuf_post[3] = { 0x36, 3, 0 }; -+ dprintk("%s() -off \n", __func__); -+ mutex_lock(&state->stream_mutex); -+ ret = dvb_usbv2_generic_write(d, obuf_pre, 3); -+ if (!ret && onoff) { -+ msleep(10); -+ ret = dvb_usbv2_generic_write(d, obuf_post, 3); -+ dprintk("%s() -on \n", __func__); -+ } -+ mutex_unlock(&state->stream_mutex); -+ return ret; -+} -+ -+/* CI opertaions */ -+static int dvbsky_ci_read_i2c(struct i2c_adapter *i2c_adap, u8 addr, u8 reg, -+ u8 *buf, int len) -+{ -+ int ret; -+ struct i2c_msg msg[] = { -+ { -+ .addr = addr, -+ .flags = 0, -+ .buf = ®, -+ .len = 1 -+ }, { -+ .addr = addr, -+ .flags = I2C_M_RD, -+ .buf = buf, -+ .len = len -+ } -+ }; -+ -+ ret = i2c_transfer(i2c_adap, msg, 2); -+ -+ if (ret != 2) { -+ dprintk("%s: error, Reg = 0x%02x, Status = %d\n", __func__, reg, ret); -+ return -1; -+ } -+ return 0; -+} -+ -+static int dvbsky_ci_write_i2c(struct i2c_adapter *i2c_adap, u8 addr, u8 reg, -+ u8 *buf, int len) -+{ -+ int ret; -+ u8 buffer[len + 1]; -+ -+ struct i2c_msg msg = { -+ .addr = addr, -+ .flags = 0, -+ .buf = &buffer[0], -+ .len = len + 1 -+ }; -+ -+ buffer[0] = reg; -+ memcpy(&buffer[1], buf, len); -+ -+ ret = i2c_transfer(i2c_adap, &msg, 1); -+ -+ if (ret != 1) { -+ dprintk("%s: error, Reg=[0x%02x], Status=%d\n", __func__, reg, ret); -+ return -1; -+ } -+ return 0; -+} -+ -+static int dvbsky_ci_op_cam(struct dvb_ca_en50221 *ci, int slot, -+ u8 flag, u8 read, int addr, u8 data) -+{ -+ struct dvb_usb_device *d = ci->data; -+ struct dvbsky_state *state = d_to_priv(d); -+ u8 store; -+ int ret; -+ u8 command[4], respond[2], command_size, respond_size; -+ -+ /*dprintk("%s()\n", __func__);*/ -+ if (0 != slot) -+ return -EINVAL; -+ -+ if (state->current_ci_flag != flag) { -+ ret = dvbsky_ci_read_i2c(&d->i2c_adap, state->ci_i2c_addr, -+ 0, &store, 1); -+ if (ret != 0) -+ return ret; -+ -+ store &= ~0x0c; -+ store |= flag; -+ -+ ret = dvbsky_ci_write_i2c(&d->i2c_adap, state->ci_i2c_addr, -+ 0, &store, 1); -+ if (ret != 0) -+ return ret; -+ } -+ state->current_ci_flag = flag; -+ -+ command[1] = (u8)((addr >> 8) & 0xff); /*high part of address*/ -+ command[2] = (u8)(addr & 0xff); /*low part of address*/ -+ if (read) { -+ command[0] = 0x71; -+ command_size = 3; -+ respond_size = 2; -+ } else { -+ command[0] = 0x70; -+ command[3] = data; -+ command_size = 4; -+ respond_size = 1; -+ } -+ ret = dvb_usbv2_generic_rw(d, command, command_size, respond, respond_size); -+ -+ return (read) ? respond[1] : 0; -+} -+ -+static int dvbsky_ci_read_attribute_mem(struct dvb_ca_en50221 *ci, -+ int slot, int addr) -+{ -+ return dvbsky_ci_op_cam(ci, slot, 0, DVBSKY_CI_RD, addr, 0); -+} -+ -+static int dvbsky_ci_write_attribute_mem(struct dvb_ca_en50221 *ci, -+ int slot, int addr, u8 data) -+{ -+ return dvbsky_ci_op_cam(ci, slot, 0, 0, addr, data); -+} -+ -+static int dvbsky_ci_read_cam_ctl(struct dvb_ca_en50221 *ci, int slot, u8 addr) -+{ -+ return dvbsky_ci_op_cam(ci, slot, DVBSKY_CI_CTL, DVBSKY_CI_RD, addr, 0); -+} -+ -+static int dvbsky_ci_write_cam_ctl(struct dvb_ca_en50221 *ci, int slot, -+ u8 addr, u8 data) -+{ -+ return dvbsky_ci_op_cam(ci, slot, DVBSKY_CI_CTL, 0, addr, data); -+} -+ -+static int dvbsky_ci_slot_reset(struct dvb_ca_en50221 *ci, int slot) -+{ -+ struct dvb_usb_device *d = ci->data; -+ struct dvbsky_state *state = d_to_priv(d); -+ u8 buf = 0x80; -+ int ret; -+ dprintk("%s() slot=%d\n", __func__, slot); -+ -+ if (0 != slot) -+ return -EINVAL; -+ -+ udelay(500); -+ ret = dvbsky_ci_write_i2c(&d->i2c_adap, state->ci_i2c_addr, -+ 0, &buf, 1); -+ -+ if (ret != 0) -+ return ret; -+ -+ udelay(500); -+ -+ buf = 0x00; -+ ret = dvbsky_ci_write_i2c(&d->i2c_adap, state->ci_i2c_addr, -+ 0, &buf, 1); -+ msleep(1000); -+ dprintk("%s() slot=%d complete\n", __func__, slot); -+ return 0; -+ -+} -+ -+static int dvbsky_ci_slot_shutdown(struct dvb_ca_en50221 *ci, int slot) -+{ -+ /* not implemented */ -+ dprintk("%s()\n", __func__); -+ return 0; -+} -+ -+static int dvbsky_ci_slot_ts_enable(struct dvb_ca_en50221 *ci, int slot) -+{ -+ struct dvb_usb_device *d = ci->data; -+ struct dvbsky_state *state = d_to_priv(d); -+ u8 buf; -+ int ret; -+ -+ dprintk("%s()\n", __func__); -+ if (0 != slot) -+ return -EINVAL; -+ -+ dvbsky_ci_read_i2c(&d->i2c_adap, state->ci_i2c_addr, -+ 0, &buf, 1); -+ buf |= 0x60; -+ -+ ret = dvbsky_ci_write_i2c(&d->i2c_adap, state->ci_i2c_addr, -+ 0, &buf, 1); -+ return ret; -+} -+ -+static int dvbsky_ci_poll_slot_status(struct dvb_ca_en50221 *ci, int slot, -+ int open) -+{ -+ struct dvb_usb_device *d = ci->data; -+ struct dvbsky_state *state = d_to_priv(d); -+ int ret = 0; -+ u8 buf = 0; -+ /*dprintk("%s()\n", __func__);*/ -+ -+ /* CAM module INSERT/REMOVE processing. slow operation because of i2c -+ * transfers */ -+ if (time_after(jiffies, state->next_status_checked_time)) { -+ ret = dvbsky_ci_read_i2c(&d->i2c_adap, state->ci_i2c_addr, -+ 0, &buf, 1); -+ -+ /*dprintk("%s() status=%x\n", __func__, buf);*/ -+ -+ state->next_status_checked_time = jiffies -+ + msecs_to_jiffies(1000); -+ -+ if (ret != 0) -+ return 0; -+ -+ if (buf & 1) { -+ state->ci_status = DVB_CA_EN50221_POLL_CAM_PRESENT | -+ DVB_CA_EN50221_POLL_CAM_READY; -+ } -+ else -+ state->ci_status = 0; -+ } -+ /*dprintk("%s() ret=%x\n", __func__, state->ci_status);*/ -+ return state->ci_status; -+} -+ -+static int dvbsky_ci_init(struct dvb_usb_device *d) -+{ -+ struct dvbsky_state *state = d_to_priv(d); -+ int ret; -+ u8 cimax_init[34] = { -+ 0x00, /* module A control*/ -+ 0x00, /* auto select mask high A */ -+ 0x00, /* auto select mask low A */ -+ 0x00, /* auto select pattern high A */ -+ 0x00, /* auto select pattern low A */ -+ 0x44, /* memory access time A */ -+ 0x00, /* invert input A */ -+ 0x00, /* RFU */ -+ 0x00, /* RFU */ -+ 0x00, /* module B control*/ -+ 0x00, /* auto select mask high B */ -+ 0x00, /* auto select mask low B */ -+ 0x00, /* auto select pattern high B */ -+ 0x00, /* auto select pattern low B */ -+ 0x44, /* memory access time B */ -+ 0x00, /* invert input B */ -+ 0x00, /* RFU */ -+ 0x00, /* RFU */ -+ 0x00, /* auto select mask high Ext */ -+ 0x00, /* auto select mask low Ext */ -+ 0x00, /* auto select pattern high Ext */ -+ 0x00, /* auto select pattern low Ext */ -+ 0x00, /* RFU */ -+ 0x02, /* destination - module A */ -+ 0x01, /* power on (use it like store place) */ -+ 0x00, /* RFU */ -+ 0x00, /* int status read only */ -+ 0x00, /* Max: Disable the interrupt in USB solution.*/ -+ 0x05, /* EXTINT=active-high, INT=push-pull */ -+ 0x00, /* USCG1 */ -+ 0x04, /* ack active low */ -+ 0x00, /* LOCK = 0 */ -+ 0x22, /* serial mode, rising in, rising out, MSB first*/ -+ 0x00 /* synchronization */ -+ }; -+ dprintk("%s()\n", __func__); -+ state->current_ci_flag = 0xff; -+ state->ci_status = 0; -+ state->next_status_checked_time = jiffies + msecs_to_jiffies(1000); -+ state->ci_i2c_addr = 0x40; -+ -+ state->ci.owner = THIS_MODULE; -+ state->ci.read_attribute_mem = dvbsky_ci_read_attribute_mem; -+ state->ci.write_attribute_mem = dvbsky_ci_write_attribute_mem; -+ state->ci.read_cam_control = dvbsky_ci_read_cam_ctl; -+ state->ci.write_cam_control = dvbsky_ci_write_cam_ctl; -+ state->ci.slot_reset = dvbsky_ci_slot_reset; -+ state->ci.slot_shutdown = dvbsky_ci_slot_shutdown; -+ state->ci.slot_ts_enable = dvbsky_ci_slot_ts_enable; -+ state->ci.poll_slot_status = dvbsky_ci_poll_slot_status; -+ state->ci.data = d; -+ -+ ret = dvbsky_ci_write_i2c(&d->i2c_adap, state->ci_i2c_addr, -+ 0, &cimax_init[0], 34); -+ /* lock registers */ -+ ret |= dvbsky_ci_write_i2c(&d->i2c_adap, state->ci_i2c_addr, -+ 0x1f, &cimax_init[0x18], 1); -+ /* power on slots */ -+ ret |= dvbsky_ci_write_i2c(&d->i2c_adap, state->ci_i2c_addr, -+ 0x18, &cimax_init[0x18], 1); -+ if (0 != ret) -+ return ret; -+ -+ ret = dvb_ca_en50221_init(&d->adapter[0].dvb_adap, &state->ci, 0, 1); -+ if (ret) -+ return ret; -+ state->ci_attached = 1; -+ dprintk("%s() complete.\n", __func__); -+ return 0; -+} -+ -+static void dvbsky_ci_release(struct dvb_usb_device *d) -+{ -+ struct dvbsky_state *state = d_to_priv(d); -+ -+ /* detach CI */ -+ if (state->ci_attached) -+ dvb_ca_en50221_release(&state->ci); -+ -+ return; -+} -+ -+static int dvbsky_streaming_ctrl(struct dvb_frontend *fe, int onoff) -+{ -+ struct dvb_usb_device *d = fe_to_d(fe); -+ /*dprintk("%s() %d\n", __func__, onoff);*/ -+ return dvbsky_stream_ctrl(d, (onoff == 0) ? 0 : 1); -+} -+ -+/* GPIO */ -+static int dvbsky_gpio_ctrl(struct dvb_usb_device *d, u8 gport, u8 value) -+{ -+ u8 obuf[64], ibuf[64]; -+ obuf[0] = 0x0e; -+ obuf[1] = gport; -+ obuf[2] = value; -+ return dvb_usbv2_generic_rw(d, obuf, 3, ibuf, 1); -+} -+ -+/* I2C */ -+static int dvbsky_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[], -+ int num) -+{ -+ struct dvb_usb_device *d = i2c_get_adapdata(adap); -+ int ret = 0; -+ u8 ibuf[64], obuf[64]; -+ -+ if (mutex_lock_interruptible(&d->i2c_mutex) < 0) -+ return -EAGAIN; -+ -+ if (num > 2) { -+ printk(KERN_ERR "dvbsky_usb: too many i2c messages[%d] than 2.", num); -+ ret = -EOPNOTSUPP; -+ goto i2c_error; -+ } -+ -+ if(num == 1) { -+ if (msg[0].len > 60) { -+ printk(KERN_ERR "dvbsky_usb: too many i2c bytes[%d] than 60.", msg[0].len); -+ ret = -EOPNOTSUPP; -+ goto i2c_error; -+ } -+ if (msg[0].flags & I2C_M_RD) { -+ /* single read */ -+ obuf[0] = 0x09; -+ obuf[1] = 0; -+ obuf[2] = msg[0].len; -+ obuf[3] = msg[0].addr; -+ ret = dvb_usbv2_generic_rw(d, obuf, 4, ibuf, msg[0].len + 1); -+ /*dprintk("%s(): read status = %d\n", __func__, ibuf[0]);*/ -+ if (!ret) -+ memcpy(msg[0].buf, &ibuf[1], msg[0].len); -+ } else { -+ /* write */ -+ obuf[0] = 0x08; -+ obuf[1] = msg[0].addr; -+ obuf[2] = msg[0].len; -+ memcpy(&obuf[3], msg[0].buf, msg[0].len); -+ ret = dvb_usbv2_generic_rw(d, obuf, msg[0].len + 3, ibuf, 1); -+ /*dprintk("%s(): write status = %d\n", __func__, ibuf[0]);*/ -+ } -+ } else { -+ if ((msg[0].len > 60) || (msg[1].len > 60)) { -+ printk(KERN_ERR "dvbsky_usb: too many i2c bytes[w-%d][r-%d] than 60.", msg[0].len, msg[1].len); -+ ret = -EOPNOTSUPP; -+ goto i2c_error; -+ } -+ /* write then read */ -+ obuf[0] = 0x09; -+ obuf[1] = msg[0].len; -+ obuf[2] = msg[1].len; -+ obuf[3] = msg[0].addr; -+ memcpy(&obuf[4], msg[0].buf, msg[0].len); -+ ret = dvb_usbv2_generic_rw(d, obuf, msg[0].len + 4, ibuf, msg[1].len + 1); -+ /*dprintk("%s(): write then read status = %d\n", __func__, ibuf[0]);*/ -+ if (!ret) -+ memcpy(msg[1].buf, &ibuf[1], msg[1].len); -+ } -+i2c_error: -+ mutex_unlock(&d->i2c_mutex); -+ return (ret) ? ret : num; -+} -+ -+static u32 dvbsky_i2c_func(struct i2c_adapter *adapter) -+{ -+ return I2C_FUNC_I2C; -+} -+ -+static struct i2c_algorithm dvbsky_i2c_algo = { -+ .master_xfer = dvbsky_i2c_xfer, -+ .functionality = dvbsky_i2c_func, -+}; -+ -+#if IS_ENABLED(CONFIG_RC_CORE) -+static int dvbsky_rc_query(struct dvb_usb_device *d) -+{ -+ u32 code = 0xffff; -+ u8 obuf[2], ibuf[2], toggle; -+ int ret; -+ obuf[0] = 0x10; -+ ret = dvb_usbv2_generic_rw(d, obuf, 1, ibuf, 2); -+ if(ret == 0) -+ code = (ibuf[0] << 8) | ibuf[1]; -+ -+ if (code != 0xffff) { -+ dprintk("rc code: %x", code); -+ toggle = (code & 0x800) ? 1 : 0; -+ code &= 0x3f; -+ rc_keydown(d->rc_dev, code, toggle); -+ } -+ return 0; -+} -+ -+static int dvbsky_get_rc_config(struct dvb_usb_device *d, struct dvb_usb_rc *rc) -+{ -+ rc->allowed_protos = RC_BIT_RC5; -+ rc->query = dvbsky_rc_query; -+ rc->interval = 300; -+ return 0; -+} -+#else -+ #define dvbsky_get_rc_config NULL -+#endif -+ -+static int dvbsky_sync_ctrl(struct dvb_frontend *fe) -+{ -+ struct dvb_usb_device *d = fe_to_d(fe); -+ return dvbsky_stream_ctrl(d, 1); -+} -+ -+static int dvbsky_usb_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage) -+{ -+ struct dvb_usb_device *d = fe_to_d(fe); -+ u8 value; -+ -+ if (voltage == SEC_VOLTAGE_OFF) -+ value = 0; -+ else -+ value = 1; -+ return dvbsky_gpio_ctrl(d, 0x80, value); -+} -+ -+static int dvbsky_usb_ci_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage) -+{ -+ struct dvb_usb_device *d = fe_to_d(fe); -+ u8 value; -+ -+ if (voltage == SEC_VOLTAGE_OFF) -+ value = 0; -+ else -+ value = 1; -+ return dvbsky_gpio_ctrl(d, 0x00, value); -+} -+ -+static int dvbsky_read_mac_addr(struct dvb_usb_adapter *adap, u8 mac[6]) -+{ -+ struct dvb_usb_device *d = adap_to_d(adap); -+ u8 obuf[] = { 0x1e, 0x00 }; -+ u8 ibuf[6] = { 0 }; -+ struct i2c_msg msg[] = { -+ { -+ .addr = 0x51, -+ .flags = 0, -+ .buf = obuf, -+ .len = 2, -+ }, { -+ .addr = 0x51, -+ .flags = I2C_M_RD, -+ .buf = ibuf, -+ .len = 6, -+ -+ } -+ }; -+ -+ if (i2c_transfer(&d->i2c_adap, msg, 2) == 2) -+ memcpy(mac, ibuf, 6); -+ -+ printk(KERN_INFO "dvbsky_usb MAC address=%pM\n", mac); -+ -+ return 0; -+} -+ -+static struct dvbsky_m88ds3103_config dvbsky_usb_ds3103_config = { -+ .demod_address = 0x68, -+ .ci_mode = 1, -+ .pin_ctrl = 0x83, -+ .ts_mode = 0, -+ .start_ctrl = dvbsky_sync_ctrl, -+ .set_voltage = dvbsky_usb_set_voltage, -+}; -+ -+static int dvbsky_s960_attach(struct dvb_usb_adapter *adap) -+{ -+ struct dvbsky_state *state = adap_to_priv(adap); -+ struct dvb_usb_device *d = adap_to_d(adap); -+ int ret = 0; -+ -+ dprintk("%s()\n", __func__); -+ -+ dvbsky_gpio_ctrl(d, 0x04, 1); -+ -+ dvbsky_gpio_ctrl(d, 0x83, 0); -+ msleep(50); -+ dvbsky_gpio_ctrl(d, 0x83, 1); -+ msleep(20); -+ -+ adap->fe[0] = dvb_attach(dvbsky_m88ds3103_attach, -+ &dvbsky_usb_ds3103_config, -+ &d->i2c_adap); -+ if (!adap->fe[0]) { -+ printk(KERN_ERR "dvbsky_s960_attach fail."); -+ ret = -ENODEV; -+ } -+ -+ state->has_ci = 0; -+ -+ return ret; -+} -+ -+static struct dvbsky_m88ds3103_config dvbsky_usb_ds3103_ci_config = { -+ .demod_address = 0x68, -+ .ci_mode = 2, -+ .pin_ctrl = 0x82, -+ .ts_mode = 0, -+ .start_ctrl = dvbsky_sync_ctrl, -+ .set_voltage = dvbsky_usb_ci_set_voltage, -+}; -+ -+static int dvbsky_s960c_attach(struct dvb_usb_adapter *adap) -+{ -+ struct dvbsky_state *state = adap_to_priv(adap); -+ struct dvb_usb_device *d = adap_to_d(adap); -+ int ret = 0; -+ -+ dvbsky_gpio_ctrl(d, 0x04, 1); -+ -+ dvbsky_gpio_ctrl(d, 0x83, 0); -+ msleep(50); -+ dvbsky_gpio_ctrl(d, 0x83, 1); -+ msleep(20); -+ -+ adap->fe[0] = dvb_attach(dvbsky_m88ds3103_attach, -+ &dvbsky_usb_ds3103_ci_config, -+ &d->i2c_adap); -+ if (!adap->fe[0]) { -+ printk(KERN_ERR "dvbsky_s960c_attach fail."); -+ ret = -ENODEV; -+ } -+ -+ state->has_ci = 1; -+ -+ return ret; -+} -+ -+static int dvbsky_identify_state(struct dvb_usb_device *d, const char **name) -+{ -+ return WARM; -+} -+ -+static int dvbsky_init(struct dvb_usb_device *d) -+{ -+ struct dvbsky_state *state = d_to_priv(d); -+ int ret; -+ -+ /* use default interface */ -+ ret = usb_set_interface(d->udev, 0, 0); -+ if (ret) -+ return ret; -+ -+ mutex_init(&state->stream_mutex); -+ -+ /* attach CI */ -+ if (state->has_ci) { -+ dvbsky_gpio_ctrl(d, 0xc0, 1); -+ msleep(100); -+ dvbsky_gpio_ctrl(d, 0xc0, 0); -+ msleep(50); -+ state->ci_attached = 0; -+ ret = dvbsky_ci_init(d); -+ if (ret) -+ return ret; -+ } -+ return 0; -+} -+ -+static void dvbsky_exit(struct dvb_usb_device *d) -+{ -+ return dvbsky_ci_release(d); -+} -+ -+/* DVB USB Driver stuff */ -+static struct dvb_usb_device_properties dvbsky_s960c_props = { -+ .driver_name = KBUILD_MODNAME, -+ .owner = THIS_MODULE, -+ .adapter_nr = adapter_nr, -+ .size_of_priv = sizeof(struct dvbsky_state), -+ -+ .generic_bulk_ctrl_endpoint = 0x01, -+ .generic_bulk_ctrl_endpoint_response = 0x81, -+ -+ .i2c_algo = &dvbsky_i2c_algo, -+ .frontend_attach = dvbsky_s960c_attach, -+ .init = dvbsky_init, -+ .get_rc_config = dvbsky_get_rc_config, -+ .streaming_ctrl = dvbsky_streaming_ctrl, -+ .identify_state = dvbsky_identify_state, -+ .exit = dvbsky_exit, -+ -+ .num_adapters = 1, -+ .adapter = { -+ { -+ .stream = DVB_USB_STREAM_BULK(0x82, 8, 4096), -+ } -+ } -+}; -+ -+static struct dvb_usb_device_properties dvbsky_s960_props = { -+ .driver_name = KBUILD_MODNAME, -+ .owner = THIS_MODULE, -+ .adapter_nr = adapter_nr, -+ .size_of_priv = sizeof(struct dvbsky_state), -+ -+ .generic_bulk_ctrl_endpoint = 0x01, -+ .generic_bulk_ctrl_endpoint_response = 0x81, -+ -+ .i2c_algo = &dvbsky_i2c_algo, -+ .frontend_attach = dvbsky_s960_attach, -+ .init = dvbsky_init, -+ .get_rc_config = dvbsky_get_rc_config, -+ .streaming_ctrl = dvbsky_streaming_ctrl, -+ .identify_state = dvbsky_identify_state, -+ .exit = dvbsky_exit, -+ .read_mac_address = dvbsky_read_mac_addr, -+ -+ .num_adapters = 1, -+ .adapter = { -+ { -+ .stream = DVB_USB_STREAM_BULK(0x82, 8, 4096), -+ } -+ } -+}; -+ -+static const struct usb_device_id dvbsky_id_table[] = { -+ { DVB_USB_DEVICE(0x0572, 0x960c, -+ &dvbsky_s960c_props, "DVBSky S960CI", RC_MAP_DVBSKY) }, -+ { DVB_USB_DEVICE(0x0572, 0x6831, -+ &dvbsky_s960_props, "DVBSky S960/S860", RC_MAP_DVBSKY) }, -+ { } -+}; -+MODULE_DEVICE_TABLE(usb, dvbsky_id_table); -+ -+static struct usb_driver dvbsky_usb_driver = { -+ .name = KBUILD_MODNAME, -+ .id_table = dvbsky_id_table, -+ .probe = dvb_usbv2_probe, -+ .disconnect = dvb_usbv2_disconnect, -+ .suspend = dvb_usbv2_suspend, -+ .resume = dvb_usbv2_resume, -+ .reset_resume = dvb_usbv2_reset_resume, -+ .no_dynamic_id = 1, -+ .soft_unbind = 1, -+}; -+ -+module_usb_driver(dvbsky_usb_driver); -+ -+MODULE_AUTHOR("Max nibble "); -+MODULE_DESCRIPTION("Driver for DVBSky USB2.0"); -+MODULE_LICENSE("GPL"); -diff --git a/include/media/rc-map.h b/include/media/rc-map.h -index a20ed97..73f8c92 100644 ---- a/include/media/rc-map.h -+++ b/include/media/rc-map.h -@@ -119,6 +119,7 @@ void rc_map_init(void); - #define RC_MAP_DM1105_NEC "rc-dm1105-nec" - #define RC_MAP_DNTV_LIVE_DVBT_PRO "rc-dntv-live-dvbt-pro" - #define RC_MAP_DNTV_LIVE_DVB_T "rc-dntv-live-dvb-t" -+#define RC_MAP_DVBSKY "rc-dvbsky" - #define RC_MAP_EMPTY "rc-empty" - #define RC_MAP_EM_TERRATEC "rc-em-terratec" - #define RC_MAP_ENCORE_ENLTV2 "rc-encore-enltv2" diff --git a/projects/imx6/patches/linux/3.14-sr/linux-212-mantis_stb0899_faster_lock.patch b/projects/imx6/patches/linux/3.14-sr/linux-212-mantis_stb0899_faster_lock.patch deleted file mode 100644 index eef4e1effc..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-212-mantis_stb0899_faster_lock.patch +++ /dev/null @@ -1,138 +0,0 @@ -diff -Naur linux-3.7.2/drivers/media/dvb-frontends/stb0899_algo.c linux-3.7.2.patch/drivers/media/dvb-frontends/stb0899_algo.c ---- linux-3.7.2/drivers/media/dvb-frontends/stb0899_algo.c 2013-01-11 18:19:28.000000000 +0100 -+++ linux-3.7.2.patch/drivers/media/dvb-frontends/stb0899_algo.c 2013-01-16 10:28:33.633409961 +0100 -@@ -206,7 +206,6 @@ - static enum stb0899_status stb0899_search_tmg(struct stb0899_state *state) - { - struct stb0899_internal *internal = &state->internal; -- struct stb0899_params *params = &state->params; - - short int derot_step, derot_freq = 0, derot_limit, next_loop = 3; - int index = 0; -@@ -216,10 +215,9 @@ - - /* timing loop computation & symbol rate optimisation */ - derot_limit = (internal->sub_range / 2L) / internal->mclk; -- derot_step = (params->srate / 2L) / internal->mclk; -+ derot_step = internal->derot_step * 4; /* dertot_step = decreasing delta */ - - while ((stb0899_check_tmg(state) != TIMINGOK) && next_loop) { -- index++; - derot_freq += index * internal->direction * derot_step; /* next derot zig zag position */ - - if (abs(derot_freq) > derot_limit) -@@ -230,6 +228,7 @@ - STB0899_SETFIELD_VAL(CFRL, cfr[1], LSB(state->config->inversion * derot_freq)); - stb0899_write_regs(state, STB0899_CFRM, cfr, 2); /* derotator frequency */ - } -+ index++; - internal->direction = -internal->direction; /* Change zigzag direction */ - } - -@@ -278,14 +277,18 @@ - { - struct stb0899_internal *internal = &state->internal; - -- short int derot_freq = 0, last_derot_freq = 0, derot_limit, next_loop = 3; -+ short int derot_freq = 0, last_derot_freq = 0, derot_limit, derot_step, next_loop = 3; - int index = 0; -+ int base_freq; - u8 cfr[2]; - u8 reg; - - internal->status = NOCARRIER; - derot_limit = (internal->sub_range / 2L) / internal->mclk; - derot_freq = internal->derot_freq; -+ derot_step = internal->derot_step * 2; -+ last_derot_freq = internal->derot_freq; -+ base_freq = internal->derot_freq; - - reg = stb0899_read_reg(state, STB0899_CFD); - STB0899_SETFIELD_VAL(CFD_ON, reg, 1); -@@ -294,11 +297,10 @@ - do { - dprintk(state->verbose, FE_DEBUG, 1, "Derot Freq=%d, mclk=%d", derot_freq, internal->mclk); - if (stb0899_check_carrier(state) == NOCARRIER) { -- index++; - last_derot_freq = derot_freq; -- derot_freq += index * internal->direction * internal->derot_step; /* next zig zag derotator position */ -+ derot_freq += index * internal->direction * derot_step; /* next zig zag derotator position */ - -- if(abs(derot_freq) > derot_limit) -+ if (derot_freq > base_freq + derot_limit || derot_freq < base_freq - derot_limit) - next_loop--; - - if (next_loop) { -@@ -310,9 +312,10 @@ - STB0899_SETFIELD_VAL(CFRL, cfr[1], LSB(state->config->inversion * derot_freq)); - stb0899_write_regs(state, STB0899_CFRM, cfr, 2); /* derotator frequency */ - } -+ index++; -+ internal->direction = -internal->direction; /* Change zigzag direction */ - } - -- internal->direction = -internal->direction; /* Change zigzag direction */ - } while ((internal->status != CARRIEROK) && next_loop); - - if (internal->status == CARRIEROK) { -@@ -338,6 +341,7 @@ - int lock = 0, index = 0, dataTime = 500, loop; - u8 reg; - -+ msleep(1); - internal->status = NODATA; - - /* RESET FEC */ -@@ -348,6 +352,7 @@ - reg = stb0899_read_reg(state, STB0899_TSTRES); - STB0899_SETFIELD_VAL(FRESACS, reg, 0); - stb0899_write_reg(state, STB0899_TSTRES, reg); -+ msleep(1); - - if (params->srate <= 2000000) - dataTime = 2000; -@@ -363,6 +368,7 @@ - - stb0899_write_reg(state, STB0899_DSTATUS2, 0x00); /* force search loop */ - while (1) { -+ msleep(1); // Alex: added 1 mSec - /* WARNING! VIT LOCKED has to be tested before VIT_END_LOOOP */ - reg = stb0899_read_reg(state, STB0899_VSTATUS); - lock = STB0899_GETFIELD(VSTATUS_LOCKEDVIT, reg); -@@ -390,20 +396,21 @@ - short int derot_freq, derot_step, derot_limit, next_loop = 3; - u8 cfr[2]; - u8 reg; -- int index = 1; -+ int index = 0; -+ int base_freq; - - struct stb0899_internal *internal = &state->internal; -- struct stb0899_params *params = &state->params; - -- derot_step = (params->srate / 4L) / internal->mclk; -+ derot_step = internal->derot_step; - derot_limit = (internal->sub_range / 2L) / internal->mclk; - derot_freq = internal->derot_freq; -+ base_freq = internal->derot_freq; - - do { - if ((internal->status != CARRIEROK) || (stb0899_check_data(state) != DATAOK)) { - - derot_freq += index * internal->direction * derot_step; /* next zig zag derotator position */ -- if (abs(derot_freq) > derot_limit) -+ if (derot_freq > base_freq + derot_limit || derot_freq < base_freq - derot_limit) - next_loop--; - - if (next_loop) { -@@ -417,9 +424,9 @@ - stb0899_write_regs(state, STB0899_CFRM, cfr, 2); /* derotator frequency */ - - stb0899_check_carrier(state); -- index++; - } - } -+ index++; - internal->direction = -internal->direction; /* change zig zag direction */ - } while ((internal->status != DATAOK) && next_loop); - diff --git a/projects/imx6/patches/linux/3.14-sr/linux-222-stb0899_signal_quality.patch b/projects/imx6/patches/linux/3.14-sr/linux-222-stb0899_signal_quality.patch deleted file mode 100644 index fd6539d2bf..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-222-stb0899_signal_quality.patch +++ /dev/null @@ -1,62 +0,0 @@ -diff -Naur linux-3.7.2/drivers/media/dvb-frontends/stb0899_drv.c linux-3.7.2.patch/drivers/media/dvb-frontends/stb0899_drv.c ---- linux-3.7.2/drivers/media/dvb-frontends/stb0899_drv.c 2013-01-11 18:19:28.000000000 +0100 -+++ linux-3.7.2.patch/drivers/media/dvb-frontends/stb0899_drv.c 2013-01-16 10:33:10.323380937 +0100 -@@ -971,6 +971,16 @@ - - *strength = stb0899_table_lookup(stb0899_dvbsrf_tab, ARRAY_SIZE(stb0899_dvbsrf_tab) - 1, val); - *strength += 750; -+ -+ const int MIN_STRENGTH_DVBS = 0; -+ const int MAX_STRENGTH_DVBS = 680; -+ if (*strength < MIN_STRENGTH_DVBS) -+ *strength = 0; -+ else if(*strength > MAX_STRENGTH_DVBS) -+ *strength = 0xFFFF; -+ else -+ *strength = (*strength - MIN_STRENGTH_DVBS) * 0xFFFF / (MAX_STRENGTH_DVBS - MIN_STRENGTH_DVBS); -+ - dprintk(state->verbose, FE_DEBUG, 1, "AGCIQVALUE = 0x%02x, C = %d * 0.1 dBm", - val & 0xff, *strength); - } -@@ -983,6 +993,7 @@ - - *strength = stb0899_table_lookup(stb0899_dvbs2rf_tab, ARRAY_SIZE(stb0899_dvbs2rf_tab) - 1, val); - *strength += 950; -+ *strength = *strength << 4; - dprintk(state->verbose, FE_DEBUG, 1, "IF_AGC_GAIN = 0x%04x, C = %d * 0.1 dBm", - val & 0x3fff, *strength); - } -@@ -1016,6 +1027,16 @@ - val = MAKEWORD16(buf[0], buf[1]); - - *snr = stb0899_table_lookup(stb0899_cn_tab, ARRAY_SIZE(stb0899_cn_tab) - 1, val); -+ -+ const int MIN_SNR_DVBS = 0; -+ const int MAX_SNR_DVBS = 200; -+ if (*snr < MIN_SNR_DVBS) -+ *snr = 0; -+ else if(*snr > MAX_SNR_DVBS) -+ *snr = 0xFFFF; -+ else -+ *snr = (*snr - MIN_SNR_DVBS) * 0xFFFF / (MAX_SNR_DVBS - MIN_SNR_DVBS); -+ - dprintk(state->verbose, FE_DEBUG, 1, "NIR = 0x%02x%02x = %u, C/N = %d * 0.1 dBm\n", - buf[0], buf[1], val, *snr); - } -@@ -1040,6 +1061,16 @@ - val = (quantn - estn) / 10; - } - *snr = val; -+ -+ const int MIN_SNR_DVBS2 = 10; -+ const int MAX_SNR_DVBS2 = 70; -+ if (*snr < MIN_SNR_DVBS2) -+ *snr = 0; -+ else if(*snr > MAX_SNR_DVBS2) -+ *snr = 0xFFFF; -+ else -+ *snr = (*snr - MIN_SNR_DVBS2) * 0xFFFF / (MAX_SNR_DVBS2 - MIN_SNR_DVBS2); -+ - dprintk(state->verbose, FE_DEBUG, 1, "Es/N0 quant = %d (%d) estimate = %u (%d), C/N = %d * 0.1 dBm", - quant, quantn, est, estn, val); - } diff --git a/projects/imx6/patches/linux/3.14-sr/linux-223-Fix-video-artifacts-with-tt-3600-s2-usb.patch b/projects/imx6/patches/linux/3.14-sr/linux-223-Fix-video-artifacts-with-tt-3600-s2-usb.patch deleted file mode 100644 index 7aaabc48c0..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-223-Fix-video-artifacts-with-tt-3600-s2-usb.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff -Naur linux-3.7.9/drivers/media/usb/dvb-usb/pctv452e.c linux-3.7.9.patch/drivers/media/usb/dvb-usb/pctv452e.c ---- linux-3.7.9/drivers/media/usb/dvb-usb/pctv452e.c 2013-01-11 18:19:28.000000000 +0100 -+++ linux-3.7.9.patch/drivers/media/usb/dvb-usb/pctv452e.c 2013-01-16 10:35:01.131342123 +0100 -@@ -995,11 +995,11 @@ - /* parameter for the MPEG2-data transfer */ - .stream = { - .type = USB_ISOC, -- .count = 7, -+ .count = 4, - .endpoint = 0x02, - .u = { - .isoc = { -- .framesperurb = 4, -+ .framesperurb = 64, - .framesize = 940, - .interval = 1 - } diff --git a/projects/imx6/patches/linux/3.14-sr/linux-224-geniatech-t220-dvb-t2-fix.patch b/projects/imx6/patches/linux/3.14-sr/linux-224-geniatech-t220-dvb-t2-fix.patch deleted file mode 100644 index 17488409ff..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-224-geniatech-t220-dvb-t2-fix.patch +++ /dev/null @@ -1,97 +0,0 @@ -diff --git a/drivers/media/dvb-frontends/cxd2820r.h b/drivers/media/dvb-frontends/cxd2820r.h -index 82b3d93..6095dbc 100644 ---- a/drivers/media/dvb-frontends/cxd2820r.h -+++ b/drivers/media/dvb-frontends/cxd2820r.h -@@ -52,6 +52,12 @@ struct cxd2820r_config { - */ - u8 ts_mode; - -+ /* TS clock inverted. -+ * Default: 0 -+ * Values: 0, 1 -+ */ -+ bool ts_clock_inv; -+ - /* IF AGC polarity. - * Default: 0 - * Values: 0, 1 -diff --git a/drivers/media/dvb-frontends/cxd2820r_c.c b/drivers/media/dvb-frontends/cxd2820r_c.c -index 5c6ab49..0f4657e 100644 ---- a/drivers/media/dvb-frontends/cxd2820r_c.c -+++ b/drivers/media/dvb-frontends/cxd2820r_c.c -@@ -45,6 +45,7 @@ int cxd2820r_set_frontend_c(struct dvb_frontend *fe) - { 0x1008b, 0x07, 0xff }, - { 0x1001f, priv->cfg.if_agc_polarity << 7, 0x80 }, - { 0x10070, priv->cfg.ts_mode, 0xff }, -+ { 0x10071, !priv->cfg.ts_clock_inv << 4, 0x10 }, - }; - - dev_dbg(&priv->i2c->dev, "%s: frequency=%d symbol_rate=%d\n", __func__, -diff --git a/drivers/media/dvb-frontends/cxd2820r_t.c b/drivers/media/dvb-frontends/cxd2820r_t.c -index fa184ca..9b5a45b 100644 ---- a/drivers/media/dvb-frontends/cxd2820r_t.c -+++ b/drivers/media/dvb-frontends/cxd2820r_t.c -@@ -46,6 +46,7 @@ int cxd2820r_set_frontend_t(struct dvb_frontend *fe) - { 0x00088, 0x01, 0xff }, - - { 0x00070, priv->cfg.ts_mode, 0xff }, -+ { 0x00071, !priv->cfg.ts_clock_inv << 4, 0x10 }, - { 0x000cb, priv->cfg.if_agc_polarity << 6, 0x40 }, - { 0x000a5, 0x00, 0x01 }, - { 0x00082, 0x20, 0x60 }, -diff --git a/drivers/media/dvb-frontends/cxd2820r_t2.c b/drivers/media/dvb-frontends/cxd2820r_t2.c -index 2ba130e..9c0c4f4 100644 ---- a/drivers/media/dvb-frontends/cxd2820r_t2.c -+++ b/drivers/media/dvb-frontends/cxd2820r_t2.c -@@ -47,6 +47,7 @@ int cxd2820r_set_frontend_t2(struct dvb_frontend *fe) - { 0x02083, 0x0a, 0xff }, - { 0x020cb, priv->cfg.if_agc_polarity << 6, 0x40 }, - { 0x02070, priv->cfg.ts_mode, 0xff }, -+ { 0x02071, !priv->cfg.ts_clock_inv << 6, 0x40 }, - { 0x020b5, priv->cfg.spec_inv << 4, 0x10 }, - { 0x02567, 0x07, 0x0f }, - { 0x02569, 0x03, 0x03 }, -diff --git a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw2102.c -index ae0f56a..7135a3e 100644 ---- a/drivers/media/usb/dvb-usb/dw2102.c -+++ b/drivers/media/usb/dvb-usb/dw2102.c -@@ -1109,6 +1109,7 @@ static struct ds3000_config su3000_ds3000_config = { - static struct cxd2820r_config cxd2820r_config = { - .i2c_address = 0x6c, /* (0xd8 >> 1) */ - .ts_mode = 0x38, -+ .ts_clock_inv = 1, - }; - - static struct tda18271_config tda18271_config = { -@@ -1387,20 +1388,27 @@ static int su3000_frontend_attach(struct dvb_usb_adapter *d) - - static int t220_frontend_attach(struct dvb_usb_adapter *d) - { -- u8 obuf[3] = { 0xe, 0x80, 0 }; -+ u8 obuf[3] = { 0xe, 0x87, 0 }; - u8 ibuf[] = { 0 }; - - if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0) - err("command 0x0e transfer failed."); - - obuf[0] = 0xe; -- obuf[1] = 0x83; -+ obuf[1] = 0x86; -+ obuf[2] = 1; -+ -+ if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0) -+ err("command 0x0e transfer failed."); -+ -+ obuf[0] = 0xe; -+ obuf[1] = 0x80; - obuf[2] = 0; - - if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0) - err("command 0x0e transfer failed."); - -- msleep(100); -+ msleep(50); - - obuf[0] = 0xe; - obuf[1] = 0x80; - diff --git a/projects/imx6/patches/linux/3.14-sr/linux-225-ct2-devices.patch b/projects/imx6/patches/linux/3.14-sr/linux-225-ct2-devices.patch deleted file mode 100644 index 62729d84dd..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-225-ct2-devices.patch +++ /dev/null @@ -1,4334 +0,0 @@ -diff -urN a/drivers/media/dvb-core/dvb-usb-ids.h b/drivers/media/dvb-core/dvb-usb-ids.h ---- a/drivers/media/dvb-core/dvb-usb-ids.h 2015-03-22 14:14:48.000000000 +0200 -+++ b/drivers/media/dvb-core/dvb-usb-ids.h 2015-03-22 14:17:59.566225151 +0200 -@@ -285,6 +285,8 @@ - #define USB_PID_REALTEK_RTL2832U 0x2832 - #define USB_PID_TECHNOTREND_CONNECT_S2_3600 0x3007 - #define USB_PID_TECHNOTREND_CONNECT_S2_3650_CI 0x300a -+#define USB_PID_TECHNOTREND_CONNECT_CT2_4650_CI 0x3012 -+#define USB_PID_TECHNOTREND_TVSTICK_CT2_4400 0x3014 - #define USB_PID_NEBULA_DIGITV 0x0201 - #define USB_PID_DVICO_BLUEBIRD_LGDT 0xd820 - #define USB_PID_DVICO_BLUEBIRD_LG064F_COLD 0xd500 -diff -urN a/drivers/media/dvb-frontends/Kconfig b/drivers/media/dvb-frontends/Kconfig ---- a/drivers/media/dvb-frontends/Kconfig 2015-03-22 14:16:43.000000000 +0200 -+++ b/drivers/media/dvb-frontends/Kconfig 2015-03-22 14:17:59.566225151 +0200 -@@ -768,6 +768,16 @@ - depends on DVB_CORE && I2C - default m if !MEDIA_SUBDRV_AUTOSELECT - -+config DVB_SI2168 -+ tristate "Afatech AF9033 DVB-T demodulator" -+ depends on DVB_CORE && I2C -+ default m if !MEDIA_SUBDRV_AUTOSELECT -+ -+config DVB_SP2 -+ tristate "Afatech AF9033 DVB-T demodulator" -+ depends on DVB_CORE && I2C -+ default m if !MEDIA_SUBDRV_AUTOSELECT -+ - comment "Tools to develop new frontends" - - config DVB_DUMMY_FE -diff -urN a/drivers/media/dvb-frontends/m88ds3103.c b/drivers/media/dvb-frontends/m88ds3103.c ---- a/drivers/media/dvb-frontends/m88ds3103.c 2014-11-02 15:07:14.000000000 +0200 -+++ b/drivers/media/dvb-frontends/m88ds3103.c 2015-03-22 14:20:15.000000000 +0200 -@@ -1,5 +1,5 @@ - /* -- * Montage M88DS3103 demodulator driver -+ * Montage M88DS3103/M88RS6000 demodulator driver - * - * Copyright (C) 2013 Antti Palosaari - * -@@ -159,9 +159,10 @@ - { - int ret, i, j; - u8 buf[83]; -+ - dev_dbg(&priv->i2c->dev, "%s: tab_len=%d\n", __func__, tab_len); - -- if (tab_len > 83) { -+ if (tab_len > 86) { - ret = -EINVAL; - goto err; - } -@@ -244,11 +245,12 @@ - struct dtv_frontend_properties *c = &fe->dtv_property_cache; - int ret, len; - const struct m88ds3103_reg_val *init; -- u8 u8tmp, u8tmp1, u8tmp2; -- u8 buf[2]; -- u16 u16tmp, divide_ratio; -- u32 tuner_frequency, target_mclk, ts_clk; -+ u8 u8tmp, u8tmp1 = 0, u8tmp2 = 0; /* silence compiler warning */ -+ u8 buf[3]; -+ u16 u16tmp, divide_ratio = 0; -+ u32 tuner_frequency, target_mclk; - s32 s32tmp; -+ - dev_dbg(&priv->i2c->dev, - "%s: delivery_system=%d modulation=%d frequency=%d symbol_rate=%d inversion=%d pilot=%d rolloff=%d\n", - __func__, c->delivery_system, -@@ -260,6 +262,22 @@ - goto err; - } - -+ /* reset */ -+ ret = m88ds3103_wr_reg(priv, 0x07, 0x80); -+ if (ret) -+ goto err; -+ -+ ret = m88ds3103_wr_reg(priv, 0x07, 0x00); -+ if (ret) -+ goto err; -+ -+ /* Disable demod clock path */ -+ if (priv->chip_id == M88RS6000_CHIP_ID) { -+ ret = m88ds3103_wr_reg(priv, 0x06, 0xe0); -+ if (ret) -+ goto err; -+ } -+ - /* program tuner */ - if (fe->ops.tuner_ops.set_params) { - ret = fe->ops.tuner_ops.set_params(fe); -@@ -271,54 +289,53 @@ - ret = fe->ops.tuner_ops.get_frequency(fe, &tuner_frequency); - if (ret) - goto err; -+ } else { -+ /* -+ * Use nominal target frequency as tuner driver does not provide -+ * actual frequency used. Carrier offset calculation is not -+ * valid. -+ */ -+ tuner_frequency = c->frequency; - } - -- /* reset */ -- ret = m88ds3103_wr_reg(priv, 0x07, 0x80); -- if (ret) -- goto err; -- -- ret = m88ds3103_wr_reg(priv, 0x07, 0x00); -- if (ret) -- goto err; -- -- ret = m88ds3103_wr_reg(priv, 0xb2, 0x01); -- if (ret) -- goto err; -+ /* select M88RS6000 demod main mclk and ts mclk from tuner die. */ -+ if (priv->chip_id == M88RS6000_CHIP_ID) { -+ if (c->symbol_rate > 45010000) -+ priv->mclk_khz = 110250; -+ else -+ priv->mclk_khz = 96000; - -- ret = m88ds3103_wr_reg(priv, 0x00, 0x01); -- if (ret) -- goto err; -+ if (c->delivery_system == SYS_DVBS) -+ target_mclk = 96000; -+ else -+ target_mclk = 144000; - -- switch (c->delivery_system) { -- case SYS_DVBS: -- len = ARRAY_SIZE(m88ds3103_dvbs_init_reg_vals); -- init = m88ds3103_dvbs_init_reg_vals; -- target_mclk = 96000; -- break; -- case SYS_DVBS2: -- len = ARRAY_SIZE(m88ds3103_dvbs2_init_reg_vals); -- init = m88ds3103_dvbs2_init_reg_vals; -+ /* Enable demod clock path */ -+ ret = m88ds3103_wr_reg(priv, 0x06, 0x00); -+ if (ret) -+ goto err; -+ usleep_range(10000, 20000); -+ } else { -+ /* set M88DS3103 mclk and ts mclk. */ -+ priv->mclk_khz = 96000; - - switch (priv->cfg->ts_mode) { - case M88DS3103_TS_SERIAL: - case M88DS3103_TS_SERIAL_D7: -- if (c->symbol_rate < 18000000) -- target_mclk = 96000; -- else -- target_mclk = 144000; -+ target_mclk = priv->cfg->ts_clk; - break; - case M88DS3103_TS_PARALLEL: -- case M88DS3103_TS_PARALLEL_12: -- case M88DS3103_TS_PARALLEL_16: -- case M88DS3103_TS_PARALLEL_19_2: - case M88DS3103_TS_CI: -- if (c->symbol_rate < 18000000) -+ if (c->delivery_system == SYS_DVBS) - target_mclk = 96000; -- else if (c->symbol_rate < 28000000) -- target_mclk = 144000; -- else -- target_mclk = 192000; -+ else { -+ if (c->symbol_rate < 18000000) -+ target_mclk = 96000; -+ else if (c->symbol_rate < 28000000) -+ target_mclk = 144000; -+ else -+ target_mclk = 192000; -+ } - break; - default: - dev_dbg(&priv->i2c->dev, "%s: invalid ts_mode\n", -@@ -326,6 +343,55 @@ - ret = -EINVAL; - goto err; - } -+ -+ switch (target_mclk) { -+ case 96000: -+ u8tmp1 = 0x02; /* 0b10 */ -+ u8tmp2 = 0x01; /* 0b01 */ -+ break; -+ case 144000: -+ u8tmp1 = 0x00; /* 0b00 */ -+ u8tmp2 = 0x01; /* 0b01 */ -+ break; -+ case 192000: -+ u8tmp1 = 0x03; /* 0b11 */ -+ u8tmp2 = 0x00; /* 0b00 */ -+ break; -+ } -+ ret = m88ds3103_wr_reg_mask(priv, 0x22, u8tmp1 << 6, 0xc0); -+ if (ret) -+ goto err; -+ ret = m88ds3103_wr_reg_mask(priv, 0x24, u8tmp2 << 6, 0xc0); -+ if (ret) -+ goto err; -+ } -+ -+ ret = m88ds3103_wr_reg(priv, 0xb2, 0x01); -+ if (ret) -+ goto err; -+ -+ ret = m88ds3103_wr_reg(priv, 0x00, 0x01); -+ if (ret) -+ goto err; -+ -+ switch (c->delivery_system) { -+ case SYS_DVBS: -+ if (priv->chip_id == M88RS6000_CHIP_ID) { -+ len = ARRAY_SIZE(m88rs6000_dvbs_init_reg_vals); -+ init = m88rs6000_dvbs_init_reg_vals; -+ } else { -+ len = ARRAY_SIZE(m88ds3103_dvbs_init_reg_vals); -+ init = m88ds3103_dvbs_init_reg_vals; -+ } -+ break; -+ case SYS_DVBS2: -+ if (priv->chip_id == M88RS6000_CHIP_ID) { -+ len = ARRAY_SIZE(m88rs6000_dvbs2_init_reg_vals); -+ init = m88rs6000_dvbs2_init_reg_vals; -+ } else { -+ len = ARRAY_SIZE(m88ds3103_dvbs2_init_reg_vals); -+ init = m88ds3103_dvbs2_init_reg_vals; -+ } - break; - default: - dev_dbg(&priv->i2c->dev, "%s: invalid delivery_system\n", -@@ -341,37 +407,44 @@ - goto err; - } - -- u8tmp1 = 0; /* silence compiler warning */ -+ if (priv->chip_id == M88RS6000_CHIP_ID) { -+ if ((c->delivery_system == SYS_DVBS2) -+ && ((c->symbol_rate / 1000) <= 5000)) { -+ ret = m88ds3103_wr_reg(priv, 0xc0, 0x04); -+ if (ret) -+ goto err; -+ buf[0] = 0x09; -+ buf[1] = 0x22; -+ buf[2] = 0x88; -+ ret = m88ds3103_wr_regs(priv, 0x8a, buf, 3); -+ if (ret) -+ goto err; -+ } -+ ret = m88ds3103_wr_reg_mask(priv, 0x9d, 0x08, 0x08); -+ if (ret) -+ goto err; -+ ret = m88ds3103_wr_reg(priv, 0xf1, 0x01); -+ if (ret) -+ goto err; -+ ret = m88ds3103_wr_reg_mask(priv, 0x30, 0x80, 0x80); -+ if (ret) -+ goto err; -+ } -+ - switch (priv->cfg->ts_mode) { - case M88DS3103_TS_SERIAL: - u8tmp1 = 0x00; -- ts_clk = 0; -- u8tmp = 0x46; -+ u8tmp = 0x06; - break; - case M88DS3103_TS_SERIAL_D7: - u8tmp1 = 0x20; -- ts_clk = 0; -- u8tmp = 0x46; -+ u8tmp = 0x06; - break; - case M88DS3103_TS_PARALLEL: -- ts_clk = 24000; -- u8tmp = 0x42; -- break; -- case M88DS3103_TS_PARALLEL_12: -- ts_clk = 12000; -- u8tmp = 0x42; -- break; -- case M88DS3103_TS_PARALLEL_16: -- ts_clk = 16000; -- u8tmp = 0x42; -- break; -- case M88DS3103_TS_PARALLEL_19_2: -- ts_clk = 19200; -- u8tmp = 0x42; -+ u8tmp = 0x02; - break; - case M88DS3103_TS_CI: -- ts_clk = 6000; -- u8tmp = 0x43; -+ u8tmp = 0x03; - break; - default: - dev_dbg(&priv->i2c->dev, "%s: invalid ts_mode\n", __func__); -@@ -379,6 +452,9 @@ - goto err; - } - -+ if (priv->cfg->ts_clk_pol) -+ u8tmp |= 0x40; -+ - /* TS mode */ - ret = m88ds3103_wr_reg(priv, 0xfd, u8tmp); - if (ret) -@@ -390,21 +466,20 @@ - ret = m88ds3103_wr_reg_mask(priv, 0x29, u8tmp1, 0x20); - if (ret) - goto err; -- } -- -- if (ts_clk) { -- divide_ratio = DIV_ROUND_UP(target_mclk, ts_clk); -- u8tmp1 = divide_ratio / 2; -- u8tmp2 = DIV_ROUND_UP(divide_ratio, 2); -- } else { -- divide_ratio = 0; - u8tmp1 = 0; - u8tmp2 = 0; -+ break; -+ default: -+ if (priv->cfg->ts_clk) { -+ divide_ratio = DIV_ROUND_UP(target_mclk, priv->cfg->ts_clk); -+ u8tmp1 = divide_ratio / 2; -+ u8tmp2 = DIV_ROUND_UP(divide_ratio, 2); -+ } - } - - dev_dbg(&priv->i2c->dev, - "%s: target_mclk=%d ts_clk=%d divide_ratio=%d\n", -- __func__, target_mclk, ts_clk, divide_ratio); -+ __func__, target_mclk, priv->cfg->ts_clk, divide_ratio); - - u8tmp1--; - u8tmp2--; -@@ -427,41 +502,6 @@ - if (ret) - goto err; - -- switch (target_mclk) { -- case 72000: -- u8tmp1 = 0x00; /* 0b00 */ -- u8tmp2 = 0x03; /* 0b11 */ -- break; -- case 96000: -- u8tmp1 = 0x02; /* 0b10 */ -- u8tmp2 = 0x01; /* 0b01 */ -- break; -- case 115200: -- u8tmp1 = 0x01; /* 0b01 */ -- u8tmp2 = 0x01; /* 0b01 */ -- break; -- case 144000: -- u8tmp1 = 0x00; /* 0b00 */ -- u8tmp2 = 0x01; /* 0b01 */ -- break; -- case 192000: -- u8tmp1 = 0x03; /* 0b11 */ -- u8tmp2 = 0x00; /* 0b00 */ -- break; -- default: -- dev_dbg(&priv->i2c->dev, "%s: invalid target_mclk\n", __func__); -- ret = -EINVAL; -- goto err; -- } -- -- ret = m88ds3103_wr_reg_mask(priv, 0x22, u8tmp1 << 6, 0xc0); -- if (ret) -- goto err; -- -- ret = m88ds3103_wr_reg_mask(priv, 0x24, u8tmp2 << 6, 0xc0); -- if (ret) -- goto err; -- - if (c->symbol_rate <= 3000000) - u8tmp = 0x20; - else if (c->symbol_rate <= 10000000) -@@ -485,7 +525,7 @@ - if (ret) - goto err; - -- u16tmp = DIV_ROUND_CLOSEST((c->symbol_rate / 1000) << 15, M88DS3103_MCLK_KHZ / 2); -+ u16tmp = DIV_ROUND_CLOSEST((c->symbol_rate / 1000) << 15, priv->mclk_khz / 2); - buf[0] = (u16tmp >> 0) & 0xff; - buf[1] = (u16tmp >> 8) & 0xff; - ret = m88ds3103_wr_regs(priv, 0x61, buf, 2); -@@ -508,7 +548,7 @@ - (tuner_frequency - c->frequency)); - - s32tmp = 0x10000 * (tuner_frequency - c->frequency); -- s32tmp = DIV_ROUND_CLOSEST(s32tmp, M88DS3103_MCLK_KHZ); -+ s32tmp = DIV_ROUND_CLOSEST(s32tmp, priv->mclk_khz); - if (s32tmp < 0) - s32tmp += 0x10000; - -@@ -539,8 +579,9 @@ - struct m88ds3103_priv *priv = fe->demodulator_priv; - int ret, len, remaining; - const struct firmware *fw = NULL; -- u8 *fw_file = M88DS3103_FIRMWARE; -+ u8 *fw_file; - u8 u8tmp; -+ - dev_dbg(&priv->i2c->dev, "%s:\n", __func__); - - /* set cold state by default */ -@@ -559,15 +600,6 @@ - if (ret) - goto err; - -- /* reset */ -- ret = m88ds3103_wr_reg(priv, 0x07, 0x60); -- if (ret) -- goto err; -- -- ret = m88ds3103_wr_reg(priv, 0x07, 0x00); -- if (ret) -- goto err; -- - /* firmware status */ - ret = m88ds3103_rd_reg(priv, 0xb9, &u8tmp); - if (ret) -@@ -578,10 +610,23 @@ - if (u8tmp) - goto skip_fw_download; - -+ /* global reset, global diseqc reset, golbal fec reset */ -+ ret = m88ds3103_wr_reg(priv, 0x07, 0xe0); -+ if (ret) -+ goto err; -+ -+ ret = m88ds3103_wr_reg(priv, 0x07, 0x00); -+ if (ret) -+ goto err; -+ - /* cold state - try to download firmware */ - dev_info(&priv->i2c->dev, "%s: found a '%s' in cold state\n", - KBUILD_MODNAME, m88ds3103_ops.info.name); - -+ if (priv->chip_id == M88RS6000_CHIP_ID) -+ fw_file = M88RS6000_FIRMWARE; -+ else -+ fw_file = M88DS3103_FIRMWARE; - /* request the firmware, this will block and timeout */ - ret = request_firmware(&fw, fw_file, priv->i2c->dev.parent); - if (ret) { -@@ -595,7 +640,7 @@ - - ret = m88ds3103_wr_reg(priv, 0xb2, 0x01); - if (ret) -- goto err; -+ goto error_fw_release; - - for (remaining = fw->size; remaining > 0; - remaining -= (priv->cfg->i2c_wr_max - 1)) { -@@ -609,13 +654,13 @@ - dev_err(&priv->i2c->dev, - "%s: firmware download failed=%d\n", - KBUILD_MODNAME, ret); -- goto err; -+ goto error_fw_release; - } - } - - ret = m88ds3103_wr_reg(priv, 0xb2, 0x00); - if (ret) -- goto err; -+ goto error_fw_release; - - release_firmware(fw); - fw = NULL; -@@ -641,10 +686,10 @@ - priv->warm = true; - - return 0; --err: -- if (fw) -- release_firmware(fw); - -+error_fw_release: -+ release_firmware(fw); -+err: - dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret); - return ret; - } -@@ -653,12 +698,18 @@ - { - struct m88ds3103_priv *priv = fe->demodulator_priv; - int ret; -+ u8 u8tmp; -+ - dev_dbg(&priv->i2c->dev, "%s:\n", __func__); - - priv->delivery_system = SYS_UNDEFINED; - - /* TS Hi-Z */ -- ret = m88ds3103_wr_reg_mask(priv, 0x27, 0x00, 0x01); -+ if (priv->chip_id == M88RS6000_CHIP_ID) -+ u8tmp = 0x29; -+ else -+ u8tmp = 0x27; -+ ret = m88ds3103_wr_reg_mask(priv, u8tmp, 0x00, 0x01); - if (ret) - goto err; - -@@ -687,6 +738,7 @@ - struct dtv_frontend_properties *c = &fe->dtv_property_cache; - int ret; - u8 buf[3]; -+ - dev_dbg(&priv->i2c->dev, "%s:\n", __func__); - - if (!priv->warm || !(priv->fe_status & FE_HAS_LOCK)) { -@@ -711,9 +763,6 @@ - case 1: - c->inversion = INVERSION_ON; - break; -- default: -- dev_dbg(&priv->i2c->dev, "%s: invalid inversion\n", -- __func__); - } - - switch ((buf[1] >> 5) & 0x07) { -@@ -793,9 +842,6 @@ - case 1: - c->pilot = PILOT_ON; - break; -- default: -- dev_dbg(&priv->i2c->dev, "%s: invalid pilot\n", -- __func__); - } - - switch ((buf[0] >> 6) & 0x07) { -@@ -823,9 +869,6 @@ - case 1: - c->inversion = INVERSION_ON; - break; -- default: -- dev_dbg(&priv->i2c->dev, "%s: invalid inversion\n", -- __func__); - } - - switch ((buf[2] >> 0) & 0x03) { -@@ -855,7 +898,7 @@ - goto err; - - c->symbol_rate = 1ull * ((buf[1] << 8) | (buf[0] << 0)) * -- M88DS3103_MCLK_KHZ * 1000 / 0x10000; -+ priv->mclk_khz * 1000 / 0x10000; - - return 0; - err: -@@ -871,6 +914,7 @@ - u8 buf[3]; - u16 noise, signal; - u32 noise_tot, signal_tot; -+ - dev_dbg(&priv->i2c->dev, "%s:\n", __func__); - /* reports SNR in resolution of 0.1 dB */ - -@@ -893,7 +937,7 @@ - /* SNR(X) dB = 10 * ln(X) / ln(10) dB */ - tmp = DIV_ROUND_CLOSEST(tmp, 8 * M88DS3103_SNR_ITERATIONS); - if (tmp) -- *snr = 100ul * intlog2(tmp) / intlog2(10); -+ *snr = div_u64((u64) 100 * intlog2(tmp), intlog2(10)); - else - *snr = 0; - break; -@@ -922,7 +966,7 @@ - /* SNR(X) dB = 10 * log10(X) dB */ - if (signal > noise) { - tmp = signal / noise; -- *snr = 100ul * intlog10(tmp) / (1 << 24); -+ *snr = div_u64((u64) 100 * intlog10(tmp), (1 << 24)); - } else { - *snr = 0; - } -@@ -940,6 +984,87 @@ - return ret; - } - -+static int m88ds3103_read_ber(struct dvb_frontend *fe, u32 *ber) -+{ -+ struct m88ds3103_priv *priv = fe->demodulator_priv; -+ struct dtv_frontend_properties *c = &fe->dtv_property_cache; -+ int ret; -+ unsigned int utmp; -+ u8 buf[3], u8tmp; -+ -+ dev_dbg(&priv->i2c->dev, "%s:\n", __func__); -+ -+ switch (c->delivery_system) { -+ case SYS_DVBS: -+ ret = m88ds3103_wr_reg(priv, 0xf9, 0x04); -+ if (ret) -+ goto err; -+ -+ ret = m88ds3103_rd_reg(priv, 0xf8, &u8tmp); -+ if (ret) -+ goto err; -+ -+ if (!(u8tmp & 0x10)) { -+ u8tmp |= 0x10; -+ -+ ret = m88ds3103_rd_regs(priv, 0xf6, buf, 2); -+ if (ret) -+ goto err; -+ -+ priv->ber = (buf[1] << 8) | (buf[0] << 0); -+ -+ /* restart counters */ -+ ret = m88ds3103_wr_reg(priv, 0xf8, u8tmp); -+ if (ret) -+ goto err; -+ } -+ break; -+ case SYS_DVBS2: -+ ret = m88ds3103_rd_regs(priv, 0xd5, buf, 3); -+ if (ret) -+ goto err; -+ -+ utmp = (buf[2] << 16) | (buf[1] << 8) | (buf[0] << 0); -+ -+ if (utmp > 3000) { -+ ret = m88ds3103_rd_regs(priv, 0xf7, buf, 2); -+ if (ret) -+ goto err; -+ -+ priv->ber = (buf[1] << 8) | (buf[0] << 0); -+ -+ /* restart counters */ -+ ret = m88ds3103_wr_reg(priv, 0xd1, 0x01); -+ if (ret) -+ goto err; -+ -+ ret = m88ds3103_wr_reg(priv, 0xf9, 0x01); -+ if (ret) -+ goto err; -+ -+ ret = m88ds3103_wr_reg(priv, 0xf9, 0x00); -+ if (ret) -+ goto err; -+ -+ ret = m88ds3103_wr_reg(priv, 0xd1, 0x00); -+ if (ret) -+ goto err; -+ } -+ break; -+ default: -+ dev_dbg(&priv->i2c->dev, "%s: invalid delivery_system\n", -+ __func__); -+ ret = -EINVAL; -+ goto err; -+ } -+ -+ *ber = priv->ber; -+ -+ return 0; -+err: -+ dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret); -+ return ret; -+} - - static int m88ds3103_set_tone(struct dvb_frontend *fe, - fe_sec_tone_mode_t fe_sec_tone_mode) -@@ -947,6 +1072,7 @@ - struct m88ds3103_priv *priv = fe->demodulator_priv; - int ret; - u8 u8tmp, tone, reg_a1_mask; -+ - dev_dbg(&priv->i2c->dev, "%s: fe_sec_tone_mode=%d\n", __func__, - fe_sec_tone_mode); - -@@ -958,7 +1084,7 @@ - switch (fe_sec_tone_mode) { - case SEC_TONE_ON: - tone = 0; -- reg_a1_mask = 0x87; -+ reg_a1_mask = 0x47; - break; - case SEC_TONE_OFF: - tone = 1; -@@ -987,12 +1113,64 @@ - return ret; - } - -+static int m88ds3103_set_voltage(struct dvb_frontend *fe, -+ fe_sec_voltage_t fe_sec_voltage) -+{ -+ struct m88ds3103_priv *priv = fe->demodulator_priv; -+ int ret; -+ u8 u8tmp; -+ bool voltage_sel, voltage_dis; -+ -+ dev_dbg(&priv->i2c->dev, "%s: fe_sec_voltage=%d\n", __func__, -+ fe_sec_voltage); -+ -+ if (!priv->warm) { -+ ret = -EAGAIN; -+ goto err; -+ } -+ -+ switch (fe_sec_voltage) { -+ case SEC_VOLTAGE_18: -+ voltage_sel = true; -+ voltage_dis = false; -+ break; -+ case SEC_VOLTAGE_13: -+ voltage_sel = false; -+ voltage_dis = false; -+ break; -+ case SEC_VOLTAGE_OFF: -+ voltage_sel = false; -+ voltage_dis = true; -+ break; -+ default: -+ dev_dbg(&priv->i2c->dev, "%s: invalid fe_sec_voltage\n", -+ __func__); -+ ret = -EINVAL; -+ goto err; -+ } -+ -+ /* output pin polarity */ -+ voltage_sel ^= priv->cfg->lnb_hv_pol; -+ voltage_dis ^= priv->cfg->lnb_en_pol; -+ -+ u8tmp = voltage_dis << 1 | voltage_sel << 0; -+ ret = m88ds3103_wr_reg_mask(priv, 0xa2, u8tmp, 0x03); -+ if (ret) -+ goto err; -+ -+ return 0; -+err: -+ dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret); -+ return ret; -+} -+ - static int m88ds3103_diseqc_send_master_cmd(struct dvb_frontend *fe, - struct dvb_diseqc_master_cmd *diseqc_cmd) - { - struct m88ds3103_priv *priv = fe->demodulator_priv; - int ret, i; - u8 u8tmp; -+ - dev_dbg(&priv->i2c->dev, "%s: msg=%*ph\n", __func__, - diseqc_cmd->msg_len, diseqc_cmd->msg); - -@@ -1064,6 +1242,7 @@ - struct m88ds3103_priv *priv = fe->demodulator_priv; - int ret, i; - u8 u8tmp, burst; -+ - dev_dbg(&priv->i2c->dev, "%s: fe_sec_mini_cmd=%d\n", __func__, - fe_sec_mini_cmd); - -@@ -1136,6 +1315,7 @@ - static void m88ds3103_release(struct dvb_frontend *fe) - { - struct m88ds3103_priv *priv = fe->demodulator_priv; -+ - i2c_del_mux_adapter(priv->i2c_adapter); - kfree(priv); - } -@@ -1198,18 +1378,22 @@ - priv->i2c = i2c; - mutex_init(&priv->i2c_mutex); - -- ret = m88ds3103_rd_reg(priv, 0x01, &chip_id); -+ /* 0x00: chip id[6:0], 0x01: chip ver[7:0], 0x02: chip ver[15:8] */ -+ ret = m88ds3103_rd_reg(priv, 0x00, &chip_id); - if (ret) - goto err; - -- dev_dbg(&priv->i2c->dev, "%s: chip_id=%02x\n", __func__, chip_id); -+ chip_id >>= 1; -+ dev_info(&priv->i2c->dev, "%s: chip_id=%02x\n", __func__, chip_id); - - switch (chip_id) { -- case 0xd0: -+ case M88RS6000_CHIP_ID: -+ case M88DS3103_CHIP_ID: - break; - default: - goto err; - } -+ priv->chip_id = chip_id; - - switch (priv->cfg->clock_out) { - case M88DS3103_CLOCK_OUT_DISABLED: -@@ -1225,6 +1409,11 @@ - goto err; - } - -+ /* 0x29 register is defined differently for m88rs6000. */ -+ /* set internal tuner address to 0x21 */ -+ if (chip_id == M88RS6000_CHIP_ID) -+ u8tmp = 0x00; -+ - ret = m88ds3103_wr_reg(priv, 0x29, u8tmp); - if (ret) - goto err; -@@ -1252,6 +1441,9 @@ - - /* create dvb_frontend */ - memcpy(&priv->fe.ops, &m88ds3103_ops, sizeof(struct dvb_frontend_ops)); -+ if (priv->chip_id == M88RS6000_CHIP_ID) -+ strncpy(priv->fe.ops.info.name, -+ "Montage M88RS6000", sizeof(priv->fe.ops.info.name)); - priv->fe.demodulator_priv = priv; - - return &priv->fe; -@@ -1298,14 +1490,17 @@ - - .read_status = m88ds3103_read_status, - .read_snr = m88ds3103_read_snr, -+ .read_ber = m88ds3103_read_ber, - - .diseqc_send_master_cmd = m88ds3103_diseqc_send_master_cmd, - .diseqc_send_burst = m88ds3103_diseqc_send_burst, - - .set_tone = m88ds3103_set_tone, -+ .set_voltage = m88ds3103_set_voltage, - }; - - MODULE_AUTHOR("Antti Palosaari "); - MODULE_DESCRIPTION("Montage M88DS3103 DVB-S/S2 demodulator driver"); - MODULE_LICENSE("GPL"); - MODULE_FIRMWARE(M88DS3103_FIRMWARE); -+MODULE_FIRMWARE(M88RS6000_FIRMWARE); -diff -urN a/drivers/media/dvb-frontends/m88ds3103.h b/drivers/media/dvb-frontends/m88ds3103.h ---- a/drivers/media/dvb-frontends/m88ds3103.h 2014-11-02 15:07:14.000000000 +0200 -+++ b/drivers/media/dvb-frontends/m88ds3103.h 2015-03-22 14:22:03.000000000 +0200 -@@ -47,14 +47,23 @@ - */ - #define M88DS3103_TS_SERIAL 0 /* TS output pin D0, normal */ - #define M88DS3103_TS_SERIAL_D7 1 /* TS output pin D7 */ --#define M88DS3103_TS_PARALLEL 2 /* 24 MHz, normal */ --#define M88DS3103_TS_PARALLEL_12 3 /* 12 MHz */ --#define M88DS3103_TS_PARALLEL_16 4 /* 16 MHz */ --#define M88DS3103_TS_PARALLEL_19_2 5 /* 19.2 MHz */ --#define M88DS3103_TS_CI 6 /* 6 MHz */ -+#define M88DS3103_TS_PARALLEL 2 /* TS Parallel mode */ -+#define M88DS3103_TS_CI 3 /* TS CI Mode */ - u8 ts_mode; - - /* -+ * TS clk in KHz -+ * Default: 0. -+ */ -+ u32 ts_clk; -+ -+ /* -+ * TS clk polarity. -+ * Default: 0. 1-active at falling edge; 0-active at rising edge. -+ */ -+ u8 ts_clk_pol:1; -+ -+ /* - * spectrum inversion - * Default: 0 - */ -@@ -86,6 +95,22 @@ - * Default: none, must set - */ - u8 agc; -+ -+ /* -+ * LNB H/V pin polarity -+ * Default: 0. -+ * 1: pin high set to VOLTAGE_13, pin low to set VOLTAGE_18. -+ * 0: pin high set to VOLTAGE_18, pin low to set VOLTAGE_13. -+ */ -+ u8 lnb_hv_pol:1; -+ -+ /* -+ * LNB enable pin polarity -+ * Default: 0. -+ * 1: pin high to enable, pin low to disable. -+ * 0: pin high to disable, pin low to enable. -+ */ -+ u8 lnb_en_pol:1; - }; - - /* -diff -urN a/drivers/media/dvb-frontends/m88ds3103_priv.h b/drivers/media/dvb-frontends/m88ds3103_priv.h ---- a/drivers/media/dvb-frontends/m88ds3103_priv.h 2014-11-02 15:07:15.000000000 +0200 -+++ b/drivers/media/dvb-frontends/m88ds3103_priv.h 2015-03-22 14:23:04.000000000 +0200 -@@ -22,9 +22,13 @@ - #include "dvb_math.h" - #include - #include -+#include - - #define M88DS3103_FIRMWARE "dvb-demod-m88ds3103.fw" -+#define M88RS6000_FIRMWARE "dvb-demod-m88rs6000.fw" - #define M88DS3103_MCLK_KHZ 96000 -+#define M88RS6000_CHIP_ID 0x74 -+#define M88DS3103_CHIP_ID 0x70 - - struct m88ds3103_priv { - struct i2c_adapter *i2c; -@@ -34,8 +38,13 @@ - struct dvb_frontend fe; - fe_delivery_system_t delivery_system; - fe_status_t fe_status; -+ u32 ber; - bool warm; /* FW running */ - struct i2c_adapter *i2c_adapter; -+ /* auto detect chip id to do different config */ -+ u8 chip_id; -+ /* main mclk is calculated for M88RS6000 dynamically */ -+ u32 mclk_khz; - }; - - struct m88ds3103_reg_val { -@@ -212,4 +221,178 @@ - {0xb8, 0x00}, - }; - -+static const struct m88ds3103_reg_val m88rs6000_dvbs_init_reg_vals[] = { -+ {0x23, 0x07}, -+ {0x08, 0x03}, -+ {0x0c, 0x02}, -+ {0x20, 0x00}, -+ {0x21, 0x54}, -+ {0x25, 0x82}, -+ {0x27, 0x31}, -+ {0x30, 0x08}, -+ {0x31, 0x40}, -+ {0x32, 0x32}, -+ {0x33, 0x35}, -+ {0x35, 0xff}, -+ {0x3a, 0x00}, -+ {0x37, 0x10}, -+ {0x38, 0x10}, -+ {0x39, 0x02}, -+ {0x42, 0x60}, -+ {0x4a, 0x80}, -+ {0x4b, 0x04}, -+ {0x4d, 0x91}, -+ {0x5d, 0xc8}, -+ {0x50, 0x36}, -+ {0x51, 0x36}, -+ {0x52, 0x36}, -+ {0x53, 0x36}, -+ {0x63, 0x0f}, -+ {0x64, 0x30}, -+ {0x65, 0x40}, -+ {0x68, 0x26}, -+ {0x69, 0x4c}, -+ {0x70, 0x20}, -+ {0x71, 0x70}, -+ {0x72, 0x04}, -+ {0x73, 0x00}, -+ {0x70, 0x40}, -+ {0x71, 0x70}, -+ {0x72, 0x04}, -+ {0x73, 0x00}, -+ {0x70, 0x60}, -+ {0x71, 0x70}, -+ {0x72, 0x04}, -+ {0x73, 0x00}, -+ {0x70, 0x80}, -+ {0x71, 0x70}, -+ {0x72, 0x04}, -+ {0x73, 0x00}, -+ {0x70, 0xa0}, -+ {0x71, 0x70}, -+ {0x72, 0x04}, -+ {0x73, 0x00}, -+ {0x70, 0x1f}, -+ {0x76, 0x38}, -+ {0x77, 0xa6}, -+ {0x78, 0x0c}, -+ {0x79, 0x80}, -+ {0x7f, 0x14}, -+ {0x7c, 0x00}, -+ {0xae, 0x82}, -+ {0x80, 0x64}, -+ {0x81, 0x66}, -+ {0x82, 0x44}, -+ {0x85, 0x04}, -+ {0xcd, 0xf4}, -+ {0x90, 0x33}, -+ {0xa0, 0x44}, -+ {0xbe, 0x00}, -+ {0xc0, 0x08}, -+ {0xc3, 0x10}, -+ {0xc4, 0x08}, -+ {0xc5, 0xf0}, -+ {0xc6, 0xff}, -+ {0xc7, 0x00}, -+ {0xc8, 0x1a}, -+ {0xc9, 0x80}, -+ {0xe0, 0xf8}, -+ {0xe6, 0x8b}, -+ {0xd0, 0x40}, -+ {0xf8, 0x20}, -+ {0xfa, 0x0f}, -+ {0x00, 0x00}, -+ {0xbd, 0x01}, -+ {0xb8, 0x00}, -+ {0x29, 0x11}, -+}; -+ -+static const struct m88ds3103_reg_val m88rs6000_dvbs2_init_reg_vals[] = { -+ {0x23, 0x07}, -+ {0x08, 0x07}, -+ {0x0c, 0x02}, -+ {0x20, 0x00}, -+ {0x21, 0x54}, -+ {0x25, 0x82}, -+ {0x27, 0x31}, -+ {0x30, 0x08}, -+ {0x32, 0x32}, -+ {0x33, 0x35}, -+ {0x35, 0xff}, -+ {0x3a, 0x00}, -+ {0x37, 0x10}, -+ {0x38, 0x10}, -+ {0x39, 0x02}, -+ {0x42, 0x60}, -+ {0x4a, 0x80}, -+ {0x4b, 0x04}, -+ {0x4d, 0x91}, -+ {0x5d, 0xc8}, -+ {0x50, 0x36}, -+ {0x51, 0x36}, -+ {0x52, 0x36}, -+ {0x53, 0x36}, -+ {0x63, 0x0f}, -+ {0x64, 0x10}, -+ {0x65, 0x20}, -+ {0x68, 0x46}, -+ {0x69, 0xcd}, -+ {0x70, 0x20}, -+ {0x71, 0x70}, -+ {0x72, 0x04}, -+ {0x73, 0x00}, -+ {0x70, 0x40}, -+ {0x71, 0x70}, -+ {0x72, 0x04}, -+ {0x73, 0x00}, -+ {0x70, 0x60}, -+ {0x71, 0x70}, -+ {0x72, 0x04}, -+ {0x73, 0x00}, -+ {0x70, 0x80}, -+ {0x71, 0x70}, -+ {0x72, 0x04}, -+ {0x73, 0x00}, -+ {0x70, 0xa0}, -+ {0x71, 0x70}, -+ {0x72, 0x04}, -+ {0x73, 0x00}, -+ {0x70, 0x1f}, -+ {0x76, 0x38}, -+ {0x77, 0xa6}, -+ {0x78, 0x0c}, -+ {0x79, 0x80}, -+ {0x7f, 0x14}, -+ {0x85, 0x08}, -+ {0xcd, 0xf4}, -+ {0x90, 0x33}, -+ {0x86, 0x00}, -+ {0x87, 0x0f}, -+ {0x89, 0x00}, -+ {0x8b, 0x44}, -+ {0x8c, 0x66}, -+ {0x9d, 0xc1}, -+ {0x8a, 0x10}, -+ {0xad, 0x40}, -+ {0xa0, 0x44}, -+ {0xbe, 0x00}, -+ {0xc0, 0x08}, -+ {0xc1, 0x10}, -+ {0xc2, 0x08}, -+ {0xc3, 0x10}, -+ {0xc4, 0x08}, -+ {0xc5, 0xf0}, -+ {0xc6, 0xff}, -+ {0xc7, 0x00}, -+ {0xc8, 0x1a}, -+ {0xc9, 0x80}, -+ {0xca, 0x23}, -+ {0xcb, 0x24}, -+ {0xcc, 0xf4}, -+ {0xce, 0x74}, -+ {0x00, 0x00}, -+ {0xbd, 0x01}, -+ {0xb8, 0x00}, -+ {0x29, 0x01}, -+}; - #endif -diff -urN a/drivers/media/dvb-frontends/Makefile b/drivers/media/dvb-frontends/Makefile ---- a/drivers/media/dvb-frontends/Makefile 2015-03-22 14:16:43.000000000 +0200 -+++ b/drivers/media/dvb-frontends/Makefile 2015-03-22 14:17:59.566225151 +0200 -@@ -105,5 +105,7 @@ - obj-$(CONFIG_DVB_RTL2832) += rtl2832.o - obj-$(CONFIG_DVB_M88RS2000) += m88rs2000.o - obj-$(CONFIG_DVB_AF9033) += af9033.o -+obj-$(CONFIG_DVB_SP2) += sp2.o -+obj-$(CONFIG_DVB_SI2168) += si2168.o - obj-$(CONFIG_DVB_DVBSKY_M88DS3103) += dvbsky_m88ds3103.o - obj-$(CONFIG_DVB_DVBSKY_M88DC2800) += dvbsky_m88dc2800.o -diff -urN a/drivers/media/dvb-frontends/si2168.c b/drivers/media/dvb-frontends/si2168.c ---- a/drivers/media/dvb-frontends/si2168.c 1970-01-01 02:00:00.000000000 +0200 -+++ b/drivers/media/dvb-frontends/si2168.c 2015-03-22 14:17:59.570225151 +0200 -@@ -0,0 +1,756 @@ -+/* -+ * Silicon Labs Si2168 DVB-T/T2/C demodulator driver -+ * -+ * Copyright (C) 2014 Antti Palosaari -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ */ -+ -+#include "si2168_priv.h" -+ -+static const struct dvb_frontend_ops si2168_ops; -+ -+/* execute firmware command */ -+static int si2168_cmd_execute(struct si2168 *s, struct si2168_cmd *cmd) -+{ -+ int ret; -+ unsigned long timeout; -+ -+ mutex_lock(&s->i2c_mutex); -+ -+ if (cmd->wlen) { -+ /* write cmd and args for firmware */ -+ ret = i2c_master_send(s->client, cmd->args, cmd->wlen); -+ if (ret < 0) { -+ goto err_mutex_unlock; -+ } else if (ret != cmd->wlen) { -+ ret = -EREMOTEIO; -+ goto err_mutex_unlock; -+ } -+ } -+ -+ if (cmd->rlen) { -+ /* wait cmd execution terminate */ -+ #define TIMEOUT 50 -+ timeout = jiffies + msecs_to_jiffies(TIMEOUT); -+ while (!time_after(jiffies, timeout)) { -+ ret = i2c_master_recv(s->client, cmd->args, cmd->rlen); -+ if (ret < 0) { -+ goto err_mutex_unlock; -+ } else if (ret != cmd->rlen) { -+ ret = -EREMOTEIO; -+ goto err_mutex_unlock; -+ } -+ -+ /* firmware ready? */ -+ if ((cmd->args[0] >> 7) & 0x01) -+ break; -+ } -+ -+ dev_dbg(&s->client->dev, "cmd execution took %d ms\n", -+ jiffies_to_msecs(jiffies) - -+ (jiffies_to_msecs(timeout) - TIMEOUT)); -+ -+ if (!((cmd->args[0] >> 7) & 0x01)) { -+ ret = -ETIMEDOUT; -+ goto err_mutex_unlock; -+ } -+ } -+ -+ ret = 0; -+ -+err_mutex_unlock: -+ mutex_unlock(&s->i2c_mutex); -+ if (ret) -+ goto err; -+ -+ return 0; -+err: -+ dev_dbg(&s->client->dev, "failed=%d\n", ret); -+ return ret; -+} -+ -+static int si2168_read_status(struct dvb_frontend *fe, fe_status_t *status) -+{ -+ struct si2168 *s = fe->demodulator_priv; -+ struct dtv_frontend_properties *c = &fe->dtv_property_cache; -+ int ret; -+ struct si2168_cmd cmd; -+ -+ *status = 0; -+ -+ if (!s->active) { -+ ret = -EAGAIN; -+ goto err; -+ } -+ -+ switch (c->delivery_system) { -+ case SYS_DVBT: -+ memcpy(cmd.args, "\xa0\x01", 2); -+ cmd.wlen = 2; -+ cmd.rlen = 13; -+ break; -+ case SYS_DVBC_ANNEX_A: -+ memcpy(cmd.args, "\x90\x01", 2); -+ cmd.wlen = 2; -+ cmd.rlen = 9; -+ break; -+ case SYS_DVBT2: -+ memcpy(cmd.args, "\x50\x01", 2); -+ cmd.wlen = 2; -+ cmd.rlen = 14; -+ break; -+ default: -+ ret = -EINVAL; -+ goto err; -+ } -+ -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ /* -+ * Possible values seen, in order from strong signal to weak: -+ * 16 0001 0110 full lock -+ * 1e 0001 1110 partial lock -+ * 1a 0001 1010 partial lock -+ * 18 0001 1000 no lock -+ * -+ * [b3:b1] lock bits -+ * [b4] statistics ready? Set in a few secs after lock is gained. -+ */ -+ -+ switch ((cmd.args[2] >> 1) & 0x03) { -+ case 0x01: -+ *status = FE_HAS_SIGNAL | FE_HAS_CARRIER; -+ break; -+ case 0x03: -+ *status = FE_HAS_SIGNAL | FE_HAS_CARRIER | FE_HAS_VITERBI | -+ FE_HAS_SYNC | FE_HAS_LOCK; -+ break; -+ } -+ -+ s->fe_status = *status; -+ -+ if (*status & FE_HAS_LOCK) { -+ c->cnr.len = 1; -+ c->cnr.stat[0].scale = FE_SCALE_DECIBEL; -+ c->cnr.stat[0].svalue = cmd.args[3] * 1000 / 4; -+ } else { -+ c->cnr.len = 1; -+ c->cnr.stat[0].scale = FE_SCALE_NOT_AVAILABLE; -+ } -+ -+ dev_dbg(&s->client->dev, "status=%02x args=%*ph\n", -+ *status, cmd.rlen, cmd.args); -+ -+ return 0; -+err: -+ dev_dbg(&s->client->dev, "failed=%d\n", ret); -+ return ret; -+} -+ -+static int si2168_set_frontend(struct dvb_frontend *fe) -+{ -+ struct si2168 *s = fe->demodulator_priv; -+ struct dtv_frontend_properties *c = &fe->dtv_property_cache; -+ int ret; -+ struct si2168_cmd cmd; -+ u8 bandwidth, delivery_system; -+ -+ dev_dbg(&s->client->dev, -+ "delivery_system=%u modulation=%u frequency=%u bandwidth_hz=%u symbol_rate=%u inversion=%u, stream_id=%d\n", -+ c->delivery_system, c->modulation, -+ c->frequency, c->bandwidth_hz, c->symbol_rate, -+ c->inversion, c->stream_id); -+ -+ if (!s->active) { -+ ret = -EAGAIN; -+ goto err; -+ } -+ -+ switch (c->delivery_system) { -+ case SYS_DVBT: -+ delivery_system = 0x20; -+ break; -+ case SYS_DVBC_ANNEX_A: -+ delivery_system = 0x30; -+ break; -+ case SYS_DVBT2: -+ delivery_system = 0x70; -+ break; -+ default: -+ ret = -EINVAL; -+ goto err; -+ } -+ -+ if (c->bandwidth_hz <= 5000000) -+ bandwidth = 0x05; -+ else if (c->bandwidth_hz <= 6000000) -+ bandwidth = 0x06; -+ else if (c->bandwidth_hz <= 7000000) -+ bandwidth = 0x07; -+ else if (c->bandwidth_hz <= 8000000) -+ bandwidth = 0x08; -+ else if (c->bandwidth_hz <= 9000000) -+ bandwidth = 0x09; -+ else if (c->bandwidth_hz <= 10000000) -+ bandwidth = 0x0a; -+ else -+ bandwidth = 0x0f; -+ -+ /* program tuner */ -+ if (fe->ops.tuner_ops.set_params) { -+ ret = fe->ops.tuner_ops.set_params(fe); -+ if (ret) -+ goto err; -+ } -+ -+ memcpy(cmd.args, "\x88\x02\x02\x02\x02", 5); -+ cmd.wlen = 5; -+ cmd.rlen = 5; -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ /* that has no big effect */ -+ if (c->delivery_system == SYS_DVBT) -+ memcpy(cmd.args, "\x89\x21\x06\x11\xff\x98", 6); -+ else if (c->delivery_system == SYS_DVBC_ANNEX_A) -+ memcpy(cmd.args, "\x89\x21\x06\x11\x89\xf0", 6); -+ else if (c->delivery_system == SYS_DVBT2) -+ memcpy(cmd.args, "\x89\x21\x06\x11\x89\x20", 6); -+ cmd.wlen = 6; -+ cmd.rlen = 3; -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ if (c->delivery_system == SYS_DVBT2) { -+ /* select PLP */ -+ cmd.args[0] = 0x52; -+ cmd.args[1] = c->stream_id & 0xff; -+ cmd.args[2] = c->stream_id == NO_STREAM_ID_FILTER ? 0 : 1; -+ cmd.wlen = 3; -+ cmd.rlen = 1; -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ } -+ -+ memcpy(cmd.args, "\x51\x03", 2); -+ cmd.wlen = 2; -+ cmd.rlen = 12; -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ memcpy(cmd.args, "\x12\x08\x04", 3); -+ cmd.wlen = 3; -+ cmd.rlen = 3; -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ memcpy(cmd.args, "\x14\x00\x0c\x10\x12\x00", 6); -+ cmd.wlen = 6; -+ cmd.rlen = 4; -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ memcpy(cmd.args, "\x14\x00\x06\x10\x24\x00", 6); -+ cmd.wlen = 6; -+ cmd.rlen = 4; -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ memcpy(cmd.args, "\x14\x00\x07\x10\x00\x24", 6); -+ cmd.wlen = 6; -+ cmd.rlen = 4; -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ memcpy(cmd.args, "\x14\x00\x0a\x10\x00\x00", 6); -+ cmd.args[4] = delivery_system | bandwidth; -+ cmd.wlen = 6; -+ cmd.rlen = 4; -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ /* set DVB-C symbol rate */ -+ if (c->delivery_system == SYS_DVBC_ANNEX_A) { -+ memcpy(cmd.args, "\x14\x00\x02\x11", 4); -+ cmd.args[4] = (c->symbol_rate / 1000) & 0xff; -+ cmd.args[5] = ((c->symbol_rate / 1000) >> 8) & 0xff; -+ cmd.wlen = 6; -+ cmd.rlen = 4; -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ } -+ -+ memcpy(cmd.args, "\x14\x00\x0f\x10\x10\x00", 6); -+ cmd.wlen = 6; -+ cmd.rlen = 4; -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ memcpy(cmd.args, "\x14\x00\x09\x10\xe3\x08", 6); -+ cmd.args[5] |= s->ts_clock_inv ? 0x00 : 0x10; -+ cmd.wlen = 6; -+ cmd.rlen = 4; -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ memcpy(cmd.args, "\x14\x00\x08\x10\xd7\x05", 6); -+ cmd.args[5] |= s->ts_clock_inv ? 0x00 : 0x10; -+ cmd.wlen = 6; -+ cmd.rlen = 4; -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ memcpy(cmd.args, "\x14\x00\x01\x12\x00\x00", 6); -+ cmd.wlen = 6; -+ cmd.rlen = 4; -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ memcpy(cmd.args, "\x14\x00\x01\x03\x0c\x00", 6); -+ cmd.wlen = 6; -+ cmd.rlen = 4; -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ memcpy(cmd.args, "\x85", 1); -+ cmd.wlen = 1; -+ cmd.rlen = 1; -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ s->delivery_system = c->delivery_system; -+ -+ return 0; -+err: -+ dev_dbg(&s->client->dev, "failed=%d\n", ret); -+ return ret; -+} -+ -+static int si2168_init(struct dvb_frontend *fe) -+{ -+ struct si2168 *s = fe->demodulator_priv; -+ int ret, len, remaining; -+ const struct firmware *fw = NULL; -+ u8 *fw_file; -+ const unsigned int i2c_wr_max = 8; -+ struct si2168_cmd cmd; -+ unsigned int chip_id; -+ -+ dev_dbg(&s->client->dev, "\n"); -+ -+ /* initialize */ -+ memcpy(cmd.args, "\xc0\x12\x00\x0c\x00\x0d\x16\x00\x00\x00\x00\x00\x00", 13); -+ cmd.wlen = 13; -+ cmd.rlen = 0; -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ if (s->fw_loaded) { -+ /* resume */ -+ memcpy(cmd.args, "\xc0\x06\x08\x0f\x00\x20\x21\x01", 8); -+ cmd.wlen = 8; -+ cmd.rlen = 1; -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ memcpy(cmd.args, "\x85", 1); -+ cmd.wlen = 1; -+ cmd.rlen = 1; -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ goto warm; -+ } -+ -+ /* power up */ -+ memcpy(cmd.args, "\xc0\x06\x01\x0f\x00\x20\x20\x01", 8); -+ cmd.wlen = 8; -+ cmd.rlen = 1; -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ /* query chip revision */ -+ memcpy(cmd.args, "\x02", 1); -+ cmd.wlen = 1; -+ cmd.rlen = 13; -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ chip_id = cmd.args[1] << 24 | cmd.args[2] << 16 | cmd.args[3] << 8 | -+ cmd.args[4] << 0; -+ -+ #define SI2168_A20 ('A' << 24 | 68 << 16 | '2' << 8 | '0' << 0) -+ #define SI2168_A30 ('A' << 24 | 68 << 16 | '3' << 8 | '0' << 0) -+ #define SI2168_B40 ('B' << 24 | 68 << 16 | '4' << 8 | '0' << 0) -+ -+ switch (chip_id) { -+ case SI2168_A20: -+ fw_file = SI2168_A20_FIRMWARE; -+ break; -+ case SI2168_A30: -+ fw_file = SI2168_A30_FIRMWARE; -+ break; -+ case SI2168_B40: -+ fw_file = SI2168_B40_FIRMWARE; -+ break; -+ default: -+ dev_err(&s->client->dev, -+ "unknown chip version Si21%d-%c%c%c\n", -+ cmd.args[2], cmd.args[1], -+ cmd.args[3], cmd.args[4]); -+ ret = -EINVAL; -+ goto err; -+ } -+ -+ /* cold state - try to download firmware */ -+ dev_info(&s->client->dev, "found a '%s' in cold state\n", -+ si2168_ops.info.name); -+ -+ /* request the firmware, this will block and timeout */ -+ ret = request_firmware(&fw, fw_file, &s->client->dev); -+ if (ret) { -+ /* fallback mechanism to handle old name for Si2168 B40 fw */ -+ if (chip_id == SI2168_B40) { -+ fw_file = SI2168_B40_FIRMWARE_FALLBACK; -+ ret = request_firmware(&fw, fw_file, &s->client->dev); -+ } -+ -+ if (ret == 0) { -+ dev_notice(&s->client->dev, -+ "please install firmware file '%s'\n", -+ SI2168_B40_FIRMWARE); -+ } else { -+ dev_err(&s->client->dev, -+ "firmware file '%s' not found\n", -+ fw_file); -+ goto error_fw_release; -+ } -+ } -+ -+ dev_info(&s->client->dev, "downloading firmware from file '%s'\n", -+ fw_file); -+ -+ if ((fw->size % 17 == 0) && (fw->data[0] > 5)) { -+ /* firmware is in the new format */ -+ for (remaining = fw->size; remaining > 0; remaining -= 17) { -+ len = fw->data[fw->size - remaining]; -+ memcpy(cmd.args, &fw->data[(fw->size - remaining) + 1], len); -+ cmd.wlen = len; -+ cmd.rlen = 1; -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) { -+ dev_err(&s->client->dev, -+ "firmware download failed=%d\n", -+ ret); -+ goto error_fw_release; -+ } -+ } -+ } else { -+ /* firmware is in the old format */ -+ for (remaining = fw->size; remaining > 0; remaining -= i2c_wr_max) { -+ len = remaining; -+ if (len > i2c_wr_max) -+ len = i2c_wr_max; -+ -+ memcpy(cmd.args, &fw->data[fw->size - remaining], len); -+ cmd.wlen = len; -+ cmd.rlen = 1; -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) { -+ dev_err(&s->client->dev, -+ "firmware download failed=%d\n", -+ ret); -+ goto error_fw_release; -+ } -+ } -+ } -+ -+ release_firmware(fw); -+ fw = NULL; -+ -+ memcpy(cmd.args, "\x01\x01", 2); -+ cmd.wlen = 2; -+ cmd.rlen = 1; -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ /* query firmware version */ -+ memcpy(cmd.args, "\x11", 1); -+ cmd.wlen = 1; -+ cmd.rlen = 10; -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ dev_dbg(&s->client->dev, "firmware version: %c.%c.%d\n", -+ cmd.args[6], cmd.args[7], cmd.args[8]); -+ -+ /* set ts mode */ -+ memcpy(cmd.args, "\x14\x00\x01\x10\x10\x00", 6); -+ cmd.args[4] |= s->ts_mode; -+ cmd.wlen = 6; -+ cmd.rlen = 4; -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ s->fw_loaded = true; -+ -+ dev_info(&s->client->dev, "found a '%s' in warm state\n", -+ si2168_ops.info.name); -+warm: -+ s->active = true; -+ -+ return 0; -+ -+error_fw_release: -+ release_firmware(fw); -+err: -+ dev_dbg(&s->client->dev, "failed=%d\n", ret); -+ return ret; -+} -+ -+static int si2168_sleep(struct dvb_frontend *fe) -+{ -+ struct si2168 *s = fe->demodulator_priv; -+ int ret; -+ struct si2168_cmd cmd; -+ -+ dev_dbg(&s->client->dev, "\n"); -+ -+ s->active = false; -+ -+ memcpy(cmd.args, "\x13", 1); -+ cmd.wlen = 1; -+ cmd.rlen = 0; -+ ret = si2168_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ return 0; -+err: -+ dev_dbg(&s->client->dev, "failed=%d\n", ret); -+ return ret; -+} -+ -+static int si2168_get_tune_settings(struct dvb_frontend *fe, -+ struct dvb_frontend_tune_settings *s) -+{ -+ s->min_delay_ms = 900; -+ -+ return 0; -+} -+ -+/* -+ * I2C gate logic -+ * We must use unlocked i2c_transfer() here because I2C lock is already taken -+ * by tuner driver. -+ */ -+static int si2168_select(struct i2c_adapter *adap, void *mux_priv, u32 chan) -+{ -+ struct si2168 *s = mux_priv; -+ int ret; -+ struct i2c_msg gate_open_msg = { -+ .addr = s->client->addr, -+ .flags = 0, -+ .len = 3, -+ .buf = "\xc0\x0d\x01", -+ }; -+ -+ mutex_lock(&s->i2c_mutex); -+ -+ /* open tuner I2C gate */ -+ ret = __i2c_transfer(s->client->adapter, &gate_open_msg, 1); -+ if (ret != 1) { -+ dev_warn(&s->client->dev, "i2c write failed=%d\n", ret); -+ if (ret >= 0) -+ ret = -EREMOTEIO; -+ } else { -+ ret = 0; -+ } -+ -+ return ret; -+} -+ -+static int si2168_deselect(struct i2c_adapter *adap, void *mux_priv, u32 chan) -+{ -+ struct si2168 *s = mux_priv; -+ int ret; -+ struct i2c_msg gate_close_msg = { -+ .addr = s->client->addr, -+ .flags = 0, -+ .len = 3, -+ .buf = "\xc0\x0d\x00", -+ }; -+ -+ /* close tuner I2C gate */ -+ ret = __i2c_transfer(s->client->adapter, &gate_close_msg, 1); -+ if (ret != 1) { -+ dev_warn(&s->client->dev, "i2c write failed=%d\n", ret); -+ if (ret >= 0) -+ ret = -EREMOTEIO; -+ } else { -+ ret = 0; -+ } -+ -+ mutex_unlock(&s->i2c_mutex); -+ -+ return ret; -+} -+ -+static const struct dvb_frontend_ops si2168_ops = { -+ .delsys = {SYS_DVBT, SYS_DVBT2, SYS_DVBC_ANNEX_A}, -+ .info = { -+ .name = "Silicon Labs Si2168", -+ .caps = FE_CAN_FEC_1_2 | -+ FE_CAN_FEC_2_3 | -+ FE_CAN_FEC_3_4 | -+ FE_CAN_FEC_5_6 | -+ FE_CAN_FEC_7_8 | -+ FE_CAN_FEC_AUTO | -+ FE_CAN_QPSK | -+ FE_CAN_QAM_16 | -+ FE_CAN_QAM_32 | -+ FE_CAN_QAM_64 | -+ FE_CAN_QAM_128 | -+ FE_CAN_QAM_256 | -+ FE_CAN_QAM_AUTO | -+ FE_CAN_TRANSMISSION_MODE_AUTO | -+ FE_CAN_GUARD_INTERVAL_AUTO | -+ FE_CAN_HIERARCHY_AUTO | -+ FE_CAN_MUTE_TS | -+ FE_CAN_2G_MODULATION | -+ FE_CAN_MULTISTREAM -+ }, -+ -+ .get_tune_settings = si2168_get_tune_settings, -+ -+ .init = si2168_init, -+ .sleep = si2168_sleep, -+ -+ .set_frontend = si2168_set_frontend, -+ -+ .read_status = si2168_read_status, -+}; -+ -+static int si2168_probe(struct i2c_client *client, -+ const struct i2c_device_id *id) -+{ -+ struct si2168_config *config = client->dev.platform_data; -+ struct si2168 *s; -+ int ret; -+ -+ dev_dbg(&client->dev, "\n"); -+ -+ s = kzalloc(sizeof(struct si2168), GFP_KERNEL); -+ if (!s) { -+ ret = -ENOMEM; -+ dev_err(&client->dev, "kzalloc() failed\n"); -+ goto err; -+ } -+ -+ s->client = client; -+ mutex_init(&s->i2c_mutex); -+ -+ /* create mux i2c adapter for tuner */ -+ s->adapter = i2c_add_mux_adapter(client->adapter, &client->dev, s, -+ 0, 0, 0, si2168_select, si2168_deselect); -+ if (s->adapter == NULL) { -+ ret = -ENODEV; -+ goto err; -+ } -+ -+ /* create dvb_frontend */ -+ memcpy(&s->fe.ops, &si2168_ops, sizeof(struct dvb_frontend_ops)); -+ s->fe.demodulator_priv = s; -+ -+ *config->i2c_adapter = s->adapter; -+ *config->fe = &s->fe; -+ s->ts_mode = config->ts_mode; -+ s->ts_clock_inv = config->ts_clock_inv; -+ s->fw_loaded = false; -+ -+ i2c_set_clientdata(client, s); -+ -+ dev_info(&s->client->dev, -+ "Silicon Labs Si2168 successfully attached\n"); -+ return 0; -+err: -+ kfree(s); -+ dev_dbg(&client->dev, "failed=%d\n", ret); -+ return ret; -+} -+ -+static int si2168_remove(struct i2c_client *client) -+{ -+ struct si2168 *s = i2c_get_clientdata(client); -+ -+ dev_dbg(&client->dev, "\n"); -+ -+ i2c_del_mux_adapter(s->adapter); -+ -+ s->fe.ops.release = NULL; -+ s->fe.demodulator_priv = NULL; -+ -+ kfree(s); -+ -+ return 0; -+} -+ -+static const struct i2c_device_id si2168_id[] = { -+ {"si2168", 0}, -+ {} -+}; -+MODULE_DEVICE_TABLE(i2c, si2168_id); -+ -+static struct i2c_driver si2168_driver = { -+ .driver = { -+ .owner = THIS_MODULE, -+ .name = "si2168", -+ }, -+ .probe = si2168_probe, -+ .remove = si2168_remove, -+ .id_table = si2168_id, -+}; -+ -+module_i2c_driver(si2168_driver); -+ -+MODULE_AUTHOR("Antti Palosaari "); -+MODULE_DESCRIPTION("Silicon Labs Si2168 DVB-T/T2/C demodulator driver"); -+MODULE_LICENSE("GPL"); -+MODULE_FIRMWARE(SI2168_A20_FIRMWARE); -+MODULE_FIRMWARE(SI2168_A30_FIRMWARE); -+MODULE_FIRMWARE(SI2168_B40_FIRMWARE); -diff -urN a/drivers/media/dvb-frontends/si2168.h b/drivers/media/dvb-frontends/si2168.h ---- a/drivers/media/dvb-frontends/si2168.h 1970-01-01 02:00:00.000000000 +0200 -+++ b/drivers/media/dvb-frontends/si2168.h 2015-03-22 14:17:59.570225151 +0200 -@@ -0,0 +1,49 @@ -+/* -+ * Silicon Labs Si2168 DVB-T/T2/C demodulator driver -+ * -+ * Copyright (C) 2014 Antti Palosaari -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ */ -+ -+#ifndef SI2168_H -+#define SI2168_H -+ -+#include -+/* -+ * I2C address -+ * 0x64 -+ */ -+struct si2168_config { -+ /* -+ * frontend -+ * returned by driver -+ */ -+ struct dvb_frontend **fe; -+ -+ /* -+ * tuner I2C adapter -+ * returned by driver -+ */ -+ struct i2c_adapter **i2c_adapter; -+ -+ /* TS mode */ -+ u8 ts_mode; -+ -+ /* TS clock inverted */ -+ bool ts_clock_inv; -+ -+}; -+ -+#define SI2168_TS_PARALLEL 0x06 -+#define SI2168_TS_SERIAL 0x03 -+ -+#endif -diff -urN a/drivers/media/dvb-frontends/si2168_priv.h b/drivers/media/dvb-frontends/si2168_priv.h ---- a/drivers/media/dvb-frontends/si2168_priv.h 1970-01-01 02:00:00.000000000 +0200 -+++ b/drivers/media/dvb-frontends/si2168_priv.h 2015-03-22 14:17:59.570225151 +0200 -@@ -0,0 +1,52 @@ -+/* -+ * Silicon Labs Si2168 DVB-T/T2/C demodulator driver -+ * -+ * Copyright (C) 2014 Antti Palosaari -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ */ -+ -+#ifndef SI2168_PRIV_H -+#define SI2168_PRIV_H -+ -+#include "si2168.h" -+#include "dvb_frontend.h" -+#include -+#include -+ -+#define SI2168_A20_FIRMWARE "dvb-demod-si2168-a20-01.fw" -+#define SI2168_A30_FIRMWARE "dvb-demod-si2168-a30-01.fw" -+#define SI2168_B40_FIRMWARE "dvb-demod-si2168-b40-01.fw" -+#define SI2168_B40_FIRMWARE_FALLBACK "dvb-demod-si2168-02.fw" -+ -+/* state struct */ -+struct si2168 { -+ struct i2c_client *client; -+ struct i2c_adapter *adapter; -+ struct mutex i2c_mutex; -+ struct dvb_frontend fe; -+ fe_delivery_system_t delivery_system; -+ fe_status_t fe_status; -+ bool active; -+ bool fw_loaded; -+ u8 ts_mode; -+ bool ts_clock_inv; -+}; -+ -+/* firmare command struct */ -+#define SI2168_ARGLEN 30 -+struct si2168_cmd { -+ u8 args[SI2168_ARGLEN]; -+ unsigned wlen; -+ unsigned rlen; -+}; -+ -+#endif -diff -urN a/drivers/media/dvb-frontends/sp2.c b/drivers/media/dvb-frontends/sp2.c ---- a/drivers/media/dvb-frontends/sp2.c 1970-01-01 02:00:00.000000000 +0200 -+++ b/drivers/media/dvb-frontends/sp2.c 2015-03-22 14:17:59.570225151 +0200 -@@ -0,0 +1,444 @@ -+/* -+ * CIMaX SP2/SP2HF (Atmel T90FJR) CI driver -+ * -+ * Copyright (C) 2014 Olli Salonen -+ * -+ * Heavily based on CIMax2(R) SP2 driver in conjunction with NetUp Dual -+ * DVB-S2 CI card (cimax2) with following copyrights: -+ * -+ * Copyright (C) 2009 NetUP Inc. -+ * Copyright (C) 2009 Igor M. Liplianin -+ * Copyright (C) 2009 Abylay Ospan -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ */ -+ -+#include "sp2_priv.h" -+ -+static int sp2_read_i2c(struct sp2 *s, u8 reg, u8 *buf, int len) -+{ -+ int ret; -+ struct i2c_client *client = s->client; -+ struct i2c_adapter *adap = client->adapter; -+ struct i2c_msg msg[] = { -+ { -+ .addr = client->addr, -+ .flags = 0, -+ .buf = ®, -+ .len = 1 -+ }, { -+ .addr = client->addr, -+ .flags = I2C_M_RD, -+ .buf = buf, -+ .len = len -+ } -+ }; -+ -+ ret = i2c_transfer(adap, msg, 2); -+ -+ if (ret != 2) { -+ dev_err(&client->dev, "i2c read error, reg = 0x%02x, status = %d\n", -+ reg, ret); -+ if (ret < 0) -+ return ret; -+ else -+ return -EIO; -+ } -+ -+ dev_dbg(&s->client->dev, "addr=0x%04x, reg = 0x%02x, data = %02x\n", -+ client->addr, reg, buf[0]); -+ -+ return 0; -+} -+ -+static int sp2_write_i2c(struct sp2 *s, u8 reg, u8 *buf, int len) -+{ -+ int ret; -+ u8 buffer[35]; -+ struct i2c_client *client = s->client; -+ struct i2c_adapter *adap = client->adapter; -+ struct i2c_msg msg = { -+ .addr = client->addr, -+ .flags = 0, -+ .buf = &buffer[0], -+ .len = len + 1 -+ }; -+ -+ if ((len + 1) > sizeof(buffer)) { -+ dev_err(&client->dev, "i2c wr reg=%02x: len=%d is too big!\n", -+ reg, len); -+ return -EINVAL; -+ } -+ -+ buffer[0] = reg; -+ memcpy(&buffer[1], buf, len); -+ -+ ret = i2c_transfer(adap, &msg, 1); -+ -+ if (ret != 1) { -+ dev_err(&client->dev, "i2c write error, reg = 0x%02x, status = %d\n", -+ reg, ret); -+ if (ret < 0) -+ return ret; -+ else -+ return -EIO; -+ } -+ -+ dev_dbg(&s->client->dev, "addr=0x%04x, reg = 0x%02x, data = %*ph\n", -+ client->addr, reg, len, buf); -+ -+ return 0; -+} -+ -+static int sp2_ci_op_cam(struct dvb_ca_en50221 *en50221, int slot, u8 acs, -+ u8 read, int addr, u8 data) -+{ -+ struct sp2 *s = en50221->data; -+ u8 store; -+ int mem, ret; -+ int (*ci_op_cam)(void*, u8, int, u8, int*) = s->ci_control; -+ -+ if (slot != 0) -+ return -EINVAL; -+ -+ /* -+ * change module access type between IO space and attribute memory -+ * when needed -+ */ -+ if (s->module_access_type != acs) { -+ ret = sp2_read_i2c(s, 0x00, &store, 1); -+ -+ if (ret) -+ return ret; -+ -+ store &= ~(SP2_MOD_CTL_ACS1 | SP2_MOD_CTL_ACS0); -+ store |= acs; -+ -+ ret = sp2_write_i2c(s, 0x00, &store, 1); -+ if (ret) -+ return ret; -+ } -+ -+ s->module_access_type = acs; -+ -+ /* implementation of ci_op_cam is device specific */ -+ if (ci_op_cam) { -+ ret = ci_op_cam(s->priv, read, addr, data, &mem); -+ } else { -+ dev_err(&s->client->dev, "callback not defined"); -+ return -EINVAL; -+ } -+ -+ if (ret) -+ return ret; -+ -+ dev_dbg(&s->client->dev, "%s: slot=%d, addr=0x%04x, %s, data=%x", -+ (read) ? "read" : "write", slot, addr, -+ (acs == SP2_CI_ATTR_ACS) ? "attr" : "io", -+ (read) ? mem : data); -+ -+ if (read) -+ return mem; -+ else -+ return 0; -+ -+} -+ -+int sp2_ci_read_attribute_mem(struct dvb_ca_en50221 *en50221, -+ int slot, int addr) -+{ -+ return sp2_ci_op_cam(en50221, slot, SP2_CI_ATTR_ACS, -+ SP2_CI_RD, addr, 0); -+} -+ -+int sp2_ci_write_attribute_mem(struct dvb_ca_en50221 *en50221, -+ int slot, int addr, u8 data) -+{ -+ return sp2_ci_op_cam(en50221, slot, SP2_CI_ATTR_ACS, -+ SP2_CI_WR, addr, data); -+} -+ -+int sp2_ci_read_cam_control(struct dvb_ca_en50221 *en50221, -+ int slot, u8 addr) -+{ -+ return sp2_ci_op_cam(en50221, slot, SP2_CI_IO_ACS, -+ SP2_CI_RD, addr, 0); -+} -+ -+int sp2_ci_write_cam_control(struct dvb_ca_en50221 *en50221, -+ int slot, u8 addr, u8 data) -+{ -+ return sp2_ci_op_cam(en50221, slot, SP2_CI_IO_ACS, -+ SP2_CI_WR, addr, data); -+} -+ -+int sp2_ci_slot_reset(struct dvb_ca_en50221 *en50221, int slot) -+{ -+ struct sp2 *s = en50221->data; -+ u8 buf; -+ int ret; -+ -+ dev_dbg(&s->client->dev, "slot: %d\n", slot); -+ -+ if (slot != 0) -+ return -EINVAL; -+ -+ /* RST on */ -+ buf = SP2_MOD_CTL_RST; -+ ret = sp2_write_i2c(s, 0x00, &buf, 1); -+ -+ if (ret) -+ return ret; -+ -+ usleep_range(500, 600); -+ -+ /* RST off */ -+ buf = 0x00; -+ ret = sp2_write_i2c(s, 0x00, &buf, 1); -+ -+ if (ret) -+ return ret; -+ -+ msleep(1000); -+ -+ return 0; -+} -+ -+int sp2_ci_slot_shutdown(struct dvb_ca_en50221 *en50221, int slot) -+{ -+ struct sp2 *s = en50221->data; -+ -+ dev_dbg(&s->client->dev, "slot:%d\n", slot); -+ -+ /* not implemented */ -+ return 0; -+} -+ -+int sp2_ci_slot_ts_enable(struct dvb_ca_en50221 *en50221, int slot) -+{ -+ struct sp2 *s = en50221->data; -+ u8 buf; -+ -+ dev_dbg(&s->client->dev, "slot:%d\n", slot); -+ -+ if (slot != 0) -+ return -EINVAL; -+ -+ sp2_read_i2c(s, 0x00, &buf, 1); -+ -+ /* disable bypass and enable TS */ -+ buf |= (SP2_MOD_CTL_TSOEN | SP2_MOD_CTL_TSIEN); -+ return sp2_write_i2c(s, 0, &buf, 1); -+} -+ -+int sp2_ci_poll_slot_status(struct dvb_ca_en50221 *en50221, -+ int slot, int open) -+{ -+ struct sp2 *s = en50221->data; -+ u8 buf[2]; -+ int ret; -+ -+ dev_dbg(&s->client->dev, "slot:%d open:%d\n", slot, open); -+ -+ /* -+ * CAM module INSERT/REMOVE processing. Slow operation because of i2c -+ * transfers. Throttle read to one per sec. -+ */ -+ if (time_after(jiffies, s->next_status_checked_time)) { -+ ret = sp2_read_i2c(s, 0x00, buf, 1); -+ s->next_status_checked_time = jiffies + msecs_to_jiffies(1000); -+ -+ if (ret) -+ return 0; -+ -+ if (buf[0] & SP2_MOD_CTL_DET) -+ s->status = DVB_CA_EN50221_POLL_CAM_PRESENT | -+ DVB_CA_EN50221_POLL_CAM_READY; -+ else -+ s->status = 0; -+ } -+ -+ return s->status; -+} -+ -+static int sp2_init(struct sp2 *s) -+{ -+ int ret = 0; -+ u8 buf; -+ u8 cimax_init[34] = { -+ 0x00, /* module A control*/ -+ 0x00, /* auto select mask high A */ -+ 0x00, /* auto select mask low A */ -+ 0x00, /* auto select pattern high A */ -+ 0x00, /* auto select pattern low A */ -+ 0x44, /* memory access time A, 600 ns */ -+ 0x00, /* invert input A */ -+ 0x00, /* RFU */ -+ 0x00, /* RFU */ -+ 0x00, /* module B control*/ -+ 0x00, /* auto select mask high B */ -+ 0x00, /* auto select mask low B */ -+ 0x00, /* auto select pattern high B */ -+ 0x00, /* auto select pattern low B */ -+ 0x44, /* memory access time B, 600 ns */ -+ 0x00, /* invert input B */ -+ 0x00, /* RFU */ -+ 0x00, /* RFU */ -+ 0x00, /* auto select mask high Ext */ -+ 0x00, /* auto select mask low Ext */ -+ 0x00, /* auto select pattern high Ext */ -+ 0x00, /* auto select pattern low Ext */ -+ 0x00, /* RFU */ -+ 0x02, /* destination - module A */ -+ 0x01, /* power control reg, VCC power on */ -+ 0x00, /* RFU */ -+ 0x00, /* int status read only */ -+ 0x00, /* Interrupt Mask Register */ -+ 0x05, /* EXTINT=active-high, INT=push-pull */ -+ 0x00, /* USCG1 */ -+ 0x04, /* ack active low */ -+ 0x00, /* LOCK = 0 */ -+ 0x22, /* unknown */ -+ 0x00, /* synchronization? */ -+ }; -+ -+ dev_dbg(&s->client->dev, "\n"); -+ -+ s->ca.owner = THIS_MODULE; -+ s->ca.read_attribute_mem = sp2_ci_read_attribute_mem; -+ s->ca.write_attribute_mem = sp2_ci_write_attribute_mem; -+ s->ca.read_cam_control = sp2_ci_read_cam_control; -+ s->ca.write_cam_control = sp2_ci_write_cam_control; -+ s->ca.slot_reset = sp2_ci_slot_reset; -+ s->ca.slot_shutdown = sp2_ci_slot_shutdown; -+ s->ca.slot_ts_enable = sp2_ci_slot_ts_enable; -+ s->ca.poll_slot_status = sp2_ci_poll_slot_status; -+ s->ca.data = s; -+ s->module_access_type = 0; -+ -+ /* initialize all regs */ -+ ret = sp2_write_i2c(s, 0x00, &cimax_init[0], 34); -+ if (ret) -+ goto err; -+ -+ /* lock registers */ -+ buf = 1; -+ ret = sp2_write_i2c(s, 0x1f, &buf, 1); -+ if (ret) -+ goto err; -+ -+ /* power on slots */ -+ ret = sp2_write_i2c(s, 0x18, &buf, 1); -+ if (ret) -+ goto err; -+ -+ ret = dvb_ca_en50221_init(s->dvb_adap, &s->ca, 0, 1); -+ if (ret) -+ goto err; -+ -+ return 0; -+ -+err: -+ dev_dbg(&s->client->dev, "init failed=%d\n", ret); -+ return ret; -+} -+ -+static int sp2_exit(struct i2c_client *client) -+{ -+ struct sp2 *s; -+ -+ dev_dbg(&client->dev, "\n"); -+ -+ if (client == NULL) -+ return 0; -+ -+ s = i2c_get_clientdata(client); -+ if (s == NULL) -+ return 0; -+ -+ if (s->ca.data == NULL) -+ return 0; -+ -+ dvb_ca_en50221_release(&s->ca); -+ -+ return 0; -+} -+ -+static int sp2_probe(struct i2c_client *client, -+ const struct i2c_device_id *id) -+{ -+ struct sp2_config *cfg = client->dev.platform_data; -+ struct sp2 *s; -+ int ret; -+ -+ dev_dbg(&client->dev, "\n"); -+ -+ s = kzalloc(sizeof(struct sp2), GFP_KERNEL); -+ if (!s) { -+ ret = -ENOMEM; -+ dev_err(&client->dev, "kzalloc() failed\n"); -+ goto err; -+ } -+ -+ s->client = client; -+ s->dvb_adap = cfg->dvb_adap; -+ s->priv = cfg->priv; -+ s->ci_control = cfg->ci_control; -+ -+ i2c_set_clientdata(client, s); -+ -+ ret = sp2_init(s); -+ if (ret) -+ goto err; -+ -+ dev_info(&s->client->dev, "CIMaX SP2 successfully attached\n"); -+ return 0; -+err: -+ dev_dbg(&client->dev, "init failed=%d\n", ret); -+ kfree(s); -+ -+ return ret; -+} -+ -+static int sp2_remove(struct i2c_client *client) -+{ -+ struct sp2 *s = i2c_get_clientdata(client); -+ -+ dev_dbg(&client->dev, "\n"); -+ -+ sp2_exit(client); -+ if (s != NULL) -+ kfree(s); -+ -+ return 0; -+} -+ -+static const struct i2c_device_id sp2_id[] = { -+ {"sp2", 0}, -+ {} -+}; -+MODULE_DEVICE_TABLE(i2c, sp2_id); -+ -+static struct i2c_driver sp2_driver = { -+ .driver = { -+ .owner = THIS_MODULE, -+ .name = "sp2", -+ }, -+ .probe = sp2_probe, -+ .remove = sp2_remove, -+ .id_table = sp2_id, -+}; -+ -+module_i2c_driver(sp2_driver); -+ -+MODULE_DESCRIPTION("CIMaX SP2/HF CI driver"); -+MODULE_AUTHOR("Olli Salonen "); -+MODULE_LICENSE("GPL"); -diff -urN a/drivers/media/dvb-frontends/sp2.h b/drivers/media/dvb-frontends/sp2.h ---- a/drivers/media/dvb-frontends/sp2.h 1970-01-01 02:00:00.000000000 +0200 -+++ b/drivers/media/dvb-frontends/sp2.h 2015-03-22 14:17:59.570225151 +0200 -@@ -0,0 +1,53 @@ -+/* -+ * CIMaX SP2/HF CI driver -+ * -+ * Copyright (C) 2014 Olli Salonen -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ */ -+ -+#ifndef SP2_H -+#define SP2_H -+ -+#include -+#include "dvb_ca_en50221.h" -+ -+/* -+ * I2C address -+ * 0x40 (port 0) -+ * 0x41 (port 1) -+ */ -+struct sp2_config { -+ /* dvb_adapter to attach the ci to */ -+ struct dvb_adapter *dvb_adap; -+ -+ /* function ci_control handles the device specific ci ops */ -+ void *ci_control; -+ -+ /* priv is passed back to function ci_control */ -+ void *priv; -+}; -+ -+extern int sp2_ci_read_attribute_mem(struct dvb_ca_en50221 *en50221, -+ int slot, int addr); -+extern int sp2_ci_write_attribute_mem(struct dvb_ca_en50221 *en50221, -+ int slot, int addr, u8 data); -+extern int sp2_ci_read_cam_control(struct dvb_ca_en50221 *en50221, -+ int slot, u8 addr); -+extern int sp2_ci_write_cam_control(struct dvb_ca_en50221 *en50221, -+ int slot, u8 addr, u8 data); -+extern int sp2_ci_slot_reset(struct dvb_ca_en50221 *en50221, int slot); -+extern int sp2_ci_slot_shutdown(struct dvb_ca_en50221 *en50221, int slot); -+extern int sp2_ci_slot_ts_enable(struct dvb_ca_en50221 *en50221, int slot); -+extern int sp2_ci_poll_slot_status(struct dvb_ca_en50221 *en50221, -+ int slot, int open); -+ -+#endif -diff -urN a/drivers/media/dvb-frontends/sp2_priv.h b/drivers/media/dvb-frontends/sp2_priv.h ---- a/drivers/media/dvb-frontends/sp2_priv.h 1970-01-01 02:00:00.000000000 +0200 -+++ b/drivers/media/dvb-frontends/sp2_priv.h 2015-03-22 14:17:59.570225151 +0200 -@@ -0,0 +1,50 @@ -+/* -+ * CIMaX SP2/HF CI driver -+ * -+ * Copyright (C) 2014 Olli Salonen -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ */ -+ -+#ifndef SP2_PRIV_H -+#define SP2_PRIV_H -+ -+#include "sp2.h" -+#include "dvb_frontend.h" -+ -+/* state struct */ -+struct sp2 { -+ int status; -+ struct i2c_client *client; -+ struct dvb_adapter *dvb_adap; -+ struct dvb_ca_en50221 ca; -+ int module_access_type; -+ unsigned long next_status_checked_time; -+ void *priv; -+ void *ci_control; -+}; -+ -+#define SP2_CI_ATTR_ACS 0x00 -+#define SP2_CI_IO_ACS 0x04 -+#define SP2_CI_WR 0 -+#define SP2_CI_RD 1 -+ -+/* Module control register (0x00 module A, 0x09 module B) bits */ -+#define SP2_MOD_CTL_DET 0x01 -+#define SP2_MOD_CTL_AUTO 0x02 -+#define SP2_MOD_CTL_ACS0 0x04 -+#define SP2_MOD_CTL_ACS1 0x08 -+#define SP2_MOD_CTL_HAD 0x10 -+#define SP2_MOD_CTL_TSIEN 0x20 -+#define SP2_MOD_CTL_TSOEN 0x40 -+#define SP2_MOD_CTL_RST 0x80 -+ -+#endif -diff -urN a/drivers/media/tuners/Kconfig b/drivers/media/tuners/Kconfig ---- a/drivers/media/tuners/Kconfig 2014-11-02 15:07:13.000000000 +0200 -+++ b/drivers/media/tuners/Kconfig 2015-03-22 14:17:59.570225151 +0200 -@@ -242,4 +242,11 @@ - default m if !MEDIA_SUBDRV_AUTOSELECT - help - Rafael Micro R820T silicon tuner driver. -+ -+config MEDIA_TUNER_SI2157 -+ tristate "Silicon Labs Si2157 silicon tuner" -+ depends on MEDIA_SUPPORT && I2C -+ default m if !MEDIA_SUBDRV_AUTOSELECT -+ help -+ Si2157 silicon tuner driver. - endmenu -diff -urN a/drivers/media/tuners/Makefile b/drivers/media/tuners/Makefile ---- a/drivers/media/tuners/Makefile 2014-11-02 15:07:13.000000000 +0200 -+++ b/drivers/media/tuners/Makefile 2015-03-22 14:17:59.570225151 +0200 -@@ -37,6 +37,7 @@ - obj-$(CONFIG_MEDIA_TUNER_FC0013) += fc0013.o - obj-$(CONFIG_MEDIA_TUNER_IT913X) += tuner_it913x.o - obj-$(CONFIG_MEDIA_TUNER_R820T) += r820t.o -+obj-$(CONFIG_MEDIA_TUNER_SI2157) += si2157.o - - ccflags-y += -I$(srctree)/drivers/media/dvb-core - ccflags-y += -I$(srctree)/drivers/media/dvb-frontends -diff -urN a/drivers/media/tuners/si2157.c b/drivers/media/tuners/si2157.c ---- a/drivers/media/tuners/si2157.c 1970-01-01 02:00:00.000000000 +0200 -+++ b/drivers/media/tuners/si2157.c 2015-03-22 14:17:59.574225151 +0200 -@@ -0,0 +1,417 @@ -+/* -+ * Silicon Labs Si2146/2147/2148/2157/2158 silicon tuner driver -+ * -+ * Copyright (C) 2014 Antti Palosaari -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ */ -+ -+#include "si2157_priv.h" -+ -+static const struct dvb_tuner_ops si2157_ops; -+ -+/* execute firmware command */ -+static int si2157_cmd_execute(struct si2157 *s, struct si2157_cmd *cmd) -+{ -+ int ret; -+ unsigned long timeout; -+ -+ mutex_lock(&s->i2c_mutex); -+ -+ if (cmd->wlen) { -+ /* write cmd and args for firmware */ -+ ret = i2c_master_send(s->client, cmd->args, cmd->wlen); -+ if (ret < 0) { -+ goto err_mutex_unlock; -+ } else if (ret != cmd->wlen) { -+ ret = -EREMOTEIO; -+ goto err_mutex_unlock; -+ } -+ } -+ -+ if (cmd->rlen) { -+ /* wait cmd execution terminate */ -+ #define TIMEOUT 80 -+ timeout = jiffies + msecs_to_jiffies(TIMEOUT); -+ while (!time_after(jiffies, timeout)) { -+ ret = i2c_master_recv(s->client, cmd->args, cmd->rlen); -+ if (ret < 0) { -+ goto err_mutex_unlock; -+ } else if (ret != cmd->rlen) { -+ ret = -EREMOTEIO; -+ goto err_mutex_unlock; -+ } -+ -+ /* firmware ready? */ -+ if ((cmd->args[0] >> 7) & 0x01) -+ break; -+ } -+ -+ dev_dbg(&s->client->dev, "cmd execution took %d ms\n", -+ jiffies_to_msecs(jiffies) - -+ (jiffies_to_msecs(timeout) - TIMEOUT)); -+ -+ if (!((cmd->args[0] >> 7) & 0x01)) { -+ ret = -ETIMEDOUT; -+ goto err_mutex_unlock; -+ } -+ } -+ -+ ret = 0; -+ -+err_mutex_unlock: -+ mutex_unlock(&s->i2c_mutex); -+ if (ret) -+ goto err; -+ -+ return 0; -+err: -+ dev_dbg(&s->client->dev, "failed=%d\n", ret); -+ return ret; -+} -+ -+static int si2157_init(struct dvb_frontend *fe) -+{ -+ struct si2157 *s = fe->tuner_priv; -+ int ret, len, remaining; -+ struct si2157_cmd cmd; -+ const struct firmware *fw = NULL; -+ u8 *fw_file; -+ unsigned int chip_id; -+ -+ dev_dbg(&s->client->dev, "\n"); -+ -+ if (s->fw_loaded) -+ goto warm; -+ -+ /* power up */ -+ if (s->chiptype == SI2157_CHIPTYPE_SI2146) { -+ memcpy(cmd.args, "\xc0\x05\x01\x00\x00\x0b\x00\x00\x01", 9); -+ cmd.wlen = 9; -+ } else { -+ memcpy(cmd.args, "\xc0\x00\x0c\x00\x00\x01\x01\x01\x01\x01\x01\x02\x00\x00\x01", 15); -+ cmd.wlen = 15; -+ } -+ cmd.rlen = 1; -+ ret = si2157_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ /* query chip revision */ -+ memcpy(cmd.args, "\x02", 1); -+ cmd.wlen = 1; -+ cmd.rlen = 13; -+ ret = si2157_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ chip_id = cmd.args[1] << 24 | cmd.args[2] << 16 | cmd.args[3] << 8 | -+ cmd.args[4] << 0; -+ -+ #define SI2158_A20 ('A' << 24 | 58 << 16 | '2' << 8 | '0' << 0) -+ #define SI2148_A20 ('A' << 24 | 48 << 16 | '2' << 8 | '0' << 0) -+ #define SI2157_A30 ('A' << 24 | 57 << 16 | '3' << 8 | '0' << 0) -+ #define SI2147_A30 ('A' << 24 | 47 << 16 | '3' << 8 | '0' << 0) -+ #define SI2146_A10 ('A' << 24 | 46 << 16 | '1' << 8 | '0' << 0) -+ -+ switch (chip_id) { -+ case SI2158_A20: -+ case SI2148_A20: -+ fw_file = SI2158_A20_FIRMWARE; -+ break; -+ case SI2157_A30: -+ case SI2147_A30: -+ case SI2146_A10: -+ goto skip_fw_download; -+ default: -+ dev_err(&s->client->dev, -+ "unknown chip version Si21%d-%c%c%c\n", -+ cmd.args[2], cmd.args[1], -+ cmd.args[3], cmd.args[4]); -+ ret = -EINVAL; -+ goto err; -+ } -+ -+ /* cold state - try to download firmware */ -+ dev_info(&s->client->dev, "found a '%s' in cold state\n", -+ si2157_ops.info.name); -+ -+ /* request the firmware, this will block and timeout */ -+ ret = request_firmware(&fw, fw_file, &s->client->dev); -+ if (ret) { -+ dev_err(&s->client->dev, "firmware file '%s' not found\n", -+ fw_file); -+ goto err; -+ } -+ -+ /* firmware should be n chunks of 17 bytes */ -+ if (fw->size % 17 != 0) { -+ dev_err(&s->client->dev, "firmware file '%s' is invalid\n", -+ fw_file); -+ ret = -EINVAL; -+ goto fw_release_exit; -+ } -+ -+ dev_info(&s->client->dev, "downloading firmware from file '%s'\n", -+ fw_file); -+ -+ for (remaining = fw->size; remaining > 0; remaining -= 17) { -+ len = fw->data[fw->size - remaining]; -+ memcpy(cmd.args, &fw->data[(fw->size - remaining) + 1], len); -+ cmd.wlen = len; -+ cmd.rlen = 1; -+ ret = si2157_cmd_execute(s, &cmd); -+ if (ret) { -+ dev_err(&s->client->dev, -+ "firmware download failed=%d\n", -+ ret); -+ goto fw_release_exit; -+ } -+ } -+ -+ release_firmware(fw); -+ fw = NULL; -+ -+skip_fw_download: -+ /* reboot the tuner with new firmware? */ -+ memcpy(cmd.args, "\x01\x01", 2); -+ cmd.wlen = 2; -+ cmd.rlen = 1; -+ ret = si2157_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ s->fw_loaded = true; -+ -+warm: -+ s->active = true; -+ return 0; -+ -+fw_release_exit: -+ release_firmware(fw); -+err: -+ dev_dbg(&s->client->dev, "failed=%d\n", ret); -+ return ret; -+} -+ -+static int si2157_sleep(struct dvb_frontend *fe) -+{ -+ struct si2157 *s = fe->tuner_priv; -+ int ret; -+ struct si2157_cmd cmd; -+ -+ dev_dbg(&s->client->dev, "\n"); -+ -+ s->active = false; -+ -+ /* standby */ -+ memcpy(cmd.args, "\x16\x00", 2); -+ cmd.wlen = 2; -+ cmd.rlen = 1; -+ ret = si2157_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ return 0; -+err: -+ dev_dbg(&s->client->dev, "failed=%d\n", ret); -+ return ret; -+} -+ -+static int si2157_set_params(struct dvb_frontend *fe) -+{ -+ struct si2157 *s = fe->tuner_priv; -+ struct dtv_frontend_properties *c = &fe->dtv_property_cache; -+ int ret; -+ struct si2157_cmd cmd; -+ u8 bandwidth, delivery_system; -+ -+ dev_dbg(&s->client->dev, -+ "delivery_system=%d frequency=%u bandwidth_hz=%u\n", -+ c->delivery_system, c->frequency, -+ c->bandwidth_hz); -+ -+ if (!s->active) { -+ ret = -EAGAIN; -+ goto err; -+ } -+ -+ if (c->bandwidth_hz <= 6000000) -+ bandwidth = 0x06; -+ else if (c->bandwidth_hz <= 7000000) -+ bandwidth = 0x07; -+ else if (c->bandwidth_hz <= 8000000) -+ bandwidth = 0x08; -+ else -+ bandwidth = 0x0f; -+ -+ switch (c->delivery_system) { -+ case SYS_ATSC: -+ delivery_system = 0x00; -+ break; -+ case SYS_DVBC_ANNEX_B: -+ delivery_system = 0x10; -+ break; -+ case SYS_DVBT: -+ case SYS_DVBT2: /* it seems DVB-T and DVB-T2 both are 0x20 here */ -+ delivery_system = 0x20; -+ break; -+ case SYS_DVBC_ANNEX_A: -+ delivery_system = 0x30; -+ break; -+ default: -+ ret = -EINVAL; -+ goto err; -+ } -+ -+ memcpy(cmd.args, "\x14\x00\x03\x07\x00\x00", 6); -+ cmd.args[4] = delivery_system | bandwidth; -+ if (s->inversion) -+ cmd.args[5] = 0x01; -+ cmd.wlen = 6; -+ cmd.rlen = 4; -+ ret = si2157_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ if (s->chiptype == SI2157_CHIPTYPE_SI2146) -+ memcpy(cmd.args, "\x14\x00\x02\x07\x00\x01", 6); -+ else -+ memcpy(cmd.args, "\x14\x00\x02\x07\x01\x00", 6); -+ cmd.wlen = 6; -+ cmd.rlen = 4; -+ ret = si2157_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ /* set frequency */ -+ memcpy(cmd.args, "\x41\x00\x00\x00\x00\x00\x00\x00", 8); -+ cmd.args[4] = (c->frequency >> 0) & 0xff; -+ cmd.args[5] = (c->frequency >> 8) & 0xff; -+ cmd.args[6] = (c->frequency >> 16) & 0xff; -+ cmd.args[7] = (c->frequency >> 24) & 0xff; -+ cmd.wlen = 8; -+ cmd.rlen = 1; -+ ret = si2157_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ return 0; -+err: -+ dev_dbg(&s->client->dev, "failed=%d\n", ret); -+ return ret; -+} -+ -+static int si2157_get_if_frequency(struct dvb_frontend *fe, u32 *frequency) -+{ -+ *frequency = 5000000; /* default value of property 0x0706 */ -+ return 0; -+} -+ -+static const struct dvb_tuner_ops si2157_ops = { -+ .info = { -+ .name = "Silicon Labs Si2146/2147/2148/2157/2158", -+ .frequency_min = 110000000, -+ .frequency_max = 862000000, -+ }, -+ -+ .init = si2157_init, -+ .sleep = si2157_sleep, -+ .set_params = si2157_set_params, -+ .get_if_frequency = si2157_get_if_frequency, -+}; -+ -+static int si2157_probe(struct i2c_client *client, -+ const struct i2c_device_id *id) -+{ -+ struct si2157_config *cfg = client->dev.platform_data; -+ struct dvb_frontend *fe = cfg->fe; -+ struct si2157 *s; -+ struct si2157_cmd cmd; -+ int ret; -+ -+ s = kzalloc(sizeof(struct si2157), GFP_KERNEL); -+ if (!s) { -+ ret = -ENOMEM; -+ dev_err(&client->dev, "kzalloc() failed\n"); -+ goto err; -+ } -+ -+ s->client = client; -+ s->fe = cfg->fe; -+ s->inversion = cfg->inversion; -+ s->fw_loaded = false; -+ s->chiptype = (u8)id->driver_data; -+ mutex_init(&s->i2c_mutex); -+ -+ /* check if the tuner is there */ -+ cmd.wlen = 0; -+ cmd.rlen = 1; -+ ret = si2157_cmd_execute(s, &cmd); -+ if (ret) -+ goto err; -+ -+ fe->tuner_priv = s; -+ memcpy(&fe->ops.tuner_ops, &si2157_ops, -+ sizeof(struct dvb_tuner_ops)); -+ -+ i2c_set_clientdata(client, s); -+ -+ dev_info(&s->client->dev, -+ "Silicon Labs %s successfully attached\n", -+ s->chiptype == SI2157_CHIPTYPE_SI2146 ? -+ "Si2146" : "Si2147/2148/2157/2158"); -+ -+ return 0; -+err: -+ dev_dbg(&client->dev, "failed=%d\n", ret); -+ kfree(s); -+ -+ return ret; -+} -+ -+static int si2157_remove(struct i2c_client *client) -+{ -+ struct si2157 *s = i2c_get_clientdata(client); -+ struct dvb_frontend *fe = s->fe; -+ -+ dev_dbg(&client->dev, "\n"); -+ -+ memset(&fe->ops.tuner_ops, 0, sizeof(struct dvb_tuner_ops)); -+ fe->tuner_priv = NULL; -+ kfree(s); -+ -+ return 0; -+} -+ -+static const struct i2c_device_id si2157_id[] = { -+ {"si2157", 0}, -+ {"si2146", 1}, -+ {} -+}; -+MODULE_DEVICE_TABLE(i2c, si2157_id); -+ -+static struct i2c_driver si2157_driver = { -+ .driver = { -+ .owner = THIS_MODULE, -+ .name = "si2157", -+ }, -+ .probe = si2157_probe, -+ .remove = si2157_remove, -+ .id_table = si2157_id, -+}; -+ -+module_i2c_driver(si2157_driver); -+ -+MODULE_DESCRIPTION("Silicon Labs Si2146/2147/2148/2157/2158 silicon tuner driver"); -+MODULE_AUTHOR("Antti Palosaari "); -+MODULE_LICENSE("GPL"); -+MODULE_FIRMWARE(SI2158_A20_FIRMWARE); -diff -urN a/drivers/media/tuners/si2157.h b/drivers/media/tuners/si2157.h ---- a/drivers/media/tuners/si2157.h 1970-01-01 02:00:00.000000000 +0200 -+++ b/drivers/media/tuners/si2157.h 2015-03-22 14:17:59.574225151 +0200 -@@ -0,0 +1,39 @@ -+/* -+ * Silicon Labs Si2146/2147/2148/2157/2158 silicon tuner driver -+ * -+ * Copyright (C) 2014 Antti Palosaari -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ */ -+ -+#ifndef SI2157_H -+#define SI2157_H -+ -+#include -+#include "dvb_frontend.h" -+ -+/* -+ * I2C address -+ * 0x60 -+ */ -+struct si2157_config { -+ /* -+ * frontend -+ */ -+ struct dvb_frontend *fe; -+ -+ /* -+ * Spectral Inversion -+ */ -+ bool inversion; -+}; -+ -+#endif -diff -urN a/drivers/media/tuners/si2157_priv.h b/drivers/media/tuners/si2157_priv.h ---- a/drivers/media/tuners/si2157_priv.h 1970-01-01 02:00:00.000000000 +0200 -+++ b/drivers/media/tuners/si2157_priv.h 2015-03-22 14:17:59.574225151 +0200 -@@ -0,0 +1,47 @@ -+/* -+ * Silicon Labs Si2146/2147/2148/2157/2158 silicon tuner driver -+ * -+ * Copyright (C) 2014 Antti Palosaari -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ */ -+ -+#ifndef SI2157_PRIV_H -+#define SI2157_PRIV_H -+ -+#include -+#include "si2157.h" -+ -+/* state struct */ -+struct si2157 { -+ struct mutex i2c_mutex; -+ struct i2c_client *client; -+ struct dvb_frontend *fe; -+ bool active; -+ bool fw_loaded; -+ bool inversion; -+ u8 chiptype; -+}; -+ -+#define SI2157_CHIPTYPE_SI2157 0 -+#define SI2157_CHIPTYPE_SI2146 1 -+ -+/* firmware command struct */ -+#define SI2157_ARGLEN 30 -+struct si2157_cmd { -+ u8 args[SI2157_ARGLEN]; -+ unsigned wlen; -+ unsigned rlen; -+}; -+ -+#define SI2158_A20_FIRMWARE "dvb-tuner-si2158-a20-01.fw" -+ -+#endif -diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2/dvbsky.c ---- a/drivers/media/usb/dvb-usb-v2/dvbsky.c 2015-03-22 14:16:43.000000000 +0200 -+++ b/drivers/media/usb/dvb-usb-v2/dvbsky.c 2015-03-22 14:17:59.574225151 +0200 -@@ -3,12 +3,6 @@ - * - * Copyright (C) 2013 Max nibble - * -- * CIMax code is copied and modified from: -- * CIMax2(R) SP2 driver in conjunction with NetUp Dual DVB-S2 CI card -- * Copyright (C) 2009 NetUP Inc. -- * Copyright (C) 2009 Igor M. Liplianin -- * Copyright (C) 2009 Abylay Ospan -- * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or -@@ -24,368 +18,95 @@ - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - --#include "dvb_ca_en50221.h" - #include "dvb_usb.h" --#include "dvbsky_m88ds3103.h" -- --static int dvbsky_debug; --module_param(dvbsky_debug, int, 0644); --MODULE_PARM_DESC(dvbsky_debug, "Activates dvbsky usb debugging (default:0)"); -- --#define DVBSKY_CI_CTL 0x04 --#define DVBSKY_CI_RD 1 -- --#define dprintk(args...) \ -- do { \ -- if (dvbsky_debug) \ -- printk(KERN_INFO "dvbsky_usb: " args); \ -- } while (0) -+#include "m88ds3103.h" -+#include "m88ts2022.h" -+#include "sp2.h" -+#include "si2168.h" -+#include "si2157.h" -+ -+#define DVBSKY_MSG_DELAY 0/*2000*/ -+#define DVBSKY_BUF_LEN 64 -+ -+static int dvb_usb_dvbsky_disable_rc; -+module_param_named(disable_rc, dvb_usb_dvbsky_disable_rc, int, 0644); -+MODULE_PARM_DESC(disable_rc, "Disable inbuilt IR receiver."); - - DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); - - struct dvbsky_state { - struct mutex stream_mutex; -- u8 has_ci; -- u8 ci_attached; -- struct dvb_ca_en50221 ci; -- unsigned long next_status_checked_time; -- u8 ci_i2c_addr; -- u8 current_ci_flag; -- int ci_status; -+ u8 ibuf[DVBSKY_BUF_LEN]; -+ u8 obuf[DVBSKY_BUF_LEN]; -+ u8 last_lock; -+ struct i2c_client *i2c_client_demod; -+ struct i2c_client *i2c_client_tuner; -+ struct i2c_client *i2c_client_ci; -+ -+ /* fe hook functions*/ -+ int (*fe_set_voltage)(struct dvb_frontend *fe, -+ fe_sec_voltage_t voltage); -+ int (*fe_read_status)(struct dvb_frontend *fe, -+ fe_status_t *status); - }; - --static int dvbsky_stream_ctrl(struct dvb_usb_device *d, u8 onoff) --{ -- struct dvbsky_state *state = d_to_priv(d); -- int ret; -- u8 obuf_pre[3] = { 0x37, 0, 0 }; -- u8 obuf_post[3] = { 0x36, 3, 0 }; -- dprintk("%s() -off \n", __func__); -- mutex_lock(&state->stream_mutex); -- ret = dvb_usbv2_generic_write(d, obuf_pre, 3); -- if (!ret && onoff) { -- msleep(10); -- ret = dvb_usbv2_generic_write(d, obuf_post, 3); -- dprintk("%s() -on \n", __func__); -- } -- mutex_unlock(&state->stream_mutex); -- return ret; --} -- --/* CI opertaions */ --static int dvbsky_ci_read_i2c(struct i2c_adapter *i2c_adap, u8 addr, u8 reg, -- u8 *buf, int len) -+static int dvbsky_usb_generic_rw(struct dvb_usb_device *d, -+ u8 *wbuf, u16 wlen, u8 *rbuf, u16 rlen) - { - int ret; -- struct i2c_msg msg[] = { -- { -- .addr = addr, -- .flags = 0, -- .buf = ®, -- .len = 1 -- }, { -- .addr = addr, -- .flags = I2C_M_RD, -- .buf = buf, -- .len = len -- } -- }; -- -- ret = i2c_transfer(i2c_adap, msg, 2); -- -- if (ret != 2) { -- dprintk("%s: error, Reg = 0x%02x, Status = %d\n", __func__, reg, ret); -- return -1; -- } -- return 0; --} -- --static int dvbsky_ci_write_i2c(struct i2c_adapter *i2c_adap, u8 addr, u8 reg, -- u8 *buf, int len) --{ -- int ret; -- u8 buffer[len + 1]; -- -- struct i2c_msg msg = { -- .addr = addr, -- .flags = 0, -- .buf = &buffer[0], -- .len = len + 1 -- }; -- -- buffer[0] = reg; -- memcpy(&buffer[1], buf, len); -- -- ret = i2c_transfer(i2c_adap, &msg, 1); -- -- if (ret != 1) { -- dprintk("%s: error, Reg=[0x%02x], Status=%d\n", __func__, reg, ret); -- return -1; -- } -- return 0; --} -- --static int dvbsky_ci_op_cam(struct dvb_ca_en50221 *ci, int slot, -- u8 flag, u8 read, int addr, u8 data) --{ -- struct dvb_usb_device *d = ci->data; -- struct dvbsky_state *state = d_to_priv(d); -- u8 store; -- int ret; -- u8 command[4], respond[2], command_size, respond_size; -- -- /*dprintk("%s()\n", __func__);*/ -- if (0 != slot) -- return -EINVAL; -- -- if (state->current_ci_flag != flag) { -- ret = dvbsky_ci_read_i2c(&d->i2c_adap, state->ci_i2c_addr, -- 0, &store, 1); -- if (ret != 0) -- return ret; -- -- store &= ~0x0c; -- store |= flag; -- -- ret = dvbsky_ci_write_i2c(&d->i2c_adap, state->ci_i2c_addr, -- 0, &store, 1); -- if (ret != 0) -- return ret; -- } -- state->current_ci_flag = flag; -- -- command[1] = (u8)((addr >> 8) & 0xff); /*high part of address*/ -- command[2] = (u8)(addr & 0xff); /*low part of address*/ -- if (read) { -- command[0] = 0x71; -- command_size = 3; -- respond_size = 2; -- } else { -- command[0] = 0x70; -- command[3] = data; -- command_size = 4; -- respond_size = 1; -- } -- ret = dvb_usbv2_generic_rw(d, command, command_size, respond, respond_size); -- -- return (read) ? respond[1] : 0; --} -- --static int dvbsky_ci_read_attribute_mem(struct dvb_ca_en50221 *ci, -- int slot, int addr) --{ -- return dvbsky_ci_op_cam(ci, slot, 0, DVBSKY_CI_RD, addr, 0); --} -- --static int dvbsky_ci_write_attribute_mem(struct dvb_ca_en50221 *ci, -- int slot, int addr, u8 data) --{ -- return dvbsky_ci_op_cam(ci, slot, 0, 0, addr, data); --} -- --static int dvbsky_ci_read_cam_ctl(struct dvb_ca_en50221 *ci, int slot, u8 addr) --{ -- return dvbsky_ci_op_cam(ci, slot, DVBSKY_CI_CTL, DVBSKY_CI_RD, addr, 0); --} -- --static int dvbsky_ci_write_cam_ctl(struct dvb_ca_en50221 *ci, int slot, -- u8 addr, u8 data) --{ -- return dvbsky_ci_op_cam(ci, slot, DVBSKY_CI_CTL, 0, addr, data); --} -- --static int dvbsky_ci_slot_reset(struct dvb_ca_en50221 *ci, int slot) --{ -- struct dvb_usb_device *d = ci->data; - struct dvbsky_state *state = d_to_priv(d); -- u8 buf = 0x80; -- int ret; -- dprintk("%s() slot=%d\n", __func__, slot); -- -- if (0 != slot) -- return -EINVAL; -- -- udelay(500); -- ret = dvbsky_ci_write_i2c(&d->i2c_adap, state->ci_i2c_addr, -- 0, &buf, 1); -- -- if (ret != 0) -- return ret; -- -- udelay(500); -- -- buf = 0x00; -- ret = dvbsky_ci_write_i2c(&d->i2c_adap, state->ci_i2c_addr, -- 0, &buf, 1); -- msleep(1000); -- dprintk("%s() slot=%d complete\n", __func__, slot); -- return 0; - --} -- --static int dvbsky_ci_slot_shutdown(struct dvb_ca_en50221 *ci, int slot) --{ -- /* not implemented */ -- dprintk("%s()\n", __func__); -- return 0; --} -+ mutex_lock(&d->usb_mutex); -+ if (wlen != 0) -+ memcpy(state->obuf, wbuf, wlen); - --static int dvbsky_ci_slot_ts_enable(struct dvb_ca_en50221 *ci, int slot) --{ -- struct dvb_usb_device *d = ci->data; -- struct dvbsky_state *state = d_to_priv(d); -- u8 buf; -- int ret; -+ ret = dvb_usbv2_generic_rw_locked(d, state->obuf, wlen, -+ state->ibuf, rlen); - -- dprintk("%s()\n", __func__); -- if (0 != slot) -- return -EINVAL; -+ if (!ret && (rlen != 0)) -+ memcpy(rbuf, state->ibuf, rlen); - -- dvbsky_ci_read_i2c(&d->i2c_adap, state->ci_i2c_addr, -- 0, &buf, 1); -- buf |= 0x60; -- -- ret = dvbsky_ci_write_i2c(&d->i2c_adap, state->ci_i2c_addr, -- 0, &buf, 1); -+ mutex_unlock(&d->usb_mutex); - return ret; - } - --static int dvbsky_ci_poll_slot_status(struct dvb_ca_en50221 *ci, int slot, -- int open) --{ -- struct dvb_usb_device *d = ci->data; -- struct dvbsky_state *state = d_to_priv(d); -- int ret = 0; -- u8 buf = 0; -- /*dprintk("%s()\n", __func__);*/ -- -- /* CAM module INSERT/REMOVE processing. slow operation because of i2c -- * transfers */ -- if (time_after(jiffies, state->next_status_checked_time)) { -- ret = dvbsky_ci_read_i2c(&d->i2c_adap, state->ci_i2c_addr, -- 0, &buf, 1); -- -- /*dprintk("%s() status=%x\n", __func__, buf);*/ -- -- state->next_status_checked_time = jiffies -- + msecs_to_jiffies(1000); -- -- if (ret != 0) -- return 0; -- -- if (buf & 1) { -- state->ci_status = DVB_CA_EN50221_POLL_CAM_PRESENT | -- DVB_CA_EN50221_POLL_CAM_READY; -- } -- else -- state->ci_status = 0; -- } -- /*dprintk("%s() ret=%x\n", __func__, state->ci_status);*/ -- return state->ci_status; --} -- --static int dvbsky_ci_init(struct dvb_usb_device *d) -+static int dvbsky_stream_ctrl(struct dvb_usb_device *d, u8 onoff) - { - struct dvbsky_state *state = d_to_priv(d); - int ret; -- u8 cimax_init[34] = { -- 0x00, /* module A control*/ -- 0x00, /* auto select mask high A */ -- 0x00, /* auto select mask low A */ -- 0x00, /* auto select pattern high A */ -- 0x00, /* auto select pattern low A */ -- 0x44, /* memory access time A */ -- 0x00, /* invert input A */ -- 0x00, /* RFU */ -- 0x00, /* RFU */ -- 0x00, /* module B control*/ -- 0x00, /* auto select mask high B */ -- 0x00, /* auto select mask low B */ -- 0x00, /* auto select pattern high B */ -- 0x00, /* auto select pattern low B */ -- 0x44, /* memory access time B */ -- 0x00, /* invert input B */ -- 0x00, /* RFU */ -- 0x00, /* RFU */ -- 0x00, /* auto select mask high Ext */ -- 0x00, /* auto select mask low Ext */ -- 0x00, /* auto select pattern high Ext */ -- 0x00, /* auto select pattern low Ext */ -- 0x00, /* RFU */ -- 0x02, /* destination - module A */ -- 0x01, /* power on (use it like store place) */ -- 0x00, /* RFU */ -- 0x00, /* int status read only */ -- 0x00, /* Max: Disable the interrupt in USB solution.*/ -- 0x05, /* EXTINT=active-high, INT=push-pull */ -- 0x00, /* USCG1 */ -- 0x04, /* ack active low */ -- 0x00, /* LOCK = 0 */ -- 0x22, /* serial mode, rising in, rising out, MSB first*/ -- 0x00 /* synchronization */ -- }; -- dprintk("%s()\n", __func__); -- state->current_ci_flag = 0xff; -- state->ci_status = 0; -- state->next_status_checked_time = jiffies + msecs_to_jiffies(1000); -- state->ci_i2c_addr = 0x40; -- -- state->ci.owner = THIS_MODULE; -- state->ci.read_attribute_mem = dvbsky_ci_read_attribute_mem; -- state->ci.write_attribute_mem = dvbsky_ci_write_attribute_mem; -- state->ci.read_cam_control = dvbsky_ci_read_cam_ctl; -- state->ci.write_cam_control = dvbsky_ci_write_cam_ctl; -- state->ci.slot_reset = dvbsky_ci_slot_reset; -- state->ci.slot_shutdown = dvbsky_ci_slot_shutdown; -- state->ci.slot_ts_enable = dvbsky_ci_slot_ts_enable; -- state->ci.poll_slot_status = dvbsky_ci_poll_slot_status; -- state->ci.data = d; -- -- ret = dvbsky_ci_write_i2c(&d->i2c_adap, state->ci_i2c_addr, -- 0, &cimax_init[0], 34); -- /* lock registers */ -- ret |= dvbsky_ci_write_i2c(&d->i2c_adap, state->ci_i2c_addr, -- 0x1f, &cimax_init[0x18], 1); -- /* power on slots */ -- ret |= dvbsky_ci_write_i2c(&d->i2c_adap, state->ci_i2c_addr, -- 0x18, &cimax_init[0x18], 1); -- if (0 != ret) -- return ret; -- -- ret = dvb_ca_en50221_init(&d->adapter[0].dvb_adap, &state->ci, 0, 1); -- if (ret) -- return ret; -- state->ci_attached = 1; -- dprintk("%s() complete.\n", __func__); -- return 0; --} -- --static void dvbsky_ci_release(struct dvb_usb_device *d) --{ -- struct dvbsky_state *state = d_to_priv(d); -- -- /* detach CI */ -- if (state->ci_attached) -- dvb_ca_en50221_release(&state->ci); -+ u8 obuf_pre[3] = { 0x37, 0, 0 }; -+ u8 obuf_post[3] = { 0x36, 3, 0 }; - -- return; -+ mutex_lock(&state->stream_mutex); -+ ret = dvbsky_usb_generic_rw(d, obuf_pre, 3, NULL, 0); -+ if (!ret && onoff) { -+ msleep(20); -+ ret = dvbsky_usb_generic_rw(d, obuf_post, 3, NULL, 0); -+ } -+ mutex_unlock(&state->stream_mutex); -+ return ret; - } - - static int dvbsky_streaming_ctrl(struct dvb_frontend *fe, int onoff) - { - struct dvb_usb_device *d = fe_to_d(fe); -- /*dprintk("%s() %d\n", __func__, onoff);*/ -+ - return dvbsky_stream_ctrl(d, (onoff == 0) ? 0 : 1); - } - - /* GPIO */ - static int dvbsky_gpio_ctrl(struct dvb_usb_device *d, u8 gport, u8 value) - { -- u8 obuf[64], ibuf[64]; -+ int ret; -+ u8 obuf[3], ibuf[2]; -+ - obuf[0] = 0x0e; - obuf[1] = gport; - obuf[2] = value; -- return dvb_usbv2_generic_rw(d, obuf, 3, ibuf, 1); -+ ret = dvbsky_usb_generic_rw(d, obuf, 3, ibuf, 1); -+ if (ret) -+ dev_err(&d->udev->dev, "failed=%d\n", ret); -+ return ret; - } - - /* I2C */ -@@ -394,20 +115,23 @@ - { - struct dvb_usb_device *d = i2c_get_adapdata(adap); - int ret = 0; -- u8 ibuf[64], obuf[64]; -+ u8 ibuf[64], obuf[64]; - - if (mutex_lock_interruptible(&d->i2c_mutex) < 0) - return -EAGAIN; - - if (num > 2) { -- printk(KERN_ERR "dvbsky_usb: too many i2c messages[%d] than 2.", num); -+ dev_err(&d->udev->dev, -+ "too many i2c messages[%d], max 2.", num); - ret = -EOPNOTSUPP; - goto i2c_error; - } -- -- if(num == 1) { -+ -+ if (num == 1) { - if (msg[0].len > 60) { -- printk(KERN_ERR "dvbsky_usb: too many i2c bytes[%d] than 60.", msg[0].len); -+ dev_err(&d->udev->dev, -+ "too many i2c bytes[%d], max 60.", -+ msg[0].len); - ret = -EOPNOTSUPP; - goto i2c_error; - } -@@ -417,8 +141,10 @@ - obuf[1] = 0; - obuf[2] = msg[0].len; - obuf[3] = msg[0].addr; -- ret = dvb_usbv2_generic_rw(d, obuf, 4, ibuf, msg[0].len + 1); -- /*dprintk("%s(): read status = %d\n", __func__, ibuf[0]);*/ -+ ret = dvbsky_usb_generic_rw(d, obuf, 4, -+ ibuf, msg[0].len + 1); -+ if (ret) -+ dev_err(&d->udev->dev, "failed=%d\n", ret); - if (!ret) - memcpy(msg[0].buf, &ibuf[1], msg[0].len); - } else { -@@ -427,12 +153,16 @@ - obuf[1] = msg[0].addr; - obuf[2] = msg[0].len; - memcpy(&obuf[3], msg[0].buf, msg[0].len); -- ret = dvb_usbv2_generic_rw(d, obuf, msg[0].len + 3, ibuf, 1); -- /*dprintk("%s(): write status = %d\n", __func__, ibuf[0]);*/ -+ ret = dvbsky_usb_generic_rw(d, obuf, -+ msg[0].len + 3, ibuf, 1); -+ if (ret) -+ dev_err(&d->udev->dev, "failed=%d\n", ret); - } - } else { - if ((msg[0].len > 60) || (msg[1].len > 60)) { -- printk(KERN_ERR "dvbsky_usb: too many i2c bytes[w-%d][r-%d] than 60.", msg[0].len, msg[1].len); -+ dev_err(&d->udev->dev, -+ "too many i2c bytes[w-%d][r-%d], max 60.", -+ msg[0].len, msg[1].len); - ret = -EOPNOTSUPP; - goto i2c_error; - } -@@ -442,8 +172,11 @@ - obuf[2] = msg[1].len; - obuf[3] = msg[0].addr; - memcpy(&obuf[4], msg[0].buf, msg[0].len); -- ret = dvb_usbv2_generic_rw(d, obuf, msg[0].len + 4, ibuf, msg[1].len + 1); -- /*dprintk("%s(): write then read status = %d\n", __func__, ibuf[0]);*/ -+ ret = dvbsky_usb_generic_rw(d, obuf, -+ msg[0].len + 4, ibuf, msg[1].len + 1); -+ if (ret) -+ dev_err(&d->udev->dev, "failed=%d\n", ret); -+ - if (!ret) - memcpy(msg[1].buf, &ibuf[1], msg[1].len); - } -@@ -465,25 +198,16 @@ - #if IS_ENABLED(CONFIG_RC_CORE) - static int dvbsky_rc_query(struct dvb_usb_device *d) - { -- u32 code = 0xffff; -- u8 obuf[2], ibuf[2], toggle; -- int ret; -- obuf[0] = 0x10; -- ret = dvb_usbv2_generic_rw(d, obuf, 1, ibuf, 2); -- if(ret == 0) -- code = (ibuf[0] << 8) | ibuf[1]; -- -- if (code != 0xffff) { -- dprintk("rc code: %x", code); -- toggle = (code & 0x800) ? 1 : 0; -- code &= 0x3f; -- rc_keydown(d->rc_dev, code, toggle); -- } - return 0; - } - - static int dvbsky_get_rc_config(struct dvb_usb_device *d, struct dvb_usb_rc *rc) - { -+ if (dvb_usb_dvbsky_disable_rc) { -+ rc->map_name = NULL; -+ return 0; -+ } -+ - rc->allowed_protos = RC_BIT_RC5; - rc->query = dvbsky_rc_query; - rc->interval = 300; -@@ -493,34 +217,20 @@ - #define dvbsky_get_rc_config NULL - #endif - --static int dvbsky_sync_ctrl(struct dvb_frontend *fe) --{ -- struct dvb_usb_device *d = fe_to_d(fe); -- return dvbsky_stream_ctrl(d, 1); --} -- --static int dvbsky_usb_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage) -+static int dvbsky_usb_set_voltage(struct dvb_frontend *fe, -+ fe_sec_voltage_t voltage) - { - struct dvb_usb_device *d = fe_to_d(fe); -+ struct dvbsky_state *state = d_to_priv(d); - u8 value; - - if (voltage == SEC_VOLTAGE_OFF) - value = 0; - else - value = 1; -- return dvbsky_gpio_ctrl(d, 0x80, value); --} -+ dvbsky_gpio_ctrl(d, 0x80, value); - --static int dvbsky_usb_ci_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage) --{ -- struct dvb_usb_device *d = fe_to_d(fe); -- u8 value; -- -- if (voltage == SEC_VOLTAGE_OFF) -- value = 0; -- else -- value = 1; -- return dvbsky_gpio_ctrl(d, 0x00, value); -+ return state->fe_set_voltage(fe, voltage); - } - - static int dvbsky_read_mac_addr(struct dvb_usb_adapter *adap, u8 mac[6]) -@@ -539,25 +249,38 @@ - .flags = I2C_M_RD, - .buf = ibuf, - .len = 6, -- - } - }; -- -+ - if (i2c_transfer(&d->i2c_adap, msg, 2) == 2) - memcpy(mac, ibuf, 6); - -- printk(KERN_INFO "dvbsky_usb MAC address=%pM\n", mac); -- - return 0; - } - --static struct dvbsky_m88ds3103_config dvbsky_usb_ds3103_config = { -- .demod_address = 0x68, -- .ci_mode = 1, -- .pin_ctrl = 0x83, -- .ts_mode = 0, -- .start_ctrl = dvbsky_sync_ctrl, -- .set_voltage = dvbsky_usb_set_voltage, -+static int dvbsky_usb_read_status(struct dvb_frontend *fe, fe_status_t *status) -+{ -+ struct dvb_usb_device *d = fe_to_d(fe); -+ struct dvbsky_state *state = d_to_priv(d); -+ int ret; -+ -+ ret = state->fe_read_status(fe, status); -+ -+ /* it need resync slave fifo when signal change from unlock to lock.*/ -+ if ((*status & FE_HAS_LOCK) && (!state->last_lock)) -+ dvbsky_stream_ctrl(d, 1); -+ -+ state->last_lock = (*status & FE_HAS_LOCK) ? 1 : 0; -+ return ret; -+} -+ -+static const struct m88ds3103_config dvbsky_s960_m88ds3103_config = { -+ .i2c_addr = 0x68, -+ .clock = 27000000, -+ .i2c_wr_max = 33, -+ .clock_out = 0, -+ .ts_mode = M88DS3103_TS_CI, -+ .agc = 0x99, - }; - - static int dvbsky_s960_attach(struct dvb_usb_adapter *adap) -@@ -565,36 +288,118 @@ - struct dvbsky_state *state = adap_to_priv(adap); - struct dvb_usb_device *d = adap_to_d(adap); - int ret = 0; -- -- dprintk("%s()\n", __func__); -- -- dvbsky_gpio_ctrl(d, 0x04, 1); -- -- dvbsky_gpio_ctrl(d, 0x83, 0); -- msleep(50); -- dvbsky_gpio_ctrl(d, 0x83, 1); -- msleep(20); -- -- adap->fe[0] = dvb_attach(dvbsky_m88ds3103_attach, -- &dvbsky_usb_ds3103_config, -- &d->i2c_adap); -+ /* demod I2C adapter */ -+ struct i2c_adapter *i2c_adapter; -+ struct i2c_client *client; -+ struct i2c_board_info info; -+ struct m88ts2022_config m88ts2022_config = { -+ .clock = 27000000, -+ }; -+ memset(&info, 0, sizeof(struct i2c_board_info)); -+ -+ /* attach demod */ -+ adap->fe[0] = dvb_attach(m88ds3103_attach, -+ &dvbsky_s960_m88ds3103_config, -+ &d->i2c_adap, -+ &i2c_adapter); - if (!adap->fe[0]) { -- printk(KERN_ERR "dvbsky_s960_attach fail."); -+ dev_err(&d->udev->dev, "dvbsky_s960_attach fail.\n"); -+ ret = -ENODEV; -+ goto fail_attach; -+ } -+ -+ /* attach tuner */ -+ m88ts2022_config.fe = adap->fe[0]; -+ strlcpy(info.type, "m88ts2022", I2C_NAME_SIZE); -+ info.addr = 0x60; -+ info.platform_data = &m88ts2022_config; -+ request_module("m88ts2022"); -+ client = i2c_new_device(i2c_adapter, &info); -+ if (client == NULL || client->dev.driver == NULL) { -+ dvb_frontend_detach(adap->fe[0]); -+ ret = -ENODEV; -+ goto fail_attach; -+ } -+ -+ if (!try_module_get(client->dev.driver->owner)) { -+ i2c_unregister_device(client); -+ dvb_frontend_detach(adap->fe[0]); - ret = -ENODEV; -+ goto fail_attach; - } -- -- state->has_ci = 0; - -+ /* delegate signal strength measurement to tuner */ -+ adap->fe[0]->ops.read_signal_strength = -+ adap->fe[0]->ops.tuner_ops.get_rf_strength; -+ -+ /* hook fe: need to resync the slave fifo when signal locks. */ -+ state->fe_read_status = adap->fe[0]->ops.read_status; -+ adap->fe[0]->ops.read_status = dvbsky_usb_read_status; -+ -+ /* hook fe: LNB off/on is control by Cypress usb chip. */ -+ state->fe_set_voltage = adap->fe[0]->ops.set_voltage; -+ adap->fe[0]->ops.set_voltage = dvbsky_usb_set_voltage; -+ -+ state->i2c_client_tuner = client; -+ -+fail_attach: - return ret; - } - --static struct dvbsky_m88ds3103_config dvbsky_usb_ds3103_ci_config = { -- .demod_address = 0x68, -- .ci_mode = 2, -- .pin_ctrl = 0x82, -- .ts_mode = 0, -- .start_ctrl = dvbsky_sync_ctrl, -- .set_voltage = dvbsky_usb_ci_set_voltage, -+static int dvbsky_usb_ci_set_voltage(struct dvb_frontend *fe, -+ fe_sec_voltage_t voltage) -+{ -+ struct dvb_usb_device *d = fe_to_d(fe); -+ struct dvbsky_state *state = d_to_priv(d); -+ u8 value; -+ -+ if (voltage == SEC_VOLTAGE_OFF) -+ value = 0; -+ else -+ value = 1; -+ dvbsky_gpio_ctrl(d, 0x00, value); -+ -+ return state->fe_set_voltage(fe, voltage); -+} -+ -+static int dvbsky_ci_ctrl(void *priv, u8 read, int addr, -+ u8 data, int *mem) -+{ -+ struct dvb_usb_device *d = priv; -+ int ret = 0; -+ u8 command[4], respond[2], command_size, respond_size; -+ -+ command[1] = (u8)((addr >> 8) & 0xff); /*high part of address*/ -+ command[2] = (u8)(addr & 0xff); /*low part of address*/ -+ if (read) { -+ command[0] = 0x71; -+ command_size = 3; -+ respond_size = 2; -+ } else { -+ command[0] = 0x70; -+ command[3] = data; -+ command_size = 4; -+ respond_size = 1; -+ } -+ ret = dvbsky_usb_generic_rw(d, command, command_size, -+ respond, respond_size); -+ if (ret) -+ goto err; -+ if (read) -+ *mem = respond[1]; -+ return ret; -+err: -+ dev_err(&d->udev->dev, "ci control failed=%d\n", ret); -+ return ret; -+} -+ -+static const struct m88ds3103_config dvbsky_s960c_m88ds3103_config = { -+ .i2c_addr = 0x68, -+ .clock = 27000000, -+ .i2c_wr_max = 33, -+ .clock_out = 0, -+ .ts_mode = M88DS3103_TS_CI, -+ .agc = 0x99, - }; - - static int dvbsky_s960c_attach(struct dvb_usb_adapter *adap) -@@ -602,64 +407,319 @@ - struct dvbsky_state *state = adap_to_priv(adap); - struct dvb_usb_device *d = adap_to_d(adap); - int ret = 0; -- -- dvbsky_gpio_ctrl(d, 0x04, 1); -- -- dvbsky_gpio_ctrl(d, 0x83, 0); -- msleep(50); -- dvbsky_gpio_ctrl(d, 0x83, 1); -- msleep(20); -- -- adap->fe[0] = dvb_attach(dvbsky_m88ds3103_attach, -- &dvbsky_usb_ds3103_ci_config, -- &d->i2c_adap); -+ /* demod I2C adapter */ -+ struct i2c_adapter *i2c_adapter; -+ struct i2c_client *client_tuner, *client_ci; -+ struct i2c_board_info info; -+ struct sp2_config sp2_config; -+ struct m88ts2022_config m88ts2022_config = { -+ .clock = 27000000, -+ }; -+ memset(&info, 0, sizeof(struct i2c_board_info)); -+ -+ /* attach demod */ -+ adap->fe[0] = dvb_attach(m88ds3103_attach, -+ &dvbsky_s960c_m88ds3103_config, -+ &d->i2c_adap, -+ &i2c_adapter); - if (!adap->fe[0]) { -- printk(KERN_ERR "dvbsky_s960c_attach fail."); -+ dev_err(&d->udev->dev, "dvbsky_s960ci_attach fail.\n"); -+ ret = -ENODEV; -+ goto fail_attach; -+ } -+ -+ /* attach tuner */ -+ m88ts2022_config.fe = adap->fe[0]; -+ strlcpy(info.type, "m88ts2022", I2C_NAME_SIZE); -+ info.addr = 0x60; -+ info.platform_data = &m88ts2022_config; -+ request_module("m88ts2022"); -+ client_tuner = i2c_new_device(i2c_adapter, &info); -+ if (client_tuner == NULL || client_tuner->dev.driver == NULL) { -+ ret = -ENODEV; -+ goto fail_tuner_device; -+ } -+ -+ if (!try_module_get(client_tuner->dev.driver->owner)) { -+ ret = -ENODEV; -+ goto fail_tuner_module; -+ } -+ -+ /* attach ci controller */ -+ memset(&sp2_config, 0, sizeof(sp2_config)); -+ sp2_config.dvb_adap = &adap->dvb_adap; -+ sp2_config.priv = d; -+ sp2_config.ci_control = dvbsky_ci_ctrl; -+ memset(&info, 0, sizeof(struct i2c_board_info)); -+ strlcpy(info.type, "sp2", I2C_NAME_SIZE); -+ info.addr = 0x40; -+ info.platform_data = &sp2_config; -+ request_module("sp2"); -+ client_ci = i2c_new_device(&d->i2c_adap, &info); -+ if (client_ci == NULL || client_ci->dev.driver == NULL) { - ret = -ENODEV; -+ goto fail_ci_device; - } -- -- state->has_ci = 1; - -+ if (!try_module_get(client_ci->dev.driver->owner)) { -+ ret = -ENODEV; -+ goto fail_ci_module; -+ } -+ -+ /* delegate signal strength measurement to tuner */ -+ adap->fe[0]->ops.read_signal_strength = -+ adap->fe[0]->ops.tuner_ops.get_rf_strength; -+ -+ /* hook fe: need to resync the slave fifo when signal locks. */ -+ state->fe_read_status = adap->fe[0]->ops.read_status; -+ adap->fe[0]->ops.read_status = dvbsky_usb_read_status; -+ -+ /* hook fe: LNB off/on is control by Cypress usb chip. */ -+ state->fe_set_voltage = adap->fe[0]->ops.set_voltage; -+ adap->fe[0]->ops.set_voltage = dvbsky_usb_ci_set_voltage; -+ -+ state->i2c_client_tuner = client_tuner; -+ state->i2c_client_ci = client_ci; -+ return ret; -+fail_ci_module: -+ i2c_unregister_device(client_ci); -+fail_ci_device: -+ module_put(client_tuner->dev.driver->owner); -+fail_tuner_module: -+ i2c_unregister_device(client_tuner); -+fail_tuner_device: -+ dvb_frontend_detach(adap->fe[0]); -+fail_attach: -+ return ret; -+} -+ -+static int dvbsky_t680c_attach(struct dvb_usb_adapter *adap) -+{ -+ struct dvbsky_state *state = adap_to_priv(adap); -+ struct dvb_usb_device *d = adap_to_d(adap); -+ int ret = 0; -+ struct i2c_adapter *i2c_adapter; -+ struct i2c_client *client_demod, *client_tuner, *client_ci; -+ struct i2c_board_info info; -+ struct si2168_config si2168_config; -+ struct si2157_config si2157_config; -+ struct sp2_config sp2_config; -+ -+ /* attach demod */ -+ memset(&si2168_config, 0, sizeof(si2168_config)); -+ si2168_config.i2c_adapter = &i2c_adapter; -+ si2168_config.fe = &adap->fe[0]; -+ si2168_config.ts_mode = SI2168_TS_PARALLEL; -+ memset(&info, 0, sizeof(struct i2c_board_info)); -+ strlcpy(info.type, "si2168", I2C_NAME_SIZE); -+ info.addr = 0x64; -+ info.platform_data = &si2168_config; -+ -+ request_module(info.type); -+ client_demod = i2c_new_device(&d->i2c_adap, &info); -+ if (client_demod == NULL || -+ client_demod->dev.driver == NULL) -+ goto fail_demod_device; -+ if (!try_module_get(client_demod->dev.driver->owner)) -+ goto fail_demod_module; -+ -+ /* attach tuner */ -+ memset(&si2157_config, 0, sizeof(si2157_config)); -+ si2157_config.fe = adap->fe[0]; -+ memset(&info, 0, sizeof(struct i2c_board_info)); -+ strlcpy(info.type, "si2157", I2C_NAME_SIZE); -+ info.addr = 0x60; -+ info.platform_data = &si2157_config; -+ -+ request_module(info.type); -+ client_tuner = i2c_new_device(i2c_adapter, &info); -+ if (client_tuner == NULL || -+ client_tuner->dev.driver == NULL) -+ goto fail_tuner_device; -+ if (!try_module_get(client_tuner->dev.driver->owner)) -+ goto fail_tuner_module; -+ -+ /* attach ci controller */ -+ memset(&sp2_config, 0, sizeof(sp2_config)); -+ sp2_config.dvb_adap = &adap->dvb_adap; -+ sp2_config.priv = d; -+ sp2_config.ci_control = dvbsky_ci_ctrl; -+ memset(&info, 0, sizeof(struct i2c_board_info)); -+ strlcpy(info.type, "sp2", I2C_NAME_SIZE); -+ info.addr = 0x40; -+ info.platform_data = &sp2_config; -+ -+ request_module(info.type); -+ client_ci = i2c_new_device(&d->i2c_adap, &info); -+ -+ if (client_ci == NULL || client_ci->dev.driver == NULL) -+ goto fail_ci_device; -+ -+ if (!try_module_get(client_ci->dev.driver->owner)) -+ goto fail_ci_module; -+ -+ state->i2c_client_demod = client_demod; -+ state->i2c_client_tuner = client_tuner; -+ state->i2c_client_ci = client_ci; -+ return ret; -+fail_ci_module: -+ i2c_unregister_device(client_ci); -+fail_ci_device: -+ module_put(client_tuner->dev.driver->owner); -+fail_tuner_module: -+ i2c_unregister_device(client_tuner); -+fail_tuner_device: -+ module_put(client_demod->dev.driver->owner); -+fail_demod_module: -+ i2c_unregister_device(client_demod); -+fail_demod_device: -+ ret = -ENODEV; -+ return ret; -+} -+ -+static int dvbsky_t330_attach(struct dvb_usb_adapter *adap) -+{ -+ struct dvbsky_state *state = adap_to_priv(adap); -+ struct dvb_usb_device *d = adap_to_d(adap); -+ int ret = 0; -+ struct i2c_adapter *i2c_adapter; -+ struct i2c_client *client_demod, *client_tuner; -+ struct i2c_board_info info; -+ struct si2168_config si2168_config; -+ struct si2157_config si2157_config; -+ -+ /* attach demod */ -+ memset(&si2168_config, 0, sizeof(si2168_config)); -+ si2168_config.i2c_adapter = &i2c_adapter; -+ si2168_config.fe = &adap->fe[0]; -+ si2168_config.ts_mode = SI2168_TS_PARALLEL | 0x40; -+ memset(&info, 0, sizeof(struct i2c_board_info)); -+ strlcpy(info.type, "si2168", I2C_NAME_SIZE); -+ info.addr = 0x64; -+ info.platform_data = &si2168_config; -+ -+ request_module(info.type); -+ client_demod = i2c_new_device(&d->i2c_adap, &info); -+ if (client_demod == NULL || -+ client_demod->dev.driver == NULL) -+ goto fail_demod_device; -+ if (!try_module_get(client_demod->dev.driver->owner)) -+ goto fail_demod_module; -+ -+ /* attach tuner */ -+ memset(&si2157_config, 0, sizeof(si2157_config)); -+ si2157_config.fe = adap->fe[0]; -+ memset(&info, 0, sizeof(struct i2c_board_info)); -+ strlcpy(info.type, "si2157", I2C_NAME_SIZE); -+ info.addr = 0x60; -+ info.platform_data = &si2157_config; -+ -+ request_module(info.type); -+ client_tuner = i2c_new_device(i2c_adapter, &info); -+ if (client_tuner == NULL || -+ client_tuner->dev.driver == NULL) -+ goto fail_tuner_device; -+ if (!try_module_get(client_tuner->dev.driver->owner)) -+ goto fail_tuner_module; -+ -+ state->i2c_client_demod = client_demod; -+ state->i2c_client_tuner = client_tuner; -+ return ret; -+fail_tuner_module: -+ i2c_unregister_device(client_tuner); -+fail_tuner_device: -+ module_put(client_demod->dev.driver->owner); -+fail_demod_module: -+ i2c_unregister_device(client_demod); -+fail_demod_device: -+ ret = -ENODEV; - return ret; - } - - static int dvbsky_identify_state(struct dvb_usb_device *d, const char **name) - { -+ dvbsky_gpio_ctrl(d, 0x04, 1); -+ msleep(20); -+ dvbsky_gpio_ctrl(d, 0x83, 0); -+ dvbsky_gpio_ctrl(d, 0xc0, 1); -+ msleep(100); -+ dvbsky_gpio_ctrl(d, 0x83, 1); -+ dvbsky_gpio_ctrl(d, 0xc0, 0); -+ msleep(50); -+ - return WARM; - } - - static int dvbsky_init(struct dvb_usb_device *d) - { - struct dvbsky_state *state = d_to_priv(d); -- int ret; - - /* use default interface */ -+ /* - ret = usb_set_interface(d->udev, 0, 0); - if (ret) - return ret; -- -+ */ - mutex_init(&state->stream_mutex); -- -- /* attach CI */ -- if (state->has_ci) { -- dvbsky_gpio_ctrl(d, 0xc0, 1); -- msleep(100); -- dvbsky_gpio_ctrl(d, 0xc0, 0); -- msleep(50); -- state->ci_attached = 0; -- ret = dvbsky_ci_init(d); -- if (ret) -- return ret; -- } -+ -+ state->last_lock = 0; -+ - return 0; - } - - static void dvbsky_exit(struct dvb_usb_device *d) - { -- return dvbsky_ci_release(d); -+ struct dvbsky_state *state = d_to_priv(d); -+ struct i2c_client *client; -+ -+ client = state->i2c_client_tuner; -+ /* remove I2C tuner */ -+ if (client) { -+ module_put(client->dev.driver->owner); -+ i2c_unregister_device(client); -+ } -+ client = state->i2c_client_demod; -+ /* remove I2C demod */ -+ if (client) { -+ module_put(client->dev.driver->owner); -+ i2c_unregister_device(client); -+ } -+ client = state->i2c_client_ci; -+ /* remove I2C ci */ -+ if (client) { -+ module_put(client->dev.driver->owner); -+ i2c_unregister_device(client); -+ } - } - - /* DVB USB Driver stuff */ -+static struct dvb_usb_device_properties dvbsky_s960_props = { -+ .driver_name = KBUILD_MODNAME, -+ .owner = THIS_MODULE, -+ .adapter_nr = adapter_nr, -+ .size_of_priv = sizeof(struct dvbsky_state), -+ -+ .generic_bulk_ctrl_endpoint = 0x01, -+ .generic_bulk_ctrl_endpoint_response = 0x81, -+ .generic_bulk_ctrl_delay = DVBSKY_MSG_DELAY, -+ -+ .i2c_algo = &dvbsky_i2c_algo, -+ .frontend_attach = dvbsky_s960_attach, -+ .init = dvbsky_init, -+ .get_rc_config = dvbsky_get_rc_config, -+ .streaming_ctrl = dvbsky_streaming_ctrl, -+ .identify_state = dvbsky_identify_state, -+ .exit = dvbsky_exit, -+ .read_mac_address = dvbsky_read_mac_addr, -+ -+ .num_adapters = 1, -+ .adapter = { -+ { -+ .stream = DVB_USB_STREAM_BULK(0x82, 8, 4096), -+ } -+ } -+}; -+ - static struct dvb_usb_device_properties dvbsky_s960c_props = { - .driver_name = KBUILD_MODNAME, - .owner = THIS_MODULE, -@@ -668,6 +728,7 @@ - - .generic_bulk_ctrl_endpoint = 0x01, - .generic_bulk_ctrl_endpoint_response = 0x81, -+ .generic_bulk_ctrl_delay = DVBSKY_MSG_DELAY, - - .i2c_algo = &dvbsky_i2c_algo, - .frontend_attach = dvbsky_s960c_attach, -@@ -676,6 +737,7 @@ - .streaming_ctrl = dvbsky_streaming_ctrl, - .identify_state = dvbsky_identify_state, - .exit = dvbsky_exit, -+ .read_mac_address = dvbsky_read_mac_addr, - - .num_adapters = 1, - .adapter = { -@@ -685,7 +747,7 @@ - } - }; - --static struct dvb_usb_device_properties dvbsky_s960_props = { -+static struct dvb_usb_device_properties dvbsky_t680c_props = { - .driver_name = KBUILD_MODNAME, - .owner = THIS_MODULE, - .adapter_nr = adapter_nr, -@@ -693,9 +755,37 @@ - - .generic_bulk_ctrl_endpoint = 0x01, - .generic_bulk_ctrl_endpoint_response = 0x81, -+ .generic_bulk_ctrl_delay = DVBSKY_MSG_DELAY, - - .i2c_algo = &dvbsky_i2c_algo, -- .frontend_attach = dvbsky_s960_attach, -+ .frontend_attach = dvbsky_t680c_attach, -+ .init = dvbsky_init, -+ .get_rc_config = dvbsky_get_rc_config, -+ .streaming_ctrl = dvbsky_streaming_ctrl, -+ .identify_state = dvbsky_identify_state, -+ .exit = dvbsky_exit, -+ .read_mac_address = dvbsky_read_mac_addr, -+ -+ .num_adapters = 1, -+ .adapter = { -+ { -+ .stream = DVB_USB_STREAM_BULK(0x82, 8, 4096), -+ } -+ } -+}; -+ -+static struct dvb_usb_device_properties dvbsky_t330_props = { -+ .driver_name = KBUILD_MODNAME, -+ .owner = THIS_MODULE, -+ .adapter_nr = adapter_nr, -+ .size_of_priv = sizeof(struct dvbsky_state), -+ -+ .generic_bulk_ctrl_endpoint = 0x01, -+ .generic_bulk_ctrl_endpoint_response = 0x81, -+ .generic_bulk_ctrl_delay = DVBSKY_MSG_DELAY, -+ -+ .i2c_algo = &dvbsky_i2c_algo, -+ .frontend_attach = dvbsky_t330_attach, - .init = dvbsky_init, - .get_rc_config = dvbsky_get_rc_config, - .streaming_ctrl = dvbsky_streaming_ctrl, -@@ -712,10 +802,22 @@ - }; - - static const struct usb_device_id dvbsky_id_table[] = { -- { DVB_USB_DEVICE(0x0572, 0x960c, -- &dvbsky_s960c_props, "DVBSky S960CI", RC_MAP_DVBSKY) }, - { DVB_USB_DEVICE(0x0572, 0x6831, - &dvbsky_s960_props, "DVBSky S960/S860", RC_MAP_DVBSKY) }, -+ { DVB_USB_DEVICE(0x0572, 0x960c, -+ &dvbsky_s960c_props, "DVBSky S960CI", RC_MAP_DVBSKY) }, -+ { DVB_USB_DEVICE(0x0572, 0x680c, -+ &dvbsky_t680c_props, "DVBSky T680CI", RC_MAP_DVBSKY) }, -+ { DVB_USB_DEVICE(0x0572, 0x0320, -+ &dvbsky_t330_props, "DVBSky T330", RC_MAP_DVBSKY) }, -+ { DVB_USB_DEVICE(USB_VID_TECHNOTREND, -+ USB_PID_TECHNOTREND_TVSTICK_CT2_4400, -+ &dvbsky_t330_props, "TechnoTrend TVStick CT2-4400", -+ RC_MAP_TT_1500) }, -+ { DVB_USB_DEVICE(USB_VID_TECHNOTREND, -+ USB_PID_TECHNOTREND_CONNECT_CT2_4650_CI, -+ &dvbsky_t680c_props, "TechnoTrend TT-connect CT2-4650 CI", -+ RC_MAP_TT_1500) }, - { } - }; - MODULE_DEVICE_TABLE(usb, dvbsky_id_table); -@@ -735,5 +837,5 @@ - module_usb_driver(dvbsky_usb_driver); - - MODULE_AUTHOR("Max nibble "); --MODULE_DESCRIPTION("Driver for DVBSky USB2.0"); -+MODULE_DESCRIPTION("Driver for DVBSky USB"); - MODULE_LICENSE("GPL"); -diff -urN a/drivers/media/usb/dvb-usb-v2/Kconfig b/drivers/media/usb/dvb-usb-v2/Kconfig ---- a/drivers/media/usb/dvb-usb-v2/Kconfig 2015-03-22 14:16:43.000000000 +0200 -+++ b/drivers/media/usb/dvb-usb-v2/Kconfig 2015-03-22 14:17:59.574225151 +0200 -@@ -151,5 +151,8 @@ - tristate "DVBSky USB2.0 support" - depends on DVB_USB_V2 - select DVB_DVBSKY_M88DS3103 if MEDIA_SUBDRV_AUTOSELECT -+ select DVB_SI2168 if MEDIA_SUBDRV_AUTOSELECT -+ select DVB_SP2 if MEDIA_SUBDRV_AUTOSELECT -+ select MEDIA_TUNER_SI2157 if MEDIA_SUBDRV_AUTOSELECT - help - Say Y here to support the USB receivers from DVBSky. -diff -urN a/drivers/media/usb/em28xx/em28xx-dvb.c b/drivers/media/usb/em28xx/em28xx-dvb.c ---- a/drivers/media/usb/em28xx/em28xx-dvb.c 2014-11-02 15:07:11.000000000 +0200 -+++ b/drivers/media/usb/em28xx/em28xx-dvb.c 2015-03-22 14:25:19.230238544 +0200 -@@ -814,7 +814,9 @@ - .clock = 27000000, - .i2c_wr_max = 33, - .clock_out = 0, -- .ts_mode = M88DS3103_TS_PARALLEL_16, -+ .ts_mode = M88DS3103_TS_PARALLEL, -+ .ts_clk = 16000, -+ .ts_clk_pol = 1, - .agc = 0x99, - }; - diff --git a/projects/imx6/patches/linux/3.14-sr/linux-226-pctv292e-devices.patch b/projects/imx6/patches/linux/3.14-sr/linux-226-pctv292e-devices.patch deleted file mode 100644 index 89ecc2e17d..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-226-pctv292e-devices.patch +++ /dev/null @@ -1,192 +0,0 @@ -diff -rupN a/drivers/media/usb/em28xx/em28xx-cards.c b/drivers/media/usb/em28xx/em28xx-cards.c ---- a/drivers/media/usb/em28xx/em28xx-cards.c 2015-02-23 14:54:18.000000000 +0100 -+++ b/drivers/media/usb/em28xx/em28xx-cards.c 2015-02-12 16:46:54.000000000 +0100 -@@ -448,6 +448,18 @@ static struct em28xx_reg_seq speedlink_v - { -1, -1, -1, -1}, - }; - -+static struct em28xx_reg_seq pctv_292e[] = { -+ {EM2874_R80_GPIO_P0_CTRL, 0xff, 0xff, 0}, -+ {0x0d, 0xff, 0xff, 950}, -+ {EM2874_R80_GPIO_P0_CTRL, 0xbd, 0xff, 100}, -+ {EM2874_R80_GPIO_P0_CTRL, 0xfd, 0xff, 410}, -+ {EM2874_R80_GPIO_P0_CTRL, 0x7d, 0xff, 300}, -+ {EM2874_R80_GPIO_P0_CTRL, 0x7c, 0xff, 60}, -+ {0x0d, 0x42, 0xff, 50}, -+ {EM2874_R5F_TS_ENABLE, 0x85, 0xff, 0}, -+ {-1, -1, -1, -1}, -+}; -+ - /* - * Button definitions - */ -@@ -2157,6 +2169,17 @@ struct em28xx_board em28xx_boards[] = { - .has_dvb = 1, - .ir_codes = RC_MAP_PINNACLE_PCTV_HD, - }, -+ /* 2013:025f PCTV tripleStick (292e). -+ * Empia EM28178, Silicon Labs Si2168, Silicon Labs Si2157 */ -+ [EM28178_BOARD_PCTV_292E] = { -+ .name = "PCTV tripleStick (292e)", -+ .def_i2c_bus = 1, -+ .i2c_speed = EM28XX_I2C_CLK_WAIT_ENABLE | EM28XX_I2C_FREQ_400_KHZ, -+ .tuner_type = TUNER_ABSENT, -+ .tuner_gpio = pctv_292e, -+ .has_dvb = 1, -+ .ir_codes = RC_MAP_PINNACLE_PCTV_HD, -+ }, - }; - EXPORT_SYMBOL_GPL(em28xx_boards); - -@@ -2330,6 +2353,8 @@ struct usb_device_id em28xx_id_table[] = - .driver_info = EM2765_BOARD_SPEEDLINK_VAD_LAPLACE }, - { USB_DEVICE(0x2013, 0x0258), - .driver_info = EM28178_BOARD_PCTV_461E }, -+ { USB_DEVICE(0x2013, 0x025f), -+ .driver_info = EM28178_BOARD_PCTV_292E }, - { }, - }; - MODULE_DEVICE_TABLE(usb, em28xx_id_table); -diff -rupN a/drivers/media/usb/em28xx/em28xx-dvb.c b/drivers/media/usb/em28xx/em28xx-dvb.c ---- a/drivers/media/usb/em28xx/em28xx-dvb.c 2014-11-02 14:07:11.000000000 +0100 -+++ b/drivers/media/usb/em28xx/em28xx-dvb.c 2015-02-24 16:39:35.000000000 +0100 -@@ -53,6 +53,8 @@ - #include "mb86a20s.h" - #include "m88ds3103.h" - #include "m88ts2022.h" -+#include "si2168.h" -+#include "si2157.h" - - MODULE_AUTHOR("Mauro Carvalho Chehab "); - MODULE_LICENSE("GPL"); -@@ -91,6 +93,7 @@ struct em28xx_dvb { - struct semaphore pll_mutex; - bool dont_attach_fe1; - int lna_gpio; -+ struct i2c_client *i2c_client_demod; - struct i2c_client *i2c_client_tuner; - }; - -@@ -719,6 +722,21 @@ static int em28xx_pctv_290e_set_lna(stru - #endif - } - -+static int em28xx_pctv_292e_set_lna(struct dvb_frontend *fe) -+{ -+ struct dtv_frontend_properties *c = &fe->dtv_property_cache; -+ struct em28xx_i2c_bus *i2c_bus = fe->dvb->priv; -+ struct em28xx *dev = i2c_bus->dev; -+ u8 lna; -+ -+ if (c->lna == 1) -+ lna = 0x01; -+ else -+ lna = 0x00; -+ -+ return em28xx_write_reg_bits(dev, EM2874_R80_GPIO_P0_CTRL, lna, 0x01); -+} -+ - static int em28xx_mt352_terratec_xs_init(struct dvb_frontend *fe) - { - /* Values extracted from a USB trace of the Terratec Windows driver */ -@@ -1413,6 +1431,66 @@ static int em28xx_dvb_init(struct em28xx - } - } - break; -+ case EM28178_BOARD_PCTV_292E: -+ { -+ struct i2c_adapter *adapter; -+ struct i2c_client *client; -+ struct i2c_board_info info; -+ struct si2168_config si2168_config; -+ struct si2157_config si2157_config; -+ -+ /* attach demod */ -+ memset(&si2168_config, 0, sizeof(si2168_config)); -+ si2168_config.i2c_adapter = &adapter; -+ si2168_config.fe = &dvb->fe[0]; -+ si2168_config.ts_mode = SI2168_TS_PARALLEL; -+ memset(&info, 0, sizeof(struct i2c_board_info)); -+ strlcpy(info.type, "si2168", I2C_NAME_SIZE); -+ info.addr = 0x64; -+ info.platform_data = &si2168_config; -+ request_module(info.type); -+ client = i2c_new_device(&dev->i2c_adap[dev->def_i2c_bus], &info); -+ if (client == NULL || client->dev.driver == NULL) { -+ result = -ENODEV; -+ goto out_free; -+ } -+ -+ if (!try_module_get(client->dev.driver->owner)) { -+ i2c_unregister_device(client); -+ result = -ENODEV; -+ goto out_free; -+ } -+ -+ dvb->i2c_client_demod = client; -+ -+ /* attach tuner */ -+ memset(&si2157_config, 0, sizeof(si2157_config)); -+ si2157_config.fe = dvb->fe[0]; -+ memset(&info, 0, sizeof(struct i2c_board_info)); -+ strlcpy(info.type, "si2157", I2C_NAME_SIZE); -+ info.addr = 0x60; -+ info.platform_data = &si2157_config; -+ request_module(info.type); -+ client = i2c_new_device(adapter, &info); -+ if (client == NULL || client->dev.driver == NULL) { -+ module_put(dvb->i2c_client_demod->dev.driver->owner); -+ i2c_unregister_device(dvb->i2c_client_demod); -+ result = -ENODEV; -+ goto out_free; -+ } -+ -+ if (!try_module_get(client->dev.driver->owner)) { -+ i2c_unregister_device(client); -+ module_put(dvb->i2c_client_demod->dev.driver->owner); -+ i2c_unregister_device(dvb->i2c_client_demod); -+ result = -ENODEV; -+ goto out_free; -+ } -+ -+ dvb->i2c_client_tuner = client; -+ dvb->fe[0]->ops.set_lna = em28xx_pctv_292e_set_lna; -+ } -+ break; - default: - em28xx_errdev("/2: The frontend of your DVB/ATSC card" - " isn't supported yet\n"); -@@ -1485,6 +1563,10 @@ static int em28xx_dvb_fini(struct em28xx - } - - i2c_release_client(dvb->i2c_client_tuner); -+ /* remove I2C demod */ -+ if (dvb->i2c_client_demod) { -+ i2c_unregister_device(dvb->i2c_client_demod); -+ } - em28xx_unregister_dvb(dvb); - kfree(dvb); - dev->dvb = NULL; -diff -rupN a/drivers/media/usb/em28xx/em28xx.h b/drivers/media/usb/em28xx/em28xx.h ---- a/drivers/media/usb/em28xx/em28xx.h 2014-11-02 14:07:11.000000000 +0100 -+++ b/drivers/media/usb/em28xx/em28xx.h 2015-02-23 15:28:11.000000000 +0100 -@@ -137,6 +137,7 @@ - #define EM2874_BOARD_KWORLD_UB435Q_V2 90 - #define EM2765_BOARD_SPEEDLINK_VAD_LAPLACE 91 - #define EM28178_BOARD_PCTV_461E 92 -+#define EM28178_BOARD_PCTV_292E 94 - - /* Limits minimum and default number of buffers */ - #define EM28XX_MIN_BUF 4 -diff -rupN a/drivers/media/usb/em28xx/Kconfig b/drivers/media/usb/em28xx/Kconfig ---- a/drivers/media/usb/em28xx/Kconfig 2014-11-02 14:07:11.000000000 +0100 -+++ b/drivers/media/usb/em28xx/Kconfig 2015-02-12 16:46:54.000000000 +0100 -@@ -55,6 +55,8 @@ config VIDEO_EM28XX_DVB - select MEDIA_TUNER_TDA18271 if MEDIA_SUBDRV_AUTOSELECT - select DVB_M88DS3103 if MEDIA_SUBDRV_AUTOSELECT - select MEDIA_TUNER_M88TS2022 if MEDIA_SUBDRV_AUTOSELECT -+ select DVB_SI2168 if MEDIA_SUBDRV_AUTOSELECT -+ select MEDIA_TUNER_SI2157 if MEDIA_SUBDRV_AUTOSELECT - ---help--- - This adds support for DVB cards based on the - Empiatech em28xx chips. diff --git a/projects/imx6/patches/linux/3.14-sr/linux-250-fix-dvbsky.patch b/projects/imx6/patches/linux/3.14-sr/linux-250-fix-dvbsky.patch deleted file mode 100644 index f72b138978..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-250-fix-dvbsky.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff -Naur linux-cuboxi-3.14-ea83bda.orig/drivers/media/usb/dvb-usb-v2/dvbsky.c linux-cuboxi-3.14-ea83bda/drivers/media/usb/dvb-usb-v2/dvbsky.c ---- linux-cuboxi-3.14-ea83bda.orig/drivers/media/usb/dvb-usb-v2/dvbsky.c 2015-05-12 07:55:11.516604741 +0200 -+++ linux-cuboxi-3.14-ea83bda/drivers/media/usb/dvb-usb-v2/dvbsky.c 2015-05-12 07:58:19.750871492 +0200 -@@ -280,7 +280,11 @@ - .i2c_wr_max = 33, - .clock_out = 0, - .ts_mode = M88DS3103_TS_CI, -+ .ts_clk = 16000, -+ .ts_clk_pol = 0, - .agc = 0x99, -+ .lnb_hv_pol = 1, -+ .lnb_en_pol = 1, - }; - - static int dvbsky_s960_attach(struct dvb_usb_adapter *adap) diff --git a/projects/imx6/patches/linux/3.14-sr/linux-301-tbs2910_dtb_fan.patch b/projects/imx6/patches/linux/3.14-sr/linux-301-tbs2910_dtb_fan.patch deleted file mode 100644 index 7e73c1ccfc..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-301-tbs2910_dtb_fan.patch +++ /dev/null @@ -1,25 +0,0 @@ ---- a/arch/arm/boot/dts/imx6q-tbs2910.dts 2016-09-17 15:27:28.950265621 +0200 -+++ b/arch/arm/boot/dts/imx6q-tbs2910.dts 2016-09-17 15:28:25.984089674 +0200 -@@ -84,17 +84,14 @@ - gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>; - linux,default-trigger = "heartbeat"; - }; -- }; - -- fan { -- compatible = "gpio-fan"; -- pinctrl-names = "default"; -- pinctrl-0 = <&pinctrl_gpio_fan>; -- gpios = <&gpio3 28 GPIO_ACTIVE_HIGH>; -- gpio-fan,speed-map = <0 0 -- 3000 1>; -+ fan { -+ gpios = <&gpio3 28 0>; -+ default-state = "off"; -+ }; - }; - -+ - sound { - compatible = "fsl,imx-audio-sgtl5000"; - model = "imx-sgtl5000"; diff --git a/projects/imx6/patches/linux/3.14-sr/linux-310-udoo-lvds-support.patch b/projects/imx6/patches/linux/3.14-sr/linux-310-udoo-lvds-support.patch deleted file mode 100644 index 476eb6fa19..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-310-udoo-lvds-support.patch +++ /dev/null @@ -1,340 +0,0 @@ -From 21ecd35bd9e5030a6b33a41dea3a2653609b09d7 Mon Sep 17 00:00:00 2001 -From: Peter Vicman -Date: Thu, 24 Mar 2016 15:53:56 +0100 -Subject: [PATCH] dts: udoo: add both lvds displays - ---- - arch/arm/boot/dts/Makefile | 4 +++ - arch/arm/boot/dts/imx6dl-udoo-15lvds.dts | 54 +++++++++++++++++++++++++++++ - arch/arm/boot/dts/imx6dl-udoo-7lvds.dts | 49 +++++++++++++++++++++++++++ - arch/arm/boot/dts/imx6q-udoo-15lvds.dts | 58 ++++++++++++++++++++++++++++++++ - arch/arm/boot/dts/imx6q-udoo-7lvds.dts | 53 +++++++++++++++++++++++++++++ - arch/arm/boot/dts/imx6qdl-udoo.dtsi | 5 +-- - 6 files changed, 221 insertions(+), 2 deletions(-) - create mode 100644 arch/arm/boot/dts/imx6dl-udoo-15lvds.dts - create mode 100644 arch/arm/boot/dts/imx6dl-udoo-7lvds.dts - create mode 100644 arch/arm/boot/dts/imx6q-udoo-15lvds.dts - create mode 100644 arch/arm/boot/dts/imx6q-udoo-7lvds.dts - -diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile -index 08ff98a..ffffb8c 100644 ---- a/arch/arm/boot/dts/Makefile -+++ b/arch/arm/boot/dts/Makefile -@@ -167,6 +167,8 @@ dtb-$(CONFIG_ARCH_MXC) += \ - imx6dl-sabresd-pf200.dtb \ - imx6dl-sabresd-hdcp.dtb \ - imx6dl-udoo.dtb \ -+ imx6dl-udoo-7lvds.dtb \ -+ imx6dl-udoo-15lvds.dtb \ - imx6dl-sbc-fx6.dtb \ - imx6dl-sbc-fx6m.dtb \ - imx6dl-wandboard.dtb \ -@@ -192,6 +194,8 @@ dtb-$(CONFIG_ARCH_MXC) += \ - imx6q-sbc-fx6m.dtb \ - imx6q-sbc6x.dtb \ - imx6q-udoo.dtb \ -+ imx6q-udoo-7lvds.dtb \ -+ imx6q-udoo-15lvds.dtb \ - imx6q-wandboard.dtb \ - imx6q-tbs2910.dtb \ - imx6sl-evk.dtb \ -diff --git a/arch/arm/boot/dts/imx6dl-udoo-15lvds.dts b/arch/arm/boot/dts/imx6dl-udoo-15lvds.dts -new file mode 100644 -index 0000000..ac189cc ---- /dev/null -+++ b/arch/arm/boot/dts/imx6dl-udoo-15lvds.dts -@@ -0,0 +1,63 @@ -+/* -+ * Copyright 2013 Freescale Semiconductor, Inc. -+ * -+ * Author: Fabio Estevam -+ * Author: Ettore Chimenti -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ * -+ */ -+ -+/dts-v1/; -+#include "imx6dl.dtsi" -+#include "imx6qdl-udoo.dtsi" -+ -+/ { -+ model = "Udoo i.MX6 Dual-lite Board"; -+ compatible = "udoo,imx6dl-udoo", "fsl,imx6dl"; -+ -+ mxcfb2: fb@1 { -+ compatible = "fsl,mxc_sdc_fb"; -+ disp_dev = "ldb"; -+ interface_pix_fmt = "RGB24"; -+ mode_str = "1360x768M@60"; -+ default_bpp = <32>; -+ int_clk = <0>; -+ late_init = <1>; -+ status = "okay"; -+ }; -+ -+ regulators { -+ reg_lcd0_pwr: regulator@1 { -+ status = "okay"; -+ }; -+ -+ reg_lcd0_backlight: regulator@2 { -+ status = "okay"; -+ }; -+ }; -+}; -+ -+&dcic1 { -+ status = "disabled"; -+}; -+ -+&dcic2 { -+ dcic_id = <0>; -+ status = "okay"; -+}; -+ -+&ldb { -+ status = "okay"; -+ -+ lvds-channel@0 { -+ status = "okay"; -+ fsl,data-width = <24>; -+ -+ display-timings { -+ native-mode = <&timing2>; -+ }; -+ }; -+}; -diff --git a/arch/arm/boot/dts/imx6dl-udoo-7lvds.dts b/arch/arm/boot/dts/imx6dl-udoo-7lvds.dts -new file mode 100644 -index 0000000..da6ba4d ---- /dev/null -+++ b/arch/arm/boot/dts/imx6dl-udoo-7lvds.dts -@@ -0,0 +1,58 @@ -+/* -+ * Copyright 2013 Freescale Semiconductor, Inc. -+ * -+ * Author: Fabio Estevam -+ * Author: Ettore Chimenti -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ * -+ */ -+ -+/dts-v1/; -+#include "imx6dl.dtsi" -+#include "imx6qdl-udoo.dtsi" -+ -+/ { -+ model = "Udoo i.MX6 Dual-lite Board"; -+ compatible = "udoo,imx6dl-udoo", "fsl,imx6dl"; -+ -+ mxcfb2: fb@1 { -+ compatible = "fsl,mxc_sdc_fb"; -+ disp_dev = "ldb"; -+ interface_pix_fmt = "RGB666"; -+ mode_str = "800x480M@60"; -+ default_bpp = <32>; -+ int_clk = <0>; -+ late_init = <0>; -+ status = "okay"; -+ }; -+ -+ regulators { -+ reg_lcd0_pwr: regulator@1 { -+ status = "okay"; -+ }; -+ -+ reg_lcd0_backlight: regulator@2 { -+ status = "okay"; -+ }; -+ }; -+}; -+ -+&dcic1 { -+ status = "disabled"; -+}; -+ -+&dcic2 { -+ dcic_id = <0>; -+ status = "okay"; -+}; -+ -+&ldb { -+ status = "okay"; -+ -+ lvds-channel@0 { -+ status = "okay"; -+ }; -+}; -diff --git a/arch/arm/boot/dts/imx6q-udoo-15lvds.dts b/arch/arm/boot/dts/imx6q-udoo-15lvds.dts -new file mode 100644 -index 0000000..35e7651 ---- /dev/null -+++ b/arch/arm/boot/dts/imx6q-udoo-15lvds.dts -@@ -0,0 +1,67 @@ -+/* -+ * Copyright 2013 Freescale Semiconductor, Inc. -+ * -+ * Author: Fabio Estevam -+ * Author: Ettore Chimenti -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ * -+ */ -+ -+/dts-v1/; -+#include "imx6q.dtsi" -+#include "imx6qdl-udoo.dtsi" -+ -+/ { -+ model = "Udoo i.MX6 Quad Board"; -+ compatible = "udoo,imx6q-udoo", "fsl,imx6q"; -+ -+ mxcfb2: fb@1 { -+ compatible = "fsl,mxc_sdc_fb"; -+ disp_dev = "ldb"; -+ interface_pix_fmt = "RGB24"; -+ mode_str = "1360x768M@60"; -+ default_bpp = <32>; -+ int_clk = <0>; -+ late_init = <1>; -+ status = "okay"; -+ }; -+ -+ regulators { -+ reg_lcd0_pwr: regulator@1 { -+ status = "okay"; -+ }; -+ -+ reg_lcd0_backlight: regulator@2 { -+ status = "okay"; -+ }; -+ }; -+}; -+ -+&sata { -+ status = "okay"; -+}; -+ -+&dcic1 { -+ status = "disabled"; -+}; -+ -+&dcic2 { -+ dcic_id = <0>; -+ status = "okay"; -+}; -+ -+&ldb { -+ status = "okay"; -+ -+ lvds-channel@0 { -+ status = "okay"; -+ fsl,data-width = <24>; -+ -+ display-timings { -+ native-mode = <&timing2>; -+ }; -+ }; -+}; -diff --git a/arch/arm/boot/dts/imx6q-udoo-7lvds.dts b/arch/arm/boot/dts/imx6q-udoo-7lvds.dts -new file mode 100644 -index 0000000..e5f3125 ---- /dev/null -+++ b/arch/arm/boot/dts/imx6q-udoo-7lvds.dts -@@ -0,0 +1,62 @@ -+/* -+ * Copyright 2013 Freescale Semiconductor, Inc. -+ * -+ * Author: Fabio Estevam -+ * Author: Ettore Chimenti -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ * -+ */ -+ -+/dts-v1/; -+#include "imx6q.dtsi" -+#include "imx6qdl-udoo.dtsi" -+ -+/ { -+ model = "Udoo i.MX6 Quad Board"; -+ compatible = "udoo,imx6q-udoo", "fsl,imx6q"; -+ -+ mxcfb2: fb@1 { -+ compatible = "fsl,mxc_sdc_fb"; -+ disp_dev = "ldb"; -+ interface_pix_fmt = "RGB666"; -+ mode_str = "800x480M@60"; -+ default_bpp = <32>; -+ int_clk = <0>; -+ late_init = <0>; -+ status = "okay"; -+ }; -+ -+ regulators { -+ reg_lcd0_pwr: regulator@1 { -+ status = "okay"; -+ }; -+ -+ reg_lcd0_backlight: regulator@2 { -+ status = "okay"; -+ }; -+ }; -+}; -+ -+&sata { -+ status = "okay"; -+}; -+ -+&dcic1 { -+ status = "disabled"; -+}; -+ -+&dcic2 { -+ dcic_id = <0>; -+ status = "okay"; -+}; -+ -+&ldb { -+ status = "okay"; -+ -+ lvds-channel@0 { -+ status = "okay"; -+ }; -+}; -diff --git a/arch/arm/boot/dts/imx6qdl-udoo.dtsi b/arch/arm/boot/dts/imx6qdl-udoo.dtsi -index 2f6ec9a..7dca6db 100755 ---- a/arch/arm/boot/dts/imx6qdl-udoo.dtsi -+++ b/arch/arm/boot/dts/imx6qdl-udoo.dtsi -@@ -202,7 +202,7 @@ - &dcic2 { - dcic_id = <1>; - dcic_mux = "dcic-lvds1"; -- status = "okay"; -+ status = "disabled"; - }; - - &gpc { // General power controller -@@ -254,9 +254,10 @@ - vsync-len = <2>; - }; - -- timing2: 1366x768 { // 15.6" display -+ // IPU needs X and Y by modulo 8 -+ timing2: 1360x768 { // 15.6" display - clock-frequency = <76000000>; -- hactive = <1366>; -+ hactive = <1360>; - vactive = <768>; - hback-porch = <220>; - hfront-porch = <40>; diff --git a/projects/imx6/patches/linux/3.14-sr/linux-320-cuboxi_led_heartbeat.patch b/projects/imx6/patches/linux/3.14-sr/linux-320-cuboxi_led_heartbeat.patch deleted file mode 100644 index 67216dfb32..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-320-cuboxi_led_heartbeat.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- a/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi 2014-11-25 19:23:06.332485391 +0100 -+++ b/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi 2014-11-25 19:23:24.675776865 +0100 -@@ -31,6 +31,7 @@ - label = "imx6:red:front"; - max-brightness = <248>; - pwms = <&pwm1 0 50000>; -+ linux,default-trigger = "heartbeat"; - }; - }; - ---- a/arch/arm/boot/dts/imx6qdl-cubox-i-som-v15.dtsi 2014-11-25 19:23:06.332485391 +0100 -+++ b/arch/arm/boot/dts/imx6qdl-cubox-i-som-v15.dtsi 2014-11-25 19:23:24.675776865 +0100 -@@ -31,6 +31,7 @@ - label = "imx6:red:front"; - max-brightness = <248>; - pwms = <&pwm1 0 50000>; -+ linux,default-trigger = "heartbeat"; - }; - }; - diff --git a/projects/imx6/patches/linux/3.14-sr/linux-410-limit-eth-speed-100mbits.patch b/projects/imx6/patches/linux/3.14-sr/linux-410-limit-eth-speed-100mbits.patch deleted file mode 100644 index 045f0634b7..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-410-limit-eth-speed-100mbits.patch +++ /dev/null @@ -1,55 +0,0 @@ -From a868ebd7d7e9ee8dc97b41ac89e5fa8d8cfc65d7 Mon Sep 17 00:00:00 2001 -From: Peter Vicman -Date: Wed, 9 May 2017 20:18:07 +0200 -Subject: [PATCH] limit eth speed 100mbits - -default ethernet speed is set to 100mbits which works reliable - -to enable gigabit speed module parameter via kernel command line -must be set in form fec.disable_giga=0 - -based on https://github.com/boundarydevices/linux-imx6/commit/aef0deef3c95aa0daf4fa5d082cca4ed2057c65f - ---- - drivers/net/ethernet/freescale/fec_main.c | 11 +++++++++-- - 1 file changed, 9 insertions(+), 2 deletions(-) - -diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c -index 716fcb1..af01828 100644 ---- a/drivers/net/ethernet/freescale/fec_main.c -+++ b/drivers/net/ethernet/freescale/fec_main.c -@@ -140,6 +140,10 @@ static unsigned char macaddr[ETH_ALEN]; - module_param_array(macaddr, byte, NULL, 0); - MODULE_PARM_DESC(macaddr, "FEC Ethernet MAC address"); - -+static int disable_giga = 1; -+module_param(disable_giga, int, 0644); -+MODULE_PARM_DESC(disable_giga, "disable gigabit speeds"); -+ - #if defined(CONFIG_M5272) - /* - * Some hardware gets it MAC address out of local flash memory. -@@ -1948,15 +1952,18 @@ static int fec_enet_mii_probe(struct net - } - - /* mask with MAC supported features */ -- if (fep->quirks & FEC_QUIRK_HAS_GBIT) { -+ if (!disable_giga && (fep->quirks & FEC_QUIRK_HAS_GBIT)) { -+ netdev_info(ndev, "set 1000mbps\n"); - phy_dev->supported &= PHY_GBIT_FEATURES; - phy_dev->supported &= ~SUPPORTED_1000baseT_Half; - #if !defined(CONFIG_M5272) - phy_dev->supported |= SUPPORTED_Pause; - #endif - } -- else -+ else { -+ netdev_info(ndev, "set 100mbps\n"); - phy_dev->supported &= PHY_BASIC_FEATURES; -+ } - - phy_dev->advertising = phy_dev->supported; - --- -2.7.4 - diff --git a/projects/imx6/patches/linux/3.14-sr/linux-704-Support-for-Ubiquiti-WifiStation.patch b/projects/imx6/patches/linux/3.14-sr/linux-704-Support-for-Ubiquiti-WifiStation.patch deleted file mode 100644 index 7932c0723b..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-704-Support-for-Ubiquiti-WifiStation.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 62330f8f9b6105bfe201f52b7ed86ea6ce3d5901 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Sun, 8 Sep 2013 10:33:51 +0100 -Subject: [PATCH] Add Ubiquiti WifiStation USB id to ath9k wifi driver - ---- - drivers/net/wireless/ath/ath9k/hif_usb.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c -index 75a6376..8cb8d8d 100644 ---- a/drivers/net/wireless/ath/ath9k/hif_usb.c -+++ b/drivers/net/wireless/ath/ath9k/hif_usb.c -@@ -37,9 +37,11 @@ - { USB_DEVICE(0x13D3, 0x3350) }, /* Azurewave */ - { USB_DEVICE(0x04CA, 0x4605) }, /* Liteon */ - { USB_DEVICE(0x040D, 0x3801) }, /* VIA */ -+ { USB_DEVICE(0x0cf3, 0xb002) }, /* Ubiquiti WifiStation */ - { USB_DEVICE(0x0cf3, 0xb003) }, /* Ubiquiti WifiStation Ext */ - { USB_DEVICE(0x0cf3, 0xb002) }, /* Ubiquiti WifiStation */ - { USB_DEVICE(0x057c, 0x8403) }, /* AVM FRITZ!WLAN 11N v2 USB */ -+ { USB_DEVICE(0x057c, 0x8403) }, /* AVM FRITZ!WLAN 11N v2 USB */ - - { USB_DEVICE(0x0cf3, 0x7015), - .driver_info = AR9287_USB }, /* Atheros */ --- -1.8.4 - diff --git a/projects/imx6/patches/linux/3.14-sr/linux-705-Support-for-Buffalo-WLI-UC-G300HP-V1.patch b/projects/imx6/patches/linux/3.14-sr/linux-705-Support-for-Buffalo-WLI-UC-G300HP-V1.patch deleted file mode 100644 index 816af3b9d2..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-705-Support-for-Buffalo-WLI-UC-G300HP-V1.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/drivers/net/wireless/rt2x00/rt2800usb.c 2013-10-08 15:14:44.844047190 +0200 -+++ b/drivers/net/wireless/rt2x00/rt2800usb.c 2013-10-08 15:15:00.279904575 +0200 -@@ -976,6 +976,7 @@ - { USB_DEVICE(0x0411, 0x015d) }, - { USB_DEVICE(0x0411, 0x016f) }, - { USB_DEVICE(0x0411, 0x01a2) }, -+ { USB_DEVICE(0x0411, 0x01a8) }, - { USB_DEVICE(0x0411, 0x01ee) }, - /* Corega */ - { USB_DEVICE(0x07aa, 0x002f) }, diff --git a/projects/imx6/patches/linux/3.14-sr/linux-706-Sitecom-N300.patch b/projects/imx6/patches/linux/3.14-sr/linux-706-Sitecom-N300.patch deleted file mode 100644 index 9f52eeb2d5..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-706-Sitecom-N300.patch +++ /dev/null @@ -1,11 +0,0 @@ -diff -Naur linux-3.10.16/drivers/staging/rtl8712/usb_intf.c linux-3.10.16.patch/drivers/staging/rtl8712/usb_intf.c ---- linux-3.10.16/drivers/staging/rtl8712/usb_intf.c 2013-10-14 01:08:56.000000000 +0200 -+++ linux-3.10.16.patch/drivers/staging/rtl8712/usb_intf.c 2013-10-16 13:27:44.032951265 +0200 -@@ -92,6 +92,7 @@ - {USB_DEVICE(0x0DF6, 0x005B)}, - {USB_DEVICE(0x0DF6, 0x005D)}, - {USB_DEVICE(0x0DF6, 0x0063)}, -+ {USB_DEVICE(0x0DF6, 0x006C)}, - /* Sweex */ - {USB_DEVICE(0x177F, 0x0154)}, - /* Thinkware */ diff --git a/projects/imx6/patches/linux/3.14-sr/linux-800-from-openbricks.patch b/projects/imx6/patches/linux/3.14-sr/linux-800-from-openbricks.patch deleted file mode 100644 index 8b848eb859..0000000000 --- a/projects/imx6/patches/linux/3.14-sr/linux-800-from-openbricks.patch +++ /dev/null @@ -1,4560 +0,0 @@ -https://github.com/OpenBricks/openbricks/tree/krypton-glibc -https://github.com/OpenBricks/openbricks/tree/krypton-glibc/config/platforms/arm/imx6/machines/cuboxi/packages/linux/patches -https://github.com/OpenBricks/openbricks/tree/27322b70e3566434443991078645e6a7395cb28d/config/platforms/arm/imx6/machines/cuboxi/packages/linux/patches - -============================================================== -file 0001-MXC-CEC-Remove-superflous-guards-that-could-even-bre.patch -============================================================== - -From 90d153b9d46ad06a4a513902d3bb72d23c45bdcc Mon Sep 17 00:00:00 2001 -From: wolfgar -Date: Mon, 31 Oct 2016 10:58:44 +0100 -Subject: [PATCH] MXC-CEC: Remove superflous guards that could even break - invocation from mxc-hdmi - ---- - drivers/mxc/hdmi-cec/mxc_hdmi-cec.c | 20 ++------------------ - 1 file changed, 2 insertions(+), 18 deletions(-) - -diff --git a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -index ac70a0c..f787274 100644 ---- a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -+++ b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -@@ -83,8 +83,6 @@ struct hdmi_cec_event { - - static LIST_HEAD(head); - --static int hdmi_cec_ready = 0; --static int hdmi_cec_started; - static int hdmi_cec_major; - static struct class *hdmi_cec_class; - static struct hdmi_cec_priv hdmi_cec_data; -@@ -314,7 +312,7 @@ static ssize_t hdmi_cec_write(struct file *file, const char __user *buf, - mutex_unlock(&hdmi_cec_data.lock); - return -EACCES; - } -- /* Ensure that there is only one writer who is the only listener of tx_cec_queue */ -+ /* Ensure that there is only one writer who is the unique listener of tx_cec_queue */ - if (hdmi_cec_data.tx_answer != CEC_TX_AVAIL) { - mutex_unlock(&hdmi_cec_data.lock); - return -EBUSY; -@@ -358,13 +356,11 @@ static ssize_t hdmi_cec_write(struct file *file, const char __user *buf, - return ret; - } - -+ - void hdmi_cec_start_device(void) - { - u8 val; - -- if (!hdmi_cec_ready || hdmi_cec_started) -- return; -- - val = hdmi_readb(HDMI_MC_CLKDIS); - val &= ~HDMI_MC_CLKDIS_CECCLK_DISABLE; - hdmi_writeb(val, HDMI_MC_CLKDIS); -@@ -377,11 +373,7 @@ void hdmi_cec_start_device(void) - hdmi_writeb(val, HDMI_CEC_MASK); - hdmi_writeb(val, HDMI_IH_MUTE_CEC_STAT0); - hdmi_cec_data.link_status = hdmi_readb(HDMI_PHY_STAT0) & 0x02; -- mutex_lock(&hdmi_cec_data.lock); - hdmi_cec_data.cec_state = true; -- mutex_unlock(&hdmi_cec_data.lock); -- -- hdmi_cec_started = 1; - } - EXPORT_SYMBOL(hdmi_cec_start_device); - -@@ -389,9 +381,6 @@ void hdmi_cec_stop_device(void) - { - u8 val; - -- if (!hdmi_cec_ready || !hdmi_cec_started) -- return; -- - hdmi_writeb(0x10, HDMI_CEC_CTRL); - val = HDMI_IH_CEC_STAT0_WAKEUP | HDMI_IH_CEC_STAT0_ERROR_FOLL | HDMI_IH_CEC_STAT0_ERROR_INIT | HDMI_IH_CEC_STAT0_ARB_LOST | \ - HDMI_IH_CEC_STAT0_NACK | HDMI_IH_CEC_STAT0_EOM | HDMI_IH_CEC_STAT0_DONE; -@@ -401,11 +390,7 @@ void hdmi_cec_stop_device(void) - val = hdmi_readb(HDMI_MC_CLKDIS); - val |= HDMI_MC_CLKDIS_CECCLK_DISABLE; - hdmi_writeb(val, HDMI_MC_CLKDIS); -- mutex_lock(&hdmi_cec_data.lock); - hdmi_cec_data.cec_state = false; -- mutex_unlock(&hdmi_cec_data.lock); -- -- hdmi_cec_started = 0; - } - EXPORT_SYMBOL(hdmi_cec_stop_device); - -@@ -579,7 +564,6 @@ static int hdmi_cec_dev_probe(struct platform_device *pdev) - INIT_DELAYED_WORK(&hdmi_cec_data.hdmi_cec_work, mxc_hdmi_cec_worker); - - dev_info(&pdev->dev, "HDMI CEC initialized\n"); -- hdmi_cec_ready = 1; - goto out; - - err_out_class: --- -1.9.1 - - -============================================================== -file 0002-MXC-CEC-Flush-pending-events-at-close.patch -============================================================== - -From 3309b17795c3c9cc1b457caf154f0f2e87121aa3 Mon Sep 17 00:00:00 2001 -From: wolfgar -Date: Mon, 31 Oct 2016 10:59:44 +0100 -Subject: [PATCH] MXC-CEC: Flush pending events at close - ---- - drivers/mxc/hdmi-cec/mxc_hdmi-cec.c | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -index f787274..210d764 100644 ---- a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -+++ b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -@@ -465,11 +465,18 @@ static long hdmi_cec_ioctl(struct file *filp, u_int cmd, - */ - static int hdmi_cec_release(struct inode *inode, struct file *filp) - { -+ struct hdmi_cec_event *event, *tmp_event; - mutex_lock(&hdmi_cec_data.lock); - if (open_count) { - open_count = 0; - hdmi_cec_data.cec_state = false; - hdmi_cec_data.Logical_address = 15; -+ -+ /* Flush eventual events which have not been read by user space */ -+ list_for_each_entry_safe(event, tmp_event, &head, list) { -+ list_del(&event->list); -+ vfree(event); -+ } - } - mutex_unlock(&hdmi_cec_data.lock); - --- -1.9.1 - - -============================================================== -file 0003-MXC-CEC-Remove-embedded-logics-from-the-driver-so-th.patch -============================================================== - -From 66ca526351cb7fe726e8e7ae19818e09e63fa19d Mon Sep 17 00:00:00 2001 -From: wolfgar -Date: Mon, 31 Oct 2016 11:00:46 +0100 -Subject: [PATCH] MXC-CEC: Remove embedded logics from the driver so that - libcec is responsible for all this work - ---- - drivers/mxc/hdmi-cec/mxc_hdmi-cec.c | 34 ++++++---------------------------- - 1 file changed, 6 insertions(+), 28 deletions(-) - -diff --git a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -index 210d764..da34f27 100644 ---- a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -+++ b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -@@ -132,7 +132,7 @@ static irqreturn_t mxc_hdmi_cec_isr(int irq, void *data) - - void mxc_hdmi_cec_handle(u16 cec_stat) - { -- u8 val = 0, i = 0; -+ u8 i = 0; - struct hdmi_cec_event *event = NULL; - /*The current transmission is successful (for initiator only).*/ - if (!open_count) -@@ -167,27 +167,14 @@ void mxc_hdmi_cec_handle(u16 cec_stat) - } - /*An error is detected on cec line (for initiator only). */ - if (cec_stat & HDMI_IH_CEC_STAT0_ERROR_INIT) { -- mutex_lock(&hdmi_cec_data.lock); -- hdmi_cec_data.send_error++; -- if (hdmi_cec_data.send_error > 2) { -- pr_err("%s:Re-transmission is attempted more than 2 times!\n", __func__); -- hdmi_cec_data.send_error = 0; -- mutex_unlock(&hdmi_cec_data.lock); -- hdmi_cec_data.tx_answer = cec_stat; -- wake_up(&tx_cec_queue); -- return; -- } -- for (i = 0; i < hdmi_cec_data.msg_len; i++) -- hdmi_writeb(hdmi_cec_data.last_msg[i], HDMI_CEC_TX_DATA0+i); -- hdmi_writeb(hdmi_cec_data.msg_len, HDMI_CEC_TX_CNT); -- val = hdmi_readb(HDMI_CEC_CTRL); -- val |= 0x01; -- hdmi_writeb(val, HDMI_CEC_CTRL); -- mutex_unlock(&hdmi_cec_data.lock); -+ hdmi_cec_data.tx_answer = cec_stat; -+ wake_up(&tx_cec_queue); -+ return; - } - /*A frame is not acknowledged in a directly addressed message. Or a frame is negatively acknowledged in - a broadcast message (for initiator only).*/ - if (cec_stat & HDMI_IH_CEC_STAT0_NACK) { -+ hdmi_cec_data.send_error++; - hdmi_cec_data.tx_answer = cec_stat; - wake_up(&tx_cec_queue); - } -@@ -403,7 +390,7 @@ static long hdmi_cec_ioctl(struct file *filp, u_int cmd, - u_long arg) - { - int ret = 0, status = 0; -- u8 val = 0, msg = 0; -+ u8 val = 0; - struct mxc_edid_cfg hdmi_edid_cfg; - pr_debug("function : %s\n", __func__); - if (!open_count) -@@ -427,15 +414,6 @@ static long hdmi_cec_ioctl(struct file *filp, u_int cmd, - hdmi_writeb(0, HDMI_CEC_ADDR_L); - } else - ret = -EINVAL; -- /*Send Polling message with same source and destination address*/ -- if (0 == ret && 15 != hdmi_cec_data.Logical_address) { -- msg = (hdmi_cec_data.Logical_address << 4)|hdmi_cec_data.Logical_address; -- hdmi_writeb(1, HDMI_CEC_TX_CNT); -- hdmi_writeb(msg, HDMI_CEC_TX_DATA0); -- val = hdmi_readb(HDMI_CEC_CTRL); -- val |= 0x01; -- hdmi_writeb(val, HDMI_CEC_CTRL); -- } - mutex_unlock(&hdmi_cec_data.lock); - break; - case HDMICEC_IOC_STARTDEVICE: --- -1.9.1 - - -============================================================== -file 0004-MXC-CEC-Remove-some-more-unneeded-guards-variables-a.patch -============================================================== - -From 6e0fb54a084d886f1c55660485bbdde3dea57057 Mon Sep 17 00:00:00 2001 -From: warped-rudi -Date: Wed, 9 Nov 2016 09:27:37 +0100 -Subject: [PATCH] MXC-CEC: Remove some more unneeded guards, variables and - comments - ---- - drivers/mxc/hdmi-cec/mxc_hdmi-cec.c | 82 ++++++++++++++----------------------- - 1 file changed, 31 insertions(+), 51 deletions(-) - -diff --git a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -index da34f27..ffaf20c 100644 ---- a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -+++ b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -@@ -47,24 +47,22 @@ - #include "mxc_hdmi-cec.h" - - --#define MAX_MESSAGE_LEN 17 -+#define MAX_MESSAGE_LEN 17 - --#define MESSAGE_TYPE_RECEIVE_SUCCESS 1 -+#define MESSAGE_TYPE_RECEIVE_SUCCESS 1 - #define MESSAGE_TYPE_NOACK 2 --#define MESSAGE_TYPE_DISCONNECTED 3 -+#define MESSAGE_TYPE_DISCONNECTED 3 - #define MESSAGE_TYPE_CONNECTED 4 --#define MESSAGE_TYPE_SEND_SUCCESS 5 -+#define MESSAGE_TYPE_SEND_SUCCESS 5 - --#define CEC_TX_INPROGRESS -1 --#define CEC_TX_AVAIL 0 -+#define CEC_TX_INPROGRESS -1 -+#define CEC_TX_AVAIL 0 - - struct hdmi_cec_priv { - int receive_error; - int send_error; - u8 Logical_address; - bool cec_state; -- u8 last_msg[MAX_MESSAGE_LEN]; -- u8 msg_len; - int tx_answer; - u16 latest_cec_stat; - u8 link_status; -@@ -223,11 +221,6 @@ static void mxc_hdmi_cec_worker(struct work_struct *work) - hdmi_writeb(val, HDMI_IH_MUTE_CEC_STAT0); - } - --/*! -- * @brief open function for cec file operation -- * -- * @return 0 on success or negative error code on error -- */ - static int hdmi_cec_open(struct inode *inode, struct file *filp) - { - mutex_lock(&hdmi_cec_data.lock); -@@ -247,10 +240,9 @@ static ssize_t hdmi_cec_read(struct file *file, char __user *buf, size_t count, - loff_t *ppos) - { - struct hdmi_cec_event *event = NULL; -+ - pr_debug("function : %s\n", __func__); - -- if (!open_count) -- return -ENODEV; - mutex_lock(&hdmi_cec_data.lock); - if (false == hdmi_cec_data.cec_state) { - mutex_unlock(&hdmi_cec_data.lock); -@@ -292,8 +284,6 @@ static ssize_t hdmi_cec_write(struct file *file, const char __user *buf, - - pr_debug("function : %s\n", __func__); - -- if (!open_count) -- return -ENODEV; - mutex_lock(&hdmi_cec_data.lock); - if (false == hdmi_cec_data.cec_state) { - mutex_unlock(&hdmi_cec_data.lock); -@@ -321,8 +311,6 @@ static ssize_t hdmi_cec_write(struct file *file, const char __user *buf, - val = hdmi_readb(HDMI_CEC_CTRL); - val |= 0x01; - hdmi_writeb(val, HDMI_CEC_CTRL); -- memcpy(hdmi_cec_data.last_msg, msg, msg_len); -- hdmi_cec_data.msg_len = msg_len; - mutex_unlock(&hdmi_cec_data.lock); - - ret = wait_event_interruptible_timeout(tx_cec_queue, hdmi_cec_data.tx_answer != CEC_TX_INPROGRESS, HZ); -@@ -336,9 +324,9 @@ static ssize_t hdmi_cec_write(struct file *file, const char __user *buf, - /* msg correctly sent */ - ret = msg_len; - else -- ret = -EIO; -+ ret = -EIO; - -- tx_out: -+tx_out: - hdmi_cec_data.tx_answer = CEC_TX_AVAIL; - return ret; - } -@@ -381,20 +369,15 @@ void hdmi_cec_stop_device(void) - } - EXPORT_SYMBOL(hdmi_cec_stop_device); - --/*! -- * @brief IO ctrl function for vpu file operation -- * @param cmd IO ctrl command -- * @return 0 on success or negative error code on error -- */ - static long hdmi_cec_ioctl(struct file *filp, u_int cmd, - u_long arg) - { - int ret = 0, status = 0; - u8 val = 0; - struct mxc_edid_cfg hdmi_edid_cfg; -+ - pr_debug("function : %s\n", __func__); -- if (!open_count) -- return -ENODEV; -+ - switch (cmd) { - case HDMICEC_IOC_SETLOGICALADDRESS: - mutex_lock(&hdmi_cec_data.lock); -@@ -437,13 +420,12 @@ static long hdmi_cec_ioctl(struct file *filp, u_int cmd, - return ret; - } - --/*! -- * @brief Release function for vpu file operation -- * @return 0 on success or negative error code on error -- */ - static int hdmi_cec_release(struct inode *inode, struct file *filp) - { - struct hdmi_cec_event *event, *tmp_event; -+ -+ pr_debug("function : %s\n", __func__); -+ - mutex_lock(&hdmi_cec_data.lock); - if (open_count) { - open_count = 0; -@@ -473,7 +455,7 @@ static unsigned int hdmi_cec_poll(struct file *file, poll_table *wait) - mask = (POLLOUT | POLLWRNORM); - mutex_lock(&hdmi_cec_data.lock); - if (!list_empty(&head)) -- mask |= (POLLIN | POLLRDNORM); -+ mask |= (POLLIN | POLLRDNORM); - mutex_unlock(&hdmi_cec_data.lock); - return mask; - } -@@ -499,14 +481,14 @@ static int hdmi_cec_dev_probe(struct platform_device *pdev) - - hdmi_cec_major = register_chrdev(hdmi_cec_major, "mxc_hdmi_cec", &hdmi_cec_fops); - if (hdmi_cec_major < 0) { -- dev_err(&pdev->dev, "hdmi_cec: unable to get a major for HDMI CEC\n"); -+ dev_err(&pdev->dev, "Unable to get a major for HDMI CEC\n"); - err = -EBUSY; - goto out; - } - - res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); - if (unlikely(res == NULL)) { -- dev_err(&pdev->dev, "hdmi_cec:No HDMI irq line provided\n"); -+ dev_err(&pdev->dev, "No HDMI irq line provided\n"); - goto err_out_chrdev; - } - spin_lock_init(&hdmi_cec_data.irq_lock); -@@ -514,7 +496,7 @@ static int hdmi_cec_dev_probe(struct platform_device *pdev) - err = devm_request_irq(&pdev->dev, irq, mxc_hdmi_cec_isr, IRQF_SHARED, - dev_name(&pdev->dev), &hdmi_cec_data); - if (err < 0) { -- dev_err(&pdev->dev, "hdmi_cec:Unable to request irq: %d\n", err); -+ dev_err(&pdev->dev, "Unable to request irq: %d\n", err); - goto err_out_chrdev; - } - -@@ -524,8 +506,8 @@ static int hdmi_cec_dev_probe(struct platform_device *pdev) - goto err_out_chrdev; - } - -- temp_class = device_create(hdmi_cec_class, NULL, MKDEV(hdmi_cec_major, 0), -- NULL, "mxc_hdmi_cec"); -+ temp_class = device_create(hdmi_cec_class, NULL, -+ MKDEV(hdmi_cec_major, 0), NULL, "mxc_hdmi_cec"); - if (IS_ERR(temp_class)) { - err = PTR_ERR(temp_class); - goto err_out_class; -@@ -533,7 +515,7 @@ static int hdmi_cec_dev_probe(struct platform_device *pdev) - - pinctrl = devm_pinctrl_get_select_default(&pdev->dev); - if (IS_ERR(pinctrl)) { -- dev_err(&pdev->dev, "can't get/select CEC pinctrl\n"); -+ dev_err(&pdev->dev, "Can't get/select CEC pinctrl\n"); - goto err_out_class; - } - -@@ -562,14 +544,13 @@ out: - - static int hdmi_cec_dev_remove(struct platform_device *pdev) - { -- if (hdmi_cec_data.cec_state) -- hdmi_cec_stop_device(); -- if (hdmi_cec_major > 0) { -- device_destroy(hdmi_cec_class, MKDEV(hdmi_cec_major, 0)); -- class_destroy(hdmi_cec_class); -- unregister_chrdev(hdmi_cec_major, "mxc_hdmi_cec"); -- hdmi_cec_major = 0; --} -+ hdmi_cec_stop_device(); -+ -+ device_destroy(hdmi_cec_class, MKDEV(hdmi_cec_major, 0)); -+ class_destroy(hdmi_cec_class); -+ unregister_chrdev(hdmi_cec_major, "mxc_hdmi_cec"); -+ hdmi_cec_major = 0; -+ - return 0; - } - -@@ -583,9 +564,9 @@ static struct platform_driver mxc_hdmi_cec_driver = { - .probe = hdmi_cec_dev_probe, - .remove = hdmi_cec_dev_remove, - .driver = { -- .name = "mxc_hdmi_cec", -- .of_match_table = imx_hdmi_cec_match, -- }, -+ .name = "mxc_hdmi_cec", -+ .of_match_table = imx_hdmi_cec_match, -+ }, - }; - - module_platform_driver(mxc_hdmi_cec_driver); -@@ -594,4 +575,3 @@ MODULE_AUTHOR("Freescale Semiconductor, Inc."); - MODULE_DESCRIPTION("Linux HDMI CEC driver for Freescale i.MX/MXC"); - MODULE_LICENSE("GPL"); - MODULE_ALIAS("platform:mxc_hdmi_cec"); -- --- -1.9.1 - - -============================================================== -file 0005-MXC-CEC-Restructure-code-to-avoid-race-conditions.patch -============================================================== - -From 52969de0f8a8afb87ccc43fe568e11f9a3cfccdf Mon Sep 17 00:00:00 2001 -From: warped-rudi -Date: Wed, 9 Nov 2016 09:27:38 +0100 -Subject: [PATCH] MXC-CEC: Restructure code to avoid race conditions - ---- - drivers/mxc/hdmi-cec/mxc_hdmi-cec.c | 258 ++++++++++++++++++++++++------------ - drivers/video/mxc/mxc_hdmi.c | 7 +- - include/linux/mfd/mxc-hdmi-core.h | 1 + - 3 files changed, 175 insertions(+), 91 deletions(-) - -diff --git a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -index ffaf20c..f62bcbc 100644 ---- a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -+++ b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -@@ -58,16 +58,32 @@ - #define CEC_TX_INPROGRESS -1 - #define CEC_TX_AVAIL 0 - -+/* These flags must not collide with HDMI_IH_CEC_STAT0_xxxx */ -+#define CEC_STAT0_EX_CONNECTED 0x0100 -+#define CEC_STAT0_EX_DISCONNECTED 0x0200 -+ -+#define CEC_STAT0_MASK_ALL (HDMI_IH_CEC_STAT0_WAKEUP | \ -+ HDMI_IH_CEC_STAT0_ERROR_FOLL | \ -+ HDMI_IH_CEC_STAT0_ARB_LOST | \ -+ HDMI_IH_CEC_STAT0_ERROR_INIT | \ -+ HDMI_IH_CEC_STAT0_NACK | \ -+ HDMI_IH_CEC_STAT0_EOM | \ -+ HDMI_IH_CEC_STAT0_DONE) -+ -+#define CEC_STAT0_MASK_DEFAULT (HDMI_IH_CEC_STAT0_WAKEUP | \ -+ HDMI_IH_CEC_STAT0_ERROR_FOLL | \ -+ HDMI_IH_CEC_STAT0_ARB_LOST) -+ - struct hdmi_cec_priv { - int receive_error; - int send_error; - u8 Logical_address; -- bool cec_state; -+ u8 cec_state; - int tx_answer; -- u16 latest_cec_stat; -+ u32 cec_stat0; - u8 link_status; - spinlock_t irq_lock; -- struct delayed_work hdmi_cec_work; -+ struct work_struct hdmi_cec_work; - struct mutex lock; - }; - -@@ -81,68 +97,79 @@ struct hdmi_cec_event { - - static LIST_HEAD(head); - -+static int hdmi_cec_irq; - static int hdmi_cec_major; - static struct class *hdmi_cec_class; - static struct hdmi_cec_priv hdmi_cec_data; - static u8 open_count; -+static u8 want_start; -+static u8 link_status; -+static u8 is_initialized; - - static wait_queue_head_t hdmi_cec_queue; - static wait_queue_head_t tx_cec_queue; - -+ -+static u32 get_hpd_stat(struct hdmi_cec_priv *hdmi_cec) -+{ -+ u32 cec_stat0 = 0; -+ -+ if (hdmi_cec->link_status ^ link_status) { -+ hdmi_cec->link_status = link_status; -+ if (hdmi_cec->link_status) -+ cec_stat0 = CEC_STAT0_EX_CONNECTED; -+ else -+ cec_stat0 = CEC_STAT0_EX_DISCONNECTED; -+ } -+ -+ return cec_stat0; -+} -+ - static irqreturn_t mxc_hdmi_cec_isr(int irq, void *data) - { - struct hdmi_cec_priv *hdmi_cec = data; -- u16 cec_stat = 0; - unsigned long flags; -- u8 phy_stat0; -+ u8 cec_stat; - - spin_lock_irqsave(&hdmi_cec->irq_lock, flags); - -- hdmi_writeb(0x7f, HDMI_IH_MUTE_CEC_STAT0); -+ hdmi_writeb(CEC_STAT0_MASK_ALL, HDMI_IH_MUTE_CEC_STAT0); - -- cec_stat = hdmi_readb(HDMI_IH_CEC_STAT0); -+ cec_stat = hdmi_readb(HDMI_IH_CEC_STAT0) & CEC_STAT0_MASK_ALL; - hdmi_writeb(cec_stat, HDMI_IH_CEC_STAT0); -- phy_stat0 = hdmi_readb(HDMI_PHY_STAT0) & 0x02; -- if (hdmi_cec->link_status ^ phy_stat0) { -- /* HPD value changed */ -- hdmi_cec->link_status = phy_stat0; -- if (hdmi_cec->link_status) -- cec_stat |= 0x80; /* Connected */ -- else -- cec_stat |= 0x100; /* Disconnected */ -- } -- if ((cec_stat & (HDMI_IH_CEC_STAT0_ERROR_INIT | \ -- HDMI_IH_CEC_STAT0_NACK | HDMI_IH_CEC_STAT0_EOM | \ -- HDMI_IH_CEC_STAT0_DONE | 0x180)) == 0) { -+ -+ if ((cec_stat & ~CEC_STAT0_MASK_DEFAULT) == 0) { -+ if (hdmi_cec->cec_state) -+ hdmi_writeb(CEC_STAT0_MASK_DEFAULT, HDMI_IH_MUTE_CEC_STAT0); - spin_unlock_irqrestore(&hdmi_cec->irq_lock, flags); -- return IRQ_HANDLED; -+ return IRQ_NONE; - } -- pr_debug("HDMI CEC interrupt received\n"); -- /* FIXME : there is a race with latest_cec_stat */ -- hdmi_cec->latest_cec_stat = cec_stat ; - -- schedule_delayed_work(&(hdmi_cec->hdmi_cec_work), msecs_to_jiffies(20)); -+ pr_debug("HDMI-CEC: interrupt received\n"); -+ -+ hdmi_cec->cec_stat0 = cec_stat | get_hpd_stat(hdmi_cec); -+ schedule_work(&hdmi_cec->hdmi_cec_work); - - spin_unlock_irqrestore(&hdmi_cec->irq_lock, flags); - - return IRQ_HANDLED; - } - --void mxc_hdmi_cec_handle(u16 cec_stat) -+static void mxc_hdmi_cec_handle(u32 cec_stat) - { - u8 i = 0; - struct hdmi_cec_event *event = NULL; -- /*The current transmission is successful (for initiator only).*/ -+ - if (!open_count) - return; - -+ /*The current transmission is successful (for initiator only).*/ - if (cec_stat & HDMI_IH_CEC_STAT0_DONE) { - hdmi_cec_data.tx_answer = cec_stat; - wake_up(&tx_cec_queue); - } - /*EOM is detected so that the received data is ready in the receiver data buffer*/ - if (cec_stat & HDMI_IH_CEC_STAT0_EOM) { -- hdmi_writeb(0x02, HDMI_IH_CEC_STAT0); - event = vmalloc(sizeof(struct hdmi_cec_event)); - if (NULL == event) { - pr_err("%s: Not enough memory!\n", __func__); -@@ -181,8 +208,8 @@ void mxc_hdmi_cec_handle(u16 cec_stat) - hdmi_cec_data.receive_error++; - } - /*HDMI cable connected*/ -- if (cec_stat & 0x80) { -- pr_info("HDMI link connected\n"); -+ if (cec_stat & CEC_STAT0_EX_CONNECTED) { -+ pr_info("HDMI-CEC: link connected\n"); - event = vmalloc(sizeof(struct hdmi_cec_event)); - if (NULL == event) { - pr_err("%s: Not enough memory\n", __func__); -@@ -196,8 +223,8 @@ void mxc_hdmi_cec_handle(u16 cec_stat) - wake_up(&hdmi_cec_queue); - } - /*HDMI cable disconnected*/ -- if (cec_stat & 0x100) { -- pr_info("HDMI link disconnected\n"); -+ if (cec_stat & CEC_STAT0_EX_DISCONNECTED) { -+ pr_info("HDMI-CEC: link disconnected\n"); - event = vmalloc(sizeof(struct hdmi_cec_event)); - if (NULL == event) { - pr_err("%s: Not enough memory!\n", __func__); -@@ -210,15 +237,19 @@ void mxc_hdmi_cec_handle(u16 cec_stat) - mutex_unlock(&hdmi_cec_data.lock); - wake_up(&hdmi_cec_queue); - } -- return; - } --EXPORT_SYMBOL(mxc_hdmi_cec_handle); -+ - static void mxc_hdmi_cec_worker(struct work_struct *work) - { -- u8 val; -- mxc_hdmi_cec_handle(hdmi_cec_data.latest_cec_stat); -- val = HDMI_IH_CEC_STAT0_WAKEUP | HDMI_IH_CEC_STAT0_ERROR_FOLL | HDMI_IH_CEC_STAT0_ARB_LOST; -- hdmi_writeb(val, HDMI_IH_MUTE_CEC_STAT0); -+ unsigned long flags; -+ -+ mxc_hdmi_cec_handle(hdmi_cec_data.cec_stat0); -+ -+ spin_lock_irqsave(&hdmi_cec_data.irq_lock, flags); -+ hdmi_cec_data.cec_stat0 = 0; -+ if (hdmi_cec_data.cec_state) -+ hdmi_writeb(CEC_STAT0_MASK_DEFAULT, HDMI_IH_MUTE_CEC_STAT0); -+ spin_unlock_irqrestore(&hdmi_cec_data.irq_lock, flags); - } - - static int hdmi_cec_open(struct inode *inode, struct file *filp) -@@ -244,7 +275,7 @@ static ssize_t hdmi_cec_read(struct file *file, char __user *buf, size_t count, - pr_debug("function : %s\n", __func__); - - mutex_lock(&hdmi_cec_data.lock); -- if (false == hdmi_cec_data.cec_state) { -+ if (!hdmi_cec_data.cec_state) { - mutex_unlock(&hdmi_cec_data.lock); - return -EACCES; - } -@@ -278,32 +309,31 @@ static ssize_t hdmi_cec_read(struct file *file, char __user *buf, size_t count, - static ssize_t hdmi_cec_write(struct file *file, const char __user *buf, - size_t count, loff_t *ppos) - { -- int ret = 0 , i = 0; -- u8 msg[MAX_MESSAGE_LEN]; -- u8 msg_len = 0, val = 0; -+ int ret = 0; -+ u8 i, msg_len, val; -+ u8 msg[MAX_MESSAGE_LEN] = { 0 }; - - pr_debug("function : %s\n", __func__); - - mutex_lock(&hdmi_cec_data.lock); -- if (false == hdmi_cec_data.cec_state) { -- mutex_unlock(&hdmi_cec_data.lock); -- return -EACCES; -- } -- /* Ensure that there is only one writer who is the unique listener of tx_cec_queue */ -- if (hdmi_cec_data.tx_answer != CEC_TX_AVAIL) { -+ -+ if (!hdmi_cec_data.cec_state) -+ ret = -EACCES; -+ else if (hdmi_cec_data.tx_answer != CEC_TX_AVAIL) -+ ret = -EBUSY; -+ else if (count > MAX_MESSAGE_LEN) -+ ret = -EINVAL; -+ else if (copy_from_user(&msg, buf, count)) -+ ret = -EACCES; -+ -+ if (ret) { - mutex_unlock(&hdmi_cec_data.lock); -- return -EBUSY; -+ return ret; - } -- mutex_unlock(&hdmi_cec_data.lock); -- if (count > MAX_MESSAGE_LEN) -- return -EINVAL; -- memset(&msg, 0, MAX_MESSAGE_LEN); -- ret = copy_from_user(&msg, buf, count); -- if (ret) -- return -EACCES; -- mutex_lock(&hdmi_cec_data.lock); -+ - hdmi_cec_data.send_error = 0; - hdmi_cec_data.tx_answer = CEC_TX_INPROGRESS; -+ - msg_len = count; - hdmi_writeb(msg_len, HDMI_CEC_TX_CNT); - for (i = 0; i < msg_len; i++) -@@ -311,9 +341,11 @@ static ssize_t hdmi_cec_write(struct file *file, const char __user *buf, - val = hdmi_readb(HDMI_CEC_CTRL); - val |= 0x01; - hdmi_writeb(val, HDMI_CEC_CTRL); -+ - mutex_unlock(&hdmi_cec_data.lock); - -- ret = wait_event_interruptible_timeout(tx_cec_queue, hdmi_cec_data.tx_answer != CEC_TX_INPROGRESS, HZ); -+ ret = wait_event_interruptible_timeout( -+ tx_cec_queue, hdmi_cec_data.tx_answer != CEC_TX_INPROGRESS, HZ); - - if (ret < 0) { - ret = -ERESTARTSYS; -@@ -331,10 +363,37 @@ tx_out: - return ret; - } - -+void hdmi_cec_hpd_changed(unsigned int state) -+{ -+ unsigned long flags; -+ u32 cec_stat0; -+ -+ pr_debug("function : %s\n", __func__); -+ -+ link_status = state & 1; -+ -+ if (is_initialized) { -+ spin_lock_irqsave(&hdmi_cec_data.irq_lock, flags); -+ cec_stat0 = get_hpd_stat(&hdmi_cec_data); -+ spin_unlock_irqrestore(&hdmi_cec_data.irq_lock, flags); -+ -+ if (cec_stat0) -+ mxc_hdmi_cec_handle(cec_stat0); -+ } -+} -+EXPORT_SYMBOL(hdmi_cec_hpd_changed); - - void hdmi_cec_start_device(void) - { - u8 val; -+ unsigned long flags; -+ -+ if (!is_initialized) { -+ want_start = 1; -+ return; -+ } -+ -+ spin_lock_irqsave(&hdmi_cec_data.irq_lock, flags); - - val = hdmi_readb(HDMI_MC_CLKDIS); - val &= ~HDMI_MC_CLKDIS_CECCLK_DISABLE; -@@ -342,30 +401,44 @@ void hdmi_cec_start_device(void) - hdmi_writeb(0x02, HDMI_CEC_CTRL); - /* Force read unlock */ - hdmi_writeb(0x0, HDMI_CEC_LOCK); -+ - val = HDMI_IH_CEC_STAT0_ERROR_INIT | HDMI_IH_CEC_STAT0_NACK | HDMI_IH_CEC_STAT0_EOM | HDMI_IH_CEC_STAT0_DONE; - hdmi_writeb(val, HDMI_CEC_POLARITY); -- val = HDMI_IH_CEC_STAT0_WAKEUP | HDMI_IH_CEC_STAT0_ERROR_FOLL | HDMI_IH_CEC_STAT0_ARB_LOST; -+ -+ val = CEC_STAT0_MASK_DEFAULT; - hdmi_writeb(val, HDMI_CEC_MASK); - hdmi_writeb(val, HDMI_IH_MUTE_CEC_STAT0); -- hdmi_cec_data.link_status = hdmi_readb(HDMI_PHY_STAT0) & 0x02; -+ hdmi_cec_data.link_status = link_status; - hdmi_cec_data.cec_state = true; -+ -+ spin_unlock_irqrestore(&hdmi_cec_data.irq_lock, flags); - } - EXPORT_SYMBOL(hdmi_cec_start_device); - - void hdmi_cec_stop_device(void) - { - u8 val; -+ unsigned long flags; - -+ if (!is_initialized) { -+ want_start = 0; -+ return; -+ } -+ -+ spin_lock_irqsave(&hdmi_cec_data.irq_lock, flags); -+ -+ hdmi_cec_data.cec_state = false; - hdmi_writeb(0x10, HDMI_CEC_CTRL); -- val = HDMI_IH_CEC_STAT0_WAKEUP | HDMI_IH_CEC_STAT0_ERROR_FOLL | HDMI_IH_CEC_STAT0_ERROR_INIT | HDMI_IH_CEC_STAT0_ARB_LOST | \ -- HDMI_IH_CEC_STAT0_NACK | HDMI_IH_CEC_STAT0_EOM | HDMI_IH_CEC_STAT0_DONE; -+ val = CEC_STAT0_MASK_ALL; - hdmi_writeb(val, HDMI_CEC_MASK); - hdmi_writeb(val, HDMI_IH_MUTE_CEC_STAT0); -+ - hdmi_writeb(0x0, HDMI_CEC_POLARITY); - val = hdmi_readb(HDMI_MC_CLKDIS); - val |= HDMI_MC_CLKDIS_CECCLK_DISABLE; - hdmi_writeb(val, HDMI_MC_CLKDIS); -- hdmi_cec_data.cec_state = false; -+ -+ spin_unlock_irqrestore(&hdmi_cec_data.irq_lock, flags); - } - EXPORT_SYMBOL(hdmi_cec_stop_device); - -@@ -381,7 +454,7 @@ static long hdmi_cec_ioctl(struct file *filp, u_int cmd, - switch (cmd) { - case HDMICEC_IOC_SETLOGICALADDRESS: - mutex_lock(&hdmi_cec_data.lock); -- if (false == hdmi_cec_data.cec_state) { -+ if (!hdmi_cec_data.cec_state) { - mutex_unlock(&hdmi_cec_data.lock); - pr_err("Trying to set logical address while not started\n"); - return -EACCES; -@@ -474,32 +547,23 @@ const struct file_operations hdmi_cec_fops = { - static int hdmi_cec_dev_probe(struct platform_device *pdev) - { - int err = 0; -- struct device *temp_class; -- struct resource *res; - struct pinctrl *pinctrl; -- int irq = platform_get_irq(pdev, 0); -+ struct device *temp_class; -+ -+ hdmi_cec_irq = platform_get_irq(pdev, 0); -+ if (hdmi_cec_irq < 0) { -+ dev_err(&pdev->dev, "No HDMI irq line provided\n"); -+ err = -ENXIO; -+ goto err_out; -+ } - - hdmi_cec_major = register_chrdev(hdmi_cec_major, "mxc_hdmi_cec", &hdmi_cec_fops); - if (hdmi_cec_major < 0) { - dev_err(&pdev->dev, "Unable to get a major for HDMI CEC\n"); - err = -EBUSY; -- goto out; -+ goto err_out; - } - -- res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); -- if (unlikely(res == NULL)) { -- dev_err(&pdev->dev, "No HDMI irq line provided\n"); -- goto err_out_chrdev; -- } -- spin_lock_init(&hdmi_cec_data.irq_lock); -- -- err = devm_request_irq(&pdev->dev, irq, mxc_hdmi_cec_isr, IRQF_SHARED, -- dev_name(&pdev->dev), &hdmi_cec_data); -- if (err < 0) { -- dev_err(&pdev->dev, "Unable to request irq: %d\n", err); -- goto err_out_chrdev; -- } -- - hdmi_cec_class = class_create(THIS_MODULE, "mxc_hdmi_cec"); - if (IS_ERR(hdmi_cec_class)) { - err = PTR_ERR(hdmi_cec_class); -@@ -507,7 +571,7 @@ static int hdmi_cec_dev_probe(struct platform_device *pdev) - } - - temp_class = device_create(hdmi_cec_class, NULL, -- MKDEV(hdmi_cec_major, 0), NULL, "mxc_hdmi_cec"); -+ MKDEV(hdmi_cec_major, 0), NULL, "mxc_hdmi_cec"); - if (IS_ERR(temp_class)) { - err = PTR_ERR(temp_class); - goto err_out_class; -@@ -516,29 +580,44 @@ static int hdmi_cec_dev_probe(struct platform_device *pdev) - pinctrl = devm_pinctrl_get_select_default(&pdev->dev); - if (IS_ERR(pinctrl)) { - dev_err(&pdev->dev, "Can't get/select CEC pinctrl\n"); -+ err = PTR_ERR(pinctrl); - goto err_out_class; - } - -+ INIT_LIST_HEAD(&head); -+ - init_waitqueue_head(&hdmi_cec_queue); - init_waitqueue_head(&tx_cec_queue); - -- INIT_LIST_HEAD(&head); -- - mutex_init(&hdmi_cec_data.lock); -+ spin_lock_init(&hdmi_cec_data.irq_lock); -+ - hdmi_cec_data.Logical_address = 15; - hdmi_cec_data.tx_answer = CEC_TX_AVAIL; -+ INIT_WORK(&hdmi_cec_data.hdmi_cec_work, mxc_hdmi_cec_worker); -+ - platform_set_drvdata(pdev, &hdmi_cec_data); -- INIT_DELAYED_WORK(&hdmi_cec_data.hdmi_cec_work, mxc_hdmi_cec_worker); - -- dev_info(&pdev->dev, "HDMI CEC initialized\n"); -- goto out; -+ err = devm_request_irq(&pdev->dev, hdmi_cec_irq, mxc_hdmi_cec_isr, -+ IRQF_SHARED, dev_name(&pdev->dev), &hdmi_cec_data); -+ if (err < 0) { -+ dev_err(&pdev->dev, "Unable to request irq%d: %d\n", hdmi_cec_irq, err); -+ goto err_out_class; -+ } -+ -+ is_initialized = 1; -+ if (want_start) -+ hdmi_cec_start_device(); -+ -+ pr_info("HDMI-CEC initialized\n"); -+ return 0; - - err_out_class: - device_destroy(hdmi_cec_class, MKDEV(hdmi_cec_major, 0)); - class_destroy(hdmi_cec_class); - err_out_chrdev: - unregister_chrdev(hdmi_cec_major, "mxc_hdmi_cec"); --out: -+err_out: - return err; - } - -@@ -546,6 +625,9 @@ static int hdmi_cec_dev_remove(struct platform_device *pdev) - { - hdmi_cec_stop_device(); - -+ is_initialized = 0; -+ devm_free_irq(&pdev->dev, hdmi_cec_irq, &hdmi_cec_data); -+ - device_destroy(hdmi_cec_class, MKDEV(hdmi_cec_major, 0)); - class_destroy(hdmi_cec_class); - unregister_chrdev(hdmi_cec_major, "mxc_hdmi_cec"); -diff --git a/drivers/video/mxc/mxc_hdmi.c b/drivers/video/mxc/mxc_hdmi.c -index 55c39e1..591dde4 100644 ---- a/drivers/video/mxc/mxc_hdmi.c -+++ b/drivers/video/mxc/mxc_hdmi.c -@@ -212,7 +212,6 @@ static bool hdmi_inited; - static bool hdcp_init; - - extern const struct fb_videomode mxc_cea_mode[64]; --extern void mxc_hdmi_cec_handle(u16 cec_stat); - - extern int mxcfb_blank(int blank, struct fb_info *info); - -@@ -2204,7 +2203,8 @@ static void hotplug_worker(struct work_struct *work) - sprintf(event_string, "EVENT=plugin"); - kobject_uevent_env(&hdmi->pdev->dev.kobj, KOBJ_CHANGE, envp); - #ifdef CONFIG_MXC_HDMI_CEC -- mxc_hdmi_cec_handle(0x80); -+ if (hdmi->edid_cfg.hdmi_cap) -+ hdmi_cec_hpd_changed(1); - #endif - } else { - /* Plugout event */ -@@ -2216,7 +2216,8 @@ static void hotplug_worker(struct work_struct *work) - sprintf(event_string, "EVENT=plugout"); - kobject_uevent_env(&hdmi->pdev->dev.kobj, KOBJ_CHANGE, envp); - #ifdef CONFIG_MXC_HDMI_CEC -- mxc_hdmi_cec_handle(0x100); -+ if (hdmi->edid_cfg.hdmi_cap) -+ hdmi_cec_hpd_changed(0); - #endif - } - } -diff --git a/include/linux/mfd/mxc-hdmi-core.h b/include/linux/mfd/mxc-hdmi-core.h -index db16f5f..6c9c36d 100644 ---- a/include/linux/mfd/mxc-hdmi-core.h -+++ b/include/linux/mfd/mxc-hdmi-core.h -@@ -64,5 +64,6 @@ int check_hdmi_state(void); - - void hdmi_cec_start_device(void); - void hdmi_cec_stop_device(void); -+void hdmi_cec_hpd_changed(unsigned int state); - - #endif --- -1.9.1 - - -============================================================== -file 0006-MXC-CEC-Rename-variables-minor-code-style-cleanups.patch -============================================================== - -From 07f57cc3eea59941d627fb46c95776ce67309e5f Mon Sep 17 00:00:00 2001 -From: warped-rudi -Date: Wed, 9 Nov 2016 09:27:38 +0100 -Subject: [PATCH] MXC-CEC: Rename variables, minor code style cleanups - ---- - drivers/mxc/hdmi-cec/mxc_hdmi-cec.c | 112 ++++++++++++++++++------------------ - 1 file changed, 56 insertions(+), 56 deletions(-) - -diff --git a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -index f62bcbc..b0619ac 100644 ---- a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -+++ b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -@@ -75,13 +75,14 @@ - HDMI_IH_CEC_STAT0_ARB_LOST) - - struct hdmi_cec_priv { -- int receive_error; -- int send_error; -- u8 Logical_address; -- u8 cec_state; -+ int receive_error; -+ int send_error; - int tx_answer; - u32 cec_stat0; -+ u8 logical_address; -+ u8 is_started; - u8 link_status; -+ u8 open_count; - spinlock_t irq_lock; - struct work_struct hdmi_cec_work; - struct mutex lock; -@@ -95,19 +96,18 @@ struct hdmi_cec_event { - }; - - --static LIST_HEAD(head); -+static LIST_HEAD(ev_pending); - - static int hdmi_cec_irq; - static int hdmi_cec_major; - static struct class *hdmi_cec_class; - static struct hdmi_cec_priv hdmi_cec_data; --static u8 open_count; - static u8 want_start; - static u8 link_status; - static u8 is_initialized; - --static wait_queue_head_t hdmi_cec_queue; --static wait_queue_head_t tx_cec_queue; -+static wait_queue_head_t rx_queue; -+static wait_queue_head_t tx_queue; - - - static u32 get_hpd_stat(struct hdmi_cec_priv *hdmi_cec) -@@ -139,7 +139,7 @@ static irqreturn_t mxc_hdmi_cec_isr(int irq, void *data) - hdmi_writeb(cec_stat, HDMI_IH_CEC_STAT0); - - if ((cec_stat & ~CEC_STAT0_MASK_DEFAULT) == 0) { -- if (hdmi_cec->cec_state) -+ if (hdmi_cec->is_started) - hdmi_writeb(CEC_STAT0_MASK_DEFAULT, HDMI_IH_MUTE_CEC_STAT0); - spin_unlock_irqrestore(&hdmi_cec->irq_lock, flags); - return IRQ_NONE; -@@ -160,13 +160,13 @@ static void mxc_hdmi_cec_handle(u32 cec_stat) - u8 i = 0; - struct hdmi_cec_event *event = NULL; - -- if (!open_count) -+ if (!hdmi_cec_data.open_count) - return; - - /*The current transmission is successful (for initiator only).*/ - if (cec_stat & HDMI_IH_CEC_STAT0_DONE) { - hdmi_cec_data.tx_answer = cec_stat; -- wake_up(&tx_cec_queue); -+ wake_up(&tx_queue); - } - /*EOM is detected so that the received data is ready in the receiver data buffer*/ - if (cec_stat & HDMI_IH_CEC_STAT0_EOM) { -@@ -186,14 +186,14 @@ static void mxc_hdmi_cec_handle(u32 cec_stat) - event->msg[i] = hdmi_readb(HDMI_CEC_RX_DATA0+i); - hdmi_writeb(0x0, HDMI_CEC_LOCK); - mutex_lock(&hdmi_cec_data.lock); -- list_add_tail(&event->list, &head); -+ list_add_tail(&event->list, &ev_pending); - mutex_unlock(&hdmi_cec_data.lock); -- wake_up(&hdmi_cec_queue); -+ wake_up(&rx_queue); - } - /*An error is detected on cec line (for initiator only). */ - if (cec_stat & HDMI_IH_CEC_STAT0_ERROR_INIT) { - hdmi_cec_data.tx_answer = cec_stat; -- wake_up(&tx_cec_queue); -+ wake_up(&tx_queue); - return; - } - /*A frame is not acknowledged in a directly addressed message. Or a frame is negatively acknowledged in -@@ -201,7 +201,7 @@ static void mxc_hdmi_cec_handle(u32 cec_stat) - if (cec_stat & HDMI_IH_CEC_STAT0_NACK) { - hdmi_cec_data.send_error++; - hdmi_cec_data.tx_answer = cec_stat; -- wake_up(&tx_cec_queue); -+ wake_up(&tx_queue); - } - /*An error is notified by a follower. Abnormal logic data bit error (for follower).*/ - if (cec_stat & HDMI_IH_CEC_STAT0_ERROR_FOLL) { -@@ -218,9 +218,9 @@ static void mxc_hdmi_cec_handle(u32 cec_stat) - memset(event, 0, sizeof(struct hdmi_cec_event)); - event->event_type = MESSAGE_TYPE_CONNECTED; - mutex_lock(&hdmi_cec_data.lock); -- list_add_tail(&event->list, &head); -+ list_add_tail(&event->list, &ev_pending); - mutex_unlock(&hdmi_cec_data.lock); -- wake_up(&hdmi_cec_queue); -+ wake_up(&rx_queue); - } - /*HDMI cable disconnected*/ - if (cec_stat & CEC_STAT0_EX_DISCONNECTED) { -@@ -233,9 +233,9 @@ static void mxc_hdmi_cec_handle(u32 cec_stat) - memset(event, 0, sizeof(struct hdmi_cec_event)); - event->event_type = MESSAGE_TYPE_DISCONNECTED; - mutex_lock(&hdmi_cec_data.lock); -- list_add_tail(&event->list, &head); -+ list_add_tail(&event->list, &ev_pending); - mutex_unlock(&hdmi_cec_data.lock); -- wake_up(&hdmi_cec_queue); -+ wake_up(&rx_queue); - } - } - -@@ -247,22 +247,22 @@ static void mxc_hdmi_cec_worker(struct work_struct *work) - - spin_lock_irqsave(&hdmi_cec_data.irq_lock, flags); - hdmi_cec_data.cec_stat0 = 0; -- if (hdmi_cec_data.cec_state) -+ if (hdmi_cec_data.is_started) - hdmi_writeb(CEC_STAT0_MASK_DEFAULT, HDMI_IH_MUTE_CEC_STAT0); - spin_unlock_irqrestore(&hdmi_cec_data.irq_lock, flags); - } - --static int hdmi_cec_open(struct inode *inode, struct file *filp) -+static int hdmi_cec_open(struct inode *inode, struct file *file) - { - mutex_lock(&hdmi_cec_data.lock); -- if (open_count) { -+ if (hdmi_cec_data.open_count) { - mutex_unlock(&hdmi_cec_data.lock); - return -EBUSY; - } -- open_count = 1; -- filp->private_data = (void *)(&hdmi_cec_data); -- hdmi_cec_data.Logical_address = 15; -- hdmi_cec_data.cec_state = false; -+ hdmi_cec_data.open_count = 1; -+ file->private_data = (void *)(&hdmi_cec_data); -+ hdmi_cec_data.logical_address = 15; -+ hdmi_cec_data.is_started = false; - mutex_unlock(&hdmi_cec_data.lock); - return 0; - } -@@ -275,26 +275,26 @@ static ssize_t hdmi_cec_read(struct file *file, char __user *buf, size_t count, - pr_debug("function : %s\n", __func__); - - mutex_lock(&hdmi_cec_data.lock); -- if (!hdmi_cec_data.cec_state) { -+ if (!hdmi_cec_data.is_started) { - mutex_unlock(&hdmi_cec_data.lock); - return -EACCES; - } - -- if (list_empty(&head)) { -+ if (list_empty(&ev_pending)) { - if (file->f_flags & O_NONBLOCK) { - mutex_unlock(&hdmi_cec_data.lock); - return -EAGAIN; - } else { - do { - mutex_unlock(&hdmi_cec_data.lock); -- if (wait_event_interruptible(hdmi_cec_queue, (!list_empty(&head)))) -+ if (wait_event_interruptible(rx_queue, !list_empty(&ev_pending))) - return -ERESTARTSYS; - mutex_lock(&hdmi_cec_data.lock); -- } while (list_empty(&head)); -+ } while (list_empty(&ev_pending)); - } - } - -- event = list_first_entry(&head, struct hdmi_cec_event, list); -+ event = list_first_entry(&ev_pending, struct hdmi_cec_event, list); - list_del(&event->list); - mutex_unlock(&hdmi_cec_data.lock); - if (copy_to_user(buf, event, -@@ -311,19 +311,19 @@ static ssize_t hdmi_cec_write(struct file *file, const char __user *buf, - { - int ret = 0; - u8 i, msg_len, val; -- u8 msg[MAX_MESSAGE_LEN] = { 0 }; -+ u8 msg[MAX_MESSAGE_LEN]; - - pr_debug("function : %s\n", __func__); - - mutex_lock(&hdmi_cec_data.lock); - -- if (!hdmi_cec_data.cec_state) -+ if (!hdmi_cec_data.is_started) - ret = -EACCES; - else if (hdmi_cec_data.tx_answer != CEC_TX_AVAIL) - ret = -EBUSY; - else if (count > MAX_MESSAGE_LEN) - ret = -EINVAL; -- else if (copy_from_user(&msg, buf, count)) -+ else if (copy_from_user(msg, buf, count)) - ret = -EACCES; - - if (ret) { -@@ -345,7 +345,7 @@ static ssize_t hdmi_cec_write(struct file *file, const char __user *buf, - mutex_unlock(&hdmi_cec_data.lock); - - ret = wait_event_interruptible_timeout( -- tx_cec_queue, hdmi_cec_data.tx_answer != CEC_TX_INPROGRESS, HZ); -+ tx_queue, hdmi_cec_data.tx_answer != CEC_TX_INPROGRESS, HZ); - - if (ret < 0) { - ret = -ERESTARTSYS; -@@ -409,7 +409,7 @@ void hdmi_cec_start_device(void) - hdmi_writeb(val, HDMI_CEC_MASK); - hdmi_writeb(val, HDMI_IH_MUTE_CEC_STAT0); - hdmi_cec_data.link_status = link_status; -- hdmi_cec_data.cec_state = true; -+ hdmi_cec_data.is_started = true; - - spin_unlock_irqrestore(&hdmi_cec_data.irq_lock, flags); - } -@@ -427,7 +427,7 @@ void hdmi_cec_stop_device(void) - - spin_lock_irqsave(&hdmi_cec_data.irq_lock, flags); - -- hdmi_cec_data.cec_state = false; -+ hdmi_cec_data.is_started = false; - hdmi_writeb(0x10, HDMI_CEC_CTRL); - val = CEC_STAT0_MASK_ALL; - hdmi_writeb(val, HDMI_CEC_MASK); -@@ -442,7 +442,7 @@ void hdmi_cec_stop_device(void) - } - EXPORT_SYMBOL(hdmi_cec_stop_device); - --static long hdmi_cec_ioctl(struct file *filp, u_int cmd, -+static long hdmi_cec_ioctl(struct file *file, u_int cmd, - u_long arg) - { - int ret = 0, status = 0; -@@ -454,18 +454,18 @@ static long hdmi_cec_ioctl(struct file *filp, u_int cmd, - switch (cmd) { - case HDMICEC_IOC_SETLOGICALADDRESS: - mutex_lock(&hdmi_cec_data.lock); -- if (!hdmi_cec_data.cec_state) { -+ if (!hdmi_cec_data.is_started) { - mutex_unlock(&hdmi_cec_data.lock); - pr_err("Trying to set logical address while not started\n"); - return -EACCES; - } -- hdmi_cec_data.Logical_address = (u8)arg; -- if (hdmi_cec_data.Logical_address <= 7) { -- val = 1 << hdmi_cec_data.Logical_address; -+ hdmi_cec_data.logical_address = (u8)arg; -+ if (hdmi_cec_data.logical_address <= 7) { -+ val = 1 << hdmi_cec_data.logical_address; - hdmi_writeb(val, HDMI_CEC_ADDR_L); - hdmi_writeb(0, HDMI_CEC_ADDR_H); -- } else if (hdmi_cec_data.Logical_address > 7 && hdmi_cec_data.Logical_address <= 15) { -- val = 1 << (hdmi_cec_data.Logical_address - 8); -+ } else if (hdmi_cec_data.logical_address > 7 && hdmi_cec_data.logical_address <= 15) { -+ val = 1 << (hdmi_cec_data.logical_address - 8); - hdmi_writeb(val, HDMI_CEC_ADDR_H); - hdmi_writeb(0, HDMI_CEC_ADDR_L); - } else -@@ -493,20 +493,20 @@ static long hdmi_cec_ioctl(struct file *filp, u_int cmd, - return ret; - } - --static int hdmi_cec_release(struct inode *inode, struct file *filp) -+static int hdmi_cec_release(struct inode *inode, struct file *file) - { - struct hdmi_cec_event *event, *tmp_event; - - pr_debug("function : %s\n", __func__); - - mutex_lock(&hdmi_cec_data.lock); -- if (open_count) { -- open_count = 0; -- hdmi_cec_data.cec_state = false; -- hdmi_cec_data.Logical_address = 15; -+ if (hdmi_cec_data.open_count) { -+ hdmi_cec_data.open_count = 0; -+ hdmi_cec_data.is_started = false; -+ hdmi_cec_data.logical_address = 15; - - /* Flush eventual events which have not been read by user space */ -- list_for_each_entry_safe(event, tmp_event, &head, list) { -+ list_for_each_entry_safe(event, tmp_event, &ev_pending, list) { - list_del(&event->list); - vfree(event); - } -@@ -522,12 +522,12 @@ static unsigned int hdmi_cec_poll(struct file *file, poll_table *wait) - - pr_debug("function : %s\n", __func__); - -- poll_wait(file, &hdmi_cec_queue, wait); -+ poll_wait(file, &rx_queue, wait); - - /* Always writable */ - mask = (POLLOUT | POLLWRNORM); - mutex_lock(&hdmi_cec_data.lock); -- if (!list_empty(&head)) -+ if (!list_empty(&ev_pending)) - mask |= (POLLIN | POLLRDNORM); - mutex_unlock(&hdmi_cec_data.lock); - return mask; -@@ -584,15 +584,15 @@ static int hdmi_cec_dev_probe(struct platform_device *pdev) - goto err_out_class; - } - -- INIT_LIST_HEAD(&head); -+ INIT_LIST_HEAD(&ev_pending); - -- init_waitqueue_head(&hdmi_cec_queue); -- init_waitqueue_head(&tx_cec_queue); -+ init_waitqueue_head(&rx_queue); -+ init_waitqueue_head(&tx_queue); - - mutex_init(&hdmi_cec_data.lock); - spin_lock_init(&hdmi_cec_data.irq_lock); - -- hdmi_cec_data.Logical_address = 15; -+ hdmi_cec_data.logical_address = 15; - hdmi_cec_data.tx_answer = CEC_TX_AVAIL; - INIT_WORK(&hdmi_cec_data.hdmi_cec_work, mxc_hdmi_cec_worker); - --- -1.9.1 - - -============================================================== -file 0007-MXC-CEC-Use-a-more-efficient-buffer-allocation-schem.patch -============================================================== - -From 0205ed2cfff7bbeb8ecd9a17cd068309468aa323 Mon Sep 17 00:00:00 2001 -From: warped-rudi -Date: Wed, 9 Nov 2016 09:27:38 +0100 -Subject: [PATCH] MXC-CEC: Use a more efficient buffer allocation scheme - ---- - drivers/mxc/hdmi-cec/mxc_hdmi-cec.c | 170 ++++++++++++++++++++++++------------ - 1 file changed, 115 insertions(+), 55 deletions(-) - -diff --git a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -index b0619ac..22447cf 100644 ---- a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -+++ b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -@@ -96,6 +96,7 @@ struct hdmi_cec_event { - }; - - -+static LIST_HEAD(ev_idle); - static LIST_HEAD(ev_pending); - - static int hdmi_cec_irq; -@@ -110,6 +111,60 @@ static wait_queue_head_t rx_queue; - static wait_queue_head_t tx_queue; - - -+static struct hdmi_cec_event *alloc_event(void) -+{ -+ int i; -+ struct hdmi_cec_event *event; -+ -+ if (list_empty(&ev_idle)) { -+ event = (void *)__get_free_page(GFP_KERNEL); -+ -+ if (!event) { -+ pr_err("HDMI-CEC: Failed to allocate event buffer\n"); -+ return NULL; -+ } -+ -+ for (i = 1; i < PAGE_SIZE / sizeof(struct hdmi_cec_event); i++) -+ list_add_tail(&event[i].list, &ev_idle); -+ -+ pr_debug("HDMI-CEC: Allocated event buffer page: @%08lx (%d)\n", -+ (unsigned long)event, i); -+ } else { -+ event = list_first_entry(&ev_idle, struct hdmi_cec_event, list); -+ list_del(&event->list); -+ } -+ -+ memset(event, 0, sizeof(struct hdmi_cec_event)); -+ return event; -+} -+ -+static void free_events(void) -+{ -+ struct hdmi_cec_event *event, *tmp_event; -+ -+ /* Flush events which have not been read by user space */ -+ list_splice_init(&ev_pending, &ev_idle); -+ -+ /* Find item(s) starting on a page boundary */ -+ list_for_each_entry_safe(event, tmp_event, &ev_idle, list) { -+ if (((unsigned long)event & ~PAGE_MASK) == 0) -+ list_move_tail(&event->list, &ev_pending); -+ } -+ -+ /* Discard idle list */ -+ INIT_LIST_HEAD(&ev_idle); -+ -+ /* Empty pending list and free page(s) */ -+ while (!list_empty(&ev_pending)) { -+ event = list_first_entry(&ev_pending, struct hdmi_cec_event, list); -+ list_del(&event->list); -+ free_page((unsigned long)event); -+ -+ pr_debug("HDMI-CEC: Freed event buffer page: @%08lx\n", -+ (unsigned long)event); -+ } -+} -+ - static u32 get_hpd_stat(struct hdmi_cec_priv *hdmi_cec) - { - u32 cec_stat0 = 0; -@@ -157,12 +212,29 @@ static irqreturn_t mxc_hdmi_cec_isr(int irq, void *data) - - static void mxc_hdmi_cec_handle(u32 cec_stat) - { -- u8 i = 0; -- struct hdmi_cec_event *event = NULL; -+ int i; -+ struct hdmi_cec_event *event; - - if (!hdmi_cec_data.open_count) - return; - -+ /*HDMI cable connected: handle first*/ -+ if (cec_stat & CEC_STAT0_EX_CONNECTED) { -+ pr_info("HDMI-CEC: link connected\n"); -+ -+ mutex_lock(&hdmi_cec_data.lock); -+ event = alloc_event(); -+ if (!event) { -+ mutex_unlock(&hdmi_cec_data.lock); -+ return; -+ } -+ event->event_type = MESSAGE_TYPE_CONNECTED; -+ list_add_tail(&event->list, &ev_pending); -+ mutex_unlock(&hdmi_cec_data.lock); -+ -+ wake_up(&rx_queue); -+ } -+ - /*The current transmission is successful (for initiator only).*/ - if (cec_stat & HDMI_IH_CEC_STAT0_DONE) { - hdmi_cec_data.tx_answer = cec_stat; -@@ -170,24 +242,28 @@ static void mxc_hdmi_cec_handle(u32 cec_stat) - } - /*EOM is detected so that the received data is ready in the receiver data buffer*/ - if (cec_stat & HDMI_IH_CEC_STAT0_EOM) { -- event = vmalloc(sizeof(struct hdmi_cec_event)); -- if (NULL == event) { -- pr_err("%s: Not enough memory!\n", __func__); -+ mutex_lock(&hdmi_cec_data.lock); -+ event = alloc_event(); -+ if (!event) { -+ mutex_unlock(&hdmi_cec_data.lock); - return; - } -- memset(event, 0, sizeof(struct hdmi_cec_event)); -+ - event->msg_len = hdmi_readb(HDMI_CEC_RX_CNT); -- if (!event->msg_len) { -- pr_err("%s: Invalid CEC message length!\n", __func__); -+ if (!event->msg_len || event->msg_len > MAX_MESSAGE_LEN) { -+ pr_err("HDMI-CEC: Invalid CEC message length\n"); -+ list_add_tail(&event->list, &ev_idle); -+ mutex_unlock(&hdmi_cec_data.lock); - return; - } -+ - event->event_type = MESSAGE_TYPE_RECEIVE_SUCCESS; - for (i = 0; i < event->msg_len; i++) -- event->msg[i] = hdmi_readb(HDMI_CEC_RX_DATA0+i); -- hdmi_writeb(0x0, HDMI_CEC_LOCK); -- mutex_lock(&hdmi_cec_data.lock); -+ event->msg[i] = hdmi_readb(HDMI_CEC_RX_DATA0 + i); -+ - list_add_tail(&event->list, &ev_pending); - mutex_unlock(&hdmi_cec_data.lock); -+ - wake_up(&rx_queue); - } - /*An error is detected on cec line (for initiator only). */ -@@ -207,34 +283,21 @@ static void mxc_hdmi_cec_handle(u32 cec_stat) - if (cec_stat & HDMI_IH_CEC_STAT0_ERROR_FOLL) { - hdmi_cec_data.receive_error++; - } -- /*HDMI cable connected*/ -- if (cec_stat & CEC_STAT0_EX_CONNECTED) { -- pr_info("HDMI-CEC: link connected\n"); -- event = vmalloc(sizeof(struct hdmi_cec_event)); -- if (NULL == event) { -- pr_err("%s: Not enough memory\n", __func__); -- return; -- } -- memset(event, 0, sizeof(struct hdmi_cec_event)); -- event->event_type = MESSAGE_TYPE_CONNECTED; -- mutex_lock(&hdmi_cec_data.lock); -- list_add_tail(&event->list, &ev_pending); -- mutex_unlock(&hdmi_cec_data.lock); -- wake_up(&rx_queue); -- } -- /*HDMI cable disconnected*/ -+ -+ /*HDMI cable disconnected: handle last*/ - if (cec_stat & CEC_STAT0_EX_DISCONNECTED) { - pr_info("HDMI-CEC: link disconnected\n"); -- event = vmalloc(sizeof(struct hdmi_cec_event)); -- if (NULL == event) { -- pr_err("%s: Not enough memory!\n", __func__); -+ -+ mutex_lock(&hdmi_cec_data.lock); -+ event = alloc_event(); -+ if (!event) { -+ mutex_unlock(&hdmi_cec_data.lock); - return; - } -- memset(event, 0, sizeof(struct hdmi_cec_event)); - event->event_type = MESSAGE_TYPE_DISCONNECTED; -- mutex_lock(&hdmi_cec_data.lock); - list_add_tail(&event->list, &ev_pending); - mutex_unlock(&hdmi_cec_data.lock); -+ - wake_up(&rx_queue); - } - } -@@ -245,6 +308,9 @@ static void mxc_hdmi_cec_worker(struct work_struct *work) - - mxc_hdmi_cec_handle(hdmi_cec_data.cec_stat0); - -+ if (hdmi_cec_data.cec_stat0 & HDMI_IH_CEC_STAT0_EOM) -+ hdmi_writeb(0x0, HDMI_CEC_LOCK); -+ - spin_lock_irqsave(&hdmi_cec_data.irq_lock, flags); - hdmi_cec_data.cec_stat0 = 0; - if (hdmi_cec_data.is_started) -@@ -270,7 +336,8 @@ static int hdmi_cec_open(struct inode *inode, struct file *file) - static ssize_t hdmi_cec_read(struct file *file, char __user *buf, size_t count, - loff_t *ppos) - { -- struct hdmi_cec_event *event = NULL; -+ ssize_t len; -+ struct hdmi_cec_event *event; - - pr_debug("function : %s\n", __func__); - -@@ -284,26 +351,24 @@ static ssize_t hdmi_cec_read(struct file *file, char __user *buf, size_t count, - if (file->f_flags & O_NONBLOCK) { - mutex_unlock(&hdmi_cec_data.lock); - return -EAGAIN; -- } else { -- do { -- mutex_unlock(&hdmi_cec_data.lock); -- if (wait_event_interruptible(rx_queue, !list_empty(&ev_pending))) -- return -ERESTARTSYS; -- mutex_lock(&hdmi_cec_data.lock); -- } while (list_empty(&ev_pending)); - } -+ -+ do { -+ mutex_unlock(&hdmi_cec_data.lock); -+ if (wait_event_interruptible(rx_queue, !list_empty(&ev_pending))) -+ return -ERESTARTSYS; -+ mutex_lock(&hdmi_cec_data.lock); -+ } while (list_empty(&ev_pending)); - } - -+ len = offsetof(struct hdmi_cec_event, list); - event = list_first_entry(&ev_pending, struct hdmi_cec_event, list); -- list_del(&event->list); -+ if (copy_to_user(buf, event, len)) -+ len = -EFAULT; -+ list_move_tail(&event->list, &ev_idle); - mutex_unlock(&hdmi_cec_data.lock); -- if (copy_to_user(buf, event, -- sizeof(struct hdmi_cec_event) - sizeof(struct list_head))) { -- vfree(event); -- return -EFAULT; -- } -- vfree(event); -- return (sizeof(struct hdmi_cec_event) - sizeof(struct list_head)); -+ -+ return len; - } - - static ssize_t hdmi_cec_write(struct file *file, const char __user *buf, -@@ -495,8 +560,6 @@ static long hdmi_cec_ioctl(struct file *file, u_int cmd, - - static int hdmi_cec_release(struct inode *inode, struct file *file) - { -- struct hdmi_cec_event *event, *tmp_event; -- - pr_debug("function : %s\n", __func__); - - mutex_lock(&hdmi_cec_data.lock); -@@ -505,11 +568,7 @@ static int hdmi_cec_release(struct inode *inode, struct file *file) - hdmi_cec_data.is_started = false; - hdmi_cec_data.logical_address = 15; - -- /* Flush eventual events which have not been read by user space */ -- list_for_each_entry_safe(event, tmp_event, &ev_pending, list) { -- list_del(&event->list); -- vfree(event); -- } -+ free_events(); - } - mutex_unlock(&hdmi_cec_data.lock); - -@@ -584,6 +643,7 @@ static int hdmi_cec_dev_probe(struct platform_device *pdev) - goto err_out_class; - } - -+ INIT_LIST_HEAD(&ev_idle); - INIT_LIST_HEAD(&ev_pending); - - init_waitqueue_head(&rx_queue); --- -1.9.1 - - -============================================================== -file 0008-MXC-CEC-Fix-message-length-while-keeping-compatibili.patch -============================================================== - -From 19dd5ab55ca121073d35d104a49431b8c3cf3cf1 Mon Sep 17 00:00:00 2001 -From: warped-rudi -Date: Wed, 9 Nov 2016 09:27:38 +0100 -Subject: [PATCH] MXC-CEC: Fix message length while keeping compatibility with - old client libs - ---- - drivers/mxc/hdmi-cec/mxc_hdmi-cec.c | 18 +++++++++++++----- - 1 file changed, 13 insertions(+), 5 deletions(-) - -diff --git a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -index 22447cf..8777320 100644 ---- a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -+++ b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -@@ -47,7 +47,7 @@ - #include "mxc_hdmi-cec.h" - - --#define MAX_MESSAGE_LEN 17 -+#define MAX_MESSAGE_LEN 16 - - #define MESSAGE_TYPE_RECEIVE_SUCCESS 1 - #define MESSAGE_TYPE_NOACK 2 -@@ -92,6 +92,7 @@ struct hdmi_cec_event { - int event_type; - int msg_len; - u8 msg[MAX_MESSAGE_LEN]; -+ u8 padding[4]; /* compatibility with old userland */ - struct list_head list; - }; - -@@ -336,15 +337,21 @@ static int hdmi_cec_open(struct inode *inode, struct file *file) - static ssize_t hdmi_cec_read(struct file *file, char __user *buf, size_t count, - loff_t *ppos) - { -- ssize_t len; -+ ssize_t len = 0; - struct hdmi_cec_event *event; - - pr_debug("function : %s\n", __func__); - - mutex_lock(&hdmi_cec_data.lock); -- if (!hdmi_cec_data.is_started) { -+ -+ if (!hdmi_cec_data.is_started) -+ len = -EACCES; -+ else if (count < offsetof(struct hdmi_cec_event, padding)) -+ len = -EINVAL; -+ -+ if (len < 0) { - mutex_unlock(&hdmi_cec_data.lock); -- return -EACCES; -+ return len; - } - - if (list_empty(&ev_pending)) { -@@ -361,7 +368,8 @@ static ssize_t hdmi_cec_read(struct file *file, char __user *buf, size_t count, - } while (list_empty(&ev_pending)); - } - -- len = offsetof(struct hdmi_cec_event, list); -+ /* Hack: older versions of libcec attempt to read more bytes than we provide */ -+ len = min(count, offsetof(struct hdmi_cec_event, list)); - event = list_first_entry(&ev_pending, struct hdmi_cec_event, list); - if (copy_to_user(buf, event, len)) - len = -EFAULT; --- -1.9.1 - - -============================================================== -file 0009-MXC-CEC-Change-return-codes-and-add-poll-support-for.patch -============================================================== - -From 57a5e256cca14fdf8f4dabd839bf21762cff2eaa Mon Sep 17 00:00:00 2001 -From: warped-rudi -Date: Wed, 9 Nov 2016 09:27:39 +0100 -Subject: [PATCH] MXC-CEC: Change return codes and add poll support for write - function - ---- - drivers/mxc/hdmi-cec/mxc_hdmi-cec.c | 31 ++++++++++++++++++------------- - 1 file changed, 18 insertions(+), 13 deletions(-) - -diff --git a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -index 8777320..8134cc8 100644 ---- a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -+++ b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -@@ -328,6 +328,7 @@ static int hdmi_cec_open(struct inode *inode, struct file *file) - } - hdmi_cec_data.open_count = 1; - file->private_data = (void *)(&hdmi_cec_data); -+ hdmi_cec_data.tx_answer = CEC_TX_AVAIL; - hdmi_cec_data.logical_address = 15; - hdmi_cec_data.is_started = false; - mutex_unlock(&hdmi_cec_data.lock); -@@ -393,7 +394,9 @@ static ssize_t hdmi_cec_write(struct file *file, const char __user *buf, - if (!hdmi_cec_data.is_started) - ret = -EACCES; - else if (hdmi_cec_data.tx_answer != CEC_TX_AVAIL) -- ret = -EBUSY; -+ ret = -EAGAIN; -+ else if (hdmi_cec_data.link_status != 1) -+ ret = -EAGAIN; - else if (count > MAX_MESSAGE_LEN) - ret = -EINVAL; - else if (copy_from_user(msg, buf, count)) -@@ -420,18 +423,15 @@ static ssize_t hdmi_cec_write(struct file *file, const char __user *buf, - ret = wait_event_interruptible_timeout( - tx_queue, hdmi_cec_data.tx_answer != CEC_TX_INPROGRESS, HZ); - -- if (ret < 0) { -+ if (ret < 0) - ret = -ERESTARTSYS; -- goto tx_out; -- } -- -- if (hdmi_cec_data.tx_answer & HDMI_IH_CEC_STAT0_DONE) -- /* msg correctly sent */ -- ret = msg_len; -+ else if (hdmi_cec_data.tx_answer & HDMI_IH_CEC_STAT0_DONE) -+ ret = msg_len; /* msg sent, ACK received */ -+ else if (hdmi_cec_data.tx_answer & HDMI_IH_CEC_STAT0_NACK) -+ ret = -EIO; /* msg sent, NACK received */ - else -- ret = -EIO; -+ ret = -EPIPE; /* other error */ - --tx_out: - hdmi_cec_data.tx_answer = CEC_TX_AVAIL; - return ret; - } -@@ -575,6 +575,7 @@ static int hdmi_cec_release(struct inode *inode, struct file *file) - hdmi_cec_data.open_count = 0; - hdmi_cec_data.is_started = false; - hdmi_cec_data.logical_address = 15; -+ hdmi_cec_data.tx_answer = CEC_TX_AVAIL; - - free_events(); - } -@@ -590,13 +591,17 @@ static unsigned int hdmi_cec_poll(struct file *file, poll_table *wait) - pr_debug("function : %s\n", __func__); - - poll_wait(file, &rx_queue, wait); -+ poll_wait(file, &tx_queue, wait); -+ -+ if (hdmi_cec_data.link_status == 1 && -+ hdmi_cec_data.tx_answer == CEC_TX_AVAIL) -+ mask |= POLLOUT | POLLWRNORM; - -- /* Always writable */ -- mask = (POLLOUT | POLLWRNORM); - mutex_lock(&hdmi_cec_data.lock); - if (!list_empty(&ev_pending)) -- mask |= (POLLIN | POLLRDNORM); -+ mask |= POLLIN | POLLRDNORM; - mutex_unlock(&hdmi_cec_data.lock); -+ - return mask; - } - --- -1.9.1 - - -============================================================== -file 0010-MXC-CEC-Use-instance-data-pointer-whenever-possible.patch -============================================================== - -From 8f0d740e104758b558d8209d4736e7fcf0238b8e Mon Sep 17 00:00:00 2001 -From: warped-rudi -Date: Wed, 9 Nov 2016 09:27:39 +0100 -Subject: [PATCH] MXC-CEC: Use instance data pointer whenever possible - ---- - drivers/mxc/hdmi-cec/mxc_hdmi-cec.c | 191 +++++++++++++++++++----------------- - 1 file changed, 100 insertions(+), 91 deletions(-) - -diff --git a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -index 8134cc8..80344d9 100644 ---- a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -+++ b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -@@ -183,11 +183,11 @@ static u32 get_hpd_stat(struct hdmi_cec_priv *hdmi_cec) - - static irqreturn_t mxc_hdmi_cec_isr(int irq, void *data) - { -- struct hdmi_cec_priv *hdmi_cec = data; -+ struct hdmi_cec_priv *priv = data; - unsigned long flags; - u8 cec_stat; - -- spin_lock_irqsave(&hdmi_cec->irq_lock, flags); -+ spin_lock_irqsave(&priv->irq_lock, flags); - - hdmi_writeb(CEC_STAT0_MASK_ALL, HDMI_IH_MUTE_CEC_STAT0); - -@@ -195,58 +195,58 @@ static irqreturn_t mxc_hdmi_cec_isr(int irq, void *data) - hdmi_writeb(cec_stat, HDMI_IH_CEC_STAT0); - - if ((cec_stat & ~CEC_STAT0_MASK_DEFAULT) == 0) { -- if (hdmi_cec->is_started) -+ if (priv->is_started) - hdmi_writeb(CEC_STAT0_MASK_DEFAULT, HDMI_IH_MUTE_CEC_STAT0); -- spin_unlock_irqrestore(&hdmi_cec->irq_lock, flags); -+ spin_unlock_irqrestore(&priv->irq_lock, flags); - return IRQ_NONE; - } - - pr_debug("HDMI-CEC: interrupt received\n"); - -- hdmi_cec->cec_stat0 = cec_stat | get_hpd_stat(hdmi_cec); -- schedule_work(&hdmi_cec->hdmi_cec_work); -+ priv->cec_stat0 = cec_stat | get_hpd_stat(priv); -+ schedule_work(&priv->hdmi_cec_work); - -- spin_unlock_irqrestore(&hdmi_cec->irq_lock, flags); -+ spin_unlock_irqrestore(&priv->irq_lock, flags); - - return IRQ_HANDLED; - } - --static void mxc_hdmi_cec_handle(u32 cec_stat) -+static void mxc_hdmi_cec_handle(struct hdmi_cec_priv *priv, u32 cec_stat) - { - int i; - struct hdmi_cec_event *event; - -- if (!hdmi_cec_data.open_count) -+ if (!priv->open_count) - return; - - /*HDMI cable connected: handle first*/ - if (cec_stat & CEC_STAT0_EX_CONNECTED) { - pr_info("HDMI-CEC: link connected\n"); - -- mutex_lock(&hdmi_cec_data.lock); -+ mutex_lock(&priv->lock); - event = alloc_event(); - if (!event) { -- mutex_unlock(&hdmi_cec_data.lock); -+ mutex_unlock(&priv->lock); - return; - } - event->event_type = MESSAGE_TYPE_CONNECTED; - list_add_tail(&event->list, &ev_pending); -- mutex_unlock(&hdmi_cec_data.lock); -+ mutex_unlock(&priv->lock); - - wake_up(&rx_queue); - } - - /*The current transmission is successful (for initiator only).*/ - if (cec_stat & HDMI_IH_CEC_STAT0_DONE) { -- hdmi_cec_data.tx_answer = cec_stat; -+ priv->tx_answer = cec_stat; - wake_up(&tx_queue); - } - /*EOM is detected so that the received data is ready in the receiver data buffer*/ - if (cec_stat & HDMI_IH_CEC_STAT0_EOM) { -- mutex_lock(&hdmi_cec_data.lock); -+ mutex_lock(&priv->lock); - event = alloc_event(); - if (!event) { -- mutex_unlock(&hdmi_cec_data.lock); -+ mutex_unlock(&priv->lock); - return; - } - -@@ -254,7 +254,7 @@ static void mxc_hdmi_cec_handle(u32 cec_stat) - if (!event->msg_len || event->msg_len > MAX_MESSAGE_LEN) { - pr_err("HDMI-CEC: Invalid CEC message length\n"); - list_add_tail(&event->list, &ev_idle); -- mutex_unlock(&hdmi_cec_data.lock); -+ mutex_unlock(&priv->lock); - return; - } - -@@ -263,41 +263,41 @@ static void mxc_hdmi_cec_handle(u32 cec_stat) - event->msg[i] = hdmi_readb(HDMI_CEC_RX_DATA0 + i); - - list_add_tail(&event->list, &ev_pending); -- mutex_unlock(&hdmi_cec_data.lock); -+ mutex_unlock(&priv->lock); - - wake_up(&rx_queue); - } - /*An error is detected on cec line (for initiator only). */ - if (cec_stat & HDMI_IH_CEC_STAT0_ERROR_INIT) { -- hdmi_cec_data.tx_answer = cec_stat; -+ priv->tx_answer = cec_stat; - wake_up(&tx_queue); - return; - } - /*A frame is not acknowledged in a directly addressed message. Or a frame is negatively acknowledged in - a broadcast message (for initiator only).*/ - if (cec_stat & HDMI_IH_CEC_STAT0_NACK) { -- hdmi_cec_data.send_error++; -- hdmi_cec_data.tx_answer = cec_stat; -+ priv->send_error++; -+ priv->tx_answer = cec_stat; - wake_up(&tx_queue); - } - /*An error is notified by a follower. Abnormal logic data bit error (for follower).*/ - if (cec_stat & HDMI_IH_CEC_STAT0_ERROR_FOLL) { -- hdmi_cec_data.receive_error++; -+ priv->receive_error++; - } - - /*HDMI cable disconnected: handle last*/ - if (cec_stat & CEC_STAT0_EX_DISCONNECTED) { - pr_info("HDMI-CEC: link disconnected\n"); - -- mutex_lock(&hdmi_cec_data.lock); -+ mutex_lock(&priv->lock); - event = alloc_event(); - if (!event) { -- mutex_unlock(&hdmi_cec_data.lock); -+ mutex_unlock(&priv->lock); - return; - } - event->event_type = MESSAGE_TYPE_DISCONNECTED; - list_add_tail(&event->list, &ev_pending); -- mutex_unlock(&hdmi_cec_data.lock); -+ mutex_unlock(&priv->lock); - - wake_up(&rx_queue); - } -@@ -306,32 +306,36 @@ static void mxc_hdmi_cec_handle(u32 cec_stat) - static void mxc_hdmi_cec_worker(struct work_struct *work) - { - unsigned long flags; -+ struct hdmi_cec_priv *priv = &hdmi_cec_data; - -- mxc_hdmi_cec_handle(hdmi_cec_data.cec_stat0); -+ mxc_hdmi_cec_handle(priv, priv->cec_stat0); - -- if (hdmi_cec_data.cec_stat0 & HDMI_IH_CEC_STAT0_EOM) -+ if (priv->cec_stat0 & HDMI_IH_CEC_STAT0_EOM) - hdmi_writeb(0x0, HDMI_CEC_LOCK); - -- spin_lock_irqsave(&hdmi_cec_data.irq_lock, flags); -- hdmi_cec_data.cec_stat0 = 0; -- if (hdmi_cec_data.is_started) -+ spin_lock_irqsave(&priv->irq_lock, flags); -+ priv->cec_stat0 = 0; -+ if (priv->is_started) - hdmi_writeb(CEC_STAT0_MASK_DEFAULT, HDMI_IH_MUTE_CEC_STAT0); -- spin_unlock_irqrestore(&hdmi_cec_data.irq_lock, flags); -+ spin_unlock_irqrestore(&priv->irq_lock, flags); - } - - static int hdmi_cec_open(struct inode *inode, struct file *file) - { -- mutex_lock(&hdmi_cec_data.lock); -- if (hdmi_cec_data.open_count) { -- mutex_unlock(&hdmi_cec_data.lock); -+ struct hdmi_cec_priv *priv = &hdmi_cec_data; -+ -+ mutex_lock(&priv->lock); -+ if (priv->open_count) { -+ mutex_unlock(&priv->lock); - return -EBUSY; - } -- hdmi_cec_data.open_count = 1; -- file->private_data = (void *)(&hdmi_cec_data); -- hdmi_cec_data.tx_answer = CEC_TX_AVAIL; -- hdmi_cec_data.logical_address = 15; -- hdmi_cec_data.is_started = false; -- mutex_unlock(&hdmi_cec_data.lock); -+ file->private_data = priv; -+ -+ priv->tx_answer = CEC_TX_AVAIL; -+ priv->logical_address = 15; -+ priv->is_started = false; -+ priv->open_count = 1; -+ mutex_unlock(&priv->lock); - return 0; - } - -@@ -340,32 +344,33 @@ static ssize_t hdmi_cec_read(struct file *file, char __user *buf, size_t count, - { - ssize_t len = 0; - struct hdmi_cec_event *event; -+ struct hdmi_cec_priv *priv = file->private_data; - - pr_debug("function : %s\n", __func__); - -- mutex_lock(&hdmi_cec_data.lock); -+ mutex_lock(&priv->lock); - -- if (!hdmi_cec_data.is_started) -+ if (!priv->is_started) - len = -EACCES; - else if (count < offsetof(struct hdmi_cec_event, padding)) - len = -EINVAL; - - if (len < 0) { -- mutex_unlock(&hdmi_cec_data.lock); -+ mutex_unlock(&priv->lock); - return len; - } - - if (list_empty(&ev_pending)) { - if (file->f_flags & O_NONBLOCK) { -- mutex_unlock(&hdmi_cec_data.lock); -+ mutex_unlock(&priv->lock); - return -EAGAIN; - } - - do { -- mutex_unlock(&hdmi_cec_data.lock); -+ mutex_unlock(&priv->lock); - if (wait_event_interruptible(rx_queue, !list_empty(&ev_pending))) - return -ERESTARTSYS; -- mutex_lock(&hdmi_cec_data.lock); -+ mutex_lock(&priv->lock); - } while (list_empty(&ev_pending)); - } - -@@ -375,7 +380,7 @@ static ssize_t hdmi_cec_read(struct file *file, char __user *buf, size_t count, - if (copy_to_user(buf, event, len)) - len = -EFAULT; - list_move_tail(&event->list, &ev_idle); -- mutex_unlock(&hdmi_cec_data.lock); -+ mutex_unlock(&priv->lock); - - return len; - } -@@ -386,16 +391,17 @@ static ssize_t hdmi_cec_write(struct file *file, const char __user *buf, - int ret = 0; - u8 i, msg_len, val; - u8 msg[MAX_MESSAGE_LEN]; -+ struct hdmi_cec_priv *priv = file->private_data; - - pr_debug("function : %s\n", __func__); - -- mutex_lock(&hdmi_cec_data.lock); -+ mutex_lock(&priv->lock); - -- if (!hdmi_cec_data.is_started) -+ if (!priv->is_started) - ret = -EACCES; -- else if (hdmi_cec_data.tx_answer != CEC_TX_AVAIL) -+ else if (priv->tx_answer != CEC_TX_AVAIL) - ret = -EAGAIN; -- else if (hdmi_cec_data.link_status != 1) -+ else if (priv->link_status != 1) - ret = -EAGAIN; - else if (count > MAX_MESSAGE_LEN) - ret = -EINVAL; -@@ -403,12 +409,12 @@ static ssize_t hdmi_cec_write(struct file *file, const char __user *buf, - ret = -EACCES; - - if (ret) { -- mutex_unlock(&hdmi_cec_data.lock); -+ mutex_unlock(&priv->lock); - return ret; - } - -- hdmi_cec_data.send_error = 0; -- hdmi_cec_data.tx_answer = CEC_TX_INPROGRESS; -+ priv->send_error = 0; -+ priv->tx_answer = CEC_TX_INPROGRESS; - - msg_len = count; - hdmi_writeb(msg_len, HDMI_CEC_TX_CNT); -@@ -418,40 +424,41 @@ static ssize_t hdmi_cec_write(struct file *file, const char __user *buf, - val |= 0x01; - hdmi_writeb(val, HDMI_CEC_CTRL); - -- mutex_unlock(&hdmi_cec_data.lock); -+ mutex_unlock(&priv->lock); - - ret = wait_event_interruptible_timeout( -- tx_queue, hdmi_cec_data.tx_answer != CEC_TX_INPROGRESS, HZ); -+ tx_queue, priv->tx_answer != CEC_TX_INPROGRESS, HZ); - - if (ret < 0) - ret = -ERESTARTSYS; -- else if (hdmi_cec_data.tx_answer & HDMI_IH_CEC_STAT0_DONE) -+ else if (priv->tx_answer & HDMI_IH_CEC_STAT0_DONE) - ret = msg_len; /* msg sent, ACK received */ -- else if (hdmi_cec_data.tx_answer & HDMI_IH_CEC_STAT0_NACK) -+ else if (priv->tx_answer & HDMI_IH_CEC_STAT0_NACK) - ret = -EIO; /* msg sent, NACK received */ - else - ret = -EPIPE; /* other error */ - -- hdmi_cec_data.tx_answer = CEC_TX_AVAIL; -+ priv->tx_answer = CEC_TX_AVAIL; - return ret; - } - - void hdmi_cec_hpd_changed(unsigned int state) - { -+ u32 cec_stat0; - unsigned long flags; -- u32 cec_stat0; -+ struct hdmi_cec_priv *priv = &hdmi_cec_data; - - pr_debug("function : %s\n", __func__); - - link_status = state & 1; - - if (is_initialized) { -- spin_lock_irqsave(&hdmi_cec_data.irq_lock, flags); -- cec_stat0 = get_hpd_stat(&hdmi_cec_data); -- spin_unlock_irqrestore(&hdmi_cec_data.irq_lock, flags); -+ spin_lock_irqsave(&priv->irq_lock, flags); -+ cec_stat0 = get_hpd_stat(priv); -+ spin_unlock_irqrestore(&priv->irq_lock, flags); - - if (cec_stat0) -- mxc_hdmi_cec_handle(cec_stat0); -+ mxc_hdmi_cec_handle(priv, cec_stat0); - } - } - EXPORT_SYMBOL(hdmi_cec_hpd_changed); -@@ -515,35 +522,35 @@ void hdmi_cec_stop_device(void) - } - EXPORT_SYMBOL(hdmi_cec_stop_device); - --static long hdmi_cec_ioctl(struct file *file, u_int cmd, -- u_long arg) -+static long hdmi_cec_ioctl(struct file *file, u_int cmd, u_long arg) - { -- int ret = 0, status = 0; -- u8 val = 0; -+ u8 val; -+ int ret = 0; - struct mxc_edid_cfg hdmi_edid_cfg; -+ struct hdmi_cec_priv *priv = file->private_data; - - pr_debug("function : %s\n", __func__); - - switch (cmd) { - case HDMICEC_IOC_SETLOGICALADDRESS: -- mutex_lock(&hdmi_cec_data.lock); -- if (!hdmi_cec_data.is_started) { -- mutex_unlock(&hdmi_cec_data.lock); -+ mutex_lock(&priv->lock); -+ if (!priv->is_started) { -+ mutex_unlock(&priv->lock); - pr_err("Trying to set logical address while not started\n"); - return -EACCES; - } -- hdmi_cec_data.logical_address = (u8)arg; -- if (hdmi_cec_data.logical_address <= 7) { -- val = 1 << hdmi_cec_data.logical_address; -+ priv->logical_address = (u8)arg; -+ if (priv->logical_address <= 7) { -+ val = 1 << priv->logical_address; - hdmi_writeb(val, HDMI_CEC_ADDR_L); - hdmi_writeb(0, HDMI_CEC_ADDR_H); -- } else if (hdmi_cec_data.logical_address > 7 && hdmi_cec_data.logical_address <= 15) { -- val = 1 << (hdmi_cec_data.logical_address - 8); -+ } else if (priv->logical_address <= 15) { -+ val = 1 << (priv->logical_address - 8); - hdmi_writeb(val, HDMI_CEC_ADDR_H); - hdmi_writeb(0, HDMI_CEC_ADDR_L); - } else - ret = -EINVAL; -- mutex_unlock(&hdmi_cec_data.lock); -+ mutex_unlock(&priv->lock); - break; - case HDMICEC_IOC_STARTDEVICE: - hdmi_cec_start_device(); -@@ -553,10 +560,9 @@ static long hdmi_cec_ioctl(struct file *file, u_int cmd, - break; - case HDMICEC_IOC_GETPHYADDRESS: - hdmi_get_edid_cfg(&hdmi_edid_cfg); -- status = copy_to_user((void __user *)arg, -- &hdmi_edid_cfg.physical_address, -- 4*sizeof(u8)); -- if (status) -+ if (copy_to_user((void __user *)arg, -+ &hdmi_edid_cfg.physical_address, -+ 4 * sizeof(u8))) - ret = -EFAULT; - break; - default: -@@ -568,18 +574,20 @@ static long hdmi_cec_ioctl(struct file *file, u_int cmd, - - static int hdmi_cec_release(struct inode *inode, struct file *file) - { -+ struct hdmi_cec_priv *priv = &hdmi_cec_data; -+ - pr_debug("function : %s\n", __func__); - -- mutex_lock(&hdmi_cec_data.lock); -- if (hdmi_cec_data.open_count) { -- hdmi_cec_data.open_count = 0; -- hdmi_cec_data.is_started = false; -- hdmi_cec_data.logical_address = 15; -- hdmi_cec_data.tx_answer = CEC_TX_AVAIL; -+ mutex_lock(&priv->lock); -+ if (priv->open_count) { -+ priv->open_count = 0; -+ priv->is_started = false; -+ priv->logical_address = 15; -+ priv->tx_answer = CEC_TX_AVAIL; - - free_events(); - } -- mutex_unlock(&hdmi_cec_data.lock); -+ mutex_unlock(&priv->lock); - - return 0; - } -@@ -587,20 +595,21 @@ static int hdmi_cec_release(struct inode *inode, struct file *file) - static unsigned int hdmi_cec_poll(struct file *file, poll_table *wait) - { - unsigned int mask = 0; -+ struct hdmi_cec_priv *priv = file->private_data; - - pr_debug("function : %s\n", __func__); - - poll_wait(file, &rx_queue, wait); - poll_wait(file, &tx_queue, wait); - -- if (hdmi_cec_data.link_status == 1 && -- hdmi_cec_data.tx_answer == CEC_TX_AVAIL) -+ if (priv->link_status == 1 && -+ priv->tx_answer == CEC_TX_AVAIL) - mask |= POLLOUT | POLLWRNORM; - -- mutex_lock(&hdmi_cec_data.lock); -+ mutex_lock(&priv->lock); - if (!list_empty(&ev_pending)) - mask |= POLLIN | POLLRDNORM; -- mutex_unlock(&hdmi_cec_data.lock); -+ mutex_unlock(&priv->lock); - - return mask; - } --- -1.9.1 - - -============================================================== -file 0010-assign-minor-to-vhci.patch -============================================================== - -From 27b8b64082db6cdfda751e81e56c0f668053834b Mon Sep 17 00:00:00 2001 -From: Lucas De Marchi -Date: Tue, 18 Feb 2014 02:19:26 -0300 -Subject: [PATCH] Bluetooth: allocate static minor for vhci - -Commit bfacbb9 (Bluetooth: Use devname:vhci module alias for virtual HCI -driver) added the module alias to hci_vhci module so it's possible to -create the /dev/vhci node. However creating an alias without -specifying the minor doesn't allow us to create the node ahead, -triggerring module auto-load when it's first accessed. - -Starting with depmod from kmod 16 we started to warn if there's a -devname alias without specifying the major and minor. - -Let's do the same done for uhid, kvm, fuse and others, specifying a -fixed minor. In systems with systemd as the init the following will -happen: on early boot systemd will call "kmod static-nodes" to read -/lib/modules/$(uname -r)/modules.devname and then create the nodes. When -first accessed these "dead" nodes will trigger the module loading. - -Signed-off-by: Lucas De Marchi -Acked-by: Greg Kroah-Hartman -Signed-off-by: Marcel Holtmann ---- - Documentation/devices.txt | 1 + - drivers/bluetooth/hci_vhci.c | 3 ++- - include/linux/miscdevice.h | 1 + - 3 files changed, 4 insertions(+), 1 deletion(-) - -diff --git a/Documentation/devices.txt b/Documentation/devices.txt -index 10378cc..04356f5 100644 ---- a/Documentation/devices.txt -+++ b/Documentation/devices.txt -@@ -353,6 +353,7 @@ Your cooperation is appreciated. - 133 = /dev/exttrp External device trap - 134 = /dev/apm_bios Advanced Power Management BIOS - 135 = /dev/rtc Real Time Clock -+ 137 = /dev/vhci Bluetooth virtual HCI driver - 139 = /dev/openprom SPARC OpenBoot PROM - 140 = /dev/relay8 Berkshire Products Octal relay card - 141 = /dev/relay16 Berkshire Products ISO-16 relay card -diff --git a/drivers/bluetooth/hci_vhci.c b/drivers/bluetooth/hci_vhci.c -index 1ef6990..add1c6a 100644 ---- a/drivers/bluetooth/hci_vhci.c -+++ b/drivers/bluetooth/hci_vhci.c -@@ -360,7 +360,7 @@ static const struct file_operations vhci_fops = { - static struct miscdevice vhci_miscdev= { - .name = "vhci", - .fops = &vhci_fops, -- .minor = MISC_DYNAMIC_MINOR, -+ .minor = VHCI_MINOR, - }; - - static int __init vhci_init(void) -@@ -386,3 +386,4 @@ MODULE_DESCRIPTION("Bluetooth virtual HCI driver ver " VERSION); - MODULE_VERSION(VERSION); - MODULE_LICENSE("GPL"); - MODULE_ALIAS("devname:vhci"); -+MODULE_ALIAS_MISCDEV(VHCI_MINOR); -diff --git a/include/linux/miscdevice.h b/include/linux/miscdevice.h -index 3737f72..7bb6148 100644 ---- a/include/linux/miscdevice.h -+++ b/include/linux/miscdevice.h -@@ -23,6 +23,7 @@ - #define TEMP_MINOR 131 /* Temperature Sensor */ - #define RTC_MINOR 135 - #define EFI_RTC_MINOR 136 /* EFI Time services */ -+#define VHCI_MINOR 137 - #define SUN_OPENPROM_MINOR 139 - #define DMAPI_MINOR 140 /* DMAPI */ - #define NVRAM_MINOR 144 - -============================================================== -file 0011-MXC-CEC-Re-order-functions-and-remove-debug-trace-me.patch -============================================================== - -From aeefcbe8831cbdd5a54a1144b89a4d8e2a427e2c Mon Sep 17 00:00:00 2001 -From: warped-rudi -Date: Wed, 9 Nov 2016 09:27:39 +0100 -Subject: [PATCH] MXC-CEC: Re-order functions and remove debug trace messages - ---- - drivers/mxc/hdmi-cec/mxc_hdmi-cec.c | 239 ++++++++++++++++++------------------ - 1 file changed, 118 insertions(+), 121 deletions(-) - -diff --git a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -index 80344d9..fcf2a28 100644 ---- a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -+++ b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -@@ -241,6 +241,7 @@ static void mxc_hdmi_cec_handle(struct hdmi_cec_priv *priv, u32 cec_stat) - priv->tx_answer = cec_stat; - wake_up(&tx_queue); - } -+ - /*EOM is detected so that the received data is ready in the receiver data buffer*/ - if (cec_stat & HDMI_IH_CEC_STAT0_EOM) { - mutex_lock(&priv->lock); -@@ -267,12 +268,14 @@ static void mxc_hdmi_cec_handle(struct hdmi_cec_priv *priv, u32 cec_stat) - - wake_up(&rx_queue); - } -+ - /*An error is detected on cec line (for initiator only). */ - if (cec_stat & HDMI_IH_CEC_STAT0_ERROR_INIT) { - priv->tx_answer = cec_stat; - wake_up(&tx_queue); - return; - } -+ - /*A frame is not acknowledged in a directly addressed message. Or a frame is negatively acknowledged in - a broadcast message (for initiator only).*/ - if (cec_stat & HDMI_IH_CEC_STAT0_NACK) { -@@ -280,6 +283,7 @@ static void mxc_hdmi_cec_handle(struct hdmi_cec_priv *priv, u32 cec_stat) - priv->tx_answer = cec_stat; - wake_up(&tx_queue); - } -+ - /*An error is notified by a follower. Abnormal logic data bit error (for follower).*/ - if (cec_stat & HDMI_IH_CEC_STAT0_ERROR_FOLL) { - priv->receive_error++; -@@ -320,6 +324,89 @@ static void mxc_hdmi_cec_worker(struct work_struct *work) - spin_unlock_irqrestore(&priv->irq_lock, flags); - } - -+ -+void hdmi_cec_hpd_changed(unsigned int state) -+{ -+ u32 cec_stat0; -+ unsigned long flags; -+ struct hdmi_cec_priv *priv = &hdmi_cec_data; -+ -+ pr_debug("function : %s (%d)\n", __func__, state); -+ -+ link_status = state & 1; -+ -+ if (is_initialized) { -+ spin_lock_irqsave(&priv->irq_lock, flags); -+ cec_stat0 = get_hpd_stat(priv); -+ spin_unlock_irqrestore(&priv->irq_lock, flags); -+ -+ if (cec_stat0) -+ mxc_hdmi_cec_handle(priv, cec_stat0); -+ } -+} -+EXPORT_SYMBOL(hdmi_cec_hpd_changed); -+ -+void hdmi_cec_start_device(void) -+{ -+ u8 val; -+ unsigned long flags; -+ -+ if (!is_initialized) { -+ want_start = 1; -+ return; -+ } -+ -+ spin_lock_irqsave(&hdmi_cec_data.irq_lock, flags); -+ -+ val = hdmi_readb(HDMI_MC_CLKDIS); -+ val &= ~HDMI_MC_CLKDIS_CECCLK_DISABLE; -+ hdmi_writeb(val, HDMI_MC_CLKDIS); -+ hdmi_writeb(0x02, HDMI_CEC_CTRL); -+ /* Force read unlock */ -+ hdmi_writeb(0x0, HDMI_CEC_LOCK); -+ -+ val = HDMI_IH_CEC_STAT0_ERROR_INIT | HDMI_IH_CEC_STAT0_NACK | -+ HDMI_IH_CEC_STAT0_EOM | HDMI_IH_CEC_STAT0_DONE; -+ hdmi_writeb(val, HDMI_CEC_POLARITY); -+ -+ val = CEC_STAT0_MASK_DEFAULT; -+ hdmi_writeb(val, HDMI_CEC_MASK); -+ hdmi_writeb(val, HDMI_IH_MUTE_CEC_STAT0); -+ hdmi_cec_data.link_status = link_status; -+ hdmi_cec_data.is_started = true; -+ -+ spin_unlock_irqrestore(&hdmi_cec_data.irq_lock, flags); -+} -+EXPORT_SYMBOL(hdmi_cec_start_device); -+ -+void hdmi_cec_stop_device(void) -+{ -+ u8 val; -+ unsigned long flags; -+ -+ if (!is_initialized) { -+ want_start = 0; -+ return; -+ } -+ -+ spin_lock_irqsave(&hdmi_cec_data.irq_lock, flags); -+ -+ hdmi_cec_data.is_started = false; -+ hdmi_writeb(0x10, HDMI_CEC_CTRL); -+ val = CEC_STAT0_MASK_ALL; -+ hdmi_writeb(val, HDMI_CEC_MASK); -+ hdmi_writeb(val, HDMI_IH_MUTE_CEC_STAT0); -+ -+ hdmi_writeb(0x0, HDMI_CEC_POLARITY); -+ val = hdmi_readb(HDMI_MC_CLKDIS); -+ val |= HDMI_MC_CLKDIS_CECCLK_DISABLE; -+ hdmi_writeb(val, HDMI_MC_CLKDIS); -+ -+ spin_unlock_irqrestore(&hdmi_cec_data.irq_lock, flags); -+} -+EXPORT_SYMBOL(hdmi_cec_stop_device); -+ -+ - static int hdmi_cec_open(struct inode *inode, struct file *file) - { - struct hdmi_cec_priv *priv = &hdmi_cec_data; -@@ -339,6 +426,24 @@ static int hdmi_cec_open(struct inode *inode, struct file *file) - return 0; - } - -+static int hdmi_cec_release(struct inode *inode, struct file *file) -+{ -+ struct hdmi_cec_priv *priv = file->private_data; -+ -+ mutex_lock(&priv->lock); -+ if (priv->open_count) { -+ priv->open_count = 0; -+ priv->is_started = false; -+ priv->logical_address = 15; -+ priv->tx_answer = CEC_TX_AVAIL; -+ -+ free_events(); -+ } -+ mutex_unlock(&priv->lock); -+ -+ return 0; -+} -+ - static ssize_t hdmi_cec_read(struct file *file, char __user *buf, size_t count, - loff_t *ppos) - { -@@ -346,8 +451,6 @@ static ssize_t hdmi_cec_read(struct file *file, char __user *buf, size_t count, - struct hdmi_cec_event *event; - struct hdmi_cec_priv *priv = file->private_data; - -- pr_debug("function : %s\n", __func__); -- - mutex_lock(&priv->lock); - - if (!priv->is_started) -@@ -393,8 +496,6 @@ static ssize_t hdmi_cec_write(struct file *file, const char __user *buf, - u8 msg[MAX_MESSAGE_LEN]; - struct hdmi_cec_priv *priv = file->private_data; - -- pr_debug("function : %s\n", __func__); -- - mutex_lock(&priv->lock); - - if (!priv->is_started) -@@ -442,85 +543,25 @@ static ssize_t hdmi_cec_write(struct file *file, const char __user *buf, - return ret; - } - --void hdmi_cec_hpd_changed(unsigned int state) --{ -- u32 cec_stat0; -- unsigned long flags; -- struct hdmi_cec_priv *priv = &hdmi_cec_data; -- -- pr_debug("function : %s\n", __func__); -- -- link_status = state & 1; -- -- if (is_initialized) { -- spin_lock_irqsave(&priv->irq_lock, flags); -- cec_stat0 = get_hpd_stat(priv); -- spin_unlock_irqrestore(&priv->irq_lock, flags); -- -- if (cec_stat0) -- mxc_hdmi_cec_handle(priv, cec_stat0); -- } --} --EXPORT_SYMBOL(hdmi_cec_hpd_changed); -- --void hdmi_cec_start_device(void) -+static unsigned int hdmi_cec_poll(struct file *file, poll_table *wait) - { -- u8 val; -- unsigned long flags; -- -- if (!is_initialized) { -- want_start = 1; -- return; -- } -- -- spin_lock_irqsave(&hdmi_cec_data.irq_lock, flags); -- -- val = hdmi_readb(HDMI_MC_CLKDIS); -- val &= ~HDMI_MC_CLKDIS_CECCLK_DISABLE; -- hdmi_writeb(val, HDMI_MC_CLKDIS); -- hdmi_writeb(0x02, HDMI_CEC_CTRL); -- /* Force read unlock */ -- hdmi_writeb(0x0, HDMI_CEC_LOCK); -- -- val = HDMI_IH_CEC_STAT0_ERROR_INIT | HDMI_IH_CEC_STAT0_NACK | HDMI_IH_CEC_STAT0_EOM | HDMI_IH_CEC_STAT0_DONE; -- hdmi_writeb(val, HDMI_CEC_POLARITY); -- -- val = CEC_STAT0_MASK_DEFAULT; -- hdmi_writeb(val, HDMI_CEC_MASK); -- hdmi_writeb(val, HDMI_IH_MUTE_CEC_STAT0); -- hdmi_cec_data.link_status = link_status; -- hdmi_cec_data.is_started = true; -- -- spin_unlock_irqrestore(&hdmi_cec_data.irq_lock, flags); --} --EXPORT_SYMBOL(hdmi_cec_start_device); -- --void hdmi_cec_stop_device(void) --{ -- u8 val; -- unsigned long flags; -- -- if (!is_initialized) { -- want_start = 0; -- return; -- } -+ unsigned int mask = 0; -+ struct hdmi_cec_priv *priv = file->private_data; - -- spin_lock_irqsave(&hdmi_cec_data.irq_lock, flags); -+ poll_wait(file, &rx_queue, wait); -+ poll_wait(file, &tx_queue, wait); - -- hdmi_cec_data.is_started = false; -- hdmi_writeb(0x10, HDMI_CEC_CTRL); -- val = CEC_STAT0_MASK_ALL; -- hdmi_writeb(val, HDMI_CEC_MASK); -- hdmi_writeb(val, HDMI_IH_MUTE_CEC_STAT0); -+ if (priv->link_status == 1 && -+ priv->tx_answer == CEC_TX_AVAIL) -+ mask |= POLLOUT | POLLWRNORM; - -- hdmi_writeb(0x0, HDMI_CEC_POLARITY); -- val = hdmi_readb(HDMI_MC_CLKDIS); -- val |= HDMI_MC_CLKDIS_CECCLK_DISABLE; -- hdmi_writeb(val, HDMI_MC_CLKDIS); -+ mutex_lock(&priv->lock); -+ if (!list_empty(&ev_pending)) -+ mask |= POLLIN | POLLRDNORM; -+ mutex_unlock(&priv->lock); - -- spin_unlock_irqrestore(&hdmi_cec_data.irq_lock, flags); -+ return mask; - } --EXPORT_SYMBOL(hdmi_cec_stop_device); - - static long hdmi_cec_ioctl(struct file *file, u_int cmd, u_long arg) - { -@@ -529,8 +570,6 @@ static long hdmi_cec_ioctl(struct file *file, u_int cmd, u_long arg) - struct mxc_edid_cfg hdmi_edid_cfg; - struct hdmi_cec_priv *priv = file->private_data; - -- pr_debug("function : %s\n", __func__); -- - switch (cmd) { - case HDMICEC_IOC_SETLOGICALADDRESS: - mutex_lock(&priv->lock); -@@ -572,48 +611,6 @@ static long hdmi_cec_ioctl(struct file *file, u_int cmd, u_long arg) - return ret; - } - --static int hdmi_cec_release(struct inode *inode, struct file *file) --{ -- struct hdmi_cec_priv *priv = &hdmi_cec_data; -- -- pr_debug("function : %s\n", __func__); -- -- mutex_lock(&priv->lock); -- if (priv->open_count) { -- priv->open_count = 0; -- priv->is_started = false; -- priv->logical_address = 15; -- priv->tx_answer = CEC_TX_AVAIL; -- -- free_events(); -- } -- mutex_unlock(&priv->lock); -- -- return 0; --} -- --static unsigned int hdmi_cec_poll(struct file *file, poll_table *wait) --{ -- unsigned int mask = 0; -- struct hdmi_cec_priv *priv = file->private_data; -- -- pr_debug("function : %s\n", __func__); -- -- poll_wait(file, &rx_queue, wait); -- poll_wait(file, &tx_queue, wait); -- -- if (priv->link_status == 1 && -- priv->tx_answer == CEC_TX_AVAIL) -- mask |= POLLOUT | POLLWRNORM; -- -- mutex_lock(&priv->lock); -- if (!list_empty(&ev_pending)) -- mask |= POLLIN | POLLRDNORM; -- mutex_unlock(&priv->lock); -- -- return mask; --} -- - - const struct file_operations hdmi_cec_fops = { - .owner = THIS_MODULE, --- -1.9.1 - - -============================================================== -file 0012-MXC-CEC-Provide-send-notifications.patch -============================================================== - -From 73230c020f3fb1385046890df1695d1bc2e6082e Mon Sep 17 00:00:00 2001 -From: warped-rudi -Date: Wed, 9 Nov 2016 09:27:40 +0100 -Subject: [PATCH] MXC-CEC: Provide send notifications - ---- - drivers/mxc/hdmi-cec/mxc_hdmi-cec.c | 19 +++++++++++++++++++ - 1 file changed, 19 insertions(+) - -diff --git a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -index fcf2a28..dfb4aa4 100644 ---- a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -+++ b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -@@ -494,6 +494,7 @@ static ssize_t hdmi_cec_write(struct file *file, const char __user *buf, - int ret = 0; - u8 i, msg_len, val; - u8 msg[MAX_MESSAGE_LEN]; -+ struct hdmi_cec_event *event; - struct hdmi_cec_priv *priv = file->private_data; - - mutex_lock(&priv->lock); -@@ -540,6 +541,24 @@ static ssize_t hdmi_cec_write(struct file *file, const char __user *buf, - ret = -EPIPE; /* other error */ - - priv->tx_answer = CEC_TX_AVAIL; -+ -+ if (ret >= 0 || ret == -EIO) { -+ mutex_lock(&priv->lock); -+ -+ event = alloc_event(); -+ if (event) { -+ event->event_type = (ret == -EIO) ? -+ MESSAGE_TYPE_NOACK : MESSAGE_TYPE_SEND_SUCCESS; -+ event->msg_len = msg_len; -+ memcpy(event->msg, msg, msg_len); -+ -+ list_add_tail(&event->list, &ev_pending); -+ wake_up(&rx_queue); -+ } -+ -+ mutex_unlock(&priv->lock); -+ } -+ - return ret; - } - --- -1.9.1 - - -============================================================== -file 0013-MXC-CEC-Enable-transmissions-retries-in-case-of-erro.patch -============================================================== - -From 0fd44cc4dc2fb1f5a0cb26aa74a2c11af1b0d79e Mon Sep 17 00:00:00 2001 -From: warped-rudi -Date: Wed, 9 Nov 2016 17:25:01 +0100 -Subject: [PATCH] MXC-CEC: Enable transmissions retries in case of errors and - NACKs - ---- - drivers/mxc/hdmi-cec/mxc_hdmi-cec.c | 29 +++++++++++++++-------------- - 1 file changed, 15 insertions(+), 14 deletions(-) - -diff --git a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -index dfb4aa4..4d22e38 100644 ---- a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -+++ b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c -@@ -58,6 +58,9 @@ - #define CEC_TX_INPROGRESS -1 - #define CEC_TX_AVAIL 0 - -+#define CEC_TX_RETRIES 3 -+ -+ - /* These flags must not collide with HDMI_IH_CEC_STAT0_xxxx */ - #define CEC_STAT0_EX_CONNECTED 0x0100 - #define CEC_STAT0_EX_DISCONNECTED 0x0200 -@@ -214,6 +217,7 @@ static irqreturn_t mxc_hdmi_cec_isr(int irq, void *data) - static void mxc_hdmi_cec_handle(struct hdmi_cec_priv *priv, u32 cec_stat) - { - int i; -+ u8 val; - struct hdmi_cec_event *event; - - if (!priv->open_count) -@@ -270,18 +274,16 @@ static void mxc_hdmi_cec_handle(struct hdmi_cec_priv *priv, u32 cec_stat) - } - - /*An error is detected on cec line (for initiator only). */ -- if (cec_stat & HDMI_IH_CEC_STAT0_ERROR_INIT) { -- priv->tx_answer = cec_stat; -- wake_up(&tx_queue); -- return; -- } -- - /*A frame is not acknowledged in a directly addressed message. Or a frame is negatively acknowledged in - a broadcast message (for initiator only).*/ -- if (cec_stat & HDMI_IH_CEC_STAT0_NACK) { -- priv->send_error++; -- priv->tx_answer = cec_stat; -- wake_up(&tx_queue); -+ if (cec_stat & (HDMI_IH_CEC_STAT0_ERROR_INIT | HDMI_IH_CEC_STAT0_NACK)) { -+ if (++priv->send_error < CEC_TX_RETRIES) { -+ val = hdmi_readb(HDMI_CEC_CTRL) & ~0x07; -+ hdmi_writeb(val | 0x01, HDMI_CEC_CTRL); -+ } else { -+ priv->tx_answer = cec_stat; -+ wake_up(&tx_queue); -+ } - } - - /*An error is notified by a follower. Abnormal logic data bit error (for follower).*/ -@@ -521,10 +523,9 @@ static ssize_t hdmi_cec_write(struct file *file, const char __user *buf, - msg_len = count; - hdmi_writeb(msg_len, HDMI_CEC_TX_CNT); - for (i = 0; i < msg_len; i++) -- hdmi_writeb(msg[i], HDMI_CEC_TX_DATA0+i); -- val = hdmi_readb(HDMI_CEC_CTRL); -- val |= 0x01; -- hdmi_writeb(val, HDMI_CEC_CTRL); -+ hdmi_writeb(msg[i], HDMI_CEC_TX_DATA0 + i); -+ val = hdmi_readb(HDMI_CEC_CTRL) & ~0x07; -+ hdmi_writeb(val | 0x03, HDMI_CEC_CTRL); - - mutex_unlock(&priv->lock); - --- -1.9.1 - - -============================================================== -file 1100-ARM-Avoid-crash-on-power-off-and-reduce-power-consum.patch -============================================================== - -From 7a4bc357a0d2477c0dcdf2a1c471e57050dec041 Mon Sep 17 00:00:00 2001 -From: Rudi -Date: Sat, 20 Sep 2014 14:05:50 +0200 -Subject: [PATCH] ARM: Avoid crash on power off and reduce power consumption - in 'halt' state. - -Signed-off-by: Rudi ---- - arch/arm/kernel/process.c | 19 +++++++++++++++---- - 1 file changed, 15 insertions(+), 4 deletions(-) - -diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c -index 1bdd78b..70655b9 100644 ---- a/arch/arm/kernel/process.c -+++ b/arch/arm/kernel/process.c -@@ -119,6 +119,17 @@ static void null_restart(enum reboot_mode reboot_mode, const char *cmd) - } - - /* -+ * Enter non-interruptable CPU halt state -+ */ -+static void cpu_halt(void) -+{ -+ local_irq_disable(); -+ -+ while (1) -+ cpu_do_idle(); -+} -+ -+/* - * Function pointers to optional machine specific functions - */ - void (*pm_power_off)(void); -@@ -202,8 +213,7 @@ void machine_halt(void) - local_irq_disable(); - smp_send_stop(); - -- local_irq_disable(); -- while (1); -+ cpu_halt(); - } - - /* -@@ -219,6 +229,8 @@ void machine_power_off(void) - - if (pm_power_off) - pm_power_off(); -+ -+ cpu_halt(); - } - - /* -@@ -244,8 +256,7 @@ void machine_restart(char *cmd) - - /* Whoops - the platform was unable to reboot. Tell the user! */ - printk("Reboot failed -- System halted\n"); -- local_irq_disable(); -- while (1); -+ cpu_halt(); - } - - void __show_regs(struct pt_regs *regs) --- -1.7.9.5 - - -============================================================== -file 1101-ARM-Disable-timer-events-before-entering-halt-state.patch -============================================================== - -From ae0f301a11bb9d5e484d48238cf15082928a7241 Mon Sep 17 00:00:00 2001 -From: Rudi -Date: Sun, 21 Sep 2014 13:53:21 +0200 -Subject: [PATCH] ARM: Disable timer events before entering `halt' state. - -Signed-off-by: Rudi ---- - arch/arm/kernel/process.c | 3 ++- - arch/arm/mach-imx/time.c | 11 +++++++++++ - 2 files changed, 13 insertions(+), 1 deletion(-) - -diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c -index 70655b9..d1e4763 100644 ---- a/arch/arm/kernel/process.c -+++ b/arch/arm/kernel/process.c -@@ -123,8 +123,9 @@ static void null_restart(enum reboot_mode reboot_mode, const char *cmd) - */ - static void cpu_halt(void) - { -+ clockevents_suspend(); -+ - local_irq_disable(); -- - while (1) - cpu_do_idle(); - } -diff --git a/arch/arm/mach-imx/time.c b/arch/arm/mach-imx/time.c -index ae61dfd..75afcf9 100644 ---- a/arch/arm/mach-imx/time.c -+++ b/arch/arm/mach-imx/time.c -@@ -232,6 +232,16 @@ static void mxc_set_mode(enum clock_event_mode mode, - } - } - -+ -+/* -+ * Shutdown timer -+ */ -+static void mxc_suspend(struct clock_event_device *evt) -+{ -+ mxc_set_mode(CLOCK_EVT_MODE_SHUTDOWN, evt); -+} -+ -+ - /* - * IRQ handler for the timer - */ -@@ -262,6 +272,7 @@ static struct clock_event_device clockevent_mxc = { - .name = "mxc_timer1", - .features = CLOCK_EVT_FEAT_ONESHOT, - .set_mode = mxc_set_mode, -+ .suspend = mxc_suspend, - .set_next_event = mx1_2_set_next_event, - .rating = 200, - }; --- -1.7.9.5 - - -============================================================== -file 1104-interlaced-fix.patch -============================================================== - -From d6c338100ddd885a7acb1d0cf12da90fa7ac2b93 Mon Sep 17 00:00:00 2001 -From: Rudi -Date: Wed, 30 Dec 2015 11:01:32 +0100 -Subject: [PATCH] video: ipu_disp: Fix internal VSYNC clock for interlaced - modes - -Signed-off-by: Rudi ---- - drivers/mxc/ipu3/ipu_disp.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/mxc/ipu3/ipu_disp.c b/drivers/mxc/ipu3/ipu_disp.c -index b5e21c5..96464b2 100644 ---- a/drivers/mxc/ipu3/ipu_disp.c -+++ b/drivers/mxc/ipu3/ipu_disp.c -@@ -2065,7 +2065,7 @@ int32_t ipu_init_sync_panel(struct ipu_soc *ipu, int disp, uint32_t pixel_clk, - _ipu_di_sync_config(ipu, - disp, /* display */ - DI_SYNC_COUNT_1, /* counter */ -- v_total*2 - 1, /* run count */ -+ v_total - 1, /* run count */ - (3 - 1), /* run_resolution, counter 1 can reference to counter 6,7,8 with run_resolution=2,3,4 */ - 1, /* offset */ - (3 - 1), /* offset resolution, 3=counter 7 */ --- -1.9.1 - - -============================================================== -file 1110-video-mxc_hdmi-Use-common-function-to-insert-video-m.patch -============================================================== - -From a86bd823319cf21eec118f238e2d3e97ede3690f Mon Sep 17 00:00:00 2001 -From: Rudi -Date: Thu, 24 Dec 2015 08:13:24 +0100 -Subject: [PATCH] video: mxc_hdmi: Use common function to insert video modes - -To simplify further development we move the mode list entry -creation into a single function. - -Signed-off-by: Rudi ---- - drivers/video/mxc/mxc_hdmi.c | 145 ++++++++++++++++++------------------------- - 1 file changed, 60 insertions(+), 85 deletions(-) - -diff --git a/drivers/video/mxc/mxc_hdmi.c b/drivers/video/mxc/mxc_hdmi.c -index 55c39e1..f71c1dd 100644 ---- a/drivers/video/mxc/mxc_hdmi.c -+++ b/drivers/video/mxc/mxc_hdmi.c -@@ -1740,7 +1740,8 @@ static int mxc_edid_read_internal(struct mxc_hdmi *hdmi, unsigned char *edid, - - static int mxc_hdmi_read_edid(struct mxc_hdmi *hdmi) - { -- int ret; -+ int ret, n; -+ struct fb_videomode *mode; - u8 edid_old[HDMI_EDID_LEN]; - u8 clkdis; - -@@ -1774,19 +1775,36 @@ static int mxc_hdmi_read_edid(struct mxc_hdmi *hdmi) - - } - -- if (ret < 0) -+ if (ret < 0) { -+ dev_err(&hdmi->pdev->dev, "Failed to read EDID\n"); - return HDMI_EDID_FAIL; -+ } - - if (memcmp(edid_old, hdmi->edid, HDMI_EDID_LEN) == 0) { -- dev_info(&hdmi->pdev->dev, "same edid\n"); -+ dev_info(&hdmi->pdev->dev, "Same EDID\n"); - return HDMI_EDID_SAME; - } - - if (hdmi->fbi->monspecs.modedb_len == 0) { -- dev_info(&hdmi->pdev->dev, "No modes read from edid\n"); -+ dev_warn(&hdmi->pdev->dev, "No modes read from EDID\n"); - return HDMI_EDID_NO_MODES; - } - -+ /* TODO: Is this really neccessary? */ -+ mode = hdmi->fbi->monspecs.modedb; -+ n = hdmi->fbi->monspecs.modedb_len; -+ while (n--) { -+ if ((mode->flag & FB_MODE_IS_STANDARD) && -+ !(mode->vmode & FB_VMODE_ASPECT_MASK)) { -+ if (mode->yres == (mode->xres * 3)/4) -+ mode->vmode |= FB_VMODE_ASPECT_4_3; -+ else -+ mode->vmode |= FB_VMODE_ASPECT_16_9; -+ } -+ -+ mode++; -+ } -+ - return HDMI_EDID_SUCCESS; - } - -@@ -1928,51 +1946,53 @@ static void mxc_hdmi_notify_fb(struct mxc_hdmi *hdmi, bool force_all) - dev_dbg(&hdmi->pdev->dev, "%s exit\n", __func__); - } - --static void mxc_hdmi_edid_rebuild_modelist(struct mxc_hdmi *hdmi) -+static void mxc_hdmi_create_modelist(struct mxc_hdmi *hdmi, int from_edid) - { -- int i, vic; -- struct fb_videomode *mode; -+ struct fb_videomode mode; -+ int i, vic, mode_count = ARRAY_SIZE(mxc_cea_mode); -+ const struct fb_videomode *mode_data = mxc_cea_mode; -+ -+ if (from_edid) { -+ mode_data = hdmi->fbi->monspecs.modedb; -+ mode_count = hdmi->fbi->monspecs.modedb_len; -+ } - - dev_dbg(&hdmi->pdev->dev, "%s\n", __func__); - - console_lock(); - - fb_destroy_modelist(&hdmi->fbi->modelist); -+ -+ /* Always insert VGA mode */ - fb_add_videomode(&vga_mode, &hdmi->fbi->modelist); - -- for (i = 0; i < hdmi->fbi->monspecs.modedb_len; i++) { -- /* -- * We might check here if mode is supported by HDMI. -- * We do not currently support interlaced modes. -- * And add CEA modes in the modelist. -- */ -- mode = &hdmi->fbi->monspecs.modedb[i]; -- -- vic = mxc_edid_mode_to_vic(mode); -- if (hdmi->edid_cfg.hdmi_cap && -- (vic == 0)) -+ for (i = 0; i < mode_count; i++) { -+ vic = from_edid ? mxc_edid_mode_to_vic(&mode_data[i]) : i; -+ -+ if (mode_data[i].xres == 0 || -+ (hdmi->edid_cfg.hdmi_cap && vic == 0)) - continue; - -- if (!(mode->vmode & FB_VMODE_ASPECT_MASK)) { -- if (mode->yres == (mode->xres * 3)/4) -- mode->vmode |= FB_VMODE_ASPECT_4_3; -- else -- mode->vmode |= FB_VMODE_ASPECT_16_9; -- } -+ mode = mode_data[i]; -+ -+ /* TODO: Discuss if we should always set default modes as standard */ -+ if (!from_edid /*&& ignore_edid*/) -+ mode.flag |= FB_MODE_IS_STANDARD; - -- if (fb_add_videomode(mode, &hdmi->fbi->modelist)) -+ if (fb_add_videomode(&mode, &hdmi->fbi->modelist)) - continue; - - dev_dbg(&hdmi->pdev->dev, "Added mode: %d, vic: %d", i, vic); - dev_dbg(&hdmi->pdev->dev, -- "xres = %d, yres = %d, ratio = %s, freq = %d, vmode = %d, flag = %d\n", -- hdmi->fbi->monspecs.modedb[i].xres, -- hdmi->fbi->monspecs.modedb[i].yres, -- mode->vmode & FB_VMODE_ASPECT_4_3 ? "4/3" : -- mode->vmode & FB_VMODE_ASPECT_16_9 ? "16/9" : "n/a", -- hdmi->fbi->monspecs.modedb[i].refresh, -- hdmi->fbi->monspecs.modedb[i].vmode, -- hdmi->fbi->monspecs.modedb[i].flag); -+ "xres = %d, yres = %d, scan = %c, ratio = %s, freq = %d, vmode = %d, flag = %d\n", -+ mode.xres, -+ mode.yres, -+ mode.vmode & FB_VMODE_INTERLACED ? 'i' : 'p', -+ mode.vmode & FB_VMODE_ASPECT_4_3 ? "4/3" : -+ mode.vmode & FB_VMODE_ASPECT_16_9 ? "16/9" : "n/a", -+ mode.refresh, -+ mode.vmode, -+ mode.flag); - } - - fb_new_modelist(hdmi->fbi); -@@ -1986,36 +2006,6 @@ static void mxc_hdmi_default_edid_cfg(struct mxc_hdmi *hdmi) - hdmi->edid_cfg.hdmi_cap = true; - } - --static void mxc_hdmi_default_modelist(struct mxc_hdmi *hdmi) --{ -- u32 i; -- struct fb_videomode mode; -- -- dev_dbg(&hdmi->pdev->dev, "%s\n", __func__); -- -- /* If not EDID data read, set up default modelist */ -- dev_info(&hdmi->pdev->dev, "No modes read from edid\n"); -- dev_info(&hdmi->pdev->dev, "create default modelist\n"); -- -- console_lock(); -- -- fb_destroy_modelist(&hdmi->fbi->modelist); -- -- /*Add all no interlaced CEA mode to default modelist */ -- for (i = 0; i < ARRAY_SIZE(mxc_cea_mode); i++) { -- mode = mxc_cea_mode[i]; -- if (!(mode.vmode & FB_VMODE_INTERLACED) && (mode.xres != 0)) { -- if (ignore_edid) -- mode.flag |= FB_MODE_IS_STANDARD; -- fb_add_videomode(&mode, &hdmi->fbi->modelist); -- } -- } -- -- fb_new_modelist(hdmi->fbi); -- -- console_unlock(); --} -- - static void mxc_hdmi_set_mode(struct mxc_hdmi *hdmi, int edid_status) - { - const struct fb_videomode *mode; -@@ -2108,7 +2098,7 @@ static void mxc_hdmi_cable_connected(struct mxc_hdmi *hdmi) - /* HDMI Initialization Steps D, E, F */ - switch (edid_status) { - case HDMI_EDID_SUCCESS: -- mxc_hdmi_edid_rebuild_modelist(hdmi); -+ mxc_hdmi_create_modelist(hdmi, true); - break; - - /* Nothing to do if EDID same */ -@@ -2120,7 +2110,7 @@ static void mxc_hdmi_cable_connected(struct mxc_hdmi *hdmi) - /* No break here */ - case HDMI_EDID_NO_MODES: - default: -- mxc_hdmi_default_modelist(hdmi); -+ mxc_hdmi_create_modelist(hdmi, false); - break; - } - -@@ -2676,7 +2666,6 @@ static int mxc_hdmi_disp_init(struct mxc_dispdrv_handle *disp, - struct mxc_dispdrv_setting *setting) - { - int ret = 0; -- u32 i; - const struct fb_videomode *mode; - struct fb_videomode m; - struct mxc_hdmi *hdmi = mxc_dispdrv_getdata(disp); -@@ -2787,31 +2776,17 @@ static int mxc_hdmi_disp_init(struct mxc_dispdrv_handle *disp, - - spin_lock_init(&hdmi->irq_lock); - -- /* Set the default mode and modelist when disp init. */ -+ /* Create default modelist */ -+ mxc_hdmi_create_modelist(hdmi, false); -+ -+ /* Set the default mode when disp init. */ - fb_find_mode(&hdmi->fbi->var, hdmi->fbi, - hdmi->dft_mode_str, NULL, 0, NULL, - hdmi->default_bpp); -- -- console_lock(); -- -- fb_destroy_modelist(&hdmi->fbi->modelist); -- -- /*Add all no interlaced CEA mode to default modelist */ -- for (i = 0; i < ARRAY_SIZE(mxc_cea_mode); i++) { -- mode = &mxc_cea_mode[i]; -- if (mode->xres != 0) { -- struct fb_videomode m = *mode; -- m.flag |= FB_MODE_IS_STANDARD; -- fb_add_videomode(&m, &hdmi->fbi->modelist); -- } -- } -- -- console_unlock(); -- -- /* Find a nearest mode in default modelist */ - fb_var_to_videomode(&m, &hdmi->fbi->var); - hdmi->dft_mode_set = false; - -+ /* Find a nearest mode in default modelist */ - mode = fb_find_nearest_mode(&m, &hdmi->fbi->modelist); - if (!mode) { - pr_err("%s: could not find mode in modelist\n", __func__); --- -1.9.1 - - -============================================================== -file 1111-video-mxc_hdmi-Consider-modes-that-differ-only-in-as.patch -============================================================== - -From 9b245791da35efed7d3745ca5ca35d6cc73b49de Mon Sep 17 00:00:00 2001 -From: Rudi -Date: Thu, 24 Dec 2015 08:44:50 +0100 -Subject: [PATCH] video: mxc_hdmi: Consider modes that differ only in aspect - ratio as duplicate - -Certain CEA modes differ from each other only by the aspect ratio. If an EDID -indicates support for both modes of such an otherwise identical pair, we create -a mode list entry only for the first one. This is done because our sysfs cannot -distinguish them. - -Signed-off-by: Rudi ---- - drivers/video/mxc/mxc_hdmi.c | 15 ++++++++++++++- - 1 file changed, 14 insertions(+), 1 deletion(-) - -diff --git a/drivers/video/mxc/mxc_hdmi.c b/drivers/video/mxc/mxc_hdmi.c -index f71c1dd..182ae2a 100644 ---- a/drivers/video/mxc/mxc_hdmi.c -+++ b/drivers/video/mxc/mxc_hdmi.c -@@ -1949,7 +1949,7 @@ static void mxc_hdmi_notify_fb(struct mxc_hdmi *hdmi, bool force_all) - static void mxc_hdmi_create_modelist(struct mxc_hdmi *hdmi, int from_edid) - { - struct fb_videomode mode; -- int i, vic, mode_count = ARRAY_SIZE(mxc_cea_mode); -+ int i, j, skip, vic, mode_count = ARRAY_SIZE(mxc_cea_mode); - const struct fb_videomode *mode_data = mxc_cea_mode; - - if (from_edid) { -@@ -1975,6 +1975,19 @@ static void mxc_hdmi_create_modelist(struct mxc_hdmi *hdmi, int from_edid) - - mode = mode_data[i]; - -+ /* for dual aspect ratio modes, insert the first one only */ -+ if (mode.vmode & FB_VMODE_ASPECT_MASK) { -+ skip = 0; -+ for (j = i - 1; !skip && j >= 0; j--) { -+ skip = mode.xres == mode_data[j].xres && -+ mode.yres == mode_data[j].yres && -+ mode.refresh == mode_data[j].refresh && -+ (mode.vmode ^ FB_VMODE_ASPECT_MASK) == mode_data[j].vmode; -+ } -+ if (skip) -+ continue; -+ } -+ - /* TODO: Discuss if we should always set default modes as standard */ - if (!from_edid /*&& ignore_edid*/) - mode.flag |= FB_MODE_IS_STANDARD; --- -1.9.1 - - -============================================================== -file 1112-video-mxc_hdmi-Insert-standard-VGA-mode-only-once.patch -============================================================== - -From 2e980a57c261407795511d4794c8d22e78ecb9b2 Mon Sep 17 00:00:00 2001 -From: Rudi -Date: Mon, 4 Jan 2016 08:41:22 +0100 -Subject: [PATCH] video: mxc_hdmi: Insert standard VGA mode only once - -Skip standard VGA if found in EDID. We force this mode to be present -by default and therefore should not add it a second time. - -Signed-off-by: Rudi ---- - drivers/video/mxc/mxc_hdmi.c | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/drivers/video/mxc/mxc_hdmi.c b/drivers/video/mxc/mxc_hdmi.c -index 182ae2a..ec4a438 100644 ---- a/drivers/video/mxc/mxc_hdmi.c -+++ b/drivers/video/mxc/mxc_hdmi.c -@@ -95,7 +95,7 @@ - * in HDMI Initialization Step B - */ - static const struct fb_videomode vga_mode = { -- /* 640x480 @ 60 Hz, 31.5 kHz hsync */ -+ /* 640x480 @ 59.94 Hz, 31.5 kHz hsync */ - NULL, 60, 640, 480, 39721, 48, 16, 33, 10, 96, 2, 0, - FB_VMODE_NONINTERLACED | FB_VMODE_ASPECT_4_3, FB_MODE_IS_VESA, - }; -@@ -1988,6 +1988,10 @@ static void mxc_hdmi_create_modelist(struct mxc_hdmi *hdmi, int from_edid) - continue; - } - -+ /* Skip standard VGA (already present) */ -+ if (vic == 1 && (mode.flag & FB_MODE_IS_VESA)) -+ continue; -+ - /* TODO: Discuss if we should always set default modes as standard */ - if (!from_edid /*&& ignore_edid*/) - mode.flag |= FB_MODE_IS_STANDARD; --- -1.9.1 - - -============================================================== -file 1113-video-mxc_hdmi-mxc_edid-Introduce-fractional-modes.patch -============================================================== - -From 7df36826253b618c3d44d245b2f1e074112b91c3 Mon Sep 17 00:00:00 2001 -From: Rudi -Date: Thu, 24 Dec 2015 09:26:40 +0100 -Subject: [PATCH] video: mxc_hdmi/mxc_edid: Introduce fractional modes - -In order to support fractional refresh rates (23.976, 29.97, 59.94, 119.88Hz) -we create 'synthetic' modes. These have the same timing as the corresponding -non-fractional modes (i.e. 24, 30, 60 and 120Hz). However, the refresh rate -is set to 23, 29, 59 and 119, respectively. In addition they have the mode -bit FB_VMODE_FRACTIONAL set. This bit is taken in acount when calculating -the real pixel clock. - -Signed-off-by: Rudi ---- - drivers/video/mxc/mxc_edid.c | 15 ++++++++++----- - drivers/video/mxc/mxc_hdmi.c | 25 +++++++++++++++++++++++-- - 2 files changed, 33 insertions(+), 7 deletions(-) - -diff --git a/drivers/video/mxc/mxc_edid.c b/drivers/video/mxc/mxc_edid.c -index 1aaaa68..b3a6ee1 100644 ---- a/drivers/video/mxc/mxc_edid.c -+++ b/drivers/video/mxc/mxc_edid.c -@@ -218,9 +218,9 @@ int mxc_edid_fb_mode_is_equal(bool use_aspect, - u32 mask; - - if (use_aspect) -- mask = ~0; -+ mask = ~FB_VMODE_FRACTIONAL; - else -- mask = ~FB_VMODE_ASPECT_MASK; -+ mask = ~(FB_VMODE_FRACTIONAL | FB_VMODE_ASPECT_MASK); - - return (mode1->xres == mode2->xres && - mode1->yres == mode2->yres && -@@ -823,7 +823,12 @@ const struct fb_videomode *mxc_fb_find_nearest_mode(const struct fb_videomode *m - struct fb_videomode *cmode; - static struct fb_videomode *best; - static u32 diff, diff_refresh; -- u32 mask = relax ? FB_VMODE_MASK_SIMPLE | FB_VMODE_ASPECT_MASK : ~0; -+ u32 mask = relax ? ~FB_VMODE_ASPECT_MASK : ~0; -+ int refresh = mode->refresh; -+ -+ if ((mode->flag & FB_MODE_IS_FROM_VAR) && -+ (mode->vmode & FB_VMODE_FRACTIONAL)) -+ refresh--; - - if (!relax) { - diff = -1; -@@ -844,10 +849,10 @@ const struct fb_videomode *mxc_fb_find_nearest_mode(const struct fb_videomode *m - abs(cmode->yres - mode->yres); - if (diff > d) { - diff = d; -- diff_refresh = abs(cmode->refresh - mode->refresh); -+ diff_refresh = abs(cmode->refresh - refresh); - best = cmode; - } else if (diff == d) { -- d = abs(cmode->refresh - mode->refresh); -+ d = abs(cmode->refresh - refresh); - if (diff_refresh > d) { - diff_refresh = d; - best = cmode; -diff --git a/drivers/video/mxc/mxc_hdmi.c b/drivers/video/mxc/mxc_hdmi.c -index ec4a438..6156e16 100644 ---- a/drivers/video/mxc/mxc_hdmi.c -+++ b/drivers/video/mxc/mxc_hdmi.c -@@ -1999,9 +1999,30 @@ static void mxc_hdmi_create_modelist(struct mxc_hdmi *hdmi, int from_edid) - if (fb_add_videomode(&mode, &hdmi->fbi->modelist)) - continue; - -- dev_dbg(&hdmi->pdev->dev, "Added mode: %d, vic: %d", i, vic); - dev_dbg(&hdmi->pdev->dev, -- "xres = %d, yres = %d, scan = %c, ratio = %s, freq = %d, vmode = %d, flag = %d\n", -+ "Mode: vic=%d, xres=%d, yres=%d, scan=%c, ratio=%s, freq=%d, vmode=%d, flag=%d\n", -+ vic, -+ mode.xres, -+ mode.yres, -+ mode.vmode & FB_VMODE_INTERLACED ? 'i' : 'p', -+ mode.vmode & FB_VMODE_ASPECT_4_3 ? "4/3" : -+ mode.vmode & FB_VMODE_ASPECT_16_9 ? "16/9" : "n/a", -+ mode.refresh, -+ mode.vmode, -+ mode.flag); -+ -+ /* check if fractional mode should be inserted */ -+ if (vic == 0 || !(mode.refresh == 24 || (mode.refresh % 30) == 0)) -+ continue; -+ -+ mode.refresh--; -+ mode.vmode |= FB_VMODE_FRACTIONAL; -+ if (fb_add_videomode(&mode, &hdmi->fbi->modelist)) -+ continue; -+ -+ dev_dbg(&hdmi->pdev->dev, -+ "Mode: vic=%d, xres=%d, yres=%d, scan=%c, ratio=%s, freq=%d, vmode=%d, flag=%d\n", -+ vic, - mode.xres, - mode.yres, - mode.vmode & FB_VMODE_INTERLACED ? 'i' : 'p', --- -1.9.1 - - -============================================================== -file 1114-video-mxc_edid-Adjust-pixel-timings.patch -============================================================== - -From cec6f4f51f22cd0324f255cb99a85eaa7f3d0d78 Mon Sep 17 00:00:00 2001 -From: Rudi -Date: Thu, 24 Dec 2015 09:51:31 +0100 -Subject: [PATCH] video: mxc_edid: Adjust pixel timings - -Our approach for fractional mode support requires the pixel timings -in the CEA mode table to describe the non-fractional modes. This -patch sets this for the modes that were defined otherwise. -Also it tweaks the rounding when calculating the real pixel clock -from the pixel time specified in the table. - -Signed-off-by: Rudi ---- - drivers/video/mxc/mxc_edid.c | 19 ++++++++++++------- - include/video/mxc_edid.h | 4 ++-- - 2 files changed, 14 insertions(+), 9 deletions(-) - -diff --git a/drivers/video/mxc/mxc_edid.c b/drivers/video/mxc/mxc_edid.c -index b3a6ee1..edfd6e8 100644 ---- a/drivers/video/mxc/mxc_edid.c -+++ b/drivers/video/mxc/mxc_edid.c -@@ -38,20 +38,25 @@ - #define DPRINTK(fmt, args...) - #endif - -+/* -+ * Attention: pixel times for the fractional mode entries must -+ * specify the non-fractional frequency of that mode! -+ * I.e. 60Hz instead of 59.94 and 24Hz instead of 23.98. -+ */ - const struct fb_videomode mxc_cea_mode[64] = { - /* #1: 640x480p@59.94/60Hz 4:3 */ - [1] = { -- NULL, 60, 640, 480, 39722, 48, 16, 33, 10, 96, 2, 0, -+ NULL, 60, 640, 480, 39682, 48, 16, 33, 10, 96, 2, 0, - FB_VMODE_NONINTERLACED | FB_VMODE_ASPECT_4_3, 0, - }, - /* #2: 720x480p@59.94/60Hz 4:3 */ - [2] = { -- NULL, 60, 720, 480, 37037, 60, 16, 30, 9, 62, 6, 0, -+ NULL, 60, 720, 480, 37000, 60, 16, 30, 9, 62, 6, 0, - FB_VMODE_NONINTERLACED | FB_VMODE_ASPECT_4_3, 0, - }, - /* #3: 720x480p@59.94/60Hz 16:9 */ - [3] = { -- NULL, 60, 720, 480, 37037, 60, 16, 30, 9, 62, 6, 0, -+ NULL, 60, 720, 480, 37000, 60, 16, 30, 9, 62, 6, 0, - FB_VMODE_NONINTERLACED | FB_VMODE_ASPECT_16_9, 0, - }, - /* #4: 1280x720p@59.94/60Hz 16:9 */ -@@ -68,22 +73,22 @@ const struct fb_videomode mxc_cea_mode[64] = { - }, - /* #6: 720(1440)x480iH@59.94/60Hz 4:3 */ - [6] = { -- NULL, 60, 1440, 480, 37037, 38, 114, 8, 31, 124, 6, 0, -+ NULL, 60, 1440, 480, 37000, 38, 114, 8, 31, 124, 6, 0, - FB_VMODE_INTERLACED | FB_VMODE_ASPECT_4_3, 0, - }, - /* #7: 720(1440)x480iH@59.94/60Hz 16:9 */ - [7] = { -- NULL, 60, 1440, 480, 37037, 38, 114, 8, 31, 124, 6, 0, -+ NULL, 60, 1440, 480, 37000, 38, 114, 8, 31, 124, 6, 0, - FB_VMODE_INTERLACED | FB_VMODE_ASPECT_16_9, 0, - }, - /* #8: 720(1440)x240pH@59.94/60Hz 4:3 */ - [8] = { -- NULL, 60, 1440, 240, 37108, 114, 38, 15, 4, 124, 3, 0, -+ NULL, 60, 1440, 240, 37000, 114, 38, 15, 4, 124, 3, 0, - FB_VMODE_NONINTERLACED | FB_VMODE_ASPECT_4_3, 0, - }, - /* #9: 720(1440)x240pH@59.94/60Hz 16:9 */ - [9] = { -- NULL, 60, 1440, 240, 37108, 114, 38, 15, 4, 124, 3, 0, -+ NULL, 60, 1440, 240, 37000, 114, 38, 15, 4, 124, 3, 0, - FB_VMODE_NONINTERLACED | FB_VMODE_ASPECT_16_9, 0, - }, - /* #14: 1440x480p@59.94/60Hz 4:3 */ -diff --git a/include/video/mxc_edid.h b/include/video/mxc_edid.h -index 561fe61..2feed16 100644 ---- a/include/video/mxc_edid.h -+++ b/include/video/mxc_edid.h -@@ -100,8 +100,8 @@ struct mxc_edid_cfg { - }; - - static inline unsigned long mxcPICOS2KHZ(u32 pixclock, u32 vmode) { -- u32 x = (1000000000UL / (pixclock) * 1000 / ((vmode & FB_VMODE_FRACTIONAL) ? 1001 : 1000)); -- return x + ((1000000000UL % x) > (x / 2) ? 1 : 0); -+ return ((((vmode & FB_VMODE_FRACTIONAL) ? -+ (999000999UL*4) : (1000000000UL*4)) / pixclock) + 1) >> 2; - } - - int mxc_edid_var_to_vic(struct fb_var_screeninfo *var); --- -1.9.1 - - -============================================================== -file 1115-video-mxc_ipuv3_fb-Adjust-IPU-pixelclock.patch -============================================================== - -From 8b308a05dbfdbdffaf632857bc70a6005f95a6f5 Mon Sep 17 00:00:00 2001 -From: Rudi -Date: Tue, 29 Dec 2015 17:13:54 +0100 -Subject: [PATCH] video: mxc_ipuv3_fb: Adjust IPU pixelclock - -Use 'fractional' pixelclock calculation for IPU as well. - -Signed-off-by: Rudi ---- - drivers/video/mxc/mxc_ipuv3_fb.c | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/drivers/video/mxc/mxc_ipuv3_fb.c b/drivers/video/mxc/mxc_ipuv3_fb.c -index 9a3764f..8856c32 100644 ---- a/drivers/video/mxc/mxc_ipuv3_fb.c -+++ b/drivers/video/mxc/mxc_ipuv3_fb.c -@@ -49,6 +49,7 @@ - #include - #include - -+#include