From 242265b2a14d66b1d36af5b8ba54037790265818 Mon Sep 17 00:00:00 2001 From: Eric Lee Date: Thu, 18 Aug 2022 12:45:40 +0800 Subject: [PATCH] Yocto Gatesgarth meta layer for pITX-MX8M-PLUS, Initial Release --- conf/layer.conf | 41 + conf/machine/include/smarc-common.inc | 67 + conf/machine/pitximx8mp2g.conf | 96 + conf/machine/pitximx8mp4g.conf | 96 + conf/machine/pitximx8mp6g.conf | 96 + conf/site.conf | 6 + recipes-bsp/alsa-state/alsa-state.bbappend | 1 + recipes-bsp/alsa-state/alsa-state/asound.state | 9993 ++++++++++++++++++++ .../0001-imx-atf-change-console-to-ttymxc3.patch | 13 + recipes-bsp/imx-atf/imx-atf_%.bbappend | 5 + recipes-bsp/imx-mkimage/imx-boot_1.0.bbappend | 7 + .../imx-vpu-hantro-vc_1.3.0.bbappend | 1 + recipes-bsp/pm-utils/pm-utils/01-eth.sh | 17 + .../pm-utils/pm-utils/remove_default_sleep_d.diff | 20 + recipes-bsp/pm-utils/pm-utils_%.bbappend | 13 + recipes-bsp/u-boot/u-boot-pitximx8mp_2020.04.bb | 57 + .../base-files/base-files/embedian-hdmi-audio.conf | 4 + recipes-core/base-files/base-files/issue | 6 + recipes-core/base-files/base-files/issue.net | 6 + recipes-core/base-files/base-files_%.bbappend | 25 + recipes-core/busybox/busybox/defconfig | 1183 +++ recipes-core/busybox/busybox/ftpget.cfg | 4 + recipes-core/busybox/busybox_%.bbappend | 6 + .../packagegroup-core-tools-testapps.bbappend | 11 + ...Change-colors-for-the-Embedian-Yocto-logo.patch | 37 + recipes-core/psplash/files/psplash-bar.png | Bin 0 -> 332 bytes recipes-core/psplash/files/psplash-poky.png | Bin 0 -> 146061 bytes recipes-core/psplash/psplash_git.bbappend | 10 + .../udev/files/pitximx8mp2g/usb-power.rules | 2 + .../udev/files/pitximx8mp4g/usb-power.rules | 2 + .../udev/files/pitximx8mp6g/usb-power.rules | 2 + recipes-core/udev/udev-rules-imx.bbappend | 20 + recipes-kernel/linux/linux-pitximx8mp_5.10.bb | 87 + recipes-support/vim/vim_%.bbappend | 3 + scripts/emb_mk_yocto_sdcard/README.txt | 30 + .../emb_mk_yocto_sdcard/emb-create-yocto-emmc.sh | 263 + .../emb_mk_yocto_sdcard/emb-create-yocto-sdcard.sh | 338 + scripts/emb_mk_yocto_sdcard/uEnv.txt | 22 + scripts/emb_mk_yocto_sdcard/uEnv_emmc.txt | 22 + 39 files changed, 12612 insertions(+) create mode 100644 conf/layer.conf create mode 100644 conf/machine/include/smarc-common.inc create mode 100644 conf/machine/pitximx8mp2g.conf create mode 100644 conf/machine/pitximx8mp4g.conf create mode 100644 conf/machine/pitximx8mp6g.conf create mode 100644 conf/site.conf create mode 100644 recipes-bsp/alsa-state/alsa-state.bbappend create mode 100644 recipes-bsp/alsa-state/alsa-state/asound.state create mode 100644 recipes-bsp/imx-atf/files/0001-imx-atf-change-console-to-ttymxc3.patch create mode 100644 recipes-bsp/imx-atf/imx-atf_%.bbappend create mode 100644 recipes-bsp/imx-mkimage/imx-boot_1.0.bbappend create mode 100644 recipes-bsp/imx-vpu-hantro-vc/imx-vpu-hantro-vc_1.3.0.bbappend create mode 100755 recipes-bsp/pm-utils/pm-utils/01-eth.sh create mode 100644 recipes-bsp/pm-utils/pm-utils/remove_default_sleep_d.diff create mode 100644 recipes-bsp/pm-utils/pm-utils_%.bbappend create mode 100644 recipes-bsp/u-boot/u-boot-pitximx8mp_2020.04.bb create mode 100644 recipes-core/base-files/base-files/embedian-hdmi-audio.conf create mode 100644 recipes-core/base-files/base-files/issue create mode 100644 recipes-core/base-files/base-files/issue.net create mode 100644 recipes-core/base-files/base-files_%.bbappend create mode 100644 recipes-core/busybox/busybox/defconfig create mode 100644 recipes-core/busybox/busybox/ftpget.cfg create mode 100644 recipes-core/busybox/busybox_%.bbappend create mode 100644 recipes-core/packagegroups/packagegroup-core-tools-testapps.bbappend create mode 100644 recipes-core/psplash/files/0001-psplash-Change-colors-for-the-Embedian-Yocto-logo.patch create mode 100644 recipes-core/psplash/files/psplash-bar.png create mode 100644 recipes-core/psplash/files/psplash-poky.png create mode 100644 recipes-core/psplash/psplash_git.bbappend create mode 100755 recipes-core/udev/files/pitximx8mp2g/usb-power.rules create mode 100755 recipes-core/udev/files/pitximx8mp4g/usb-power.rules create mode 100755 recipes-core/udev/files/pitximx8mp6g/usb-power.rules create mode 100644 recipes-core/udev/udev-rules-imx.bbappend create mode 100644 recipes-kernel/linux/linux-pitximx8mp_5.10.bb create mode 100644 recipes-support/vim/vim_%.bbappend create mode 100644 scripts/emb_mk_yocto_sdcard/README.txt create mode 100755 scripts/emb_mk_yocto_sdcard/emb-create-yocto-emmc.sh create mode 100755 scripts/emb_mk_yocto_sdcard/emb-create-yocto-sdcard.sh create mode 100644 scripts/emb_mk_yocto_sdcard/uEnv.txt create mode 100644 scripts/emb_mk_yocto_sdcard/uEnv_emmc.txt diff --git a/conf/layer.conf b/conf/layer.conf new file mode 100644 index 0000000..146ea1c --- /dev/null +++ b/conf/layer.conf @@ -0,0 +1,41 @@ +# We have a conf and classes directory, add to BBPATH +BBPATH .= ":${LAYERDIR}" + +# We have a packages directory, add to BBFILES +BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ + ${LAYERDIR}/recipes-*/*/*.bbappend" + +BBFILE_COLLECTIONS += "pitximx8mp" +BBFILE_PATTERN_pitximx8mp := "^${LAYERDIR}/" +BBFILE_PRIORITY_pitximx8mp = "12" +LAYERSERIES_COMPAT_pitximx8mp = "warrior zeus gatesgarth" + +# Define new EULAs and add them to the list defined in meta-freescale. +# See fsl-eula-unpack.bbclass. +FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V13 = "1b4db4b25c3a1e422c0c0ed64feb65d2" +FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V16 = "e9e880185bda059c90c541d40ceca922" +FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V17 = "cf3f9b8d09bc3926b1004ea71f7a248a" +FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V18 = "231e11849a4331fcbb19d7f4aab4a659" +FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V19 = "a632fefd1c359980434f9389833cab3a" + +FSL_EULA_FILE_MD5SUMS_append = " \ + ${FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V13} \ + ${FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V16} \ + ${FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V17} \ + ${FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V18} \ + ${FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V19} \ +" + +# Override the EULA defined in meta-freescale. +FSL_EULA_FILE = "${LAYERDIR}/../EULA.txt" +FSL_EULA_FILE_MD5SUM = "${FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V19}" + +HOSTTOOLS_NONFATAL_append = " bc rsync xxd" + +EMB_UBOOT_MIRROR ?= "git://git@git.embedian.com/developer/smarc-t335x-uboot.git" +EMB_KERNEL_MIRROR ?= "git://git@git.embedian.com/developer/smarc-fsl-linux-kernel.git" + +MIRRORS += " \ +${EMB_UBOOT_MIRROR} git://github.com/embedian/smarc-uboot.git;protocol=git;branch=${SRCBRANCH} \n \ +${EMB_KERNEL_MIRROR} git://github.com/embedian/smarc-fsl-linux-kernel.git;protocol=git;branch=${SRCBRANCH} \n \ +" diff --git a/conf/machine/include/smarc-common.inc b/conf/machine/include/smarc-common.inc new file mode 100644 index 0000000..e1e4145 --- /dev/null +++ b/conf/machine/include/smarc-common.inc @@ -0,0 +1,67 @@ +DISTRO_FEATURES_FILTER_NATIVESDK += "wayland" + +MACHINE_USES_VIVANTE_KERNEL_DRIVER_MODULE ?= "0" + +# Overrides for imx-base.inc +DEFAULTTUNE_mx8mp ?= "cortexa53-crypto" + +IMX_DEFAULT_BSP = "nxp" + +MACHINE_SOCARCH_FILTER_remove = "alsa-lib gstreamer1.0 imx-codec" + +# Use latest SDMA firmware from firmware-imx instead of upstream linux-firmware +MACHINE_FIRMWARE_remove_mx8 = "linux-firmware-imx-sdma-imx7d" + +MACHINE_FIRMWARE_append_mx8 = " linux-firmware-ath10k firmware-imx-sdma firmware-imx-regulatory" +MACHINE_FIRMWARE_remove_mx8mp = "firmware-imx-easrc-imx8mn firmware-imx-xcvr-imx8mp firmware-sof-imx" +MACHINE_FIRMWARE_append_mx8mp = " firmware-imx-easrc firmware-imx-xcvr sof-imx" + +# NXP WiFi firmware & extra Wlan SDK +MACHINE_FIRMWARE_append = " ${@bb.utils.contains('MACHINE_FEATURES', 'nxp8987', 'linux-firmware-nxp89xx', '', d)}" +MACHINE_FIRMWARE_append = " ${@bb.utils.contains('MACHINE_FEATURES', 'nxp8997', 'linux-firmware-nxp89xx', '', d)}" +MACHINE_EXTRA_RRECOMMENDS_append = " ${@bb.utils.contains('MACHINE_FEATURES', 'nxp8987', 'nxp-wlan-sdk kernel-module-nxp89xx', '', d)}" +MACHINE_EXTRA_RRECOMMENDS_append = " ${@bb.utils.contains('MACHINE_FEATURES', 'nxp8997', 'nxp-wlan-sdk kernel-module-nxp89xx', '', d)}" + +# MCore Demo apps to /lib/firmware +MACHINE_EXTRA_RRECOMMENDS_append_mx8mp = " imx-m7-demos" + +MACHINE_GSTREAMER_1_0_PLUGIN_mx8 ?= "imx-gst1.0-plugin" + +PREFERRED_VERSION_weston_mx8 ?= "9.0.0.imx" + +PREFERRED_VERSION_wayland-protocols_mx8 = "1.20.imx" + +PREFERRED_VERSION_libdrm_mx8 ?= "2.4.102.imx" + +PREFERRED_VERSION_isp-imx ?= "4.2.2.6.1" +PREFERRED_VERSION_basler-camera ?= "4.2.2.6.1" + +PREFERRED_VERSION_optee-client_mx8 = "3.10.0.imx" +PREFERRED_VERSION_optee-os_mx8 = "3.10.0.imx" +PREFERRED_VERSION_optee-test_mx8 = "3.10.0.imx" + +SOC_DEFAULT_IMAGE_FSTYPES_remove = "wic.gz" +SOC_DEFAULT_IMAGE_FSTYPES_append = " wic.bz2 tar.bz2" + +OPTEE_BOOT_IMAGE_mx8 ?= "tee.bin" + +IMAGE_BOOT_FILES_append = " \ + ${@bb.utils.contains('COMBINED_FEATURES', 'xen', 'xen', '', d)} \ +" + +IMAGE_INSTALL_append = " \ + ${@bb.utils.contains('COMBINED_FEATURES', 'jailhouse', 'jailhouse', '', d)} \ + ${@bb.utils.contains('MACHINE_FEATURES', 'optee', 'packagegroup-fsl-optee-imx', '', d)} \ + ${@bb.utils.contains('COMBINED_FEATURES', 'xen', 'imx-xen xen-tools', '', d)} \ +" + +MACHINE_FEATURES_append_imx = " nxp8987" + +# Overrides for all MACHINE.conf with optee support +UBOOT_CONFIG_OPTEE_CONFIG = "mx${OPTEE_BIN_EXT}_optee_config" +UBOOT_CONFIG[sd-optee] = "${UBOOT_CONFIG_OPTEE_CONFIG},sdcard" + + +# LF still doesn't support wireless now, need to remove it temporarily +# qca9377 is not ready for imx8mmevk +MACHINE_FEATURES_remove = "qca9377 mrvl8997" diff --git a/conf/machine/pitximx8mp2g.conf b/conf/machine/pitximx8mp2g.conf new file mode 100644 index 0000000..103986c --- /dev/null +++ b/conf/machine/pitximx8mp2g.conf @@ -0,0 +1,96 @@ +#@TYPE: Machine +#@NAME: EMBEDIAN SMARC-iMX8MP CPU Module with 4GB LPDDR4 +#@SOC: i.MX8MP +#@DESCRIPTION: Machine configuration for Embedian SMARC-iMX8MP +#@MAINTAINER: Eric Lee + +MACHINEOVERRIDES =. "mx8:mx8m:mx8mp:" + +require conf/machine/include/imx-base.inc +require conf/machine/include/tune-cortexa53.inc +require conf/machine/include/smarc-common.inc + +MACHINE_FEATURES += " usbgadget vfat ext2 alsa serial pci wifi bluetooth optee nxp8997" + +IMAGE_FEATURES += "package-management" + +# Embedian BSP default providers +PREFERRED_PROVIDER_virtual/kernel_pitximx8mp2g ?= "linux-pitximx8mp" +PREFERRED_VERSION_linux-pitximx8mp2g_pitximx8mp2g = "5.10" + +KERNEL_DEVICETREE = " \ + embedian/imx8mp-pitx.dtb \ + embedian/imx8mp-pitx-lvds.dtb \ +" + +WKS_FILE_DEPENDS_append = " imx-m7-demos" +IMAGE_BOOT_FILES += "imx8mp_m7_TCM_hello_world.bin \ + imx8mp_m7_TCM_rpmsg_lite_pingpong_rtos_linux_remote.bin \ + imx8mp_m7_TCM_rpmsg_lite_str_echo_rtos.bin \ +" + +PREFERRED_PROVIDER_u-boot_pitximx8mp2g = "u-boot-pitximx8mp" +PREFERRED_PROVIDER_virtual/bootloader_pitximx8mp2g = "u-boot-pitximx8mp" + +UBOOT_CONFIG ??= "sd" +UBOOT_CONFIG[sd] = "pitximx8mp_2g_defconfig,sdcard" +SPL_BINARY = "spl/u-boot-spl.bin" + +# Set DDR FIRMWARE +DDR_FIRMWARE_NAME = "lpddr4_pmu_train_1d_dmem_202006.bin lpddr4_pmu_train_1d_imem_202006.bin lpddr4_pmu_train_2d_dmem_202006.bin lpddr4_pmu_train_2d_imem_202006.bin" + +# Set u-boot DTB +UBOOT_DTB_NAME = "imx8mp-pitx.dtb" + +# Set imx-mkimage boot target +IMXBOOT_TARGETS = "flash_evk" + +# Set Serial console +SERIAL_CONSOLES = "115200;ttymxc3" + +IMAGE_BOOTLOADER = "imx-boot" + +LOADADDR = "" +UBOOT_SUFFIX = "bin" +UBOOT_MAKE_TARGET = "" +IMX_BOOT_SEEK = "32" + +OPTEE_BIN_EXT = "8mp" + +MACHINE_EXTRA_RDEPENDS += " \ + imx-boot \ + packagegroup-tools-bluetooth \ + pm-utils \ + kmod \ + hdparm \ + gptfdisk \ + lftp \ + vim \ + ntp \ + boost \ + nodejs \ + networkmanager \ + android-tools \ + " + +# eIQ Machine Learning. Note that many of the features require Qt 5. Disable +# this when you build image without QT 5. +IMAGE_INSTALL_append = " \ + packagegroup-imx-ml \ + firmware-imx-sdma \ + firmware-imx-regulatory \ + linux-firmware-nxp89xx \ + nxp-wlan-sdk \ + kernel-module-nxp89xx \ + fsl-rc-local \ + " + +#TOOLCHAIN_TARGET_TASK_append += " tensorflow-lite-staticdev tensorflow-lite-dev armnn-dev onnxruntimedev" + +IMAGE_FSTYPES = "tar.bz2" + +# Ship all kernel modules by default +MACHINE_EXTRA_RRECOMMENDS = "kernel-modules" + +# Add additional firmware +MACHINE_FIRMWARE_append = " linux-firmware-ath10k" diff --git a/conf/machine/pitximx8mp4g.conf b/conf/machine/pitximx8mp4g.conf new file mode 100644 index 0000000..669095d --- /dev/null +++ b/conf/machine/pitximx8mp4g.conf @@ -0,0 +1,96 @@ +#@TYPE: Machine +#@NAME: EMBEDIAN SMARC-iMX8MP CPU Module with 4GB LPDDR4 +#@SOC: i.MX8MP +#@DESCRIPTION: Machine configuration for Embedian SMARC-iMX8MP +#@MAINTAINER: Eric Lee + +MACHINEOVERRIDES =. "mx8:mx8m:mx8mp:" + +require conf/machine/include/imx-base.inc +require conf/machine/include/tune-cortexa53.inc +require conf/machine/include/smarc-common.inc + +MACHINE_FEATURES += " usbgadget vfat ext2 alsa serial pci wifi bluetooth optee nxp8997" + +IMAGE_FEATURES += "package-management" + +# Embedian BSP default providers +PREFERRED_PROVIDER_virtual/kernel_pitximx8mp4g ?= "linux-pitximx8mp" +PREFERRED_VERSION_linux-pitximx8mp4g_pitximx8mp4g = "5.10" + +KERNEL_DEVICETREE = " \ + embedian/imx8mp-pitx.dtb \ + embedian/imx8mp-pitx-lvds.dtb \ +" + +WKS_FILE_DEPENDS_append = " imx-m7-demos" +IMAGE_BOOT_FILES += "imx8mp_m7_TCM_hello_world.bin \ + imx8mp_m7_TCM_rpmsg_lite_pingpong_rtos_linux_remote.bin \ + imx8mp_m7_TCM_rpmsg_lite_str_echo_rtos.bin \ +" + +PREFERRED_PROVIDER_u-boot_pitximx8mp4g = "u-boot-pitximx8mp" +PREFERRED_PROVIDER_virtual/bootloader_pitximx8mp4g = "u-boot-pitximx8mp" + +UBOOT_CONFIG ??= "sd" +UBOOT_CONFIG[sd] = "pitximx8mp_4g_defconfig,sdcard" +SPL_BINARY = "spl/u-boot-spl.bin" + +# Set DDR FIRMWARE +DDR_FIRMWARE_NAME = "lpddr4_pmu_train_1d_dmem_202006.bin lpddr4_pmu_train_1d_imem_202006.bin lpddr4_pmu_train_2d_dmem_202006.bin lpddr4_pmu_train_2d_imem_202006.bin" + +# Set u-boot DTB +UBOOT_DTB_NAME = "imx8mp-pitx.dtb" + +# Set imx-mkimage boot target +IMXBOOT_TARGETS = "flash_evk" + +# Set Serial console +SERIAL_CONSOLES = "115200;ttymxc3" + +IMAGE_BOOTLOADER = "imx-boot" + +LOADADDR = "" +UBOOT_SUFFIX = "bin" +UBOOT_MAKE_TARGET = "" +IMX_BOOT_SEEK = "32" + +OPTEE_BIN_EXT = "8mp" + +MACHINE_EXTRA_RDEPENDS += " \ + imx-boot \ + packagegroup-tools-bluetooth \ + pm-utils \ + kmod \ + hdparm \ + gptfdisk \ + lftp \ + vim \ + ntp \ + boost \ + nodejs \ + networkmanager \ + android-tools \ + " + +# eIQ Machine Learning. Note that many of the features require Qt 5. Disable +# this when you build image without QT 5. +IMAGE_INSTALL_append = " \ + packagegroup-imx-ml \ + firmware-imx-sdma \ + firmware-imx-regulatory \ + linux-firmware-nxp89xx \ + nxp-wlan-sdk \ + kernel-module-nxp89xx \ + fsl-rc-local \ + " + +#TOOLCHAIN_TARGET_TASK_append += " tensorflow-lite-staticdev tensorflow-lite-dev armnn-dev onnxruntimedev" + +IMAGE_FSTYPES = "tar.bz2" + +# Ship all kernel modules by default +MACHINE_EXTRA_RRECOMMENDS = "kernel-modules" + +# Add additional firmware +MACHINE_FIRMWARE_append = " linux-firmware-ath10k" diff --git a/conf/machine/pitximx8mp6g.conf b/conf/machine/pitximx8mp6g.conf new file mode 100644 index 0000000..cae38b6 --- /dev/null +++ b/conf/machine/pitximx8mp6g.conf @@ -0,0 +1,96 @@ +#@TYPE: Machine +#@NAME: EMBEDIAN SMARC-iMX8MP CPU Module with 4GB LPDDR4 +#@SOC: i.MX8MP +#@DESCRIPTION: Machine configuration for Embedian SMARC-iMX8MP +#@MAINTAINER: Eric Lee + +MACHINEOVERRIDES =. "mx8:mx8m:mx8mp:" + +require conf/machine/include/imx-base.inc +require conf/machine/include/tune-cortexa53.inc +require conf/machine/include/smarc-common.inc + +MACHINE_FEATURES += " usbgadget vfat ext2 alsa serial pci wifi bluetooth optee nxp8997" + +IMAGE_FEATURES += "package-management" + +# Embedian BSP default providers +PREFERRED_PROVIDER_virtual/kernel_pitximx8mp6g ?= "linux-pitximx8mp" +PREFERRED_VERSION_linux-pitximx8mp6g_pitximx8mp6g = "5.10" + +KERNEL_DEVICETREE = " \ + embedian/imx8mp-pitx.dtb \ + embedian/imx8mp-pitx-lvds.dtb \ +" + +WKS_FILE_DEPENDS_append = " imx-m7-demos" +IMAGE_BOOT_FILES += "imx8mp_m7_TCM_hello_world.bin \ + imx8mp_m7_TCM_rpmsg_lite_pingpong_rtos_linux_remote.bin \ + imx8mp_m7_TCM_rpmsg_lite_str_echo_rtos.bin \ +" + +PREFERRED_PROVIDER_u-boot_pitximx8mp6g = "u-boot-pitximx8mp" +PREFERRED_PROVIDER_virtual/bootloader_pitximx8mp6g = "u-boot-pitximx8mp" + +UBOOT_CONFIG ??= "sd" +UBOOT_CONFIG[sd] = "pitximx8mp_6g_defconfig,sdcard" +SPL_BINARY = "spl/u-boot-spl.bin" + +# Set DDR FIRMWARE +DDR_FIRMWARE_NAME = "lpddr4_pmu_train_1d_dmem_202006.bin lpddr4_pmu_train_1d_imem_202006.bin lpddr4_pmu_train_2d_dmem_202006.bin lpddr4_pmu_train_2d_imem_202006.bin" + +# Set u-boot DTB +UBOOT_DTB_NAME = "imx8mp-pitx.dtb" + +# Set imx-mkimage boot target +IMXBOOT_TARGETS = "flash_evk" + +# Set Serial console +SERIAL_CONSOLES = "115200;ttymxc3" + +IMAGE_BOOTLOADER = "imx-boot" + +LOADADDR = "" +UBOOT_SUFFIX = "bin" +UBOOT_MAKE_TARGET = "" +IMX_BOOT_SEEK = "32" + +OPTEE_BIN_EXT = "8mp" + +MACHINE_EXTRA_RDEPENDS += " \ + imx-boot \ + packagegroup-tools-bluetooth \ + pm-utils \ + kmod \ + hdparm \ + gptfdisk \ + lftp \ + vim \ + ntp \ + boost \ + nodejs \ + networkmanager \ + android-tools \ + " + +# eIQ Machine Learning. Note that many of the features require Qt 5. Disable +# this when you build image without QT 5. +IMAGE_INSTALL_append = " \ + packagegroup-imx-ml \ + firmware-imx-sdma \ + firmware-imx-regulatory \ + linux-firmware-nxp89xx \ + nxp-wlan-sdk \ + kernel-module-nxp89xx \ + fsl-rc-local \ + " + +#TOOLCHAIN_TARGET_TASK_append += " tensorflow-lite-staticdev tensorflow-lite-dev armnn-dev onnxruntimedev" + +IMAGE_FSTYPES = "tar.bz2" + +# Ship all kernel modules by default +MACHINE_EXTRA_RRECOMMENDS = "kernel-modules" + +# Add additional firmware +MACHINE_FIRMWARE_append = " linux-firmware-ath10k" diff --git a/conf/site.conf b/conf/site.conf new file mode 100644 index 0000000..24f2099 --- /dev/null +++ b/conf/site.conf @@ -0,0 +1,6 @@ +PREMIRRORS_prepend = " \ + svn://.*/.* http://www.embedian.com/oe-downloads/ \n \ + git://.*/.* http://www.embedian.com/oe-downloads/ \n \ + ftp://.*/.* http://www.embedian.com/oe-downloads/ \n \ + http://.*/.* http://www.embedian.com/oe-downloads/ \n \ + https://.*/.* http://www.embedian.com/oe-downloads/ \n \" diff --git a/recipes-bsp/alsa-state/alsa-state.bbappend b/recipes-bsp/alsa-state/alsa-state.bbappend new file mode 100644 index 0000000..72d991c --- /dev/null +++ b/recipes-bsp/alsa-state/alsa-state.bbappend @@ -0,0 +1 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" diff --git a/recipes-bsp/alsa-state/alsa-state/asound.state b/recipes-bsp/alsa-state/alsa-state/asound.state new file mode 100644 index 0000000..0e5e532 --- /dev/null +++ b/recipes-bsp/alsa-state/alsa-state/asound.state @@ -0,0 +1,9993 @@ +state.wm8962audio { + control.1 { + iface MIXER + name 'Input Mixer Switch' + value.0 true + value.1 true + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.2 { + iface MIXER + name 'MIXINL IN2L Volume' + value 5 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -1500 + dbmax 600 + dbvalue.0 0 + } + } + control.3 { + iface MIXER + name 'MIXINL PGA Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin 0 + dbmax 3000 + dbvalue.0 0 + } + } + control.4 { + iface MIXER + name 'MIXINL IN3L Volume' + value 5 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -1500 + dbmax 600 + dbvalue.0 0 + } + } + control.5 { + iface MIXER + name 'MIXINR IN2R Volume' + value 5 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -1500 + dbmax 600 + dbvalue.0 0 + } + } + control.6 { + iface MIXER + name 'MIXINR PGA Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin 0 + dbmax 3000 + dbvalue.0 0 + } + } + control.7 { + iface MIXER + name 'MIXINR IN3R Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -1500 + dbmax 600 + dbvalue.0 600 + } + } + control.8 { + iface MIXER + name 'Digital Capture Volume' + value.0 108 + value.1 108 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 127' + dbmin -9999999 + dbmax 2325 + dbvalue.0 900 + dbvalue.1 900 + } + } + control.9 { + iface MIXER + name 'Capture Volume' + value.0 40 + value.1 40 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 63' + dbmin -2325 + dbmax 2400 + dbvalue.0 675 + dbvalue.1 675 + } + } + control.10 { + iface MIXER + name 'Capture Switch' + value.0 true + value.1 true + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.11 { + iface MIXER + name 'Capture ZC Switch' + value.0 true + value.1 true + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.12 { + iface MIXER + name 'Capture HPF Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.13 { + iface MIXER + name 'Capture HPF Mode' + value Hi-fi + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Hi-fi + item.1 Application + } + } + control.14 { + iface MIXER + name 'Capture HPF Cutoff' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + } + } + control.15 { + iface MIXER + name 'Capture LHPF Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.16 { + iface MIXER + name 'Capture LHPF Mode' + value LPF + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 LPF + item.1 HPF + } + } + control.17 { + iface MIXER + name 'Sidetone Volume' + value.0 0 + value.1 0 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 12' + dbmin -3600 + dbmax 0 + dbvalue.0 -3600 + dbvalue.1 -3600 + } + } + control.18 { + iface MIXER + name 'Digital Playback Volume' + value.0 96 + value.1 96 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 127' + dbmin -9999999 + dbmax 2325 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.19 { + iface MIXER + name 'DAC High Performance Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.20 { + iface MIXER + name 'DAC L/R Swap Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.21 { + iface MIXER + name 'ADC L/R Swap Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.22 { + iface MIXER + name 'ADC High Performance Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.23 { + iface MIXER + name 'Beep Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 15' + dbmin -9999999 + dbmax -600 + dbvalue.0 -9999999 + } + } + control.24 { + iface MIXER + name 'Headphone Volume' + value.0 93 + value.1 93 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 127' + dbmin -9999999 + dbmax 600 + dbvalue.0 -2800 + dbvalue.1 -2800 + } + } + control.25 { + iface MIXER + name 'Headphone Switch' + value.0 true + value.1 true + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.26 { + iface MIXER + name 'Headphone ZC Switch' + value.0 false + value.1 false + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.27 { + iface MIXER + name 'Headphone Aux Volume' + value.0 7 + value.1 7 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 7' + dbmin -700 + dbmax 0 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.28 { + iface MIXER + name 'Headphone Mixer Switch' + value.0 false + value.1 false + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.29 { + iface MIXER + name 'HPMIXL IN4L Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -1500 + dbmax 600 + dbvalue.0 600 + } + } + control.30 { + iface MIXER + name 'HPMIXL IN4R Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -1500 + dbmax 600 + dbvalue.0 600 + } + } + control.31 { + iface MIXER + name 'HPMIXL MIXINL Volume' + value 1 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin -600 + dbmax 0 + dbvalue.0 0 + } + } + control.32 { + iface MIXER + name 'HPMIXL MIXINR Volume' + value 1 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin -600 + dbmax 0 + dbvalue.0 0 + } + } + control.33 { + iface MIXER + name 'HPMIXR IN4L Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -1500 + dbmax 600 + dbvalue.0 600 + } + } + control.34 { + iface MIXER + name 'HPMIXR IN4R Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -1500 + dbmax 600 + dbvalue.0 600 + } + } + control.35 { + iface MIXER + name 'HPMIXR MIXINL Volume' + value 1 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin -600 + dbmax 0 + dbvalue.0 0 + } + } + control.36 { + iface MIXER + name 'HPMIXR MIXINR Volume' + value 1 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin -600 + dbmax 0 + dbvalue.0 0 + } + } + control.37 { + iface MIXER + name 'Speaker Boost Volume' + value 3 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin 0 + dbmax 1200 + dbvalue.0 450 + } + } + control.38 { + iface MIXER + name 'EQ Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.39 { + iface MIXER + name 'EQ1 Volume' + value.0 12 + value.1 12 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 31' + dbmin -1200 + dbmax 1900 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.40 { + iface MIXER + name 'EQ2 Volume' + value.0 12 + value.1 12 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 31' + dbmin -1200 + dbmax 1900 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.41 { + iface MIXER + name 'EQ3 Volume' + value.0 12 + value.1 12 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 31' + dbmin -1200 + dbmax 1900 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.42 { + iface MIXER + name 'EQ4 Volume' + value.0 12 + value.1 12 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 31' + dbmin -1200 + dbmax 1900 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.43 { + iface MIXER + name 'EQ5 Volume' + value.0 12 + value.1 12 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 31' + dbmin -1200 + dbmax 1900 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.44 { + iface MIXER + name 'EQL Coefficients' + value '0fca040000d81eb5f1450b7501c51c58f3730a540558168ef82907ad1103056405594000' + comment { + access 'read write' + type BYTES + count 36 + } + } + control.45 { + iface MIXER + name 'EQR Coefficients' + value '0fca040000d81eb5f1450b7501c51c58f3730a540558168ef82907ad1103056405594000' + comment { + access 'read write' + type BYTES + count 36 + } + } + control.46 { + iface MIXER + name '3D Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.47 { + iface MIXER + name '3D Coefficients' + value '0040000000000000' + comment { + access 'read write' + type BYTES + count 8 + } + } + control.48 { + iface MIXER + name 'DF1 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.49 { + iface MIXER + name 'DF1 Coefficients' + value '0000000000000000000000000000' + comment { + access 'read write' + type BYTES + count 14 + } + } + control.50 { + iface MIXER + name 'DRC Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.51 { + iface MIXER + name 'DRC Coefficients' + value '000c0925000000000000' + comment { + access 'read write' + type BYTES + count 10 + } + } + control.52 { + iface MIXER + name 'VSS Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.53 { + iface MIXER + name 'VSS Coefficients' + value '008c020000350700003a4100008b7d00003a4100008cfee800780000003fb260002d18180020000000f1834000fb830000eeaec000fbac4000f17f8000f43b4000f5fb0000ea10c000fcc58000e275c00004b48000d4f9800004914000d8a48000023dc000cf7a8000dc060000f2dac000baf340000a7940001c068000fd2d00001ce840000ddc4000fc9d000009558000fe7e80000eab4000f99880000987c000fd2c400009480000035f400000870000fae4c000000b400004e18000011f4000f8b00000fbcbc00004f3800007df4000ff070000efd70000fbaf4000108a80001107c000e0080000d276000020cf400030234000fd69c0002835000006330000d9f6c000f33340000f420000040c8000fb3f8000f757c0000354000000c6c0000312c000fd8580' + comment { + access 'read write' + type BYTES + count 296 + } + } + control.54 { + iface MIXER + name 'HPF1 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.55 { + iface MIXER + name 'HPF2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.56 { + iface MIXER + name 'HPF Coefficients' + value '0000' + comment { + access 'read write' + type BYTES + count 2 + } + } + control.57 { + iface MIXER + name 'HD Bass Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.58 { + iface MIXER + name 'HD Bass Coefficients' + value '0002bd12007c586c00538121003f8bd80032f52d0065ac8c006be08700721483007214830043352500066a4a0043607900080000000100000059999a' + comment { + access 'read write' + type BYTES + count 60 + } + } + control.59 { + iface MIXER + name 'ALC Switch' + value.0 false + value.1 false + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.60 { + iface MIXER + name ALC1 + value '007b' + comment { + access 'read write' + type BYTES + count 2 + } + } + control.61 { + iface MIXER + name ALC2 + value '0000' + comment { + access 'read write' + type BYTES + count 2 + } + } + control.62 { + iface MIXER + name ALC3 + value '1c32' + comment { + access 'read write' + type BYTES + count 2 + } + } + control.63 { + iface MIXER + name 'Noise Gate' + value '3200' + comment { + access 'read write' + type BYTES + count 2 + } + } + control.64 { + iface MIXER + name 'Speaker Volume' + value.0 114 + value.1 114 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 127' + dbmin -9999999 + dbmax 600 + dbvalue.0 -700 + dbvalue.1 -700 + } + } + control.65 { + iface MIXER + name 'Speaker Switch' + value.0 true + value.1 true + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.66 { + iface MIXER + name 'Speaker ZC Switch' + value.0 false + value.1 false + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.67 { + iface MIXER + name 'Speaker Mixer Switch' + value.0 false + value.1 false + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.68 { + iface MIXER + name 'SPKOUTL Mixer IN4L Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -1500 + dbmax 600 + dbvalue.0 600 + } + } + control.69 { + iface MIXER + name 'SPKOUTL Mixer IN4R Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -1500 + dbmax 600 + dbvalue.0 600 + } + } + control.70 { + iface MIXER + name 'SPKOUTL Mixer MIXINL Volume' + value 1 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin -600 + dbmax 0 + dbvalue.0 0 + } + } + control.71 { + iface MIXER + name 'SPKOUTL Mixer MIXINR Volume' + value 1 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin -600 + dbmax 0 + dbvalue.0 0 + } + } + control.72 { + iface MIXER + name 'SPKOUTL Mixer DACL Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin -600 + dbmax 0 + dbvalue.0 -600 + } + } + control.73 { + iface MIXER + name 'SPKOUTL Mixer DACR Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin -600 + dbmax 0 + dbvalue.0 -600 + } + } + control.74 { + iface MIXER + name 'SPKOUTR Mixer IN4L Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -1500 + dbmax 600 + dbvalue.0 600 + } + } + control.75 { + iface MIXER + name 'SPKOUTR Mixer IN4R Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -1500 + dbmax 600 + dbvalue.0 600 + } + } + control.76 { + iface MIXER + name 'SPKOUTR Mixer MIXINL Volume' + value 1 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin -600 + dbmax 0 + dbvalue.0 0 + } + } + control.77 { + iface MIXER + name 'SPKOUTR Mixer MIXINR Volume' + value 1 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin -600 + dbmax 0 + dbvalue.0 0 + } + } + control.78 { + iface MIXER + name 'SPKOUTR Mixer DACL Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin -600 + dbmax 0 + dbvalue.0 -600 + } + } + control.79 { + iface MIXER + name 'SPKOUTR Mixer DACR Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin -600 + dbmax 0 + dbvalue.0 -600 + } + } + control.80 { + iface MIXER + name 'SPKOUTR PGA' + value DAC + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 DAC + item.1 Mixer + } + } + control.81 { + iface MIXER + name 'SPKOUTL PGA' + value DAC + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 DAC + item.1 Mixer + } + } + control.82 { + iface MIXER + name 'SPKOUTR Mixer DACL Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.83 { + iface MIXER + name 'SPKOUTR Mixer DACR Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.84 { + iface MIXER + name 'SPKOUTR Mixer MIXINL Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.85 { + iface MIXER + name 'SPKOUTR Mixer MIXINR Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.86 { + iface MIXER + name 'SPKOUTR Mixer IN4L Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.87 { + iface MIXER + name 'SPKOUTR Mixer IN4R Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.88 { + iface MIXER + name 'SPKOUTL Mixer DACL Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.89 { + iface MIXER + name 'SPKOUTL Mixer DACR Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.90 { + iface MIXER + name 'SPKOUTL Mixer MIXINL Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.91 { + iface MIXER + name 'SPKOUTL Mixer MIXINR Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.92 { + iface MIXER + name 'SPKOUTL Mixer IN4L Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.93 { + iface MIXER + name 'SPKOUTL Mixer IN4R Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.94 { + iface MIXER + name 'HPOUTR PGA' + value DAC + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 DAC + item.1 Mixer + } + } + control.95 { + iface MIXER + name 'HPOUTL PGA' + value DAC + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 DAC + item.1 Mixer + } + } + control.96 { + iface MIXER + name 'HPMIXR DACL Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.97 { + iface MIXER + name 'HPMIXR DACR Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.98 { + iface MIXER + name 'HPMIXR MIXINL Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.99 { + iface MIXER + name 'HPMIXR MIXINR Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.100 { + iface MIXER + name 'HPMIXR IN4L Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.101 { + iface MIXER + name 'HPMIXR IN4R Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.102 { + iface MIXER + name 'HPMIXL DACL Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.103 { + iface MIXER + name 'HPMIXL DACR Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.104 { + iface MIXER + name 'HPMIXL MIXINL Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.105 { + iface MIXER + name 'HPMIXL MIXINR Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.106 { + iface MIXER + name 'HPMIXL IN4L Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.107 { + iface MIXER + name 'HPMIXL IN4R Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.108 { + iface MIXER + name STR + value None + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 None + item.1 Left + item.2 Right + } + } + control.109 { + iface MIXER + name STL + value None + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 None + item.1 Left + item.2 Right + } + } + control.110 { + iface MIXER + name 'MIXINR IN2R Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.111 { + iface MIXER + name 'MIXINR IN3R Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.112 { + iface MIXER + name 'MIXINR PGA Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.113 { + iface MIXER + name 'MIXINL IN2L Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.114 { + iface MIXER + name 'MIXINL IN3L Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.115 { + iface MIXER + name 'MIXINL PGA Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.116 { + iface MIXER + name 'INPGAR IN1R Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.117 { + iface MIXER + name 'INPGAR IN2R Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.118 { + iface MIXER + name 'INPGAR IN3R Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.119 { + iface MIXER + name 'INPGAR IN4R Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.120 { + iface MIXER + name 'INPGAL IN1L Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.121 { + iface MIXER + name 'INPGAL IN2L Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.122 { + iface MIXER + name 'INPGAL IN3L Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.123 { + iface MIXER + name 'INPGAL IN4L Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.124 { + iface CARD + name 'Headphone Jack' + value true + comment { + access read + type BOOLEAN + count 1 + } + } +} +state.wm8960audio { + control.1 { + iface MIXER + name 'Capture Volume' + value.0 35 + value.1 35 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 63' + dbmin -1725 + dbmax 3000 + dbvalue.0 900 + dbvalue.1 900 + } + } + control.2 { + iface MIXER + name 'Capture Volume ZC Switch' + value.0 0 + value.1 0 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 1' + } + } + control.3 { + iface MIXER + name 'Capture Switch' + value.0 true + value.1 true + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.4 { + iface MIXER + name 'Left Input Boost Mixer LINPUT3 Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -9999999 + dbmax 600 + dbvalue.0 600 + } + } + control.5 { + iface MIXER + name 'Left Input Boost Mixer LINPUT2 Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -9999999 + dbmax 600 + dbvalue.0 600 + } + } + control.6 { + iface MIXER + name 'Right Input Boost Mixer RINPUT3 Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -9999999 + dbmax 600 + dbvalue.0 600 + } + } + control.7 { + iface MIXER + name 'Right Input Boost Mixer RINPUT2 Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -9999999 + dbmax 600 + dbvalue.0 600 + } + } + control.8 { + iface MIXER + name 'Right Input Boost Mixer RINPUT1 Volume' + value 3 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 3' + dbmin 0 + dbmax 2900 + dbvalue.0 2900 + } + } + control.9 { + iface MIXER + name 'Left Input Boost Mixer LINPUT1 Volume' + value 3 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 3' + dbmin 0 + dbmax 2900 + dbvalue.0 2900 + } + } + control.10 { + iface MIXER + name 'Playback Volume' + value.0 255 + value.1 255 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 255' + dbmin -9999999 + dbmax 0 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.11 { + iface MIXER + name 'Headphone Playback Volume' + value.0 127 + value.1 127 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 127' + dbmin -9999999 + dbmax 600 + dbvalue.0 600 + dbvalue.1 600 + } + } + control.12 { + iface MIXER + name 'Headphone Playback ZC Switch' + value.0 false + value.1 false + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.13 { + iface MIXER + name 'Speaker Playback Volume' + value.0 127 + value.1 127 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 127' + dbmin -9999999 + dbmax 600 + dbvalue.0 600 + dbvalue.1 600 + } + } + control.14 { + iface MIXER + name 'Speaker Playback ZC Switch' + value.0 false + value.1 false + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.15 { + iface MIXER + name 'Speaker DC Volume' + value 5 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 5' + } + } + control.16 { + iface MIXER + name 'Speaker AC Volume' + value 5 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 5' + } + } + control.17 { + iface MIXER + name 'PCM Playback -6dB Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.18 { + iface MIXER + name 'ADC Polarity' + value 'No Inversion' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'No Inversion' + item.1 'Left Inverted' + item.2 'Right Inverted' + item.3 'Stereo Inversion' + } + } + control.19 { + iface MIXER + name 'ADC High Pass Filter Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.20 { + iface MIXER + name 'DAC Polarity' + value 'No Inversion' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'No Inversion' + item.1 'Left Inverted' + item.2 'Right Inverted' + item.3 'Stereo Inversion' + } + } + control.21 { + iface MIXER + name 'DAC Deemphasis Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.22 { + iface MIXER + name '3D Filter Upper Cut-Off' + value High + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 High + item.1 Low + } + } + control.23 { + iface MIXER + name '3D Filter Lower Cut-Off' + value Low + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Low + item.1 High + } + } + control.24 { + iface MIXER + name '3D Volume' + value 15 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 15' + } + } + control.25 { + iface MIXER + name '3D Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.26 { + iface MIXER + name 'ALC Function' + value Off + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Off + item.1 Right + item.2 Left + item.3 Stereo + } + } + control.27 { + iface MIXER + name 'ALC Max Gain' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + } + } + control.28 { + iface MIXER + name 'ALC Target' + value 15 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 15' + } + } + control.29 { + iface MIXER + name 'ALC Min Gain' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + } + } + control.30 { + iface MIXER + name 'ALC Hold Time' + value 15 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 15' + } + } + control.31 { + iface MIXER + name 'ALC Mode' + value ALC + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 ALC + item.1 Limiter + } + } + control.32 { + iface MIXER + name 'ALC Decay' + value 15 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 15' + } + } + control.33 { + iface MIXER + name 'ALC Attack' + value 15 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 15' + } + } + control.34 { + iface MIXER + name 'Noise Gate Threshold' + value 31 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 31' + } + } + control.35 { + iface MIXER + name 'Noise Gate Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.36 { + iface MIXER + name 'ADC PCM Capture Volume' + value.0 195 + value.1 195 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 255' + dbmin -9999999 + dbmax 3000 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.37 { + iface MIXER + name 'Left Output Mixer Boost Bypass Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 0 + } + } + control.38 { + iface MIXER + name 'Left Output Mixer LINPUT3 Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 0 + } + } + control.39 { + iface MIXER + name 'Right Output Mixer Boost Bypass Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 0 + } + } + control.40 { + iface MIXER + name 'Right Output Mixer RINPUT3 Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 0 + } + } + control.41 { + iface MIXER + name 'ADC Data Output Select' + value 'Left Data = Left ADC; Right Data = Left ADC' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Left Data = Left ADC; Right Data = Right ADC' + item.1 'Left Data = Left ADC; Right Data = Left ADC' + item.2 'Left Data = Right ADC; Right Data = Right ADC' + item.3 'Left Data = Right ADC; Right Data = Left ADC' + } + } + control.42 { + iface MIXER + name 'DAC Mono Mix' + value Stereo + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Stereo + item.1 Mono + } + } + control.43 { + iface MIXER + name 'Context 0 Dither Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.44 { + iface MIXER + name 'Context 1 Dither Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.45 { + iface MIXER + name 'Context 2 Dither Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.46 { + iface MIXER + name 'Context 3 Dither Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.47 { + iface MIXER + name 'Context 0 IEC958 Validity' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.48 { + iface MIXER + name 'Context 1 IEC958 Validity' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.49 { + iface MIXER + name 'Context 2 IEC958 Validity' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.50 { + iface MIXER + name 'Context 3 IEC958 Validity' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.51 { + iface PCM + name 'Context 0 IEC958 Bits Per Sample' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 2' + } + } + control.52 { + iface PCM + name 'Context 1 IEC958 Bits Per Sample' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 2' + } + } + control.53 { + iface PCM + name 'Context 2 IEC958 Bits Per Sample' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 2' + } + } + control.54 { + iface PCM + name 'Context 3 IEC958 Bits Per Sample' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 2' + } + } + control.55 { + iface PCM + name 'Context 0 IEC958 CS0' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 4294967295' + } + } + control.56 { + iface PCM + name 'Context 1 IEC958 CS0' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 4294967295' + } + } + control.57 { + iface PCM + name 'Context 2 IEC958 CS0' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 4294967295' + } + } + control.58 { + iface PCM + name 'Context 3 IEC958 CS0' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 4294967295' + } + } + control.59 { + iface PCM + name 'Context 0 IEC958 CS1' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 4294967295' + } + } + control.60 { + iface PCM + name 'Context 1 IEC958 CS1' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 4294967295' + } + } + control.61 { + iface PCM + name 'Context 2 IEC958 CS1' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 4294967295' + } + } + control.62 { + iface PCM + name 'Context 3 IEC958 CS1' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 4294967295' + } + } + control.63 { + iface PCM + name 'Context 0 IEC958 CS2' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 4294967295' + } + } + control.64 { + iface PCM + name 'Context 1 IEC958 CS2' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 4294967295' + } + } + control.65 { + iface PCM + name 'Context 2 IEC958 CS2' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 4294967295' + } + } + control.66 { + iface PCM + name 'Context 3 IEC958 CS2' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 4294967295' + } + } + control.67 { + iface PCM + name 'Context 0 IEC958 CS3' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 4294967295' + } + } + control.68 { + iface PCM + name 'Context 1 IEC958 CS3' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 4294967295' + } + } + control.69 { + iface PCM + name 'Context 2 IEC958 CS3' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 4294967295' + } + } + control.70 { + iface PCM + name 'Context 3 IEC958 CS3' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 4294967295' + } + } + control.71 { + iface PCM + name 'Context 0 IEC958 CS4' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 4294967295' + } + } + control.72 { + iface PCM + name 'Context 1 IEC958 CS4' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 4294967295' + } + } + control.73 { + iface PCM + name 'Context 2 IEC958 CS4' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 4294967295' + } + } + control.74 { + iface PCM + name 'Context 3 IEC958 CS4' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 4294967295' + } + } + control.75 { + iface PCM + name 'Context 0 IEC958 CS5' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 4294967295' + } + } + control.76 { + iface PCM + name 'Context 1 IEC958 CS5' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 4294967295' + } + } + control.77 { + iface PCM + name 'Context 2 IEC958 CS5' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 4294967295' + } + } + control.78 { + iface PCM + name 'Context 3 IEC958 CS5' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 4294967295' + } + } + control.79 { + iface MIXER + name 'Left Boost Mixer LINPUT2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.80 { + iface MIXER + name 'Left Boost Mixer LINPUT3 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.81 { + iface MIXER + name 'Left Boost Mixer LINPUT1 Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.82 { + iface MIXER + name 'Right Boost Mixer RINPUT2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.83 { + iface MIXER + name 'Right Boost Mixer RINPUT3 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.84 { + iface MIXER + name 'Right Boost Mixer RINPUT1 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.85 { + iface MIXER + name 'Left Input Mixer Boost Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.86 { + iface MIXER + name 'Right Input Mixer Boost Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.87 { + iface MIXER + name 'Left Output Mixer PCM Playback Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.88 { + iface MIXER + name 'Left Output Mixer LINPUT3 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.89 { + iface MIXER + name 'Left Output Mixer Boost Bypass Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.90 { + iface MIXER + name 'Right Output Mixer PCM Playback Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.91 { + iface MIXER + name 'Right Output Mixer RINPUT3 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.92 { + iface MIXER + name 'Right Output Mixer Boost Bypass Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.93 { + iface MIXER + name 'Mono Output Mixer Left Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.94 { + iface MIXER + name 'Mono Output Mixer Right Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.95 { + iface CARD + name 'Headphone Jack' + value false + comment { + access read + type BOOLEAN + count 1 + } + } +} +state.wm8958audio { + control.1 { + iface MIXER + name 'AIF1.1 DRC' + value '00980845000000000000' + comment { + access 'read write' + type BYTES + count 10 + } + } + control.2 { + iface MIXER + name 'AIF1.2 DRC' + value '00980845000000000000' + comment { + access 'read write' + type BYTES + count 10 + } + } + control.3 { + iface MIXER + name 'AIF2 DRC' + value '00980845000000000000' + comment { + access 'read write' + type BYTES + count 10 + } + } + control.4 { + iface MIXER + name 'AIF1DAC1 EQ1 Volume' + value 12 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 31' + dbmin -1200 + dbmax 1900 + dbvalue.0 0 + } + } + control.5 { + iface MIXER + name 'AIF1DAC1 EQ2 Volume' + value 12 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 31' + dbmin -1200 + dbmax 1900 + dbvalue.0 0 + } + } + control.6 { + iface MIXER + name 'AIF1DAC1 EQ3 Volume' + value 12 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 31' + dbmin -1200 + dbmax 1900 + dbvalue.0 0 + } + } + control.7 { + iface MIXER + name 'AIF1DAC1 EQ4 Volume' + value 12 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 31' + dbmin -1200 + dbmax 1900 + dbvalue.0 0 + } + } + control.8 { + iface MIXER + name 'AIF1DAC1 EQ5 Volume' + value 12 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 31' + dbmin -1200 + dbmax 1900 + dbvalue.0 0 + } + } + control.9 { + iface MIXER + name 'AIF1DAC2 EQ1 Volume' + value 12 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 31' + dbmin -1200 + dbmax 1900 + dbvalue.0 0 + } + } + control.10 { + iface MIXER + name 'AIF1DAC2 EQ2 Volume' + value 12 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 31' + dbmin -1200 + dbmax 1900 + dbvalue.0 0 + } + } + control.11 { + iface MIXER + name 'AIF1DAC2 EQ3 Volume' + value 12 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 31' + dbmin -1200 + dbmax 1900 + dbvalue.0 0 + } + } + control.12 { + iface MIXER + name 'AIF1DAC2 EQ4 Volume' + value 12 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 31' + dbmin -1200 + dbmax 1900 + dbvalue.0 0 + } + } + control.13 { + iface MIXER + name 'AIF1DAC2 EQ5 Volume' + value 12 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 31' + dbmin -1200 + dbmax 1900 + dbvalue.0 0 + } + } + control.14 { + iface MIXER + name 'AIF2 EQ1 Volume' + value 12 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 31' + dbmin -1200 + dbmax 1900 + dbvalue.0 0 + } + } + control.15 { + iface MIXER + name 'AIF2 EQ2 Volume' + value 12 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 31' + dbmin -1200 + dbmax 1900 + dbvalue.0 0 + } + } + control.16 { + iface MIXER + name 'AIF2 EQ3 Volume' + value 12 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 31' + dbmin -1200 + dbmax 1900 + dbvalue.0 0 + } + } + control.17 { + iface MIXER + name 'AIF2 EQ4 Volume' + value 12 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 31' + dbmin -1200 + dbmax 1900 + dbvalue.0 0 + } + } + control.18 { + iface MIXER + name 'AIF2 EQ5 Volume' + value 12 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 31' + dbmin -1200 + dbmax 1900 + dbvalue.0 0 + } + } + control.19 { + iface MIXER + name 'IN1L Volume' + value 11 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 31' + dbmin -1650 + dbmax 3000 + dbvalue.0 0 + } + } + control.20 { + iface MIXER + name 'IN1L Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.21 { + iface MIXER + name 'IN1L ZC Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.22 { + iface MIXER + name 'IN1R Volume' + value 11 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 31' + dbmin -1650 + dbmax 3000 + dbvalue.0 0 + } + } + control.23 { + iface MIXER + name 'IN1R Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.24 { + iface MIXER + name 'IN1R ZC Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.25 { + iface MIXER + name 'IN2L Volume' + value 11 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 31' + dbmin -1650 + dbmax 3000 + dbvalue.0 0 + } + } + control.26 { + iface MIXER + name 'IN2L Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.27 { + iface MIXER + name 'IN2L ZC Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.28 { + iface MIXER + name 'IN2R Volume' + value 11 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 31' + dbmin -1650 + dbmax 3000 + dbvalue.0 0 + } + } + control.29 { + iface MIXER + name 'IN2R Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.30 { + iface MIXER + name 'IN2R ZC Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.31 { + iface MIXER + name 'MIXINL IN2L Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin 0 + dbmax 3000 + dbvalue.0 0 + } + } + control.32 { + iface MIXER + name 'MIXINL IN1L Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin 0 + dbmax 3000 + dbvalue.0 0 + } + } + control.33 { + iface MIXER + name 'MIXINL Output Record Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -9999999 + dbmax 600 + dbvalue.0 -9999999 + } + } + control.34 { + iface MIXER + name 'MIXINL IN1LP Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -9999999 + dbmax 600 + dbvalue.0 -9999999 + } + } + control.35 { + iface MIXER + name 'MIXINL Direct Voice Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 6' + dbmin -9999999 + dbmax 300 + dbvalue.0 -9999999 + } + } + control.36 { + iface MIXER + name 'MIXINR IN2R Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin 0 + dbmax 3000 + dbvalue.0 0 + } + } + control.37 { + iface MIXER + name 'MIXINR IN1R Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin 0 + dbmax 3000 + dbvalue.0 0 + } + } + control.38 { + iface MIXER + name 'MIXINR Output Record Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -9999999 + dbmax 600 + dbvalue.0 -9999999 + } + } + control.39 { + iface MIXER + name 'MIXINR IN1RP Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -9999999 + dbmax 600 + dbvalue.0 -9999999 + } + } + control.40 { + iface MIXER + name 'MIXINR Direct Voice Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 6' + dbmin -9999999 + dbmax 300 + dbvalue.0 -9999999 + } + } + control.41 { + iface MIXER + name 'Left Output Mixer IN2RN Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 0 + } + } + control.42 { + iface MIXER + name 'Left Output Mixer IN2LN Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 0 + } + } + control.43 { + iface MIXER + name 'Left Output Mixer IN2LP Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 0 + } + } + control.44 { + iface MIXER + name 'Left Output Mixer IN1L Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 0 + } + } + control.45 { + iface MIXER + name 'Left Output Mixer IN1R Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 0 + } + } + control.46 { + iface MIXER + name 'Left Output Mixer Right Input Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 0 + } + } + control.47 { + iface MIXER + name 'Left Output Mixer Left Input Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 0 + } + } + control.48 { + iface MIXER + name 'Left Output Mixer DAC Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 0 + } + } + control.49 { + iface MIXER + name 'Right Output Mixer IN2LN Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 0 + } + } + control.50 { + iface MIXER + name 'Right Output Mixer IN2RN Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 0 + } + } + control.51 { + iface MIXER + name 'Right Output Mixer IN1L Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 0 + } + } + control.52 { + iface MIXER + name 'Right Output Mixer IN1R Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 0 + } + } + control.53 { + iface MIXER + name 'Right Output Mixer IN2RP Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 0 + } + } + control.54 { + iface MIXER + name 'Right Output Mixer Left Input Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 0 + } + } + control.55 { + iface MIXER + name 'Right Output Mixer Right Input Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 0 + } + } + control.56 { + iface MIXER + name 'Right Output Mixer DAC Volume' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 0 + } + } + control.57 { + iface MIXER + name 'Output Volume' + value.0 57 + value.1 57 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 63' + dbmin -5700 + dbmax 600 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.58 { + iface MIXER + name 'Output Switch' + value.0 true + value.1 true + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.59 { + iface MIXER + name 'Output ZC Switch' + value.0 true + value.1 true + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.60 { + iface MIXER + name 'Earpiece Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.61 { + iface MIXER + name 'Earpiece Volume' + value 1 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin -600 + dbmax 0 + dbvalue.0 0 + } + } + control.62 { + iface MIXER + name 'SPKL Input Volume' + value 1 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin -300 + dbmax 0 + dbvalue.0 0 + } + } + control.63 { + iface MIXER + name 'SPKL IN1LP Volume' + value 1 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin -300 + dbmax 0 + dbvalue.0 0 + } + } + control.64 { + iface MIXER + name 'SPKL Output Volume' + value 1 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin -300 + dbmax 0 + dbvalue.0 0 + } + } + control.65 { + iface MIXER + name 'SPKR Input Volume' + value 1 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin -300 + dbmax 0 + dbvalue.0 0 + } + } + control.66 { + iface MIXER + name 'SPKR IN1RP Volume' + value 1 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin -300 + dbmax 0 + dbvalue.0 0 + } + } + control.67 { + iface MIXER + name 'SPKR Output Volume' + value 1 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin -300 + dbmax 0 + dbvalue.0 0 + } + } + control.68 { + iface MIXER + name 'Speaker Mixer Volume' + value.0 3 + value.1 3 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 3' + dbmin -9999999 + dbmax 0 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.69 { + iface MIXER + name 'Speaker Volume' + value.0 60 + value.1 60 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 63' + dbmin -5700 + dbmax 600 + dbvalue.0 300 + dbvalue.1 300 + } + } + control.70 { + iface MIXER + name 'Speaker Switch' + value.0 true + value.1 true + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.71 { + iface MIXER + name 'Speaker ZC Switch' + value.0 false + value.1 false + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.72 { + iface MIXER + name 'Speaker Boost Volume' + value.0 0 + value.1 0 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 7' + dbmin 0 + dbmax 1200 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.73 { + iface MIXER + name 'Speaker Reference' + value SPKVDD/2 + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 SPKVDD/2 + item.1 VMID + } + } + control.74 { + iface MIXER + name 'Speaker Mode' + value 'Class D' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Class D' + item.1 'Class AB' + } + } + control.75 { + iface MIXER + name 'Headphone Volume' + value.0 25 + value.1 25 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 63' + dbmin -5700 + dbmax 600 + dbvalue.0 -3200 + dbvalue.1 -3200 + } + } + control.76 { + iface MIXER + name 'Headphone Switch' + value.0 true + value.1 true + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.77 { + iface MIXER + name 'Headphone ZC Switch' + value.0 true + value.1 true + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.78 { + iface MIXER + name 'LINEOUT1N Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.79 { + iface MIXER + name 'LINEOUT1P Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.80 { + iface MIXER + name 'LINEOUT1 Volume' + value 1 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin -600 + dbmax 0 + dbvalue.0 0 + } + } + control.81 { + iface MIXER + name 'LINEOUT2N Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.82 { + iface MIXER + name 'LINEOUT2P Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.83 { + iface MIXER + name 'LINEOUT2 Volume' + value 1 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin -600 + dbmax 0 + dbvalue.0 0 + } + } + control.84 { + iface MIXER + name 'AIF1ADC1 Volume' + value.0 96 + value.1 96 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 119' + dbmin -9999999 + dbmax 1725 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.85 { + iface MIXER + name 'AIF1ADC2 Volume' + value.0 96 + value.1 96 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 119' + dbmin -9999999 + dbmax 1725 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.86 { + iface MIXER + name 'AIF2ADC Volume' + value.0 96 + value.1 96 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 119' + dbmin -9999999 + dbmax 1725 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.87 { + iface MIXER + name 'AIF1ADCL Source' + value Left + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Left + item.1 Right + } + } + control.88 { + iface MIXER + name 'AIF1ADCR Source' + value Left + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Left + item.1 Right + } + } + control.89 { + iface MIXER + name 'AIF2ADCL Source' + value Left + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Left + item.1 Right + } + } + control.90 { + iface MIXER + name 'AIF2ADCR Source' + value Right + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Left + item.1 Right + } + } + control.91 { + iface MIXER + name 'AIF1DACL Source' + value Left + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Left + item.1 Right + } + } + control.92 { + iface MIXER + name 'AIF1DACR Source' + value Right + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Left + item.1 Right + } + } + control.93 { + iface MIXER + name 'AIF2DACL Source' + value Left + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Left + item.1 Right + } + } + control.94 { + iface MIXER + name 'AIF2DACR Source' + value Right + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Left + item.1 Right + } + } + control.95 { + iface MIXER + name 'AIF1DAC1 Volume' + value.0 96 + value.1 96 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 96' + dbmin -9999999 + dbmax 0 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.96 { + iface MIXER + name 'AIF1DAC2 Volume' + value.0 96 + value.1 96 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 96' + dbmin -9999999 + dbmax 0 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.97 { + iface MIXER + name 'AIF2DAC Volume' + value.0 96 + value.1 96 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 96' + dbmin -9999999 + dbmax 0 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.98 { + iface MIXER + name 'AIF1 Boost Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 3' + dbmin 0 + dbmax 1800 + dbvalue.0 0 + } + } + control.99 { + iface MIXER + name 'AIF2 Boost Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 3' + dbmin 0 + dbmax 1800 + dbvalue.0 0 + } + } + control.100 { + iface MIXER + name 'AIF1DAC1 EQ Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.101 { + iface MIXER + name 'AIF1DAC2 EQ Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.102 { + iface MIXER + name 'AIF2 EQ Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.103 { + iface MIXER + name 'AIF1DAC1 DRC Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.104 { + iface MIXER + name 'AIF1ADC1L DRC Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.105 { + iface MIXER + name 'AIF1ADC1R DRC Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.106 { + iface MIXER + name 'AIF1DAC2 DRC Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.107 { + iface MIXER + name 'AIF1ADC2L DRC Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.108 { + iface MIXER + name 'AIF1ADC2R DRC Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.109 { + iface MIXER + name 'AIF2DAC DRC Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.110 { + iface MIXER + name 'AIF2ADCL DRC Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.111 { + iface MIXER + name 'AIF2ADCR DRC Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.112 { + iface MIXER + name 'DAC1 Right Sidetone Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 12' + dbmin -3600 + dbmax 0 + dbvalue.0 -3600 + } + } + control.113 { + iface MIXER + name 'DAC1 Left Sidetone Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 12' + dbmin -3600 + dbmax 0 + dbvalue.0 -3600 + } + } + control.114 { + iface MIXER + name 'DAC2 Right Sidetone Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 12' + dbmin -3600 + dbmax 0 + dbvalue.0 -3600 + } + } + control.115 { + iface MIXER + name 'DAC2 Left Sidetone Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 12' + dbmin -3600 + dbmax 0 + dbvalue.0 -3600 + } + } + control.116 { + iface MIXER + name 'Sidetone HPF Mux' + value '2.7kHz' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '2.7kHz' + item.1 '1.35kHz' + item.2 '675Hz' + item.3 '370Hz' + item.4 '180Hz' + item.5 '90Hz' + item.6 '45Hz' + } + } + control.117 { + iface MIXER + name 'Sidetone HPF Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.118 { + iface MIXER + name 'AIF1ADC1 HPF Mode' + value HiFi + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 HiFi + item.1 'Voice 1' + item.2 'Voice 2' + item.3 'Voice 3' + } + } + control.119 { + iface MIXER + name 'AIF1ADC1 HPF Switch' + value.0 false + value.1 false + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.120 { + iface MIXER + name 'AIF1ADC2 HPF Mode' + value HiFi + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 HiFi + item.1 'Voice 1' + item.2 'Voice 2' + item.3 'Voice 3' + } + } + control.121 { + iface MIXER + name 'AIF1ADC2 HPF Switch' + value.0 false + value.1 false + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.122 { + iface MIXER + name 'AIF2ADC HPF Mode' + value HiFi + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 HiFi + item.1 'Voice 1' + item.2 'Voice 2' + item.3 'Voice 3' + } + } + control.123 { + iface MIXER + name 'AIF2ADC HPF Switch' + value.0 false + value.1 false + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.124 { + iface MIXER + name 'ADC OSR' + value 'High Performance' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Low Power' + item.1 'High Performance' + } + } + control.125 { + iface MIXER + name 'DAC OSR' + value 'Low Power' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Low Power' + item.1 'High Performance' + } + } + control.126 { + iface MIXER + name 'DAC1 Volume' + value.0 96 + value.1 96 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 96' + dbmin -9999999 + dbmax 0 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.127 { + iface MIXER + name 'DAC1 Switch' + value.0 true + value.1 true + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.128 { + iface MIXER + name 'DAC2 Volume' + value.0 96 + value.1 96 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 96' + dbmin -9999999 + dbmax 0 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.129 { + iface MIXER + name 'DAC2 Switch' + value.0 false + value.1 false + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.130 { + iface MIXER + name 'SPKL DAC2 Volume' + value 1 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin -300 + dbmax 0 + dbvalue.0 0 + } + } + control.131 { + iface MIXER + name 'SPKL DAC1 Volume' + value 1 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin -300 + dbmax 0 + dbvalue.0 0 + } + } + control.132 { + iface MIXER + name 'SPKR DAC2 Volume' + value 1 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin -300 + dbmax 0 + dbvalue.0 0 + } + } + control.133 { + iface MIXER + name 'SPKR DAC1 Volume' + value 1 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + dbmin -300 + dbmax 0 + dbvalue.0 0 + } + } + control.134 { + iface MIXER + name 'AIF1DAC1 3D Stereo Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 15' + dbmin -1600 + dbmax 1145 + dbvalue.0 -1600 + } + } + control.135 { + iface MIXER + name 'AIF1DAC1 3D Stereo Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.136 { + iface MIXER + name 'AIF1DAC2 3D Stereo Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 15' + dbmin -1600 + dbmax 1145 + dbvalue.0 -1600 + } + } + control.137 { + iface MIXER + name 'AIF1DAC2 3D Stereo Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.138 { + iface MIXER + name 'AIF2DAC 3D Stereo Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 15' + dbmin -1600 + dbmax 1145 + dbvalue.0 -1600 + } + } + control.139 { + iface MIXER + name 'AIF2DAC 3D Stereo Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.140 { + iface MIXER + name 'AIF3 Boost Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 3' + dbmin 0 + dbmax 1800 + dbvalue.0 0 + } + } + control.141 { + iface MIXER + name 'AIF1DAC1 Noise Gate Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.142 { + iface MIXER + name 'AIF1DAC1 Noise Gate Hold Time' + value '30ms' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '30ms' + item.1 '125ms' + item.2 '250ms' + item.3 '500ms' + } + } + control.143 { + iface MIXER + name 'AIF1DAC1 Noise Gate Threshold Volume' + value 3 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -10200 + dbmax -6000 + dbvalue.0 -8400 + } + } + control.144 { + iface MIXER + name 'AIF1DAC2 Noise Gate Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.145 { + iface MIXER + name 'AIF1DAC2 Noise Gate Hold Time' + value '30ms' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '30ms' + item.1 '125ms' + item.2 '250ms' + item.3 '500ms' + } + } + control.146 { + iface MIXER + name 'AIF1DAC2 Noise Gate Threshold Volume' + value 3 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -10200 + dbmax -6000 + dbvalue.0 -8400 + } + } + control.147 { + iface MIXER + name 'AIF2DAC Noise Gate Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.148 { + iface MIXER + name 'AIF2DAC Noise Gate Hold Time' + value '30ms' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '30ms' + item.1 '125ms' + item.2 '250ms' + item.3 '500ms' + } + } + control.149 { + iface MIXER + name 'AIF2DAC Noise Gate Threshold Volume' + value 3 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -10200 + dbmax -6000 + dbvalue.0 -8400 + } + } + control.150 { + iface MIXER + name 'AIF1DAC1 MBC Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.151 { + iface MIXER + name 'AIF1DAC2 MBC Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.152 { + iface MIXER + name 'AIF2DAC MBC Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.153 { + iface MIXER + name 'AIF1DAC1 VSS Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.154 { + iface MIXER + name 'AIF1DAC2 VSS Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.155 { + iface MIXER + name 'AIF2DAC VSS Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.156 { + iface MIXER + name 'AIF1DAC1 HPF1 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.157 { + iface MIXER + name 'AIF1DAC2 HPF1 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.158 { + iface MIXER + name 'AIF2DAC HPF1 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.159 { + iface MIXER + name 'AIF1DAC1 HPF2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.160 { + iface MIXER + name 'AIF1DAC2 HPF2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.161 { + iface MIXER + name 'AIF2DAC HPF2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.162 { + iface MIXER + name 'AIF1DAC1 Enhanced EQ Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.163 { + iface MIXER + name 'AIF1DAC2 Enhanced EQ Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.164 { + iface MIXER + name 'AIF2DAC Enhanced EQ Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.165 { + iface MIXER + name 'ADCR Mux' + value ADC + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 ADC + item.1 DMIC + } + } + control.166 { + iface MIXER + name 'ADCL Mux' + value ADC + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 ADC + item.1 DMIC + } + } + control.167 { + iface MIXER + name 'Right Headphone Mux' + value DAC + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Mixer + item.1 DAC + } + } + control.168 { + iface MIXER + name 'Left Headphone Mux' + value DAC + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Mixer + item.1 DAC + } + } + control.169 { + iface MIXER + name 'SPKR DAC2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.170 { + iface MIXER + name 'SPKR Input Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.171 { + iface MIXER + name 'SPKR IN1RP Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.172 { + iface MIXER + name 'SPKR Output Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.173 { + iface MIXER + name 'SPKR DAC1 Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.174 { + iface MIXER + name 'SPKL DAC2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.175 { + iface MIXER + name 'SPKL Input Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.176 { + iface MIXER + name 'SPKL IN1LP Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.177 { + iface MIXER + name 'SPKL Output Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.178 { + iface MIXER + name 'SPKL DAC1 Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.179 { + iface MIXER + name 'AIF3ADC Mux' + value AIF1ADCDAT + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 AIF1ADCDAT + item.1 AIF2ADCDAT + item.2 AIF2DACDAT + item.3 'Mono PCM' + } + } + control.180 { + iface MIXER + name 'AIF2DACR Mux' + value AIF2 + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 AIF2 + item.1 AIF3 + } + } + control.181 { + iface MIXER + name 'AIF2DACL Mux' + value AIF2 + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 AIF2 + item.1 AIF3 + } + } + control.182 { + iface MIXER + name 'Mono PCM Out Mux' + value None + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 None + item.1 AIF2ADCL + item.2 AIF2ADCR + } + } + control.183 { + iface MIXER + name 'AIF2 Loopback' + value None + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 None + item.1 ADCDAT + } + } + control.184 { + iface MIXER + name 'AIF1 Loopback' + value None + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 None + item.1 ADCDAT + } + } + control.185 { + iface MIXER + name 'AIF2ADC Mux' + value AIF2ADCDAT + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 AIF2ADCDAT + item.1 AIF3DACDAT + } + } + control.186 { + iface MIXER + name 'AIF2DAC Mux' + value AIF2DACDAT + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 AIF2DACDAT + item.1 AIF3DACDAT + } + } + control.187 { + iface MIXER + name 'AIF1DAC Mux' + value AIF1DACDAT + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 AIF1DACDAT + item.1 AIF3DACDAT + } + } + control.188 { + iface MIXER + name 'DAC1R Mixer Right Sidetone Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.189 { + iface MIXER + name 'DAC1R Mixer Left Sidetone Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.190 { + iface MIXER + name 'DAC1R Mixer AIF2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.191 { + iface MIXER + name 'DAC1R Mixer AIF1.2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.192 { + iface MIXER + name 'DAC1R Mixer AIF1.1 Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.193 { + iface MIXER + name 'DAC1L Mixer Right Sidetone Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.194 { + iface MIXER + name 'DAC1L Mixer Left Sidetone Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.195 { + iface MIXER + name 'DAC1L Mixer AIF2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.196 { + iface MIXER + name 'DAC1L Mixer AIF1.2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.197 { + iface MIXER + name 'DAC1L Mixer AIF1.1 Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.198 { + iface MIXER + name 'Right Sidetone' + value ADC/DMIC1 + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 ADC/DMIC1 + item.1 DMIC2 + } + } + control.199 { + iface MIXER + name 'Left Sidetone' + value ADC/DMIC1 + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 ADC/DMIC1 + item.1 DMIC2 + } + } + control.200 { + iface MIXER + name 'AIF2DAC2R Mixer Right Sidetone Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.201 { + iface MIXER + name 'AIF2DAC2R Mixer Left Sidetone Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.202 { + iface MIXER + name 'AIF2DAC2R Mixer AIF2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.203 { + iface MIXER + name 'AIF2DAC2R Mixer AIF1.2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.204 { + iface MIXER + name 'AIF2DAC2R Mixer AIF1.1 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.205 { + iface MIXER + name 'AIF2DAC2L Mixer Right Sidetone Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.206 { + iface MIXER + name 'AIF2DAC2L Mixer Left Sidetone Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.207 { + iface MIXER + name 'AIF2DAC2L Mixer AIF2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.208 { + iface MIXER + name 'AIF2DAC2L Mixer AIF1.2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.209 { + iface MIXER + name 'AIF2DAC2L Mixer AIF1.1 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.210 { + iface MIXER + name 'AIF1ADC2R Mixer DMIC Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.211 { + iface MIXER + name 'AIF1ADC2R Mixer AIF2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.212 { + iface MIXER + name 'AIF1ADC2L Mixer DMIC Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.213 { + iface MIXER + name 'AIF1ADC2L Mixer AIF2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.214 { + iface MIXER + name 'AIF1ADC1R Mixer ADC/DMIC Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.215 { + iface MIXER + name 'AIF1ADC1R Mixer AIF2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.216 { + iface MIXER + name 'AIF1ADC1L Mixer ADC/DMIC Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.217 { + iface MIXER + name 'AIF1ADC1L Mixer AIF2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.218 { + iface MIXER + name 'LINEOUT2P Mixer Right Output Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.219 { + iface MIXER + name 'LINEOUT2N Mixer Left Output Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.220 { + iface MIXER + name 'LINEOUT2N Mixer Right Output Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.221 { + iface MIXER + name 'LINEOUT1P Mixer Left Output Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.222 { + iface MIXER + name 'LINEOUT1N Mixer Left Output Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.223 { + iface MIXER + name 'LINEOUT1N Mixer Right Output Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.224 { + iface MIXER + name 'SPKR Boost Direct Voice Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.225 { + iface MIXER + name 'SPKR Boost SPKL Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.226 { + iface MIXER + name 'SPKR Boost SPKR Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.227 { + iface MIXER + name 'SPKL Boost Direct Voice Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.228 { + iface MIXER + name 'SPKL Boost SPKL Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.229 { + iface MIXER + name 'SPKL Boost SPKR Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.230 { + iface MIXER + name 'Earpiece Mixer Direct Voice Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.231 { + iface MIXER + name 'Earpiece Mixer Left Output Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.232 { + iface MIXER + name 'Earpiece Mixer Right Output Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.233 { + iface MIXER + name 'Right Output Mixer Left Input Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.234 { + iface MIXER + name 'Right Output Mixer Right Input Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.235 { + iface MIXER + name 'Right Output Mixer IN2LN Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.236 { + iface MIXER + name 'Right Output Mixer IN2RN Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.237 { + iface MIXER + name 'Right Output Mixer IN1L Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.238 { + iface MIXER + name 'Right Output Mixer IN1R Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.239 { + iface MIXER + name 'Right Output Mixer IN2RP Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.240 { + iface MIXER + name 'Right Output Mixer DAC Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.241 { + iface MIXER + name 'Left Output Mixer Right Input Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.242 { + iface MIXER + name 'Left Output Mixer Left Input Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.243 { + iface MIXER + name 'Left Output Mixer IN2RN Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.244 { + iface MIXER + name 'Left Output Mixer IN2LN Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.245 { + iface MIXER + name 'Left Output Mixer IN2LP Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.246 { + iface MIXER + name 'Left Output Mixer IN1R Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.247 { + iface MIXER + name 'Left Output Mixer IN1L Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.248 { + iface MIXER + name 'Left Output Mixer DAC Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.249 { + iface MIXER + name 'MIXINR IN2R Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.250 { + iface MIXER + name 'MIXINR IN1R Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.251 { + iface MIXER + name 'MIXINL IN2L Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.252 { + iface MIXER + name 'MIXINL IN1L Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.253 { + iface MIXER + name 'IN2R PGA IN2RP Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.254 { + iface MIXER + name 'IN2R PGA IN2RN Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.255 { + iface MIXER + name 'IN2L PGA IN2LP Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.256 { + iface MIXER + name 'IN2L PGA IN2LN Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.257 { + iface MIXER + name 'IN1R PGA IN1RP Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.258 { + iface MIXER + name 'IN1R PGA IN1RN Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.259 { + iface MIXER + name 'IN1L PGA IN1LP Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.260 { + iface MIXER + name 'IN1L PGA IN1LN Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.261 { + iface CARD + name 'Headphone Jack' + value true + comment { + access read + type BOOLEAN + count 1 + } + } +} +state.cs42888audio { + control.1 { + iface MIXER + name 'DAC1 Playback Volume' + value.0 255 + value.1 255 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 255' + dbmin -9999999 + dbmax 0 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.2 { + iface MIXER + name 'DAC2 Playback Volume' + value.0 255 + value.1 255 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 255' + dbmin -9999999 + dbmax 0 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.3 { + iface MIXER + name 'DAC3 Playback Volume' + value.0 255 + value.1 255 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 255' + dbmin -9999999 + dbmax 0 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.4 { + iface MIXER + name 'DAC4 Playback Volume' + value.0 255 + value.1 255 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 255' + dbmin -9999999 + dbmax 0 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.5 { + iface MIXER + name 'ADC1 Capture Volume' + value.0 128 + value.1 128 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 176' + dbmin -6400 + dbmax 2400 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.6 { + iface MIXER + name 'ADC2 Capture Volume' + value.0 128 + value.1 128 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 176' + dbmin -6400 + dbmax 2400 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.7 { + iface MIXER + name 'DAC1 Invert Switch' + value.0 false + value.1 false + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.8 { + iface MIXER + name 'DAC2 Invert Switch' + value.0 false + value.1 false + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.9 { + iface MIXER + name 'DAC3 Invert Switch' + value.0 false + value.1 false + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.10 { + iface MIXER + name 'DAC4 Invert Switch' + value.0 false + value.1 false + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.11 { + iface MIXER + name 'ADC1 Invert Switch' + value.0 false + value.1 false + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.12 { + iface MIXER + name 'ADC2 Invert Switch' + value.0 false + value.1 false + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.13 { + iface MIXER + name 'ADC High-Pass Filter Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.14 { + iface MIXER + name 'DAC De-emphasis Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.15 { + iface MIXER + name 'ADC1 Single Ended Mode Switch' + value Differential + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Differential + item.1 Single-Ended + } + } + control.16 { + iface MIXER + name 'ADC2 Single Ended Mode Switch' + value Differential + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Differential + item.1 Single-Ended + } + } + control.17 { + iface MIXER + name 'DAC Single Volume Control Switch' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + } + } + control.18 { + iface MIXER + name 'DAC Soft Ramp & Zero Cross Control Switch' + value 'Immediate Change' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Immediate Change' + item.1 'Zero Cross' + item.2 'Soft Ramp' + item.3 'Soft Ramp on Zero Cross' + } + } + control.19 { + iface MIXER + name 'DAC Auto Mute Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.20 { + iface MIXER + name 'Mute ADC Serial Port Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.21 { + iface MIXER + name 'ADC Single Volume Control Switch' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 1' + } + } + control.22 { + iface MIXER + name 'ADC Soft Ramp & Zero Cross Control Switch' + value 'Immediate Change' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Immediate Change' + item.1 'Zero Cross' + item.2 'Soft Ramp' + item.3 'Soft Ramp on Zero Cross' + } + } +} +state.imxhdmisoc { + control.1 { + iface MIXER + name 'IEC958 Playback Default' + value '0400020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' + comment { + access 'read write volatile' + type IEC958 + count 1 + } + } + control.2 { + iface MIXER + name 'HDMI Support Channels' + value 2 + comment { + access 'read volatile' + type INTEGER + count 1 + range '0 - 0' + } + } + control.3 { + iface MIXER + name 'HDMI Support Rates' + value.0 32000 + value.1 44100 + value.2 48000 + comment { + access 'read volatile' + type INTEGER + count 3 + range '0 - 0' + } + } + control.4 { + iface MIXER + name 'HDMI Support Formats' + value 16 + comment { + access 'read volatile' + type INTEGER + count 1 + range '0 - 0' + } + } +} +state.sii902xaudio { + control { + } +} +state.ak4458audio { + control.1 { + iface MIXER + name '0 AK4458 L1ch Digital Volume' + value 255 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 255' + dbmin -9999999 + dbmax 0 + dbvalue.0 0 + } + } + control.2 { + iface MIXER + name '0 AK4458 R1ch Digital Volume' + value 255 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 255' + dbmin -9999999 + dbmax 0 + dbvalue.0 0 + } + } + control.3 { + iface MIXER + name '0 AK4458 L2ch Digital Volume' + value 255 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 255' + dbmin -9999999 + dbmax 0 + dbvalue.0 0 + } + } + control.4 { + iface MIXER + name '0 AK4458 R2ch Digital Volume' + value 255 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 255' + dbmin -9999999 + dbmax 0 + dbvalue.0 0 + } + } + control.5 { + iface MIXER + name '0 AK4458 L3ch Digital Volume' + value 255 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 255' + dbmin -9999999 + dbmax 0 + dbvalue.0 0 + } + } + control.6 { + iface MIXER + name '0 AK4458 R3ch Digital Volume' + value 255 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 255' + dbmin -9999999 + dbmax 0 + dbvalue.0 0 + } + } + control.7 { + iface MIXER + name '0 AK4458 L4ch Digital Volume' + value 255 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 255' + dbmin -9999999 + dbmax 0 + dbvalue.0 0 + } + } + control.8 { + iface MIXER + name '0 AK4458 R4ch Digital Volume' + value 255 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 255' + dbmin -9999999 + dbmax 0 + dbvalue.0 0 + } + } + control.9 { + iface MIXER + name '0 AK4458 De-emphasis Response DAC1' + value OFF + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '44.1kHz' + item.1 OFF + item.2 '48kHz' + item.3 '32kHz' + } + } + control.10 { + iface MIXER + name '0 AK4458 De-emphasis Response DAC2' + value OFF + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '44.1kHz' + item.1 OFF + item.2 '48kHz' + item.3 '32kHz' + } + } + control.11 { + iface MIXER + name '0 AK4458 De-emphasis Response DAC3' + value OFF + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '44.1kHz' + item.1 OFF + item.2 '48kHz' + item.3 '32kHz' + } + } + control.12 { + iface MIXER + name '0 AK4458 De-emphasis Response DAC4' + value OFF + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '44.1kHz' + item.1 OFF + item.2 '48kHz' + item.3 '32kHz' + } + } + control.13 { + iface MIXER + name '0 AK4458 Digital Filter Setting' + value 'Sharp Roll-Off Filter' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Sharp Roll-Off Filter' + item.1 'Slow Roll-Off Filter' + item.2 'Short delay Sharp Roll-Off Filter' + item.3 'Short delay Slow Roll-Off Filter' + item.4 'Super Slow Roll-Off Filter' + } + } + control.14 { + iface MIXER + name '0 AK4458 Inverting Enable of DZFB' + value H + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 H + item.1 L + } + } + control.15 { + iface MIXER + name '0 AK4458 Sound Mode' + value 'Sound Mode 0' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Sound Mode 0' + item.1 'Sound Mode 1' + item.2 'Sound Mode 2' + } + } + control.16 { + iface MIXER + name '0 AK4458 SDS Setting' + value 'Setting 0' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Setting 0' + item.1 'Setting 1' + item.2 'Setting 2' + item.3 'Setting 3' + item.4 'Setting 4' + item.5 'Setting 5' + item.6 'Setting 6' + item.7 'Setting 7' + } + } + control.17 { + iface MIXER + name '0 AK4458 FIR Filter Mode Setting' + value 'Mode 0' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Mode 0' + item.1 'Mode 1' + item.2 'Mode 2' + item.3 'Mode 3' + item.4 'Mode 4' + item.5 'Mode 5' + item.6 'Mode 6' + item.7 'Mode 7' + } + } + control.18 { + iface MIXER + name '0 AK4458 TDM Mode Setting' + value 'Normal Mode' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Normal Mode' + item.1 'TDM128 Mode' + item.2 'TDM256 Mode' + item.3 'TDM512 Mode' + } + } + control.19 { + iface MIXER + name '0 AK4458 DAC1 LRch Setting' + value 'Lch In, Rch In' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Lch In, Rch In' + item.1 'Lch In, Rch In Invert' + item.2 'Lch In Invert, Rch In' + item.3 'Lch In Invert, Rch In Invert' + item.4 'Rch In, Lch In' + item.5 'Rch In, Lch In Invert' + item.6 'Rch In Invert, Lch In' + item.7 'Rch In Invert, Lch In Invert' + item.8 'Lch In, Lch In' + item.9 'Lch In, Lch In Invert' + item.10 'Lch In Invert, Lch In' + item.11 'Lch In Invert, Lch In Invert' + item.12 'Rch In, Rch In' + item.13 'Rch In, Rch In Invert' + item.14 'Rch In Invert, Rch In' + item.15 'Rch In Invert, Rch In Invert' + } + } + control.20 { + iface MIXER + name '0 AK4458 DAC2 LRch Setting' + value 'Lch In, Rch In' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Lch In, Rch In' + item.1 'Lch In, Rch In Invert' + item.2 'Lch In Invert, Rch In' + item.3 'Lch In Invert, Rch In Invert' + item.4 'Rch In, Lch In' + item.5 'Rch In, Lch In Invert' + item.6 'Rch In Invert, Lch In' + item.7 'Rch In Invert, Lch In Invert' + item.8 'Lch In, Lch In' + item.9 'Lch In, Lch In Invert' + item.10 'Lch In Invert, Lch In' + item.11 'Lch In Invert, Lch In Invert' + item.12 'Rch In, Rch In' + item.13 'Rch In, Rch In Invert' + item.14 'Rch In Invert, Rch In' + item.15 'Rch In Invert, Rch In Invert' + } + } + control.21 { + iface MIXER + name '0 AK4458 DAC3 LRch Setting' + value 'Lch In, Rch In' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Lch In, Rch In' + item.1 'Lch In, Rch In Invert' + item.2 'Lch In Invert, Rch In' + item.3 'Lch In Invert, Rch In Invert' + item.4 'Rch In, Lch In' + item.5 'Rch In, Lch In Invert' + item.6 'Rch In Invert, Lch In' + item.7 'Rch In Invert, Lch In Invert' + item.8 'Lch In, Lch In' + item.9 'Lch In, Lch In Invert' + item.10 'Lch In Invert, Lch In' + item.11 'Lch In Invert, Lch In Invert' + item.12 'Rch In, Rch In' + item.13 'Rch In, Rch In Invert' + item.14 'Rch In Invert, Rch In' + item.15 'Rch In Invert, Rch In Invert' + } + } + control.22 { + iface MIXER + name '0 AK4458 DAC4 LRch Setting' + value 'Lch In, Rch In' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Lch In, Rch In' + item.1 'Lch In, Rch In Invert' + item.2 'Lch In Invert, Rch In' + item.3 'Lch In Invert, Rch In Invert' + item.4 'Rch In, Lch In' + item.5 'Rch In, Lch In Invert' + item.6 'Rch In Invert, Lch In' + item.7 'Rch In Invert, Lch In Invert' + item.8 'Lch In, Lch In' + item.9 'Lch In, Lch In Invert' + item.10 'Lch In Invert, Lch In' + item.11 'Lch In Invert, Lch In Invert' + item.12 'Rch In, Rch In' + item.13 'Rch In, Rch In Invert' + item.14 'Rch In Invert, Rch In' + item.15 'Rch In Invert, Rch In Invert' + } + } + control.23 { + iface MIXER + name '0 AK4458 Attenuation transition Time Settin' + value '4080/fs' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '4080/fs' + item.1 '2040/fs' + item.2 '510/fs' + item.3 '255/fs' + } + } + control.24 { + iface MIXER + name '0 AK4458 BICK fs Setting' + value '64fs' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '32fs,48fs' + item.1 '64fs' + } + } + control.25 { + iface MIXER + name '1 AK4458 L1ch Digital Volume' + value 255 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 255' + dbmin -9999999 + dbmax 0 + dbvalue.0 0 + } + } + control.26 { + iface MIXER + name '1 AK4458 R1ch Digital Volume' + value 255 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 255' + dbmin -9999999 + dbmax 0 + dbvalue.0 0 + } + } + control.27 { + iface MIXER + name '1 AK4458 L2ch Digital Volume' + value 255 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 255' + dbmin -9999999 + dbmax 0 + dbvalue.0 0 + } + } + control.28 { + iface MIXER + name '1 AK4458 R2ch Digital Volume' + value 255 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 255' + dbmin -9999999 + dbmax 0 + dbvalue.0 0 + } + } + control.29 { + iface MIXER + name '1 AK4458 L3ch Digital Volume' + value 255 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 255' + dbmin -9999999 + dbmax 0 + dbvalue.0 0 + } + } + control.30 { + iface MIXER + name '1 AK4458 R3ch Digital Volume' + value 255 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 255' + dbmin -9999999 + dbmax 0 + dbvalue.0 0 + } + } + control.31 { + iface MIXER + name '1 AK4458 L4ch Digital Volume' + value 255 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 255' + dbmin -9999999 + dbmax 0 + dbvalue.0 0 + } + } + control.32 { + iface MIXER + name '1 AK4458 R4ch Digital Volume' + value 255 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 255' + dbmin -9999999 + dbmax 0 + dbvalue.0 0 + } + } + control.33 { + iface MIXER + name '1 AK4458 De-emphasis Response DAC1' + value OFF + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '44.1kHz' + item.1 OFF + item.2 '48kHz' + item.3 '32kHz' + } + } + control.34 { + iface MIXER + name '1 AK4458 De-emphasis Response DAC2' + value OFF + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '44.1kHz' + item.1 OFF + item.2 '48kHz' + item.3 '32kHz' + } + } + control.35 { + iface MIXER + name '1 AK4458 De-emphasis Response DAC3' + value OFF + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '44.1kHz' + item.1 OFF + item.2 '48kHz' + item.3 '32kHz' + } + } + control.36 { + iface MIXER + name '1 AK4458 De-emphasis Response DAC4' + value OFF + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '44.1kHz' + item.1 OFF + item.2 '48kHz' + item.3 '32kHz' + } + } + control.37 { + iface MIXER + name '1 AK4458 Digital Filter Setting' + value 'Sharp Roll-Off Filter' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Sharp Roll-Off Filter' + item.1 'Slow Roll-Off Filter' + item.2 'Short delay Sharp Roll-Off Filter' + item.3 'Short delay Slow Roll-Off Filter' + item.4 'Super Slow Roll-Off Filter' + } + } + control.38 { + iface MIXER + name '1 AK4458 Inverting Enable of DZFB' + value H + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 H + item.1 L + } + } + control.39 { + iface MIXER + name '1 AK4458 Sound Mode' + value 'Sound Mode 0' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Sound Mode 0' + item.1 'Sound Mode 1' + item.2 'Sound Mode 2' + } + } + control.40 { + iface MIXER + name '1 AK4458 SDS Setting' + value 'Setting 0' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Setting 0' + item.1 'Setting 1' + item.2 'Setting 2' + item.3 'Setting 3' + item.4 'Setting 4' + item.5 'Setting 5' + item.6 'Setting 6' + item.7 'Setting 7' + } + } + control.41 { + iface MIXER + name '1 AK4458 FIR Filter Mode Setting' + value 'Mode 0' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Mode 0' + item.1 'Mode 1' + item.2 'Mode 2' + item.3 'Mode 3' + item.4 'Mode 4' + item.5 'Mode 5' + item.6 'Mode 6' + item.7 'Mode 7' + } + } + control.42 { + iface MIXER + name '1 AK4458 TDM Mode Setting' + value 'Normal Mode' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Normal Mode' + item.1 'TDM128 Mode' + item.2 'TDM256 Mode' + item.3 'TDM512 Mode' + } + } + control.43 { + iface MIXER + name '1 AK4458 DAC1 LRch Setting' + value 'Lch In, Rch In' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Lch In, Rch In' + item.1 'Lch In, Rch In Invert' + item.2 'Lch In Invert, Rch In' + item.3 'Lch In Invert, Rch In Invert' + item.4 'Rch In, Lch In' + item.5 'Rch In, Lch In Invert' + item.6 'Rch In Invert, Lch In' + item.7 'Rch In Invert, Lch In Invert' + item.8 'Lch In, Lch In' + item.9 'Lch In, Lch In Invert' + item.10 'Lch In Invert, Lch In' + item.11 'Lch In Invert, Lch In Invert' + item.12 'Rch In, Rch In' + item.13 'Rch In, Rch In Invert' + item.14 'Rch In Invert, Rch In' + item.15 'Rch In Invert, Rch In Invert' + } + } + control.44 { + iface MIXER + name '1 AK4458 DAC2 LRch Setting' + value 'Lch In, Rch In' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Lch In, Rch In' + item.1 'Lch In, Rch In Invert' + item.2 'Lch In Invert, Rch In' + item.3 'Lch In Invert, Rch In Invert' + item.4 'Rch In, Lch In' + item.5 'Rch In, Lch In Invert' + item.6 'Rch In Invert, Lch In' + item.7 'Rch In Invert, Lch In Invert' + item.8 'Lch In, Lch In' + item.9 'Lch In, Lch In Invert' + item.10 'Lch In Invert, Lch In' + item.11 'Lch In Invert, Lch In Invert' + item.12 'Rch In, Rch In' + item.13 'Rch In, Rch In Invert' + item.14 'Rch In Invert, Rch In' + item.15 'Rch In Invert, Rch In Invert' + } + } + control.45 { + iface MIXER + name '1 AK4458 DAC3 LRch Setting' + value 'Lch In, Rch In' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Lch In, Rch In' + item.1 'Lch In, Rch In Invert' + item.2 'Lch In Invert, Rch In' + item.3 'Lch In Invert, Rch In Invert' + item.4 'Rch In, Lch In' + item.5 'Rch In, Lch In Invert' + item.6 'Rch In Invert, Lch In' + item.7 'Rch In Invert, Lch In Invert' + item.8 'Lch In, Lch In' + item.9 'Lch In, Lch In Invert' + item.10 'Lch In Invert, Lch In' + item.11 'Lch In Invert, Lch In Invert' + item.12 'Rch In, Rch In' + item.13 'Rch In, Rch In Invert' + item.14 'Rch In Invert, Rch In' + item.15 'Rch In Invert, Rch In Invert' + } + } + control.46 { + iface MIXER + name '1 AK4458 DAC4 LRch Setting' + value 'Lch In, Rch In' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Lch In, Rch In' + item.1 'Lch In, Rch In Invert' + item.2 'Lch In Invert, Rch In' + item.3 'Lch In Invert, Rch In Invert' + item.4 'Rch In, Lch In' + item.5 'Rch In, Lch In Invert' + item.6 'Rch In Invert, Lch In' + item.7 'Rch In Invert, Lch In Invert' + item.8 'Lch In, Lch In' + item.9 'Lch In, Lch In Invert' + item.10 'Lch In Invert, Lch In' + item.11 'Lch In Invert, Lch In Invert' + item.12 'Rch In, Rch In' + item.13 'Rch In, Rch In Invert' + item.14 'Rch In Invert, Rch In' + item.15 'Rch In Invert, Rch In Invert' + } + } + control.47 { + iface MIXER + name '1 AK4458 Attenuation transition Time Settin' + value '4080/fs' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '4080/fs' + item.1 '2040/fs' + item.2 '510/fs' + item.3 '255/fs' + } + } + control.48 { + iface MIXER + name '1 AK4458 BICK fs Setting' + value '64fs' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '32fs,48fs' + item.1 '64fs' + } + } + control.49 { + iface MIXER + name '0 DAC1 to AOUTA' + value ON + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 OFF + item.1 ON + } + } + control.50 { + iface MIXER + name '0 DAC2 to AOUTB' + value ON + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 OFF + item.1 ON + } + } + control.51 { + iface MIXER + name '0 DAC3 to AOUTC' + value ON + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 OFF + item.1 ON + } + } + control.52 { + iface MIXER + name '0 DAC4 to AOUTD' + value ON + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 OFF + item.1 ON + } + } + control.53 { + iface MIXER + name '1 DAC1 to AOUTA' + value ON + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 OFF + item.1 ON + } + } + control.54 { + iface MIXER + name '1 DAC2 to AOUTB' + value ON + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 OFF + item.1 ON + } + } + control.55 { + iface MIXER + name '1 DAC3 to AOUTC' + value ON + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 OFF + item.1 ON + } + } + control.56 { + iface MIXER + name '1 DAC4 to AOUTD' + value ON + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 OFF + item.1 ON + } + } +} +state.ak5558audio { + control.1 { + iface MIXER + name 'AK5558 Monaural Mode' + value '8 Slot' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '8 Slot' + item.1 '2 Slot' + item.2 '4 Slot' + item.3 '1 Slot' + } + } + control.2 { + iface MIXER + name 'AK5558 TDM mode' + value Off + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Off + item.1 TDM128 + item.2 TDM256 + item.3 TDM512 + } + } + control.3 { + iface MIXER + name 'AK5558 Digital Filter' + value 'Sharp Roll-Off' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Sharp Roll-Off' + item.1 'Show Roll-Off' + item.2 'Short Delay Sharp Roll-Off' + item.3 'Short Delay Show Roll-Off' + } + } + control.4 { + iface MIXER + name 'AK5558 DSD Mode' + value PCM + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 PCM + item.1 DSD + } + } + control.5 { + iface MIXER + name 'AK5558 Frequency of DCLK' + value '64fs' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '64fs' + item.1 '128fs' + item.2 '256fs' + } + } + control.6 { + iface MIXER + name 'AK5558 Polarity of DCLK' + value Falling + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Falling + item.1 Rising + } + } + control.7 { + iface MIXER + name 'AK5558 Master Clock Frequency at DSD Mode' + value '512fs' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '512fs' + item.1 '768fs' + } + } + control.8 { + iface MIXER + name 'AK5558 DSD Phase Modulation' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.9 { + iface MIXER + name 'AK5558 Ch1 Enable' + value On + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Off + item.1 On + } + } + control.10 { + iface MIXER + name 'AK5558 Ch2 Enable' + value On + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Off + item.1 On + } + } + control.11 { + iface MIXER + name 'AK5558 Ch3 Enable' + value On + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Off + item.1 On + } + } + control.12 { + iface MIXER + name 'AK5558 Ch4 Enable' + value On + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Off + item.1 On + } + } + control.13 { + iface MIXER + name 'AK5558 Ch5 Enable' + value On + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Off + item.1 On + } + } + control.14 { + iface MIXER + name 'AK5558 Ch6 Enable' + value On + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Off + item.1 On + } + } + control.15 { + iface MIXER + name 'AK5558 Ch7 Enable' + value On + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Off + item.1 On + } + } + control.16 { + iface MIXER + name 'AK5558 Ch8 Enable' + value On + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Off + item.1 On + } + } +} +state.ak4497audio { + control.1 { + iface MIXER + name 'AK4497 Lch Digital Volume' + value 255 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 255' + dbmin -12750 + dbmax 0 + dbvalue.0 0 + } + } + control.2 { + iface MIXER + name 'AK4497 Rch Digital Volume' + value 255 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 255' + dbmin -12750 + dbmax 0 + dbvalue.0 0 + } + } + control.3 { + iface MIXER + name 'AK4497 EX DF I/F clock' + value '768kHz' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '768kHz' + item.1 '384kHz' + } + } + control.4 { + iface MIXER + name 'AK4497 De-emphasis Response' + value OFF + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '44.1kHz' + item.1 OFF + item.2 '48kHz' + item.3 '32kHz' + } + } + control.5 { + iface MIXER + name 'AK4497 Data Zero Detect Mode' + value Separated + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Separated + item.1 ANDed + } + } + control.6 { + iface MIXER + name 'AK4497 Data Selection at Mono Mode' + value Rch + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Rch + item.1 Lch + } + } + control.7 { + iface MIXER + name 'AK4497 Polarity of DCLK' + value Falling + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Falling + item.1 Rising + } + } + control.8 { + iface MIXER + name 'AK4497 DCKL Frequency' + value '512fs' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '512fs' + item.1 '768fs' + } + } + control.9 { + iface MIXER + name 'AK4497 DDSD Play Back Path' + value Normal + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Normal + item.1 'Volume Bypass' + } + } + control.10 { + iface MIXER + name 'AK4497 Sound control' + value 'Setting 1' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Setting 1' + item.1 'Setting 2' + item.2 'Setting 3' + } + } + control.11 { + iface MIXER + name 'AK4497 Cut Off of DSD Filter' + value '50kHz' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '50kHz' + item.1 '150kHz' + } + } + control.12 { + iface MIXER + name 'AK4497 DSD Data Stream' + value '64fs' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '64fs' + item.1 '128fs' + item.2 '256fs' + item.3 '512fs' + } + } + control.13 { + iface MIXER + name 'AK4497 BICK Frequency Select' + value '64fs' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '48fs' + item.1 '64fs' + } + } + control.14 { + iface MIXER + name 'AK4497 TDM Data Select' + value L1R1 + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 L1R1 + item.1 TDM128_L1R1 + item.2 TDM128_L2R2 + item.3 TDM256_L1R1 + item.4 TDM256_L2R2 + item.5 TDM256_L3R3 + item.6 TDM256_L4R4 + item.7 TDM512_L1R1 + item.8 TDM512_L2R2 + item.9 TDM512_L3R3 + item.10 TDM512_L4R4 + item.11 TDM512_L5R5 + item.12 TDM512_L6R6 + item.13 TDM512_L7R7 + item.14 TDM512_L8R8 + } + } + control.15 { + iface MIXER + name 'AK4497 External Digital Filter' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.16 { + iface MIXER + name 'AK4497 MCLK Frequency Auto Setting' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.17 { + iface MIXER + name 'AK4497 MCLK FS Auto Detect' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.18 { + iface MIXER + name 'AK4497 Soft Mute Control' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.19 { + iface MIXER + name 'AK4497 Short delay filter' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.20 { + iface MIXER + name 'AK4497 Data Zero Detect Enable' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.21 { + iface MIXER + name 'AK4497 Slow Roll-off Filter' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.22 { + iface MIXER + name 'AK4497 Invering Enable of DZF' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.23 { + iface MIXER + name 'AK4497 Mono Mode' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.24 { + iface MIXER + name 'AK4497 Super Slow Roll-off Filter' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.25 { + iface MIXER + name 'AK4497 AOUTR Phase Inverting' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.26 { + iface MIXER + name 'AK4497 AOUTL Phase Inverting' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.27 { + iface MIXER + name 'AK4497 DSD Mute Release' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.28 { + iface MIXER + name 'AK4497 DSD Mute Control Hold' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.29 { + iface MIXER + name 'AK4497 DSDR is detected' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.30 { + iface MIXER + name 'AK4497 DSDL is detected' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.31 { + iface MIXER + name 'AK4497 DSD Data Mute' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.32 { + iface MIXER + name 'AK4497 Synchronization Control' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.33 { + iface MIXER + name 'AK4497 Output Level' + value '2.8_2.8Vpp' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '2.8_2.8Vpp' + item.1 '2.8_2.5Vpp' + item.2 '2.5_2.5Vpp' + item.3 '3.75_3.75Vpp' + item.4 '3.75_2.5Vpp' + } + } + control.34 { + iface MIXER + name 'AK4497 High Sonud Quality Mode' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.35 { + iface MIXER + name 'AK4497 Heavy Load Mode' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.36 { + iface MIXER + name 'AK4497 DSD Data Input Pin' + value '3_4_5pin' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '16_17_19pin' + item.1 '3_4_5pin' + } + } + control.37 { + iface MIXER + name 'AK4497 Daisy Chain' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.38 { + iface MIXER + name 'AK4497 ATT Transit Time' + value '4080/fs' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 '4080/fs' + item.1 '2040/fs' + item.2 '510/fs' + item.3 '255/fs' + } + } + control.39 { + iface MIXER + name 'AK4497 Read FS Auto Detect Mode' + value 'Normal Speed Mode' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Normal Speed Mode' + item.1 'Double Speed Mode' + item.2 'Quad Speed Mode' + item.3 'Quad Speed Mode' + item.4 'Oct Speed Mode' + item.5 'Hex Speed Mode' + item.6 'Oct Speed Mode' + item.7 'Hex Speed Mode' + } + } + control.40 { + iface MIXER + name 'AK4497 DAC Enable' + value On + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Off + item.1 On + } + } +} +state.sofwm8960audio { + control.1 { + iface MIXER + name 'Capture Volume' + value.0 35 + value.1 35 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 63' + dbmin -1725 + dbmax 3000 + dbvalue.0 900 + dbvalue.1 900 + } + } + control.2 { + iface MIXER + name 'Capture Volume ZC Switch' + value.0 0 + value.1 0 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 1' + } + } + control.3 { + iface MIXER + name 'Capture Switch' + value.0 true + value.1 true + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.4 { + iface MIXER + name 'Right Input Boost Mixer RINPUT3 Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -9999999 + dbmax 600 + dbvalue.0 -9999999 + } + } + control.5 { + iface MIXER + name 'Right Input Boost Mixer RINPUT2 Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -9999999 + dbmax 600 + dbvalue.0 -9999999 + } + } + control.6 { + iface MIXER + name 'Left Input Boost Mixer LINPUT3 Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -9999999 + dbmax 600 + dbvalue.0 -9999999 + } + } + control.7 { + iface MIXER + name 'Left Input Boost Mixer LINPUT2 Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -9999999 + dbmax 600 + dbvalue.0 -9999999 + } + } + control.8 { + iface MIXER + name 'Right Input Boost Mixer RINPUT1 Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 3' + dbmin 0 + dbmax 2900 + dbvalue.0 0 + } + } + control.9 { + iface MIXER + name 'Left Input Boost Mixer LINPUT1 Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 3' + dbmin 0 + dbmax 2900 + dbvalue.0 0 + } + } + control.10 { + iface MIXER + name 'Playback Volume' + value.0 235 + value.1 235 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 255' + dbmin -9999999 + dbmax 0 + dbvalue.0 -1000 + dbvalue.1 -1000 + } + } + control.11 { + iface MIXER + name 'Headphone Playback Volume' + value.0 101 + value.1 101 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 127' + dbmin -9999999 + dbmax 600 + dbvalue.0 -2000 + dbvalue.1 -2000 + } + } + control.12 { + iface MIXER + name 'Headphone Playback ZC Switch' + value.0 false + value.1 false + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.13 { + iface MIXER + name 'Speaker Playback Volume' + value.0 110 + value.1 110 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 127' + dbmin -9999999 + dbmax 600 + dbvalue.0 -1100 + dbvalue.1 -1100 + } + } + control.14 { + iface MIXER + name 'Speaker Playback ZC Switch' + value.0 false + value.1 false + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.15 { + iface MIXER + name 'Speaker DC Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 5' + } + } + control.16 { + iface MIXER + name 'Speaker AC Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 5' + } + } + control.17 { + iface MIXER + name 'PCM Playback -6dB Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.18 { + iface MIXER + name 'ADC Polarity' + value 'No Inversion' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'No Inversion' + item.1 'Left Inverted' + item.2 'Right Inverted' + item.3 'Stereo Inversion' + } + } + control.19 { + iface MIXER + name 'ADC High Pass Filter Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.20 { + iface MIXER + name 'DAC Polarity' + value 'No Inversion' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'No Inversion' + item.1 'Left Inverted' + item.2 'Right Inverted' + item.3 'Stereo Inversion' + } + } + control.21 { + iface MIXER + name 'DAC Deemphasis Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.22 { + iface MIXER + name '3D Filter Upper Cut-Off' + value High + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 High + item.1 Low + } + } + control.23 { + iface MIXER + name '3D Filter Lower Cut-Off' + value Low + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Low + item.1 High + } + } + control.24 { + iface MIXER + name '3D Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 15' + } + } + control.25 { + iface MIXER + name '3D Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.26 { + iface MIXER + name 'ALC Function' + value Off + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Off + item.1 Right + item.2 Left + item.3 Stereo + } + } + control.27 { + iface MIXER + name 'ALC Max Gain' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + } + } + control.28 { + iface MIXER + name 'ALC Target' + value 4 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 15' + } + } + control.29 { + iface MIXER + name 'ALC Min Gain' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + } + } + control.30 { + iface MIXER + name 'ALC Hold Time' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 15' + } + } + control.31 { + iface MIXER + name 'ALC Mode' + value ALC + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 ALC + item.1 Limiter + } + } + control.32 { + iface MIXER + name 'ALC Decay' + value 3 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 15' + } + } + control.33 { + iface MIXER + name 'ALC Attack' + value 2 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 15' + } + } + control.34 { + iface MIXER + name 'Noise Gate Threshold' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 31' + } + } + control.35 { + iface MIXER + name 'Noise Gate Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.36 { + iface MIXER + name 'ADC PCM Capture Volume' + value.0 195 + value.1 195 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 255' + dbmin -9999999 + dbmax 3000 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.37 { + iface MIXER + name 'Left Output Mixer Boost Bypass Volume' + value 2 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 -1500 + } + } + control.38 { + iface MIXER + name 'Left Output Mixer LINPUT3 Volume' + value 2 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 -1500 + } + } + control.39 { + iface MIXER + name 'Right Output Mixer Boost Bypass Volume' + value 2 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 -1500 + } + } + control.40 { + iface MIXER + name 'Right Output Mixer RINPUT3 Volume' + value 2 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 -1500 + } + } + control.41 { + iface MIXER + name 'ADC Data Output Select' + value 'Left Data = Left ADC; Right Data = Left ADC' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Left Data = Left ADC; Right Data = Right ADC' + item.1 'Left Data = Left ADC; Right Data = Left ADC' + item.2 'Left Data = Right ADC; Right Data = Right ADC' + item.3 'Left Data = Right ADC; Right Data = Left ADC' + } + } + control.42 { + iface MIXER + name 'Mono Output Mixer Left Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.43 { + iface MIXER + name 'Mono Output Mixer Right Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.44 { + iface MIXER + name 'Right Output Mixer PCM Playback Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.45 { + iface MIXER + name 'Right Output Mixer RINPUT3 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.46 { + iface MIXER + name 'Right Output Mixer Boost Bypass Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.47 { + iface MIXER + name 'Left Output Mixer PCM Playback Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.48 { + iface MIXER + name 'Left Output Mixer LINPUT3 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.49 { + iface MIXER + name 'Left Output Mixer Boost Bypass Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.50 { + iface MIXER + name 'Right Input Mixer Boost Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.51 { + iface MIXER + name 'Left Input Mixer Boost Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.52 { + iface MIXER + name 'Right Boost Mixer RINPUT2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.53 { + iface MIXER + name 'Right Boost Mixer RINPUT3 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.54 { + iface MIXER + name 'Right Boost Mixer RINPUT1 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.55 { + iface MIXER + name 'Left Boost Mixer LINPUT2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.56 { + iface MIXER + name 'Left Boost Mixer LINPUT3 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.57 { + iface MIXER + name 'Left Boost Mixer LINPUT1 Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.58 { + iface CARD + name 'Headphone Jack' + value true + comment { + access read + type BOOLEAN + count 1 + } + } +} +state.wm8960audio2 { + control.1 { + iface MIXER + name 'Capture Volume' + value.0 35 + value.1 35 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 63' + dbmin -1725 + dbmax 3000 + dbvalue.0 900 + dbvalue.1 900 + } + } + control.2 { + iface MIXER + name 'Capture Volume ZC Switch' + value.0 0 + value.1 0 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 1' + } + } + control.3 { + iface MIXER + name 'Capture Switch' + value.0 true + value.1 true + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.4 { + iface MIXER + name 'Right Input Boost Mixer RINPUT3 Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -9999999 + dbmax 600 + dbvalue.0 -9999999 + } + } + control.5 { + iface MIXER + name 'Right Input Boost Mixer RINPUT2 Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -9999999 + dbmax 600 + dbvalue.0 -9999999 + } + } + control.6 { + iface MIXER + name 'Left Input Boost Mixer LINPUT3 Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -9999999 + dbmax 600 + dbvalue.0 -9999999 + } + } + control.7 { + iface MIXER + name 'Left Input Boost Mixer LINPUT2 Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -9999999 + dbmax 600 + dbvalue.0 -9999999 + } + } + control.8 { + iface MIXER + name 'Right Input Boost Mixer RINPUT1 Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 3' + dbmin 0 + dbmax 2900 + dbvalue.0 0 + } + } + control.9 { + iface MIXER + name 'Left Input Boost Mixer LINPUT1 Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 3' + dbmin 0 + dbmax 2900 + dbvalue.0 0 + } + } + control.10 { + iface MIXER + name 'Playback Volume' + value.0 235 + value.1 235 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 255' + dbmin -9999999 + dbmax 0 + dbvalue.0 -1000 + dbvalue.1 -1000 + } + } + control.11 { + iface MIXER + name 'Headphone Playback Volume' + value.0 101 + value.1 101 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 127' + dbmin -9999999 + dbmax 600 + dbvalue.0 -2000 + dbvalue.1 -2000 + } + } + control.12 { + iface MIXER + name 'Headphone Playback ZC Switch' + value.0 false + value.1 false + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.13 { + iface MIXER + name 'Speaker Playback Volume' + value.0 110 + value.1 110 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 127' + dbmin -9999999 + dbmax 600 + dbvalue.0 -1100 + dbvalue.1 -1100 + } + } + control.14 { + iface MIXER + name 'Speaker Playback ZC Switch' + value.0 false + value.1 false + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.15 { + iface MIXER + name 'Speaker DC Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 5' + } + } + control.16 { + iface MIXER + name 'Speaker AC Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 5' + } + } + control.17 { + iface MIXER + name 'PCM Playback -6dB Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.18 { + iface MIXER + name 'ADC Polarity' + value 'No Inversion' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'No Inversion' + item.1 'Left Inverted' + item.2 'Right Inverted' + item.3 'Stereo Inversion' + } + } + control.19 { + iface MIXER + name 'ADC High Pass Filter Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.20 { + iface MIXER + name 'DAC Polarity' + value 'No Inversion' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'No Inversion' + item.1 'Left Inverted' + item.2 'Right Inverted' + item.3 'Stereo Inversion' + } + } + control.21 { + iface MIXER + name 'DAC Deemphasis Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.22 { + iface MIXER + name '3D Filter Upper Cut-Off' + value High + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 High + item.1 Low + } + } + control.23 { + iface MIXER + name '3D Filter Lower Cut-Off' + value Low + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Low + item.1 High + } + } + control.24 { + iface MIXER + name '3D Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 15' + } + } + control.25 { + iface MIXER + name '3D Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.26 { + iface MIXER + name 'ALC Function' + value Off + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Off + item.1 Right + item.2 Left + item.3 Stereo + } + } + control.27 { + iface MIXER + name 'ALC Max Gain' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + } + } + control.28 { + iface MIXER + name 'ALC Target' + value 4 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 15' + } + } + control.29 { + iface MIXER + name 'ALC Min Gain' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + } + } + control.30 { + iface MIXER + name 'ALC Hold Time' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 15' + } + } + control.31 { + iface MIXER + name 'ALC Mode' + value ALC + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 ALC + item.1 Limiter + } + } + control.32 { + iface MIXER + name 'ALC Decay' + value 3 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 15' + } + } + control.33 { + iface MIXER + name 'ALC Attack' + value 2 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 15' + } + } + control.34 { + iface MIXER + name 'Noise Gate Threshold' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 31' + } + } + control.35 { + iface MIXER + name 'Noise Gate Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.36 { + iface MIXER + name 'ADC PCM Capture Volume' + value.0 195 + value.1 195 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 255' + dbmin -9999999 + dbmax 3000 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.37 { + iface MIXER + name 'Left Output Mixer Boost Bypass Volume' + value 2 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 -1500 + } + } + control.38 { + iface MIXER + name 'Left Output Mixer LINPUT3 Volume' + value 2 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 -1500 + } + } + control.39 { + iface MIXER + name 'Right Output Mixer Boost Bypass Volume' + value 2 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 -1500 + } + } + control.40 { + iface MIXER + name 'Right Output Mixer RINPUT3 Volume' + value 2 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 -1500 + } + } + control.41 { + iface MIXER + name 'ADC Data Output Select' + value 'Left Data = Left ADC; Right Data = Left ADC' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Left Data = Left ADC; Right Data = Right ADC' + item.1 'Left Data = Left ADC; Right Data = Left ADC' + item.2 'Left Data = Right ADC; Right Data = Right ADC' + item.3 'Left Data = Right ADC; Right Data = Left ADC' + } + } + control.42 { + iface MIXER + name 'Mono Output Mixer Left Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.43 { + iface MIXER + name 'Mono Output Mixer Right Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.44 { + iface MIXER + name 'Right Output Mixer PCM Playback Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.45 { + iface MIXER + name 'Right Output Mixer RINPUT3 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.46 { + iface MIXER + name 'Right Output Mixer Boost Bypass Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.47 { + iface MIXER + name 'Left Output Mixer PCM Playback Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.48 { + iface MIXER + name 'Left Output Mixer LINPUT3 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.49 { + iface MIXER + name 'Left Output Mixer Boost Bypass Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.50 { + iface MIXER + name 'Right Input Mixer Boost Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.51 { + iface MIXER + name 'Left Input Mixer Boost Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.52 { + iface MIXER + name 'Right Boost Mixer RINPUT2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.53 { + iface MIXER + name 'Right Boost Mixer RINPUT3 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.54 { + iface MIXER + name 'Right Boost Mixer RINPUT1 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.55 { + iface MIXER + name 'Left Boost Mixer LINPUT2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.56 { + iface MIXER + name 'Left Boost Mixer LINPUT3 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.57 { + iface MIXER + name 'Left Boost Mixer LINPUT1 Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.58 { + iface CARD + name 'Headphone Jack' + value true + comment { + access read + type BOOLEAN + count 1 + } + } +} +state.wm8960audio3 { + control.1 { + iface MIXER + name 'Capture Volume' + value.0 35 + value.1 35 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 63' + dbmin -1725 + dbmax 3000 + dbvalue.0 900 + dbvalue.1 900 + } + } + control.2 { + iface MIXER + name 'Capture Volume ZC Switch' + value.0 0 + value.1 0 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 1' + } + } + control.3 { + iface MIXER + name 'Capture Switch' + value.0 true + value.1 true + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.4 { + iface MIXER + name 'Right Input Boost Mixer RINPUT3 Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -9999999 + dbmax 600 + dbvalue.0 -9999999 + } + } + control.5 { + iface MIXER + name 'Right Input Boost Mixer RINPUT2 Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -9999999 + dbmax 600 + dbvalue.0 -9999999 + } + } + control.6 { + iface MIXER + name 'Left Input Boost Mixer LINPUT3 Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -9999999 + dbmax 600 + dbvalue.0 -9999999 + } + } + control.7 { + iface MIXER + name 'Left Input Boost Mixer LINPUT2 Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -9999999 + dbmax 600 + dbvalue.0 -9999999 + } + } + control.8 { + iface MIXER + name 'Right Input Boost Mixer RINPUT1 Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 3' + dbmin 0 + dbmax 2900 + dbvalue.0 0 + } + } + control.9 { + iface MIXER + name 'Left Input Boost Mixer LINPUT1 Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 3' + dbmin 0 + dbmax 2900 + dbvalue.0 0 + } + } + control.10 { + iface MIXER + name 'Playback Volume' + value.0 235 + value.1 235 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 255' + dbmin -9999999 + dbmax 0 + dbvalue.0 -1000 + dbvalue.1 -1000 + } + } + control.11 { + iface MIXER + name 'Headphone Playback Volume' + value.0 101 + value.1 101 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 127' + dbmin -9999999 + dbmax 600 + dbvalue.0 -2000 + dbvalue.1 -2000 + } + } + control.12 { + iface MIXER + name 'Headphone Playback ZC Switch' + value.0 false + value.1 false + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.13 { + iface MIXER + name 'Speaker Playback Volume' + value.0 110 + value.1 110 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 127' + dbmin -9999999 + dbmax 600 + dbvalue.0 -1100 + dbvalue.1 -1100 + } + } + control.14 { + iface MIXER + name 'Speaker Playback ZC Switch' + value.0 false + value.1 false + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.15 { + iface MIXER + name 'Speaker DC Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 5' + } + } + control.16 { + iface MIXER + name 'Speaker AC Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 5' + } + } + control.17 { + iface MIXER + name 'PCM Playback -6dB Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.18 { + iface MIXER + name 'ADC Polarity' + value 'No Inversion' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'No Inversion' + item.1 'Left Inverted' + item.2 'Right Inverted' + item.3 'Stereo Inversion' + } + } + control.19 { + iface MIXER + name 'ADC High Pass Filter Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.20 { + iface MIXER + name 'DAC Polarity' + value 'No Inversion' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'No Inversion' + item.1 'Left Inverted' + item.2 'Right Inverted' + item.3 'Stereo Inversion' + } + } + control.21 { + iface MIXER + name 'DAC Deemphasis Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.22 { + iface MIXER + name '3D Filter Upper Cut-Off' + value High + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 High + item.1 Low + } + } + control.23 { + iface MIXER + name '3D Filter Lower Cut-Off' + value Low + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Low + item.1 High + } + } + control.24 { + iface MIXER + name '3D Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 15' + } + } + control.25 { + iface MIXER + name '3D Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.26 { + iface MIXER + name 'ALC Function' + value Off + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Off + item.1 Right + item.2 Left + item.3 Stereo + } + } + control.27 { + iface MIXER + name 'ALC Max Gain' + value 7 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + } + } + control.28 { + iface MIXER + name 'ALC Target' + value 4 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 15' + } + } + control.29 { + iface MIXER + name 'ALC Min Gain' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + } + } + control.30 { + iface MIXER + name 'ALC Hold Time' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 15' + } + } + control.31 { + iface MIXER + name 'ALC Mode' + value ALC + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 ALC + item.1 Limiter + } + } + control.32 { + iface MIXER + name 'ALC Decay' + value 3 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 15' + } + } + control.33 { + iface MIXER + name 'ALC Attack' + value 2 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 15' + } + } + control.34 { + iface MIXER + name 'Noise Gate Threshold' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 31' + } + } + control.35 { + iface MIXER + name 'Noise Gate Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.36 { + iface MIXER + name 'ADC PCM Capture Volume' + value.0 195 + value.1 195 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 255' + dbmin -9999999 + dbmax 3000 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.37 { + iface MIXER + name 'Left Output Mixer Boost Bypass Volume' + value 2 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 -1500 + } + } + control.38 { + iface MIXER + name 'Left Output Mixer LINPUT3 Volume' + value 2 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 -1500 + } + } + control.39 { + iface MIXER + name 'Right Output Mixer Boost Bypass Volume' + value 2 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 -1500 + } + } + control.40 { + iface MIXER + name 'Right Output Mixer RINPUT3 Volume' + value 2 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 7' + dbmin -2100 + dbmax 0 + dbvalue.0 -1500 + } + } + control.41 { + iface MIXER + name 'ADC Data Output Select' + value 'Left Data = Left ADC; Right Data = Left ADC' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'Left Data = Left ADC; Right Data = Right ADC' + item.1 'Left Data = Left ADC; Right Data = Left ADC' + item.2 'Left Data = Right ADC; Right Data = Right ADC' + item.3 'Left Data = Right ADC; Right Data = Left ADC' + } + } + control.42 { + iface MIXER + name 'Mono Output Mixer Left Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.43 { + iface MIXER + name 'Mono Output Mixer Right Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.44 { + iface MIXER + name 'Right Output Mixer PCM Playback Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.45 { + iface MIXER + name 'Right Output Mixer RINPUT3 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.46 { + iface MIXER + name 'Right Output Mixer Boost Bypass Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.47 { + iface MIXER + name 'Left Output Mixer PCM Playback Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.48 { + iface MIXER + name 'Left Output Mixer LINPUT3 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.49 { + iface MIXER + name 'Left Output Mixer Boost Bypass Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.50 { + iface MIXER + name 'Right Input Mixer Boost Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.51 { + iface MIXER + name 'Left Input Mixer Boost Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.52 { + iface MIXER + name 'Right Boost Mixer RINPUT2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.53 { + iface MIXER + name 'Right Boost Mixer RINPUT3 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.54 { + iface MIXER + name 'Right Boost Mixer RINPUT1 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.55 { + iface MIXER + name 'Left Boost Mixer LINPUT2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.56 { + iface MIXER + name 'Left Boost Mixer LINPUT3 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.57 { + iface MIXER + name 'Left Boost Mixer LINPUT1 Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.58 { + iface CARD + name 'Headphone Jack' + value true + comment { + access read + type BOOLEAN + count 1 + } + } +} +state.sgtl5000audio { + control.1 { + iface MIXER + name 'PCM Playback Volume' + value.0 184 + value.1 184 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 192' + } + } + control.2 { + iface MIXER + name 'Capture Volume' + value.0 12 + value.1 12 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 15' + } + } + control.3 { + iface MIXER + name 'Capture Attenuate Switch (-6dB)' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.4 { + iface MIXER + name 'Capture ZC Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.5 { + iface MIXER + name 'Capture Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.6 { + iface MIXER + name 'Headphone Playback Volume' + value.0 127 + value.1 127 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 127' + dbmin -5150 + dbmax 1200 + dbvalue.0 1200 + dbvalue.1 1200 + } + } + control.7 { + iface MIXER + name 'Headphone Playback Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.8 { + iface MIXER + name 'Headphone Playback ZC Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.9 { + iface MIXER + name 'Mic Volume' + value 3 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 3' + dbmin 0 + dbmax 4000 + dbvalue.0 4000 + } + } + control.10 { + iface MIXER + name 'Lineout Playback Volume' + value.0 30 + value.1 30 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 31' + dbmin -1550 + dbmax 0 + dbvalue.0 -50 + dbvalue.1 -50 + } + } + control.11 { + iface MIXER + name 'Lineout Playback Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.12 { + iface MIXER + name 'DAP Main channel' + value 32768 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 65535' + dbmin 0 + dbmax 65535 + dbvalue.0 32768 + } + } + control.13 { + iface MIXER + name 'DAP Mix channel' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 65535' + dbmin 0 + dbmax 65535 + dbvalue.0 0 + } + } + control.14 { + iface MIXER + name 'AVC Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.15 { + iface MIXER + name 'AVC Hard Limiter Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.16 { + iface MIXER + name 'AVC Max Gain Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 2' + dbmin 0 + dbmax 1200 + dbvalue.0 0 + } + } + control.17 { + iface MIXER + name 'AVC Integrator Response' + value 1 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 3' + } + } + control.18 { + iface MIXER + name 'AVC Threshold Volume' + value 12 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 96' + dbmin 0 + dbmax 9600 + dbvalue.0 1200 + } + } + control.19 { + iface MIXER + name 'BASS 0' + value 47 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 95' + dbmin -1175 + dbmax 1200 + dbvalue.0 0 + } + } + control.20 { + iface MIXER + name 'BASS 1' + value 47 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 95' + dbmin -1175 + dbmax 1200 + dbvalue.0 0 + } + } + control.21 { + iface MIXER + name 'BASS 2' + value 47 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 95' + dbmin -1175 + dbmax 1200 + dbvalue.0 0 + } + } + control.22 { + iface MIXER + name 'BASS 3' + value 47 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 95' + dbmin -1175 + dbmax 1200 + dbvalue.0 0 + } + } + control.23 { + iface MIXER + name 'BASS 4' + value 47 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 95' + dbmin -1175 + dbmax 1200 + dbvalue.0 0 + } + } + control.24 { + iface MIXER + name 'Capture Mux' + value MIC_IN + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 MIC_IN + item.1 LINE_IN + } + } + control.25 { + iface MIXER + name 'Headphone Mux' + value DAC + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 DAC + item.1 LINE_IN + } + } + control.26 { + iface MIXER + name 'Digital Input Mux' + value I2S + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 ADC + item.1 I2S + item.2 Rsvrd + item.3 DAP + } + } + control.27 { + iface MIXER + name 'DAP Mux' + value ADC + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 ADC + item.1 I2S + } + } + control.28 { + iface MIXER + name 'DAP MIX Mux' + value ADC + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 ADC + item.1 I2S + } + } +} +state.audiohdmi { + control.1 { + iface CARD + name 'HDMI Jack' + value false + comment { + access read + type BOOLEAN + count 1 + } + } + control.2 { + iface PCM + name 'Playback Channel Map' + value.0 0 + value.1 0 + value.2 0 + value.3 0 + value.4 0 + value.5 0 + value.6 0 + value.7 0 + comment { + access read + type INTEGER + count 8 + range '0 - 36' + } + } + control.3 { + iface PCM + name 'IEC958 Playback Default' + value '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' + comment { + access 'read write' + type IEC958 + count 1 + } + } + control.4 { + iface PCM + name ELD + value '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' + comment { + access 'read volatile' + type BYTES + count 128 + } + } + control.5 { + iface MIXER + name 'HDMI Support Channels' + comment { + access 'read volatile' + type INTEGER + count 0 + range '0 - 0' + } + } + control.6 { + iface MIXER + name 'HDMI Support Rates' + comment { + access 'read volatile' + type INTEGER + count 0 + range '0 - 0' + } + } + control.7 { + iface MIXER + name 'HDMI Support Formats' + value.0 16 + value.1 24 + value.2 32 + comment { + access 'read volatile' + type INTEGER + count 3 + range '0 - 0' + } + } +} diff --git a/recipes-bsp/imx-atf/files/0001-imx-atf-change-console-to-ttymxc3.patch b/recipes-bsp/imx-atf/files/0001-imx-atf-change-console-to-ttymxc3.patch new file mode 100644 index 0000000..de47dbd --- /dev/null +++ b/recipes-bsp/imx-atf/files/0001-imx-atf-change-console-to-ttymxc3.patch @@ -0,0 +1,13 @@ +diff --git a/plat/imx/imx8m/imx8mp/platform.mk b/plat/imx/imx8m/imx8mp/platform.mk +index d7999d846..10e29fef9 100644 +--- a/plat/imx/imx8m/imx8mp/platform.mk ++++ b/plat/imx/imx8m/imx8mp/platform.mk +@@ -61,7 +61,7 @@ $(eval $(call add_define,BL32_BASE)) + BL32_SIZE ?= 0x2000000 + $(eval $(call add_define,BL32_SIZE)) + +-IMX_BOOT_UART_BASE ?= 0x30890000 ++IMX_BOOT_UART_BASE ?= 0x30a60000 + $(eval $(call add_define,IMX_BOOT_UART_BASE)) + + ifeq (${SPD},trusty) diff --git a/recipes-bsp/imx-atf/imx-atf_%.bbappend b/recipes-bsp/imx-atf/imx-atf_%.bbappend new file mode 100644 index 0000000..b9c991c --- /dev/null +++ b/recipes-bsp/imx-atf/imx-atf_%.bbappend @@ -0,0 +1,5 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/files:" + +SRC_URI += " \ + file://0001-imx-atf-change-console-to-ttymxc3.patch \ + " diff --git a/recipes-bsp/imx-mkimage/imx-boot_1.0.bbappend b/recipes-bsp/imx-mkimage/imx-boot_1.0.bbappend new file mode 100644 index 0000000..82e2f10 --- /dev/null +++ b/recipes-bsp/imx-mkimage/imx-boot_1.0.bbappend @@ -0,0 +1,7 @@ +# Workaround to fix do_compile() failure due to missing imx8mp-pitx.dtb +do_compile_prepend() { + echo "Copying DTB" + if [ -f ${DEPLOY_DIR_IMAGE}/${BOOT_TOOLS}/imx8mp-pitx.dtb ]; then + cp ${DEPLOY_DIR_IMAGE}/${BOOT_TOOLS}/imx8mp-pitx.dtb ${S}/iMX8M/imx8mp-evk.dtb + fi +} diff --git a/recipes-bsp/imx-vpu-hantro-vc/imx-vpu-hantro-vc_1.3.0.bbappend b/recipes-bsp/imx-vpu-hantro-vc/imx-vpu-hantro-vc_1.3.0.bbappend new file mode 100644 index 0000000..77c8f76 --- /dev/null +++ b/recipes-bsp/imx-vpu-hantro-vc/imx-vpu-hantro-vc_1.3.0.bbappend @@ -0,0 +1 @@ +COMPATIBLE_MACHINE = "(imx8mp)" diff --git a/recipes-bsp/pm-utils/pm-utils/01-eth.sh b/recipes-bsp/pm-utils/pm-utils/01-eth.sh new file mode 100755 index 0000000..0bf8298 --- /dev/null +++ b/recipes-bsp/pm-utils/pm-utils/01-eth.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +case $1 in + +"suspend") + ;; +"resume") + if [ -d /sys/class/net/eth0 ]; then + ifconfig eth0 down + ifconfig eth0 up + fi + if [ -d /sys/class/net/eth1 ]; then + ifconfig eth1 down + ifconfig eth1 up + fi + ;; +esac diff --git a/recipes-bsp/pm-utils/pm-utils/remove_default_sleep_d.diff b/recipes-bsp/pm-utils/pm-utils/remove_default_sleep_d.diff new file mode 100644 index 0000000..50f6ca2 --- /dev/null +++ b/recipes-bsp/pm-utils/pm-utils/remove_default_sleep_d.diff @@ -0,0 +1,20 @@ +diff -ur a/pm/Makefile.am b/pm/Makefile.am +--- a/pm/Makefile.am 2010-07-04 17:42:50.000000000 +0300 ++++ b/pm/Makefile.am 2019-05-27 14:24:27.332670308 +0300 +@@ -1,5 +1,4 @@ + SUBDIRS = \ +- sleep.d \ + power.d \ + module.d + +diff -ur a/pm/Makefile.in b/pm/Makefile.in +--- a/pm/Makefile.in 2010-07-04 17:54:42.000000000 +0300 ++++ b/pm/Makefile.in 2019-05-27 14:24:33.704726893 +0300 +@@ -198,7 +198,6 @@ + top_builddir = @top_builddir@ + top_srcdir = @top_srcdir@ + SUBDIRS = \ +- sleep.d \ + power.d \ + module.d + diff --git a/recipes-bsp/pm-utils/pm-utils_%.bbappend b/recipes-bsp/pm-utils/pm-utils_%.bbappend new file mode 100644 index 0000000..f352086 --- /dev/null +++ b/recipes-bsp/pm-utils/pm-utils_%.bbappend @@ -0,0 +1,13 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" + +SRC_URI_append = " \ + file://remove_default_sleep_d.diff \ + file://01-eth.sh \ +" + +FILES_${PN} += "/etc/pm/sleep.d/*" + +do_install_append() { + install -d ${D}/${sysconfdir}/pm/sleep.d + install -m 0755 ${WORKDIR}/01-eth.sh ${D}/${sysconfdir}/pm/sleep.d +} diff --git a/recipes-bsp/u-boot/u-boot-pitximx8mp_2020.04.bb b/recipes-bsp/u-boot/u-boot-pitximx8mp_2020.04.bb new file mode 100644 index 0000000..c4997e7 --- /dev/null +++ b/recipes-bsp/u-boot/u-boot-pitximx8mp_2020.04.bb @@ -0,0 +1,57 @@ +# Copyright (C) 2013-2016 Freescale Semiconductor +# Copyright 2017-2021 NXP + +DESCRIPTION = "i.MX U-Boot suppporting i.MX reference boards." +require recipes-bsp/u-boot/u-boot-common.inc +require recipes-bsp/u-boot/u-boot.inc +inherit pythonnative + +FILESEXTRAPATHS_prepend := "${THISDIR}/files:" + +PROVIDES += "u-boot" +DEPENDS_append = " dtc-native" + +LICENSE = "GPLv2+" +LIC_FILES_CHKSUM = "file://Licenses/gpl-2.0.txt;md5=b234ee4d69f5fce4486a80fdaf4a4263" + +UBOOT_SRC ?= "${EMB_UBOOT_MIRROR};protocol=ssh" +SRCBRANCH = "pitx_8mp_lf_v2020.04" +SRC_URI = "${UBOOT_SRC};branch=${SRCBRANCH}" +SRCREV = "cfa1e5cb4c6bbe523bad049a37de11ec2db463b5" + +S = "${WORKDIR}/git" + +inherit fsl-u-boot-localversion + +LOCALVERSION ?= "-5.10.9-1.0.0" + +BOOT_TOOLS = "imx-boot-tools" + +do_deploy_append_mx8m () { + # Deploy u-boot-nodtb.bin and fsl-imx8mq-XX.dtb, to be packaged in boot binary by imx-boot + if [ -n "${UBOOT_CONFIG}" ] + then + for config in ${UBOOT_MACHINE}; do + i=$(expr $i + 1); + for type in ${UBOOT_CONFIG}; do + j=$(expr $j + 1); + if [ $j -eq $i ] + then + install -d ${DEPLOYDIR}/${BOOT_TOOLS} + install -m 0777 ${B}/${config}/arch/arm/dts/${UBOOT_DTB_NAME} ${DEPLOYDIR}/${BOOT_TOOLS} + install -m 0777 ${B}/${config}/u-boot-nodtb.bin ${DEPLOYDIR}/${BOOT_TOOLS}/u-boot-nodtb.bin-${MACHINE}-${type} + fi + done + unset j + done + unset i + fi + +} + +PACKAGE_ARCH = "${MACHINE_ARCH}" +COMPATIBLE_MACHINE = "(mx6|mx7|mx8)" + +UBOOT_NAME_mx6 = "u-boot-${MACHINE}.bin-${UBOOT_CONFIG}" +UBOOT_NAME_mx7 = "u-boot-${MACHINE}.bin-${UBOOT_CONFIG}" +UBOOT_NAME_mx8 = "u-boot-${MACHINE}.bin-${UBOOT_CONFIG}" diff --git a/recipes-core/base-files/base-files/embedian-hdmi-audio.conf b/recipes-core/base-files/base-files/embedian-hdmi-audio.conf new file mode 100644 index 0000000..35e564f --- /dev/null +++ b/recipes-core/base-files/base-files/embedian-hdmi-audio.conf @@ -0,0 +1,4 @@ +# /etc/modprobe.d/embedian-imx8-hdmi-audio.conf +# Install SGTL5000 codec driver before HDMI audio codec driver. This makes SGTL5000 the default ALSA device. +install snd-soc-hdmi-codec /sbin/modprobe snd-soc-sgtl5000 ; /sbin/modprobe --ignore-install snd-soc-hdmi-codec + diff --git a/recipes-core/base-files/base-files/issue b/recipes-core/base-files/base-files/issue new file mode 100644 index 0000000..431b9ff --- /dev/null +++ b/recipes-core/base-files/base-files/issue @@ -0,0 +1,6 @@ + _ ^ _ ^ (_) _ +// _ \\ ^ ^ || _ // _ \\ _ || | _` _ +|| __/ //\\//\\||// \\| __/// \\| |(_| // \\ +\\__\\_// \\||__||\\__\\\\__// ||\__,|| || + + 2019 Embedian, Inc. diff --git a/recipes-core/base-files/base-files/issue.net b/recipes-core/base-files/base-files/issue.net new file mode 100644 index 0000000..431b9ff --- /dev/null +++ b/recipes-core/base-files/base-files/issue.net @@ -0,0 +1,6 @@ + _ ^ _ ^ (_) _ +// _ \\ ^ ^ || _ // _ \\ _ || | _` _ +|| __/ //\\//\\||// \\| __/// \\| |(_| // \\ +\\__\\_// \\||__||\\__\\\\__// ||\__,|| || + + 2019 Embedian, Inc. diff --git a/recipes-core/base-files/base-files_%.bbappend b/recipes-core/base-files/base-files_%.bbappend new file mode 100644 index 0000000..f676568 --- /dev/null +++ b/recipes-core/base-files/base-files_%.bbappend @@ -0,0 +1,25 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" + +SRC_URI_append_pitximx8mp2g = " \ + file://embedian-hdmi-audio.conf \ +" + +SRC_URI_append_pitximx8mp4g = " \ + file://embedian-hdmi-audio.conf \ +" + +SRC_URI_append_pitximx8mp6g = " \ + file://embedian-hdmi-audio.conf \ +" + +do_install_append_pitximx8mp2g() { + install -m 0644 ${WORKDIR}/embedian-hdmi-audio.conf ${D}${sysconfdir}/modprobe.d +} + +do_install_append_pitximx8mp4g() { + install -m 0644 ${WORKDIR}/embedian-hdmi-audio.conf ${D}${sysconfdir}/modprobe.d +} + +do_install_append_pitximx8mp6g() { + install -m 0644 ${WORKDIR}/embedian-hdmi-audio.conf ${D}${sysconfdir}/modprobe.d +} diff --git a/recipes-core/busybox/busybox/defconfig b/recipes-core/busybox/busybox/defconfig new file mode 100644 index 0000000..5b746aa --- /dev/null +++ b/recipes-core/busybox/busybox/defconfig @@ -0,0 +1,1183 @@ +# +# Automatically generated make config: don't edit +# Busybox version: 1.30.1 +# Sun Feb 17 18:12:27 2019 +# +CONFIG_HAVE_DOT_CONFIG=y + +# +# Settings +# +# CONFIG_DESKTOP is not set +# CONFIG_EXTRA_COMPAT is not set +# CONFIG_FEDORA_COMPAT is not set +# CONFIG_INCLUDE_SUSv2 is not set +CONFIG_LONG_OPTS=y +CONFIG_SHOW_USAGE=y +# CONFIG_FEATURE_VERBOSE_USAGE is not set +CONFIG_FEATURE_COMPRESS_USAGE=y +CONFIG_LFS=y +# CONFIG_PAM is not set +CONFIG_FEATURE_DEVPTS=y +CONFIG_FEATURE_UTMP=y +# CONFIG_FEATURE_WTMP is not set +CONFIG_FEATURE_PIDFILE=y +CONFIG_PID_FILE_PATH="/var/run" +CONFIG_BUSYBOX=y +# CONFIG_FEATURE_SHOW_SCRIPT is not set +# CONFIG_FEATURE_INSTALLER is not set +# CONFIG_INSTALL_NO_USR is not set +CONFIG_FEATURE_SUID=y +CONFIG_FEATURE_SUID_CONFIG=y +CONFIG_FEATURE_SUID_CONFIG_QUIET=y +# CONFIG_FEATURE_PREFER_APPLETS is not set +CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" +# CONFIG_SELINUX is not set +# CONFIG_FEATURE_CLEAN_UP is not set +CONFIG_FEATURE_SYSLOG=y +CONFIG_PLATFORM_LINUX=y + +# +# Build Options +# +# CONFIG_STATIC is not set +# CONFIG_PIE is not set +# CONFIG_NOMMU is not set +# CONFIG_BUILD_LIBBUSYBOX is not set +# CONFIG_FEATURE_LIBBUSYBOX_STATIC is not set +# CONFIG_FEATURE_INDIVIDUAL is not set +# CONFIG_FEATURE_SHARED_BUSYBOX is not set +CONFIG_CROSS_COMPILER_PREFIX="" +CONFIG_SYSROOT="" +CONFIG_EXTRA_CFLAGS="" +CONFIG_EXTRA_LDFLAGS="" +CONFIG_EXTRA_LDLIBS="" +# CONFIG_USE_PORTABLE_CODE is not set +CONFIG_STACK_OPTIMIZATION_386=y + +# +# Installation Options ("make install" behavior) +# +CONFIG_INSTALL_APPLET_SYMLINKS=y +# CONFIG_INSTALL_APPLET_HARDLINKS is not set +# CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set +# CONFIG_INSTALL_APPLET_DONT is not set +# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set +# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set +# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set +CONFIG_PREFIX="./_install" + +# +# Debugging Options +# +# CONFIG_DEBUG is not set +# CONFIG_DEBUG_PESSIMIZE is not set +# CONFIG_DEBUG_SANITIZE is not set +# CONFIG_UNIT_TEST is not set +# CONFIG_WERROR is not set +CONFIG_NO_DEBUG_LIB=y +# CONFIG_DMALLOC is not set +# CONFIG_EFENCE is not set + +# +# Library Tuning +# +# CONFIG_FEATURE_USE_BSS_TAIL is not set +CONFIG_FLOAT_DURATION=y +CONFIG_FEATURE_RTMINMAX=y +# CONFIG_FEATURE_RTMINMAX_USE_LIBC_DEFINITIONS is not set +CONFIG_FEATURE_BUFFERS_USE_MALLOC=y +# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set +# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set +CONFIG_PASSWORD_MINLEN=6 +CONFIG_MD5_SMALL=1 +CONFIG_SHA3_SMALL=1 +CONFIG_FEATURE_FAST_TOP=y +# CONFIG_FEATURE_ETC_NETWORKS is not set +# CONFIG_FEATURE_ETC_SERVICES is not set +CONFIG_FEATURE_EDITING=y +CONFIG_FEATURE_EDITING_MAX_LEN=1024 +# CONFIG_FEATURE_EDITING_VI is not set +CONFIG_FEATURE_EDITING_HISTORY=15 +CONFIG_FEATURE_EDITING_SAVEHISTORY=y +# CONFIG_FEATURE_EDITING_SAVE_ON_EXIT is not set +# CONFIG_FEATURE_REVERSE_SEARCH is not set +CONFIG_FEATURE_TAB_COMPLETION=y +CONFIG_FEATURE_USERNAME_COMPLETION=y +CONFIG_FEATURE_EDITING_FANCY_PROMPT=y +# CONFIG_FEATURE_EDITING_WINCH is not set +# CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set +# CONFIG_LOCALE_SUPPORT is not set +# CONFIG_UNICODE_SUPPORT is not set +# CONFIG_UNICODE_USING_LOCALE is not set +# CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set +CONFIG_SUBST_WCHAR=0 +CONFIG_LAST_SUPPORTED_WCHAR=0 +# CONFIG_UNICODE_COMBINING_WCHARS is not set +# CONFIG_UNICODE_WIDE_WCHARS is not set +# CONFIG_UNICODE_BIDI_SUPPORT is not set +# CONFIG_UNICODE_NEUTRAL_TABLE is not set +# CONFIG_UNICODE_PRESERVE_BROKEN is not set +CONFIG_FEATURE_NON_POSIX_CP=y +# CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set +CONFIG_FEATURE_USE_SENDFILE=y +CONFIG_FEATURE_COPYBUF_KB=4 +CONFIG_FEATURE_SKIP_ROOTFS=y +CONFIG_MONOTONIC_SYSCALL=y +CONFIG_IOCTL_HEX2STR_ERROR=y +CONFIG_FEATURE_HWIB=y + +# +# Applets +# + +# +# Archival Utilities +# +CONFIG_FEATURE_SEAMLESS_XZ=y +CONFIG_FEATURE_SEAMLESS_LZMA=y +CONFIG_FEATURE_SEAMLESS_BZ2=y +CONFIG_FEATURE_SEAMLESS_GZ=y +CONFIG_FEATURE_SEAMLESS_Z=y +# CONFIG_AR is not set +# CONFIG_FEATURE_AR_LONG_FILENAMES is not set +# CONFIG_FEATURE_AR_CREATE is not set +# CONFIG_UNCOMPRESS is not set +CONFIG_GUNZIP=y +CONFIG_ZCAT=y +CONFIG_FEATURE_GUNZIP_LONG_OPTIONS=y +CONFIG_BUNZIP2=y +CONFIG_BZCAT=y +# CONFIG_UNLZMA is not set +CONFIG_LZCAT=y +# CONFIG_LZMA is not set +# CONFIG_UNXZ is not set +CONFIG_XZCAT=y +# CONFIG_XZ is not set +CONFIG_BZIP2=y +CONFIG_FEATURE_BZIP2_DECOMPRESS=y +CONFIG_CPIO=y +# CONFIG_FEATURE_CPIO_O is not set +# CONFIG_FEATURE_CPIO_P is not set +# CONFIG_DPKG is not set +# CONFIG_DPKG_DEB is not set +CONFIG_GZIP=y +# CONFIG_FEATURE_GZIP_LONG_OPTIONS is not set +CONFIG_GZIP_FAST=0 +# CONFIG_FEATURE_GZIP_LEVELS is not set +CONFIG_FEATURE_GZIP_DECOMPRESS=y +# CONFIG_LZOP is not set +# CONFIG_UNLZOP is not set +# CONFIG_LZOPCAT is not set +# CONFIG_LZOP_COMPR_HIGH is not set +# CONFIG_RPM is not set +# CONFIG_RPM2CPIO is not set +CONFIG_TAR=y +# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set +CONFIG_FEATURE_TAR_CREATE=y +CONFIG_FEATURE_TAR_AUTODETECT=y +CONFIG_FEATURE_TAR_FROM=y +CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y +# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set +CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y +# CONFIG_FEATURE_TAR_TO_COMMAND is not set +# CONFIG_FEATURE_TAR_UNAME_GNAME is not set +CONFIG_FEATURE_TAR_NOPRESERVE_TIME=y +# CONFIG_FEATURE_TAR_SELINUX is not set +CONFIG_UNZIP=y +CONFIG_FEATURE_UNZIP_CDF=y +# CONFIG_FEATURE_UNZIP_BZIP2 is not set +# CONFIG_FEATURE_UNZIP_LZMA is not set +# CONFIG_FEATURE_UNZIP_XZ is not set +# CONFIG_FEATURE_LZMA_FAST is not set + +# +# Coreutils +# +CONFIG_BASENAME=y +CONFIG_CAT=y +CONFIG_FEATURE_CATN=y +# CONFIG_FEATURE_CATV is not set +CONFIG_CHGRP=y +CONFIG_CHMOD=y +CONFIG_CHOWN=y +# CONFIG_FEATURE_CHOWN_LONG_OPTIONS is not set +CONFIG_CHROOT=y +# CONFIG_CKSUM is not set +# CONFIG_COMM is not set +CONFIG_CP=y +# CONFIG_FEATURE_CP_LONG_OPTIONS is not set +# CONFIG_FEATURE_CP_REFLINK is not set +CONFIG_CUT=y +CONFIG_DATE=y +# CONFIG_FEATURE_DATE_ISOFMT is not set +# CONFIG_FEATURE_DATE_NANO is not set +CONFIG_FEATURE_DATE_COMPAT=y +CONFIG_DD=y +CONFIG_FEATURE_DD_SIGNAL_HANDLING=y +# CONFIG_FEATURE_DD_THIRD_STATUS_LINE is not set +# CONFIG_FEATURE_DD_IBS_OBS is not set +# CONFIG_FEATURE_DD_STATUS is not set +CONFIG_DF=y +# CONFIG_FEATURE_DF_FANCY is not set +CONFIG_DIRNAME=y +# CONFIG_DOS2UNIX is not set +# CONFIG_UNIX2DOS is not set +CONFIG_DU=y +CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y +CONFIG_ECHO=y +CONFIG_FEATURE_FANCY_ECHO=y +CONFIG_ENV=y +# CONFIG_EXPAND is not set +# CONFIG_UNEXPAND is not set +CONFIG_EXPR=y +CONFIG_EXPR_MATH_SUPPORT_64=y +# CONFIG_FACTOR is not set +CONFIG_FALSE=y +# CONFIG_FOLD is not set +# CONFIG_FSYNC is not set +CONFIG_HEAD=y +# CONFIG_FEATURE_FANCY_HEAD is not set +# CONFIG_HOSTID is not set +CONFIG_ID=y +CONFIG_GROUPS=y +# CONFIG_INSTALL is not set +# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set +# CONFIG_LINK is not set +CONFIG_LN=y +CONFIG_LOGNAME=y +CONFIG_LS=y +CONFIG_FEATURE_LS_FILETYPES=y +CONFIG_FEATURE_LS_FOLLOWLINKS=y +CONFIG_FEATURE_LS_RECURSIVE=y +CONFIG_FEATURE_LS_WIDTH=y +CONFIG_FEATURE_LS_SORTFILES=y +CONFIG_FEATURE_LS_TIMESTAMPS=y +CONFIG_FEATURE_LS_USERNAME=y +CONFIG_FEATURE_LS_COLOR=y +# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set +CONFIG_MD5SUM=y +# CONFIG_SHA1SUM is not set +# CONFIG_SHA256SUM is not set +# CONFIG_SHA512SUM is not set +# CONFIG_SHA3SUM is not set + +# +# Common options for md5sum, sha1sum, sha256sum, sha512sum, sha3sum +# +CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y +CONFIG_MKDIR=y +CONFIG_MKFIFO=y +CONFIG_MKNOD=y +CONFIG_MKTEMP=y +CONFIG_MV=y +# CONFIG_NICE is not set +# CONFIG_NL is not set +CONFIG_NOHUP=y +CONFIG_NPROC=y +CONFIG_OD=y +# CONFIG_PASTE is not set +# CONFIG_PRINTENV is not set +CONFIG_PRINTF=y +CONFIG_PWD=y +CONFIG_READLINK=y +CONFIG_FEATURE_READLINK_FOLLOW=y +CONFIG_REALPATH=y +CONFIG_RM=y +CONFIG_RMDIR=y +CONFIG_SEQ=y +# CONFIG_SHRED is not set +CONFIG_SHUF=y +CONFIG_SLEEP=y +CONFIG_FEATURE_FANCY_SLEEP=y +CONFIG_SORT=y +CONFIG_FEATURE_SORT_BIG=y +# CONFIG_FEATURE_SORT_OPTIMIZE_MEMORY is not set +# CONFIG_SPLIT is not set +# CONFIG_FEATURE_SPLIT_FANCY is not set +CONFIG_STAT=y +CONFIG_FEATURE_STAT_FORMAT=y +CONFIG_FEATURE_STAT_FILESYSTEM=y +CONFIG_STTY=y +# CONFIG_SUM is not set +CONFIG_SYNC=y +# CONFIG_FEATURE_SYNC_FANCY is not set +# CONFIG_TAC is not set +CONFIG_TAIL=y +CONFIG_FEATURE_FANCY_TAIL=y +CONFIG_TEE=y +# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set +CONFIG_TEST=y +CONFIG_TEST1=y +CONFIG_TEST2=y +CONFIG_FEATURE_TEST_64=y +# CONFIG_TIMEOUT is not set +CONFIG_TOUCH=y +CONFIG_FEATURE_TOUCH_NODEREF=y +CONFIG_FEATURE_TOUCH_SUSV3=y +CONFIG_TR=y +CONFIG_FEATURE_TR_CLASSES=y +# CONFIG_FEATURE_TR_EQUIV is not set +CONFIG_TRUE=y +# CONFIG_TRUNCATE is not set +CONFIG_TTY=y +CONFIG_UNAME=y +CONFIG_UNAME_OSNAME="GNU/Linux" +# CONFIG_BB_ARCH is not set +CONFIG_UNIQ=y +CONFIG_UNLINK=y +CONFIG_USLEEP=y +# CONFIG_UUDECODE is not set +# CONFIG_BASE64 is not set +# CONFIG_UUENCODE is not set +CONFIG_WC=y +# CONFIG_FEATURE_WC_LARGE is not set +CONFIG_WHOAMI=y +CONFIG_WHO=y +# CONFIG_W is not set +CONFIG_USERS=y +CONFIG_YES=y + +# +# Common options +# +CONFIG_FEATURE_VERBOSE=y + +# +# Common options for cp and mv +# +# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set + +# +# Common options for df, du, ls +# +CONFIG_FEATURE_HUMAN_READABLE=y + +# +# Console Utilities +# +CONFIG_CHVT=y +CONFIG_CLEAR=y +CONFIG_DEALLOCVT=y +CONFIG_DUMPKMAP=y +# CONFIG_FGCONSOLE is not set +# CONFIG_KBD_MODE is not set +CONFIG_LOADFONT=y +# CONFIG_SETFONT is not set +# CONFIG_FEATURE_SETFONT_TEXTUAL_MAP is not set +CONFIG_DEFAULT_SETFONT_DIR="" + +# +# Common options for loadfont and setfont +# +# CONFIG_FEATURE_LOADFONT_PSF2 is not set +# CONFIG_FEATURE_LOADFONT_RAW is not set +CONFIG_LOADKMAP=y +CONFIG_OPENVT=y +CONFIG_RESET=y +# CONFIG_RESIZE is not set +# CONFIG_FEATURE_RESIZE_PRINT is not set +CONFIG_SETCONSOLE=y +# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set +# CONFIG_SETKEYCODES is not set +# CONFIG_SETLOGCONS is not set +# CONFIG_SHOWKEY is not set + +# +# Debian Utilities +# +# CONFIG_PIPE_PROGRESS is not set +CONFIG_RUN_PARTS=y +CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y +# CONFIG_FEATURE_RUN_PARTS_FANCY is not set +CONFIG_START_STOP_DAEMON=y +CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y +CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y +CONFIG_WHICH=y + +# +# klibc-utils +# +# CONFIG_MINIPS is not set +# CONFIG_NUKE is not set +# CONFIG_RESUME is not set +# CONFIG_RUN_INIT is not set + +# +# Editors +# +CONFIG_AWK=y +CONFIG_FEATURE_AWK_LIBM=y +CONFIG_FEATURE_AWK_GNU_EXTENSIONS=y +CONFIG_CMP=y +CONFIG_DIFF=y +# CONFIG_FEATURE_DIFF_LONG_OPTIONS is not set +CONFIG_FEATURE_DIFF_DIR=y +# CONFIG_ED is not set +CONFIG_PATCH=y +CONFIG_SED=y +CONFIG_VI=y +CONFIG_FEATURE_VI_MAX_LEN=1024 +CONFIG_FEATURE_VI_8BIT=y +CONFIG_FEATURE_VI_COLON=y +CONFIG_FEATURE_VI_YANKMARK=y +CONFIG_FEATURE_VI_SEARCH=y +# CONFIG_FEATURE_VI_REGEX_SEARCH is not set +CONFIG_FEATURE_VI_USE_SIGNALS=y +# CONFIG_FEATURE_VI_DOT_CMD is not set +# CONFIG_FEATURE_VI_READONLY is not set +# CONFIG_FEATURE_VI_SETOPTS is not set +# CONFIG_FEATURE_VI_SET is not set +CONFIG_FEATURE_VI_WIN_RESIZE=y +# CONFIG_FEATURE_VI_ASK_TERMINAL is not set +CONFIG_FEATURE_VI_UNDO=y +CONFIG_FEATURE_VI_UNDO_QUEUE=y +CONFIG_FEATURE_VI_UNDO_QUEUE_MAX=256 +CONFIG_FEATURE_ALLOW_EXEC=y + +# +# Finding Utilities +# +CONFIG_FIND=y +CONFIG_FEATURE_FIND_PRINT0=y +CONFIG_FEATURE_FIND_MTIME=y +CONFIG_FEATURE_FIND_MMIN=y +CONFIG_FEATURE_FIND_PERM=y +CONFIG_FEATURE_FIND_TYPE=y +CONFIG_FEATURE_FIND_EXECUTABLE=y +CONFIG_FEATURE_FIND_XDEV=y +CONFIG_FEATURE_FIND_MAXDEPTH=y +CONFIG_FEATURE_FIND_NEWER=y +# CONFIG_FEATURE_FIND_INUM is not set +CONFIG_FEATURE_FIND_EXEC=y +CONFIG_FEATURE_FIND_EXEC_PLUS=y +CONFIG_FEATURE_FIND_USER=y +CONFIG_FEATURE_FIND_GROUP=y +CONFIG_FEATURE_FIND_NOT=y +CONFIG_FEATURE_FIND_DEPTH=y +CONFIG_FEATURE_FIND_PAREN=y +CONFIG_FEATURE_FIND_SIZE=y +CONFIG_FEATURE_FIND_PRUNE=y +CONFIG_FEATURE_FIND_QUIT=y +# CONFIG_FEATURE_FIND_DELETE is not set +CONFIG_FEATURE_FIND_PATH=y +CONFIG_FEATURE_FIND_REGEX=y +# CONFIG_FEATURE_FIND_CONTEXT is not set +# CONFIG_FEATURE_FIND_LINKS is not set +CONFIG_GREP=y +CONFIG_EGREP=y +CONFIG_FGREP=y +CONFIG_FEATURE_GREP_CONTEXT=y +CONFIG_XARGS=y +# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set +# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set +# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set +# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set +CONFIG_FEATURE_XARGS_SUPPORT_REPL_STR=y +# CONFIG_FEATURE_XARGS_SUPPORT_PARALLEL is not set +# CONFIG_FEATURE_XARGS_SUPPORT_ARGS_FILE is not set + +# +# Init Utilities +# +# CONFIG_BOOTCHARTD is not set +# CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set +# CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set +# CONFIG_HALT is not set +# CONFIG_POWEROFF is not set +CONFIG_REBOOT=y +# CONFIG_FEATURE_WAIT_FOR_INIT is not set +# CONFIG_FEATURE_CALL_TELINIT is not set +# CONFIG_TELINIT_PATH is not set +# CONFIG_INIT is not set +# CONFIG_LINUXRC is not set +# CONFIG_FEATURE_USE_INITTAB is not set +# CONFIG_FEATURE_KILL_REMOVED is not set +# CONFIG_FEATURE_KILL_DELAY is not set +# CONFIG_FEATURE_INIT_SCTTY is not set +# CONFIG_FEATURE_INIT_SYSLOG is not set +# CONFIG_FEATURE_INIT_QUIET is not set +# CONFIG_FEATURE_INIT_COREDUMPS is not set +# CONFIG_INIT_TERMINAL_TYPE is not set +# CONFIG_FEATURE_INIT_MODIFY_CMDLINE is not set + +# +# Login/Password Management Utilities +# +# CONFIG_FEATURE_SHADOWPASSWDS is not set +# CONFIG_USE_BB_PWD_GRP is not set +# CONFIG_USE_BB_SHADOW is not set +CONFIG_USE_BB_CRYPT=y +# CONFIG_USE_BB_CRYPT_SHA is not set +# CONFIG_ADDGROUP is not set +# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set +# CONFIG_ADD_SHELL is not set +# CONFIG_REMOVE_SHELL is not set +# CONFIG_ADDUSER is not set +# CONFIG_FEATURE_CHECK_NAMES is not set +CONFIG_LAST_ID=60000 +CONFIG_FIRST_SYSTEM_ID=100 +CONFIG_LAST_SYSTEM_ID=999 +# CONFIG_CHPASSWD is not set +CONFIG_FEATURE_DEFAULT_PASSWD_ALGO="" +# CONFIG_CRYPTPW is not set +# CONFIG_MKPASSWD is not set +# CONFIG_DELUSER is not set +# CONFIG_DELGROUP is not set +# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set +# CONFIG_GETTY is not set +# CONFIG_LOGIN is not set +# CONFIG_LOGIN_SESSION_AS_CHILD is not set +# CONFIG_LOGIN_SCRIPTS is not set +# CONFIG_FEATURE_NOLOGIN is not set +# CONFIG_FEATURE_SECURETTY is not set +# CONFIG_PASSWD is not set +# CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set +# CONFIG_SU is not set +# CONFIG_FEATURE_SU_SYSLOG is not set +# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set +# CONFIG_FEATURE_SU_BLANK_PW_NEEDS_SECURE_TTY is not set +# CONFIG_SULOGIN is not set +# CONFIG_VLOCK is not set + +# +# Linux Ext2 FS Progs +# +CONFIG_CHATTR=y +CONFIG_FSCK=y +# CONFIG_LSATTR is not set +# CONFIG_TUNE2FS is not set + +# +# Linux Module Utilities +# +# CONFIG_MODPROBE_SMALL is not set +CONFIG_DEPMOD=y +CONFIG_INSMOD=y +CONFIG_LSMOD=y +# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set +# CONFIG_MODINFO is not set +CONFIG_MODPROBE=y +# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set +CONFIG_RMMOD=y + +# +# Options common to multiple modutils +# +CONFIG_FEATURE_CMDLINE_MODULE_OPTIONS=y +# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set +# CONFIG_FEATURE_2_4_MODULES is not set +# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set +# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set +# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set +# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set +# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set +CONFIG_FEATURE_CHECK_TAINTED_MODULE=y +# CONFIG_FEATURE_INSMOD_TRY_MMAP is not set +CONFIG_FEATURE_MODUTILS_ALIAS=y +CONFIG_FEATURE_MODUTILS_SYMBOLS=y +CONFIG_DEFAULT_MODULES_DIR="/lib/modules" +CONFIG_DEFAULT_DEPMOD_FILE="modules.dep" + +# +# Linux System Utilities +# +# CONFIG_ACPID is not set +# CONFIG_FEATURE_ACPID_COMPAT is not set +# CONFIG_BLKDISCARD is not set +# CONFIG_BLKID is not set +# CONFIG_FEATURE_BLKID_TYPE is not set +# CONFIG_BLOCKDEV is not set +# CONFIG_CAL is not set +# CONFIG_CHRT is not set +CONFIG_DMESG=y +CONFIG_FEATURE_DMESG_PRETTY=y +# CONFIG_EJECT is not set +# CONFIG_FEATURE_EJECT_SCSI is not set +# CONFIG_FALLOCATE is not set +# CONFIG_FATATTR is not set +CONFIG_FBSET=y +CONFIG_FEATURE_FBSET_FANCY=y +CONFIG_FEATURE_FBSET_READMODE=y +# CONFIG_FDFORMAT is not set +CONFIG_FDISK=y +# CONFIG_FDISK_SUPPORT_LARGE_DISKS is not set +CONFIG_FEATURE_FDISK_WRITABLE=y +# CONFIG_FEATURE_AIX_LABEL is not set +# CONFIG_FEATURE_SGI_LABEL is not set +# CONFIG_FEATURE_SUN_LABEL is not set +# CONFIG_FEATURE_OSF_LABEL is not set +# CONFIG_FEATURE_GPT_LABEL is not set +# CONFIG_FEATURE_FDISK_ADVANCED is not set +# CONFIG_FINDFS is not set +CONFIG_FLOCK=y +# CONFIG_FDFLUSH is not set +# CONFIG_FREERAMDISK is not set +# CONFIG_FSCK_MINIX is not set +# CONFIG_FSFREEZE is not set +CONFIG_FSTRIM=y +# CONFIG_GETOPT is not set +# CONFIG_FEATURE_GETOPT_LONG is not set +CONFIG_HEXDUMP=y +# CONFIG_FEATURE_HEXDUMP_REVERSE is not set +# CONFIG_HD is not set +# CONFIG_XXD is not set +CONFIG_HWCLOCK=y +CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y +# CONFIG_IONICE is not set +# CONFIG_IPCRM is not set +# CONFIG_IPCS is not set +# CONFIG_LAST is not set +# CONFIG_FEATURE_LAST_FANCY is not set +CONFIG_LOSETUP=y +# CONFIG_LSPCI is not set +# CONFIG_LSUSB is not set +# CONFIG_MDEV is not set +# CONFIG_FEATURE_MDEV_CONF is not set +# CONFIG_FEATURE_MDEV_RENAME is not set +# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set +# CONFIG_FEATURE_MDEV_EXEC is not set +# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set +CONFIG_MESG=y +# CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP is not set +# CONFIG_MKE2FS is not set +# CONFIG_MKFS_EXT2 is not set +# CONFIG_MKFS_MINIX is not set +# CONFIG_FEATURE_MINIX2 is not set +# CONFIG_MKFS_REISER is not set +# CONFIG_MKDOSFS is not set +# CONFIG_MKFS_VFAT is not set +CONFIG_MKSWAP=y +# CONFIG_FEATURE_MKSWAP_UUID is not set +CONFIG_MORE=y +CONFIG_MOUNT=y +# CONFIG_FEATURE_MOUNT_FAKE is not set +# CONFIG_FEATURE_MOUNT_VERBOSE is not set +# CONFIG_FEATURE_MOUNT_HELPERS is not set +# CONFIG_FEATURE_MOUNT_LABEL is not set +# CONFIG_FEATURE_MOUNT_NFS is not set +# CONFIG_FEATURE_MOUNT_CIFS is not set +CONFIG_FEATURE_MOUNT_FLAGS=y +CONFIG_FEATURE_MOUNT_FSTAB=y +# CONFIG_FEATURE_MOUNT_OTHERTAB is not set +CONFIG_MOUNTPOINT=y +# CONFIG_NOLOGIN is not set +# CONFIG_NOLOGIN_DEPENDENCIES is not set +# CONFIG_NSENTER is not set +CONFIG_PIVOT_ROOT=y +CONFIG_RDATE=y +# CONFIG_RDEV is not set +# CONFIG_READPROFILE is not set +CONFIG_RENICE=y +# CONFIG_REV is not set +# CONFIG_RTCWAKE is not set +# CONFIG_SCRIPT is not set +# CONFIG_SCRIPTREPLAY is not set +# CONFIG_SETARCH is not set +# CONFIG_LINUX32 is not set +# CONFIG_LINUX64 is not set +# CONFIG_SETPRIV is not set +# CONFIG_FEATURE_SETPRIV_DUMP is not set +# CONFIG_FEATURE_SETPRIV_CAPABILITIES is not set +# CONFIG_FEATURE_SETPRIV_CAPABILITY_NAMES is not set +CONFIG_SETSID=y +CONFIG_SWAPON=y +CONFIG_FEATURE_SWAPON_DISCARD=y +CONFIG_FEATURE_SWAPON_PRI=y +CONFIG_SWAPOFF=y +# CONFIG_FEATURE_SWAPONOFF_LABEL is not set +CONFIG_SWITCH_ROOT=y +# CONFIG_TASKSET is not set +# CONFIG_FEATURE_TASKSET_FANCY is not set +# CONFIG_UEVENT is not set +CONFIG_UMOUNT=y +CONFIG_FEATURE_UMOUNT_ALL=y +# CONFIG_UNSHARE is not set +# CONFIG_WALL is not set + +# +# Common options for mount/umount +# +CONFIG_FEATURE_MOUNT_LOOP=y +CONFIG_FEATURE_MOUNT_LOOP_CREATE=y +# CONFIG_FEATURE_MTAB_SUPPORT is not set +# CONFIG_VOLUMEID is not set + +# +# Filesystem/Volume identification +# +# CONFIG_FEATURE_VOLUMEID_BCACHE is not set +# CONFIG_FEATURE_VOLUMEID_BTRFS is not set +# CONFIG_FEATURE_VOLUMEID_CRAMFS is not set +# CONFIG_FEATURE_VOLUMEID_EXFAT is not set +# CONFIG_FEATURE_VOLUMEID_EXT is not set +# CONFIG_FEATURE_VOLUMEID_F2FS is not set +# CONFIG_FEATURE_VOLUMEID_FAT is not set +# CONFIG_FEATURE_VOLUMEID_HFS is not set +# CONFIG_FEATURE_VOLUMEID_ISO9660 is not set +# CONFIG_FEATURE_VOLUMEID_JFS is not set +# CONFIG_FEATURE_VOLUMEID_LFS is not set +# CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set +# CONFIG_FEATURE_VOLUMEID_LINUXSWAP is not set +# CONFIG_FEATURE_VOLUMEID_LUKS is not set +# CONFIG_FEATURE_VOLUMEID_MINIX is not set +# CONFIG_FEATURE_VOLUMEID_NILFS is not set +# CONFIG_FEATURE_VOLUMEID_NTFS is not set +# CONFIG_FEATURE_VOLUMEID_OCFS2 is not set +# CONFIG_FEATURE_VOLUMEID_REISERFS is not set +# CONFIG_FEATURE_VOLUMEID_ROMFS is not set +# CONFIG_FEATURE_VOLUMEID_SQUASHFS is not set +# CONFIG_FEATURE_VOLUMEID_SYSV is not set +# CONFIG_FEATURE_VOLUMEID_UBIFS is not set +# CONFIG_FEATURE_VOLUMEID_UDF is not set +# CONFIG_FEATURE_VOLUMEID_XFS is not set + +# +# Miscellaneous Utilities +# +# CONFIG_ADJTIMEX is not set +# CONFIG_BBCONFIG is not set +# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set +# CONFIG_BC is not set +CONFIG_DC=y +# CONFIG_FEATURE_DC_BIG is not set +# CONFIG_FEATURE_DC_LIBM is not set +# CONFIG_FEATURE_BC_INTERACTIVE is not set +# CONFIG_FEATURE_BC_LONG_OPTIONS is not set +# CONFIG_BEEP is not set +CONFIG_FEATURE_BEEP_FREQ=0 +CONFIG_FEATURE_BEEP_LENGTH_MS=0 +# CONFIG_CHAT is not set +# CONFIG_FEATURE_CHAT_NOFAIL is not set +# CONFIG_FEATURE_CHAT_TTY_HIFI is not set +# CONFIG_FEATURE_CHAT_IMPLICIT_CR is not set +# CONFIG_FEATURE_CHAT_SWALLOW_OPTS is not set +# CONFIG_FEATURE_CHAT_SEND_ESCAPES is not set +# CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set +# CONFIG_FEATURE_CHAT_CLR_ABORT is not set +# CONFIG_CONSPY is not set +# CONFIG_CROND is not set +# CONFIG_FEATURE_CROND_D is not set +# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set +# CONFIG_FEATURE_CROND_SPECIAL_TIMES is not set +CONFIG_FEATURE_CROND_DIR="" +# CONFIG_CRONTAB is not set +# CONFIG_DEVFSD is not set +# CONFIG_DEVFSD_MODLOAD is not set +# CONFIG_DEVFSD_FG_NP is not set +# CONFIG_DEVFSD_VERBOSE is not set +# CONFIG_FEATURE_DEVFS is not set +# CONFIG_DEVMEM is not set +# CONFIG_FBSPLASH is not set +# CONFIG_FLASHCP is not set +# CONFIG_FLASH_ERASEALL is not set +# CONFIG_FLASH_LOCK is not set +# CONFIG_FLASH_UNLOCK is not set +# CONFIG_HDPARM is not set +# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set +# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set +# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set +# CONFIG_HEXEDIT is not set +# CONFIG_I2CGET is not set +# CONFIG_I2CSET is not set +# CONFIG_I2CDUMP is not set +# CONFIG_I2CDETECT is not set +# CONFIG_INOTIFYD is not set +CONFIG_LESS=y +CONFIG_FEATURE_LESS_MAXLINES=9999999 +CONFIG_FEATURE_LESS_BRACKETS=y +CONFIG_FEATURE_LESS_FLAGS=y +# CONFIG_FEATURE_LESS_TRUNCATE is not set +# CONFIG_FEATURE_LESS_MARKS is not set +# CONFIG_FEATURE_LESS_REGEXP is not set +# CONFIG_FEATURE_LESS_WINCH is not set +# CONFIG_FEATURE_LESS_ASK_TERMINAL is not set +# CONFIG_FEATURE_LESS_DASHCMD is not set +# CONFIG_FEATURE_LESS_LINENUMS is not set +# CONFIG_FEATURE_LESS_RAW is not set +# CONFIG_FEATURE_LESS_ENV is not set +# CONFIG_LSSCSI is not set +# CONFIG_MAKEDEVS is not set +# CONFIG_FEATURE_MAKEDEVS_LEAF is not set +# CONFIG_FEATURE_MAKEDEVS_TABLE is not set +# CONFIG_MAN is not set +CONFIG_MICROCOM=y +# CONFIG_MT is not set +# CONFIG_NANDWRITE is not set +# CONFIG_NANDDUMP is not set +# CONFIG_PARTPROBE is not set +# CONFIG_RAIDAUTORUN is not set +# CONFIG_READAHEAD is not set +CONFIG_RFKILL=y +# CONFIG_RUNLEVEL is not set +# CONFIG_RX is not set +# CONFIG_SETFATTR is not set +# CONFIG_SETSERIAL is not set +CONFIG_STRINGS=y +CONFIG_TIME=y +# CONFIG_TTYSIZE is not set +# CONFIG_UBIRENAME is not set +# CONFIG_UBIATTACH is not set +# CONFIG_UBIDETACH is not set +# CONFIG_UBIMKVOL is not set +# CONFIG_UBIRMVOL is not set +# CONFIG_UBIRSVOL is not set +# CONFIG_UBIUPDATEVOL is not set +# CONFIG_VOLNAME is not set +# CONFIG_WATCHDOG is not set + +# +# Networking Utilities +# +CONFIG_FEATURE_IPV6=y +# CONFIG_FEATURE_UNIX_LOCAL is not set +CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y +# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set +# CONFIG_FEATURE_TLS_SHA1 is not set +# CONFIG_ARP is not set +# CONFIG_ARPING is not set +# CONFIG_BRCTL is not set +# CONFIG_FEATURE_BRCTL_FANCY is not set +# CONFIG_FEATURE_BRCTL_SHOW is not set +# CONFIG_DNSD is not set +# CONFIG_ETHER_WAKE is not set +# CONFIG_FTPD is not set +# CONFIG_FEATURE_FTPD_WRITE is not set +# CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST is not set +# CONFIG_FEATURE_FTPD_AUTHENTICATION is not set +# CONFIG_FTPGET is not set +# CONFIG_FTPPUT is not set +# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set +CONFIG_HOSTNAME=y +CONFIG_DNSDOMAINNAME=y +# CONFIG_HTTPD is not set +# CONFIG_FEATURE_HTTPD_RANGES is not set +# CONFIG_FEATURE_HTTPD_SETUID is not set +# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set +# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set +# CONFIG_FEATURE_HTTPD_CGI is not set +# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set +# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set +# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set +# CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set +# CONFIG_FEATURE_HTTPD_PROXY is not set +# CONFIG_FEATURE_HTTPD_GZIP is not set +CONFIG_IFCONFIG=y +CONFIG_FEATURE_IFCONFIG_STATUS=y +# CONFIG_FEATURE_IFCONFIG_SLIP is not set +# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set +CONFIG_FEATURE_IFCONFIG_HW=y +# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set +# CONFIG_IFENSLAVE is not set +# CONFIG_IFPLUGD is not set +CONFIG_IFUP=y +CONFIG_IFDOWN=y +CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate" +CONFIG_FEATURE_IFUPDOWN_IP=y +CONFIG_FEATURE_IFUPDOWN_IPV4=y +CONFIG_FEATURE_IFUPDOWN_IPV6=y +CONFIG_FEATURE_IFUPDOWN_MAPPING=y +CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP=y +# CONFIG_INETD is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set +# CONFIG_FEATURE_INETD_RPC is not set +CONFIG_IP=y +# CONFIG_IPADDR is not set +# CONFIG_IPLINK is not set +# CONFIG_IPROUTE is not set +# CONFIG_IPTUNNEL is not set +# CONFIG_IPRULE is not set +# CONFIG_IPNEIGH is not set +CONFIG_FEATURE_IP_ADDRESS=y +CONFIG_FEATURE_IP_LINK=y +CONFIG_FEATURE_IP_ROUTE=y +CONFIG_FEATURE_IP_ROUTE_DIR="/etc/iproute2" +CONFIG_FEATURE_IP_TUNNEL=y +# CONFIG_FEATURE_IP_RULE is not set +# CONFIG_FEATURE_IP_NEIGH is not set +# CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set +# CONFIG_IPCALC is not set +# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set +# CONFIG_FEATURE_IPCALC_FANCY is not set +# CONFIG_FAKEIDENTD is not set +# CONFIG_NAMEIF is not set +# CONFIG_FEATURE_NAMEIF_EXTENDED is not set +# CONFIG_NBDCLIENT is not set +CONFIG_NC=y +# CONFIG_NETCAT is not set +# CONFIG_NC_SERVER is not set +# CONFIG_NC_EXTRA is not set +# CONFIG_NC_110_COMPAT is not set +CONFIG_NETSTAT=y +# CONFIG_FEATURE_NETSTAT_WIDE is not set +# CONFIG_FEATURE_NETSTAT_PRG is not set +CONFIG_NSLOOKUP=y +# CONFIG_FEATURE_NSLOOKUP_BIG is not set +# CONFIG_FEATURE_NSLOOKUP_LONG_OPTIONS is not set +# CONFIG_NTPD is not set +# CONFIG_FEATURE_NTPD_SERVER is not set +# CONFIG_FEATURE_NTPD_CONF is not set +# CONFIG_FEATURE_NTP_AUTH is not set +CONFIG_PING=y +CONFIG_PING6=y +CONFIG_FEATURE_FANCY_PING=y +# CONFIG_PSCAN is not set +CONFIG_ROUTE=y +# CONFIG_SLATTACH is not set +# CONFIG_SSL_CLIENT is not set +# CONFIG_TC is not set +# CONFIG_FEATURE_TC_INGRESS is not set +# CONFIG_TCPSVD is not set +# CONFIG_UDPSVD is not set +CONFIG_TELNET=y +CONFIG_FEATURE_TELNET_TTYPE=y +CONFIG_FEATURE_TELNET_AUTOLOGIN=y +CONFIG_FEATURE_TELNET_WIDTH=y +# CONFIG_TELNETD is not set +# CONFIG_FEATURE_TELNETD_STANDALONE is not set +# CONFIG_FEATURE_TELNETD_INETD_WAIT is not set +CONFIG_TFTP=y +# CONFIG_FEATURE_TFTP_PROGRESS_BAR is not set +CONFIG_TFTPD=y +CONFIG_FEATURE_TFTP_GET=y +CONFIG_FEATURE_TFTP_PUT=y +# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set +# CONFIG_TFTP_DEBUG is not set +CONFIG_TLS=y +CONFIG_TRACEROUTE=y +# CONFIG_TRACEROUTE6 is not set +# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set +# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set +# CONFIG_TUNCTL is not set +# CONFIG_FEATURE_TUNCTL_UG is not set +# CONFIG_VCONFIG is not set +CONFIG_WGET=y +CONFIG_FEATURE_WGET_LONG_OPTIONS=y +CONFIG_FEATURE_WGET_STATUSBAR=y +CONFIG_FEATURE_WGET_AUTHENTICATION=y +CONFIG_FEATURE_WGET_TIMEOUT=y +CONFIG_FEATURE_WGET_HTTPS=y +# CONFIG_FEATURE_WGET_OPENSSL is not set +# CONFIG_WHOIS is not set +# CONFIG_ZCIP is not set +CONFIG_UDHCPD=y +# CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC is not set +# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set +CONFIG_DHCPD_LEASES_FILE="/var/lib/misc/udhcpd.leases" +CONFIG_DUMPLEASES=y +# CONFIG_DHCPRELAY is not set +CONFIG_UDHCPC=y +CONFIG_FEATURE_UDHCPC_ARPING=y +CONFIG_FEATURE_UDHCPC_SANITIZEOPT=y +CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script" +# CONFIG_UDHCPC6 is not set +# CONFIG_FEATURE_UDHCPC6_RFC3646 is not set +# CONFIG_FEATURE_UDHCPC6_RFC4704 is not set +# CONFIG_FEATURE_UDHCPC6_RFC4833 is not set +# CONFIG_FEATURE_UDHCPC6_RFC5970 is not set + +# +# Common options for DHCP applets +# +# CONFIG_FEATURE_UDHCP_PORT is not set +CONFIG_UDHCP_DEBUG=0 +CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80 +# CONFIG_FEATURE_UDHCP_8021Q is not set +CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="-R -b" + +# +# Print Utilities +# +# CONFIG_LPD is not set +# CONFIG_LPR is not set +# CONFIG_LPQ is not set + +# +# Mail Utilities +# +# CONFIG_MAKEMIME is not set +# CONFIG_POPMAILDIR is not set +# CONFIG_FEATURE_POPMAILDIR_DELIVERY is not set +# CONFIG_REFORMIME is not set +# CONFIG_FEATURE_REFORMIME_COMPAT is not set +# CONFIG_SENDMAIL is not set +CONFIG_FEATURE_MIME_CHARSET="" + +# +# Process Utilities +# +CONFIG_FREE=y +CONFIG_FUSER=y +# CONFIG_IOSTAT is not set +CONFIG_KILL=y +CONFIG_KILLALL=y +# CONFIG_KILLALL5 is not set +# CONFIG_LSOF is not set +# CONFIG_MPSTAT is not set +# CONFIG_NMETER is not set +# CONFIG_PGREP is not set +# CONFIG_PKILL is not set +CONFIG_PIDOF=y +# CONFIG_FEATURE_PIDOF_SINGLE is not set +# CONFIG_FEATURE_PIDOF_OMIT is not set +# CONFIG_PMAP is not set +# CONFIG_POWERTOP is not set +# CONFIG_FEATURE_POWERTOP_INTERACTIVE is not set +CONFIG_PS=y +CONFIG_FEATURE_PS_WIDE=y +CONFIG_FEATURE_PS_LONG=y +# CONFIG_FEATURE_PS_TIME is not set +# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set +# CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS is not set +# CONFIG_PSTREE is not set +# CONFIG_PWDX is not set +# CONFIG_SMEMCAP is not set +CONFIG_BB_SYSCTL=y +CONFIG_TOP=y +# CONFIG_FEATURE_TOP_INTERACTIVE is not set +CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y +CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y +# CONFIG_FEATURE_TOP_SMP_CPU is not set +# CONFIG_FEATURE_TOP_DECIMALS is not set +# CONFIG_FEATURE_TOP_SMP_PROCESS is not set +# CONFIG_FEATURE_TOPMEM is not set +CONFIG_UPTIME=y +# CONFIG_FEATURE_UPTIME_UTMP_SUPPORT is not set +CONFIG_WATCH=y +# CONFIG_FEATURE_SHOW_THREADS is not set + +# +# Runit Utilities +# +# CONFIG_CHPST is not set +# CONFIG_SETUIDGID is not set +# CONFIG_ENVUIDGID is not set +# CONFIG_ENVDIR is not set +# CONFIG_SOFTLIMIT is not set +# CONFIG_RUNSV is not set +# CONFIG_RUNSVDIR is not set +# CONFIG_FEATURE_RUNSVDIR_LOG is not set +# CONFIG_SV is not set +CONFIG_SV_DEFAULT_SERVICE_DIR="" +# CONFIG_SVC is not set +# CONFIG_SVOK is not set +# CONFIG_SVLOGD is not set +# CONFIG_CHCON is not set +# CONFIG_GETENFORCE is not set +# CONFIG_GETSEBOOL is not set +# CONFIG_LOAD_POLICY is not set +# CONFIG_MATCHPATHCON is not set +# CONFIG_RUNCON is not set +# CONFIG_SELINUXENABLED is not set +# CONFIG_SESTATUS is not set +# CONFIG_SETENFORCE is not set +# CONFIG_SETFILES is not set +# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set +# CONFIG_RESTORECON is not set +# CONFIG_SETSEBOOL is not set + +# +# Shells +# +CONFIG_SH_IS_ASH=y +# CONFIG_SH_IS_HUSH is not set +# CONFIG_SH_IS_NONE is not set +# CONFIG_BASH_IS_ASH is not set +# CONFIG_BASH_IS_HUSH is not set +CONFIG_BASH_IS_NONE=y +CONFIG_ASH=y +CONFIG_ASH_OPTIMIZE_FOR_SIZE=y +CONFIG_ASH_INTERNAL_GLOB=y +CONFIG_ASH_BASH_COMPAT=y +# CONFIG_ASH_BASH_SOURCE_CURDIR is not set +CONFIG_ASH_BASH_NOT_FOUND_HOOK=y +CONFIG_ASH_JOB_CONTROL=y +CONFIG_ASH_ALIAS=y +# CONFIG_ASH_RANDOM_SUPPORT is not set +CONFIG_ASH_EXPAND_PRMT=y +# CONFIG_ASH_IDLE_TIMEOUT is not set +# CONFIG_ASH_MAIL is not set +CONFIG_ASH_ECHO=y +CONFIG_ASH_PRINTF=y +CONFIG_ASH_TEST=y +CONFIG_ASH_HELP=y +CONFIG_ASH_GETOPTS=y +CONFIG_ASH_CMDCMD=y +# CONFIG_CTTYHACK is not set +# CONFIG_HUSH is not set +# CONFIG_HUSH_BASH_COMPAT is not set +# CONFIG_HUSH_BRACE_EXPANSION is not set +# CONFIG_HUSH_LINENO_VAR is not set +# CONFIG_HUSH_BASH_SOURCE_CURDIR is not set +# CONFIG_HUSH_INTERACTIVE is not set +# CONFIG_HUSH_SAVEHISTORY is not set +# CONFIG_HUSH_JOB is not set +# CONFIG_HUSH_TICK is not set +# CONFIG_HUSH_IF is not set +# CONFIG_HUSH_LOOPS is not set +# CONFIG_HUSH_CASE is not set +# CONFIG_HUSH_FUNCTIONS is not set +# CONFIG_HUSH_LOCAL is not set +# CONFIG_HUSH_RANDOM_SUPPORT is not set +# CONFIG_HUSH_MODE_X is not set +# CONFIG_HUSH_ECHO is not set +# CONFIG_HUSH_PRINTF is not set +# CONFIG_HUSH_TEST is not set +# CONFIG_HUSH_HELP is not set +# CONFIG_HUSH_EXPORT is not set +# CONFIG_HUSH_EXPORT_N is not set +# CONFIG_HUSH_READONLY is not set +# CONFIG_HUSH_KILL is not set +# CONFIG_HUSH_WAIT is not set +# CONFIG_HUSH_COMMAND is not set +# CONFIG_HUSH_TRAP is not set +# CONFIG_HUSH_TYPE is not set +# CONFIG_HUSH_TIMES is not set +# CONFIG_HUSH_READ is not set +# CONFIG_HUSH_SET is not set +# CONFIG_HUSH_UNSET is not set +# CONFIG_HUSH_ULIMIT is not set +# CONFIG_HUSH_UMASK is not set +# CONFIG_HUSH_GETOPTS is not set +# CONFIG_HUSH_MEMLEAK is not set + +# +# Options common to all shells +# +CONFIG_FEATURE_SH_MATH=y +# CONFIG_FEATURE_SH_MATH_64 is not set +CONFIG_FEATURE_SH_EXTRA_QUIET=y +# CONFIG_FEATURE_SH_STANDALONE is not set +# CONFIG_FEATURE_SH_NOFORK is not set +# CONFIG_FEATURE_SH_READ_FRAC is not set +CONFIG_FEATURE_SH_HISTFILESIZE=y +# CONFIG_FEATURE_SH_EMBEDDED_SCRIPTS is not set + +# +# System Logging Utilities +# +CONFIG_KLOGD=y + +# +# klogd should not be used together with syslog to kernel printk buffer +# +CONFIG_FEATURE_KLOGD_KLOGCTL=y +CONFIG_LOGGER=y +# CONFIG_LOGREAD is not set +# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set +# CONFIG_SYSLOGD is not set +# CONFIG_FEATURE_ROTATE_LOGFILE is not set +# CONFIG_FEATURE_REMOTE_LOG is not set +# CONFIG_FEATURE_SYSLOGD_DUP is not set +# CONFIG_FEATURE_SYSLOGD_CFG is not set +CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=0 +# CONFIG_FEATURE_IPC_SYSLOG is not set +CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=0 +# CONFIG_FEATURE_KMSG_SYSLOG is not set diff --git a/recipes-core/busybox/busybox/ftpget.cfg b/recipes-core/busybox/busybox/ftpget.cfg new file mode 100644 index 0000000..b39a34d --- /dev/null +++ b/recipes-core/busybox/busybox/ftpget.cfg @@ -0,0 +1,4 @@ +CONFIG_FTPGET=y +CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS=y +CONFIG_FEATURE_DD_IBS_OBS=y +CONFIG_FEATURE_HEXDUMP_REVERSE=y diff --git a/recipes-core/busybox/busybox_%.bbappend b/recipes-core/busybox/busybox_%.bbappend new file mode 100644 index 0000000..53c53db --- /dev/null +++ b/recipes-core/busybox/busybox_%.bbappend @@ -0,0 +1,6 @@ +# Cinfigure Busybox +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" + +SRC_URI += "file://defconfig \ + file://ftpget.cfg \ + " diff --git a/recipes-core/packagegroups/packagegroup-core-tools-testapps.bbappend b/recipes-core/packagegroups/packagegroup-core-tools-testapps.bbappend new file mode 100644 index 0000000..acf509a --- /dev/null +++ b/recipes-core/packagegroups/packagegroup-core-tools-testapps.bbappend @@ -0,0 +1,11 @@ +CONNMAN_PACKAGES = "\ + connman-tools \ + connman-tests \ + connman-client \ + " + +RDEPENDS_${PN}_remove = "\ + ${@bb.utils.contains('DISTRO', 'b2qt', '', \ + bb.utils.contains('DISTRO_FEATURES', 'wayland', '${CONNMAN_PACKAGES}', \ + '', d), d)} \ + " diff --git a/recipes-core/psplash/files/0001-psplash-Change-colors-for-the-Embedian-Yocto-logo.patch b/recipes-core/psplash/files/0001-psplash-Change-colors-for-the-Embedian-Yocto-logo.patch new file mode 100644 index 0000000..1599814 --- /dev/null +++ b/recipes-core/psplash/files/0001-psplash-Change-colors-for-the-Embedian-Yocto-logo.patch @@ -0,0 +1,37 @@ +From 7822c48234ae7f3161ec6dbc4d4f54008b790e24 Mon Sep 17 00:00:00 2001 +From: Eran Matityahu +Date: Mon, 8 Aug 2016 12:07:30 +0300 +Subject: [PATCH 1/1] psplash: Change colors for the Variscite Yocto logo + +Signed-off-by: Eran Matityahu +--- + psplash-colors.h | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/psplash-colors.h b/psplash-colors.h +index d701089..049d8d9 100644 +--- a/psplash-colors.h ++++ b/psplash-colors.h +@@ -20,15 +20,15 @@ + #define _HAVE_PSPLASH_COLORS_H + + /* This is the overall background color */ +-#define PSPLASH_BACKGROUND_COLOR 0xec,0xec,0xe1 ++#define PSPLASH_BACKGROUND_COLOR 0xff,0xff,0xff + + /* This is the color of any text output */ +-#define PSPLASH_TEXT_COLOR 0x6d,0x6d,0x70 ++#define PSPLASH_TEXT_COLOR 0x00,0x56,0xa5 + + /* This is the color of the progress bar indicator */ +-#define PSPLASH_BAR_COLOR 0x6d,0x6d,0x70 ++#define PSPLASH_BAR_COLOR 0x00,0x56,0xa5 + + /* This is the color of the progress bar background */ +-#define PSPLASH_BAR_BACKGROUND_COLOR 0xec,0xec,0xe1 ++#define PSPLASH_BAR_BACKGROUND_COLOR 0xff,0xff,0xff + + #endif +-- +2.9.2 + diff --git a/recipes-core/psplash/files/psplash-bar.png b/recipes-core/psplash/files/psplash-bar.png new file mode 100644 index 0000000000000000000000000000000000000000..642c55d323cd392c63645ec31ef0277305ccf760 GIT binary patch literal 332 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 ./emb-create-yocto-sdcard.sh [options] /dev/sdX +(Change /dev/sdX to your device name) + +options: + -h Display help message + -s Only show partition sizes to be written, without actually write them + -a Automatically set the rootfs partition size to fill the SD card + -r Select alternative rootfs for recovery images (default: build_x11/tmp/deploy/images//fsl-image-validation-imx.tar.bz2) + +If you don't use the '-a' option, a default rootfs size of 3700MiB will be used. +The '-r' option allows you to create a bootable sdcard with an alternative image for the installation to NAND flash or eMMC. +Example: "-r tmp/deploy/images//fsl-image-qt5-validation-imx" -- selects the "Qt5 image with X11" recovery image + + +Once the script is done, use the SD card to boot, and then to flash your internal storage/s either use the icons, +or the following linux shell script: +install_yocto.sh diff --git a/scripts/emb_mk_yocto_sdcard/emb-create-yocto-emmc.sh b/scripts/emb_mk_yocto_sdcard/emb-create-yocto-emmc.sh new file mode 100755 index 0000000..1a68bea --- /dev/null +++ b/scripts/emb_mk_yocto_sdcard/emb-create-yocto-emmc.sh @@ -0,0 +1,263 @@ +#!/bin/bash -e + +blue_underlined_bold_echo() +{ + echo -e "\e[34m\e[4m\e[1m$@\e[0m" +} + +blue_bold_echo() +{ + echo -e "\e[34m\e[1m$@\e[0m" +} + +red_bold_echo() +{ + echo -e "\e[31m\e[1m$@\e[0m" +} + +IMGS_PATH=/opt/images/Yocto +UBOOT_IMAGE=imx-boot-sd.bin +KERNEL_IMAGE=Image +ROOTFS_IMAGE=rootfs.tar.bz2 +BOOTLOADER_RESERVED_SIZE=4 +PART1_SIZE=48 +BOOTLOADER_OFFSET=32 +DISPLAY= +#DISPLAY=-lvds +PART=p +BOOTPART=1 +ROOTFSPART=2 +BOOTDIR=/boot + +check_board() +{ + if grep -q "i.MX8MP" /sys/devices/soc0/soc_id; then + BOARD=pitx-imx8mp + DTB_PREFIX=imx8mp-pitx + BLOCK=mmcblk2 + + if [[ $DISPLAY != "-lvds" && $DISPLAY != "" ]]; then + red_bold_echo "ERROR: invalid display, should be lvds, or empty" + exit 1 + fi + else + red_bold_echo "ERROR: Unsupported board" + exit 1 + fi + + + if [[ ! -b /dev/${BLOCK} ]] ; then + red_bold_echo "ERROR: Can't find eMMC device (/dev/${BLOCK})." + red_bold_echo "Please verify you are using the correct options for your SMARC Module." + exit 1 + fi +} + +check_images() +{ + if [[ ! -f $IMGS_PATH/$UBOOT_IMAGE ]] ; then + red_bold_echo "ERROR: \"$IMGS_PATH/$UBOOT_IMAGE\" does not exist" + exit 1 + fi + + if [[ ! -f $IMGS_PATH/$KERNEL_IMAGE ]] ; then + red_bold_echo "ERROR: \"$IMGS_PATH/$KERNEL_IMAGE\" does not exist" + exit 1 + fi + + if [[ ! -f $IMGS_PATH/${DTB_PREFIX}${DISPLAY}.dtb ]] ; then + red_bold_echo "ERROR: \"$IMGS_PATH/${DTB_PREFIX}${DISPLAY}.dtb\" does not exist" + exit 1 + fi + + if [[ ! -f $IMGS_PATH/uEnv.txt ]] ; then + red_bold_echo "ERROR: \"$IMGS_PATH/uEnv.txt\" does not exist" + exit 1 + fi + + if [[ ! -f $IMGS_PATH/$ROOTFS_IMAGE ]] ; then + red_bold_echo "ERROR: \"$IMGS_PATH/$ROOTFS_IMAGE\" does not exist" + exit 1 + fi +} + +delete_emmc() +{ + echo + blue_underlined_bold_echo "Deleting current partitions" + + umount /dev/${BLOCK}${PART}* 2>/dev/null || true + + for ((i=1; i<=16; i++)); do + if [[ -e /dev/${BLOCK}${PART}${i} ]]; then + dd if=/dev/zero of=/dev/${BLOCK}${PART}${i} bs=1M count=1 2>/dev/null || true + fi + done + sync + + dd if=/dev/zero of=/dev/${BLOCK} bs=1M count=${BOOTLOADER_RESERVED_SIZE} + + sync; sleep 1 +} + +create_emmc_parts() +{ + echo + blue_underlined_bold_echo "Creating new partitions" + + SECT_SIZE_BYTES=`cat /sys/block/${BLOCK}/queue/hw_sector_size` + PART1_FIRST_SECT=$(($BOOTLOADER_RESERVED_SIZE * 1024 * 1024 / $SECT_SIZE_BYTES)) + PART1_END_SECT=$((($BOOTLOADER_RESERVED_SIZE + $PART1_SIZE) * 1024 * 1024 / $SECT_SIZE_BYTES)) + PART2_FIRST_SECT=`expr ${PART1_END_SECT} + 1` + + (echo n; echo p; echo $BOOTPART; echo $PART1_FIRST_SECT; \ + echo $PART1_END_SECT; echo n; echo p; echo $ROOTFSPART; \ + echo $PART2_FIRST_SECT; echo; \ + echo p; echo w) | fdisk -u /dev/${BLOCK} > /dev/null + + sync; sleep 1 + fdisk -u -l /dev/${BLOCK} +} + +format_emmc_parts() +{ + echo + blue_underlined_bold_echo "Formatting partitions" + + mkfs.vfat -F 16 /dev/${BLOCK}${PART}${BOOTPART} -n boot + mkfs.ext4 /dev/${BLOCK}${PART}${ROOTFSPART} -L rootfs + + sync; sleep 1 +} + +install_bootloader_to_emmc() +{ + echo + blue_underlined_bold_echo "Installing booloader" + + dd if=${IMGS_PATH}/${UBOOT_IMAGE} of=/dev/${BLOCK} bs=1K seek=${BOOTLOADER_OFFSET} + sync +} + +install_kernel_to_emmc() +{ + echo + blue_underlined_bold_echo "Installing kernel" + + MOUNTDIR=/run/media/${BLOCK}${PART}${BOOTPART} + mkdir -p ${MOUNTDIR} + mount /dev/${BLOCK}${PART}${BOOTPART} ${MOUNTDIR} + mkdir -p ${MOUNTDIR}/dtbs/ + cp -v ${IMGS_PATH}/${KERNEL_IMAGE} ${MOUNTDIR} + cp -v ${IMGS_PATH}/${DTB_PREFIX}${DISPLAY}.dtb ${MOUNTDIR}/dtbs/imx8mp-pitx.dtb + cp -v ${IMGS_PATH}/uEnv.txt ${MOUNTDIR} + + echo + sync + + umount ${MOUNTDIR} +} + +install_rootfs_to_emmc() +{ + echo + blue_underlined_bold_echo "Installing rootfs" + + MOUNTDIR=/run/media/${BLOCK}${PART}${ROOTFSPART} + mkdir -p ${MOUNTDIR} + mount /dev/${BLOCK}${PART}${ROOTFSPART} ${MOUNTDIR} + + printf "Extracting files" + tar --warning=no-timestamp -jxvf ${IMGS_PATH}/${ROOTFS_IMAGE} -C ${MOUNTDIR} --checkpoint=.1200 + + # Create DTB symlink + (cd ${MOUNTDIR}/${BOOTDIR}; ln -fs ${DTB_PREFIX}${DISPLAY}.dtb ${DTB_PREFIX}.dtb) + + echo + sync + + umount ${MOUNTDIR} +} + +stop_udev() +{ + if [ -f /lib/systemd/system/systemd-udevd.service ]; then + systemctl -q mask --runtime systemd-udevd + systemctl -q stop systemd-udevd + fi +} + +start_udev() +{ + if [ -f /lib/systemd/system/systemd-udevd.service ]; then + systemctl -q unmask --runtime systemd-udevd + systemctl -q start systemd-udevd + fi +} + +usage() +{ + echo + echo "This script installs Yocto Rootfs on the SMARC-iMX8MP's internal eMMC storage device" + echo + echo " Usage: $(basename $0)