diff --git a/.gitignore b/.gitignore index 4c4fa6f985a3..01284e4afde4 100644 --- a/.gitignore +++ b/.gitignore @@ -127,4 +127,27 @@ arch/arm64/boot/dts/samsung/*.reverse.dts # Misc scripts/crypto/__pycache__/ -scripts/fmp/__pycache__/ \ No newline at end of file +scripts/fmp/__pycache__/ + +# DS +drivers/gator_5.27/gator_src_md5.h +firmware/five/ffffffff000000000000000000000072.tlbin +scripts/rkp_cfp/common.pyc +scripts/rkp_cfp/tmp/ +security/proca/proca_certificate-asn1.c +security/proca/proca_certificate-asn1.h +security/samsung/defex_lsm/cert/pubkey_eng.der +security/samsung/defex_lsm/cert/pubkey_user.der +security/samsung/defex_lsm/defex_packed_rules.inc +security/samsung/defex_lsm/pack_rules +arch/arm64/boot/dts/exynos/*.dtb +arch/arm64/boot/dts/exynos/*.reverse.dts +arch/arm64/boot/dtb.img +scripts/dtbtool_exynos/dtbtool +DS/Out/*.img +DS/Product/*.img +DS/Out/kernelzip/* +DS/Product/*.zip + +# KSU +drivers/kernelsu/* diff --git a/DS/A.I.K/authors.txt b/DS/A.I.K/authors.txt new file mode 100755 index 000000000000..1d6fc3415156 --- /dev/null +++ b/DS/A.I.K/authors.txt @@ -0,0 +1,69 @@ +mkbootimg, unpackbootimg: +https://github.com/CyanogenMod/android_system_core/tree/cm-10.2/mkbootimg (initial sources) +https://github.com/huaixzk/unpackbootimg (makefiles) +https://github.com/osm0sis/mkbootimg (patches) + +pxa-mkbootimg, pxa-unpackbootimg: +https://github.com/AKuHAK/pxa-mkbootimg (initial source) +https://github.com/osm0sis/pxa-mkbootimg (patches) + +elftool: +https://bitbucket.org/srl3gx/elftool (initial source) +https://github.com/osm0sis/elftool (patches) + +unpackelf: +https://github.com/tobiaswaldvogel/and_boot_tools/tree/master/bootimg (initial source) +https://github.com/osm0sis/unpackelf (patches) + +dumpimage, mkimage: +http://www.denx.de/wiki/U-Boot/WebHome + +mkmtkhdr: +https://github.com/omnirom/android_device_oppo_r819/tree/android-4.4/mkmtkbootimg (initial source) +https://github.com/osm0sis/mkmtkhdr (patches) + +loki_tool: +https://github.com/djrbliss/loki + +futility: +https://github.com/jcadduono/platform_external_vboot_reference (initial source) +https://github.com/osm0sis/futility (patches) + +BootSignature.jar (requires JRE 8): +https://forum.xda-developers.com/android/software-hacking/signing-boot-images-android-verified-t3600606 + +blobpack, blobunpack: +https://github.com/AndroidRoot/BlobTools + +dhtbsign: +https://github.com/chiefwigms/degas-mkbootimg/tree/galaxy_tab_a_smt285 (initial source) +https://github.com/osm0sis/dhtbsign (patches) + +rkcrc: +https://github.com/rockchip-linux/rkflashtool + +kernel_dump: +https://forum.xda-developers.com/crossdevice-dev/sony/tool-unpack-format-sony-kernel-image-t3530077 + +lz4: +http://lz4.github.io/lz4/ + +magic: +http://www.darwinsys.com/file/ + +cpio, dd, file, lzop, tail, xz; libiconv.2, libintl.8, liblzma.5, liblzo2.2, libmagic.1 (macOS): +https://www.macports.org/ + +gzip, bzip2, lzop, xz; awk, basename, bash, cpio, cut, dd, dirname, env, file, find, grep, printf, stat, sudo, tail, wc (Linux): +(required system packages/commands) + +androidbootimg.magic: +osm0sis@xda-developers + +shell scripts: +osm0sis@xda-developers (scripting) +Peteragent5, alansj & iridaki@xda-developers (general method) +SuperR. & tobias.waldvogel@xda-developers (kernel.elf to boot.img general method) +_that & rayman@xda-developers (boot.blob general method) +Chainfire@xda-developers (ChromeOS and SEAndroid general methods) +cybojenix@xda-developers (Bump general method) diff --git a/DS/A.I.K/bin/BootSignature.jar b/DS/A.I.K/bin/BootSignature.jar new file mode 100644 index 000000000000..70d850deaab7 Binary files /dev/null and b/DS/A.I.K/bin/BootSignature.jar differ diff --git a/DS/A.I.K/bin/androidbootimg.magic b/DS/A.I.K/bin/androidbootimg.magic new file mode 100644 index 000000000000..9f08b61bce4d --- /dev/null +++ b/DS/A.I.K/bin/androidbootimg.magic @@ -0,0 +1,89 @@ +#------------------------------------------------------------------------------ +# Various Android OEM non-standard boot image related magic entries +# osm0sis @ xda-developers +#------------------------------------------------------------------------------ + +# ASUS Blob Signature +0 string -SIGNED-BY-SIGNBLOB- BLOB signing + +# Barnes & Noble Nook Signature +64 string Red\x20Loader NOOK signing (red loader) +64 string Green\x20Loader NOOK signing (green loader) +64 string Green\x20Recovery NOOK signing (green recovery) +64 string eMMC\x20boot.img+secondloader NOOK signing (emmc boot) +64 string eMMC\x20recovery.img+secondloader NOOK signing (emmc recovery) +48 string BauwksBoot NOOKTAB signing (bauwks) + +# Google ChromeOS Signature +0 string CHROMEOS CHROMEOS signing + +# Samsung/Spreadtrum DHTB Signature +0 string DHTB\x01\x00\x00 DHTB signing + +# Sony SIN Packaging/Signature +0 string \x01\x00\x00\x00 SIN signing v1 +0 string \x02\x00\x00\x00 SIN signing v2 +0 string \x03SIN SIN signing v3 + +# Google Pixel/Nexus/AOSP Standard +# [test "x" as workaround to odd file/magic behavior not allowing search here] +0 string x +>0 search ANDROID! AOSP bootimg +>>36 string \x00\x00\x00\x02 \b, PXA variant (020) +>>36 string \x00\x00\x80\x02 \b, PXA variant (028) +>>36 string \x00\x00\x00\x03 \b, PXA variant (030) +>>1024 search LOKI\x01 \b, LOKI header (recovery) +>>1024 search LOKI\x00 \b, LOKI header (boot) +>>2048 search \x88\x16\x88\x58 \b, MTK headers +!:strength * 2 + +# DENX U-Boot +0 string \x27\x05\x19\x56 U-Boot bootimg + +# Intel OS +0 string $OS$\x00\x00\x01 OS bootimg + +# Rockchip KRNL +0 string KRNL KRNL bootimg + +# Sony ELF +0 string \x7FELF ELF +>5 string \x01\x01\x61 bootimg +>18 string \x28 (ARM +>18 string \x03 (x86_ +>18 string \x08 (MIPS +>4 string \x01 \b) +>4 string \x02 \b64) +>0 search \x88\x16\x88\x58 \b, MTK headers + +# MediaTek MTK +# [for detection after boot image has already been split] +0 search \x88\x16\x88\x58 MTK header +>0 search KERNEL \b, kernel type +>0 search ROOTFS \b, rootfs type +>0 search RECOVERY \b, recovery type +!:strength / 15 + +# Qualcomm Device Tree +# [for detection after boot image has already been split] +0 string QCDT QCDT header +!:strength / 15 + +# Google Android Verified Boot Signature +# [for detection with the tail of the boot image] +0 search \x02\x01\x01\x30\x82 AVB signing v1 footer +>0 search /boot \b, boot type +>0 search /recovery \b, recovery type +!:strength / 15 + +# LG Bump +# [for detection with the tail of the boot image] +0 search \x41\xA9\xE4\x67\x74\x4D\x1D\x1B\xA4\x29\xF2\xEC\xEA\x65\x52\x79 Bump footer +!:strength / 15 + +# Samsung SEAndroid +# [for detection with the tail of the boot image] +# [test "x" as workaround to odd file/magic behavior not allowing search here] +0 string x +>0 search SEANDROIDENFORCE SEAndroid footer +!:strength / 15 diff --git a/DS/A.I.K/bin/avb/verity.pk8 b/DS/A.I.K/bin/avb/verity.pk8 new file mode 100644 index 000000000000..bebf216cb600 Binary files /dev/null and b/DS/A.I.K/bin/avb/verity.pk8 differ diff --git a/DS/A.I.K/bin/avb/verity.x509.pem b/DS/A.I.K/bin/avb/verity.x509.pem new file mode 100644 index 000000000000..86399c3c1dd7 --- /dev/null +++ b/DS/A.I.K/bin/avb/verity.x509.pem @@ -0,0 +1,24 @@ +-----BEGIN CERTIFICATE----- +MIID/TCCAuWgAwIBAgIJAJcPmDkJqolJMA0GCSqGSIb3DQEBBQUAMIGUMQswCQYD +VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4g +VmlldzEQMA4GA1UECgwHQW5kcm9pZDEQMA4GA1UECwwHQW5kcm9pZDEQMA4GA1UE +AwwHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAe +Fw0xNDExMDYxOTA3NDBaFw00MjAzMjQxOTA3NDBaMIGUMQswCQYDVQQGEwJVUzET +MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G +A1UECgwHQW5kcm9pZDEQMA4GA1UECwwHQW5kcm9pZDEQMA4GA1UEAwwHQW5kcm9p +ZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAOjreE0vTVSRenuzO9vnaWfk0eQzYab0gqpi +6xAzi6dmD+ugoEKJmbPiuE5Dwf21isZ9uhUUu0dQM46dK4ocKxMRrcnmGxydFn6o +fs3ODJMXOkv2gKXL/FdbEPdDbxzdu8z3yk+W67udM/fW7WbaQ3DO0knu+izKak/3 +T41c5uoXmQ81UNtAzRGzGchNVXMmWuTGOkg6U+0I2Td7K8yvUMWhAWPPpKLtVH9r +AL5TzjYNR92izdKcz3AjRsI3CTjtpiVABGeX0TcjRSuZB7K9EK56HV+OFNS6I1NP +jdD7FIShyGlqqZdUOkAUZYanbpgeT5N7QL6uuqcGpoTOkalu6kkCAwEAAaNQME4w +HQYDVR0OBBYEFH5DM/m7oArf4O3peeKO0ZIEkrQPMB8GA1UdIwQYMBaAFH5DM/m7 +oArf4O3peeKO0ZIEkrQPMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB +AHO3NSvDE5jFvMehGGtS8BnFYdFKRIglDMc4niWSzhzOVYRH4WajxdtBWc5fx0ix +NF/+hVKVhP6AIOQa+++sk+HIi7RvioPPbhjcsVlZe7cUEGrLSSveGouQyc+j0+m6 +JF84kszIl5GGNMTnx0XRPO+g8t6h5LWfnVydgZfpGRRg+WHewk1U2HlvTjIceb0N +dcoJ8WKJAFWdcuE7VIm4w+vF/DYX/A2Oyzr2+QRhmYSv1cusgAeC1tvH4ap+J1Lg +UnOu5Kh/FqPLLSwNVQp4Bu7b9QFfqK8Moj84bj88NqRGZgDyqzuTrFxn6FW7dmyA +yttuAJAEAymk1mipd9+zp38= +-----END CERTIFICATE----- diff --git a/DS/A.I.K/bin/chromeos/empty b/DS/A.I.K/bin/chromeos/empty new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/DS/A.I.K/bin/chromeos/empty @@ -0,0 +1 @@ + diff --git a/DS/A.I.K/bin/chromeos/kernel.keyblock b/DS/A.I.K/bin/chromeos/kernel.keyblock new file mode 100644 index 000000000000..9740be4e6007 Binary files /dev/null and b/DS/A.I.K/bin/chromeos/kernel.keyblock differ diff --git a/DS/A.I.K/bin/chromeos/kernel_data_key.vbprivk b/DS/A.I.K/bin/chromeos/kernel_data_key.vbprivk new file mode 100644 index 000000000000..8d392fb294c1 Binary files /dev/null and b/DS/A.I.K/bin/chromeos/kernel_data_key.vbprivk differ diff --git a/DS/A.I.K/bin/linux/i686/blobpack b/DS/A.I.K/bin/linux/i686/blobpack new file mode 100755 index 000000000000..685c6c05409b Binary files /dev/null and b/DS/A.I.K/bin/linux/i686/blobpack differ diff --git a/DS/A.I.K/bin/linux/i686/blobunpack b/DS/A.I.K/bin/linux/i686/blobunpack new file mode 100755 index 000000000000..2d96696fc4ff Binary files /dev/null and b/DS/A.I.K/bin/linux/i686/blobunpack differ diff --git a/DS/A.I.K/bin/linux/i686/dhtbsign b/DS/A.I.K/bin/linux/i686/dhtbsign new file mode 100755 index 000000000000..f117b88fc96b Binary files /dev/null and b/DS/A.I.K/bin/linux/i686/dhtbsign differ diff --git a/DS/A.I.K/bin/linux/i686/dumpimage b/DS/A.I.K/bin/linux/i686/dumpimage new file mode 100755 index 000000000000..9e93d2dc503b Binary files /dev/null and b/DS/A.I.K/bin/linux/i686/dumpimage differ diff --git a/DS/A.I.K/bin/linux/i686/elftool b/DS/A.I.K/bin/linux/i686/elftool new file mode 100755 index 000000000000..b25dd56aa6a3 Binary files /dev/null and b/DS/A.I.K/bin/linux/i686/elftool differ diff --git a/DS/A.I.K/bin/linux/i686/futility b/DS/A.I.K/bin/linux/i686/futility new file mode 100755 index 000000000000..c830e31abf3d Binary files /dev/null and b/DS/A.I.K/bin/linux/i686/futility differ diff --git a/DS/A.I.K/bin/linux/i686/kernel_dump b/DS/A.I.K/bin/linux/i686/kernel_dump new file mode 100755 index 000000000000..ece5a08e79c4 Binary files /dev/null and b/DS/A.I.K/bin/linux/i686/kernel_dump differ diff --git a/DS/A.I.K/bin/linux/i686/loki_tool b/DS/A.I.K/bin/linux/i686/loki_tool new file mode 100755 index 000000000000..d3057603c03c Binary files /dev/null and b/DS/A.I.K/bin/linux/i686/loki_tool differ diff --git a/DS/A.I.K/bin/linux/i686/lz4 b/DS/A.I.K/bin/linux/i686/lz4 new file mode 100755 index 000000000000..d1c16466049b Binary files /dev/null and b/DS/A.I.K/bin/linux/i686/lz4 differ diff --git a/DS/A.I.K/bin/linux/i686/mkbootimg b/DS/A.I.K/bin/linux/i686/mkbootimg new file mode 100755 index 000000000000..d909d316dfaa Binary files /dev/null and b/DS/A.I.K/bin/linux/i686/mkbootimg differ diff --git a/DS/A.I.K/bin/linux/i686/mkimage b/DS/A.I.K/bin/linux/i686/mkimage new file mode 100755 index 000000000000..40801569227c Binary files /dev/null and b/DS/A.I.K/bin/linux/i686/mkimage differ diff --git a/DS/A.I.K/bin/linux/i686/mkmtkhdr b/DS/A.I.K/bin/linux/i686/mkmtkhdr new file mode 100755 index 000000000000..d71db24258b1 Binary files /dev/null and b/DS/A.I.K/bin/linux/i686/mkmtkhdr differ diff --git a/DS/A.I.K/bin/linux/i686/pxa-mkbootimg b/DS/A.I.K/bin/linux/i686/pxa-mkbootimg new file mode 100755 index 000000000000..0636873f8c6a Binary files /dev/null and b/DS/A.I.K/bin/linux/i686/pxa-mkbootimg differ diff --git a/DS/A.I.K/bin/linux/i686/pxa-unpackbootimg b/DS/A.I.K/bin/linux/i686/pxa-unpackbootimg new file mode 100755 index 000000000000..072fd8f1ae9e Binary files /dev/null and b/DS/A.I.K/bin/linux/i686/pxa-unpackbootimg differ diff --git a/DS/A.I.K/bin/linux/i686/rkcrc b/DS/A.I.K/bin/linux/i686/rkcrc new file mode 100755 index 000000000000..45027f302566 Binary files /dev/null and b/DS/A.I.K/bin/linux/i686/rkcrc differ diff --git a/DS/A.I.K/bin/linux/i686/unpackbootimg b/DS/A.I.K/bin/linux/i686/unpackbootimg new file mode 100755 index 000000000000..f07e1e6c5270 Binary files /dev/null and b/DS/A.I.K/bin/linux/i686/unpackbootimg differ diff --git a/DS/A.I.K/bin/linux/i686/unpackelf b/DS/A.I.K/bin/linux/i686/unpackelf new file mode 100755 index 000000000000..54496249e315 Binary files /dev/null and b/DS/A.I.K/bin/linux/i686/unpackelf differ diff --git a/DS/A.I.K/bin/linux/x86_64/blobpack b/DS/A.I.K/bin/linux/x86_64/blobpack new file mode 100755 index 000000000000..90256d40236e Binary files /dev/null and b/DS/A.I.K/bin/linux/x86_64/blobpack differ diff --git a/DS/A.I.K/bin/linux/x86_64/blobunpack b/DS/A.I.K/bin/linux/x86_64/blobunpack new file mode 100755 index 000000000000..53374ff57902 Binary files /dev/null and b/DS/A.I.K/bin/linux/x86_64/blobunpack differ diff --git a/DS/A.I.K/bin/linux/x86_64/dhtbsign b/DS/A.I.K/bin/linux/x86_64/dhtbsign new file mode 100755 index 000000000000..ccb7a67d61a8 Binary files /dev/null and b/DS/A.I.K/bin/linux/x86_64/dhtbsign differ diff --git a/DS/A.I.K/bin/linux/x86_64/dumpimage b/DS/A.I.K/bin/linux/x86_64/dumpimage new file mode 100755 index 000000000000..253f301c08d3 Binary files /dev/null and b/DS/A.I.K/bin/linux/x86_64/dumpimage differ diff --git a/DS/A.I.K/bin/linux/x86_64/elftool b/DS/A.I.K/bin/linux/x86_64/elftool new file mode 100755 index 000000000000..07a520daeb14 Binary files /dev/null and b/DS/A.I.K/bin/linux/x86_64/elftool differ diff --git a/DS/A.I.K/bin/linux/x86_64/futility b/DS/A.I.K/bin/linux/x86_64/futility new file mode 100755 index 000000000000..4d56ec383cf2 Binary files /dev/null and b/DS/A.I.K/bin/linux/x86_64/futility differ diff --git a/DS/A.I.K/bin/linux/x86_64/kernel_dump b/DS/A.I.K/bin/linux/x86_64/kernel_dump new file mode 100755 index 000000000000..e0aec9ee8bdb Binary files /dev/null and b/DS/A.I.K/bin/linux/x86_64/kernel_dump differ diff --git a/DS/A.I.K/bin/linux/x86_64/loki_tool b/DS/A.I.K/bin/linux/x86_64/loki_tool new file mode 100755 index 000000000000..4a1b74a55fd1 Binary files /dev/null and b/DS/A.I.K/bin/linux/x86_64/loki_tool differ diff --git a/DS/A.I.K/bin/linux/x86_64/lz4 b/DS/A.I.K/bin/linux/x86_64/lz4 new file mode 100755 index 000000000000..e4db02904488 Binary files /dev/null and b/DS/A.I.K/bin/linux/x86_64/lz4 differ diff --git a/DS/A.I.K/bin/linux/x86_64/mkbootimg b/DS/A.I.K/bin/linux/x86_64/mkbootimg new file mode 100755 index 000000000000..5688326c74b9 Binary files /dev/null and b/DS/A.I.K/bin/linux/x86_64/mkbootimg differ diff --git a/DS/A.I.K/bin/linux/x86_64/mkimage b/DS/A.I.K/bin/linux/x86_64/mkimage new file mode 100755 index 000000000000..1419b3493ffd Binary files /dev/null and b/DS/A.I.K/bin/linux/x86_64/mkimage differ diff --git a/DS/A.I.K/bin/linux/x86_64/mkmtkhdr b/DS/A.I.K/bin/linux/x86_64/mkmtkhdr new file mode 100755 index 000000000000..1ab256f35cde Binary files /dev/null and b/DS/A.I.K/bin/linux/x86_64/mkmtkhdr differ diff --git a/DS/A.I.K/bin/linux/x86_64/pxa-mkbootimg b/DS/A.I.K/bin/linux/x86_64/pxa-mkbootimg new file mode 100755 index 000000000000..588572046082 Binary files /dev/null and b/DS/A.I.K/bin/linux/x86_64/pxa-mkbootimg differ diff --git a/DS/A.I.K/bin/linux/x86_64/pxa-unpackbootimg b/DS/A.I.K/bin/linux/x86_64/pxa-unpackbootimg new file mode 100755 index 000000000000..343e6d881579 Binary files /dev/null and b/DS/A.I.K/bin/linux/x86_64/pxa-unpackbootimg differ diff --git a/DS/A.I.K/bin/linux/x86_64/rkcrc b/DS/A.I.K/bin/linux/x86_64/rkcrc new file mode 100755 index 000000000000..f2182281e634 Binary files /dev/null and b/DS/A.I.K/bin/linux/x86_64/rkcrc differ diff --git a/DS/A.I.K/bin/linux/x86_64/unpackbootimg b/DS/A.I.K/bin/linux/x86_64/unpackbootimg new file mode 100755 index 000000000000..946277f71666 Binary files /dev/null and b/DS/A.I.K/bin/linux/x86_64/unpackbootimg differ diff --git a/DS/A.I.K/bin/linux/x86_64/unpackelf b/DS/A.I.K/bin/linux/x86_64/unpackelf new file mode 100755 index 000000000000..b38ddefff7b3 Binary files /dev/null and b/DS/A.I.K/bin/linux/x86_64/unpackelf differ diff --git a/DS/A.I.K/bin/macos/i386/blobpack b/DS/A.I.K/bin/macos/i386/blobpack new file mode 100755 index 000000000000..2336ec000392 Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/blobpack differ diff --git a/DS/A.I.K/bin/macos/i386/blobunpack b/DS/A.I.K/bin/macos/i386/blobunpack new file mode 100755 index 000000000000..834cb502d102 Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/blobunpack differ diff --git a/DS/A.I.K/bin/macos/i386/cpio b/DS/A.I.K/bin/macos/i386/cpio new file mode 100755 index 000000000000..b7e41f1ce844 Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/cpio differ diff --git a/DS/A.I.K/bin/macos/i386/dd b/DS/A.I.K/bin/macos/i386/dd new file mode 100755 index 000000000000..4c04c84369e2 Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/dd differ diff --git a/DS/A.I.K/bin/macos/i386/dhtbsign b/DS/A.I.K/bin/macos/i386/dhtbsign new file mode 100755 index 000000000000..b3ba0ba39217 Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/dhtbsign differ diff --git a/DS/A.I.K/bin/macos/i386/dumpimage b/DS/A.I.K/bin/macos/i386/dumpimage new file mode 100755 index 000000000000..89b0a1e6b522 Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/dumpimage differ diff --git a/DS/A.I.K/bin/macos/i386/elftool b/DS/A.I.K/bin/macos/i386/elftool new file mode 100755 index 000000000000..27f12bebfdfc Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/elftool differ diff --git a/DS/A.I.K/bin/macos/i386/file b/DS/A.I.K/bin/macos/i386/file new file mode 100755 index 000000000000..fc43a09e35bd Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/file differ diff --git a/DS/A.I.K/bin/macos/i386/futility b/DS/A.I.K/bin/macos/i386/futility new file mode 100755 index 000000000000..fd6714cae03e Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/futility differ diff --git a/DS/A.I.K/bin/macos/i386/kernel_dump b/DS/A.I.K/bin/macos/i386/kernel_dump new file mode 100755 index 000000000000..572753e410b4 Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/kernel_dump differ diff --git a/DS/A.I.K/bin/macos/i386/libiconv.2.dylib b/DS/A.I.K/bin/macos/i386/libiconv.2.dylib new file mode 100755 index 000000000000..12fd68942578 Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/libiconv.2.dylib differ diff --git a/DS/A.I.K/bin/macos/i386/libintl.8.dylib b/DS/A.I.K/bin/macos/i386/libintl.8.dylib new file mode 100755 index 000000000000..173896719a5f Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/libintl.8.dylib differ diff --git a/DS/A.I.K/bin/macos/i386/liblzma.5.dylib b/DS/A.I.K/bin/macos/i386/liblzma.5.dylib new file mode 100755 index 000000000000..1250384c82b9 Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/liblzma.5.dylib differ diff --git a/DS/A.I.K/bin/macos/i386/liblzo2.2.dylib b/DS/A.I.K/bin/macos/i386/liblzo2.2.dylib new file mode 100755 index 000000000000..8a24e23e28c3 Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/liblzo2.2.dylib differ diff --git a/DS/A.I.K/bin/macos/i386/libmagic.1.dylib b/DS/A.I.K/bin/macos/i386/libmagic.1.dylib new file mode 100755 index 000000000000..fee9833b9c56 Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/libmagic.1.dylib differ diff --git a/DS/A.I.K/bin/macos/i386/loki_tool b/DS/A.I.K/bin/macos/i386/loki_tool new file mode 100755 index 000000000000..7eecf684fcde Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/loki_tool differ diff --git a/DS/A.I.K/bin/macos/i386/lz4 b/DS/A.I.K/bin/macos/i386/lz4 new file mode 100755 index 000000000000..5a19f16c6cd5 Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/lz4 differ diff --git a/DS/A.I.K/bin/macos/i386/lzop b/DS/A.I.K/bin/macos/i386/lzop new file mode 100755 index 000000000000..fc3103c856c2 Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/lzop differ diff --git a/DS/A.I.K/bin/macos/i386/mkbootimg b/DS/A.I.K/bin/macos/i386/mkbootimg new file mode 100755 index 000000000000..2e7e8db05f86 Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/mkbootimg differ diff --git a/DS/A.I.K/bin/macos/i386/mkimage b/DS/A.I.K/bin/macos/i386/mkimage new file mode 100755 index 000000000000..2276aac48fe3 Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/mkimage differ diff --git a/DS/A.I.K/bin/macos/i386/mkmtkhdr b/DS/A.I.K/bin/macos/i386/mkmtkhdr new file mode 100755 index 000000000000..907ba0fa4f90 Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/mkmtkhdr differ diff --git a/DS/A.I.K/bin/macos/i386/pxa-mkbootimg b/DS/A.I.K/bin/macos/i386/pxa-mkbootimg new file mode 100755 index 000000000000..1a21f32b6b50 Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/pxa-mkbootimg differ diff --git a/DS/A.I.K/bin/macos/i386/pxa-unpackbootimg b/DS/A.I.K/bin/macos/i386/pxa-unpackbootimg new file mode 100755 index 000000000000..a9c16704afa0 Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/pxa-unpackbootimg differ diff --git a/DS/A.I.K/bin/macos/i386/rkcrc b/DS/A.I.K/bin/macos/i386/rkcrc new file mode 100755 index 000000000000..c2b70ce3c7a2 Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/rkcrc differ diff --git a/DS/A.I.K/bin/macos/i386/tail b/DS/A.I.K/bin/macos/i386/tail new file mode 100755 index 000000000000..3af2fb950167 Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/tail differ diff --git a/DS/A.I.K/bin/macos/i386/unpackbootimg b/DS/A.I.K/bin/macos/i386/unpackbootimg new file mode 100755 index 000000000000..22151810cd0e Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/unpackbootimg differ diff --git a/DS/A.I.K/bin/macos/i386/unpackelf b/DS/A.I.K/bin/macos/i386/unpackelf new file mode 100755 index 000000000000..f30318643023 Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/unpackelf differ diff --git a/DS/A.I.K/bin/macos/i386/xz b/DS/A.I.K/bin/macos/i386/xz new file mode 100755 index 000000000000..e161a92eb64b Binary files /dev/null and b/DS/A.I.K/bin/macos/i386/xz differ diff --git a/DS/A.I.K/bin/macos/x86_64/blobpack b/DS/A.I.K/bin/macos/x86_64/blobpack new file mode 100755 index 000000000000..816fcf279a4c Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/blobpack differ diff --git a/DS/A.I.K/bin/macos/x86_64/blobunpack b/DS/A.I.K/bin/macos/x86_64/blobunpack new file mode 100755 index 000000000000..9241057ed343 Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/blobunpack differ diff --git a/DS/A.I.K/bin/macos/x86_64/cpio b/DS/A.I.K/bin/macos/x86_64/cpio new file mode 100755 index 000000000000..991c5a89fd63 Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/cpio differ diff --git a/DS/A.I.K/bin/macos/x86_64/dd b/DS/A.I.K/bin/macos/x86_64/dd new file mode 100755 index 000000000000..ac867aba61ec Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/dd differ diff --git a/DS/A.I.K/bin/macos/x86_64/dhtbsign b/DS/A.I.K/bin/macos/x86_64/dhtbsign new file mode 100755 index 000000000000..162fa887aa09 Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/dhtbsign differ diff --git a/DS/A.I.K/bin/macos/x86_64/dumpimage b/DS/A.I.K/bin/macos/x86_64/dumpimage new file mode 100755 index 000000000000..bfa7c8464288 Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/dumpimage differ diff --git a/DS/A.I.K/bin/macos/x86_64/elftool b/DS/A.I.K/bin/macos/x86_64/elftool new file mode 100755 index 000000000000..0185019505e4 Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/elftool differ diff --git a/DS/A.I.K/bin/macos/x86_64/file b/DS/A.I.K/bin/macos/x86_64/file new file mode 100755 index 000000000000..96059b2e3be8 Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/file differ diff --git a/DS/A.I.K/bin/macos/x86_64/futility b/DS/A.I.K/bin/macos/x86_64/futility new file mode 100755 index 000000000000..33ac98632cef Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/futility differ diff --git a/DS/A.I.K/bin/macos/x86_64/kernel_dump b/DS/A.I.K/bin/macos/x86_64/kernel_dump new file mode 100755 index 000000000000..1c5a28eafc3b Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/kernel_dump differ diff --git a/DS/A.I.K/bin/macos/x86_64/libiconv.2.dylib b/DS/A.I.K/bin/macos/x86_64/libiconv.2.dylib new file mode 100755 index 000000000000..2ed6694ca411 Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/libiconv.2.dylib differ diff --git a/DS/A.I.K/bin/macos/x86_64/libintl.8.dylib b/DS/A.I.K/bin/macos/x86_64/libintl.8.dylib new file mode 100755 index 000000000000..818506231f30 Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/libintl.8.dylib differ diff --git a/DS/A.I.K/bin/macos/x86_64/liblzma.5.dylib b/DS/A.I.K/bin/macos/x86_64/liblzma.5.dylib new file mode 100755 index 000000000000..e33639c95de6 Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/liblzma.5.dylib differ diff --git a/DS/A.I.K/bin/macos/x86_64/liblzo2.2.dylib b/DS/A.I.K/bin/macos/x86_64/liblzo2.2.dylib new file mode 100755 index 000000000000..a05b7ebafd2f Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/liblzo2.2.dylib differ diff --git a/DS/A.I.K/bin/macos/x86_64/libmagic.1.dylib b/DS/A.I.K/bin/macos/x86_64/libmagic.1.dylib new file mode 100755 index 000000000000..ced6916e0492 Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/libmagic.1.dylib differ diff --git a/DS/A.I.K/bin/macos/x86_64/loki_tool b/DS/A.I.K/bin/macos/x86_64/loki_tool new file mode 100755 index 000000000000..1b9f0625f450 Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/loki_tool differ diff --git a/DS/A.I.K/bin/macos/x86_64/lz4 b/DS/A.I.K/bin/macos/x86_64/lz4 new file mode 100755 index 000000000000..c11205cab389 Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/lz4 differ diff --git a/DS/A.I.K/bin/macos/x86_64/lzop b/DS/A.I.K/bin/macos/x86_64/lzop new file mode 100755 index 000000000000..8be71f45f809 Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/lzop differ diff --git a/DS/A.I.K/bin/macos/x86_64/mkbootimg b/DS/A.I.K/bin/macos/x86_64/mkbootimg new file mode 100755 index 000000000000..99498d1d6d26 Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/mkbootimg differ diff --git a/DS/A.I.K/bin/macos/x86_64/mkimage b/DS/A.I.K/bin/macos/x86_64/mkimage new file mode 100755 index 000000000000..ca09d7b7cc92 Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/mkimage differ diff --git a/DS/A.I.K/bin/macos/x86_64/mkmtkhdr b/DS/A.I.K/bin/macos/x86_64/mkmtkhdr new file mode 100755 index 000000000000..99949d5664c0 Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/mkmtkhdr differ diff --git a/DS/A.I.K/bin/macos/x86_64/pxa-mkbootimg b/DS/A.I.K/bin/macos/x86_64/pxa-mkbootimg new file mode 100755 index 000000000000..5ad1ad7a6f55 Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/pxa-mkbootimg differ diff --git a/DS/A.I.K/bin/macos/x86_64/pxa-unpackbootimg b/DS/A.I.K/bin/macos/x86_64/pxa-unpackbootimg new file mode 100755 index 000000000000..bcc1130b9b34 Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/pxa-unpackbootimg differ diff --git a/DS/A.I.K/bin/macos/x86_64/rkcrc b/DS/A.I.K/bin/macos/x86_64/rkcrc new file mode 100755 index 000000000000..9b0b94ab92f8 Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/rkcrc differ diff --git a/DS/A.I.K/bin/macos/x86_64/tail b/DS/A.I.K/bin/macos/x86_64/tail new file mode 100755 index 000000000000..c1fb97f4fd48 Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/tail differ diff --git a/DS/A.I.K/bin/macos/x86_64/unpackbootimg b/DS/A.I.K/bin/macos/x86_64/unpackbootimg new file mode 100755 index 000000000000..b392a8b527d5 Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/unpackbootimg differ diff --git a/DS/A.I.K/bin/macos/x86_64/unpackelf b/DS/A.I.K/bin/macos/x86_64/unpackelf new file mode 100755 index 000000000000..8c64d421cb92 Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/unpackelf differ diff --git a/DS/A.I.K/bin/macos/x86_64/xz b/DS/A.I.K/bin/macos/x86_64/xz new file mode 100755 index 000000000000..2f4fab79994a Binary files /dev/null and b/DS/A.I.K/bin/macos/x86_64/xz differ diff --git a/DS/A.I.K/bin/magic b/DS/A.I.K/bin/magic new file mode 100644 index 000000000000..2682654cc275 --- /dev/null +++ b/DS/A.I.K/bin/magic @@ -0,0 +1,1291 @@ +#------------------------------------------------------------------------------ +# Slimmed down magic file for archives only +#------------------------------------------------------------------------------ +# $File: archive,v 1.108 2017/08/30 13:45:10 christos Exp $ +# archive: file(1) magic for archive formats (see also "msdos" for self- +# extracting compressed archives) +# +# cpio, ar, arc, arj, hpack, lha/lharc, rar, squish, uc2, zip, zoo, etc. +# pre-POSIX "tar" archives are handled in the C code. + +# POSIX tar archives +257 string ustar\0 POSIX tar archive +!:mime application/x-tar # encoding: posix +257 string ustar\040\040\0 GNU tar archive +!:mime application/x-tar # encoding: gnu + +# Incremental snapshot gnu-tar format from: +# http://www.gnu.org/software/tar/manual/html_node/Snapshot-Files.html +0 string GNU\ tar- GNU tar incremental snapshot data +>&0 regex [0-9]\.[0-9]+-[0-9]+ version %s + +# cpio archives +# +# Yes, the top two "cpio archive" formats *are* supposed to just be "short". +# The idea is to indicate archives produced on machines with the same +# byte order as the machine running "file" with "cpio archive", and +# to indicate archives produced on machines with the opposite byte order +# from the machine running "file" with "byte-swapped cpio archive". +# +# The SVR4 "cpio(4)" hints that there are additional formats, but they +# are defined as "short"s; I think all the new formats are +# character-header formats and thus are strings, not numbers. +0 short 070707 cpio archive +!:mime application/x-cpio +0 short 0143561 byte-swapped cpio archive +!:mime application/x-cpio # encoding: swapped +0 string 070707 ASCII cpio archive (pre-SVR4 or odc) +0 string 070701 ASCII cpio archive (SVR4 with no CRC) +0 string 070702 ASCII cpio archive (SVR4 with CRC) + +# +# Various archive formats used by various versions of the "ar" +# command. +# + +# +# Original UNIX archive formats. +# They were written with binary values in host byte order, and +# the magic number was a host "int", which might have been 16 bits +# or 32 bits. We don't say "PDP-11" or "VAX", as there might have +# been ports to little-endian 16-bit-int or 32-bit-int platforms +# (x86?) using some of those formats; if none existed, feel free +# to use "PDP-11" for little-endian 16-bit and "VAX" for little-endian +# 32-bit. There might have been big-endian ports of that sort as +# well. +# +0 leshort 0177555 very old 16-bit-int little-endian archive +0 beshort 0177555 very old 16-bit-int big-endian archive +0 lelong 0177555 very old 32-bit-int little-endian archive +0 belong 0177555 very old 32-bit-int big-endian archive + +0 leshort 0177545 old 16-bit-int little-endian archive +>2 string __.SYMDEF random library +0 beshort 0177545 old 16-bit-int big-endian archive +>2 string __.SYMDEF random library +0 lelong 0177545 old 32-bit-int little-endian archive +>4 string __.SYMDEF random library +0 belong 0177545 old 32-bit-int big-endian archive +>4 string __.SYMDEF random library + +# +# From "pdp" (but why a 4-byte quantity?) +# +0 lelong 0x39bed PDP-11 old archive +0 lelong 0x39bee PDP-11 4.0 archive + +# +# XXX - what flavor of APL used this, and was it a variant of +# some ar archive format? It's similar to, but not the same +# as, the APL workspace magic numbers in pdp. +# +0 long 0100554 apl workspace + +# +# System V Release 1 portable(?) archive format. +# +0 string = System V Release 1 ar archive +!:mime application/x-archive + +# +# Debian package; it's in the portable archive format, and needs to go +# before the entry for regular portable archives, as it's recognized as +# a portable archive whose first member has a name beginning with +# "debian". +# +0 string =!\ndebian +>8 string debian-split part of multipart Debian package +!:mime application/vnd.debian.binary-package +>8 string debian-binary Debian binary package +!:mime application/vnd.debian.binary-package +>8 string !debian +>68 string >\0 (format %s) +# These next two lines do not work, because a bzip2 Debian archive +# still uses gzip for the control.tar (first in the archive). Only +# data.tar varies, and the location of its filename varies too. +# file/libmagic does not current have support for ascii-string based +# (offsets) as of 2005-09-15. +#>81 string bz2 \b, uses bzip2 compression +#>84 string gz \b, uses gzip compression +#>136 ledate x created: %s + +# +# MIPS archive; they're in the portable archive format, and need to go +# before the entry for regular portable archives, as it's recognized as +# a portable archive whose first member has a name beginning with +# "__________E". +# +0 string =!\n__________E MIPS archive +!:mime application/x-archive +>20 string U with MIPS Ucode members +>21 string L with MIPSEL members +>21 string B with MIPSEB members +>19 string L and an EL hash table +>19 string B and an EB hash table +>22 string X -- out of date + +0 search/1 -h- Software Tools format archive text + +# +# BSD/SVR2-and-later portable archive formats. +# +0 string =! current ar archive +!:mime application/x-archive +>8 string __.SYMDEF random library +>68 string __.SYMDEF\ SORTED random library + +# +# "Thin" archive, as can be produced by GNU ar. +# +0 string =!\n thin archive with +>68 belong 0 no symbol entries +>68 belong 1 %d symbol entry +>68 belong >1 %d symbol entries + +# ARC archiver, from Daniel Quinlan (quinlan@yggdrasil.com) +# +# The first byte is the magic (0x1a), byte 2 is the compression type for +# the first file (0x01 through 0x09), and bytes 3 to 15 are the MS-DOS +# filename of the first file (null terminated). Since some types collide +# we only test some types on basis of frequency: 0x08 (83%), 0x09 (5%), +# 0x02 (5%), 0x03 (3%), 0x04 (2%), 0x06 (2%). 0x01 collides with terminfo. +0 lelong&0x8080ffff 0x0000081a ARC archive data, dynamic LZW +!:mime application/x-arc +0 lelong&0x8080ffff 0x0000091a ARC archive data, squashed +!:mime application/x-arc +0 lelong&0x8080ffff 0x0000021a ARC archive data, uncompressed +!:mime application/x-arc +0 lelong&0x8080ffff 0x0000031a ARC archive data, packed +!:mime application/x-arc +0 lelong&0x8080ffff 0x0000041a ARC archive data, squeezed +!:mime application/x-arc +0 lelong&0x8080ffff 0x0000061a ARC archive data, crunched +!:mime application/x-arc +# [JW] stuff taken from idarc, obviously ARC successors: +0 lelong&0x8080ffff 0x00000a1a PAK archive data +!:mime application/x-arc +0 lelong&0x8080ffff 0x0000141a ARC+ archive data +!:mime application/x-arc +0 lelong&0x8080ffff 0x0000481a HYP archive data +!:mime application/x-arc + +# Acorn archive formats (Disaster prone simpleton, m91dps@ecs.ox.ac.uk) +# I can't create either SPARK or ArcFS archives so I have not tested this stuff +# [GRR: the original entries collide with ARC, above; replaced with combined +# version (not tested)] +#0 byte 0x1a RISC OS archive (spark format) +0 string \032archive RISC OS archive (ArcFS format) +0 string Archive\000 RISC OS archive (ArcFS format) + +# All these were taken from idarc, many could not be verified. Unfortunately, +# there were many low-quality sigs, i.e. easy to trigger false positives. +# Please notify me of any real-world fishy/ambiguous signatures and I'll try +# to get my hands on the actual archiver and see if I find something better. [JW] +# probably many can be enhanced by finding some 0-byte or control char near the start + +# idarc calls this Crush/Uncompressed... *shrug* +0 string CRUSH Crush archive data +# Squeeze It (.sqz) +0 string HLSQZ Squeeze It archive data +# SQWEZ +0 string SQWEZ SQWEZ archive data +# HPack (.hpk) +0 string HPAK HPack archive data +# HAP +0 string \x91\x33HF HAP archive data +# MD/MDCD +0 string MDmd MDCD archive data +# LIM +0 string LIM\x1a LIM archive data +# SAR +3 string LH5 SAR archive data +# BSArc/BS2 +0 string \212\3SB\020\0 BSArc/BS2 archive data +# Bethesda Softworks Archive (Oblivion) +0 string BSA\0 BSArc archive data +>4 lelong x version %d +# MAR +2 string =-ah MAR archive data +# ACB +#0 belong&0x00f800ff 0x00800000 ACB archive data +# CPZ +# TODO, this is what idarc says: 0 string \0\0\0 CPZ archive data +# JRC +0 string JRchive JRC archive data +# Quantum +0 string DS\0 Quantum archive data +# ReSOF +0 string PK\3\6 ReSOF archive data +# QuArk +0 string 7\4 QuArk archive data +# YAC +14 string YC YAC archive data +# X1 +0 string X1 X1 archive data +0 string XhDr X1 archive data +# CDC Codec (.dqt) +0 belong&0xffffe000 0x76ff2000 CDC Codec archive data +# AMGC +0 string \xad6" AMGC archive data +# NuLIB +0 string N\xc3\xb5F\xc3\xa9lx\xc3\xa5 NuLIB archive data +# PakLeo +0 string LEOLZW PAKLeo archive data +# ChArc +0 string SChF ChArc archive data +# PSA +0 string PSA PSA archive data +# CrossePAC +0 string DSIGDCC CrossePAC archive data +# Freeze +0 string \x1f\x9f\x4a\x10\x0a Freeze archive data +# KBoom +0 string \xc2\xa8MP\xc2\xa8 KBoom archive data +# NSQ, must go after CDC Codec +0 string \x76\xff NSQ archive data +# DPA +0 string Dirk\ Paehl DPA archive data +# BA +# TODO: idarc says "bytes 0-2 == bytes 3-5" +# TTComp +# URL: http://fileformats.archiveteam.org/wiki/TTComp_archive +# Update: Joerg Jenderek +# GRR: line below is too general as it matches also Panorama database "TCDB 2003-10 demo.pan", others +0 string \0\6 +# look for first keyword of Panorama database *.pan +>12 search/261 DESIGN +# skip keyword with low entropy +>12 default x TTComp archive, binary, 4K dictionary +# (version 5.25) labeled the above entry as "TTComp archive data" +# ESP, could this conflict with Easy Software Products' (e.g.ESP ghostscript) documentation? +0 string ESP ESP archive data +# ZPack +0 string \1ZPK\1 ZPack archive data +# Sky +0 string \xbc\x40 Sky archive data +# UFA +0 string UFA UFA archive data +# Dry +0 string =-H2O DRY archive data +# FoxSQZ +0 string FOXSQZ FoxSQZ archive data +# AR7 +0 string ,AR7 AR7 archive data +# PPMZ +0 string PPMZ PPMZ archive data +# MS Compress +4 string \x88\xf0\x27 MS Compress archive data +# updated by Joerg Jenderek +>9 string \0 +>>0 string KWAJ +>>>7 string \321\003 MS Compress archive data +>>>>14 ulong >0 \b, original size: %d bytes +>>>>18 ubyte >0x65 +>>>>>18 string x \b, was %.8s +>>>>>(10.b-4) string x \b.%.3s +# MP3 (archiver, not lossy audio compression) +0 string MP3\x1a MP3-Archiver archive data +# ZET +0 string OZ\xc3\x9d ZET archive data +# TSComp +0 string \x65\x5d\x13\x8c\x08\x01\x03\x00 TSComp archive data +# ARQ +0 string gW\4\1 ARQ archive data +# Squash +3 string OctSqu Squash archive data +# Terse +0 string \5\1\1\0 Terse archive data +# PUCrunch +0 string \x01\x08\x0b\x08\xef\x00\x9e\x32\x30\x36\x31 PUCrunch archive data +# UHarc +0 string UHA UHarc archive data +# ABComp +0 string \2AB ABComp archive data +0 string \3AB2 ABComp archive data +# CMP +0 string CO\0 CMP archive data +# Splint +0 string \x93\xb9\x06 Splint archive data +# InstallShield +0 string \x13\x5d\x65\x8c InstallShield Z archive Data +# Gather +1 string GTH Gather archive data +# BOA +0 string BOA BOA archive data +# RAX +0 string ULEB\xa RAX archive data +# Xtreme +0 string ULEB\0 Xtreme archive data +# Pack Magic +0 string @\xc3\xa2\1\0 Pack Magic archive data +# BTS +0 belong&0xfeffffff 0x1a034465 BTS archive data +# ELI 5750 +0 string Ora\ ELI 5750 archive data +# QFC +0 string \x1aFC\x1a QFC archive data +0 string \x1aQF\x1a QFC archive data +# PRO-PACK +0 string RNC PRO-PACK archive data +# 777 +0 string 777 777 archive data +# LZS221 +0 string sTaC LZS221 archive data +# HPA +0 string HPA HPA archive data +# Arhangel +0 string LG Arhangel archive data +# EXP1, uses bzip2 +0 string 0123456789012345BZh EXP1 archive data +# IMP +0 string IMP\xa IMP archive data +# NRV +0 string \x00\x9E\x6E\x72\x76\xFF NRV archive data +# Squish +0 string \x73\xb2\x90\xf4 Squish archive data +# Par +0 string PHILIPP Par archive data +0 string PAR Par archive data +# HIT +0 string UB HIT archive data +# SBX +0 belong&0xfffff000 0x53423000 SBX archive data +# NaShrink +0 string NSK NaShrink archive data +# SAPCAR +0 string #\ CAR\ archive\ header SAPCAR archive data +0 string CAR\ 2.00RG SAPCAR archive data +# Disintegrator +0 string DST Disintegrator archive data +# ASD +0 string ASD ASD archive data +# InstallShield CAB +0 string ISc( InstallShield CAB +# TOP4 +0 string T4\x1a TOP4 archive data +# BatComp left out: sig looks like COM executable +# so TODO: get real 4dos batcomp file and find sig +# BlakHole +0 string BH\5\7 BlakHole archive data +# BIX +0 string BIX0 BIX archive data +# ChiefLZA +0 string ChfLZ ChiefLZA archive data +# Blink +0 string Blink Blink archive data +# Logitech Compress +0 string \xda\xfa Logitech Compress archive data +# ARS-Sfx (FIXME: really a SFX? then goto COM/EXE) +1 string (C)\ STEPANYUK ARS-Sfx archive data +# AKT/AKT32 +0 string AKT32 AKT32 archive data +0 string AKT AKT archive data +# NPack +0 string MSTSM NPack archive data +# PFT +0 string \0\x50\0\x14 PFT archive data +# SemOne +0 string SEM SemOne archive data +# PPMD +0 string \x8f\xaf\xac\x84 PPMD archive data +# FIZ +0 string FIZ FIZ archive data +# MSXiE +0 belong&0xfffff0f0 0x4d530000 MSXiE archive data +# DeepFreezer +0 belong&0xfffffff0 0x797a3030 DeepFreezer archive data +# DC +0 string =2 string \x2\x4 Xpack DiskImage archive data +#!:ext xdi +# XPack Data +# *.xpa updated by Joerg Jenderek Sep 2015 +# ftp://ftp.elf.stuba.sk/pub/pc/pack/ +0 string xpa XPA +#!:ext xpa +# XPA32 +# ftp://ftp.elf.stuba.sk/pub/pc/pack/xpa32.zip +# created by XPA32.EXE version 1.0.2 for Windows +>0 string xpa\0\1 \b32 archive data +# created by XPACK.COM version 1.67m or 1.67r with short 0x1800 +>3 ubeshort !0x0001 \bck archive data +# XPack Single Data +# changed by Joerg Jenderek Sep 2015 back to like in version 5.12 +# letter 'I'+ acute accent is equivalent to \xcd +0 string \xcd\ jm Xpack single archive data +#!:mime application/x-xpa-compressed +#!:ext xpa + +# TODO: missing due to unknown magic/magic at end of file: +#DWC +#ARG +#ZAR +#PC/3270 +#InstallIt +#RKive +#RK +#XPack Diskimage + +# These were inspired by idarc, but actually verified +# Dzip archiver (.dz) +0 string DZ Dzip archive data +>2 byte x \b, version %i +>3 byte x \b.%i +# ZZip archiver (.zz) +0 string ZZ\ \0\0 ZZip archive data +0 string ZZ0 ZZip archive data +# PAQ archiver (.paq) +0 string \xaa\x40\x5f\x77\x1f\xe5\x82\x0d PAQ archive data +0 string PAQ PAQ archive data +>3 byte&0xf0 0x30 +>>3 byte x (v%c) +# JAR archiver (.j), this is the successor to ARJ, not Java's JAR (which is essentially ZIP) +0xe string \x1aJar\x1b JAR (ARJ Software, Inc.) archive data +0 string JARCS JAR (ARJ Software, Inc.) archive data + +# ARJ archiver (jason@jarthur.Claremont.EDU) +0 leshort 0xea60 ARJ archive data +!:mime application/x-arj +>5 byte x \b, v%d, +>8 byte &0x04 multi-volume, +>8 byte &0x10 slash-switched, +>8 byte &0x20 backup, +>34 string x original name: %s, +>7 byte 0 os: MS-DOS +>7 byte 1 os: PRIMOS +>7 byte 2 os: Unix +>7 byte 3 os: Amiga +>7 byte 4 os: Macintosh +>7 byte 5 os: OS/2 +>7 byte 6 os: Apple ][ GS +>7 byte 7 os: Atari ST +>7 byte 8 os: NeXT +>7 byte 9 os: VAX/VMS +>3 byte >0 %d] +# [JW] idarc says this is also possible +2 leshort 0xea60 ARJ archive data + +# HA archiver (Greg Roelofs, newt@uchicago.edu) +# This is a really bad format. A file containing HAWAII will match this... +#0 string HA HA archive data, +#>2 leshort =1 1 file, +#>2 leshort >1 %hu files, +#>4 byte&0x0f =0 first is type CPY +#>4 byte&0x0f =1 first is type ASC +#>4 byte&0x0f =2 first is type HSC +#>4 byte&0x0f =0x0e first is type DIR +#>4 byte&0x0f =0x0f first is type SPECIAL +# suggestion: at least identify small archives (<1024 files) +0 belong&0xffff00fc 0x48410000 HA archive data +>2 leshort =1 1 file, +>2 leshort >1 %u files, +>4 byte&0x0f =0 first is type CPY +>4 byte&0x0f =1 first is type ASC +>4 byte&0x0f =2 first is type HSC +>4 byte&0x0f =0x0e first is type DIR +>4 byte&0x0f =0x0f first is type SPECIAL + +# HPACK archiver (Peter Gutmann, pgut1@cs.aukuni.ac.nz) +0 string HPAK HPACK archive data + +# JAM Archive volume format, by Dmitry.Kohmanyuk@UA.net +0 string \351,\001JAM\ JAM archive, +>7 string >\0 version %.4s +>0x26 byte =0x27 - +>>0x2b string >\0 label %.11s, +>>0x27 lelong x serial %08x, +>>0x36 string >\0 fstype %.8s + +# Very old RAR archive +# http://jasonblanks.com/wp-includes/images/papers/KnowyourarchiveRAR.pdf +0 string RE\x7e\x5e RAR archive data (26 string \x8\0\0\0mimetypeapplication/ + +# KOffice / OpenOffice & StarOffice / OpenDocument formats +# From: Abel Cheung + +# KOffice (1.2 or above) formats +# (mimetype contains "application/vnd.kde.") +>>50 string vnd.kde. KOffice (>=1.2) +>>>58 string karbon Karbon document +>>>58 string kchart KChart document +>>>58 string kformula KFormula document +>>>58 string kivio Kivio document +>>>58 string kontour Kontour document +>>>58 string kpresenter KPresenter document +>>>58 string kspread KSpread document +>>>58 string kword KWord document + +# OpenOffice formats (for OpenOffice 1.x / StarOffice 6/7) +# (mimetype contains "application/vnd.sun.xml.") +>>50 string vnd.sun.xml. OpenOffice.org 1.x +>>>62 string writer Writer +>>>>68 byte !0x2e document +>>>>68 string .template template +>>>>68 string .global global document +>>>62 string calc Calc +>>>>66 byte !0x2e spreadsheet +>>>>66 string .template template +>>>62 string draw Draw +>>>>66 byte !0x2e document +>>>>66 string .template template +>>>62 string impress Impress +>>>>69 byte !0x2e presentation +>>>>69 string .template template +>>>62 string math Math document +>>>62 string base Database file + +# OpenDocument formats (for OpenOffice 2.x / StarOffice >= 8) +# http://lists.oasis-open.org/archives/office/200505/msg00006.html +# (mimetype contains "application/vnd.oasis.opendocument.") +>>50 string vnd.oasis.opendocument. OpenDocument +>>>73 string text +>>>>77 byte !0x2d Text +!:mime application/vnd.oasis.opendocument.text +>>>>77 string -template Text Template +!:mime application/vnd.oasis.opendocument.text-template +>>>>77 string -web HTML Document Template +!:mime application/vnd.oasis.opendocument.text-web +>>>>77 string -master Master Document +!:mime application/vnd.oasis.opendocument.text-master +>>>73 string graphics +>>>>81 byte !0x2d Drawing +!:mime application/vnd.oasis.opendocument.graphics +>>>>81 string -template Template +!:mime application/vnd.oasis.opendocument.graphics-template +>>>73 string presentation +>>>>85 byte !0x2d Presentation +!:mime application/vnd.oasis.opendocument.presentation +>>>>85 string -template Template +!:mime application/vnd.oasis.opendocument.presentation-template +>>>73 string spreadsheet +>>>>84 byte !0x2d Spreadsheet +!:mime application/vnd.oasis.opendocument.spreadsheet +>>>>84 string -template Template +!:mime application/vnd.oasis.opendocument.spreadsheet-template +>>>73 string chart +>>>>78 byte !0x2d Chart +!:mime application/vnd.oasis.opendocument.chart +>>>>78 string -template Template +!:mime application/vnd.oasis.opendocument.chart-template +>>>73 string formula +>>>>80 byte !0x2d Formula +!:mime application/vnd.oasis.opendocument.formula +>>>>80 string -template Template +!:mime application/vnd.oasis.opendocument.formula-template +>>>73 string database Database +!:mime application/vnd.oasis.opendocument.database +>>>73 string image +>>>>78 byte !0x2d Image +!:mime application/vnd.oasis.opendocument.image +>>>>78 string -template Template +!:mime application/vnd.oasis.opendocument.image-template + +# EPUB (OEBPS) books using OCF (OEBPS Container Format) +# http://www.idpf.org/ocf/ocf1.0/download/ocf10.htm, section 4. +# From: Ralf Brown +>>50 string epub+zip EPUB document +!:mime application/epub+zip + +# Catch other ZIP-with-mimetype formats +# In a ZIP file, the bytes immediately after a member's contents are +# always "PK". The 2 regex rules here print the "mimetype" member's +# contents up to the first 'P'. Luckily, most MIME types don't contain +# any capital 'P's. This is a kludge. +# (mimetype contains "application/") +>>50 string !epub+zip +>>>50 string !vnd.oasis.opendocument. +>>>>50 string !vnd.sun.xml. +>>>>>50 string !vnd.kde. +>>>>>>38 regex [!-OQ-~]+ Zip data (MIME type "%s"?) +!:mime application/zip +# (mimetype contents other than "application/*") +>26 string \x8\0\0\0mimetype +>>38 string !application/ +>>>38 regex [!-OQ-~]+ Zip data (MIME type "%s"?) +!:mime application/zip + +# Java Jar files +>(26.s+30) leshort 0xcafe Java archive data (JAR) +!:mime application/java-archive + +# iOS App +>(26.s+30) leshort !0xcafe +>>26 string !\x8\0\0\0mimetype +>>>30 string Payload/ +>>>>38 search/64 .app/ iOS App +!:mime application/x-ios-app + + +# Generic zip archives (Greg Roelofs, c/o zip-bugs@wkuvx1.wku.edu) +# Next line excludes specialized formats: +>(26.s+30) leshort !0xcafe +>>26 string !\x8\0\0\0mimetype Zip archive data +!:mime application/zip +>>>4 byte 0x09 \b, at least v0.9 to extract +>>>4 byte 0x0a \b, at least v1.0 to extract +>>>4 byte 0x0b \b, at least v1.1 to extract +>>>4 byte 0x14 \b, at least v2.0 to extract +>>>4 byte 0x15 \b, at least v2.1 to extract +>>>4 byte 0x19 \b, at least v2.5 to extract +>>>4 byte 0x1b \b, at least v2.7 to extract +>>>4 byte 0x2d \b, at least v4.5 to extract +>>>4 byte 0x2e \b, at least v4.6 to extract +>>>4 byte 0x32 \b, at least v5.0 to extract +>>>4 byte 0x33 \b, at least v5.1 to extract +>>>4 byte 0x34 \b, at least v5.2 to extract +>>>4 byte 0x3d \b, at least v6.1 to extract +>>>4 byte 0x3e \b, at least v6.2 to extract +>>>4 byte 0x3f \b, at least v6.3 to extract +>>>0x161 string WINZIP \b, WinZIP self-extracting + +# StarView Metafile +# From Pierre Ducroquet +0 string VCLMTF StarView MetaFile +>6 beshort x \b, version %d +>8 belong x \b, size %d + +# Zoo archiver +20 lelong 0xfdc4a7dc Zoo archive data +!:mime application/x-zoo +>4 byte >48 \b, v%c. +>>6 byte >47 \b%c +>>>7 byte >47 \b%c +>32 byte >0 \b, modify: v%d +>>33 byte x \b.%d+ +>42 lelong 0xfdc4a7dc \b, +>>70 byte >0 extract: v%d +>>>71 byte x \b.%d+ + +# Shell archives +10 string #\ This\ is\ a\ shell\ archive shell archive text +!:mime application/octet-stream + +# +# LBR. NB: May conflict with the questionable +# "binary Computer Graphics Metafile" format. +# +0 string \0\ \ \ \ \ \ \ \ \ \ \ \0\0 LBR archive data +# +# From Rafael Laboissiere +# The Project Revision Control System (see +# http://prcs.sourceforge.net) generates a packaged project +# file which is recognized by the following entry: +0 leshort 0xeb81 PRCS packaged project + +# Microsoft cabinets +# by David Necas (Yeti) +#0 string MSCF\0\0\0\0 Microsoft cabinet file data, +#>25 byte x v%d +#>24 byte x \b.%d +# MPi: All CABs have version 1.3, so this is pointless. +# Better magic in debian-additions. + +# GTKtalog catalogs +# by David Necas (Yeti) +4 string gtktalog\ GTKtalog catalog data, +>13 string 3 version 3 +>>14 beshort 0x677a (gzipped) +>>14 beshort !0x677a (not gzipped) +>13 string >3 version %s + +############################################################################ +# Parity archive reconstruction file, the 'par' file format now used on Usenet. +0 string PAR\0 PARity archive data +>48 leshort =0 - Index file +>48 leshort >0 - file number %d + +# Felix von Leitner +0 string d8:announce BitTorrent file +!:mime application/x-bittorrent +# Durval Menezes, +0 string d13:announce-list BitTorrent file +!:mime application/x-bittorrent + +# Atari MSA archive - Teemu Hukkanen +0 beshort 0x0e0f Atari MSA archive data +>2 beshort x \b, %d sectors per track +>4 beshort 0 \b, 1 sided +>4 beshort 1 \b, 2 sided +>6 beshort x \b, starting track: %d +>8 beshort x \b, ending track: %d + +# Alternate ZIP string (amc@arwen.cs.berkeley.edu) +0 string PK00PK\003\004 Zip archive data + +# ACE archive (from http://www.wotsit.org/download.asp?f=ace) +# by Stefan `Sec` Zehl +7 string **ACE** ACE archive data +>15 byte >0 version %d +>16 byte =0x00 \b, from MS-DOS +>16 byte =0x01 \b, from OS/2 +>16 byte =0x02 \b, from Win/32 +>16 byte =0x03 \b, from Unix +>16 byte =0x04 \b, from MacOS +>16 byte =0x05 \b, from WinNT +>16 byte =0x06 \b, from Primos +>16 byte =0x07 \b, from AppleGS +>16 byte =0x08 \b, from Atari +>16 byte =0x09 \b, from Vax/VMS +>16 byte =0x0A \b, from Amiga +>16 byte =0x0B \b, from Next +>14 byte x \b, version %d to extract +>5 leshort &0x0080 \b, multiple volumes, +>>17 byte x \b (part %d), +>5 leshort &0x0002 \b, contains comment +>5 leshort &0x0200 \b, sfx +>5 leshort &0x0400 \b, small dictionary +>5 leshort &0x0800 \b, multi-volume +>5 leshort &0x1000 \b, contains AV-String +>>30 string \x16*UNREGISTERED\x20VERSION* (unregistered) +>5 leshort &0x2000 \b, with recovery record +>5 leshort &0x4000 \b, locked +>5 leshort &0x8000 \b, solid +# Date in MS-DOS format (whatever that is) +#>18 lelong x Created on + +# sfArk : compression program for Soundfonts (sf2) by Dirk Jagdmann +# +0x1A string sfArk sfArk compressed Soundfont +>0x15 string 2 +>>0x1 string >\0 Version %s +>>0x2A string >\0 : %s + +# DR-DOS 7.03 Packed File *.??_ +0 string Packed\ File\ Personal NetWare Packed File +>12 string x \b, was "%.12s" + +# EET archive +# From: Tilman Sauerbeck +0 belong 0x1ee7ff00 EET archive +!:mime application/x-eet + +# rzip archives +0 string RZIP rzip compressed data +>4 byte x - version %d +>5 byte x \b.%d +>6 belong x (%d bytes) + +# From: "Robert Dale" +0 belong 123 dar archive, +>4 belong x label "%.8x +>>8 belong x %.8x +>>>12 beshort x %.4x" +>14 byte 0x54 end slice +>14 beshort 0x4e4e multi-part +>14 beshort 0x4e53 multi-part, with -S + +# Symbian installation files +# http://www.thouky.co.uk/software/psifs/sis.html +# http://developer.symbian.com/main/downloads/papers/SymbianOSv91/softwareinstallsis.pdf +8 lelong 0x10000419 Symbian installation file +!:mime application/vnd.symbian.install +>4 lelong 0x1000006D (EPOC release 3/4/5) +>4 lelong 0x10003A12 (EPOC release 6) +0 lelong 0x10201A7A Symbian installation file (Symbian OS 9.x) +!:mime x-epoc/x-sisx-app + +# From "Nelson A. de Oliveira" +0 string MPQ\032 MoPaQ (MPQ) archive + +# From: "Nelson A. de Oliveira" +# .kgb +0 string KGB_arch KGB Archiver file +>10 string x with compression level %.1s + +# xar (eXtensible ARchiver) archive +# xar archive format: http://code.google.com/p/xar/ +# From: "David Remahl" +0 string xar! xar archive +!:mime application/x-xar +#>4 beshort x header size %d +>6 beshort x version %d, +#>8 quad x compressed TOC: %d, +#>16 quad x uncompressed TOC: %d, +>24 belong 0 no checksum +>24 belong 1 SHA-1 checksum +>24 belong 2 MD5 checksum + +# Type: Parity Archive +# From: Daniel van Eeden +0 string PAR2 Parity Archive Volume Set + +# Bacula volume format. (Volumes always start with a block header.) +# URL: http://bacula.org/3.0.x-manuals/en/developers/developers/Block_Header.html +# From: Adam Buchbinder +12 string BB02 Bacula volume +>20 bedate x \b, started %s + +# ePub is XHTML + XML inside a ZIP archive. The first member of the +# archive must be an uncompressed file called 'mimetype' with contents +# 'application/epub+zip' + + +# From: "Michael Gorny" +# ZPAQ: http://mattmahoney.net/dc/zpaq.html +0 string zPQ ZPAQ stream +>3 byte x \b, level %d +# From: Barry Carter +# http://encode.ru/threads/456-zpaq-updates/page32 +0 string 7kSt ZPAQ file + +# BBeB ebook, unencrypted (LRF format) +# URL: http://www.sven.de/librie/Librie/LrfFormat +# From: Adam Buchbinder +0 string L\0R\0F\0\0\0 BBeB ebook data, unencrypted +>8 beshort x \b, version %d +>36 byte 1 \b, front-to-back +>36 byte 16 \b, back-to-front +>42 beshort x \b, (%dx, +>44 beshort x %d) + +# Symantec GHOST image by Joerg Jenderek at May 2014 +# http://us.norton.com/ghost/ +# http://www.garykessler.net/library/file_sigs.html +0 ubelong&0xFFFFf7f0 0xFEEF0100 Norton GHost image +# *.GHO +>2 ubyte&0x08 0x00 \b, first file +# *.GHS or *.[0-9] with cns program option +>2 ubyte&0x08 0x08 \b, split file +# part of split index interesting for *.ghs +>>4 ubyte x id=0x%x +# compression tag minus one equals numeric compression command line switch z[1-9] +>3 ubyte 0 \b, no compression +>3 ubyte 2 \b, fast compression (Z1) +>3 ubyte 3 \b, medium compression (Z2) +>3 ubyte >3 +>>3 ubyte <11 \b, compression (Z%d-1) +>2 ubyte&0x08 0x00 +# ~ 30 byte password field only for *.gho +>>12 ubequad !0 \b, password protected +>>44 ubyte !1 +# 1~Image All, sector-by-sector only for *.gho +>>>10 ubyte 1 \b, sector copy +# 1~Image Boot track only for *.gho +>>>43 ubyte 1 \b, boot track +# 1~Image Disc only for *.gho implies Image Boot track and sector copy +>>44 ubyte 1 \b, disc sector copy +# optional image description only *.gho +>>0xff string >\0 "%-.254s" +# look for DOS sector end sequence +>0xE08 search/7776 \x55\xAA +>>&-512 indirect x \b; contains + +# Google Chrome extensions +# https://developer.chrome.com/extensions/crx +# https://developer.chrome.com/extensions/hosting +0 string Cr24 Google Chrome extension +!:mime application/x-chrome-extension +>4 ulong x \b, version %u + +# SeqBox - Sequenced container +# ext: sbx, seqbox +# Marco Pontello marcopon@gmail.com +# reference: https://github.com/MarcoPon/SeqBox +0 string SBx SeqBox, +>3 byte x version %d + +#------------------------------------------------------------------------------ +# $File: compress,v 1.68 2017/05/25 20:07:23 christos Exp $ +# compress: file(1) magic for pure-compression formats (no archives) +# +# compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, etc. +# +# Formats for various forms of compressed data +# Formats for "compress" proper have been moved into "compress.c", +# because it tries to uncompress it to figure out what's inside. + +# standard unix compress +0 string \037\235 compress'd data +!:mime application/x-compress +!:apple LZIVZIVU +>2 byte&0x80 >0 block compressed +>2 byte&0x1f x %d bits + +# gzip (GNU zip, not to be confused with Info-ZIP or PKWARE zip archiver) +# Edited by Chris Chittleborough , March 2002 +# * Original filename is only at offset 10 if "extra field" absent +# * Produce shorter output - notably, only report compression methods +# other than 8 ("deflate", the only method defined in RFC 1952). +0 string \037\213 gzip compressed data +!:mime application/x-gzip +!:strength * 2 +>2 byte <8 \b, reserved method +>2 byte >8 \b, unknown method +>3 byte &0x01 \b, ASCII +>3 byte &0x02 \b, has CRC +>3 byte &0x04 \b, extra field +>3 byte&0xC =0x08 +>>10 string x \b, was "%s" +>3 byte &0x10 \b, has comment +>3 byte &0x20 \b, encrypted +>4 ledate >0 \b, last modified: %s +>8 byte 2 \b, max compression +>8 byte 4 \b, max speed +>9 byte =0x00 \b, from FAT filesystem (MS-DOS, OS/2, NT) +>9 byte =0x01 \b, from Amiga +>9 byte =0x02 \b, from VMS +>9 byte =0x03 \b, from Unix +>9 byte =0x04 \b, from VM/CMS +>9 byte =0x05 \b, from Atari +>9 byte =0x06 \b, from HPFS filesystem (OS/2, NT) +>9 byte =0x07 \b, from MacOS +>9 byte =0x08 \b, from Z-System +>9 byte =0x09 \b, from CP/M +>9 byte =0x0A \b, from TOPS/20 +>9 byte =0x0B \b, from NTFS filesystem (NT) +>9 byte =0x0C \b, from QDOS +>9 byte =0x0D \b, from Acorn RISCOS + +# packed data, Huffman (minimum redundancy) codes on a byte-by-byte basis +0 string \037\036 packed data +!:mime application/octet-stream +>2 belong >1 \b, %d characters originally +>2 belong =1 \b, %d character originally +# +# This magic number is byte-order-independent. +0 short 0x1f1f old packed data +!:mime application/octet-stream + +# XXX - why *two* entries for "compacted data", one of which is +# byte-order independent, and one of which is byte-order dependent? +# +0 short 0x1fff compacted data +!:mime application/octet-stream +# This string is valid for SunOS (BE) and a matching "short" is listed +# in the Ultrix (LE) magic file. +0 string \377\037 compacted data +!:mime application/octet-stream +0 short 0145405 huf output +!:mime application/octet-stream + +# bzip2 +0 string BZh bzip2 compressed data +!:mime application/x-bzip2 +>3 byte >47 \b, block size = %c00k + +# lzip +0 string LZIP lzip compressed data +!:mime application/x-lzip +>4 byte x \b, version: %d + +# squeeze and crunch +# Michael Haardt +0 beshort 0x76FF squeezed data, +>4 string x original name %s +0 beshort 0x76FE crunched data, +>2 string x original name %s +0 beshort 0x76FD LZH compressed data, +>2 string x original name %s + +# Freeze +0 string \037\237 frozen file 2.1 +0 string \037\236 frozen file 1.0 (or gzip 0.5) + +# SCO compress -H (LZH) +0 string \037\240 SCO compress -H (LZH) data + +# European GSM 06.10 is a provisional standard for full-rate speech +# transcoding, prI-ETS 300 036, which uses RPE/LTP (residual pulse +# excitation/long term prediction) coding at 13 kbit/s. +# +# There's only a magic nibble (4 bits); that nibble repeats every 33 +# bytes. This isn't suited for use, but maybe we can use it someday. +# +# This will cause very short GSM files to be declared as data and +# mismatches to be declared as data too! +#0 byte&0xF0 0xd0 data +#>33 byte&0xF0 0xd0 +#>66 byte&0xF0 0xd0 +#>99 byte&0xF0 0xd0 +#>132 byte&0xF0 0xd0 GSM 06.10 compressed audio + +# bzip a block-sorting file compressor +# by Julian Seward and others +# +#0 string BZ bzip compressed data +#>2 byte x \b, version: %c +#>3 string =1 \b, compression block size 100k +#>3 string =2 \b, compression block size 200k +#>3 string =3 \b, compression block size 300k +#>3 string =4 \b, compression block size 400k +#>3 string =5 \b, compression block size 500k +#>3 string =6 \b, compression block size 600k +#>3 string =7 \b, compression block size 700k +#>3 string =8 \b, compression block size 800k +#>3 string =9 \b, compression block size 900k + +# lzop from +0 string \x89\x4c\x5a\x4f\x00\x0d\x0a\x1a\x0a lzop compressed data +>9 beshort <0x0940 +>>9 byte&0xf0 =0x00 - version 0. +>>9 beshort&0x0fff x \b%03x, +>>13 byte 1 LZO1X-1, +>>13 byte 2 LZO1X-1(15), +>>13 byte 3 LZO1X-999, +## >>22 bedate >0 last modified: %s, +>>14 byte =0x00 os: MS-DOS +>>14 byte =0x01 os: Amiga +>>14 byte =0x02 os: VMS +>>14 byte =0x03 os: Unix +>>14 byte =0x05 os: Atari +>>14 byte =0x06 os: OS/2 +>>14 byte =0x07 os: MacOS +>>14 byte =0x0A os: Tops/20 +>>14 byte =0x0B os: WinNT +>>14 byte =0x0E os: Win32 +>9 beshort >0x0939 +>>9 byte&0xf0 =0x00 - version 0. +>>9 byte&0xf0 =0x10 - version 1. +>>9 byte&0xf0 =0x20 - version 2. +>>9 beshort&0x0fff x \b%03x, +>>15 byte 1 LZO1X-1, +>>15 byte 2 LZO1X-1(15), +>>15 byte 3 LZO1X-999, +## >>25 bedate >0 last modified: %s, +>>17 byte =0x00 os: MS-DOS +>>17 byte =0x01 os: Amiga +>>17 byte =0x02 os: VMS +>>17 byte =0x03 os: Unix +>>17 byte =0x05 os: Atari +>>17 byte =0x06 os: OS/2 +>>17 byte =0x07 os: MacOS +>>17 byte =0x0A os: Tops/20 +>>17 byte =0x0B os: WinNT +>>17 byte =0x0E os: Win32 + +# 4.3BSD-Quasijarus Strong Compression +# http://minnie.tuhs.org/Quasijarus/compress.html +0 string \037\241 Quasijarus strong compressed data + +# From: Cory Dikkers +0 string XPKF Amiga xpkf.library compressed data +0 string PP11 Power Packer 1.1 compressed data +0 string PP20 Power Packer 2.0 compressed data, +>4 belong 0x09090909 fast compression +>4 belong 0x090A0A0A mediocre compression +>4 belong 0x090A0B0B good compression +>4 belong 0x090A0C0C very good compression +>4 belong 0x090A0C0D best compression + +# 7-zip archiver, from Thomas Klausner (wiz@danbala.tuwien.ac.at) +# http://www.7-zip.org or DOC/7zFormat.txt +# +0 string 7z\274\257\047\034 7-zip archive data, +>6 byte x version %d +>7 byte x \b.%d +!:mime application/x-7z-compressed +#!:ext 7z/cb7 + +# Type: LZMA +0 lelong&0xffffff =0x5d +>12 leshort 0xff lzma compressed data, +!:mime application/x-lzma +>>5 lequad =0xffffffffffffffff streamed +>>5 lequad !0xffffffffffffffff non-streamed, size %lld +>12 leshort 0 lzma compressed data, +>>5 lequad =0xffffffffffffffff streamed +>>5 lequad !0xffffffffffffffff non-streamed, size %lld + +# http://tukaani.org/xz/xz-file-format.txt +0 ustring \xFD7zXZ\x00 xz compressed data +!:strength * 2 +!:mime application/x-xz + +# https://github.com/ckolivas/lrzip/blob/master/doc/magic.header.txt +0 string LRZI LRZIP compressed data +>4 byte x - version %d +>5 byte x \b.%d +!:mime application/x-lrzip + +# http://fastcompression.blogspot.fi/2013/04/lz4-streaming-format-final.html +0 lelong 0x184d2204 lz4 compressed data (v1.4+) +!:mime application/x-lz4 +# Added by osm0sis@xda-developers.com +0 lelong 0x184c2103 lz4 compressed data (v1.0-v1.3) +!:mime application/x-lz4 +0 lelong 0x184c2102 lz4 compressed data (v0.1-v0.9) +!:mime application/x-lz4 + +# Zstandard/LZ4 skippable frames +# https://github.com/facebook/zstd/blob/dev/zstd_compression_format.md +0 lelong&0xFFFFFFF0 0x184D2A50 +>(4.l+8) indirect x + +# https://github.com/facebook/zstd/blob/dev/zstd_compression_format.md +0 lelong 0xEC30A437 Zstandard dictionary +!:mime application/x-zstd-dictionary +>4 lelong x (ID %u) + +# AFX compressed files (Wolfram Kleff) +2 string -afx- AFX compressed file data + +# Supplementary magic data for the file(1) command to support +# rzip(1). The format is described in magic(5). +# +# Copyright (C) 2003 by Andrew Tridgell. You may do whatever you want with +# this file. +# +0 string RZIP rzip compressed data +>4 byte x - version %d +>5 byte x \b.%d +>6 belong x (%d bytes) + +0 string ArC\x01 FreeArc archive + +# Type: DACT compressed files +0 long 0x444354C3 DACT compressed data +>4 byte >-1 (version %i. +>5 byte >-1 %i. +>6 byte >-1 %i) +>7 long >0 , original size: %i bytes +>15 long >30 , block size: %i bytes + +# Valve Pack (VPK) files +0 lelong 0x55aa1234 Valve Pak file +>0x4 lelong x \b, version %u +>0x8 lelong x \b, %u entries + +# Snappy framing format +# http://code.google.com/p/snappy/source/browse/trunk/framing_format.txt +0 string \377\006\0\0sNaPpY snappy framed data +!:mime application/x-snappy-framed + +# qpress, http://www.quicklz.com/ +0 string qpress10 qpress compressed data +!:mime application/x-qpress + +# Zlib https://www.ietf.org/rfc/rfc6713.txt +0 string/b x +>0 beshort%31 =0 +>>0 byte&0xf =8 +>>>0 byte&0x80 =0 zlib compressed data + +#------------------------------------------------------------ +# $File: android,v 1.10 2017/03/17 21:35:28 christos Exp $ +# Various android related magic entries +#------------------------------------------------------------ + +# Dalvik .dex format. http://retrodev.com/android/dexformat.html +# From "Mike Fleming" +# Fixed to avoid regexec 17 errors on some dex files +# From "Tim Strazzere" +0 string dex\n +>0 regex dex\n[0-9]{2}\0 Dalvik dex file +>4 string >000 version %s +0 string dey\n +>0 regex dey\n[0-9]{2}\0 Dalvik dex file (optimized for host) +>4 string >000 version %s + +# Android bootimg format +# From https://android.googlesource.com/\ +# platform/system/core/+/master/mkbootimg/bootimg.h +0 string ANDROID! Android bootimg +>1024 string LOKI\01 \b, LOKI'd +>8 lelong >0 \b, kernel +>>12 lelong >0 \b (0x%x) +>16 lelong >0 \b, ramdisk +>>20 lelong >0 \b (0x%x) +>24 lelong >0 \b, second stage +>>28 lelong >0 \b (0x%x) +>36 lelong >0 \b, page size: %d +>38 string >0 \b, name: %s +>64 string >0 \b, cmdline (%s) + +# Android sparse img format +# From https://android.googlesource.com/\ +# platform/system/core/+/master/libsparse/sparse_format.h +0 lelong 0xed26ff3a Android sparse image +>4 leshort x \b, version: %d +>6 leshort x \b.%d +>16 lelong x \b, Total of %d +>12 lelong x \b %d-byte output blocks in +>20 lelong x \b %d input chunks. + +# Android binary XML magic +# In include/androidfw/ResourceTypes.h: +# RES_XML_TYPE = 0x0003 followed by the size of the header (ResXMLTree_header), +# which is 8 bytes (2 bytes type + 2 bytes header size + 4 bytes size). +0 lelong 0x00080003 Android binary XML diff --git a/DS/A.I.K/cleanup.sh b/DS/A.I.K/cleanup.sh new file mode 100755 index 000000000000..1d93c21809a1 --- /dev/null +++ b/DS/A.I.K/cleanup.sh @@ -0,0 +1,32 @@ +#!/bin/bash +# AIK-Linux/cleanup: reset working directory +# osm0sis @ xda-developers + +case $1 in + --help) echo "usage: cleanup.sh [--quiet]"; exit 1; +esac; + +case $(uname -s) in + Darwin|Macintosh) + statarg="-f %Su"; + readlink() { perl -MCwd -e 'print Cwd::abs_path shift' "$2"; } + ;; + *) statarg="-c %U";; +esac; + +aik="${BASH_SOURCE:-$0}"; +aik="$(dirname "$(readlink -f "$aik")")"; + +cd "$aik"; +if [ -d ramdisk ] && [ "$(stat $statarg ramdisk | head -n 1)" = "root" -o ! "$(find ramdisk 2>&1 | cpio -o >/dev/null 2>&1; echo $?)" -eq "0" ]; then + sudo=sudo; +fi; + +$sudo rm -rf ramdisk split_img *new.* || exit 1; + +case $1 in + --quiet) ;; + *) echo "Working directory cleaned.";; +esac; +exit 0; + diff --git a/DS/A.I.K/repackimg.sh b/DS/A.I.K/repackimg.sh new file mode 100755 index 000000000000..55b258e84959 --- /dev/null +++ b/DS/A.I.K/repackimg.sh @@ -0,0 +1,318 @@ +#!/bin/bash +# AIK-Linux/repackimg: repack ramdisk and build image +# osm0sis @ xda-developers + +abort() { cd "$aik"; echo "Error!"; } + +case $1 in + --help) echo "usage: repackimg.sh [--original] [--level <0-9>] [--avbkey ] [--forceelf]"; exit 1; +esac; + +case $(uname -s) in + Darwin|Macintosh) + plat="macos"; + readlink() { perl -MCwd -e 'print Cwd::abs_path shift' "$2"; } + ;; + *) plat="linux";; +esac; +arch=$plat/`uname -m`; + +aik="${BASH_SOURCE:-$0}"; +aik="$(dirname "$(readlink -f "$aik")")"; +bin="$aik/bin"; +rel=bin; +cur="$(readlink -f "$PWD")"; + +case $plat in + macos) + cpio="env DYLD_LIBRARY_PATH="$bin/$arch" "$bin/$arch/cpio""; + statarg="-f %Su"; + dd() { DYLD_LIBRARY_PATH="$bin/$arch" "$bin/$arch/dd" "$@"; } + java() { "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java" "$@"; } + lzop() { DYLD_LIBRARY_PATH="$bin/$arch" "$bin/$arch/lzop" "$@"; } + xz() { DYLD_LIBRARY_PATH="$bin/$arch" "$bin/$arch/xz" "$@"; } + ;; + linux) + cpio=cpio; + statarg="-c %U"; + ;; +esac; + +cd "$aik"; +chmod -R 755 "$bin" *.sh; +chmod 644 "$bin/magic" "$bin/androidbootimg.magic" "$bin/BootSignature.jar" "$bin/avb/"* "$bin/chromeos/"*; + +ramdiskcomp=`cat split_img/*-ramdiskcomp 2>/dev/null`; +if [ -z "$(ls split_img/* 2>/dev/null)" -o -z "$(ls ramdisk/* 2>/dev/null)" -a ! "$ramdiskcomp" = "empty" ]; then + echo "No files found to be packed/built."; + abort; + exit 1; +fi; + +clear; +echo " "; +echo "Android Image Kitchen - RepackImg Script"; +echo "by osm0sis @ xda-developers"; +echo " "; + +if [ ! -z "$(ls *-new.* 2>/dev/null)" ]; then + echo "Warning: Overwriting existing files!"; + echo " "; +fi; + +if [ -d ramdisk ] && [ "$(stat $statarg ramdisk | head -n 1)" = "root" ]; then + sudo=sudo; sumsg=" (as root)"; +else + cpioarg="-R 0:0"; +fi; + +rm -f "*-new.*"; +while [ "$1" ]; do + case $1 in + --original) original=1;; + --forceelf) repackelf=1;; + --level) + case $2 in + ''|*[!0-9]*) ;; + *) level="-$2"; lvltxt=" - Level: $2"; shift;; + esac; + ;; + --avbkey) + if [ "$2" ]; then + for keytest in "$2" "$cur/$2" "$aik/$2"; do + if [ ! -z "$(ls $keytest.pk8 2>/dev/null)" -a ! -z "$(ls $keytest.x509.* 2>/dev/null)" ]; then + avbkey="$keytest"; avbtxt=" - Key: $2"; shift; break; + fi; + done; + fi; + ;; + esac; + shift; +done; + +if [ "$original" ]; then + echo "Repacking with original ramdisk..."; +elif [ "$ramdiskcomp" = "empty" ]; then + echo "Warning: Using empty ramdisk for repack!"; + compext=empty; + touch ramdisk-new.cpio.$compext; +else + echo "Packing ramdisk$sumsg..."; + echo " "; + test -z "$level" -a "$ramdiskcomp" = "xz" && level=-1; + echo "Using compression: $ramdiskcomp$lvltxt"; + repackcmd="$ramdiskcomp $level"; + compext=$ramdiskcomp; + case $ramdiskcomp in + gzip) compext=gz;; + lzop) compext=lzo;; + xz) repackcmd="xz $level -Ccrc32";; + lzma) repackcmd="xz $level -Flzma";; + bzip2) compext=bz2;; + lz4) repackcmd="$bin/$arch/lz4 $level -l";; + *) abort; exit 1;; + esac; + cd ramdisk; + $sudo find . | $sudo $cpio $cpioarg -H newc -o 2>/dev/null | $repackcmd > ../ramdisk-new.cpio.$compext; + if [ ! $? -eq "0" ]; then + abort; + exit 1; + fi; + cd ..; +fi; + +echo " "; +echo "Getting build information..."; +cd split_img; +imgtype=`cat *-imgtype`; +if [ "$imgtype" != "KRNL" ]; then + kernel=`ls *-zImage`; echo "kernel = $kernel"; + kernel="split_img/$kernel"; +fi; +if [ "$original" ]; then + ramdisk=`ls *-ramdisk.cpio*`; echo "ramdisk = $ramdisk"; + ramdisk="split_img/$ramdisk"; +else + ramdisk="ramdisk-new.cpio.$compext"; +fi; +if [ "$imgtype" = "U-Boot" ]; then + name=`cat *-name`; echo "name = $name"; + uarch=`cat *-arch`; + os=`cat *-os`; + type=`cat *-type`; + comp=`cat *-comp`; echo "type = $uarch $os $type ($comp)"; + test "$comp" = "uncompressed" && comp=none; + addr=`cat *-addr`; echo "load_addr = $addr"; + ep=`cat *-ep`; echo "entry_point = $ep"; +elif [ "$imgtype" = "KRNL" ]; then + rsz=$(wc -c < "$aik/$ramdisk"); echo "ramdisk_size = $rsz"; +else + if [ -f *-second ]; then + second=`ls *-second`; echo "second = $second"; + second=(--second "split_img/$second"); + fi; + if [ -f *-cmdline ]; then + cmdname=`ls *-cmdline`; + cmdname="split_img/$cmdname"; + cmdline=`cat *-cmdline`; echo "cmdline = $cmdline"; + fi; + if [ -f *-board ]; then + board=`cat *-board`; echo "board = $board"; + fi; + base=`cat *-base`; echo "base = $base"; + pagesize=`cat *-pagesize`; echo "pagesize = $pagesize"; + kerneloff=`cat *-kerneloff`; echo "kernel_offset = $kerneloff"; + ramdiskoff=`cat *-ramdiskoff`; echo "ramdisk_offset = $ramdiskoff"; + if [ -f *-secondoff ]; then + secondoff=`cat *-secondoff`; echo "second_offset = $secondoff"; + fi; + if [ -f *-tagsoff ]; then + tagsoff=`cat *-tagsoff`; echo "tags_offset = $tagsoff"; + fi; + if [ -f *-osversion ]; then + osver=`cat *-osversion`; echo "os_version = $osver"; + fi; + if [ -f *-oslevel ]; then + oslvl=`cat *-oslevel`; echo "os_patch_level = $oslvl"; + fi; + if [ -f *-hash ]; then + hash=`cat *-hash`; echo "hash = $hash"; + hash="--hash $hash"; + fi; + if [ -f *-dtb ]; then + dtbtype=`cat *-dtbtype`; + dtb=`ls *-dtb`; echo "dtb = $dtb"; + rpm=("split_img/$dtb",rpm); + dtb=(--dt "split_img/$dtb"); + fi; + if [ -f *-unknown ]; then + unknown=`cat *-unknown`; echo "unknown = $unknown"; + fi; + if [ -f *-header ]; then + header=`ls *-header`; + header="split_img/$header"; + fi; +fi; +cd ..; + +if [ -f split_img/*-mtktype ]; then + mtktype=`cat split_img/*-mtktype`; + echo " "; + echo "Generating MTK headers..."; + echo " "; + echo "Using ramdisk type: $mtktype"; + "$bin/$arch/mkmtkhdr" --kernel "$kernel" --$mtktype "$ramdisk" >/dev/null; + if [ ! $? -eq "0" ]; then + abort; + exit 1; + fi; + mv -f "$(basename "$kernel")-mtk" kernel-new.mtk; + mv -f "$(basename "$ramdisk")-mtk" $mtktype-new.mtk; + kernel=kernel-new.mtk; + ramdisk=$mtktype-new.mtk; +fi; + +if [ -f split_img/*-sigtype ]; then + outname=unsigned-new.img; +else + outname=image-new.img; +fi; + +test "$dtbtype" == "ELF" && repackelf=1; +if [ "$imgtype" = "ELF" ] && [ ! "$header" -o ! "$repackelf" ]; then + imgtype=AOSP; + echo " "; + echo "Warning: ELF format without RPM detected; will be repacked using AOSP format!"; +fi; + +echo " "; +echo "Building image..."; +echo " "; +echo "Using format: $imgtype"; +echo " "; +case $imgtype in + AOSP) "$bin/$arch/mkbootimg" --kernel "$kernel" --ramdisk "$ramdisk" "${second[@]}" --cmdline "$cmdline" --board "$board" --base $base --pagesize $pagesize --kernel_offset $kerneloff --ramdisk_offset $ramdiskoff --second_offset "$secondoff" --tags_offset "$tagsoff" --os_version "$osver" --os_patch_level "$oslvl" $hash "${dtb[@]}" -o $outname;; + AOSP-PXA) "$bin/$arch/pxa-mkbootimg" --kernel "$kernel" --ramdisk "$ramdisk" "${second[@]}" --cmdline "$cmdline" --board "$board" --base $base --pagesize $pagesize --kernel_offset $kerneloff --ramdisk_offset $ramdiskoff --second_offset "$secondoff" --tags_offset "$tagsoff" --unknown $unknown "${dtb[@]}" -o $outname;; + ELF) "$bin/$arch/elftool" pack -o $outname header="$header" "$kernel" "$ramdisk",ramdisk "${rpm[@]}" "$cmdname"@cmdline >/dev/null;; + KRNL) "$bin/$arch/rkcrc" -k "$ramdisk" $outname;; + U-Boot) + test "$type" == "Multi" && uramdisk=(:"$ramdisk"); + "$bin/$arch/mkimage" -A $uarch -O $os -T $type -C $comp -a $addr -e $ep -n "$name" -d "$kernel""${uramdisk[@]}" $outname >/dev/null; + ;; + *) echo " "; echo "Unsupported format."; abort; exit 1;; +esac; +if [ ! $? -eq "0" ]; then + abort; + exit 1; +fi; + +if [ -f split_img/*-sigtype ]; then + sigtype=`cat split_img/*-sigtype`; + if [ -f split_img/*-avbtype ]; then + avbtype=`cat split_img/*-avbtype`; + fi; + if [ -f split_img/*-blobtype ]; then + blobtype=`cat split_img/*-blobtype`; + fi; + echo "Signing new image..."; + echo " "; + echo "Using signature: $sigtype $avbtype$avbtxt$blobtype"; + test ! "$avbkey" && avbkey="$rel/avb/verity"; + echo " "; + case $sigtype in + AVB) java -jar "$bin/BootSignature.jar" /$avbtype unsigned-new.img "$avbkey.pk8" "$avbkey.x509."* image-new.img 2>/dev/null;; + BLOB) + awk 'BEGIN { printf "-SIGNED-BY-SIGNBLOB-\00\00\00\00\00\00\00\00" }' > image-new.img; + "$bin/$arch/blobpack" tempblob $blobtype unsigned-new.img >/dev/null; + cat tempblob >> image-new.img; + rm -rf tempblob; + ;; + CHROMEOS) "$bin/$arch/futility" vbutil_kernel --pack image-new.img --keyblock $rel/chromeos/kernel.keyblock --signprivate $rel/chromeos/kernel_data_key.vbprivk --version 1 --vmlinuz unsigned-new.img --bootloader $rel/chromeos/empty --config $rel/chromeos/empty --arch arm --flags 0x1;; + DHTB) + "$bin/$arch/dhtbsign" -i unsigned-new.img -o image-new.img >/dev/null; + rm -rf split_img/*-tailtype 2>/dev/null; + ;; + NOOK*) cat split_img/*-master_boot.key unsigned-new.img > image-new.img;; + esac; + if [ ! $? -eq "0" ]; then + abort; + exit 1; + fi; +fi; + +if [ -f split_img/*-lokitype ]; then + lokitype=`cat split_img/*-lokitype`; + echo "Loki patching new image..."; + echo " "; + echo "Using type: $lokitype"; + echo " "; + mv -f image-new.img unlokied-new.img; + if [ -f aboot.img ]; then + "$bin/$arch/loki_tool" patch $lokitype aboot.img unlokied-new.img image-new.img >/dev/null; + if [ ! $? -eq "0" ]; then + echo "Patching failed."; + abort; + exit 1; + fi; + else + echo "Device aboot.img required in script directory to find Loki patch offset."; + abort; + exit 1; + fi; +fi; + +if [ -f split_img/*-tailtype ]; then + tailtype=`cat split_img/*-tailtype`; + echo "Appending footer..."; + echo " "; + echo "Using type: $tailtype"; + echo " "; + case $tailtype in + Bump) awk 'BEGIN { printf "\x41\xA9\xE4\x67\x74\x4D\x1D\x1B\xA4\x29\xF2\xEC\xEA\x65\x52\x79" }' >> image-new.img;; + SEAndroid) printf 'SEANDROIDENFORCE' >> image-new.img;; + esac; +fi; + +echo "Done!"; +exit 0; + diff --git a/DS/A.I.K/unpackimg.sh b/DS/A.I.K/unpackimg.sh new file mode 100755 index 000000000000..06972c8d68ba --- /dev/null +++ b/DS/A.I.K/unpackimg.sh @@ -0,0 +1,321 @@ +#!/bin/bash +# AIK-Linux/unpackimg: split image and unpack ramdisk +# osm0sis @ xda-developers + +cleanup() { $aik/cleanup.sh --quiet; } +abort() { cd "$aik"; echo "Error!"; } + +case $1 in + --help) echo "usage: unpackimg.sh [--nosudo] "; exit 1;; + --nosudo) nosudo=1; shift;; + --sudo) shift;; +esac; +if [ ! "$nosudo" ]; then + sudo=sudo; sumsg=" (as root)"; +fi; + +case $(uname -s) in + Darwin|Macintosh) + plat="macos"; + readlink() { perl -MCwd -e 'print Cwd::abs_path shift' "$2"; } + ;; + *) plat="linux";; +esac; +arch=$plat/`uname -m`; + +aik="${BASH_SOURCE:-$0}"; +aik="$(dirname "$(readlink -f "$aik")")"; +bin="$aik/bin"; +rel=bin; +cur="$(readlink -f "$PWD")"; + +case $plat in + macos) + cpio="env DYLD_LIBRARY_PATH="$bin/$arch" "$bin/$arch/cpio""; + statarg="-f %Su"; + dd() { DYLD_LIBRARY_PATH="$bin/$arch" "$bin/$arch/dd" "$@"; } + file() { DYLD_LIBRARY_PATH="$bin/$arch" "$bin/$arch/file" "$@"; } + lzma() { DYLD_LIBRARY_PATH="$bin/$arch" "$bin/$arch/xz" "$@"; } + lzop() { DYLD_LIBRARY_PATH="$bin/$arch" "$bin/$arch/lzop" "$@"; } + tail() { DYLD_LIBRARY_PATH="$bin/$arch" "$bin/$arch/tail" "$@"; } + xz() { DYLD_LIBRARY_PATH="$bin/$arch" "$bin/$arch/xz" "$@"; } + ;; + linux) + cpio=cpio; + statarg="-c %U"; + ;; +esac; + +cd "$aik"; +chmod -R 755 "$bin" *.sh; +chmod 644 "$bin/magic" "$bin/androidbootimg.magic" "$bin/BootSignature.jar" "$bin/avb/"* "$bin/chromeos/"*; + +test -f "$cur/$1" && img="$cur/$1" || img="$1"; +if [ ! "$img" ]; then + while IFS= read -r line; do + case $line in + aboot.img|image-new.img|unlokied-new.img|unsigned-new.img) continue;; + esac; + img="$line"; + break; + done < <(ls *.elf *.img *.sin 2>/dev/null); +fi; +img="$(readlink -f "$img")"; +if [ ! -f "$img" ]; then + echo "No image file supplied."; + abort; + exit 1; +fi; + +clear; +echo " "; +echo "Android Image Kitchen - UnpackImg Script"; +echo "by osm0sis @ xda-developers"; +echo " "; + +file=$(basename "$img"); +echo "Supplied image: $file"; +echo " "; + +if [ -d split_img -o -d ramdisk ]; then + if [ -d ramdisk ] && [ "$(stat $statarg ramdisk | head -n 1)" = "root" -o ! "$(find ramdisk 2>&1 | cpio -o >/dev/null 2>&1; echo $?)" -eq "0" ]; then + rmsumsg=" (as root)"; + fi; + echo "Removing old work folders and files$rmsumsg..."; + echo " "; + cleanup; +fi; + +echo "Setting up work folders..."; +echo " "; +mkdir split_img ramdisk; + +imgtest="$(file -m $rel/androidbootimg.magic "$img" | cut -d: -f2-)"; +if [ "$(echo $imgtest | awk '{ print $2 }' | cut -d, -f1)" = "signing" ]; then + echo $imgtest | awk '{ print $1 }' > "split_img/$file-sigtype"; + sigtype=$(cat "split_img/$file-sigtype"); + echo "Signature with \"$sigtype\" type detected, removing..."; + echo " "; + case $sigtype in + BLOB) + cd split_img; + cp -f "$img" "$file"; + "$bin/$arch/blobunpack" "$file" | tail -n+5 | cut -d" " -f2 | dd bs=1 count=3 > "$file-blobtype" 2>/dev/null; + mv -f "$file."* "$file"; + cd ..; + ;; + CHROMEOS) "$bin/$arch/futility" vbutil_kernel --get-vmlinuz "$img" --vmlinuz-out "split_img/$file";; + DHTB) dd bs=4096 skip=512 iflag=skip_bytes conv=notrunc if="$img" of="split_img/$file" 2>/dev/null;; + NOOK) + dd bs=1048576 count=1 conv=notrunc if="$img" of="split_img/$file-master_boot.key" 2>/dev/null; + dd bs=1048576 skip=1 conv=notrunc if="$img" of="split_img/$file" 2>/dev/null; + ;; + NOOKTAB) + dd bs=262144 count=1 conv=notrunc if="$img" of="split_img/$file-master_boot.key" 2>/dev/null; + dd bs=262144 skip=1 conv=notrunc if="$img" of="split_img/$file" 2>/dev/null; + ;; + SIN) + "$bin/$arch/kernel_dump" split_img "$img" >/dev/null; + mv -f "split_img/$file."* "split_img/$file"; + rm -rf "split_img/$file-sigtype"; + ;; + esac; + img="$aik/split_img/$file"; +fi; + +imgtest="$(file -m $rel/androidbootimg.magic "$img" | cut -d: -f2-)"; +if [ "$(echo $imgtest | awk '{ print $2 }' | cut -d, -f1)" = "bootimg" ]; then + test "$(echo $imgtest | awk '{ print $3 }')" = "PXA" && typesuffix=-PXA; + echo "$(echo $imgtest | awk '{ print $1 }')$typesuffix" > "split_img/$file-imgtype"; + imgtype=$(cat "split_img/$file-imgtype"); +else + cleanup; + echo "Unrecognized format."; + abort; + exit 1; +fi; +echo "Image type: $imgtype"; +echo " "; + +case $imgtype in + AOSP*|ELF|KRNL|U-Boot) ;; + *) + cleanup; + echo "Unsupported format."; + abort; + exit 1; + ;; +esac; + +if [ "$(echo $imgtest | awk '{ print $3 }')" = "LOKI" ]; then + echo $imgtest | awk '{ print $5 }' | cut -d\( -f2 | cut -d\) -f1 > "split_img/$file-lokitype"; + lokitype=$(cat "split_img/$file-lokitype"); + echo "Loki patch with \"$lokitype\" type detected, reverting..."; + echo " "; + echo "Warning: A dump of your device's aboot.img is required to re-Loki!"; + echo " "; + "$bin/$arch/loki_tool" unlok "$img" "split_img/$file" >/dev/null; + img="$file"; +fi; + +tailtest="$(tail -n50 "$img" 2>/dev/null | file -m $rel/androidbootimg.magic - | cut -d: -f2-)"; +tailtype="$(echo $tailtest | awk '{ print $1 }')"; +case $tailtype in + AVB) + echo "Signature with \"$tailtype\" type detected."; + echo " "; + echo $tailtype > "split_img/$file-sigtype"; + echo $tailtest | awk '{ print $5 }' > "split_img/$file-avbtype"; + ;; + Bump|SEAndroid) + echo "Footer with \"$tailtype\" type detected."; + echo " "; + echo $tailtype > "split_img/$file-tailtype"; + ;; +esac; + +echo 'Splitting image to "split_img/"...'; +cd split_img; +case $imgtype in + AOSP) "$bin/$arch/unpackbootimg" -i "$img";; + AOSP-PXA) "$bin/$arch/pxa-unpackbootimg" -i "$img";; + ELF) + mkdir elftool_out; + "$bin/$arch/elftool" unpack -i "$img" -o elftool_out >/dev/null; + mv -f elftool_out/header "$file-header" 2>/dev/null; + rm -rf elftool_out; + "$bin/$arch/unpackelf" -i "$img"; + ;; + KRNL) dd bs=4096 skip=8 iflag=skip_bytes conv=notrunc if="$img" of="$file-ramdisk.cpio.gz" 2>&1 | tail -n+3 | cut -d" " -f1-2;; + U-Boot) + "$bin/$arch/dumpimage" -l "$img"; + "$bin/$arch/dumpimage" -l "$img" > "$file-header"; + grep "Name:" "$file-header" | cut -c15- > "$file-name"; + grep "Type:" "$file-header" | cut -c15- | cut -d" " -f1 > "$file-arch"; + grep "Type:" "$file-header" | cut -c15- | cut -d" " -f2 > "$file-os"; + grep "Type:" "$file-header" | cut -c15- | cut -d" " -f3 | cut -d- -f1 > "$file-type"; + grep "Type:" "$file-header" | cut -d\( -f2 | cut -d\) -f1 | cut -d" " -f1 | cut -d- -f1 > "$file-comp"; + grep "Address:" "$file-header" | cut -c15- > "$file-addr"; + grep "Point:" "$file-header" | cut -c15- > "$file-ep"; + rm -rf "$file-header"; + "$bin/$arch/dumpimage" -i "$img" -p 0 "$file-zImage"; + if [ ! $? -eq "0" ]; then + cleanup; + abort; + exit 1; + fi; + if [ "$(cat "$file-type")" = "Multi" ]; then + "$bin/$arch/dumpimage" -i "$img" -p 1 "$file-ramdisk.cpio.gz"; + else + touch "$file-ramdisk.cpio.gz"; + fi; + ;; +esac; +if [ ! $? -eq "0" ]; then + cleanup; + abort; + exit 1; +fi; + +if [ "$imgtype" = "AOSP" ] && [ "$(cat "$file-hash")" = "unknown" ]; then + echo " "; + echo 'Warning: "unknown" hash type detected; assuming "sha1" type!'; + echo "sha1" > "$file-hash"; +fi; + +if [ "$(file -m ../$rel/androidbootimg.magic *-zImage | cut -d: -f2 | awk '{ print $1 }')" = "MTK" ]; then + mtk=1; + echo " "; + echo "MTK header found in zImage, removing..."; + dd bs=512 skip=1 conv=notrunc if="$file-zImage" of=tempzimg 2>/dev/null; + mv -f tempzimg "$file-zImage"; +fi; +mtktest="$(file -m ../$rel/androidbootimg.magic *-ramdisk*.gz | cut -d: -f2-)"; +mtktype=$(echo $mtktest | awk '{ print $3 }'); +if [ "$(echo $mtktest | awk '{ print $1 }')" = "MTK" ]; then + if [ ! "$mtk" ]; then + echo " "; + echo "Warning: No MTK header found in zImage!"; + mtk=1; + fi; + echo "MTK header found in \"$mtktype\" type ramdisk, removing..."; + dd bs=512 skip=1 conv=notrunc if="$(ls *-ramdisk*.gz)" of=temprd 2>/dev/null; + mv -f temprd "$(ls *-ramdisk*.gz)"; +else + if [ "$mtk" ]; then + if [ ! "$mtktype" ]; then + echo 'Warning: No MTK header found in ramdisk, assuming "rootfs" type!'; + mtktype="rootfs"; + fi; + fi; +fi; +test "$mtk" && echo $mtktype > "$file-mtktype"; + +if [ -f *-dtb ]; then + dtbtest="$(file -m ../$rel/androidbootimg.magic *-dtb | cut -d: -f2 | awk '{ print $1 }')"; + echo $dtbtest > "$file-dtbtype"; + if [ "$imgtype" = "ELF" ]; then + case $dtbtest in + QCDT|ELF) ;; + *) echo " "; + echo "Non-QC DTB found, packing zImage and appending..."; + gzip --no-name -9 "$file-zImage"; + mv -f "$file-zImage.gz" "$file-zImage"; + cat "$file-dtb" >> "$file-zImage"; + rm -f "$file-dtb"*;; + esac; + fi; +fi; + +file -m ../$rel/magic *-ramdisk*.gz | cut -d: -f2 | awk '{ print $1 }' > "$file-ramdiskcomp"; +ramdiskcomp=`cat *-ramdiskcomp`; +unpackcmd="$ramdiskcomp -dc"; +compext=$ramdiskcomp; +case $ramdiskcomp in + gzip) unpackcmd="gzip -dcq"; compext=gz;; + lzop) compext=lzo;; + xz) ;; + lzma) ;; + bzip2) compext=bz2;; + lz4) unpackcmd="$bin/$arch/lz4 -dcq";; + empty) compext=empty;; + *) compext="";; +esac; +if [ "$compext" ]; then + compext=.$compext; +fi; +mv -f "$(ls *-ramdisk*.gz)" "$file-ramdisk.cpio$compext" 2>/dev/null; +cd ..; +if [ "$ramdiskcomp" = "data" ]; then + echo "Unrecognized format."; + abort; + exit 1; +fi; + +echo " "; +if [ "$ramdiskcomp" = "empty" ]; then + echo "Warning: No ramdisk found to be unpacked!"; +else + echo "Unpacking ramdisk$sumsg to \"ramdisk/\"..."; + echo " "; + $sudo chown 0:0 ramdisk 2>/dev/null; + cd ramdisk; + echo "Compression used: $ramdiskcomp"; + if [ ! "$compext" ]; then + echo "Unsupported format."; + abort; + exit 1; + fi; + $unpackcmd "../split_img/$file-ramdisk.cpio$compext" | $sudo $cpio -i -d --no-absolute-filenames; + if [ ! $? -eq "0" ]; then + test "$nosudo" && echo "Unpacking failed, try without --nosudo."; + abort; + exit 1; + fi; + cd ..; +fi; + +echo " "; +echo "Done!"; +exit 0; + diff --git a/DS/Ramdisk/ramdisk/dpolicy b/DS/Ramdisk/ramdisk/dpolicy new file mode 100644 index 000000000000..396576470f50 Binary files /dev/null and b/DS/Ramdisk/ramdisk/dpolicy differ diff --git a/DS/Ramdisk/ramdisk/fstab.samsungexynos9810 b/DS/Ramdisk/ramdisk/fstab.samsungexynos9810 new file mode 100644 index 000000000000..4b565283b755 --- /dev/null +++ b/DS/Ramdisk/ramdisk/fstab.samsungexynos9810 @@ -0,0 +1,17 @@ +# Android fstab file. +# +# The filesystem that contains the filesystem checker binary (typically /system) cannot +# specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK + +#/dev/block/platform/11120000.ufs/by-name/SYSTEM /system ext4 ro,errors=panic wait +/dev/block/platform/11120000.ufs/by-name/CACHE /cache ext4 noatime,nosuid,nodev,noauto_da_alloc,discard,journal_checksum,data=ordered,errors=panic wait,check +/dev/block/platform/11120000.ufs/by-name/USERDATA /data ext4 noatime,nosuid,nodev,noauto_da_alloc,discard,journal_checksum,data=ordered,errors=panic wait,check,encryptable=footer,quota,reservedsize=128M,length=-20480 +/dev/block/platform/11120000.ufs/by-name/EFS /mnt/vendor/efs ext4 noatime,nosuid,nodev,noauto_da_alloc,discard,journal_checksum,data=ordered,errors=panic wait,check +/dev/block/platform/11120000.ufs/by-name/CPEFS /mnt/vendor/cpefs ext4 noatime,nosuid,nodev,noauto_da_alloc,discard,journal_checksum,data=ordered,errors=panic wait,check,nofail +/dev/block/platform/11120000.ufs/by-name/MISC /misc emmc defaults defaults +#/dev/block/platform/11120000.ufs/by-name/DQMDBG /dqmdbg ext4 noatime,nosuid,nodev,noauto_da_alloc,discard,journal_checksum,data=ordered,errors=panic wait,check + +# VOLD - fstab.star2lte +/dev/block/platform/11120000.ufs/by-name/HIDDEN /preload ext4 noatime,nosuid,nodev,noauto_da_alloc,discard,journal_checksum,data=ordered,errors=panic voldmanaged=preload:auto,check +/devices/platform/11500000.dwmmc2/mmc_host* auto vfat defaults voldmanaged=sdcard:auto +/devices/platform/10c00000.usb/10c00000.dwc3* auto auto defaults voldmanaged=usb:auto diff --git a/DS/Ramdisk/ramdisk/init b/DS/Ramdisk/ramdisk/init new file mode 100755 index 000000000000..5b5a4c09f03f Binary files /dev/null and b/DS/Ramdisk/ramdisk/init differ diff --git a/DS/Ramdisk/split_img/boot.img-base b/DS/Ramdisk/split_img/boot.img-base new file mode 100644 index 000000000000..825319e1c5ba --- /dev/null +++ b/DS/Ramdisk/split_img/boot.img-base @@ -0,0 +1 @@ +10000000 diff --git a/DS/Ramdisk/split_img/boot.img-board b/DS/Ramdisk/split_img/boot.img-board new file mode 100644 index 000000000000..bce64f90b90f --- /dev/null +++ b/DS/Ramdisk/split_img/boot.img-board @@ -0,0 +1 @@ +SRPQH16A013KU diff --git a/DS/Ramdisk/split_img/boot.img-cmdline b/DS/Ramdisk/split_img/boot.img-cmdline new file mode 100644 index 000000000000..45c00aa62b7c --- /dev/null +++ b/DS/Ramdisk/split_img/boot.img-cmdline @@ -0,0 +1 @@ +androidboot.hardware=exynos9810 loop.max_part=7 diff --git a/DS/Ramdisk/split_img/boot.img-dtbtype b/DS/Ramdisk/split_img/boot.img-dtbtype new file mode 100644 index 000000000000..1269488f7fb1 --- /dev/null +++ b/DS/Ramdisk/split_img/boot.img-dtbtype @@ -0,0 +1 @@ +data diff --git a/DS/Ramdisk/split_img/boot.img-hash b/DS/Ramdisk/split_img/boot.img-hash new file mode 100644 index 000000000000..fcdd09c7dd71 --- /dev/null +++ b/DS/Ramdisk/split_img/boot.img-hash @@ -0,0 +1 @@ +sha1 diff --git a/DS/Ramdisk/split_img/boot.img-imgtype b/DS/Ramdisk/split_img/boot.img-imgtype new file mode 100644 index 000000000000..8fb4d936764d --- /dev/null +++ b/DS/Ramdisk/split_img/boot.img-imgtype @@ -0,0 +1 @@ +AOSP diff --git a/DS/Ramdisk/split_img/boot.img-kerneloff b/DS/Ramdisk/split_img/boot.img-kerneloff new file mode 100644 index 000000000000..0fa11ef630f1 --- /dev/null +++ b/DS/Ramdisk/split_img/boot.img-kerneloff @@ -0,0 +1 @@ +00008000 diff --git a/DS/Ramdisk/split_img/boot.img-oslevel b/DS/Ramdisk/split_img/boot.img-oslevel new file mode 100644 index 000000000000..c8604bedbe3f --- /dev/null +++ b/DS/Ramdisk/split_img/boot.img-oslevel @@ -0,0 +1 @@ +2024-09 diff --git a/DS/Ramdisk/split_img/boot.img-osversion b/DS/Ramdisk/split_img/boot.img-osversion new file mode 100644 index 000000000000..02161ca86e5e --- /dev/null +++ b/DS/Ramdisk/split_img/boot.img-osversion @@ -0,0 +1 @@ +13.0.0 diff --git a/DS/Ramdisk/split_img/boot.img-pagesize b/DS/Ramdisk/split_img/boot.img-pagesize new file mode 100644 index 000000000000..c873496a2275 --- /dev/null +++ b/DS/Ramdisk/split_img/boot.img-pagesize @@ -0,0 +1 @@ +2048 diff --git a/DS/Ramdisk/split_img/boot.img-ramdiskcomp b/DS/Ramdisk/split_img/boot.img-ramdiskcomp new file mode 100644 index 000000000000..d234d64b16cb --- /dev/null +++ b/DS/Ramdisk/split_img/boot.img-ramdiskcomp @@ -0,0 +1 @@ +gzip diff --git a/DS/Ramdisk/split_img/boot.img-ramdiskoff b/DS/Ramdisk/split_img/boot.img-ramdiskoff new file mode 100644 index 000000000000..7c295bd44445 --- /dev/null +++ b/DS/Ramdisk/split_img/boot.img-ramdiskoff @@ -0,0 +1 @@ +01000000 diff --git a/DS/Ramdisk/split_img/boot.img-secondoff b/DS/Ramdisk/split_img/boot.img-secondoff new file mode 100644 index 000000000000..3d268ebdefa8 --- /dev/null +++ b/DS/Ramdisk/split_img/boot.img-secondoff @@ -0,0 +1 @@ +00f00000 diff --git a/DS/Ramdisk/split_img/boot.img-tagsoff b/DS/Ramdisk/split_img/boot.img-tagsoff new file mode 100644 index 000000000000..04dd1ae00f6c --- /dev/null +++ b/DS/Ramdisk/split_img/boot.img-tagsoff @@ -0,0 +1 @@ +00000100 diff --git a/DS/Ramdisk/split_img/boot.img-tailtype b/DS/Ramdisk/split_img/boot.img-tailtype new file mode 100644 index 000000000000..5126894bf92c --- /dev/null +++ b/DS/Ramdisk/split_img/boot.img-tailtype @@ -0,0 +1 @@ +SEAndroid diff --git a/DS/kernelzip/LICENSE b/DS/kernelzip/LICENSE new file mode 100644 index 000000000000..4bdcdfad3be3 --- /dev/null +++ b/DS/kernelzip/LICENSE @@ -0,0 +1,112 @@ +## hadesKernel Script License: + Copyright 2020-2021 © corsicanu + hadesKernel Script is licensed under Creative Commons + Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) + Full license is available at: + https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode + + This is a human-readable summary (and not a substitute) of the license. + + You are free to: + *Share — copy and redistribute the material in any medium or format + *Adapt — remix, transform, and build upon the material + The licensor cannot revoke these freedoms as long as you follow the license terms. + + Under the following terms: + *Attribution — You must give appropriate credit, provide a link to the license, + and indicate if changes were made. You may do so in any reasonable manner, + but not in any way that suggests the licensor endorses you or your use. + + *NonCommercial — You may not use the material for commercial purposes. + + *ShareAlike — If you remix, transform, or build upon the material, you must + distribute your contributions under the same license as the original. + + No additional restrictions — You may not apply legal terms or technological + measures that legally restrict others from doing anything the license permits. + + Notices: + You do not have to comply with the license for elements of the material in the public + domain or where your use is permitted by an applicable exception or limitation. + No warranties are given. The license may not give you all of the permissions necessary + for your intended use. For example, other rights such as publicity, privacy, or moral + rights may limit how you use the material. + + +## Included Binary Licenses: + +magiskboot, magiskpolicy (Magisk): GPLv3+ + + Magisk, including all git submodules are free software: + you can redistribute it and/or modify it under the terms of the + GNU General Public License as published by the Free Software Foundation, + either version 3 of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + Per Section 6(d), official compiled binaries from unmodified source: + https://github.com/topjohnwu/Magisk + +busybox: GPLv2 + + BusyBox is distributed under version 2 of the General Public + License. Version 2 is the only version of this license which this + version of BusyBox (or modified versions derived from this one) may + be distributed under. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + Per Section 3(b), Magisk compiled binary from modified source: + https://git.busybox.net/busybox/ + https://github.com/topjohnwu/ndk-busybox + (pre-patched source tree used to build available upon request) + +bsdiff/bspatch: BSD + + Copyright 2003-2005 Colin Percival + All rights reserved + + Redistribution and use in source and binary forms, with or without + modification, are permitted providing that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + +## Extra credits: + @Noxxxious + @ananjaser1211 + @osm0sis + @topjohnwu + @arter97 + @SuperR + + If you consider your name should be here, don't hesitate and send me + an email: me corsicanu ro. diff --git a/DS/kernelzip/META-INF/com/google/android/update-binary b/DS/kernelzip/META-INF/com/google/android/update-binary new file mode 100644 index 000000000000..a79241e0d427 --- /dev/null +++ b/DS/kernelzip/META-INF/com/google/android/update-binary @@ -0,0 +1,104 @@ +#!/sbin/sh +# Copyright 2020-2022 © corsicanu +# Licensed under CC BY-NC-SA 4.0 +# https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode + +device=$(cat /proc/cmdline | sed 's/ /\n/g' | grep "androidboot.bootloader") +if [ ! $device ] ; then + device=$1 +fi + +if [[ $2 = 0 ]]; then + OUTFD="/dev/null" +else + OUTFD="/proc/self/fd/$2" +fi +ZIP=$3 + +ui_print() { + echo -n -e "ui_print $1\n" > $OUTFD + echo -n -e "ui_print\n" > $OUTFD +} + + +if echo $device | grep '[GN]96[05][FN]'; then + # Cleanup + cd /tmp + rm -rf floyd + unzip -o "$ZIP" + chmod 755 /tmp/floyd/tools/* + cd /tmp/floyd + + bb=/tmp/floyd/tools/busybox + boot=$($bb find /dev/block/platform -iname boot) + + + ui_print " " + ui_print "fkv Installer" + ui_print " " + + ui_print "Detecting device..." + if echo $device | grep 'G960[F]'; then + ui_print "- S9 G960F detected" + mv G960F-kernel kernel + mv G960F-dtb extra + sleep 1 + elif echo $device | grep 'G965[F]'; then + ui_print "- S9+ G965F detected" + ./tools/bsdiff G960F-kernel kernel G965F-kernel + ./tools/bsdiff G960F-dtb extra G965F-dtb + sleep 1 + elif echo $device | grep 'N960[FN]'; then + ui_print "- Note9 detected" + ./tools/bsdiff G960F-kernel kernel N960F-kernel + ./tools/bsdiff G960F-dtb extra N960F-dtb + sleep 1 + elif echo $device | grep 'G960[N]'; then + ui_print "- S9 G960N detected" + ./tools/bsdiff G960F-kernel kernel G960N-kernel + ./tools/bsdiff G960F-dtb extra G960N-dtb + sleep 1 + elif echo $device | grep 'G965[N]'; then + ui_print "- S9+ G965N detected" + ./tools/bsdiff G960F-kernel kernel G965N-kernel + ./tools/bsdiff G960F-dtb extra G965N-dtb + sleep 1 + elif echo $device | grep 'N960[N]'; then + ui_print "- Note9 N960N detected" + ./tools/bsdiff G960F-kernel kernel N960N-kernel + ./tools/bsdiff G960F-dtb extra N960N-dtb + sleep 1 + else + ui_print "! Device is not supported" + ui_print "Aborting..." + sleep 1 + exit + fi + + ui_print "- Installing DS-ACK-N10L Kernel" + cd /tmp/floyd && rm -rf /tmp/floydKernel && mkdir -p /tmp/floydKernel && cd /tmp/floydKernel + cp /tmp/floyd/tools/magiskboot imgtool && chmod 777 imgtool + dd if=$boot of=/tmp/floydKernel/old-boot.img bs=4096 + ./imgtool unpack old-boot.img + rm -rf kernel && cp /tmp/floyd/kernel kernel + rm -rf extra && cp /tmp/floyd/extra extra + ./imgtool repack -n old-boot.img + cp new-boot.img /tmp/floyd/boot.img + dd if=/tmp/floyd/boot.img of=$boot bs=4096 + sleep 1 + + ui_print "- Cleaning leftovers.." + sleep 1 + rm -rf /tmp/floyd + ui_print " " + ui_print "fkv Installed" + ui_print "Reboot and enjoy!" + ui_print " " + sync +else + ui_print " " + ui_print "!! Device is not supported, aborting..." + ui_print " " + exit 1 +fi + diff --git a/DS/kernelzip/META-INF/com/google/android/updater-script b/DS/kernelzip/META-INF/com/google/android/updater-script new file mode 100644 index 000000000000..d0a7f4fdc222 --- /dev/null +++ b/DS/kernelzip/META-INF/com/google/android/updater-script @@ -0,0 +1 @@ +# What are you looking at? diff --git a/DS/kernelzip/floyd/tools/bsdiff b/DS/kernelzip/floyd/tools/bsdiff new file mode 100644 index 000000000000..08da018e4010 Binary files /dev/null and b/DS/kernelzip/floyd/tools/bsdiff differ diff --git a/DS/kernelzip/floyd/tools/busybox b/DS/kernelzip/floyd/tools/busybox new file mode 100644 index 000000000000..0e281bbed683 Binary files /dev/null and b/DS/kernelzip/floyd/tools/busybox differ diff --git a/DS/kernelzip/floyd/tools/magiskboot b/DS/kernelzip/floyd/tools/magiskboot new file mode 100644 index 000000000000..a1ba65e9bc06 Binary files /dev/null and b/DS/kernelzip/floyd/tools/magiskboot differ diff --git a/Makefile b/Makefile index c86f23de9a49..0921491cdc9d 100644 --- a/Makefile +++ b/Makefile @@ -221,6 +221,8 @@ VPATH := $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD)) export srctree objtree VPATH +CCACHE := ccache + # SUBARCH tells the usermode build what the underlying arch is. That is set # first, and if a usermode build is happening, the "ARCH=um" on the command # line overrides the setting of ARCH below. If a native build is happening, @@ -300,8 +302,8 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ else if [ -x /bin/bash ]; then echo /bin/bash; \ else echo sh; fi ; fi) -HOSTCC = gcc -HOSTCXX = g++ +HOSTCC = $(CCACHE) gcc +HOSTCXX = $(CCACHE) g++ HOSTCFLAGS := -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu89 HOSTCXXFLAGS = -O2 ifeq ($(CONFIG_EXYNOS_FMP_FIPS),) @@ -344,16 +346,16 @@ scripts/Kbuild.include: ; include scripts/Kbuild.include # Make variables (CC, etc...) -AS = $(CROSS_COMPILE)as -LD = $(CROSS_COMPILE)ld -LDGOLD = $(CROSS_COMPILE)ld.gold -CC = $(CROSS_COMPILE)gcc -CPP = $(CC) -E -AR = $(CROSS_COMPILE)ar -NM = $(CROSS_COMPILE)nm -STRIP = $(CROSS_COMPILE)strip -OBJCOPY = $(CROSS_COMPILE)objcopy -OBJDUMP = $(CROSS_COMPILE)objdump +AS = $(CCACHE) $(CROSS_COMPILE)as +LD = $(CCACHE) $(CROSS_COMPILE)ld +LDGOLD = $(CCACHE) $(CROSS_COMPILE)ld.gold +CC = $(CCACHE) $(CROSS_COMPILE)gcc +CPP = $(CCACHE) $(CC) -E +AR = $(CCACHE) $(CROSS_COMPILE)ar +NM = $(CCACHE) $(CROSS_COMPILE)nm +STRIP = $(CCACHE) $(CROSS_COMPILE)strip +OBJCOPY = $(CCACHE) $(CROSS_COMPILE)objcopy +OBJDUMP = $(CCACHE) $(CROSS_COMPILE)objdump AWK = awk GENKSYMS = scripts/genksyms/genksyms INSTALLKERNEL := installkernel @@ -389,6 +391,9 @@ LINUXINCLUDE := \ $(if $(KBUILD_SRC), -I$(srctree)/include) \ -I$(objtree)/include +# KSU +LINUXINCLUDE += -I$(srctree)/drivers/kernelsu/include + LINUXINCLUDE += $(filter-out $(LINUXINCLUDE),$(USERINCLUDE)) KBUILD_AFLAGS := -D__ASSEMBLY__ @@ -726,15 +731,7 @@ DISABLE_LTO += $(DISABLE_CFI) export DISABLE_CFI endif -ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE -KBUILD_CFLAGS += -Os $(call cc-disable-warning,maybe-uninitialized,) -else -ifdef CONFIG_PROFILE_ALL_BRANCHES KBUILD_CFLAGS += -O2 $(call cc-disable-warning,maybe-uninitialized,) -else -KBUILD_CFLAGS += -O2 -endif -endif KBUILD_CFLAGS += $(call cc-ifversion, -lt, 0409, \ $(call cc-disable-warning,maybe-uninitialized,)) @@ -803,6 +800,16 @@ else # These warnings generated too much noise in a regular build. # Use make W=1 to enable them (see scripts/Makefile.extrawarn) KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable) +KBUILD_CFLAGS += $(call cc-disable-warning, attribute-alias) +KBUILD_CFLAGS += $(call cc-disable-warning, packed-not-aligned) +KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation) +KBUILD_CFLAGS += $(call cc-disable-warning, misleading-indentation) +KBUILD_CFLAGS += $(call cc-disable-warning, stringop-overflow) +KBUILD_CFLAGS += $(call cc-disable-warning, maybe-uninitialized) +KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member) +KBUILD_CFLAGS += $(call cc-disable-warning, sizeof-pointer-memaccess) +KBUILD_CFLAGS += $(call cc-disable-warning, unused-function) +KBUILD_CFLAGS += $(call cc-disable-warning, implicit-function-declaration) endif KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable) @@ -880,6 +887,9 @@ KBUILD_CFLAGS += $(call cc-disable-warning, pointer-sign) # disable stringop warnings in gcc 8+ KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation) +# disable stringop warnings in gcc 8+ +KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation) + # disable invalid "can't wrap" optimizations for signed / pointers KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow) diff --git a/apollo.sh b/apollo.sh new file mode 100755 index 000000000000..85c4258caaf1 --- /dev/null +++ b/apollo.sh @@ -0,0 +1,713 @@ +#!/bin/bash +# +# Apollo Build Script V3.5 +# For Exynos9810 +# Forked from Exynos8890 Script +# Coded by AnanJaser1211 @ 2019-2022 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# Main Dir +CR_DIR=$(pwd) +# Compiler Dir +CR_TC=../compiler +# Target ARCH +CR_ARCH=arm64 +# Define proper arch and dir for dts files +CR_DTS=arch/$CR_ARCH/boot/dts/exynos +# Define boot.img out dir +CR_OUT=$CR_DIR/Apollo/Out +CR_PRODUCT=$CR_DIR/Apollo/Product +# Kernel Zip Package +CR_ZIP=$CR_DIR/Apollo/kernelzip +CR_OUTZIP=$CR_OUT/kernelzip +# Presistant A.I.K Location +CR_AIK=$CR_DIR/Apollo/A.I.K +# Main Ramdisk Location +CR_RAMDISK=$CR_DIR/Apollo/Ramdisk +# Compiled image name and location (Image/zImage) +CR_KERNEL=$CR_DIR/arch/$CR_ARCH/boot/Image +# Compiled dtb by dtbtool +CR_DTB=$CR_DIR/arch/$CR_ARCH/boot/dtb.img +# defconfig dir +CR_DEFCONFIG=$CR_DIR/arch/$CR_ARCH/configs +# Kernel Name and Version +CR_VERSION=V1.6 +CR_NAME=DS-ACK +# Thread count +CR_JOBS=$(nproc --all) +# Target Android version +CR_ANDROID=q +CR_PLATFORM=13.0.0 +# Current Date +CR_DATE=$(date +%d.%m.%Y) +# General init +export ANDROID_MAJOR_VERSION=$CR_ANDROID +export PLATFORM_VERSION=$CR_PLATFORM +export $CR_ARCH +########################################## +# Device specific Variables [SM-G960X] +CR_CONFIG_G960=starlte_defconfig +CR_VARIANT_G960F=G960F +CR_VARIANT_G960N=G960N +# Device specific Variables [SM-G965X] +CR_CONFIG_G965=star2lte_defconfig +CR_VARIANT_G965F=G965F +CR_VARIANT_G965N=G965N +# Device specific Variables [SM-N960X] +CR_CONFIG_N960=crownlte_defconfig +CR_VARIANT_N960F=N960F +CR_VARIANT_N960N=N960N +# Common configs +CR_CONFIG_9810=exynos9810_defconfig +CR_CONFIG_SPLIT=NULL +CR_CONFIG_APOLLO=apollo_defconfig +CR_CONFIG_INTL=eur_defconfig +CR_CONFIG_KOR=kor_defconfig +CR_SELINUX="2" +CR_KSU="n" +CR_CLEAN="n" +# Default Compilation +DEFAULT_TARGET=3 # crownlte +DEFAULT_COMPILER=3 # clang18 +DEFAULT_SELINUX=2 # enforce +DEFAULT_KSU=y # enabled +DEFAULT_CLEAN=n # dirty +##################################################### + +# Compiler Selection +BUILD_COMPILER() +{ + +# Auto download and setup compilers +# For manually adding compiler, add it under +# Apollo/toolchain/clang-custom and select option 7 + +# Clang Versions and features + +if [ $CR_COMPILER = "1" ]; then +CR_CLANG_URL=https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/+archive/refs/heads/llvm-r416183/clang-r416183.tar.gz +CR_CLANG=$CR_TC/clang-12.0.4-r416183 +fi +if [ $CR_COMPILER = "2" ]; then +CR_CLANG_URL=https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/+archive/refs/heads/llvm-r450784/clang-r450784b.tar.gz +CR_CLANG=$CR_TC/clang-14.0.4-r450784 +fi +if [ $CR_COMPILER = "3" ]; then +CR_CLANG_URL=https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/+archive/refs/heads/llvm-r522817/clang-r522817.tar.gz +CR_CLANG=$CR_TC/clang-18.0.1-r522817 +fi +if [ $CR_COMPILER = "4" ]; then +CR_CLANG_URL=https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/+archive/refs/heads/llvm-r530567/clang-r530567.tar.gz +CR_CLANG=$CR_TC/clang-19.0.0-r530567 +fi +if [ $CR_COMPILER = "5" ]; then +CR_CLANG_URL=https://github.com/Neutron-Toolchains/clang-build-catalogue/releases/download/05012024/neutron-clang-05012024.tar.zst +CR_CLANG=$CR_TC/neutron-clang-18.0.0 +fi +if [ $CR_COMPILER = "6" ]; then +CR_CLANG_URL=https://github.com/Neutron-Toolchains/clang-build-catalogue/releases/download/10032024/neutron-clang-10032024.tar.zst +CR_CLANG=$CR_TC/neutron-clang-19.0.0 +fi +if [ $CR_COMPILER = "7" ]; then +CR_CLANG=$CR_TC/neutron-clang-20.0.0 +fi +if [ $CR_COMPILER = "8" ]; then +CR_CLANG=$CR_TC/clang-custom +fi + +if [ $CR_COMPILER != "8" ]; then + if [ ! -d "$CR_CLANG/bin" ] || [ ! -d "$CR_CLANG/lib" ]; then + echo " " + echo " $CR_CLANG compiler is missing" + echo " " + echo " " + read -p "Download Toolchain ? (y/n) > " TC_DL + if [ $TC_DL = "y" ]; then + echo "Checking URL validity..." + URL=$CR_CLANG_URL + if curl --output /dev/null --silent --head --fail "$URL"; then + echo "URL exists: $URL" + echo "Downloading $CR_CLANG" + if [ ! -e $CR_TC ]; then + mkdir $CR_TC + fi + if [ ! -e $CR_CLANG ]; then + mkdir $CR_CLANG + else + # Remove incomplete + rm -rf $CR_CLANG + mkdir $CR_CLANG + fi + wget -qO- $URL | tar --use-compress-program=unzstd -xv -C $CR_CLANG + if [ $? -ne 0 ]; then + echo "Download failed or was incomplete" + echo "Setup Compiler and try again" + exit 0; + fi + # Neutron Needs patches + if [ $CR_COMPILER = "5" ] || [ $CR_COMPILER = "6" ]; then + cd $CR_CLANG + bash <(curl -s "https://raw.githubusercontent.com/Neutron-Toolchains/antman/main/antman") --patch=glibc + cd $CR_DIR + fi + echo "Compiler Downloaded." + else + echo "Invalid URL: $URL" + exit 0; + fi + else + echo " Aborting " + echo " Setup Compiler and try again" + exit 0; + fi + fi +else + if [ ! -d "$CR_CLANG/bin" ] || [ ! -d "$CR_CLANG/lib" ]; then + echo "clang-custom compiler is missing in $CR_TC/clang-custom" + exit 0; + fi +fi + +# Clang Features (18 and higher) +if [ $CR_COMPILER -ge 3 ]; then +export CONFIG_THINLTO=y +export CONFIG_UNIFIEDLTO=y +export CONFIG_LLVM_MLGO_REGISTER=y +export CONFIG_LLVM_POLLY=y +export CONFIG_LLVM_DFA_JUMP_THREAD=y +fi + +export PATH=$CR_CLANG/bin:$CR_CLANG/lib:${PATH} +export CC=$CR_CLANG/bin/clang +export REAL_CC=$CR_CLANG/bin/clang +export LD=$CR_CLANG/bin/ld.lld +export AR=$CR_CLANG/bin/llvm-ar +export NM=$CR_CLANG/bin/llvm-nm +export OBJCOPY=$CR_CLANG/bin/llvm-objcopy +export OBJDUMP=$CR_CLANG/bin/llvm-objdump +export READELF=$CR_CLANG/bin/llvm-readelf +export STRIP=$CR_CLANG/bin/llvm-strip +export LLVM=1 +export KALLSYMS_EXTRA_PASS=1 +export ARCH=arm64 && export SUBARCH=arm64 +compile="make ARCH=arm64 CC=clang" +CR_COMPILER_ARG="$CR_CLANG" +} + +# Clean-up Function + +BUILD_CLEAN() +{ +if [[ "$CR_CLEAN" =~ ^[yY]$ ]]; then + $compile clean && $compile mrproper + rm -r -f $CR_DTB + rm -r -f $CR_KERNEL + rm -rf $CR_DTS/.*.tmp + rm -rf $CR_DTS/.*.cmd + rm -rf $CR_DTS/*.dtb + rm -rf $CR_DIR/.config + rm -rf $CR_OUT/*.img + rm -rf $CR_OUT/*.zip +else + rm -r -f $CR_DTB + rm -r -f $CR_KERNEL + rm -rf $CR_DTS/.*.tmp + rm -rf $CR_DTS/.*.cmd + rm -rf $CR_DTS/*.dtb + rm -rf $CR_DIR/.config + rm -rf $CR_DIR/.version +fi +} + +# Kernel Name Function + +BUILD_IMAGE_NAME() +{ + CR_IMAGE_NAME=$CR_NAME-$CR_VERSION-$CR_VARIANT-$CR_DATE + zver=$CR_NAME-$CR_VERSION-$CR_DATE + +} + +# Build options +BUILD_OPTIONS() +{ + # KSU Version + KSU_VERSION=$( [ -f "drivers/kernelsu/Makefile" ] && grep -oP '(?<=-DKSU_VERSION=)[0-9]+' drivers/kernelsu/Makefile ) + echo "----------------------------------------------" + echo " Apollo Kernel Build Options " + echo " " + echo " Kernel - $CR_IMAGE_NAME" + echo " Device - $CR_VARIANT" + echo " Compiler - $CR_COMPILER_ARG" + if [[ "$CR_CLEAN" =~ ^[yY]$ ]]; then + echo " Env - Clean Build" + else + echo " Env - Dirty Build" + fi + if [ $CR_SELINUX = "1" ]; then + echo " SELinux - Permissive" + else + echo " SELinux - Enforcing" + fi + if [[ "$CR_KSU" =~ ^[yY]$ ]]; then + if [ -n "$KSU_VERSION" ]; then + echo " KernelSU - Version: $KSU_VERSION" + else + echo " KernelSU - Enabled" + fi + else + echo " KernelSU - Disabled" + fi + echo " " +} + +# Config Generation Function + +BUILD_GENERATE_CONFIG() +{ + # Only use for devices that are unified with 2 or more configs + echo "----------------------------------------------" + echo " Generating defconfig for $CR_VARIANT" + echo " " + # Respect CLEAN build rules + BUILD_CLEAN + if [ -e $CR_DEFCONFIG/tmp_defconfig ]; then + echo " Clean-up old config " + rm -rf $CR_DEFCONFIG/tmp_defconfig + fi + echo " Base - $CR_CONFIG " + cp -f $CR_DEFCONFIG/$CR_CONFIG $CR_DEFCONFIG/tmp_defconfig + # Split-config support for devices with unified defconfigs (Universal + device) + if [ $CR_CONFIG_SPLIT = NULL ]; then + echo " No split config support! " + else + echo " Device - $CR_CONFIG_SPLIT " + cat $CR_DEFCONFIG/$CR_CONFIG_SPLIT >> $CR_DEFCONFIG/tmp_defconfig + fi + # Regional Config + echo " Region - $CR_CONFIG_REGION " + cat $CR_DEFCONFIG/$CR_CONFIG_REGION >> $CR_DEFCONFIG/tmp_defconfig + # Apollo Custom defconfig + echo " Apollo - $CR_CONFIG_APOLLO " + cat $CR_DEFCONFIG/$CR_CONFIG_APOLLO >> $CR_DEFCONFIG/tmp_defconfig + # Selinux Never Enforce all targets + if [ $CR_SELINUX = "1" ]; then + echo " Building SELinux Permissive Kernel" + echo "CONFIG_ALWAYS_PERMISSIVE=y" >> $CR_DEFCONFIG/tmp_defconfig + CR_IMAGE_NAME=$CR_IMAGE_NAME-Permissive + zver=$zver-Permissive + else + echo " Building SELinux Enforced Kernel" + fi + if [[ "$CR_KSU" =~ ^[yY]$ ]]; then + echo " Building KernelSU" + echo "CONFIG_KSU=y" >> $CR_DEFCONFIG/tmp_defconfig + CR_IMAGE_NAME=$CR_IMAGE_NAME-KSU + zver=$zver-KernelSU + else + echo "# CONFIG_KSU is not set" >> $CR_DEFCONFIG/tmp_defconfig + fi + echo " $CR_VARIANT config generated " + echo " " + CR_CONFIG=tmp_defconfig +} + +# Kernel information Function +BUILD_OUT() +{ +# KSU Version + KSU_VERSION=$( [ -f "drivers/kernelsu/Makefile" ] && grep -oP '(?<=-DKSU_VERSION=)[0-9]+' drivers/kernelsu/Makefile ) + echo "----------------------------------------------" + echo " Kernel - $CR_IMAGE_NAME" + echo " Device - $CR_VARIANT" + echo " Compiler - $CR_COMPILER_ARG" + if [[ "$CR_CLEAN" =~ ^[yY]$ ]]; then + echo " Env - Clean Build" + else + echo " Env - Dirty Build" + fi + if [ $CR_SELINUX = "1" ]; then + echo " SELinux - Permissive" + else + echo " SELinux - Enforcing" + fi + echo " KernelSU - Version: $KSU_VERSION" + echo "----------------------------------------------" + echo "$CR_VARIANT kernel build finished." + echo "Compiled DTB Size = $sizdT Kb" + echo "Kernel Image Size = $sizT Kb" + echo "Boot Image Size = $sizkT Kb" + echo "$CR_PRODUCT/$CR_IMAGE_NAME.img Ready" + echo "Press Any key to end the script" + echo "----------------------------------------------" +} + +# Kernel Compile Function +BUILD_ZIMAGE() +{ + echo "----------------------------------------------" + echo " " + echo "Building zImage for $CR_VARIANT" + export LOCALVERSION=-$CR_IMAGE_NAME + echo "Make $CR_CONFIG" + $compile $CR_CONFIG + echo "Make Kernel with $CR_COMPILER_ARG" + $compile -j$CR_JOBS + if [ ! -e $CR_KERNEL ]; then + exit 0; + echo "Image Failed to Compile" + echo " Abort " + fi + du -k "$CR_KERNEL" | cut -f1 >sizT + sizT=$(head -n 1 sizT) + rm -rf sizT + echo " " + echo "----------------------------------------------" +} + +# Device-Tree compile Function +BUILD_DTB() +{ + echo "----------------------------------------------" + echo " " + echo "Checking DTB for $CR_VARIANT" + # This source does compiles dtbs while doing Image + if [ ! -e $CR_DTB ]; then + exit 0; + echo "DTB Failed to Compile" + echo " Abort " + else + echo "DTB Compiled at $CR_DTB" + fi + rm -rf $CR_DTS/.*.tmp + rm -rf $CR_DTS/.*.cmd + rm -rf $CR_DTS/*.dtb + du -k "$CR_DTB" | cut -f1 >sizdT + sizdT=$(head -n 1 sizdT) + rm -rf sizdT + echo " " + echo "----------------------------------------------" +} + +# Ramdisk Function +PACK_BOOT_IMG() +{ + echo "----------------------------------------------" + echo " " + echo "Building Boot.img for $CR_VARIANT" + # Copy Ramdisk + cp -rf $CR_RAMDISK/* $CR_AIK + # Move Compiled kernel and dtb to A.I.K Folder + mv $CR_KERNEL $CR_AIK/split_img/boot.img-zImage + mv $CR_DTB $CR_AIK/split_img/boot.img-dtb + # Create boot.img + $CR_AIK/repackimg.sh + if [ ! -e $CR_AIK/image-new.img ]; then + exit 0; + echo "Boot Image Failed to pack" + echo " Abort " + fi + # Remove red warning at boot + echo -n "SEANDROIDENFORCE" >> $CR_AIK/image-new.img + # Copy boot.img to Production folder + if [ ! -e $CR_PRODUCT ]; then + mkdir $CR_PRODUCT + fi + cp $CR_AIK/image-new.img $CR_PRODUCT/$CR_IMAGE_NAME.img + # Move boot.img to out dir + if [ ! -e $CR_OUT ]; then + mkdir $CR_OUT + fi + mv $CR_AIK/image-new.img $CR_OUT/$CR_IMAGE_NAME.img + du -k "$CR_OUT/$CR_IMAGE_NAME.img" | cut -f1 >sizkT + sizkT=$(head -n 1 sizkT) + rm -rf sizkT + echo " " + $CR_AIK/cleanup.sh + # Respect CLEAN build rules + BUILD_CLEAN +} + +# Single Target Build Function +BUILD() +{ + if [ "$CR_TARGET" = "1" ]; then + echo " Galaxy S9 INTL" + CR_CONFIG_SPLIT=$CR_CONFIG_G960 + CR_CONFIG_REGION=$CR_CONFIG_INTL + CR_VARIANT=$CR_VARIANT_G960F + export "CONFIG_MACH_EXYNOS9810_STARLTE_EUR_OPEN=y" + fi + if [ "$CR_TARGET" = "2" ]; then + echo " Galaxy S9+ INTL" + CR_CONFIG_SPLIT=$CR_CONFIG_G965 + CR_CONFIG_REGION=$CR_CONFIG_INTL + CR_VARIANT=$CR_VARIANT_G965F + export "CONFIG_MACH_EXYNOS9810_STAR2LTE_EUR_OPEN=y" + fi + if [ "$CR_TARGET" = "3" ] + then + echo " Galaxy Note9 INTL" + CR_CONFIG_SPLIT=$CR_CONFIG_N960 + CR_CONFIG_REGION=$CR_CONFIG_INTL + CR_VARIANT=$CR_VARIANT_N960F + export "CONFIG_MACH_EXYNOS9810_CROWNLTE_EUR_OPEN=y" + fi + if [ "$CR_TARGET" = "4" ]; then + echo " Galaxy S9 KOR" + CR_CONFIG_SPLIT=$CR_CONFIG_G960 + CR_CONFIG_REGION=$CR_CONFIG_KOR + CR_VARIANT=$CR_VARIANT_G960N + export "CONFIG_MACH_EXYNOS9810_STARLTE_KOR=y" + fi + if [ "$CR_TARGET" = "5" ]; then + echo " Galaxy S9+ KOR" + CR_CONFIG_SPLIT=$CR_CONFIG_G965 + CR_CONFIG_REGION=$CR_CONFIG_KOR + CR_VARIANT=$CR_VARIANT_G965N + export "CONFIG_MACH_EXYNOS9810_STAR2LTE_KOR=y" + fi + if [ "$CR_TARGET" = "6" ] + then + echo " Galaxy Note9 KOR" + CR_CONFIG_SPLIT=$CR_CONFIG_N960 + CR_CONFIG_REGION=$CR_CONFIG_KOR + CR_VARIANT=$CR_VARIANT_N960N + export "CONFIG_MACH_EXYNOS9810_CROWNLTE_KOR=y" + fi + CR_CONFIG=$CR_CONFIG_9810 + BUILD_COMPILER + BUILD_CLEAN + BUILD_IMAGE_NAME + BUILD_GENERATE_CONFIG + # Print build options + BUILD_OPTIONS + BUILD_ZIMAGE + BUILD_DTB + if [ "$CR_MKZIP" = "y" ]; then # Allow Zip Package for mass compile only + echo " Start Build ZIP Process " + PACK_KERNEL_ZIP + else + PACK_BOOT_IMG + BUILD_OUT + fi +} + +# Multi-Target Build Function +BUILD_ALL(){ +echo "----------------------------------------------" +echo " Compiling ALL targets " +CR_TARGET=1 +BUILD +export -n "CONFIG_MACH_EXYNOS9810_STARLTE_EUR_OPEN" +CR_TARGET=2 +BUILD +export -n "CONFIG_MACH_EXYNOS9810_STAR2LTE_EUR_OPEN" +CR_TARGET=3 +BUILD +export -n "CONFIG_MACH_EXYNOS9810_CROWNLTE_EUR_OPEN" +CR_TARGET=4 +BUILD +export -n "CONFIG_MACH_EXYNOS9810_STARLTE_KOR" +CR_TARGET=5 +BUILD +export -n "CONFIG_MACH_EXYNOS9810_STAR2LTE_KOR" +CR_TARGET=6 +BUILD +export -n "CONFIG_MACH_EXYNOS9810_CROWNLTE_KOR" +} + +# Preconfigured Debug build +BUILD_DEBUG(){ +echo "----------------------------------------------" +echo " DEBUG : Debug build initiated " +CR_TARGET=5 +CR_COMPILER=3 +CR_SELINUX=0 +CR_KSU="y" +CR_CLEAN="n" +echo " DEBUG : Set Build options " +echo " DEBUG : Variant : $CR_VARIANT_N960F" +echo " DEBUG : Compiler : Clang 18" +echo " DEBUG : Selinux : $CR_SELINUX Enforcing" +echo " DEBUG : Clean : $CR_CLEAN" +echo "----------------------------------------------" +BUILD +echo "----------------------------------------------" +echo " DEBUG : build completed " +echo "----------------------------------------------" +exit 0; +} + + +# Pack All Images into ZIP +PACK_KERNEL_ZIP() { +echo "----------------------------------------------" +echo " Packing ZIP " + +# Variables +CR_BASE_KERNEL=$CR_OUTZIP/floyd/G960F-kernel +CR_BASE_DTB=$CR_OUTZIP/floyd/G960F-dtb + +# Check packages +if ! dpkg-query -W -f='${Status}' bsdiff | grep "ok installed"; then + echo "bsdiff is missing and is required for ZIP Packaging." + read -p "Do you want to install bsdiff? This requires sudo privileges. (y/n) > " INSTALL_BSDIFF + if [ "$INSTALL_BSDIFF" = "y" ]; then + echo "installing bsdiff." + sudo apt update + sudo apt install -y bsdiff + if ! dpkg-query -W -f='${Status}' bsdiff | grep "ok installed"; then + echo "Failed to install bsdiff. Please try installing it manually." + exit 0; + fi + else + echo "Please install bsdiff with sudo apt install bsdiff and try again." + exit 0; + fi +fi + +# Initalize with base image (Starlte) +if [ "$CR_TARGET" = "1" ]; then # Always must run ONCE during BUILD_ALL otherwise fail. Setup directories + echo " " + echo " Kernel Zip Packager " + echo " Base Target " + echo " Clean Out directory " + echo " " + rm -rf $CR_OUTZIP + cp -r $CR_ZIP $CR_OUTZIP + echo " " + echo " Copying $CR_BASE_KERNEL " + echo " Copying $CR_BASE_DTB " + echo " " + if [ ! -e $CR_KERNEL ] || [ ! -e $CR_DTB ]; then + exit 0; + echo " Kernel not found!" + echo " Abort " + else + cp $CR_KERNEL $CR_BASE_KERNEL + cp $CR_DTB $CR_BASE_DTB + fi + # Set kernel version +fi +if [ ! "$CR_TARGET" = "1" ]; then # Generate patch files for non starlte kernels + echo " " + echo " Kernel Zip Packager " + echo " " + echo " Generating Patch kernel for $CR_VARIANT " + echo " " + if [ ! -e $CR_KERNEL ] || [ ! -e $CR_DTB ]; then + echo " Kernel not found! " + echo " Abort " + exit 0; + else + bsdiff $CR_BASE_KERNEL $CR_KERNEL $CR_OUTZIP/floyd/$CR_VARIANT-kernel + if [ ! -e $CR_OUTZIP/floyd/$CR_VARIANT-kernel ]; then + echo "ERROR: bsdiff $CR_BASE_KERNEL $CR_KERNEL $CR_OUTZIP/floyd/$CR_VARIANT-kernel Failed!" + exit 0; + fi + bsdiff $CR_BASE_DTB $CR_DTB $CR_OUTZIP/floyd/$CR_VARIANT-dtb + if [ ! -e $CR_OUTZIP/floyd/$CR_VARIANT-kernel ]; then + echo "ERROR: bsdiff $CR_BASE_KERNEL $CR_DTB $CR_OUTZIP/floyd/$CR_VARIANT-dtb Failed!" + exit 0; + fi + fi +fi +if [ "$CR_TARGET" = "6" ]; then # Final kernel build + echo " Generating ZIP Package for $CR_NAME-$CR_VERSION-$CR_DATE" + sed -i "s/fkv/$zver/g" $CR_OUTZIP/META-INF/com/google/android/update-binary + cd $CR_OUTZIP && zip -r $CR_PRODUCT/$zver.zip * && cd $CR_DIR + du -k "$CR_PRODUCT/$zver.zip" | cut -f1 >sizdz + sizdz=$(head -n 1 sizdz) + rm -rf sizdz + echo " " + echo "----------------------------------------------" + echo "$CR_NAME kernel build finished." + echo "Compiled Package Size = $sizdz Kb" + echo "$zver.zip Ready" + echo "Press Any key to end the script" + echo "----------------------------------------------" +fi +} + +# Main Menu +clear +echo "----------------------------------------------" +echo "$CR_NAME $CR_VERSION Build Script $CR_DATE" +if [ "$1" = "-d" ]; then +BUILD_DEBUG +fi +echo " " +echo " " +echo "1) starlte" " 2) star2lte" " 3) crownlte" +echo "4) starltekor" "5) star2ltekor" "6) crownltekor" +echo " " +echo "7) Build All/ZIP" "8) Abort" +echo "----------------------------------------------" +read -p "Please select your build target (1-8) > " CR_TARGET +echo "----------------------------------------------" +echo " " +echo "1) Clang 12 (LLVM +LTO)" +echo "2) Clang 14 (LLVM +LTO)" +echo "3) Clang 18 (LLVM +LTO PGO Bolt MLGO Polly)" +echo "4) Clang 19 (^)" +echo "5) Neutron Clang 18 (^)" +echo "6) Neutron Clang 19 (^)" +echo "7) Neutron Clang 20 (BETA)" +echo "8) Other (Apollo/toolchain/clang-custom)" +echo " " +read -p "Please select your compiler (1-7) > " CR_COMPILER +echo " " +echo "1) SELinux Permissive " "2) SELinux Enforcing" +echo " " +read -p "Please select your SElinux mode (1-2) > " CR_SELINUX +echo " " +read -p "Enable KernelSU? (y/n) > " CR_KSU +echo " " +if [ "$CR_TARGET" = "8" ]; then +echo "Build Aborted" +exit +fi +echo " " +read -p "Clean Builds? (y/n) > " CR_CLEAN +echo " " + +# Validate options +if ! [[ "$CR_TARGET" =~ ^[1-8]$ ]]; then + CR_TARGET=$DEFAULT_TARGET + echo " No target selected, defaulting to star2ltekor" +fi + +if ! [[ "$CR_COMPILER" =~ ^[1-7]$ ]]; then + CR_COMPILER=$DEFAULT_COMPILER +fi + +if ! [[ "$CR_SELINUX" =~ ^[1-2]$ ]]; then + CR_SELINUX=$DEFAULT_SELINUX +fi + +if ! [[ "$CR_KSU" =~ ^[yYnN]$ ]]; then + CR_KSU=$DEFAULT_KSU +fi +if ! [[ "$CR_CLEAN" =~ ^[yYnN]$ ]]; then + CR_CLEAN=$DEFAULT_CLEAN +fi + +# Call functions +if [ "$CR_TARGET" = "7" ]; then +echo " " +read -p "Build Flashable ZIP ? (y/n) > " CR_MKZIP +echo " " +BUILD_ALL +else +BUILD +fi diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index 4b292ec72772..5035eb509e3c 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -1088,7 +1088,6 @@ config ARM64_MODULE_CMODEL_LARGE config ARM64_MODULE_PLTS bool - select ARM64_MODULE_CMODEL_LARGE select HAVE_MOD_ARCH_SPECIFIC config RELOCATABLE @@ -1122,12 +1121,12 @@ config RANDOMIZE_BASE If unsure, say N. config RANDOMIZE_MODULE_REGION_FULL - bool "Randomize the module region independently from the core kernel" + bool "Randomize the module region over a 4 GB range" depends on RANDOMIZE_BASE && !DYNAMIC_FTRACE && !LTO_CLANG default y help - Randomizes the location of the module region without considering the - location of the core kernel. This way, it is impossible for modules + Randomizes the location of the module region inside a 4 GB window + covering the core kernel. This way, it is less likely for modules to leak information about the location of core kernel data structures but it does imply that function calls between modules and the core kernel will need to be resolved via veneers in the module PLT. diff --git a/arch/arm64/boot/dts/exynos/exynos9810-crownlte_eur_open_26.dts b/arch/arm64/boot/dts/exynos/exynos9810-crownlte_eur_open_26.dts index 0cbfbeb7e084..b2a44204d04a 100644 --- a/arch/arm64/boot/dts/exynos/exynos9810-crownlte_eur_open_26.dts +++ b/arch/arm64/boot/dts/exynos/exynos9810-crownlte_eur_open_26.dts @@ -47,6 +47,7 @@ }; tima_region@0xB8000000 { + status = "disabled"; compatible = "removed-dma-pool"; reg = <0x0 0xb8000000 0x200000>; linux,phandle = <0x1a2>; @@ -141,8 +142,7 @@ camera { compatible = "exynos8890-ion,camera"; ion,recyclable; - size = <0x1b800000>; - alloc-ranges = <0x0 0x40000000 0xc0000000>; + reg = <0x8 0x80000000 0x21c00000>; alignment = <0x0 0x400000>; id = <0xa>; }; @@ -156,6 +156,7 @@ }; rkp_region@0xAF600000 { + status = "disabled"; compatible = "removed-dma-pool"; reg = <0x0 0xaf600000 0x2400000>; linux,phandle = <0x1a3>; @@ -4313,156 +4314,442 @@ input_booster { status = "okay"; compatible = "input_booster"; - #address-cells = <0x1>; - #size-cells = <0x0>; + max_resource_count = [37 00]; + #address-cells = <1>; + #size-cells = <0>; + ib_release_values = "0,0,0,0,0,0,0"; booster_key@1 { - input_booster,label = "KEY"; - input_booster,type = <0x0>; - input_booster,levels = <0x1>; - input_booster,cpu_freqs = <0x104410>; - input_booster,hmp_boost = <0x1>; - input_booster,kfc_freqs = <0x0>; - input_booster,mif_freqs = <0x0>; - input_booster,int_freqs = <0x0>; - input_booster,dma_latency = <0x0>; - input_booster,head_times = <0x1f4>; - input_booster,tail_times = <0x1f4>; - input_booster,phase_times = <0x0>; + input_booster,label = "key"; + input_booster,type = <0>; /* BOOSTER_DEVICE_KEY */ + /* Time table */ + input_booster,head_time = <500>; + input_booster,tail_time = <500>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 0>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <0 0>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 0>; }; + resource@6 { + resource,label = "ucc"; + resource,value = <1 0>; + }; + }; + }; booster_key@2 { - input_booster,label = "TOUCHKEY"; - input_booster,type = <0x1>; - input_booster,levels = <0x1>; - input_booster,cpu_freqs = <0x104410>; - input_booster,hmp_boost = <0x1>; - input_booster,kfc_freqs = <0x0>; - input_booster,mif_freqs = <0x0>; - input_booster,int_freqs = <0x0>; - input_booster,dma_latency = <0x0>; - input_booster,head_times = <0x0>; - input_booster,tail_times = <0xc8>; - input_booster,phase_times = <0x0>; + input_booster,label = "touchkey"; + input_booster,type = <1>; /* BOOSTER_DEVICE_TOUCHKEY */ + /* Time table */ + input_booster,head_time = <0>; + input_booster,tail_time = <200>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 0>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <0 0>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; }; + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 0>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 0>; + }; + }; + }; booster_key@3 { - input_booster,label = "TOUCH"; - input_booster,type = <0x2>; - input_booster,levels = <0x1 0x2 0x3>; - input_booster,cpu_freqs = <0x104410 0x104410 0xd1790>; - input_booster,hmp_boost = <0x1 0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0 0x0>; - input_booster,int_freqs = <0x0 0x0 0x0>; - input_booster,dma_latency = <0x0 0x0 0x0>; - input_booster,head_times = <0x82 0x82 0x0>; - input_booster,tail_times = <0x0 0x0 0x1f4>; - input_booster,phase_times = <0x0 0x0 0x0>; - }; - - booster_key@4 { - input_booster,label = "MULTITOUCH"; - input_booster,type = <0x3>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0xd1790>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x3e8 0x0>; - input_booster,tail_times = <0x0 0x1f4>; - input_booster,phase_times = <0x0 0x0>; + input_booster,label = "touch"; + input_booster,type = <2>; /* BOOSTER_DEVICE_TOUCH */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <500>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; }; + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; + booster_key@4 { // Input Booster + + input_booster,label = "multitouch"; + input_booster,type = <3>; /* BOOSTER_DEVICE_MULTITOUCH */ + /* Time table */ + input_booster,head_time = <1000>; + input_booster,tail_time = <500>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@5 { - input_booster,label = "KEYBOARD"; - input_booster,type = <0x4>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0x104410>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x82 0x82>; - input_booster,tail_times = <0x0 0x0>; - input_booster,phase_times = <0x0 0x0>; + input_booster,label = "keyboard"; + input_booster,type = <4>; /* BOOSTER_DEVICE_KEYBOARD */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <0>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; }; + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@6 { - input_booster,label = "MOUSE"; - input_booster,type = <0x5>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0xd1790>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x82 0x0>; - input_booster,tail_times = <0x0 0x1f4>; - input_booster,phase_times = <0x0 0x0>; + input_booster,label = "mouse"; + input_booster,type = <5>; /* BOOSTER_DEVICE_MOUSE */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <500>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; }; + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@7 { - input_booster,label = "MOUSE WHEEL"; - input_booster,type = <0x6>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0x0>; - input_booster,hmp_boost = <0x1 0x0>; - input_booster,kfc_freqs = <0xcb200 0x0>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x82 0x0>; - input_booster,tail_times = <0x0 0x0>; - input_booster,phase_times = <0x0 0x0>; + input_booster,label = "mouse_wheel"; + input_booster,type = <6>; /* BOOSTER_DEVICE_MOUSE */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <0>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; }; + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@8 { - input_booster,label = "PEN HOVER"; - input_booster,type = <0x7>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0xd1790>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x82 0x0>; - input_booster,tail_times = <0x0 0x1f4>; - input_booster,phase_times = <0x0 0x0>; + input_booster,label = "pen_hover"; + input_booster,type = <7>; /* BOOSTER_DEVICE_MOUSE */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <500>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; }; + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@9 { - input_booster,label = "PEN"; - input_booster,type = <0x8>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x11da50 0xd1790>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,bimc_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0xc8 0x0>; - input_booster,tail_times = <0x0 0x258>; + input_booster,label = "pen"; + input_booster,type = <8>; /* BOOSTER_DEVICE_MOUSE */ + /* Time table */ + input_booster,head_time = <200>; + input_booster,tail_time = <600>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1170000 858000>; }; + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@10 { - input_booster,label = "KEY_TWO"; - input_booster,type = <0x9>; - input_booster,levels = <0x1>; - input_booster,cpu_freqs = <0x166a48>; - input_booster,hmp_boost = <0x1>; - input_booster,kfc_freqs = <0x101148>; - input_booster,mif_freqs = <0x0>; - input_booster,int_freqs = <0x0>; - input_booster,dma_latency = <0x0>; - input_booster,head_times = <0x2bc>; - input_booster,tail_times = <0x2bc>; - input_booster,phase_times = <0x0>; + input_booster,label = "key_two"; + input_booster,type = <9>; /* BOOSTER_DEVICE_KEY */ + /* Time table */ + input_booster,head_time = <700>; + input_booster,tail_time = <700>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1469000 0>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <1053000 0>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; // Input Booster - + /* If you need to add new key type, add it this position */ }; exynos-snapshot { @@ -5009,7 +5296,7 @@ gpu_dynamic_abb = <0x0>; gpu_early_clk_gating = <0x0>; gpu_dvs = <0x0>; - gpu_inter_frame_pm = <0x1>; + gpu_inter_frame_pm = <0x0>; gpu_perf_gathering = <0x0>; gpu_runtime_pm_delay_time = <0x32>; gpu_dvfs_polling_time = <0x1e>; @@ -8383,7 +8670,8 @@ status = "ok"; ip_ver = <0x11>; clock_rate = <0x17d78400>; - min_rate = <0x186a0>; + min_rate = <0x186a0>; + enc_ts_delta = <0x1 0x211208>; num_qos_steps = <0x8>; max_qos_steps = <0x9>; max_mb = <0x489732>; @@ -10342,7 +10630,7 @@ boost_table = <0x14 0xd1790 0xf 0xeadd0 0x5 0x133dc8 0x0>; up_rate_limit_table = <0x5>; down_rate_limit_table = <0x5>; - upscale_ratio_table = <0x32 0xeadd0 0x41>; + upscale_ratio_table = <0x32 0xeadd0 0x41 0x166a48 0x50>; }; }; @@ -11111,58 +11399,78 @@ default_int = <0x1a1f8>; default_hpg = <0x1>; front_preview_int_cam = <0x9c400>; - front_preview_cam = <0x927c0>; + front_preview_cam = <0x9c400>; front_preview_mif = <0xf78f0>; front_preview_int = <0x1a1f8>; front_preview_hpg = <0x1>; front_preview_full_int_cam = <0xa1220>; - front_preview_full_cam = <0x927c0>; + front_preview_full_cam = <0x9c400>; front_preview_full_mif = <0xf78f0>; front_preview_full_int = <0x1a1f8>; front_preview_full_hpg = <0x1>; front_capture_int_cam = <0xa1220>; - front_capture_cam = <0x927c0>; - front_capture_mif = <0xf78f0>; + front_capture_cam = <0x9c400>; + front_capture_mif = <0x1fefc8>; front_capture_int = <0x1a1f8>; front_capture_hpg = <0x1>; front_video_int_cam = <0x9c400>; - front_video_cam = <0x927c0>; + front_video_cam = <0x9c400>; front_video_mif = <0xf78f0>; front_video_int = <0x1a1f8>; front_video_hpg = <0x1>; front_video_whd_int_cam = <0x9c400>; - front_video_whd_cam = <0x927c0>; + front_video_whd_cam = <0x9c400>; front_video_whd_mif = <0xf78f0>; front_video_whd_int = <0x1a1f8>; front_video_whd_hpg = <0x1>; + front_video_uhd_int_cam = <0xa1220>; + front_video_uhd_cam = <0x9c400>; + front_video_uhd_mif = <0xf78f0>; + front_video_uhd_int = <0x1a1f8>; + front_video_uhd_hpg = <0x1>; + front_video_fhd_60fps_int_cam = <0xa1220>; + front_video_fhd_60fps_cam = <0x9c400>; + front_video_fhd_60fps_mif = <0xf78f0>; + front_video_fhd_60fps_int = <0x1a1f8>; + front_video_fhd_60fps_hpg = <0x1>; front_video_capture_int_cam = <0xa1220>; - front_video_capture_cam = <0x94ed0>; - front_video_capture_mif = <0xf78f0>; + front_video_capture_cam = <0x9c400>; + front_video_capture_mif = <0x1fefc8>; front_video_capture_int = <0x1a1f8>; front_video_capture_hpg = <0x1>; front_video_whd_capture_int_cam = <0xa1220>; - front_video_whd_capture_cam = <0x927c0>; - front_video_whd_capture_mif = <0xf78f0>; + front_video_whd_capture_cam = <0x9c400>; + front_video_whd_capture_mif = <0x1fefc8>; front_video_whd_capture_int = <0x1a1f8>; front_video_whd_capture_hpg = <0x1>; + front_video_uhd_capture_int_cam = <0xa1220>; + front_video_uhd_capture_cam = <0x9c400>; + front_video_uhd_capture_mif = <0x1fefc8>; + front_video_uhd_capture_int = <0x1a1f8>; + front_video_uhd_capture_hpg = <0x1>; + front_video_fhd_60fps_capture_int_cam = <0xa1220>; + front_video_fhd_60fps_capture_cam = <0x9c400>; + front_video_fhd_60fps_capture_mif = <0x1fefc8>; + front_video_fhd_60fps_capture_int = <0x1a1f8>; + front_video_fhd_60fps_capture_hpg = <0x1>; front_vt1_int_cam = <0x9c400>; - front_vt1_cam = <0x927c0>; + front_vt1_cam = <0x9c400>; front_vt1_mif = <0xf78f0>; front_vt1_int = <0x1a1f8>; front_vt1_hpg = <0x1>; front_vt2_int_cam = <0x9c400>; - front_vt2_cam = <0x927c0>; + front_vt2_cam = <0x9c400>; front_vt2_mif = <0xf78f0>; front_vt2_int = <0x1a1f8>; front_vt2_hpg = <0x1>; front_vt4_int_cam = <0x9c400>; - front_vt4_cam = <0x927c0>; + front_vt4_cam = <0x9c400>; front_vt4_mif = <0xf78f0>; front_vt4_int = <0x1a1f8>; front_vt4_hpg = <0x1>; front_preview_high_speed_fps_int_cam = <0xa1220>; - front_preview_high_speed_fps_cam = <0x94ed0>; - front_preview_high_speed_fps_mif = <0xf78f0>; + front_preview_high_speed_fps_cam = <0x9c400>; + front_preview_high_speed_fps_mif = <0x14a140>; front_preview_high_speed_fps_int = <0x1a1f8>; front_preview_high_speed_fps_hpg = <0x1>; rear2_preview_fhd_int_cam = <0x9c400>; @@ -11172,7 +11480,7 @@ rear2_preview_fhd_hpg = <0x1>; rear2_capture_int_cam = <0xa1220>; rear2_capture_cam = <0x9c400>; - rear2_capture_mif = <0xf78f0>; + rear2_capture_mif = <0x1fefc8>; rear2_capture_int = <0x1a1f8>; rear2_capture_hpg = <0x1>; rear2_video_fhd_int_cam = <0xa1220>; @@ -11182,12 +11490,12 @@ rear2_video_fhd_hpg = <0x1>; rear2_video_fhd_capture_int_cam = <0xa1220>; rear2_video_fhd_capture_cam = <0x9c400>; - rear2_video_fhd_capture_mif = <0x14a140>; + rear2_video_fhd_capture_mif = <0x1fefc8>; rear2_video_fhd_capture_int = <0x1a1f8>; rear2_video_fhd_capture_hpg = <0x1>; rear_preview_fhd_int_cam = <0x9c400>; rear_preview_fhd_cam = <0x9c400>; - rear_preview_fhd_mif = <0xf78f0>; + rear_preview_fhd_mif = <0x177bb8>; rear_preview_fhd_int = <0x1a1f8>; rear_preview_fhd_hpg = <0x1>; rear_preview_whd_int_cam = <0x9c400>; @@ -11212,7 +11520,7 @@ rear_preview_full_hpg = <0x1>; rear_capture_int_cam = <0xa1220>; rear_capture_cam = <0x9c400>; - rear_capture_mif = <0xf78f0>; + rear_capture_mif = <0x1fefc8>; rear_capture_int = <0x1a1f8>; rear_capture_hpg = <0x1>; rear_video_fhd_int_cam = <0xa1220>; @@ -11237,37 +11545,37 @@ rear_video_uhd_60fps_hpg = <0x1>; rear_video_fhd_capture_int_cam = <0xa1220>; rear_video_fhd_capture_cam = <0x9c400>; - rear_video_fhd_capture_mif = <0x14a140>; + rear_video_fhd_capture_mif = <0x1fefc8>; rear_video_fhd_capture_int = <0x1a1f8>; rear_video_fhd_capture_hpg = <0x1>; rear_video_whd_capture_int_cam = <0xa1220>; rear_video_whd_capture_cam = <0x9c400>; - rear_video_whd_capture_mif = <0x14a140>; + rear_video_whd_capture_mif = <0x1fefc8>; rear_video_whd_capture_int = <0x1a1f8>; rear_video_whd_capture_hpg = <0x1>; rear_video_uhd_capture_int_cam = <0xa1220>; rear_video_uhd_capture_cam = <0x9c400>; - rear_video_uhd_capture_mif = <0x14a140>; + rear_video_uhd_capture_mif = <0x1fefc8>; rear_video_uhd_capture_int = <0x1a1f8>; rear_video_uhd_capture_hpg = <0x1>; - dual_preview_int_cam = <0x9c400>; + dual_preview_int_cam = <0xa1220>; dual_preview_cam = <0x9c400>; - dual_preview_mif = <0xf78f0>; + dual_preview_mif = <0x177bb8>; dual_preview_int = <0x1a1f8>; dual_preview_hpg = <0x1>; dual_capture_int_cam = <0xa1220>; dual_capture_cam = <0x9c400>; - dual_capture_mif = <0xf78f0>; + dual_capture_mif = <0x1fefc8>; dual_capture_int = <0x1a1f8>; dual_capture_hpg = <0x1>; dual_video_fhd_int_cam = <0xa1220>; dual_video_fhd_cam = <0x9c400>; - dual_video_fhd_mif = <0xf78f0>; + dual_video_fhd_mif = <0x14a140>; dual_video_fhd_int = <0x1a1f8>; dual_video_fhd_hpg = <0x1>; dual_video_fhd_capture_int_cam = <0xa1220>; dual_video_fhd_capture_cam = <0x9c400>; - dual_video_fhd_capture_mif = <0x14a140>; + dual_video_fhd_capture_mif = <0x1fefc8>; dual_video_fhd_capture_int = <0x1a1f8>; dual_video_fhd_capture_hpg = <0x1>; dual_video_uhd_int_cam = <0xa1220>; @@ -11277,17 +11585,17 @@ dual_video_uhd_hpg = <0x1>; dual_video_uhd_capture_int_cam = <0xa1220>; dual_video_uhd_capture_cam = <0x9c400>; - dual_video_uhd_capture_mif = <0x14a140>; + dual_video_uhd_capture_mif = <0x1fefc8>; dual_video_uhd_capture_int = <0x1a1f8>; dual_video_uhd_capture_hpg = <0x1>; dual_sync_preview_int_cam = <0xa1220>; dual_sync_preview_cam = <0x9c400>; - dual_sync_preview_mif = <0x177bb8>; + dual_sync_preview_mif = <0x1b5fd0>; dual_sync_preview_int = <0x1a1f8>; dual_sync_preview_hpg = <0x1>; dual_sync_capture_int_cam = <0xa3930>; dual_sync_capture_cam = <0x9c400>; - dual_sync_capture_mif = <0x1b5fd0>; + dual_sync_capture_mif = <0x1fefc8>; dual_sync_capture_int = <0x1a1f8>; dual_sync_capture_hpg = <0x1>; dual_sync_preview_whd_int_cam = <0xa6040>; @@ -11296,32 +11604,32 @@ dual_sync_preview_whd_int = <0x1a1f8>; dual_sync_preview_whd_hpg = <0x1>; dual_sync_whd_capture_int_cam = <0xa6040>; - dual_sync_whd_capture_cam = <0xa6040>; - dual_sync_whd_capture_mif = <0x1b5fd0>; + dual_sync_whd_capture_cam = <0x9c400>; + dual_sync_whd_capture_mif = <0x1fefc8>; dual_sync_whd_capture_int = <0x1a1f8>; dual_sync_whd_capture_hpg = <0x1>; dual_sync_video_fhd_int_cam = <0xa6040>; - dual_sync_video_fhd_cam = <0xa6040>; + dual_sync_video_fhd_cam = <0x9c400>; dual_sync_video_fhd_mif = <0x177bb8>; dual_sync_video_fhd_int = <0x1a1f8>; dual_sync_video_fhd_hpg = <0x1>; dual_sync_video_fhd_capture_int_cam = <0xa6040>; - dual_sync_video_fhd_capture_cam = <0xa6040>; - dual_sync_video_fhd_capture_mif = <0x1b5fd0>; + dual_sync_video_fhd_capture_cam = <0x9c400>; + dual_sync_video_fhd_capture_mif = <0x1fefc8>; dual_sync_video_fhd_capture_int = <0x1a1f8>; dual_sync_video_fhd_capture_hpg = <0x1>; dual_sync_video_uhd_int_cam = <0xa6040>; - dual_sync_video_uhd_cam = <0xa6040>; + dual_sync_video_uhd_cam = <0x9c400>; dual_sync_video_uhd_mif = <0x177bb8>; dual_sync_video_uhd_int = <0x1a1f8>; dual_sync_video_uhd_hpg = <0x1>; dual_sync_video_uhd_capture_int_cam = <0xa6040>; - dual_sync_video_uhd_capture_cam = <0xa6040>; - dual_sync_video_uhd_capture_mif = <0x1b5fd0>; + dual_sync_video_uhd_capture_cam = <0x9c400>; + dual_sync_video_uhd_capture_mif = <0x1fefc8>; dual_sync_video_uhd_capture_int = <0x1a1f8>; dual_sync_video_uhd_capture_hpg = <0x1>; secure_front_int_cam = <0x9c400>; - secure_front_cam = <0x94ed0>; + secure_front_cam = <0x9c400>; secure_front_mif = <0xf78f0>; secure_front_int = <0x1a1f8>; secure_front_hpg = <0x1>; @@ -11332,7 +11640,7 @@ pip_preview_hpg = <0x1>; pip_capture_int_cam = <0xa3930>; pip_capture_cam = <0x9c400>; - pip_capture_mif = <0xf78f0>; + pip_capture_mif = <0x1fefc8>; pip_capture_int = <0x1a1f8>; pip_capture_hpg = <0x1>; pip_video_int_cam = <0xa1220>; @@ -11342,7 +11650,7 @@ pip_video_hpg = <0x1>; pip_video_capture_int_cam = <0xa3930>; pip_video_capture_cam = <0x9c400>; - pip_video_capture_mif = <0xf78f0>; + pip_video_capture_mif = <0x1fefc8>; pip_video_capture_int = <0x1a1f8>; pip_video_capture_hpg = <0x1>; preview_high_speed_fps_int_cam = <0xa1220>; @@ -11352,7 +11660,7 @@ preview_high_speed_fps_hpg = <0x1>; video_high_speed_60fps_int_cam = <0xa6040>; video_high_speed_60fps_cam = <0x9c400>; - video_high_speed_60fps_mif = <0x14a140>; + video_high_speed_60fps_mif = <0x177bb8>; video_high_speed_60fps_int = <0x1a1f8>; video_high_speed_60fps_hpg = <0x1>; video_high_speed_120fps_int_cam = <0xa1220>; @@ -11362,7 +11670,7 @@ video_high_speed_120fps_hpg = <0x1>; video_high_speed_240fps_int_cam = <0xa6040>; video_high_speed_240fps_cam = <0x9c400>; - video_high_speed_240fps_mif = <0x1b5fd0>; + video_high_speed_240fps_mif = <0x1fefc8>; video_high_speed_240fps_int = <0x1a1f8>; video_high_speed_240fps_hpg = <0x1>; video_high_speed_dualfps_int_cam = <0xa6040>; @@ -11372,7 +11680,7 @@ video_high_speed_dualfps_hpg = <0x6>; video_high_speed_60fps_capture_int_cam = <0xa6040>; video_high_speed_60fps_capture_cam = <0x9c400>; - video_high_speed_60fps_capture_mif = <0x1b5fd0>; + video_high_speed_60fps_capture_mif = <0x1fefc8>; video_high_speed_60fps_capture_int = <0x1a1f8>; video_high_speed_60fps_capture_hpg = <0x1>; ext_front_int_cam = <0xa8750>; @@ -11381,7 +11689,7 @@ ext_front_int = <0x825f0>; ext_front_hpg = <0x1>; ext_secure_int_cam = <0x9c400>; - ext_secure_cam = <0x94ed0>; + ext_secure_cam = <0x9c400>; ext_secure_mif = <0xf78f0>; ext_secure_int = <0x1a1f8>; ext_secure_hpg = <0x1>; @@ -12593,13 +12901,14 @@ status = "okay"; haptic,max_timeout = <0x2710>; haptic,multi_frequency = <0x7>; - haptic,duty = <0x9e4f 0xd314 0xa8dc 0x7ea5 0x8cb7 0x90f4 0x90f4>; - haptic,period = <0xbebc 0xfe50 0xcb73 0x9896 0xa98a 0x9896 0x9896>; + haptic,duty = <0x9ede 0xbebc 0x9896 0x7270 0x7f27 0x90f4 0x90f4>; + haptic,period = <0xbf68 0xfe50 0xcb73 0x9896 0xa98a 0x9896 0x9896>; haptic,reg2 = <0x82>; haptic,pwm_id = <0x1>; haptic,regulator_name = "VDD_MOTOR_3P3"; - haptic,normal_ratio = <0x53>; + haptic,normal_ratio = <0x4b>; haptic,overdrive_ratio = <0x5f>; + haptic,type = "LINEAR_1040"; }; sound { @@ -13458,74 +13767,264 @@ }; }; - argos { - compatible = "samsung,argos"; - #address-cells = <0x1>; + argos { + compatible = "samsung,argos"; + #address-cells = <0x1>; - boot_device@1 { - net_boost,label = "IPC"; - net_boost,node = "rmnet0 rmnet1 rmnet2 rmnet3 rmnet4 rmnet5 rmnet6 rmnet7 umts_dm0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x64 0x0 0x0 0x101148 0x0 0xce4c8 0x0 0x0 0x0 0x0 0x96 0x0 0x0 0x130b00 0x0 0xf78f0 0x0 0x0 0x0 0x0 0xc8 0x1d5ba0 0x0 0x19c990 0x0 0x1b5fd0 0x0 0x0 0x0 0x0>; - }; + boot_device@1 { + net_boost,label = "UFS"; + net_boost,node = [00]; + net_boost,sysnode = "/sys/class/scsi_host/host0/transferred_cnt"; - boot_device@2 { - net_boost,label = "CLAT"; - net_boost,node = "clat clat4 v4-rmnet0 v4-rmnet1 v4-rmnet2 v4-rmnet3 v4-rmnet4 v4-rmnet5 v4-rmnet6 v4-rmnet7"; - net_boost,table_size = <0x5>; - net_boost,table = <0x1 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x64 0x104410 0x0 0x0 0x0 0xf78f0 0x0 0x0 0x0 0x0 0xc8 0x110b48 0x0 0x0 0x0 0x1b5fd0 0x0 0x0 0x0 0x0 0x12c 0x133dc8 0x0 0x0 0x0 0x1b5fd0 0x0 0x0 0x0 0x0 0x190 0x166a48 0x0 0x0 0x0 0x1b5fd0 0x0 0x0 0x0 0x0>; - }; + net_boost,table { - boot_device@3 { - net_boost,label = "UFS"; - net_boost,node = [00]; - net_boost,sysnode = "/sys/class/scsi_host/host0/transferred_cnt"; - net_boost,table_size = <0x2>; - net_boost,table = <0x70 0x0 0x0 0x163780 0x0 0x14a140 0x0 0x0 0x0 0x0 0x320 0x104410 0x0 0x163780 0x0 0x177bb8 0x0 0x0 0x0 0x1>; - }; + level_0 { + threshold = <0x190>; + lit_min = <0x163780>; + mif = <0x14a140>; + }; - boot_device@4 { - net_boost,label = "WIFI"; - net_boost,node = "wlan0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x96 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0xc8 0x0 0x0 0x0 0x0 0x0 0x0 0x1 0x1 0x1 0x12c 0x0 0x0 0x0 0x0 0x0 0x0 0x1 0x1 0x1>; - }; + level_1 { + threshold = <0x320>; + big_min = <0x104410>; + lit_min = <0x163780>; + mif = <0x177bb8>; + hmp_boost = "enable"; + }; + }; + }; - boot_device@5 { - net_boost,label = "WIFI TX"; - net_boost,node = "wlan0"; - net_boost,table_size = <0x4>; - net_boost,table = <0x3c 0x166a48 0x0 0x163780 0x0 0x0 0x0 0x0 0x0 0x0 0x96 0x19c990 0x0 0x19c990 0x0 0x0 0x0 0x0 0x0 0x0 0xc8 0x1d5ba0 0x0 0x1b5fd0 0x0 0x14a140 0x61a80 0x1 0x1 0x1 0x12c 0x1e8c50 0x0 0x1b5fd0 0x0 0x1b5fd0 0x825f0 0x1 0x1 0x1>; - }; + boot_device@2 { + net_boost,label = "WIFI TX"; + net_boost,node = "wlan0"; + net_boost,slowdown; - boot_device@6 { - net_boost,label = "WIFI RX"; - net_boost,node = "wlan0"; - net_boost,table_size = <0x4>; - net_boost,table = <0x64 0x11da50 0x0 0x101148 0x0 0x0 0x0 0x0 0x0 0x0 0x96 0x166a48 0x0 0x130b00 0x0 0x0 0x0 0x0 0x0 0x0 0xc8 0x19c990 0x0 0x130b00 0x0 0xce4c8 0x61a80 0x1 0x1 0x1 0x12c 0x1d5ba0 0x0 0x163780 0x0 0x14a140 0x825f0 0x1 0x1 0x1>; - }; + net_boost,table { - boot_device@7 { - net_boost,label = "P2P"; - net_boost,node = "p2p-wlan0-0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x1e 0x1174c0 0x0 0x11da50 0x0 0x0 0x0 0x0 0x0 0x0 0x5a 0x1c9080 0x0 0x183350 0x0 0x0 0x3e418 0x0 0x0 0x0 0x12c 0x1fbd00 0x0 0x183350 0x0 0x854d0 0x3e418 0x1 0x1 0x1>; - }; + level_0 { + threshold = <0x3c>; + big_min = <0x166a48>; + lit_min = <0x163780>; + }; - boot_device@8 { - net_boost,label = "NAN"; - net_boost,node = "aware_data0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x1e 0x1174c0 0x0 0x11da50 0x0 0x0 0x0 0x0 0x0 0x0 0x5a 0x1c9080 0x0 0x183350 0x0 0x0 0x3e418 0x0 0x0 0x0 0x12c 0x1fbd00 0x0 0x183350 0x0 0x854d0 0x3e418 0x1 0x1 0x1>; - }; + level_1 { + threshold = <0x96>; + big_min = <0x19c990>; + lit_min = <0x19c990>; + }; - boot_device@9 { - net_boost,label = "USB"; - net_boost,node = "rndis0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x1 0x0 0xc8 0x0 0x0 0x163780 0x0 0x177fa0 0x0 0x0 0x1 0x0 0x12c 0x0 0x0 0x19c990 0x0 0x1b5fd0 0x825f0 0x0 0x1 0x0>; - }; - }; + level_2 { + threshold = <0xc8>; + big_min = <0x1d5ba0>; + lit_min = <0x1b5fd0>; + mif = <0x14a140>; + int = <0x61a80>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + + level_3 { + threshold = <0x12c>; + big_min = <0x1e8c50>; + lit_min = <0x1b5fd0>; + mif = <0x1b5fd0>; + int = <0x825f0>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + }; + }; + + boot_device@3 { + net_boost,label = "WIFI RX"; + net_boost,node = "wlan0"; + net_boost,slowdown; + + net_boost,table { + + level_0 { + threshold = <0x64>; + big_min = <0x11da50>; + lit_min = <0x101148>; + }; + + level_1 { + threshold = <0x96>; + big_min = <0x166a48>; + lit_min = <0x130b00>; + }; + + level_2 { + threshold = <0xc8>; + big_min = <0x19c990>; + lit_min = <0x130b00>; + mif = <0xce4c8>; + int = <0x61a80>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + + level_3 { + threshold = <0x12c>; + big_min = <0x1d5ba0>; + lit_min = <0x163780>; + mif = <0x14a140>; + int = <0x825f0>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + }; + }; + + boot_device@4 { + net_boost,label = "P2P"; + net_boost,node = "p2p-wlan0-0"; + net_boost,slowdown; + + net_boost,table { + + level_0 { + threshold = <0x3c>; + big_min = <0x166a48>; + lit_min = <0x163780>; + }; + + level_1 { + threshold = <0x96>; + big_min = <0x19c990>; + lit_min = <0x19c990>; + }; + + level_2 { + threshold = <0xc8>; + big_min = <0x1d5ba0>; + lit_min = <0x1b5fd0>; + mif = <0x14a140>; + int = <0x61a80>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + + level_3 { + threshold = <0x12c>; + big_min = <0x1e8c50>; + lit_min = <0x1b5fd0>; + mif = <0x1b5fd0>; + int = <0x825f0>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + }; + }; + + boot_device@5 { + net_boost,label = "NAN"; + net_boost,node = "aware_data0"; + net_boost,slowdown; + + net_boost,table { + + level_0 { + threshold = <0x3c>; + big_min = <0x166a48>; + lit_min = <0x163780>; + }; + + level_1 { + threshold = <0x96>; + big_min = <0x19c990>; + lit_min = <0x19c990>; + }; + + level_2 { + threshold = <0xc8>; + big_min = <0x1d5ba0>; + lit_min = <0x1b5fd0>; + mif = <0x14a140>; + int = <0x61a80>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + + level_3 { + threshold = <0x12c>; + big_min = <0x1e8c50>; + lit_min = <0x1b5fd0>; + mif = <0x1b5fd0>; + int = <0x825f0>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + }; + }; + + boot_device@6 { + net_boost,label = "IPC"; + net_boost,node = "rmnet0 rmnet1 rmnet2 rmnet3 rmnet4 rmnet5 rmnet6 rmnet7 umts_dm0"; + + net_boost,table { + + level_0 { + threshold = <0x64>; + lit_min = <0x101148>; + mif = <0xce4c8>; + }; + + level_1 { + threshold = <0x96>; + lit_min = <0x130b00>; + mif = <0xf78f0>; + }; + + level_2 { + threshold = <0xc8>; + big_min = <0x1d5ba0>; + lit_min = <0x19c990>; + mif = <0x1b5fd0>; + }; + }; + }; + + boot_device@7 { + net_boost,label = "CLAT"; + net_boost,node = "clat clat4 v4-rmnet0 v4-rmnet1 v4-rmnet2 v4-rmnet3 v4-rmnet4 v4-rmnet5 v4-rmnet6 v4-rmnet7"; + + net_boost,table { + + level_0 { + threshold = <0x64>; + big_min = <0x104410>; + mif = <0xf78f0>; + }; + + level_1 { + threshold = <0xc8>; + big_min = <0x110b48>; + mif = <0x1b5fd0>; + }; + + level_2 { + threshold = <0x12c>; + big_min = <0x133dc8>; + mif = <0x1b5fd0>; + }; + + level_3 { + threshold = <0x190>; + big_min = <0x166a48>; + mif = <0x1b5fd0>; + }; + }; + }; + }; dev_ril_bridge_pdata { compatible = "samsung,dev_ril_bridge_pdata"; @@ -13749,7 +14248,7 @@ fuelgauge,capacity = <0xea9>; fuelgauge,discharge_temp_threshold = <0x258>; fuelgauge,discharge_volt_threshold = <0x1068>; - fuelgauge,ttf_capacity = <0xfa0>; + fuelgauge,ttf_capacity = <0xe10>; fuelgauge,cv_data = <0x9b8 0x33d 0x711 0x969 0x340 0x704 0x917 0x345 0x6e9 0x8e0 0x348 0x6cf 0x886 0x34e 0x6b9 0x838 0x352 0x69a 0x7f6 0x356 0x686 0x79e 0x35b 0x668 0x770 0x35d 0x656 0x72e 0x361 0x63a 0x705 0x363 0x628 0x6d5 0x366 0x618 0x6a7 0x369 0x5fb 0x693 0x369 0x5f5 0x683 0x36b 0x5eb 0x67c 0x36b 0x5e8 0x675 0x36c 0x5e5 0x64f 0x36e 0x5de 0x62c 0x370 0x5cb 0x611 0x371 0x5b7 0x608 0x372 0x5b2 0x5f0 0x373 0x5ab 0x5c5 0x376 0x590 0x597 0x378 0x581 0x574 0x37b 0x567 0x543 0x37e 0x551 0x513 0x380 0x534 0x4f3 0x382 0x523 0x4cf 0x386 0x508 0x4b2 0x388 0x4ef 0x47c 0x38a 0x4db 0x455 0x38d 0x4bd 0x42b 0x38f 0x4a1 0x407 0x392 0x484 0x3f5 0x393 0x474 0x3cf 0x395 0x457 0x3c1 0x397 0x43c 0x399 0x399 0x428 0x37c 0x39b 0x40e 0x377 0x39b 0x3fb 0x35f 0x39d 0x3ec 0x341 0x39f 0x3d0 0x328 0x3a1 0x3b2 0x313 0x3a2 0x396 0x30c 0x3a3 0x388 0x2fc 0x3a4 0x37f 0x2e8 0x3a6 0x360 0x2da 0x3a7 0x34e 0x2cb 0x3a8 0x33c 0x2b5 0x3a9 0x320 0x2a9 0x3aa 0x30f 0x29a 0x3ac 0x2f0 0x28b 0x3ad 0x2df 0x280 0x3ae 0x2c8 0x274 0x3b1 0x2b9 0x26e 0x3b2 0x2a7 0x26a 0x3b3 0x298 0x258 0x3b6 0x286 0x254 0x3b7 0x273 0x24d 0x3b9 0x266 0x248 0x3b9 0x259 0x240 0x3bc 0x23c 0x241 0x3bd 0x229 0x232 0x3be 0x217 0x1ff 0x3c8 0x1fa 0x1f9 0x3c9 0x1e7 0x1ed 0x3cb 0x1d0 0x1ec 0x3cc 0x1b3 0x1e4 0x3cd 0x1a1 0x1e0 0x3cf 0x18e 0x1da 0x3d0 0x17c 0x1d6 0x3d1 0x16c 0x1ce 0x3d1 0x163 0x1c8 0x3d2 0x150 0x1c4 0x3d3 0x149 0x1be 0x3d5 0x12f 0x1b5 0x3d6 0x11a 0x1ad 0x3d8 0xff 0x1a7 0x3d9 0xf2 0x1a6 0x3da 0xe5 0x19e 0x3db 0xd3 0x19b 0x3dc 0xc7 0x195 0x3dd 0xbf 0x18d 0x3de 0xab 0x187 0x3df 0x8c 0x183 0x3e0 0x7e 0x180 0x3e1 0x6b 0x174 0x3e3 0x54 0x16c 0x3e5 0x36 0x164 0x3e6 0x1a 0x164 0x3e6 0xd 0x0 0x3e8 0x0>; }; diff --git a/arch/arm64/boot/dts/exynos/exynos9810-crownlte_kor_26.dts b/arch/arm64/boot/dts/exynos/exynos9810-crownlte_kor_26.dts index 604ff6183529..9aedd247a516 100644 --- a/arch/arm64/boot/dts/exynos/exynos9810-crownlte_kor_26.dts +++ b/arch/arm64/boot/dts/exynos/exynos9810-crownlte_kor_26.dts @@ -47,6 +47,7 @@ }; tima_region@0xB8000000 { + status = "disabled"; compatible = "removed-dma-pool"; reg = <0x0 0xb8000000 0x200000>; linux,phandle = <0x1aa>; @@ -141,8 +142,7 @@ camera { compatible = "exynos8890-ion,camera"; ion,recyclable; - size = <0x1b800000>; - alloc-ranges = <0x0 0x40000000 0xc0000000>; + reg = <0x8 0x80000000 0x21c00000>; alignment = <0x0 0x400000>; id = <0xa>; }; @@ -156,6 +156,7 @@ }; rkp_region@0xAF600000 { + status = "disabled"; compatible = "removed-dma-pool"; reg = <0x0 0xaf600000 0x2400000>; linux,phandle = <0x1ab>; @@ -4381,156 +4382,442 @@ input_booster { status = "okay"; compatible = "input_booster"; - #address-cells = <0x1>; - #size-cells = <0x0>; + max_resource_count = [37 00]; + #address-cells = <1>; + #size-cells = <0>; + ib_release_values = "0,0,0,0,0,0,0"; booster_key@1 { - input_booster,label = "KEY"; - input_booster,type = <0x0>; - input_booster,levels = <0x1>; - input_booster,cpu_freqs = <0x104410>; - input_booster,hmp_boost = <0x1>; - input_booster,kfc_freqs = <0x0>; - input_booster,mif_freqs = <0x0>; - input_booster,int_freqs = <0x0>; - input_booster,dma_latency = <0x0>; - input_booster,head_times = <0x1f4>; - input_booster,tail_times = <0x1f4>; - input_booster,phase_times = <0x0>; + input_booster,label = "key"; + input_booster,type = <0>; /* BOOSTER_DEVICE_KEY */ + /* Time table */ + input_booster,head_time = <500>; + input_booster,tail_time = <500>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 0>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <0 0>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 0>; }; + resource@6 { + resource,label = "ucc"; + resource,value = <1 0>; + }; + }; + }; booster_key@2 { - input_booster,label = "TOUCHKEY"; - input_booster,type = <0x1>; - input_booster,levels = <0x1>; - input_booster,cpu_freqs = <0x104410>; - input_booster,hmp_boost = <0x1>; - input_booster,kfc_freqs = <0x0>; - input_booster,mif_freqs = <0x0>; - input_booster,int_freqs = <0x0>; - input_booster,dma_latency = <0x0>; - input_booster,head_times = <0x0>; - input_booster,tail_times = <0xc8>; - input_booster,phase_times = <0x0>; + input_booster,label = "touchkey"; + input_booster,type = <1>; /* BOOSTER_DEVICE_TOUCHKEY */ + /* Time table */ + input_booster,head_time = <0>; + input_booster,tail_time = <200>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 0>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <0 0>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; }; + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 0>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 0>; + }; + }; + }; booster_key@3 { - input_booster,label = "TOUCH"; - input_booster,type = <0x2>; - input_booster,levels = <0x1 0x2 0x3>; - input_booster,cpu_freqs = <0x104410 0x104410 0xd1790>; - input_booster,hmp_boost = <0x1 0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0 0x0>; - input_booster,int_freqs = <0x0 0x0 0x0>; - input_booster,dma_latency = <0x0 0x0 0x0>; - input_booster,head_times = <0x82 0x82 0x0>; - input_booster,tail_times = <0x0 0x0 0x1f4>; - input_booster,phase_times = <0x0 0x0 0x0>; - }; - - booster_key@4 { - input_booster,label = "MULTITOUCH"; - input_booster,type = <0x3>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0xd1790>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x3e8 0x0>; - input_booster,tail_times = <0x0 0x1f4>; - input_booster,phase_times = <0x0 0x0>; + input_booster,label = "touch"; + input_booster,type = <2>; /* BOOSTER_DEVICE_TOUCH */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <500>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; }; + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; + booster_key@4 { // Input Booster + + input_booster,label = "multitouch"; + input_booster,type = <3>; /* BOOSTER_DEVICE_MULTITOUCH */ + /* Time table */ + input_booster,head_time = <1000>; + input_booster,tail_time = <500>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@5 { - input_booster,label = "KEYBOARD"; - input_booster,type = <0x4>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0x104410>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x82 0x82>; - input_booster,tail_times = <0x0 0x0>; - input_booster,phase_times = <0x0 0x0>; + input_booster,label = "keyboard"; + input_booster,type = <4>; /* BOOSTER_DEVICE_KEYBOARD */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <0>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; }; + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@6 { - input_booster,label = "MOUSE"; - input_booster,type = <0x5>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0xd1790>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x82 0x0>; - input_booster,tail_times = <0x0 0x1f4>; - input_booster,phase_times = <0x0 0x0>; + input_booster,label = "mouse"; + input_booster,type = <5>; /* BOOSTER_DEVICE_MOUSE */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <500>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; }; + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@7 { - input_booster,label = "MOUSE WHEEL"; - input_booster,type = <0x6>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0x0>; - input_booster,hmp_boost = <0x1 0x0>; - input_booster,kfc_freqs = <0xcb200 0x0>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x82 0x0>; - input_booster,tail_times = <0x0 0x0>; - input_booster,phase_times = <0x0 0x0>; + input_booster,label = "mouse_wheel"; + input_booster,type = <6>; /* BOOSTER_DEVICE_MOUSE */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <0>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; }; + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@8 { - input_booster,label = "PEN HOVER"; - input_booster,type = <0x7>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0xd1790>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x82 0x0>; - input_booster,tail_times = <0x0 0x1f4>; - input_booster,phase_times = <0x0 0x0>; + input_booster,label = "pen_hover"; + input_booster,type = <7>; /* BOOSTER_DEVICE_MOUSE */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <500>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; }; + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@9 { - input_booster,label = "PEN"; - input_booster,type = <0x8>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x11da50 0xd1790>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,bimc_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0xc8 0x0>; - input_booster,tail_times = <0x0 0x258>; + input_booster,label = "pen"; + input_booster,type = <8>; /* BOOSTER_DEVICE_MOUSE */ + /* Time table */ + input_booster,head_time = <200>; + input_booster,tail_time = <600>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1170000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; }; + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@10 { - input_booster,label = "KEY_TWO"; - input_booster,type = <0x9>; - input_booster,levels = <0x1>; - input_booster,cpu_freqs = <0x166a48>; - input_booster,hmp_boost = <0x1>; - input_booster,kfc_freqs = <0x101148>; - input_booster,mif_freqs = <0x0>; - input_booster,int_freqs = <0x0>; - input_booster,dma_latency = <0x0>; - input_booster,head_times = <0x2bc>; - input_booster,tail_times = <0x2bc>; - input_booster,phase_times = <0x0>; + input_booster,label = "key_two"; + input_booster,type = <9>; /* BOOSTER_DEVICE_KEY */ + /* Time table */ + input_booster,head_time = <700>; + input_booster,tail_time = <700>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1469000 0>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <1053000 0>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; // Input Booster - + /* If you need to add new key type, add it this position */ }; exynos-snapshot { @@ -5077,7 +5364,7 @@ gpu_dynamic_abb = <0x0>; gpu_early_clk_gating = <0x0>; gpu_dvs = <0x0>; - gpu_inter_frame_pm = <0x1>; + gpu_inter_frame_pm = <0x0>; gpu_perf_gathering = <0x0>; gpu_runtime_pm_delay_time = <0x32>; gpu_dvfs_polling_time = <0x1e>; @@ -8477,7 +8764,8 @@ status = "ok"; ip_ver = <0x11>; clock_rate = <0x17d78400>; - min_rate = <0x186a0>; + min_rate = <0x186a0>; + enc_ts_delta = <0x1 0x211208>; num_qos_steps = <0x8>; max_qos_steps = <0x9>; max_mb = <0x489732>; @@ -10446,7 +10734,7 @@ boost_table = <0x14 0xd1790 0xf 0xeadd0 0x5 0x133dc8 0x0>; up_rate_limit_table = <0x5>; down_rate_limit_table = <0x5>; - upscale_ratio_table = <0x32 0xeadd0 0x41>; + upscale_ratio_table = <0x32 0xeadd0 0x41 0x166a48 0x50>; }; }; @@ -11215,58 +11503,78 @@ default_int = <0x1a1f8>; default_hpg = <0x1>; front_preview_int_cam = <0x9c400>; - front_preview_cam = <0x927c0>; + front_preview_cam = <0x9c400>; front_preview_mif = <0xf78f0>; front_preview_int = <0x1a1f8>; front_preview_hpg = <0x1>; front_preview_full_int_cam = <0xa1220>; - front_preview_full_cam = <0x927c0>; + front_preview_full_cam = <0x9c400>; front_preview_full_mif = <0xf78f0>; front_preview_full_int = <0x1a1f8>; front_preview_full_hpg = <0x1>; front_capture_int_cam = <0xa1220>; - front_capture_cam = <0x927c0>; - front_capture_mif = <0xf78f0>; + front_capture_cam = <0x9c400>; + front_capture_mif = <0x1fefc8>; front_capture_int = <0x1a1f8>; front_capture_hpg = <0x1>; front_video_int_cam = <0x9c400>; - front_video_cam = <0x927c0>; + front_video_cam = <0x9c400>; front_video_mif = <0xf78f0>; front_video_int = <0x1a1f8>; front_video_hpg = <0x1>; front_video_whd_int_cam = <0x9c400>; - front_video_whd_cam = <0x927c0>; + front_video_whd_cam = <0x9c400>; front_video_whd_mif = <0xf78f0>; front_video_whd_int = <0x1a1f8>; front_video_whd_hpg = <0x1>; + front_video_uhd_int_cam = <0xa1220>; + front_video_uhd_cam = <0x9c400>; + front_video_uhd_mif = <0xf78f0>; + front_video_uhd_int = <0x1a1f8>; + front_video_uhd_hpg = <0x1>; + front_video_fhd_60fps_int_cam = <0xa1220>; + front_video_fhd_60fps_cam = <0x9c400>; + front_video_fhd_60fps_mif = <0xf78f0>; + front_video_fhd_60fps_int = <0x1a1f8>; + front_video_fhd_60fps_hpg = <0x1>; front_video_capture_int_cam = <0xa1220>; - front_video_capture_cam = <0x94ed0>; - front_video_capture_mif = <0xf78f0>; + front_video_capture_cam = <0x9c400>; + front_video_capture_mif = <0x1fefc8>; front_video_capture_int = <0x1a1f8>; front_video_capture_hpg = <0x1>; front_video_whd_capture_int_cam = <0xa1220>; - front_video_whd_capture_cam = <0x927c0>; - front_video_whd_capture_mif = <0xf78f0>; + front_video_whd_capture_cam = <0x9c400>; + front_video_whd_capture_mif = <0x1fefc8>; front_video_whd_capture_int = <0x1a1f8>; front_video_whd_capture_hpg = <0x1>; + front_video_uhd_capture_int_cam = <0xa1220>; + front_video_uhd_capture_cam = <0x9c400>; + front_video_uhd_capture_mif = <0x1fefc8>; + front_video_uhd_capture_int = <0x1a1f8>; + front_video_uhd_capture_hpg = <0x1>; + front_video_fhd_60fps_capture_int_cam = <0xa1220>; + front_video_fhd_60fps_capture_cam = <0x9c400>; + front_video_fhd_60fps_capture_mif = <0x1fefc8>; + front_video_fhd_60fps_capture_int = <0x1a1f8>; + front_video_fhd_60fps_capture_hpg = <0x1>; front_vt1_int_cam = <0x9c400>; - front_vt1_cam = <0x927c0>; + front_vt1_cam = <0x9c400>; front_vt1_mif = <0xf78f0>; front_vt1_int = <0x1a1f8>; front_vt1_hpg = <0x1>; front_vt2_int_cam = <0x9c400>; - front_vt2_cam = <0x927c0>; + front_vt2_cam = <0x9c400>; front_vt2_mif = <0xf78f0>; front_vt2_int = <0x1a1f8>; front_vt2_hpg = <0x1>; front_vt4_int_cam = <0x9c400>; - front_vt4_cam = <0x927c0>; + front_vt4_cam = <0x9c400>; front_vt4_mif = <0xf78f0>; front_vt4_int = <0x1a1f8>; front_vt4_hpg = <0x1>; front_preview_high_speed_fps_int_cam = <0xa1220>; - front_preview_high_speed_fps_cam = <0x94ed0>; - front_preview_high_speed_fps_mif = <0xf78f0>; + front_preview_high_speed_fps_cam = <0x9c400>; + front_preview_high_speed_fps_mif = <0x14a140>; front_preview_high_speed_fps_int = <0x1a1f8>; front_preview_high_speed_fps_hpg = <0x1>; rear2_preview_fhd_int_cam = <0x9c400>; @@ -11276,7 +11584,7 @@ rear2_preview_fhd_hpg = <0x1>; rear2_capture_int_cam = <0xa1220>; rear2_capture_cam = <0x9c400>; - rear2_capture_mif = <0xf78f0>; + rear2_capture_mif = <0x1fefc8>; rear2_capture_int = <0x1a1f8>; rear2_capture_hpg = <0x1>; rear2_video_fhd_int_cam = <0xa1220>; @@ -11286,12 +11594,12 @@ rear2_video_fhd_hpg = <0x1>; rear2_video_fhd_capture_int_cam = <0xa1220>; rear2_video_fhd_capture_cam = <0x9c400>; - rear2_video_fhd_capture_mif = <0x14a140>; + rear2_video_fhd_capture_mif = <0x1fefc8>; rear2_video_fhd_capture_int = <0x1a1f8>; rear2_video_fhd_capture_hpg = <0x1>; rear_preview_fhd_int_cam = <0x9c400>; rear_preview_fhd_cam = <0x9c400>; - rear_preview_fhd_mif = <0xf78f0>; + rear_preview_fhd_mif = <0x177bb8>; rear_preview_fhd_int = <0x1a1f8>; rear_preview_fhd_hpg = <0x1>; rear_preview_whd_int_cam = <0x9c400>; @@ -11316,7 +11624,7 @@ rear_preview_full_hpg = <0x1>; rear_capture_int_cam = <0xa1220>; rear_capture_cam = <0x9c400>; - rear_capture_mif = <0xf78f0>; + rear_capture_mif = <0x1fefc8>; rear_capture_int = <0x1a1f8>; rear_capture_hpg = <0x1>; rear_video_fhd_int_cam = <0xa1220>; @@ -11341,37 +11649,37 @@ rear_video_uhd_60fps_hpg = <0x1>; rear_video_fhd_capture_int_cam = <0xa1220>; rear_video_fhd_capture_cam = <0x9c400>; - rear_video_fhd_capture_mif = <0x14a140>; + rear_video_fhd_capture_mif = <0x1fefc8>; rear_video_fhd_capture_int = <0x1a1f8>; rear_video_fhd_capture_hpg = <0x1>; rear_video_whd_capture_int_cam = <0xa1220>; rear_video_whd_capture_cam = <0x9c400>; - rear_video_whd_capture_mif = <0x14a140>; + rear_video_whd_capture_mif = <0x1fefc8>; rear_video_whd_capture_int = <0x1a1f8>; rear_video_whd_capture_hpg = <0x1>; rear_video_uhd_capture_int_cam = <0xa1220>; rear_video_uhd_capture_cam = <0x9c400>; - rear_video_uhd_capture_mif = <0x14a140>; + rear_video_uhd_capture_mif = <0x1fefc8>; rear_video_uhd_capture_int = <0x1a1f8>; rear_video_uhd_capture_hpg = <0x1>; - dual_preview_int_cam = <0x9c400>; + dual_preview_int_cam = <0xa1220>; dual_preview_cam = <0x9c400>; - dual_preview_mif = <0xf78f0>; + dual_preview_mif = <0x177bb8>; dual_preview_int = <0x1a1f8>; dual_preview_hpg = <0x1>; dual_capture_int_cam = <0xa1220>; dual_capture_cam = <0x9c400>; - dual_capture_mif = <0xf78f0>; + dual_capture_mif = <0x1fefc8>; dual_capture_int = <0x1a1f8>; dual_capture_hpg = <0x1>; dual_video_fhd_int_cam = <0xa1220>; dual_video_fhd_cam = <0x9c400>; - dual_video_fhd_mif = <0xf78f0>; + dual_video_fhd_mif = <0x14a140>; dual_video_fhd_int = <0x1a1f8>; dual_video_fhd_hpg = <0x1>; dual_video_fhd_capture_int_cam = <0xa1220>; dual_video_fhd_capture_cam = <0x9c400>; - dual_video_fhd_capture_mif = <0x14a140>; + dual_video_fhd_capture_mif = <0x1fefc8>; dual_video_fhd_capture_int = <0x1a1f8>; dual_video_fhd_capture_hpg = <0x1>; dual_video_uhd_int_cam = <0xa1220>; @@ -11381,17 +11689,17 @@ dual_video_uhd_hpg = <0x1>; dual_video_uhd_capture_int_cam = <0xa1220>; dual_video_uhd_capture_cam = <0x9c400>; - dual_video_uhd_capture_mif = <0x14a140>; + dual_video_uhd_capture_mif = <0x1fefc8>; dual_video_uhd_capture_int = <0x1a1f8>; dual_video_uhd_capture_hpg = <0x1>; dual_sync_preview_int_cam = <0xa1220>; dual_sync_preview_cam = <0x9c400>; - dual_sync_preview_mif = <0x177bb8>; + dual_sync_preview_mif = <0x1b5fd0>; dual_sync_preview_int = <0x1a1f8>; dual_sync_preview_hpg = <0x1>; dual_sync_capture_int_cam = <0xa3930>; dual_sync_capture_cam = <0x9c400>; - dual_sync_capture_mif = <0x1b5fd0>; + dual_sync_capture_mif = <0x1fefc8>; dual_sync_capture_int = <0x1a1f8>; dual_sync_capture_hpg = <0x1>; dual_sync_preview_whd_int_cam = <0xa6040>; @@ -11400,32 +11708,32 @@ dual_sync_preview_whd_int = <0x1a1f8>; dual_sync_preview_whd_hpg = <0x1>; dual_sync_whd_capture_int_cam = <0xa6040>; - dual_sync_whd_capture_cam = <0xa6040>; - dual_sync_whd_capture_mif = <0x1b5fd0>; + dual_sync_whd_capture_cam = <0x9c400>; + dual_sync_whd_capture_mif = <0x1fefc8>; dual_sync_whd_capture_int = <0x1a1f8>; dual_sync_whd_capture_hpg = <0x1>; dual_sync_video_fhd_int_cam = <0xa6040>; - dual_sync_video_fhd_cam = <0xa6040>; + dual_sync_video_fhd_cam = <0x9c400>; dual_sync_video_fhd_mif = <0x177bb8>; dual_sync_video_fhd_int = <0x1a1f8>; dual_sync_video_fhd_hpg = <0x1>; dual_sync_video_fhd_capture_int_cam = <0xa6040>; - dual_sync_video_fhd_capture_cam = <0xa6040>; - dual_sync_video_fhd_capture_mif = <0x1b5fd0>; + dual_sync_video_fhd_capture_cam = <0x9c400>; + dual_sync_video_fhd_capture_mif = <0x1fefc8>; dual_sync_video_fhd_capture_int = <0x1a1f8>; dual_sync_video_fhd_capture_hpg = <0x1>; dual_sync_video_uhd_int_cam = <0xa6040>; - dual_sync_video_uhd_cam = <0xa6040>; + dual_sync_video_uhd_cam = <0x9c400>; dual_sync_video_uhd_mif = <0x177bb8>; dual_sync_video_uhd_int = <0x1a1f8>; dual_sync_video_uhd_hpg = <0x1>; dual_sync_video_uhd_capture_int_cam = <0xa6040>; - dual_sync_video_uhd_capture_cam = <0xa6040>; - dual_sync_video_uhd_capture_mif = <0x1b5fd0>; + dual_sync_video_uhd_capture_cam = <0x9c400>; + dual_sync_video_uhd_capture_mif = <0x1fefc8>; dual_sync_video_uhd_capture_int = <0x1a1f8>; dual_sync_video_uhd_capture_hpg = <0x1>; secure_front_int_cam = <0x9c400>; - secure_front_cam = <0x94ed0>; + secure_front_cam = <0x9c400>; secure_front_mif = <0xf78f0>; secure_front_int = <0x1a1f8>; secure_front_hpg = <0x1>; @@ -11436,7 +11744,7 @@ pip_preview_hpg = <0x1>; pip_capture_int_cam = <0xa3930>; pip_capture_cam = <0x9c400>; - pip_capture_mif = <0xf78f0>; + pip_capture_mif = <0x1fefc8>; pip_capture_int = <0x1a1f8>; pip_capture_hpg = <0x1>; pip_video_int_cam = <0xa1220>; @@ -11446,7 +11754,7 @@ pip_video_hpg = <0x1>; pip_video_capture_int_cam = <0xa3930>; pip_video_capture_cam = <0x9c400>; - pip_video_capture_mif = <0xf78f0>; + pip_video_capture_mif = <0x1fefc8>; pip_video_capture_int = <0x1a1f8>; pip_video_capture_hpg = <0x1>; preview_high_speed_fps_int_cam = <0xa1220>; @@ -11456,7 +11764,7 @@ preview_high_speed_fps_hpg = <0x1>; video_high_speed_60fps_int_cam = <0xa6040>; video_high_speed_60fps_cam = <0x9c400>; - video_high_speed_60fps_mif = <0x14a140>; + video_high_speed_60fps_mif = <0x177bb8>; video_high_speed_60fps_int = <0x1a1f8>; video_high_speed_60fps_hpg = <0x1>; video_high_speed_120fps_int_cam = <0xa1220>; @@ -11466,7 +11774,7 @@ video_high_speed_120fps_hpg = <0x1>; video_high_speed_240fps_int_cam = <0xa6040>; video_high_speed_240fps_cam = <0x9c400>; - video_high_speed_240fps_mif = <0x1b5fd0>; + video_high_speed_240fps_mif = <0x1fefc8>; video_high_speed_240fps_int = <0x1a1f8>; video_high_speed_240fps_hpg = <0x1>; video_high_speed_dualfps_int_cam = <0xa6040>; @@ -11476,7 +11784,7 @@ video_high_speed_dualfps_hpg = <0x6>; video_high_speed_60fps_capture_int_cam = <0xa6040>; video_high_speed_60fps_capture_cam = <0x9c400>; - video_high_speed_60fps_capture_mif = <0x1b5fd0>; + video_high_speed_60fps_capture_mif = <0x1fefc8>; video_high_speed_60fps_capture_int = <0x1a1f8>; video_high_speed_60fps_capture_hpg = <0x1>; ext_front_int_cam = <0xa8750>; @@ -11485,7 +11793,7 @@ ext_front_int = <0x825f0>; ext_front_hpg = <0x1>; ext_secure_int_cam = <0x9c400>; - ext_secure_cam = <0x94ed0>; + ext_secure_cam = <0x9c400>; ext_secure_mif = <0xf78f0>; ext_secure_int = <0x1a1f8>; ext_secure_hpg = <0x1>; @@ -12697,13 +13005,14 @@ status = "okay"; haptic,max_timeout = <0x2710>; haptic,multi_frequency = <0x7>; - haptic,duty = <0x9e4f 0xd314 0xa8dc 0x7ea5 0x8cb7 0x90f4 0x90f4>; - haptic,period = <0xbebc 0xfe50 0xcb73 0x9896 0xa98a 0x9896 0x9896>; + haptic,duty = <0x9ede 0xbebc 0x9896 0x7270 0x7f27 0x90f4 0x90f4>; + haptic,period = <0xbf68 0xfe50 0xcb73 0x9896 0xa98a 0x9896 0x9896>; haptic,reg2 = <0x82>; haptic,pwm_id = <0x1>; haptic,regulator_name = "VDD_MOTOR_3P3"; - haptic,normal_ratio = <0x53>; + haptic,normal_ratio = <0x4b>; haptic,overdrive_ratio = <0x5f>; + haptic,type = "LINEAR_1040"; }; sound { @@ -13562,74 +13871,264 @@ }; }; - argos { - compatible = "samsung,argos"; - #address-cells = <0x1>; + argos { + compatible = "samsung,argos"; + #address-cells = <0x1>; - boot_device@1 { - net_boost,label = "IPC"; - net_boost,node = "rmnet0 rmnet1 rmnet2 rmnet3 rmnet4 rmnet5 rmnet6 rmnet7 umts_dm0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x64 0x0 0x0 0x101148 0x0 0xce4c8 0x0 0x0 0x0 0x0 0x96 0x0 0x0 0x130b00 0x0 0xf78f0 0x0 0x0 0x0 0x0 0xc8 0x1d5ba0 0x0 0x19c990 0x0 0x1b5fd0 0x0 0x0 0x0 0x0>; - }; + boot_device@1 { + net_boost,label = "UFS"; + net_boost,node = [00]; + net_boost,sysnode = "/sys/class/scsi_host/host0/transferred_cnt"; - boot_device@2 { - net_boost,label = "CLAT"; - net_boost,node = "clat clat4 v4-rmnet0 v4-rmnet1 v4-rmnet2 v4-rmnet3 v4-rmnet4 v4-rmnet5 v4-rmnet6 v4-rmnet7"; - net_boost,table_size = <0x5>; - net_boost,table = <0x1 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x64 0x104410 0x0 0x0 0x0 0xf78f0 0x0 0x0 0x0 0x0 0xc8 0x110b48 0x0 0x0 0x0 0x1b5fd0 0x0 0x0 0x0 0x0 0x12c 0x133dc8 0x0 0x0 0x0 0x1b5fd0 0x0 0x0 0x0 0x0 0x190 0x166a48 0x0 0x0 0x0 0x1b5fd0 0x0 0x0 0x0 0x0>; - }; + net_boost,table { - boot_device@3 { - net_boost,label = "UFS"; - net_boost,node = [00]; - net_boost,sysnode = "/sys/class/scsi_host/host0/transferred_cnt"; - net_boost,table_size = <0x2>; - net_boost,table = <0x70 0x0 0x0 0x163780 0x0 0x14a140 0x0 0x0 0x0 0x0 0x320 0x104410 0x0 0x163780 0x0 0x177bb8 0x0 0x0 0x0 0x1>; - }; + level_0 { + threshold = <0x190>; + lit_min = <0x163780>; + mif = <0x14a140>; + }; - boot_device@4 { - net_boost,label = "WIFI"; - net_boost,node = "wlan0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x96 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0xc8 0x0 0x0 0x0 0x0 0x0 0x0 0x1 0x1 0x1 0x12c 0x0 0x0 0x0 0x0 0x0 0x0 0x1 0x1 0x1>; - }; + level_1 { + threshold = <0x320>; + big_min = <0x104410>; + lit_min = <0x163780>; + mif = <0x177bb8>; + hmp_boost = "enable"; + }; + }; + }; - boot_device@5 { - net_boost,label = "WIFI TX"; - net_boost,node = "wlan0"; - net_boost,table_size = <0x4>; - net_boost,table = <0x3c 0x166a48 0x0 0x163780 0x0 0x0 0x0 0x0 0x0 0x0 0x96 0x19c990 0x0 0x19c990 0x0 0x0 0x0 0x0 0x0 0x0 0xc8 0x1d5ba0 0x0 0x1b5fd0 0x0 0x14a140 0x61a80 0x1 0x1 0x1 0x12c 0x1e8c50 0x0 0x1b5fd0 0x0 0x1b5fd0 0x825f0 0x1 0x1 0x1>; - }; + boot_device@2 { + net_boost,label = "WIFI TX"; + net_boost,node = "wlan0"; + net_boost,slowdown; - boot_device@6 { - net_boost,label = "WIFI RX"; - net_boost,node = "wlan0"; - net_boost,table_size = <0x4>; - net_boost,table = <0x64 0x11da50 0x0 0x101148 0x0 0x0 0x0 0x0 0x0 0x0 0x96 0x166a48 0x0 0x130b00 0x0 0x0 0x0 0x0 0x0 0x0 0xc8 0x19c990 0x0 0x130b00 0x0 0xce4c8 0x61a80 0x1 0x1 0x1 0x12c 0x1d5ba0 0x0 0x163780 0x0 0x14a140 0x825f0 0x1 0x1 0x1>; - }; + net_boost,table { - boot_device@7 { - net_boost,label = "P2P"; - net_boost,node = "p2p-wlan0-0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x1e 0x1174c0 0x0 0x11da50 0x0 0x0 0x0 0x0 0x0 0x0 0x5a 0x1c9080 0x0 0x183350 0x0 0x0 0x3e418 0x0 0x0 0x0 0x12c 0x1fbd00 0x0 0x183350 0x0 0x854d0 0x3e418 0x1 0x1 0x1>; - }; + level_0 { + threshold = <0x3c>; + big_min = <0x166a48>; + lit_min = <0x163780>; + }; - boot_device@8 { - net_boost,label = "NAN"; - net_boost,node = "aware_data0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x1e 0x1174c0 0x0 0x11da50 0x0 0x0 0x0 0x0 0x0 0x0 0x5a 0x1c9080 0x0 0x183350 0x0 0x0 0x3e418 0x0 0x0 0x0 0x12c 0x1fbd00 0x0 0x183350 0x0 0x854d0 0x3e418 0x1 0x1 0x1>; - }; + level_1 { + threshold = <0x96>; + big_min = <0x19c990>; + lit_min = <0x19c990>; + }; - boot_device@9 { - net_boost,label = "USB"; - net_boost,node = "rndis0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x1 0x0 0xc8 0x0 0x0 0x163780 0x0 0x177fa0 0x0 0x0 0x1 0x0 0x12c 0x0 0x0 0x19c990 0x0 0x1b5fd0 0x825f0 0x0 0x1 0x0>; - }; - }; + level_2 { + threshold = <0xc8>; + big_min = <0x1d5ba0>; + lit_min = <0x1b5fd0>; + mif = <0x14a140>; + int = <0x61a80>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + + level_3 { + threshold = <0x12c>; + big_min = <0x1e8c50>; + lit_min = <0x1b5fd0>; + mif = <0x1b5fd0>; + int = <0x825f0>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + }; + }; + + boot_device@3 { + net_boost,label = "WIFI RX"; + net_boost,node = "wlan0"; + net_boost,slowdown; + + net_boost,table { + + level_0 { + threshold = <0x64>; + big_min = <0x11da50>; + lit_min = <0x101148>; + }; + + level_1 { + threshold = <0x96>; + big_min = <0x166a48>; + lit_min = <0x130b00>; + }; + + level_2 { + threshold = <0xc8>; + big_min = <0x19c990>; + lit_min = <0x130b00>; + mif = <0xce4c8>; + int = <0x61a80>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + + level_3 { + threshold = <0x12c>; + big_min = <0x1d5ba0>; + lit_min = <0x163780>; + mif = <0x14a140>; + int = <0x825f0>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + }; + }; + + boot_device@4 { + net_boost,label = "P2P"; + net_boost,node = "p2p-wlan0-0"; + net_boost,slowdown; + + net_boost,table { + + level_0 { + threshold = <0x3c>; + big_min = <0x166a48>; + lit_min = <0x163780>; + }; + + level_1 { + threshold = <0x96>; + big_min = <0x19c990>; + lit_min = <0x19c990>; + }; + + level_2 { + threshold = <0xc8>; + big_min = <0x1d5ba0>; + lit_min = <0x1b5fd0>; + mif = <0x14a140>; + int = <0x61a80>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + + level_3 { + threshold = <0x12c>; + big_min = <0x1e8c50>; + lit_min = <0x1b5fd0>; + mif = <0x1b5fd0>; + int = <0x825f0>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + }; + }; + + boot_device@5 { + net_boost,label = "NAN"; + net_boost,node = "aware_data0"; + net_boost,slowdown; + + net_boost,table { + + level_0 { + threshold = <0x3c>; + big_min = <0x166a48>; + lit_min = <0x163780>; + }; + + level_1 { + threshold = <0x96>; + big_min = <0x19c990>; + lit_min = <0x19c990>; + }; + + level_2 { + threshold = <0xc8>; + big_min = <0x1d5ba0>; + lit_min = <0x1b5fd0>; + mif = <0x14a140>; + int = <0x61a80>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + + level_3 { + threshold = <0x12c>; + big_min = <0x1e8c50>; + lit_min = <0x1b5fd0>; + mif = <0x1b5fd0>; + int = <0x825f0>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + }; + }; + + boot_device@6 { + net_boost,label = "IPC"; + net_boost,node = "rmnet0 rmnet1 rmnet2 rmnet3 rmnet4 rmnet5 rmnet6 rmnet7 umts_dm0"; + + net_boost,table { + + level_0 { + threshold = <0x64>; + lit_min = <0x101148>; + mif = <0xce4c8>; + }; + + level_1 { + threshold = <0x96>; + lit_min = <0x130b00>; + mif = <0xf78f0>; + }; + + level_2 { + threshold = <0xc8>; + big_min = <0x1d5ba0>; + lit_min = <0x19c990>; + mif = <0x1b5fd0>; + }; + }; + }; + + boot_device@7 { + net_boost,label = "CLAT"; + net_boost,node = "clat clat4 v4-rmnet0 v4-rmnet1 v4-rmnet2 v4-rmnet3 v4-rmnet4 v4-rmnet5 v4-rmnet6 v4-rmnet7"; + + net_boost,table { + + level_0 { + threshold = <0x64>; + big_min = <0x104410>; + mif = <0xf78f0>; + }; + + level_1 { + threshold = <0xc8>; + big_min = <0x110b48>; + mif = <0x1b5fd0>; + }; + + level_2 { + threshold = <0x12c>; + big_min = <0x133dc8>; + mif = <0x1b5fd0>; + }; + + level_3 { + threshold = <0x190>; + big_min = <0x166a48>; + mif = <0x1b5fd0>; + }; + }; + }; + }; dev_ril_bridge_pdata { compatible = "samsung,dev_ril_bridge_pdata"; @@ -13853,7 +14352,7 @@ fuelgauge,capacity = <0xea9>; fuelgauge,discharge_temp_threshold = <0x258>; fuelgauge,discharge_volt_threshold = <0x1068>; - fuelgauge,ttf_capacity = <0xfa0>; + fuelgauge,ttf_capacity = <0xe10>; fuelgauge,cv_data = <0x9b8 0x33d 0x711 0x969 0x340 0x704 0x917 0x345 0x6e9 0x8e0 0x348 0x6cf 0x886 0x34e 0x6b9 0x838 0x352 0x69a 0x7f6 0x356 0x686 0x79e 0x35b 0x668 0x770 0x35d 0x656 0x72e 0x361 0x63a 0x705 0x363 0x628 0x6d5 0x366 0x618 0x6a7 0x369 0x5fb 0x693 0x369 0x5f5 0x683 0x36b 0x5eb 0x67c 0x36b 0x5e8 0x675 0x36c 0x5e5 0x64f 0x36e 0x5de 0x62c 0x370 0x5cb 0x611 0x371 0x5b7 0x608 0x372 0x5b2 0x5f0 0x373 0x5ab 0x5c5 0x376 0x590 0x597 0x378 0x581 0x574 0x37b 0x567 0x543 0x37e 0x551 0x513 0x380 0x534 0x4f3 0x382 0x523 0x4cf 0x386 0x508 0x4b2 0x388 0x4ef 0x47c 0x38a 0x4db 0x455 0x38d 0x4bd 0x42b 0x38f 0x4a1 0x407 0x392 0x484 0x3f5 0x393 0x474 0x3cf 0x395 0x457 0x3c1 0x397 0x43c 0x399 0x399 0x428 0x37c 0x39b 0x40e 0x377 0x39b 0x3fb 0x35f 0x39d 0x3ec 0x341 0x39f 0x3d0 0x328 0x3a1 0x3b2 0x313 0x3a2 0x396 0x30c 0x3a3 0x388 0x2fc 0x3a4 0x37f 0x2e8 0x3a6 0x360 0x2da 0x3a7 0x34e 0x2cb 0x3a8 0x33c 0x2b5 0x3a9 0x320 0x2a9 0x3aa 0x30f 0x29a 0x3ac 0x2f0 0x28b 0x3ad 0x2df 0x280 0x3ae 0x2c8 0x274 0x3b1 0x2b9 0x26e 0x3b2 0x2a7 0x26a 0x3b3 0x298 0x258 0x3b6 0x286 0x254 0x3b7 0x273 0x24d 0x3b9 0x266 0x248 0x3b9 0x259 0x240 0x3bc 0x23c 0x241 0x3bd 0x229 0x232 0x3be 0x217 0x1ff 0x3c8 0x1fa 0x1f9 0x3c9 0x1e7 0x1ed 0x3cb 0x1d0 0x1ec 0x3cc 0x1b3 0x1e4 0x3cd 0x1a1 0x1e0 0x3cf 0x18e 0x1da 0x3d0 0x17c 0x1d6 0x3d1 0x16c 0x1ce 0x3d1 0x163 0x1c8 0x3d2 0x150 0x1c4 0x3d3 0x149 0x1be 0x3d5 0x12f 0x1b5 0x3d6 0x11a 0x1ad 0x3d8 0xff 0x1a7 0x3d9 0xf2 0x1a6 0x3da 0xe5 0x19e 0x3db 0xd3 0x19b 0x3dc 0xc7 0x195 0x3dd 0xbf 0x18d 0x3de 0xab 0x187 0x3df 0x8c 0x183 0x3e0 0x7e 0x180 0x3e1 0x6b 0x174 0x3e3 0x54 0x16c 0x3e5 0x36 0x164 0x3e6 0x1a 0x164 0x3e6 0xd 0x0 0x3e8 0x0>; }; diff --git a/arch/arm64/boot/dts/exynos/exynos9810-star2lte_eur_open_26.dts b/arch/arm64/boot/dts/exynos/exynos9810-star2lte_eur_open_26.dts index 16fa98d68cfe..2d37244d67a6 100644 --- a/arch/arm64/boot/dts/exynos/exynos9810-star2lte_eur_open_26.dts +++ b/arch/arm64/boot/dts/exynos/exynos9810-star2lte_eur_open_26.dts @@ -47,6 +47,7 @@ }; tima_region@0xB8000000 { + status = "disabled"; compatible = "removed-dma-pool"; reg = <0x0 0xb8000000 0x200000>; linux,phandle = <0x19d>; @@ -141,8 +142,7 @@ camera { compatible = "exynos8890-ion,camera"; ion,recyclable; - size = <0x1b800000>; - alloc-ranges = <0x0 0x40000000 0xc0000000>; + reg = <0x8 0x80000000 0x21c00000>; alignment = <0x0 0x400000>; id = <0xa>; }; @@ -156,6 +156,7 @@ }; rkp_region@0xAF800000 { + status = "disabled"; compatible = "removed-dma-pool"; reg = <0x0 0xaf800000 0x2000000>; linux,phandle = <0x19e>; @@ -4316,156 +4317,442 @@ input_booster { status = "okay"; compatible = "input_booster"; - #address-cells = <0x1>; - #size-cells = <0x0>; + max_resource_count = [37 00]; + #address-cells = <1>; + #size-cells = <0>; + ib_release_values = "0,0,0,0,0,0,0"; booster_key@1 { - input_booster,label = "KEY"; - input_booster,type = <0x0>; - input_booster,levels = <0x1>; - input_booster,cpu_freqs = <0x104410>; - input_booster,hmp_boost = <0x1>; - input_booster,kfc_freqs = <0x0>; - input_booster,mif_freqs = <0x0>; - input_booster,int_freqs = <0x0>; - input_booster,dma_latency = <0x0>; - input_booster,head_times = <0x1f4>; - input_booster,tail_times = <0x1f4>; - input_booster,phase_times = <0x0>; + input_booster,label = "key"; + input_booster,type = <0>; /* BOOSTER_DEVICE_KEY */ + /* Time table */ + input_booster,head_time = <500>; + input_booster,tail_time = <500>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 0>; }; + resource@2 { + resource,label = "cluster0"; + resource,value = <0 0>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 0>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 0>; + }; + }; + }; booster_key@2 { - input_booster,label = "TOUCHKEY"; - input_booster,type = <0x1>; - input_booster,levels = <0x1>; - input_booster,cpu_freqs = <0x104410>; - input_booster,hmp_boost = <0x1>; - input_booster,kfc_freqs = <0x0>; - input_booster,mif_freqs = <0x0>; - input_booster,int_freqs = <0x0>; - input_booster,dma_latency = <0x0>; - input_booster,head_times = <0x0>; - input_booster,tail_times = <0xc8>; - input_booster,phase_times = <0x0>; + input_booster,label = "touchkey"; + input_booster,type = <1>; /* BOOSTER_DEVICE_TOUCHKEY */ + /* Time table */ + input_booster,head_time = <0>; + input_booster,tail_time = <200>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 0>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <0 0>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; }; + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 0>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 0>; + }; + }; + }; booster_key@3 { - input_booster,label = "TOUCH"; - input_booster,type = <0x2>; - input_booster,levels = <0x1 0x2 0x3>; - input_booster,cpu_freqs = <0x104410 0x104410 0xd1790>; - input_booster,hmp_boost = <0x1 0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0 0x0>; - input_booster,int_freqs = <0x0 0x0 0x0>; - input_booster,dma_latency = <0x0 0x0 0x0>; - input_booster,head_times = <0x82 0x82 0x0>; - input_booster,tail_times = <0x0 0x0 0x1f4>; - input_booster,phase_times = <0x0 0x0 0x0>; - }; - - booster_key@4 { - input_booster,label = "MULTITOUCH"; - input_booster,type = <0x3>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0xd1790>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x3e8 0x0>; - input_booster,tail_times = <0x0 0x1f4>; - input_booster,phase_times = <0x0 0x0>; + input_booster,label = "touch"; + input_booster,type = <2>; /* BOOSTER_DEVICE_TOUCH */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <500>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; }; + booster_key@4 { // Input Booster + + input_booster,label = "multitouch"; + input_booster,type = <3>; /* BOOSTER_DEVICE_MULTITOUCH */ + /* Time table */ + input_booster,head_time = <1000>; + input_booster,tail_time = <500>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@5 { - input_booster,label = "KEYBOARD"; - input_booster,type = <0x4>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0x104410>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x82 0x82>; - input_booster,tail_times = <0x0 0x0>; - input_booster,phase_times = <0x0 0x0>; + input_booster,label = "keyboard"; + input_booster,type = <4>; /* BOOSTER_DEVICE_KEYBOARD */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <0>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; }; + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@6 { - input_booster,label = "MOUSE"; - input_booster,type = <0x5>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0xd1790>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x82 0x0>; - input_booster,tail_times = <0x0 0x1f4>; - input_booster,phase_times = <0x0 0x0>; + input_booster,label = "mouse"; + input_booster,type = <5>; /* BOOSTER_DEVICE_MOUSE */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <500>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; }; + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@7 { - input_booster,label = "MOUSE WHEEL"; - input_booster,type = <0x6>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0x0>; - input_booster,hmp_boost = <0x1 0x0>; - input_booster,kfc_freqs = <0xcb200 0x0>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x82 0x0>; - input_booster,tail_times = <0x0 0x0>; - input_booster,phase_times = <0x0 0x0>; + input_booster,label = "mouse_wheel"; + input_booster,type = <6>; /* BOOSTER_DEVICE_MOUSE */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <0>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; }; + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@8 { - input_booster,label = "PEN HOVER"; - input_booster,type = <0x7>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0xd1790>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x82 0x0>; - input_booster,tail_times = <0x0 0x1f4>; - input_booster,phase_times = <0x0 0x0>; + input_booster,label = "pen_hover"; + input_booster,type = <7>; /* BOOSTER_DEVICE_MOUSE */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <500>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; }; + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@9 { - input_booster,label = "PEN"; - input_booster,type = <0x8>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x11da50 0xd1790>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,bimc_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0xc8 0x0>; - input_booster,tail_times = <0x0 0x258>; + input_booster,label = "pen"; + input_booster,type = <8>; /* BOOSTER_DEVICE_MOUSE */ + /* Time table */ + input_booster,head_time = <200>; + input_booster,tail_time = <600>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1170000 858000>; }; + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@10 { - input_booster,label = "KEY_TWO"; - input_booster,type = <0x9>; - input_booster,levels = <0x1>; - input_booster,cpu_freqs = <0x166a48>; - input_booster,hmp_boost = <0x1>; - input_booster,kfc_freqs = <0x101148>; - input_booster,mif_freqs = <0x0>; - input_booster,int_freqs = <0x0>; - input_booster,dma_latency = <0x0>; - input_booster,head_times = <0x2bc>; - input_booster,tail_times = <0x2bc>; - input_booster,phase_times = <0x0>; + input_booster,label = "key_two"; + input_booster,type = <9>; /* BOOSTER_DEVICE_KEY */ + /* Time table */ + input_booster,head_time = <700>; + input_booster,tail_time = <700>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1469000 0>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <1053000 0>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; // Input Booster - + /* If you need to add new key type, add it this position */ }; exynos-snapshot { @@ -5012,7 +5299,7 @@ gpu_dynamic_abb = <0x0>; gpu_early_clk_gating = <0x0>; gpu_dvs = <0x0>; - gpu_inter_frame_pm = <0x1>; + gpu_inter_frame_pm = <0x0>; gpu_perf_gathering = <0x0>; gpu_runtime_pm_delay_time = <0x32>; gpu_dvfs_polling_time = <0x1e>; @@ -8345,7 +8632,8 @@ status = "ok"; ip_ver = <0x11>; clock_rate = <0x17d78400>; - min_rate = <0x186a0>; + min_rate = <0x186a0>; + enc_ts_delta = <0x1 0x211208>; num_qos_steps = <0x8>; max_qos_steps = <0x9>; max_mb = <0x489732>; @@ -10308,7 +10596,7 @@ boost_table = <0x14 0xd1790 0xf 0xeadd0 0x5 0x133dc8 0x0>; up_rate_limit_table = <0x5>; down_rate_limit_table = <0x5>; - upscale_ratio_table = <0x32 0xeadd0 0x41>; + upscale_ratio_table = <0x32 0xeadd0 0x41 0x166a48 0x50>; }; }; @@ -11077,58 +11365,78 @@ default_int = <0x1a1f8>; default_hpg = <0x1>; front_preview_int_cam = <0x9c400>; - front_preview_cam = <0x927c0>; + front_preview_cam = <0x9c400>; front_preview_mif = <0xf78f0>; front_preview_int = <0x1a1f8>; front_preview_hpg = <0x1>; front_preview_full_int_cam = <0xa1220>; - front_preview_full_cam = <0x927c0>; + front_preview_full_cam = <0x9c400>; front_preview_full_mif = <0xf78f0>; front_preview_full_int = <0x1a1f8>; front_preview_full_hpg = <0x1>; front_capture_int_cam = <0xa1220>; - front_capture_cam = <0x927c0>; - front_capture_mif = <0xf78f0>; + front_capture_cam = <0x9c400>; + front_capture_mif = <0x1fefc8>; front_capture_int = <0x1a1f8>; front_capture_hpg = <0x1>; front_video_int_cam = <0x9c400>; - front_video_cam = <0x927c0>; + front_video_cam = <0x9c400>; front_video_mif = <0xf78f0>; front_video_int = <0x1a1f8>; front_video_hpg = <0x1>; front_video_whd_int_cam = <0x9c400>; - front_video_whd_cam = <0x927c0>; + front_video_whd_cam = <0x9c400>; front_video_whd_mif = <0xf78f0>; front_video_whd_int = <0x1a1f8>; front_video_whd_hpg = <0x1>; + front_video_uhd_int_cam = <0xa1220>; + front_video_uhd_cam = <0x9c400>; + front_video_uhd_mif = <0xf78f0>; + front_video_uhd_int = <0x1a1f8>; + front_video_uhd_hpg = <0x1>; + front_video_fhd_60fps_int_cam = <0xa1220>; + front_video_fhd_60fps_cam = <0x9c400>; + front_video_fhd_60fps_mif = <0xf78f0>; + front_video_fhd_60fps_int = <0x1a1f8>; + front_video_fhd_60fps_hpg = <0x1>; front_video_capture_int_cam = <0xa1220>; - front_video_capture_cam = <0x94ed0>; - front_video_capture_mif = <0xf78f0>; + front_video_capture_cam = <0x9c400>; + front_video_capture_mif = <0x1fefc8>; front_video_capture_int = <0x1a1f8>; front_video_capture_hpg = <0x1>; front_video_whd_capture_int_cam = <0xa1220>; - front_video_whd_capture_cam = <0x927c0>; - front_video_whd_capture_mif = <0xf78f0>; + front_video_whd_capture_cam = <0x9c400>; + front_video_whd_capture_mif = <0x1fefc8>; front_video_whd_capture_int = <0x1a1f8>; front_video_whd_capture_hpg = <0x1>; + front_video_uhd_capture_int_cam = <0xa1220>; + front_video_uhd_capture_cam = <0x9c400>; + front_video_uhd_capture_mif = <0x1fefc8>; + front_video_uhd_capture_int = <0x1a1f8>; + front_video_uhd_capture_hpg = <0x1>; + front_video_fhd_60fps_capture_int_cam = <0xa1220>; + front_video_fhd_60fps_capture_cam = <0x9c400>; + front_video_fhd_60fps_capture_mif = <0x1fefc8>; + front_video_fhd_60fps_capture_int = <0x1a1f8>; + front_video_fhd_60fps_capture_hpg = <0x1>; front_vt1_int_cam = <0x9c400>; - front_vt1_cam = <0x927c0>; + front_vt1_cam = <0x9c400>; front_vt1_mif = <0xf78f0>; front_vt1_int = <0x1a1f8>; front_vt1_hpg = <0x1>; front_vt2_int_cam = <0x9c400>; - front_vt2_cam = <0x927c0>; + front_vt2_cam = <0x9c400>; front_vt2_mif = <0xf78f0>; front_vt2_int = <0x1a1f8>; front_vt2_hpg = <0x1>; front_vt4_int_cam = <0x9c400>; - front_vt4_cam = <0x927c0>; + front_vt4_cam = <0x9c400>; front_vt4_mif = <0xf78f0>; front_vt4_int = <0x1a1f8>; front_vt4_hpg = <0x1>; front_preview_high_speed_fps_int_cam = <0xa1220>; - front_preview_high_speed_fps_cam = <0x94ed0>; - front_preview_high_speed_fps_mif = <0xf78f0>; + front_preview_high_speed_fps_cam = <0x9c400>; + front_preview_high_speed_fps_mif = <0x14a140>; front_preview_high_speed_fps_int = <0x1a1f8>; front_preview_high_speed_fps_hpg = <0x1>; rear2_preview_fhd_int_cam = <0x9c400>; @@ -11138,22 +11446,22 @@ rear2_preview_fhd_hpg = <0x1>; rear2_capture_int_cam = <0xa1220>; rear2_capture_cam = <0x9c400>; - rear2_capture_mif = <0xf78f0>; + rear2_capture_mif = <0x1fefc8>; rear2_capture_int = <0x1a1f8>; rear2_capture_hpg = <0x1>; - rear2_video_fhd_int_cam = <0x9c400>; + rear2_video_fhd_int_cam = <0xa1220>; rear2_video_fhd_cam = <0x9c400>; rear2_video_fhd_mif = <0xf78f0>; rear2_video_fhd_int = <0x1a1f8>; rear2_video_fhd_hpg = <0x1>; rear2_video_fhd_capture_int_cam = <0xa1220>; rear2_video_fhd_capture_cam = <0x9c400>; - rear2_video_fhd_capture_mif = <0xf78f0>; + rear2_video_fhd_capture_mif = <0x1fefc8>; rear2_video_fhd_capture_int = <0x1a1f8>; rear2_video_fhd_capture_hpg = <0x1>; rear_preview_fhd_int_cam = <0x9c400>; rear_preview_fhd_cam = <0x9c400>; - rear_preview_fhd_mif = <0xf78f0>; + rear_preview_fhd_mif = <0x177bb8>; rear_preview_fhd_int = <0x1a1f8>; rear_preview_fhd_hpg = <0x1>; rear_preview_whd_int_cam = <0x9c400>; @@ -11163,7 +11471,7 @@ rear_preview_whd_hpg = <0x1>; rear_preview_uhd_int_cam = <0xa1220>; rear_preview_uhd_cam = <0x9c400>; - rear_preview_uhd_mif = <0x177bb8>; + rear_preview_uhd_mif = <0x14a140>; rear_preview_uhd_int = <0x1a1f8>; rear_preview_uhd_hpg = <0x1>; rear_preview_uhd_60fps_int_cam = <0xa6040>; @@ -11173,27 +11481,27 @@ rear_preview_uhd_60fps_hpg = <0x1>; rear_preview_full_int_cam = <0xa1220>; rear_preview_full_cam = <0x9c400>; - rear_preview_full_mif = <0x14a140>; + rear_preview_full_mif = <0xf78f0>; rear_preview_full_int = <0x1a1f8>; rear_preview_full_hpg = <0x1>; rear_capture_int_cam = <0xa1220>; rear_capture_cam = <0x9c400>; - rear_capture_mif = <0xf78f0>; + rear_capture_mif = <0x1fefc8>; rear_capture_int = <0x1a1f8>; rear_capture_hpg = <0x1>; - rear_video_fhd_int_cam = <0x9c400>; + rear_video_fhd_int_cam = <0xa1220>; rear_video_fhd_cam = <0x9c400>; rear_video_fhd_mif = <0xf78f0>; rear_video_fhd_int = <0x1a1f8>; rear_video_fhd_hpg = <0x1>; - rear_video_whd_int_cam = <0x9c400>; + rear_video_whd_int_cam = <0xa1220>; rear_video_whd_cam = <0x9c400>; rear_video_whd_mif = <0xf78f0>; rear_video_whd_int = <0x1a1f8>; rear_video_whd_hpg = <0x1>; rear_video_uhd_int_cam = <0xa1220>; rear_video_uhd_cam = <0x9c400>; - rear_video_uhd_mif = <0x177bb8>; + rear_video_uhd_mif = <0x14a140>; rear_video_uhd_int = <0x1a1f8>; rear_video_uhd_hpg = <0x1>; rear_video_uhd_60fps_int_cam = <0xa6040>; @@ -11203,57 +11511,57 @@ rear_video_uhd_60fps_hpg = <0x1>; rear_video_fhd_capture_int_cam = <0xa1220>; rear_video_fhd_capture_cam = <0x9c400>; - rear_video_fhd_capture_mif = <0xf78f0>; + rear_video_fhd_capture_mif = <0x1fefc8>; rear_video_fhd_capture_int = <0x1a1f8>; rear_video_fhd_capture_hpg = <0x1>; rear_video_whd_capture_int_cam = <0xa1220>; rear_video_whd_capture_cam = <0x9c400>; - rear_video_whd_capture_mif = <0xf78f0>; + rear_video_whd_capture_mif = <0x1fefc8>; rear_video_whd_capture_int = <0x1a1f8>; rear_video_whd_capture_hpg = <0x1>; rear_video_uhd_capture_int_cam = <0xa1220>; rear_video_uhd_capture_cam = <0x9c400>; - rear_video_uhd_capture_mif = <0x177bb8>; + rear_video_uhd_capture_mif = <0x1fefc8>; rear_video_uhd_capture_int = <0x1a1f8>; rear_video_uhd_capture_hpg = <0x1>; - dual_preview_int_cam = <0x9c400>; + dual_preview_int_cam = <0xa1220>; dual_preview_cam = <0x9c400>; - dual_preview_mif = <0xf78f0>; + dual_preview_mif = <0x177bb8>; dual_preview_int = <0x1a1f8>; dual_preview_hpg = <0x1>; dual_capture_int_cam = <0xa1220>; dual_capture_cam = <0x9c400>; - dual_capture_mif = <0xf78f0>; + dual_capture_mif = <0x1fefc8>; dual_capture_int = <0x1a1f8>; dual_capture_hpg = <0x1>; - dual_video_fhd_int_cam = <0x9c400>; + dual_video_fhd_int_cam = <0xa1220>; dual_video_fhd_cam = <0x9c400>; - dual_video_fhd_mif = <0xf78f0>; + dual_video_fhd_mif = <0x14a140>; dual_video_fhd_int = <0x1a1f8>; dual_video_fhd_hpg = <0x1>; dual_video_fhd_capture_int_cam = <0xa1220>; dual_video_fhd_capture_cam = <0x9c400>; - dual_video_fhd_capture_mif = <0xf78f0>; + dual_video_fhd_capture_mif = <0x1fefc8>; dual_video_fhd_capture_int = <0x1a1f8>; dual_video_fhd_capture_hpg = <0x1>; dual_video_uhd_int_cam = <0xa1220>; dual_video_uhd_cam = <0x9c400>; - dual_video_uhd_mif = <0x177bb8>; + dual_video_uhd_mif = <0x14a140>; dual_video_uhd_int = <0x1a1f8>; dual_video_uhd_hpg = <0x1>; dual_video_uhd_capture_int_cam = <0xa1220>; dual_video_uhd_capture_cam = <0x9c400>; - dual_video_uhd_capture_mif = <0x177bb8>; + dual_video_uhd_capture_mif = <0x1fefc8>; dual_video_uhd_capture_int = <0x1a1f8>; dual_video_uhd_capture_hpg = <0x1>; dual_sync_preview_int_cam = <0xa1220>; dual_sync_preview_cam = <0x9c400>; - dual_sync_preview_mif = <0x177bb8>; + dual_sync_preview_mif = <0x1b5fd0>; dual_sync_preview_int = <0x1a1f8>; dual_sync_preview_hpg = <0x1>; dual_sync_capture_int_cam = <0xa3930>; dual_sync_capture_cam = <0x9c400>; - dual_sync_capture_mif = <0x1b5fd0>; + dual_sync_capture_mif = <0x1fefc8>; dual_sync_capture_int = <0x1a1f8>; dual_sync_capture_hpg = <0x1>; dual_sync_preview_whd_int_cam = <0xa6040>; @@ -11262,32 +11570,32 @@ dual_sync_preview_whd_int = <0x1a1f8>; dual_sync_preview_whd_hpg = <0x1>; dual_sync_whd_capture_int_cam = <0xa6040>; - dual_sync_whd_capture_cam = <0xa6040>; - dual_sync_whd_capture_mif = <0x1b5fd0>; + dual_sync_whd_capture_cam = <0x9c400>; + dual_sync_whd_capture_mif = <0x1fefc8>; dual_sync_whd_capture_int = <0x1a1f8>; dual_sync_whd_capture_hpg = <0x1>; - dual_sync_video_fhd_int_cam = <0xa1220>; - dual_sync_video_fhd_cam = <0xa6040>; + dual_sync_video_fhd_int_cam = <0xa6040>; + dual_sync_video_fhd_cam = <0x9c400>; dual_sync_video_fhd_mif = <0x177bb8>; dual_sync_video_fhd_int = <0x1a1f8>; dual_sync_video_fhd_hpg = <0x1>; - dual_sync_video_fhd_capture_int_cam = <0xa3930>; - dual_sync_video_fhd_capture_cam = <0xa6040>; - dual_sync_video_fhd_capture_mif = <0x1b5fd0>; + dual_sync_video_fhd_capture_int_cam = <0xa6040>; + dual_sync_video_fhd_capture_cam = <0x9c400>; + dual_sync_video_fhd_capture_mif = <0x1fefc8>; dual_sync_video_fhd_capture_int = <0x1a1f8>; dual_sync_video_fhd_capture_hpg = <0x1>; dual_sync_video_uhd_int_cam = <0xa6040>; - dual_sync_video_uhd_cam = <0xa6040>; + dual_sync_video_uhd_cam = <0x9c400>; dual_sync_video_uhd_mif = <0x177bb8>; dual_sync_video_uhd_int = <0x1a1f8>; dual_sync_video_uhd_hpg = <0x1>; dual_sync_video_uhd_capture_int_cam = <0xa6040>; - dual_sync_video_uhd_capture_cam = <0xa6040>; - dual_sync_video_uhd_capture_mif = <0x1b5fd0>; + dual_sync_video_uhd_capture_cam = <0x9c400>; + dual_sync_video_uhd_capture_mif = <0x1fefc8>; dual_sync_video_uhd_capture_int = <0x1a1f8>; dual_sync_video_uhd_capture_hpg = <0x1>; secure_front_int_cam = <0x9c400>; - secure_front_cam = <0x94ed0>; + secure_front_cam = <0x9c400>; secure_front_mif = <0xf78f0>; secure_front_int = <0x1a1f8>; secure_front_hpg = <0x1>; @@ -11298,7 +11606,7 @@ pip_preview_hpg = <0x1>; pip_capture_int_cam = <0xa3930>; pip_capture_cam = <0x9c400>; - pip_capture_mif = <0xf78f0>; + pip_capture_mif = <0x1fefc8>; pip_capture_int = <0x1a1f8>; pip_capture_hpg = <0x1>; pip_video_int_cam = <0xa1220>; @@ -11308,7 +11616,7 @@ pip_video_hpg = <0x1>; pip_video_capture_int_cam = <0xa3930>; pip_video_capture_cam = <0x9c400>; - pip_video_capture_mif = <0xf78f0>; + pip_video_capture_mif = <0x1fefc8>; pip_video_capture_int = <0x1a1f8>; pip_video_capture_hpg = <0x1>; preview_high_speed_fps_int_cam = <0xa1220>; @@ -11316,9 +11624,9 @@ preview_high_speed_fps_mif = <0xf78f0>; preview_high_speed_fps_int = <0x1a1f8>; preview_high_speed_fps_hpg = <0x1>; - video_high_speed_60fps_int_cam = <0xa1220>; + video_high_speed_60fps_int_cam = <0xa6040>; video_high_speed_60fps_cam = <0x9c400>; - video_high_speed_60fps_mif = <0x14a140>; + video_high_speed_60fps_mif = <0x177bb8>; video_high_speed_60fps_int = <0x1a1f8>; video_high_speed_60fps_hpg = <0x1>; video_high_speed_120fps_int_cam = <0xa1220>; @@ -11328,7 +11636,7 @@ video_high_speed_120fps_hpg = <0x1>; video_high_speed_240fps_int_cam = <0xa6040>; video_high_speed_240fps_cam = <0x9c400>; - video_high_speed_240fps_mif = <0x1b5fd0>; + video_high_speed_240fps_mif = <0x1fefc8>; video_high_speed_240fps_int = <0x1a1f8>; video_high_speed_240fps_hpg = <0x1>; video_high_speed_dualfps_int_cam = <0xa6040>; @@ -11336,9 +11644,9 @@ video_high_speed_dualfps_mif = <0x1b5fd0>; video_high_speed_dualfps_int = <0x1a1f8>; video_high_speed_dualfps_hpg = <0x6>; - video_high_speed_60fps_capture_int_cam = <0xa1220>; + video_high_speed_60fps_capture_int_cam = <0xa6040>; video_high_speed_60fps_capture_cam = <0x9c400>; - video_high_speed_60fps_capture_mif = <0x14a140>; + video_high_speed_60fps_capture_mif = <0x1fefc8>; video_high_speed_60fps_capture_int = <0x1a1f8>; video_high_speed_60fps_capture_hpg = <0x1>; ext_front_int_cam = <0xa8750>; @@ -11347,7 +11655,7 @@ ext_front_int = <0x825f0>; ext_front_hpg = <0x1>; ext_secure_int_cam = <0x9c400>; - ext_secure_cam = <0x94ed0>; + ext_secure_cam = <0x9c400>; ext_secure_mif = <0xf78f0>; ext_secure_int = <0x1a1f8>; ext_secure_hpg = <0x1>; @@ -12559,13 +12867,14 @@ status = "okay"; haptic,max_timeout = <0x2710>; haptic,multi_frequency = <0x7>; - haptic,duty = <0x8f0d 0xbebc 0x9896 0x7270 0x7f27 0x90f4 0x90f4>; - haptic,period = <0xbebc 0xfe50 0xcb73 0x9896 0xa98a 0x9896 0x9896>; + haptic,duty = <0x9ede 0xbebc 0x9896 0x7270 0x7f27 0x90f4 0x90f4>; + haptic,period = <0xbf68 0xfe50 0xcb73 0x9896 0xa98a 0x9896 0x9896>; haptic,reg2 = <0x82>; haptic,pwm_id = <0x1>; haptic,regulator_name = "VDD_MOTOR_3P3"; haptic,normal_ratio = <0x4b>; haptic,overdrive_ratio = <0x5f>; + haptic,type = "LINEAR_1040"; }; sound { @@ -13406,74 +13715,264 @@ }; }; - argos { - compatible = "samsung,argos"; - #address-cells = <0x1>; + argos { + compatible = "samsung,argos"; + #address-cells = <0x1>; - boot_device@1 { - net_boost,label = "IPC"; - net_boost,node = "rmnet0 rmnet1 rmnet2 rmnet3 rmnet4 rmnet5 rmnet6 rmnet7 umts_dm0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x64 0x0 0x0 0x101148 0x0 0xce4c8 0x0 0x0 0x0 0x0 0x96 0x0 0x0 0x130b00 0x0 0xf78f0 0x0 0x0 0x0 0x0 0xc8 0x1d5ba0 0x0 0x19c990 0x0 0x1b5fd0 0x0 0x0 0x0 0x0>; - }; + boot_device@1 { + net_boost,label = "UFS"; + net_boost,node = [00]; + net_boost,sysnode = "/sys/class/scsi_host/host0/transferred_cnt"; - boot_device@2 { - net_boost,label = "CLAT"; - net_boost,node = "clat clat4 v4-rmnet0 v4-rmnet1 v4-rmnet2 v4-rmnet3 v4-rmnet4 v4-rmnet5 v4-rmnet6 v4-rmnet7"; - net_boost,table_size = <0x5>; - net_boost,table = <0x1 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x64 0x104410 0x0 0x0 0x0 0xf78f0 0x0 0x0 0x0 0x0 0xc8 0x110b48 0x0 0x0 0x0 0x1b5fd0 0x0 0x0 0x0 0x0 0x12c 0x133dc8 0x0 0x0 0x0 0x1b5fd0 0x0 0x0 0x0 0x0 0x190 0x166a48 0x0 0x0 0x0 0x1b5fd0 0x0 0x0 0x0 0x0>; - }; + net_boost,table { - boot_device@3 { - net_boost,label = "UFS"; - net_boost,node = [00]; - net_boost,sysnode = "/sys/class/scsi_host/host0/transferred_cnt"; - net_boost,table_size = <0x2>; - net_boost,table = <0x70 0x0 0x0 0x163780 0x0 0x14a140 0x0 0x0 0x0 0x0 0x320 0x104410 0x0 0x163780 0x0 0x177bb8 0x0 0x0 0x0 0x1>; - }; + level_0 { + threshold = <0x190>; + lit_min = <0x163780>; + mif = <0x14a140>; + }; - boot_device@4 { - net_boost,label = "WIFI"; - net_boost,node = "wlan0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x96 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0xc8 0x0 0x0 0x0 0x0 0x0 0x0 0x1 0x1 0x1 0x12c 0x0 0x0 0x0 0x0 0x0 0x0 0x1 0x1 0x1>; - }; + level_1 { + threshold = <0x320>; + big_min = <0x104410>; + lit_min = <0x163780>; + mif = <0x177bb8>; + hmp_boost = "enable"; + }; + }; + }; - boot_device@5 { - net_boost,label = "WIFI TX"; - net_boost,node = "wlan0"; - net_boost,table_size = <0x4>; - net_boost,table = <0x3c 0x166a48 0x0 0x163780 0x0 0x0 0x0 0x0 0x0 0x0 0x96 0x19c990 0x0 0x19c990 0x0 0x0 0x0 0x0 0x0 0x0 0xc8 0x1d5ba0 0x0 0x1b5fd0 0x0 0x14a140 0x61a80 0x1 0x1 0x1 0x12c 0x1e8c50 0x0 0x1b5fd0 0x0 0x1b5fd0 0x825f0 0x1 0x1 0x1>; - }; + boot_device@2 { + net_boost,label = "WIFI TX"; + net_boost,node = "wlan0"; + net_boost,slowdown; - boot_device@6 { - net_boost,label = "WIFI RX"; - net_boost,node = "wlan0"; - net_boost,table_size = <0x4>; - net_boost,table = <0x64 0x11da50 0x0 0x101148 0x0 0x0 0x0 0x0 0x0 0x0 0x96 0x166a48 0x0 0x130b00 0x0 0x0 0x0 0x0 0x0 0x0 0xc8 0x19c990 0x0 0x130b00 0x0 0xce4c8 0x61a80 0x1 0x1 0x1 0x12c 0x1d5ba0 0x0 0x163780 0x0 0x14a140 0x825f0 0x1 0x1 0x1>; - }; + net_boost,table { - boot_device@7 { - net_boost,label = "P2P"; - net_boost,node = "p2p-wlan0-0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x1e 0x1174c0 0x0 0x11da50 0x0 0x0 0x0 0x0 0x0 0x0 0x5a 0x1c9080 0x0 0x183350 0x0 0x0 0x3e418 0x0 0x0 0x0 0x12c 0x1fbd00 0x0 0x183350 0x0 0x854d0 0x3e418 0x1 0x1 0x1>; - }; + level_0 { + threshold = <0x3c>; + big_min = <0x166a48>; + lit_min = <0x163780>; + }; - boot_device@8 { - net_boost,label = "NAN"; - net_boost,node = "aware_data0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x1e 0x1174c0 0x0 0x11da50 0x0 0x0 0x0 0x0 0x0 0x0 0x5a 0x1c9080 0x0 0x183350 0x0 0x0 0x3e418 0x0 0x0 0x0 0x12c 0x1fbd00 0x0 0x183350 0x0 0x854d0 0x3e418 0x1 0x1 0x1>; - }; + level_1 { + threshold = <0x96>; + big_min = <0x19c990>; + lit_min = <0x19c990>; + }; - boot_device@9 { - net_boost,label = "USB"; - net_boost,node = "rndis0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x1 0x0 0xc8 0x0 0x0 0x163780 0x0 0x177fa0 0x0 0x0 0x1 0x0 0x12c 0x0 0x0 0x19c990 0x0 0x1b5fd0 0x825f0 0x0 0x1 0x0>; - }; - }; + level_2 { + threshold = <0xc8>; + big_min = <0x1d5ba0>; + lit_min = <0x1b5fd0>; + mif = <0x14a140>; + int = <0x61a80>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + + level_3 { + threshold = <0x12c>; + big_min = <0x1e8c50>; + lit_min = <0x1b5fd0>; + mif = <0x1b5fd0>; + int = <0x825f0>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + }; + }; + + boot_device@3 { + net_boost,label = "WIFI RX"; + net_boost,node = "wlan0"; + net_boost,slowdown; + + net_boost,table { + + level_0 { + threshold = <0x64>; + big_min = <0x11da50>; + lit_min = <0x101148>; + }; + + level_1 { + threshold = <0x96>; + big_min = <0x166a48>; + lit_min = <0x130b00>; + }; + + level_2 { + threshold = <0xc8>; + big_min = <0x19c990>; + lit_min = <0x130b00>; + mif = <0xce4c8>; + int = <0x61a80>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + + level_3 { + threshold = <0x12c>; + big_min = <0x1d5ba0>; + lit_min = <0x163780>; + mif = <0x14a140>; + int = <0x825f0>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + }; + }; + + boot_device@4 { + net_boost,label = "P2P"; + net_boost,node = "p2p-wlan0-0"; + net_boost,slowdown; + + net_boost,table { + + level_0 { + threshold = <0x3c>; + big_min = <0x166a48>; + lit_min = <0x163780>; + }; + + level_1 { + threshold = <0x96>; + big_min = <0x19c990>; + lit_min = <0x19c990>; + }; + + level_2 { + threshold = <0xc8>; + big_min = <0x1d5ba0>; + lit_min = <0x1b5fd0>; + mif = <0x14a140>; + int = <0x61a80>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + + level_3 { + threshold = <0x12c>; + big_min = <0x1e8c50>; + lit_min = <0x1b5fd0>; + mif = <0x1b5fd0>; + int = <0x825f0>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + }; + }; + + boot_device@5 { + net_boost,label = "NAN"; + net_boost,node = "aware_data0"; + net_boost,slowdown; + + net_boost,table { + + level_0 { + threshold = <0x3c>; + big_min = <0x166a48>; + lit_min = <0x163780>; + }; + + level_1 { + threshold = <0x96>; + big_min = <0x19c990>; + lit_min = <0x19c990>; + }; + + level_2 { + threshold = <0xc8>; + big_min = <0x1d5ba0>; + lit_min = <0x1b5fd0>; + mif = <0x14a140>; + int = <0x61a80>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + + level_3 { + threshold = <0x12c>; + big_min = <0x1e8c50>; + lit_min = <0x1b5fd0>; + mif = <0x1b5fd0>; + int = <0x825f0>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + }; + }; + + boot_device@6 { + net_boost,label = "IPC"; + net_boost,node = "rmnet0 rmnet1 rmnet2 rmnet3 rmnet4 rmnet5 rmnet6 rmnet7 umts_dm0"; + + net_boost,table { + + level_0 { + threshold = <0x64>; + lit_min = <0x101148>; + mif = <0xce4c8>; + }; + + level_1 { + threshold = <0x96>; + lit_min = <0x130b00>; + mif = <0xf78f0>; + }; + + level_2 { + threshold = <0xc8>; + big_min = <0x1d5ba0>; + lit_min = <0x19c990>; + mif = <0x1b5fd0>; + }; + }; + }; + + boot_device@7 { + net_boost,label = "CLAT"; + net_boost,node = "clat clat4 v4-rmnet0 v4-rmnet1 v4-rmnet2 v4-rmnet3 v4-rmnet4 v4-rmnet5 v4-rmnet6 v4-rmnet7"; + + net_boost,table { + + level_0 { + threshold = <0x64>; + big_min = <0x104410>; + mif = <0xf78f0>; + }; + + level_1 { + threshold = <0xc8>; + big_min = <0x110b48>; + mif = <0x1b5fd0>; + }; + + level_2 { + threshold = <0x12c>; + big_min = <0x133dc8>; + mif = <0x1b5fd0>; + }; + + level_3 { + threshold = <0x190>; + big_min = <0x166a48>; + mif = <0x1b5fd0>; + }; + }; + }; + }; dev_ril_bridge_pdata { compatible = "samsung,dev_ril_bridge_pdata"; @@ -13696,7 +14195,7 @@ fuelgauge,capacity = <0xce7>; fuelgauge,discharge_temp_threshold = <0x258>; fuelgauge,discharge_volt_threshold = <0x1068>; - fuelgauge,ttf_capacity = <0xdac>; + fuelgauge,ttf_capacity = <0xc4e>; fuelgauge,cv_data = <0x9b8 0x33d 0x711 0x969 0x340 0x704 0x917 0x345 0x6e9 0x8e0 0x348 0x6cf 0x886 0x34e 0x6b9 0x838 0x352 0x69a 0x7f6 0x356 0x686 0x79e 0x35b 0x668 0x770 0x35d 0x656 0x72e 0x361 0x63a 0x705 0x363 0x628 0x6d5 0x366 0x618 0x6a7 0x369 0x5fb 0x693 0x369 0x5f5 0x683 0x36b 0x5eb 0x67c 0x36b 0x5e8 0x675 0x36c 0x5e5 0x64f 0x36e 0x5de 0x62c 0x370 0x5cb 0x611 0x371 0x5b7 0x608 0x372 0x5b2 0x5f0 0x373 0x5ab 0x5c5 0x376 0x590 0x597 0x378 0x581 0x574 0x37b 0x567 0x543 0x37e 0x551 0x513 0x380 0x534 0x4f3 0x382 0x523 0x4cf 0x386 0x508 0x4b2 0x388 0x4ef 0x47c 0x38a 0x4db 0x455 0x38d 0x4bd 0x42b 0x38f 0x4a1 0x407 0x392 0x484 0x3f5 0x393 0x474 0x3cf 0x395 0x457 0x3c1 0x397 0x43c 0x399 0x399 0x428 0x37c 0x39b 0x40e 0x377 0x39b 0x3fb 0x35f 0x39d 0x3ec 0x341 0x39f 0x3d0 0x328 0x3a1 0x3b2 0x313 0x3a2 0x396 0x30c 0x3a3 0x388 0x2fc 0x3a4 0x37f 0x2e8 0x3a6 0x360 0x2da 0x3a7 0x34e 0x2cb 0x3a8 0x33c 0x2b5 0x3a9 0x320 0x2a9 0x3aa 0x30f 0x29a 0x3ac 0x2f0 0x28b 0x3ad 0x2df 0x280 0x3ae 0x2c8 0x274 0x3b1 0x2b9 0x26e 0x3b2 0x2a7 0x26a 0x3b3 0x298 0x258 0x3b6 0x286 0x254 0x3b7 0x273 0x24d 0x3b9 0x266 0x248 0x3b9 0x259 0x240 0x3bc 0x23c 0x241 0x3bd 0x229 0x232 0x3be 0x217 0x1ff 0x3c8 0x1fa 0x1f9 0x3c9 0x1e7 0x1ed 0x3cb 0x1d0 0x1ec 0x3cc 0x1b3 0x1e4 0x3cd 0x1a1 0x1e0 0x3cf 0x18e 0x1da 0x3d0 0x17c 0x1d6 0x3d1 0x16c 0x1ce 0x3d1 0x163 0x1c8 0x3d2 0x150 0x1c4 0x3d3 0x149 0x1be 0x3d5 0x12f 0x1b5 0x3d6 0x11a 0x1ad 0x3d8 0xff 0x1a7 0x3d9 0xf2 0x1a6 0x3da 0xe5 0x19e 0x3db 0xd3 0x19b 0x3dc 0xc7 0x195 0x3dd 0xbf 0x18d 0x3de 0xab 0x187 0x3df 0x8c 0x183 0x3e0 0x7e 0x180 0x3e1 0x6b 0x174 0x3e3 0x54 0x16c 0x3e5 0x36 0x164 0x3e6 0x1a 0x164 0x3e6 0xd 0x0 0x3e8 0x0>; }; diff --git a/arch/arm64/boot/dts/exynos/exynos9810-star2lte_kor_26.dts b/arch/arm64/boot/dts/exynos/exynos9810-star2lte_kor_26.dts index 2550c0f46470..0fa20f63c359 100644 --- a/arch/arm64/boot/dts/exynos/exynos9810-star2lte_kor_26.dts +++ b/arch/arm64/boot/dts/exynos/exynos9810-star2lte_kor_26.dts @@ -47,6 +47,7 @@ }; tima_region@0xB8000000 { + status = "disabled"; compatible = "removed-dma-pool"; reg = <0x0 0xb8000000 0x200000>; linux,phandle = <0x1a7>; @@ -141,8 +142,7 @@ camera { compatible = "exynos8890-ion,camera"; ion,recyclable; - size = <0x1b800000>; - alloc-ranges = <0x0 0x40000000 0xc0000000>; + reg = <0x8 0x80000000 0x21c00000>; alignment = <0x0 0x400000>; id = <0xa>; }; @@ -156,6 +156,7 @@ }; rkp_region@0xAF800000 { + status = "disabled"; compatible = "removed-dma-pool"; reg = <0x0 0xaf800000 0x2000000>; linux,phandle = <0x1a8>; @@ -166,7 +167,7 @@ pinctrl@14050000 { compatible = "samsung,exynos9810-pinctrl"; reg = <0x0 0x14050000 0x1000>; - interrupts = <0x0 0x24 0x0 0x0 0x25 0x0 0x0 0x26 0x0 0x0 0x27 0x0 0x0 0x28 0x0 0x0 0x29 0x0 0x0 0x2a 0x0 0x0 0x2b 0x0 0x0 0x2c 0x0 0x0 0x2d 0x0 0x0 0x2e 0x0 0x0 0x2f 0x0 0x0 0x30 0x0 0x0 0x31 0x0 0x0 0x32 0x0 0x0 0x33 0x0 0x0 0x34 0x0 0x0 0x35 0x0 0x0 0x36 0x0 0x0 0x37 0x0 0x0 0x38 0x0 0x0 0x39 0x0 0x0 0x3a 0x0 0x0 0x3b 0x0 0x0 0x3c 0x0 0x0 0x3d 0x0 0x0 0x3e 0x0 0x0 0x3f 0x0 0x0 0x40 0x0 0x0 0x41 0x0 0x0 0x42 0x0 0x0 0x43 0x0 0x0 0x1be 0x0 0x0 0x1bf 0x0>; + interrupts = <0x0 0x24 0x0 0x0 0x25 0x0 0x0 0x26 0x0 0x0 0x27 0x0 0x0 0x28 0x0 0x0 0x29 0x0 0x0 0x2a 0x0 0x0 0x2b 0x0 0x0 0x2c 0x0 0x0 0x2d 0x0 0x0 0x2e 0x0 0x0 0x2f 0x0 0x0 0x30 0x0 0x0 0x31 0x0 0x0 0x32 0x0 0x0 0x33 0x0 0x0 0x34 0x0 0x0 0x35 0x0 0x0 0x36 0x0 0x0 0x37 0x0 0x0 0x38 0x0 0x0 0x39 0x0 0x0 0x3a 0x0 0x0 0x3b 0x0 0x0 0x3c 0x0 0x0 0x3d 0x0 0x0 0x3e 0x0 0x0 0x3f 0x0 0x0 0x40 0x0 0x0 0x41 0x0 0x0 0x42 0x0 0x0 0x43 0x0 0x0 0x1be 0x0 0x0 0x1bf 0x0>; pinctrl-names = "default"; pinctrl-0 = <0x2>; linux,phandle = <0x1a9>; @@ -175,10 +176,10 @@ gpa0 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x3>; - interrupt-parent = <0x1>; - interrupts = <0x0 0x24 0x0 0x0 0x25 0x0 0x0 0x26 0x0 0x0 0x27 0x0 0x0 0x28 0x0 0x0 0x29 0x0 0x0 0x2a 0x0 0x0 0x2b 0x0>; + interrupt-parent = <0x1>; + interrupts = <0x0 0x24 0x0 0x0 0x25 0x0 0x0 0x26 0x0 0x0 0x27 0x0 0x0 0x28 0x0 0x0 0x29 0x0 0x0 0x2a 0x0 0x0 0x2b 0x0>; linux,phandle = <0xfa>; phandle = <0xfa>; }; @@ -186,10 +187,10 @@ gpa1 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x3>; - interrupt-parent = <0x1>; - interrupts = <0x0 0x2c 0x0 0x0 0x2d 0x0 0x0 0x2e 0x0 0x0 0x2f 0x0 0x0 0x30 0x0 0x0 0x31 0x0 0x0 0x32 0x0 0x0 0x33 0x0>; + interrupt-parent = <0x1>; + interrupts = <0x0 0x2c 0x0 0x0 0x2d 0x0 0x0 0x2e 0x0 0x0 0x2f 0x0 0x0 0x30 0x0 0x0 0x31 0x0 0x0 0x32 0x0 0x0 0x33 0x0>; linux,phandle = <0x6c>; phandle = <0x6c>; }; @@ -197,10 +198,10 @@ gpa2 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x3>; - interrupt-parent = <0x1>; - interrupts = <0x0 0x34 0x0 0x0 0x35 0x0 0x0 0x36 0x0 0x0 0x37 0x0 0x0 0x38 0x0 0x0 0x39 0x0 0x0 0x3a 0x0 0x0 0x3b 0x0>; + interrupt-parent = <0x1>; + interrupts = <0x0 0x34 0x0 0x0 0x35 0x0 0x0 0x36 0x0 0x0 0x37 0x0 0x0 0x38 0x0 0x0 0x39 0x0 0x0 0x3a 0x0 0x0 0x3b 0x0>; linux,phandle = <0x6f>; phandle = <0x6f>; }; @@ -208,10 +209,10 @@ gpa3 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x3>; - interrupt-parent = <0x1>; - interrupts = <0x0 0x3c 0x0 0x0 0x3d 0x0 0x0 0x3e 0x0 0x0 0x3f 0x0 0x0 0x40 0x0 0x0 0x41 0x0 0x0 0x42 0x0 0x0 0x43 0x0>; + interrupt-parent = <0x1>; + interrupts = <0x0 0x3c 0x0 0x0 0x3d 0x0 0x0 0x3e 0x0 0x0 0x3f 0x0 0x0 0x40 0x0 0x0 0x41 0x0 0x0 0x42 0x0 0x0 0x43 0x0>; linux,phandle = <0x4a>; phandle = <0x4a>; }; @@ -219,7 +220,7 @@ gpq0 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x2>; linux,phandle = <0x1aa>; phandle = <0x1aa>; @@ -228,10 +229,10 @@ gpa4 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x3>; - interrupt-parent = <0x1>; - interrupts = <0x0 0x1be 0x0 0x0 0x1bf 0x0>; + interrupt-parent = <0x1>; + interrupts = <0x0 0x1be 0x0 0x0 0x1bf 0x0>; linux,phandle = <0xfb>; phandle = <0xfb>; }; @@ -553,7 +554,7 @@ gpb0 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x2>; linux,phandle = <0x1af>; phandle = <0x1af>; @@ -562,7 +563,7 @@ gpb1 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x2>; linux,phandle = <0x1b0>; phandle = <0x1b0>; @@ -571,7 +572,7 @@ gpb2 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x2>; linux,phandle = <0x1b1>; phandle = <0x1b1>; @@ -677,14 +678,14 @@ pinctrl@13A80000 { compatible = "samsung,exynos9810-pinctrl"; reg = <0x0 0x13a80000 0x1000>; - interrupts = <0x0 0x6d 0x0>; + interrupts = <0x0 0x6d 0x0>; linux,phandle = <0x1b6>; phandle = <0x1b6>; gph0 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x2>; linux,phandle = <0xc2>; phandle = <0xc2>; @@ -693,7 +694,7 @@ gph1 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x2>; linux,phandle = <0x72>; phandle = <0x72>; @@ -893,7 +894,7 @@ pinctrl@14220000 { compatible = "samsung,exynos9810-pinctrl"; reg = <0x0 0x14220000 0x1000>; - interrupts = <0x0 0x9 0x0 0x0 0xa 0x0 0x0 0xb 0x0 0x0 0xc 0x0 0x0 0xd 0x0 0x0 0xe 0x0 0x0 0xf 0x0 0x0 0x10 0x0 0x0 0x11 0x0 0x0 0x12 0x0 0x0 0x13 0x0 0x0 0x14 0x0 0x0 0x15 0x0 0x0 0x16 0x0 0x0 0x17 0x0 0x0 0x18 0x0 0x0 0x19 0x0 0x0 0x1a 0x0 0x0 0x1b 0x0 0x0 0x1c 0x0>; + interrupts = <0x0 0x9 0x0 0x0 0xa 0x0 0x0 0xb 0x0 0x0 0xc 0x0 0x0 0xd 0x0 0x0 0xe 0x0 0x0 0xf 0x0 0x0 0x10 0x0 0x0 0x11 0x0 0x0 0x12 0x0 0x0 0x13 0x0 0x0 0x14 0x0 0x0 0x15 0x0 0x0 0x16 0x0 0x0 0x17 0x0 0x0 0x18 0x0 0x0 0x19 0x0 0x0 0x1a 0x0 0x0 0x1b 0x0 0x0 0x1c 0x0>; pinctrl-names = "default"; pinctrl-0 = <0x3>; linux,phandle = <0x1bc>; @@ -902,10 +903,10 @@ gpm0 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x3>; - interrupt-parent = <0x1>; - interrupts = <0x0 0x9 0x0>; + interrupt-parent = <0x1>; + interrupts = <0x0 0x9 0x0>; linux,phandle = <0xa3>; phandle = <0xa3>; }; @@ -913,10 +914,10 @@ gpm1 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x3>; - interrupt-parent = <0x1>; - interrupts = <0x0 0xa 0x0>; + interrupt-parent = <0x1>; + interrupts = <0x0 0xa 0x0>; linux,phandle = <0xa4>; phandle = <0xa4>; }; @@ -924,10 +925,10 @@ gpm2 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x3>; - interrupt-parent = <0x1>; - interrupts = <0x0 0xb 0x0>; + interrupt-parent = <0x1>; + interrupts = <0x0 0xb 0x0>; linux,phandle = <0xa6>; phandle = <0xa6>; }; @@ -935,10 +936,10 @@ gpm3 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x3>; - interrupt-parent = <0x1>; - interrupts = <0x0 0xc 0x0>; + interrupt-parent = <0x1>; + interrupts = <0x0 0xc 0x0>; linux,phandle = <0xa7>; phandle = <0xa7>; }; @@ -946,10 +947,10 @@ gpm4 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x3>; - interrupt-parent = <0x1>; - interrupts = <0x0 0xd 0x0>; + interrupt-parent = <0x1>; + interrupts = <0x0 0xd 0x0>; linux,phandle = <0xa9>; phandle = <0xa9>; }; @@ -957,10 +958,10 @@ gpm5 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x3>; - interrupt-parent = <0x1>; - interrupts = <0x0 0xe 0x0>; + interrupt-parent = <0x1>; + interrupts = <0x0 0xe 0x0>; linux,phandle = <0xaa>; phandle = <0xaa>; }; @@ -968,10 +969,10 @@ gpm6 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x3>; - interrupt-parent = <0x1>; - interrupts = <0x0 0xf 0x0>; + interrupt-parent = <0x1>; + interrupts = <0x0 0xf 0x0>; linux,phandle = <0xac>; phandle = <0xac>; }; @@ -979,10 +980,10 @@ gpm7 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x3>; - interrupt-parent = <0x1>; - interrupts = <0x0 0x10 0x0>; + interrupt-parent = <0x1>; + interrupts = <0x0 0x10 0x0>; linux,phandle = <0xad>; phandle = <0xad>; }; @@ -990,10 +991,10 @@ gpm10 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x3>; - interrupt-parent = <0x1>; - interrupts = <0x0 0x11 0x0>; + interrupt-parent = <0x1>; + interrupts = <0x0 0x11 0x0>; linux,phandle = <0xaf>; phandle = <0xaf>; }; @@ -1001,10 +1002,10 @@ gpm11 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x3>; - interrupt-parent = <0x1>; - interrupts = <0x0 0x12 0x0>; + interrupt-parent = <0x1>; + interrupts = <0x0 0x12 0x0>; linux,phandle = <0xb0>; phandle = <0xb0>; }; @@ -1012,10 +1013,10 @@ gpm12 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x3>; - interrupt-parent = <0x1>; - interrupts = <0x0 0x13 0x0>; + interrupt-parent = <0x1>; + interrupts = <0x0 0x13 0x0>; linux,phandle = <0xb2>; phandle = <0xb2>; }; @@ -1023,10 +1024,10 @@ gpm13 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x3>; - interrupt-parent = <0x1>; - interrupts = <0x0 0x14 0x0>; + interrupt-parent = <0x1>; + interrupts = <0x0 0x14 0x0>; linux,phandle = <0xb3>; phandle = <0xb3>; }; @@ -1034,10 +1035,10 @@ gpm14 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x3>; - interrupt-parent = <0x1>; - interrupts = <0x0 0x15 0x0>; + interrupt-parent = <0x1>; + interrupts = <0x0 0x15 0x0>; linux,phandle = <0xb6>; phandle = <0xb6>; }; @@ -1045,10 +1046,10 @@ gpm15 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x3>; - interrupt-parent = <0x1>; - interrupts = <0x0 0x16 0x0>; + interrupt-parent = <0x1>; + interrupts = <0x0 0x16 0x0>; linux,phandle = <0xb7>; phandle = <0xb7>; }; @@ -1056,10 +1057,10 @@ gpm16 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x3>; - interrupt-parent = <0x1>; - interrupts = <0x0 0x17 0x0>; + interrupt-parent = <0x1>; + interrupts = <0x0 0x17 0x0>; linux,phandle = <0xbd>; phandle = <0xbd>; }; @@ -1067,10 +1068,10 @@ gpm17 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x3>; - interrupt-parent = <0x1>; - interrupts = <0x0 0x18 0x0>; + interrupt-parent = <0x1>; + interrupts = <0x0 0x18 0x0>; linux,phandle = <0xbe>; phandle = <0xbe>; }; @@ -1078,10 +1079,10 @@ gpm40 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x3>; - interrupt-parent = <0x1>; - interrupts = <0x0 0x19 0x0>; + interrupt-parent = <0x1>; + interrupts = <0x0 0x19 0x0>; linux,phandle = <0x1a2>; phandle = <0x1a2>; }; @@ -1089,10 +1090,10 @@ gpm41 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x3>; - interrupt-parent = <0x1>; - interrupts = <0x0 0x1a 0x0>; + interrupt-parent = <0x1>; + interrupts = <0x0 0x1a 0x0>; linux,phandle = <0x1bd>; phandle = <0x1bd>; }; @@ -1100,10 +1101,10 @@ gpm42 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x3>; - interrupt-parent = <0x1>; - interrupts = <0x0 0x1b 0x0>; + interrupt-parent = <0x1>; + interrupts = <0x0 0x1b 0x0>; linux,phandle = <0x1be>; phandle = <0x1be>; }; @@ -1111,10 +1112,10 @@ gpm43 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x3>; - interrupt-parent = <0x1>; - interrupts = <0x0 0x1c 0x0>; + interrupt-parent = <0x1>; + interrupts = <0x0 0x1c 0x0>; linux,phandle = <0xd5>; phandle = <0xd5>; }; @@ -1407,7 +1408,7 @@ pinctrl@11050000 { compatible = "samsung,exynos9810-pinctrl"; reg = <0x0 0x11050000 0x1000>; - interrupts = <0x0 0xf3 0x0>; + interrupts = <0x0 0xf3 0x0>; pinctrl-names = "sleep"; pinctrl-0 = <0x4>; linux,phandle = <0x1c7>; @@ -1416,7 +1417,7 @@ gpf0 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x2>; linux,phandle = <0x1c8>; phandle = <0x1c8>; @@ -1459,7 +1460,7 @@ pinctrl@11430000 { compatible = "samsung,exynos9810-pinctrl"; reg = <0x0 0x11430000 0x1000>; - interrupts = <0x0 0xfa 0x0>; + interrupts = <0x0 0xfa 0x0>; pinctrl-names = "default", "sleep"; pinctrl-0 = <0x5>; pinctrl-1 = <0x6>; @@ -1469,7 +1470,7 @@ gpf1 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x2>; linux,phandle = <0x1ca>; phandle = <0x1ca>; @@ -1478,7 +1479,7 @@ gpf2 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x2>; linux,phandle = <0x16e>; phandle = <0x16e>; @@ -1742,7 +1743,7 @@ pinctrl@10430000 { compatible = "samsung,exynos9810-pinctrl"; reg = <0x0 0x10430000 0x1000>; - interrupts = <0x0 0x18c 0x0>; + interrupts = <0x0 0x18c 0x0>; pinctrl-names = "default", "sleep"; pinctrl-0 = <0x7>; pinctrl-1 = <0x8>; @@ -1752,7 +1753,7 @@ gpp0 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x2>; linux,phandle = <0x62>; phandle = <0x62>; @@ -1761,7 +1762,7 @@ gpp1 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x2>; linux,phandle = <0x67>; phandle = <0x67>; @@ -1770,7 +1771,7 @@ gpp2 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x2>; linux,phandle = <0x74>; phandle = <0x74>; @@ -1779,7 +1780,7 @@ gpp3 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x2>; linux,phandle = <0x86>; phandle = <0x86>; @@ -1788,7 +1789,7 @@ gpg0 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x2>; linux,phandle = <0x4d>; phandle = <0x4d>; @@ -1797,7 +1798,7 @@ gpg1 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x2>; linux,phandle = <0x8d>; phandle = <0x8d>; @@ -1806,7 +1807,7 @@ gpg2 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x2>; linux,phandle = <0x83>; phandle = <0x83>; @@ -2741,7 +2742,7 @@ pinctrl@10830000 { compatible = "samsung,exynos9810-pinctrl"; reg = <0x0 0x10830000 0x1000>; - interrupts = <0x0 0x1a5 0x0>; + interrupts = <0x0 0x1a5 0x0>; pinctrl-names = "default", "sleep"; pinctrl-0 = <0x9>; pinctrl-1 = <0xa>; @@ -2751,7 +2752,7 @@ gpp4 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x2>; linux,phandle = <0x79>; phandle = <0x79>; @@ -2760,7 +2761,7 @@ gpp5 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x2>; linux,phandle = <0x85>; phandle = <0x85>; @@ -2769,7 +2770,7 @@ gpp6 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x2>; linux,phandle = <0x94>; phandle = <0x94>; @@ -2778,7 +2779,7 @@ gpc0 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x2>; linux,phandle = <0x59>; phandle = <0x59>; @@ -2787,7 +2788,7 @@ gpc1 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x2>; linux,phandle = <0x82>; phandle = <0x82>; @@ -2796,7 +2797,7 @@ gpd0 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x2>; linux,phandle = <0x52>; phandle = <0x52>; @@ -2805,7 +2806,7 @@ gpg3 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x2>; linux,phandle = <0x96>; phandle = <0x96>; @@ -3650,7 +3651,7 @@ gpt0 { gpio-controller; #gpio-cells = <0x2>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x2>; linux,phandle = <0x1f4>; phandle = <0x1f4>; @@ -4366,156 +4367,442 @@ input_booster { status = "okay"; compatible = "input_booster"; - #address-cells = <0x1>; - #size-cells = <0x0>; + max_resource_count = [37 00]; + #address-cells = <1>; + #size-cells = <0>; + ib_release_values = "0,0,0,0,0,0,0"; booster_key@1 { - input_booster,label = "KEY"; - input_booster,type = <0x0>; - input_booster,levels = <0x1>; - input_booster,cpu_freqs = <0x104410>; - input_booster,hmp_boost = <0x1>; - input_booster,kfc_freqs = <0x0>; - input_booster,mif_freqs = <0x0>; - input_booster,int_freqs = <0x0>; - input_booster,dma_latency = <0x0>; - input_booster,head_times = <0x1f4>; - input_booster,tail_times = <0x1f4>; - input_booster,phase_times = <0x0>; - }; + input_booster,label = "key"; + input_booster,type = <0>; /* BOOSTER_DEVICE_KEY */ + /* Time table */ + input_booster,head_time = <500>; + input_booster,tail_time = <500>; - booster_key@2 { - input_booster,label = "TOUCHKEY"; - input_booster,type = <0x1>; - input_booster,levels = <0x1>; - input_booster,cpu_freqs = <0x104410>; - input_booster,hmp_boost = <0x1>; - input_booster,kfc_freqs = <0x0>; - input_booster,mif_freqs = <0x0>; - input_booster,int_freqs = <0x0>; - input_booster,dma_latency = <0x0>; - input_booster,head_times = <0x0>; - input_booster,tail_times = <0xc8>; - input_booster,phase_times = <0x0>; + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 0>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <0 0>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 0>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 0>; + }; + }; }; + booster_key@2 { + input_booster,label = "touchkey"; + input_booster,type = <1>; /* BOOSTER_DEVICE_TOUCHKEY */ + /* Time table */ + input_booster,head_time = <0>; + input_booster,tail_time = <200>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 0>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <0 0>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 0>; + }; + resource@6 { + resource,label = "ucc"; + resource,value = <1 0>; + }; + }; + }; booster_key@3 { - input_booster,label = "TOUCH"; - input_booster,type = <0x2>; - input_booster,levels = <0x1 0x2 0x3>; - input_booster,cpu_freqs = <0x104410 0x104410 0xd1790>; - input_booster,hmp_boost = <0x1 0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0 0x0>; - input_booster,int_freqs = <0x0 0x0 0x0>; - input_booster,dma_latency = <0x0 0x0 0x0>; - input_booster,head_times = <0x82 0x82 0x0>; - input_booster,tail_times = <0x0 0x0 0x1f4>; - input_booster,phase_times = <0x0 0x0 0x0>; - }; - - booster_key@4 { - input_booster,label = "MULTITOUCH"; - input_booster,type = <0x3>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0xd1790>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x3e8 0x0>; - input_booster,tail_times = <0x0 0x1f4>; - input_booster,phase_times = <0x0 0x0>; + input_booster,label = "touch"; + input_booster,type = <2>; /* BOOSTER_DEVICE_TOUCH */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <500>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; }; + booster_key@4 { // Input Booster + + input_booster,label = "multitouch"; + input_booster,type = <3>; /* BOOSTER_DEVICE_MULTITOUCH */ + /* Time table */ + input_booster,head_time = <1000>; + input_booster,tail_time = <500>; - booster_key@5 { - input_booster,label = "KEYBOARD"; - input_booster,type = <0x4>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0x104410>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x82 0x82>; - input_booster,tail_times = <0x0 0x0>; - input_booster,phase_times = <0x0 0x0>; + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; }; + booster_key@5 { + input_booster,label = "keyboard"; + input_booster,type = <4>; /* BOOSTER_DEVICE_KEYBOARD */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <0>; - booster_key@6 { - input_booster,label = "MOUSE"; - input_booster,type = <0x5>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0xd1790>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x82 0x0>; - input_booster,tail_times = <0x0 0x1f4>; - input_booster,phase_times = <0x0 0x0>; + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; }; + booster_key@6 { + input_booster,label = "mouse"; + input_booster,type = <5>; /* BOOSTER_DEVICE_MOUSE */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <500>; - booster_key@7 { - input_booster,label = "MOUSE WHEEL"; - input_booster,type = <0x6>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0x0>; - input_booster,hmp_boost = <0x1 0x0>; - input_booster,kfc_freqs = <0xcb200 0x0>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x82 0x0>; - input_booster,tail_times = <0x0 0x0>; - input_booster,phase_times = <0x0 0x0>; + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; }; + booster_key@7 { + input_booster,label = "mouse_wheel"; + input_booster,type = <6>; /* BOOSTER_DEVICE_MOUSE */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <0>; - booster_key@8 { - input_booster,label = "PEN HOVER"; - input_booster,type = <0x7>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0xd1790>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x82 0x0>; - input_booster,tail_times = <0x0 0x1f4>; - input_booster,phase_times = <0x0 0x0>; + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; }; + booster_key@8 { + input_booster,label = "pen_hover"; + input_booster,type = <7>; /* BOOSTER_DEVICE_MOUSE */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <500>; - booster_key@9 { - input_booster,label = "PEN"; - input_booster,type = <0x8>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x11da50 0xd1790>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,bimc_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0xc8 0x0>; - input_booster,tail_times = <0x0 0x258>; + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; }; + booster_key@9 { + input_booster,label = "pen"; + input_booster,type = <8>; /* BOOSTER_DEVICE_MOUSE */ + /* Time table */ + input_booster,head_time = <200>; + input_booster,tail_time = <600>; - booster_key@10 { - input_booster,label = "KEY_TWO"; - input_booster,type = <0x9>; - input_booster,levels = <0x1>; - input_booster,cpu_freqs = <0x166a48>; - input_booster,hmp_boost = <0x1>; - input_booster,kfc_freqs = <0x101148>; - input_booster,mif_freqs = <0x0>; - input_booster,int_freqs = <0x0>; - input_booster,dma_latency = <0x0>; - input_booster,head_times = <0x2bc>; - input_booster,tail_times = <0x2bc>; - input_booster,phase_times = <0x0>; + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1170000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; }; + booster_key@10 { + input_booster,label = "key_two"; + input_booster,type = <9>; /* BOOSTER_DEVICE_KEY */ + /* Time table */ + input_booster,head_time = <700>; + input_booster,tail_time = <700>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1469000 0>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <1053000 0>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; // Input Booster - + /* If you need to add new key type, add it this position */ }; exynos-snapshot { @@ -4692,8 +4979,8 @@ arm-pmu { compatible = "arm,armv8-pmuv3"; - interrupts = <0x0 0xa7 0x4 0x0 0xa8 0x4 0x0 0xa9 0x4 0x0 0xaa 0x4 0x0 0x90 0x4 0x0 0x91 0x4 0x0 0x92 0x4 0x0 0x93 0x4>; - interrupt-affinity = <0x23 0x25 0x27 0x29 0x1b 0x1d 0x1f 0x21>; + interrupts = <0x0 0xa7 0x4 0x0 0xa8 0x4 0x0 0xa9 0x4 0x0 0xaa 0x4 0x0 0x90 0x4 0x0 0x91 0x4 0x0 0x92 0x4 0x0 0x93 0x4>; + interrupt-affinity = <0x23 0x25 0x27 0x29 0x1b 0x1d 0x1f 0x21>; }; cpus { @@ -4932,7 +5219,7 @@ exynos-ocp { compatible = "samsung,exynos-ocp"; - interrupts = <0x0 0xb5 0x0>; + interrupts = <0x0 0xb5 0x0>; sibling-cpus = "4-7"; down-step = <0x1>; max-freq-wo-ocp = <0x1b5fd0>; @@ -4957,16 +5244,16 @@ compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic"; #interrupt-cells = <0x3>; #address-cells = <0x0>; - interrupt-controller; + interrupt-controller; reg = <0x0 0x10101000 0x1000 0x0 0x10102000 0x1000 0x0 0x10104000 0x2000 0x0 0x10106000 0x2000>; - interrupts = <0x1 0x9 0xf04>; + interrupts = <0x1 0x9 0xf04>; linux,phandle = <0x1>; phandle = <0x1>; }; timer { compatible = "arm,armv8-timer"; - interrupts = <0x1 0xd 0xff08 0x1 0xe 0xff08 0x1 0xb 0xff08 0x1 0xa 0xff08>; + interrupts = <0x1 0xd 0xff08 0x1 0xe 0xff08 0x1 0xb 0xff08 0x1 0xa 0xff08>; clock-frequency = <0x18cba80>; use-clocksource-only; use-physical-timer; @@ -4983,10 +5270,10 @@ mct@10040000 { compatible = "samsung,exynos4210-mct"; reg = <0x0 0x10040000 0x800>; - interrupt-controller; + interrupt-controller; #interrupt-cells = <0x1>; - interrupt-parent = <0x44>; - interrupts = <0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb>; + interrupt-parent = <0x44>; + interrupts = <0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb>; clocks = <0x1a 0x1 0x1a 0x98>; clock-names = "fin_pll", "mct"; use-clockevent-only; @@ -4995,7 +5282,7 @@ #interrupt-cells = <0x1>; #address-cells = <0x0>; #size-cells = <0x0>; - interrupt-map = <0x0 0x1 0x0 0x1d2 0x0 0x1 0x1 0x0 0x1d3 0x0 0x2 0x1 0x0 0x1d4 0x0 0x3 0x1 0x0 0x1d5 0x0 0x4 0x1 0x0 0x1d6 0x0 0x5 0x1 0x0 0x1d7 0x0 0x6 0x1 0x0 0x1d8 0x0 0x7 0x1 0x0 0x1d9 0x0 0x8 0x1 0x0 0x1da 0x0 0x9 0x1 0x0 0x1db 0x0 0xa 0x1 0x0 0x1dc 0x0 0xb 0x1 0x0 0x1dd 0x0>; + interrupt-map = <0x0 0x1 0x0 0x1d2 0x0 0x1 0x1 0x0 0x1d3 0x0 0x2 0x1 0x0 0x1d4 0x0 0x3 0x1 0x0 0x1d5 0x0 0x4 0x1 0x0 0x1d6 0x0 0x5 0x1 0x0 0x1d7 0x0 0x6 0x1 0x0 0x1d8 0x0 0x7 0x1 0x0 0x1d9 0x0 0x8 0x1 0x0 0x1da 0x0 0x9 0x1 0x0 0x1db 0x0 0xa 0x1 0x0 0x1dc 0x0 0xb 0x1 0x0 0x1dd 0x0>; linux,phandle = <0x44>; phandle = <0x44>; }; @@ -5005,13 +5292,13 @@ #address-cells = <0x2>; #size-cells = <0x1>; compatible = "arm,amba-bus"; - interrupt-parent = <0x1>; + interrupt-parent = <0x1>; ranges; pdma0@1A2E0000 { compatible = "arm,pl330", "arm,primecell"; reg = <0x0 0x1a2e0000 0x1000>; - interrupts = <0x0 0x5c 0x0>; + interrupts = <0x0 0x5c 0x0>; clocks = <0x1a 0x3e8>; clock-names = "apb_pclk"; #dma-cells = <0x1>; @@ -5031,14 +5318,14 @@ mali@17500000 { compatible = "arm,mali"; reg = <0x0 0x17500000 0x5000>; - interrupts = <0x0 0x11a 0x0 0x0 0x119 0x0 0x0 0x11b 0x0>; - interrupt-names = "JOB", "MMU", "GPU"; + interrupts = <0x0 0x11a 0x0 0x0 0x119 0x0 0x0 0x11b 0x0>; + interrupt-names = "JOB", "MMU", "GPU"; g3d_cmu_cal_id = <0xb040004>; samsung,power-domain = <0x15>; g3d_genpd_name = "pd-embedded_g3d"; #cooling-cells = <0x2>; governor = "interactive"; - interactive_info = <0x52850 0x5e 0x0>; + interactive_info = <0x52850 0x5e 0x0>; gpu_dvfs_table_size = <0x6 0x7>; gpu_dvfs_table = <0x8ba60 0x4e 0x64 0x5 0x1b5fd0 0x1dc130 0x0 0x854d0 0x4e 0x63 0x1 0x1b5fd0 0x1dc130 0x0 0x6f158 0x4e 0x55 0x1 0x177bb8 0x1b5fd0 0x0 0x52850 0x4e 0x55 0x1 0x14a140 0x130b00 0x0 0x48ff8 0x4e 0x55 0x1 0xf78f0 0x0 0x0 0x3f7a0 0x4e 0x55 0x1 0xa50a0 0x0 0x0>; gpu_sustainable_info = <0x0 0x0 0x0 0x0 0x0>; @@ -5062,7 +5349,7 @@ gpu_dynamic_abb = <0x0>; gpu_early_clk_gating = <0x0>; gpu_dvs = <0x0>; - gpu_inter_frame_pm = <0x1>; + gpu_inter_frame_pm = <0x0>; gpu_perf_gathering = <0x0>; gpu_runtime_pm_delay_time = <0x32>; gpu_dvfs_polling_time = <0x1e>; @@ -5087,14 +5374,14 @@ ITMON@0 { compatible = "samsung,exynos-itmon"; - interrupts = <0x0 0x52 0x0 0x0 0x7a 0x0 0x0 0x7e 0x0 0x0 0x53 0x0 0x0 0x7f 0x0 0x0 0x51 0x0>; + interrupts = <0x0 0x52 0x0 0x0 0x7a 0x0 0x0 0x7e 0x0 0x0 0x53 0x0 0x0 0x7f 0x0 0x0 0x51 0x0>; }; dpp@0x16021000 { compatible = "samsung,exynos9-dpp"; #pb-id-cells = <0x3>; reg = <0x0 0x16021000 0x1000 0x0 0x16071000 0x1000 0x0 0x16070000 0x110>; - interrupts = <0x0 0xc5 0x0 0x0 0xcc 0x0>; + interrupts = <0x0 0xc5 0x0 0x0 0xcc 0x0>; samsung,power-domain = <0xd>; linux,phandle = <0x1f6>; phandle = <0x1f6>; @@ -5104,7 +5391,7 @@ compatible = "samsung,exynos9-dpp"; #pb-id-cells = <0x3>; reg = <0x0 0x16022000 0x1000 0x0 0x16072000 0x1000>; - interrupts = <0x0 0xc6 0x0 0x0 0xcd 0x0>; + interrupts = <0x0 0xc6 0x0 0x0 0xcd 0x0>; samsung,power-domain = <0xd>; linux,phandle = <0x1f7>; phandle = <0x1f7>; @@ -5114,7 +5401,7 @@ compatible = "samsung,exynos9-dpp"; #pb-id-cells = <0x3>; reg = <0x0 0x16023000 0x1000 0x0 0x16073000 0x1000>; - interrupts = <0x0 0xc7 0x0 0x0 0xce 0x0>; + interrupts = <0x0 0xc7 0x0 0x0 0xce 0x0>; samsung,power-domain = <0xd>; linux,phandle = <0x1f8>; phandle = <0x1f8>; @@ -5124,7 +5411,7 @@ compatible = "samsung,exynos9-dpp"; #pb-id-cells = <0x3>; reg = <0x0 0x16024000 0x1000 0x0 0x16074000 0x1000>; - interrupts = <0x0 0xc8 0x0 0x0 0xcf 0x0>; + interrupts = <0x0 0xc8 0x0 0x0 0xcf 0x0>; samsung,power-domain = <0xd>; linux,phandle = <0x1f9>; phandle = <0x1f9>; @@ -5134,7 +5421,7 @@ compatible = "samsung,exynos9-dpp"; #pb-id-cells = <0x3>; reg = <0x0 0x16025000 0x1000 0x0 0x16075000 0x1000>; - interrupts = <0x0 0xc9 0x0 0x0 0xd0 0x0>; + interrupts = <0x0 0xc9 0x0 0x0 0xd0 0x0>; samsung,power-domain = <0xd>; linux,phandle = <0x1fa>; phandle = <0x1fa>; @@ -5144,7 +5431,7 @@ compatible = "samsung,exynos9-dpp"; #pb-id-cells = <0x3>; reg = <0x0 0x16026000 0x1000 0x0 0x16076000 0x1000>; - interrupts = <0x0 0xca 0x0 0x0 0xd1 0x0>; + interrupts = <0x0 0xca 0x0 0x0 0xd1 0x0>; samsung,power-domain = <0xd>; linux,phandle = <0x1fb>; phandle = <0x1fb>; @@ -5170,7 +5457,7 @@ dsim@0x16080000 { compatible = "samsung,exynos9-dsim"; reg = <0x0 0x16080000 0x100 0x0 0x16160000 0x4000>; - interrupts = <0x0 0xbd 0x0>; + interrupts = <0x0 0xbd 0x0>; iommus = <0x45 0x46 0x47>; clock-names = "aclk"; clocks = <0x1a 0x352>; @@ -5195,7 +5482,7 @@ displayport@0x11090000 { compatible = "samsung,exynos-displayport"; reg = <0x0 0x11090000 0xffff>; - interrupts = <0x0 0xf8 0x0>; + interrupts = <0x0 0xf8 0x0>; iommus = <0x45 0x46 0x47>; clock-names = "aclk"; clocks = <0x1a 0x352>; @@ -5223,7 +5510,7 @@ compatible = "samsung,exynos9-decon"; #pb-id-cells = <0x4>; reg = <0x0 0x16030000 0x10000>; - interrupts = <0x0 0xb6 0x0 0x0 0xb7 0x0 0x0 0xbc 0x0 0x0 0x1a5 0x0>; + interrupts = <0x0 0xb6 0x0 0x0 0xb7 0x0 0x0 0xbc 0x0 0x0 0x1a5 0x0>; pinctrl-names = "hw_te_on", "hw_te_off"; pinctrl-0 = <0x50>; pinctrl-1 = <0x51>; @@ -5256,7 +5543,7 @@ compatible = "samsung,exynos9-decon"; #pb-id-cells = <0x4>; reg = <0x0 0x16050000 0x10000>; - interrupts = <0x0 0xc2 0x0 0x0 0xc3 0x0 0x0 0xc4 0x0>; + interrupts = <0x0 0xc2 0x0 0x0 0xc3 0x0 0x0 0xc4 0x0>; samsung,power-domain = <0xd>; max_win = <0x6>; default_win = <0x4>; @@ -5288,7 +5575,7 @@ dwc3 { compatible = "synopsys,dwc3"; reg = <0x0 0x10c00000 0x10000>; - interrupts = <0x0 0xf4 0x0>; + interrupts = <0x0 0xf4 0x0>; tx-fifo-resize = <0x0>; adj-sof-accuracy = <0x0>; is_not_vbus_pad = <0x1>; @@ -5313,7 +5600,7 @@ phy@11100000 { compatible = "samsung,exynos-usbdrd-phy"; reg = <0x0 0x11100000 0x200 0x0 0x110a0000 0x1000 0x0 0x110b0000 0x800>; - interrupts = <0x0 0x5f 0x0 0x0 0x60 0x0>; + interrupts = <0x0 0x5f 0x0 0x0 0x60 0x0>; clocks = <0x1a 0x1 0x1a 0x2c0>; clock-names = "ext_xtal", "aclk"; samsung,pmu-syscon = <0x43>; @@ -5705,7 +5992,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x10860000 0x1000>; - interrupts = <0x0 0x1a8 0x0>; + interrupts = <0x0 0x1a8 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default", "on_i2c", "off_i2c"; @@ -5738,7 +6025,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x10870000 0x1000>; - interrupts = <0x0 0x1a9 0x0>; + interrupts = <0x0 0x1a9 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default", "on_i2c", "off_i2c"; @@ -5786,7 +6073,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x10880000 0x1000>; - interrupts = <0x0 0x1aa 0x0>; + interrupts = <0x0 0x1aa 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default", "on_i2c", "off_i2c"; @@ -5819,7 +6106,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x10890000 0x1000>; - interrupts = <0x0 0x1ab 0x0>; + interrupts = <0x0 0x1ab 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default", "on_i2c", "off_i2c"; @@ -5855,7 +6142,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x10450000 0x1000>; - interrupts = <0x0 0x18e 0x0>; + interrupts = <0x0 0x18e 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -5876,7 +6163,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x10460000 0x1000>; - interrupts = <0x0 0x18f 0x0>; + interrupts = <0x0 0x18f 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -5897,7 +6184,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x10470000 0x1000>; - interrupts = <0x0 0x190 0x0>; + interrupts = <0x0 0x190 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -5918,7 +6205,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x10480000 0x1000>; - interrupts = <0x0 0x191 0x0>; + interrupts = <0x0 0x191 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -5939,7 +6226,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x10490000 0x1000>; - interrupts = <0x0 0x192 0x0>; + interrupts = <0x0 0x192 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -5960,7 +6247,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x104a0000 0x1000>; - interrupts = <0x0 0x193 0x0>; + interrupts = <0x0 0x193 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -5981,7 +6268,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x104b0000 0x1000>; - interrupts = <0x0 0x194 0x0>; + interrupts = <0x0 0x194 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -6029,7 +6316,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x104c0000 0x1000>; - interrupts = <0x0 0x195 0x0>; + interrupts = <0x0 0x195 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -6050,8 +6337,8 @@ status = "disabled"; pinctrl-names = "default"; pinctrl-0 = <0x6e>; - interrupt-parent = <0x4a>; - interrupts = <0x0 0x0 0x0>; + interrupt-parent = <0x4a>; + interrupts = <0x0 0x0 0x0>; sx9320,phen = <0x3>; sx9320,nirq-gpio = <0x4a 0x0 0x0>; sx9320,gain = <0x1>; @@ -6076,8 +6363,8 @@ rtcfmradio@64 { compatible = "richwave,rtc6213n", "rtc6213n"; reg = <0x64>; - interrupts = <0x1 0x0 0x0>; - interrupt-parent = <0x6f>; + interrupts = <0x1 0x0 0x0>; + interrupt-parent = <0x6f>; pinctrl-names = "default"; pinctrl-0 = <0x70 0x71>; fmint-gpio = <0x6f 0x1 0x0>; @@ -6092,7 +6379,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x104d0000 0x1000>; - interrupts = <0x0 0x196 0x0>; + interrupts = <0x0 0x196 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -6113,7 +6400,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x104e0000 0x1000>; - interrupts = <0x0 0x197 0x0>; + interrupts = <0x0 0x197 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -6134,7 +6421,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x104f0000 0x1000>; - interrupts = <0x0 0x198 0x0>; + interrupts = <0x0 0x198 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -6155,7 +6442,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x10500000 0x1000>; - interrupts = <0x0 0x199 0x0>; + interrupts = <0x0 0x199 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -6176,7 +6463,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x108a0000 0x1000>; - interrupts = <0x0 0x1ac 0x0>; + interrupts = <0x0 0x1ac 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -6197,7 +6484,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x108b0000 0x1000>; - interrupts = <0x0 0x1ad 0x0>; + interrupts = <0x0 0x1ad 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -6218,7 +6505,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x108c0000 0x1000>; - interrupts = <0x0 0x1ae 0x0>; + interrupts = <0x0 0x1ae 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -6250,7 +6537,7 @@ maxim,registers-of-amp = <0x1f 0x0 0x21 0xc0 0x2d 0x14 0x2f 0x0>; maxim,sub_reg = <0x3a>; maxim,mono_stereo = <0x1>; - interleave_mode = <0x1>; + interleave_mode = <0x1>; linux,phandle = <0x18a>; phandle = <0x18a>; }; @@ -6261,7 +6548,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x108d0000 0x1000>; - interrupts = <0x0 0x1af 0x0>; + interrupts = <0x0 0x1af 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default", "on_i2c", "off_i2c"; @@ -6306,7 +6593,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x108e0000 0x1000>; - interrupts = <0x0 0x1b0 0x0>; + interrupts = <0x0 0x1b0 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -6326,8 +6613,8 @@ sec-nfc@27 { compatible = "sec-nfc"; reg = <0x27>; - interrupts = <0x2 0x0 0x0>; - interrupt-parent = <0x6c>; + interrupts = <0x2 0x0 0x0>; + interrupt-parent = <0x6c>; sec-nfc,ven-gpio = <0x4c 0xb 0x0>; sec-nfc,irq-gpio = <0x6c 0x2 0x0>; sec-nfc,firm-gpio = <0x4c 0x9 0x0>; @@ -6343,8 +6630,8 @@ hrmsensor@57 { compatible = "hrmsensor"; reg = <0x57>; - interrupt-parent = <0x86>; - interrupts = <0x0 0x0 0x0>; + interrupt-parent = <0x86>; + interrupts = <0x0 0x0 0x0>; pinctrl-names = "default", "sleep", "idle"; pinctrl-0 = <0x87 0x88>; pinctrl-1 = <0x89 0x8a>; @@ -6361,7 +6648,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x108f0000 0x1000>; - interrupts = <0x0 0x1b1 0x0>; + interrupts = <0x0 0x1b1 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default", "on_i2c", "off_i2c"; @@ -6394,7 +6681,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x10900000 0x1000>; - interrupts = <0x0 0x1b2 0x0>; + interrupts = <0x0 0x1b2 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default", "on_i2c", "off_i2c"; @@ -6434,7 +6721,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x10910000 0x1000>; - interrupts = <0x0 0x1b3 0x0>; + interrupts = <0x0 0x1b3 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -6455,7 +6742,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x10920000 0x1000>; - interrupts = <0x0 0x1b4 0x0>; + interrupts = <0x0 0x1b4 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -6684,7 +6971,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x10930000 0x1000>; - interrupts = <0x0 0x1b5 0x0>; + interrupts = <0x0 0x1b5 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -6726,7 +7013,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x10940000 0x1000>; - interrupts = <0x0 0x1b6 0x0>; + interrupts = <0x0 0x1b6 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -6747,7 +7034,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x10950000 0x1000>; - interrupts = <0x0 0x1b7 0x0>; + interrupts = <0x0 0x1b7 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -6768,7 +7055,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x10520000 0x1000>; - interrupts = <0x0 0x19f 0x0>; + interrupts = <0x0 0x19f 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -6789,7 +7076,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x10530000 0x1000>; - interrupts = <0x0 0x1a0 0x0>; + interrupts = <0x0 0x1a0 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -6810,7 +7097,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x10540000 0x1000>; - interrupts = <0x0 0x1a1 0x0>; + interrupts = <0x0 0x1a1 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -6831,7 +7118,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x10550000 0x1000>; - interrupts = <0x0 0x1a2 0x0>; + interrupts = <0x0 0x1a2 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -6852,7 +7139,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x10560000 0x1000>; - interrupts = <0x0 0x1a3 0x0>; + interrupts = <0x0 0x1a3 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -6873,7 +7160,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x10570000 0x1000>; - interrupts = <0x0 0x1a4 0x0>; + interrupts = <0x0 0x1a4 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -6894,7 +7181,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x14300000 0x1000>; - interrupts = <0x0 0x0 0x0>; + interrupts = <0x0 0x0 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -6983,7 +7270,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x14310000 0x1000>; - interrupts = <0x0 0x1 0x0>; + interrupts = <0x0 0x1 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -7004,7 +7291,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x14320000 0x1000>; - interrupts = <0x0 0x2 0x0>; + interrupts = <0x0 0x2 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -7025,7 +7312,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x14330000 0x1000>; - interrupts = <0x0 0x3 0x0>; + interrupts = <0x0 0x3 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -7046,7 +7333,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x14340000 0x1000>; - interrupts = <0x0 0x4 0x0>; + interrupts = <0x0 0x4 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -7067,7 +7354,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x14350000 0x1000>; - interrupts = <0x0 0x5 0x0>; + interrupts = <0x0 0x5 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -7151,7 +7438,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x14360000 0x1000>; - interrupts = <0x0 0x6 0x0>; + interrupts = <0x0 0x6 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -7200,7 +7487,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x14370000 0x1000>; - interrupts = <0x0 0x7 0x0>; + interrupts = <0x0 0x7 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -7251,7 +7538,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x13ac0000 0x1000>; - interrupts = <0x0 0x68 0x0>; + interrupts = <0x0 0x68 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -7272,7 +7559,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x13ad0000 0x1000>; - interrupts = <0x0 0x6e 0x0>; + interrupts = <0x0 0x6e 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -7293,7 +7580,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x13ae0000 0x1000>; - interrupts = <0x0 0x69 0x0>; + interrupts = <0x0 0x69 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -7314,7 +7601,7 @@ samsung,check-transdone-int; default-clk = <0xbebc200>; reg = <0x0 0x13af0000 0x1000>; - interrupts = <0x0 0x6f 0x0>; + interrupts = <0x0 0x6f 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -7334,7 +7621,7 @@ compatible = "samsung,exynos-spi"; reg = <0x0 0x10850000 0x100>; samsung,spi-fifosize = <0x100>; - interrupts = <0x0 0x1a7 0x0>; + interrupts = <0x0 0x1a7 0x0>; dma-names = "tx", "rx"; swap-mode; #address-cells = <0x1>; @@ -7373,7 +7660,7 @@ compatible = "samsung,exynos-spi"; reg = <0x0 0x10450000 0x100>; samsung,spi-fifosize = <0x40>; - interrupts = <0x0 0x18e 0x0>; + interrupts = <0x0 0x18e 0x0>; dma-names = "tx", "rx"; swap-mode; #address-cells = <0x1>; @@ -7417,7 +7704,7 @@ compatible = "samsung,exynos-spi"; reg = <0x0 0x10470000 0x100>; samsung,spi-fifosize = <0x40>; - interrupts = <0x0 0x190 0x0>; + interrupts = <0x0 0x190 0x0>; dma-names = "tx", "rx"; swap-mode; #address-cells = <0x1>; @@ -7434,10 +7721,10 @@ compatible = "cirrus,cs47l93"; reg = <0x0>; spi-max-frequency = <0x17d7840>; - interrupts = <0x2 0x0 0x0>; - interrupt-controller; + interrupts = <0x2 0x0 0x0>; + interrupt-controller; #interrupt-cells = <0x2>; - interrupt-parent = <0x6f>; + interrupt-parent = <0x6f>; gpio-controller; #gpio-cells = <0x2>; #sound-dai-cells = <0x1>; @@ -7587,7 +7874,7 @@ compatible = "samsung,exynos-spi"; reg = <0x0 0x10490000 0x100>; samsung,spi-fifosize = <0x40>; - interrupts = <0x0 0x192 0x0>; + interrupts = <0x0 0x192 0x0>; dma-names = "tx", "rx"; swap-mode; #address-cells = <0x1>; @@ -7605,7 +7892,7 @@ compatible = "samsung,exynos-spi"; reg = <0x0 0x104b0000 0x100>; samsung,spi-fifosize = <0x40>; - interrupts = <0x0 0x194 0x0>; + interrupts = <0x0 0x194 0x0>; dma-names = "tx", "rx"; swap-mode; #address-cells = <0x1>; @@ -7623,7 +7910,7 @@ compatible = "samsung,exynos-spi"; reg = <0x0 0x104d0000 0x100>; samsung,spi-fifosize = <0x40>; - interrupts = <0x0 0x196 0x0>; + interrupts = <0x0 0x196 0x0>; dma-names = "tx", "rx"; swap-mode; #address-cells = <0x1>; @@ -7654,7 +7941,7 @@ compatible = "samsung,exynos-spi"; reg = <0x0 0x104f0000 0x100>; samsung,spi-fifosize = <0x40>; - interrupts = <0x0 0x198 0x0>; + interrupts = <0x0 0x198 0x0>; dma-names = "tx", "rx"; swap-mode; #address-cells = <0x1>; @@ -7672,7 +7959,7 @@ compatible = "samsung,exynos-spi"; reg = <0x0 0x108a0000 0x100>; samsung,spi-fifosize = <0x40>; - interrupts = <0x0 0x1ac 0x0>; + interrupts = <0x0 0x1ac 0x0>; dma-names = "tx", "rx"; swap-mode; #address-cells = <0x1>; @@ -7708,7 +7995,7 @@ compatible = "samsung,exynos-spi"; reg = <0x0 0x108c0000 0x100>; samsung,spi-fifosize = <0x40>; - interrupts = <0x0 0x1ae 0x0>; + interrupts = <0x0 0x1ae 0x0>; dma-names = "tx", "rx"; swap-mode; #address-cells = <0x1>; @@ -7726,7 +8013,7 @@ compatible = "samsung,exynos-spi"; reg = <0x0 0x108e0000 0x100>; samsung,spi-fifosize = <0x100>; - interrupts = <0x0 0x1b0 0x0>; + interrupts = <0x0 0x1b0 0x0>; dma-names = "tx", "rx"; swap-mode; #address-cells = <0x1>; @@ -7744,7 +8031,7 @@ compatible = "samsung,exynos-spi"; reg = <0x0 0x10900000 0x100>; samsung,spi-fifosize = <0x100>; - interrupts = <0x0 0x1b2 0x0>; + interrupts = <0x0 0x1b2 0x0>; dma-names = "tx", "rx"; swap-mode; #address-cells = <0x1>; @@ -7762,7 +8049,7 @@ compatible = "samsung,exynos-spi"; reg = <0x0 0x10920000 0x100>; samsung,spi-fifosize = <0x100>; - interrupts = <0x0 0x1b4 0x0>; + interrupts = <0x0 0x1b4 0x0>; dma-names = "tx", "rx"; swap-mode; #address-cells = <0x1>; @@ -7780,7 +8067,7 @@ compatible = "samsung,exynos-spi"; reg = <0x0 0x10940000 0x100>; samsung,spi-fifosize = <0x40>; - interrupts = <0x0 0x1b6 0x0>; + interrupts = <0x0 0x1b6 0x0>; dma-names = "tx", "rx"; swap-mode; #address-cells = <0x1>; @@ -7798,7 +8085,7 @@ compatible = "samsung,exynos-spi"; reg = <0x0 0x10520000 0x100>; samsung,spi-fifosize = <0x40>; - interrupts = <0x0 0x19f 0x0>; + interrupts = <0x0 0x19f 0x0>; dma-names = "tx", "rx"; swap-mode; #address-cells = <0x1>; @@ -7816,7 +8103,7 @@ compatible = "samsung,exynos-spi"; reg = <0x0 0x10540000 0x100>; samsung,spi-fifosize = <0x40>; - interrupts = <0x0 0x1a1 0x0>; + interrupts = <0x0 0x1a1 0x0>; dma-names = "tx", "rx"; swap-mode; #address-cells = <0x1>; @@ -7834,7 +8121,7 @@ compatible = "samsung,exynos-spi"; reg = <0x0 0x10560000 0x100>; samsung,spi-fifosize = <0x40>; - interrupts = <0x0 0x1a3 0x0>; + interrupts = <0x0 0x1a3 0x0>; dma-names = "tx", "rx"; swap-mode; #address-cells = <0x1>; @@ -7852,7 +8139,7 @@ compatible = "samsung,exynos-spi"; reg = <0x0 0x14300000 0x100>; samsung,spi-fifosize = <0x40>; - interrupts = <0x0 0x0 0x0>; + interrupts = <0x0 0x0 0x0>; dma-names = "tx", "rx"; swap-mode; #address-cells = <0x1>; @@ -7870,7 +8157,7 @@ compatible = "samsung,exynos-spi"; reg = <0x0 0x1432000 0x100>; samsung,spi-fifosize = <0x40>; - interrupts = <0x0 0x2 0x0>; + interrupts = <0x0 0x2 0x0>; dma-names = "tx", "rx"; swap-mode; #address-cells = <0x1>; @@ -7888,7 +8175,7 @@ compatible = "samsung,exynos-spi"; reg = <0x0 0x14340000 0x100>; samsung,spi-fifosize = <0x40>; - interrupts = <0x0 0x4 0x0>; + interrupts = <0x0 0x4 0x0>; dma-names = "tx", "rx"; swap-mode; #address-cells = <0x1>; @@ -7906,7 +8193,7 @@ compatible = "samsung,exynos-spi"; reg = <0x0 0x14360000 0x100>; samsung,spi-fifosize = <0x40>; - interrupts = <0x0 0x6 0x0>; + interrupts = <0x0 0x6 0x0>; dma-names = "tx", "rx"; swap-mode; #address-cells = <0x1>; @@ -7924,7 +8211,7 @@ compatible = "samsung,exynos-spi"; reg = <0x0 0x13ac0000 0x100>; samsung,spi-fifosize = <0x40>; - interrupts = <0x0 0x68 0x0>; + interrupts = <0x0 0x68 0x0>; dma-names = "tx", "rx"; swap-mode; #address-cells = <0x1>; @@ -7975,7 +8262,7 @@ compatible = "samsung,exynos-spi"; reg = <0x0 0x13ae0000 0x100>; samsung,spi-fifosize = <0x40>; - interrupts = <0x0 0x69 0x0>; + interrupts = <0x0 0x69 0x0>; dma-names = "tx", "rx"; swap-mode; #address-cells = <0x1>; @@ -7994,7 +8281,7 @@ samsung,separate-uart-clk; reg = <0x0 0x10440000 0x100>; samsung,fifo-size = <0x100>; - interrupts = <0x0 0x18d 0x0>; + interrupts = <0x0 0x18d 0x0>; pinctrl-names = "default"; pinctrl-0 = <0xfd>; samsung,usi-serial-v2; @@ -8028,7 +8315,7 @@ #size-cells = <0x1>; ranges; reg = <0x0 0x11120000 0x200 0x0 0x11121100 0x200 0x0 0x11110000 0x8000 0x0 0x11130000 0x100>; - interrupts = <0x0 0xf2 0x0>; + interrupts = <0x0 0xf2 0x0>; pinctrl-names = "default"; pinctrl-0 = <0xff 0x100>; clocks = <0x1a 0x2be 0x1a 0x2c5>; @@ -8089,13 +8376,13 @@ handler { compatible = "exynos,handler"; - interrupts = <0x0 0x9d 0x0 0x0 0x9e 0x0 0x0 0x9f 0x0 0x0 0xa0 0x0 0x0 0xa1 0x0 0x0 0xb4 0x0>; + interrupts = <0x0 0x9d 0x0 0x0 0x9e 0x0 0x0 0x9f 0x0 0x0 0xa0 0x0 0x0 0xa1 0x0 0x0 0xb4 0x0>; }; sysmmu@160A0000 { compatible = "samsung,exynos-sysmmu"; reg = <0x0 0x160a0000 0x9000>; - interrupts = <0x0 0xd3 0x0 0x0 0xd2 0x0>; + interrupts = <0x0 0xd3 0x0 0x0 0xd2 0x0>; qos = <0xf>; clock-names = "aclk"; clocks = <0x1a 0x356>; @@ -8111,7 +8398,7 @@ sysmmu@160B0000 { compatible = "samsung,exynos-sysmmu"; reg = <0x0 0x160b0000 0x9000>; - interrupts = <0x0 0xd5 0x0 0x0 0xd4 0x0>; + interrupts = <0x0 0xd5 0x0 0x0 0xd4 0x0>; qos = <0xf>; clock-names = "aclk"; clocks = <0x1a 0x357>; @@ -8127,7 +8414,7 @@ sysmmu@160C0000 { compatible = "samsung,exynos-sysmmu"; reg = <0x0 0x160c0000 0x9000>; - interrupts = <0x0 0xd7 0x0 0x0 0xd6 0x0>; + interrupts = <0x0 0xd7 0x0 0x0 0xd6 0x0>; qos = <0xf>; clock-names = "aclk"; clocks = <0x1a 0x358>; @@ -8152,8 +8439,8 @@ compatible = "samsung,iva"; reg = <0x0 0x17200000 0x200000>; iommus = <0x105>; - interrupt-names = "iva_mbox_irq"; - interrupts = <0x0 0x15c 0x0>; + interrupt-names = "iva_mbox_irq"; + interrupts = <0x0 0x15c 0x0>; clocks = <0x1a 0x460>; clock-names = "clk_iva"; samsung,power-domain = <0x17>; @@ -8172,7 +8459,7 @@ sysmmu@17020000 { compatible = "samsung,exynos-sysmmu"; reg = <0x0 0x17020000 0x9000>; - interrupts = <0x0 0x160 0x0>; + interrupts = <0x0 0x160 0x0>; clock-names = "aclk"; clocks = <0x1a 0x463>; #iommu-cells = <0x0>; @@ -8192,7 +8479,7 @@ compatible = "samsung,score"; dma-coherent; reg = <0x0 0x16d00000 0x100000>; - interrupts = <0x0 0xde 0x0>; + interrupts = <0x0 0xde 0x0>; clocks = <0x1a 0x44d 0x1a 0x456>; clock-names = "dspm", "dsps"; samsung,power-domain = <0x13>; @@ -8214,7 +8501,7 @@ sysmmu@16C20000 { compatible = "samsung,exynos-sysmmu"; reg = <0x0 0x16c20000 0x9000>; - interrupts = <0x0 0xea 0x0 0x0 0xeb 0x0>; + interrupts = <0x0 0xea 0x0 0x0 0xeb 0x0>; qos = <0xf>; clock-names = "aclk"; clocks = <0x1a 0x44e>; @@ -8230,7 +8517,7 @@ sysmmu@16C30000 { compatible = "samsung,exynos-sysmmu"; reg = <0x0 0x16c30000 0x9000>; - interrupts = <0x0 0xec 0x0 0x0 0xed 0x0>; + interrupts = <0x0 0xec 0x0 0x0 0xed 0x0>; qos = <0xf>; clock-names = "aclk"; clocks = <0x1a 0x44f>; @@ -8246,7 +8533,7 @@ sysmmu@17660000 { compatible = "samsung,exynos-sysmmu"; reg = <0x0 0x17660000 0x9000>; - interrupts = <0x0 0x113 0x0 0x0 0x114 0x0>; + interrupts = <0x0 0x113 0x0 0x0 0x114 0x0>; qos = <0xf>; clock-names = "aclk"; clocks = <0x1a 0x25c>; @@ -8262,7 +8549,7 @@ sysmmu@17680000 { compatible = "samsung,exynos-sysmmu"; reg = <0x0 0x17680000 0x9000>; - interrupts = <0x0 0x115 0x0 0x0 0x116 0x0>; + interrupts = <0x0 0x115 0x0 0x0 0x116 0x0>; qos = <0xf>; clock-names = "aclk"; clocks = <0x1a 0x25d>; @@ -8290,7 +8577,7 @@ g2d@17620000 { compatible = "samsung,exynos9810-g2d"; reg = <0x0 0x17620000 0x9000>; - interrupts = <0x0 0x109 0x0>; + interrupts = <0x0 0x109 0x0>; clock-names = "gate"; clocks = <0x1a 0x259>; samsung,power-domain = <0x14>; @@ -8305,7 +8592,7 @@ sysmmu@17780000 { compatible = "samsung,exynos-sysmmu"; reg = <0x0 0x17780000 0x9000>; - interrupts = <0x0 0x117 0x0 0x0 0x118 0x0>; + interrupts = <0x0 0x117 0x0 0x0 0x118 0x0>; qos = <0xf>; clock-names = "aclk"; clocks = <0x1a 0x25e>; @@ -8330,7 +8617,7 @@ compatible = "samsung,exynos8890-jpeg"; dma-coherent; reg = <0x0 0x17700000 0x1000>; - interrupts = <0x0 0x10a 0x0>; + interrupts = <0x0 0x10a 0x0>; clocks = <0x1a 0x25a>; clock-names = "gate"; iommus = <0x111>; @@ -8344,7 +8631,7 @@ compatible = "samsung,exynos-astc"; dma-coherent; reg = <0x0 0x17720000 0x1000>; - interrupts = <0x0 0x10c 0x0>; + interrupts = <0x0 0x10c 0x0>; clocks = <0x1a 0x258>; clock-names = "gate"; iommus = <0x111>; @@ -8357,7 +8644,7 @@ scaler@17710000 { compatible = "samsung,exynos5-scaler"; reg = <0x0 0x17710000 0x3000>; - interrupts = <0x0 0x10b 0x0>; + interrupts = <0x0 0x10b 0x0>; clocks = <0x1a 0x25b>; clock-names = "gate"; iommus = <0x111>; @@ -8371,7 +8658,7 @@ sysmmu@17880000 { compatible = "samsung,exynos-sysmmu"; reg = <0x0 0x17880000 0x9000>; - interrupts = <0x0 0x16c 0x0 0x0 0x16d 0x0>; + interrupts = <0x0 0x16c 0x0 0x0 0x16d 0x0>; qos = <0xf>; clock-names = "aclk"; clocks = <0x1a 0xc>; @@ -8387,7 +8674,7 @@ sysmmu@178A0000 { compatible = "samsung,exynos-sysmmu"; reg = <0x0 0x178a0000 0x9000>; - interrupts = <0x0 0x16e 0x0 0x0 0x16f 0x0>; + interrupts = <0x0 0x16e 0x0 0x0 0x16f 0x0>; qos = <0xf>; clock-names = "aclk"; clocks = <0x1a 0xd>; @@ -8411,7 +8698,7 @@ mfc0@178D0000 { compatible = "samsung,mfc-v6"; reg = <0x0 0x178d0000 0x10000>; - interrupts = <0x0 0x164 0x0>; + interrupts = <0x0 0x164 0x0>; clock-names = "aclk_mfc"; clocks = <0x1a 0xa>; iommus = <0x114 0x115>; @@ -8419,7 +8706,8 @@ status = "ok"; ip_ver = <0x11>; clock_rate = <0x17d78400>; - min_rate = <0x186a0>; + min_rate = <0x186a0>; + enc_ts_delta = <0x1 0x211208>; num_qos_steps = <0x8>; max_qos_steps = <0x9>; max_mb = <0x489732>; @@ -8550,7 +8838,7 @@ tsmux@178E0000 { compatible = "samsung,exynos-tsmux"; reg = <0x0 0x178e0000 0x1000>; - interrupts = <0x0 0x165 0x0>; + interrupts = <0x0 0x165 0x0>; iommus = <0x115>; samsung,power-domain = <0x18>; linux,phandle = <0x113>; @@ -8560,7 +8848,7 @@ sysmmu@17E00000 { compatible = "samsung,exynos-sysmmu"; reg = <0x0 0x17e00000 0x9000>; - interrupts = <0x0 0x4f 0x0>; + interrupts = <0x0 0x4f 0x0>; qos = <0xf>; clock-names = "aclk"; clocks = <0x1a 0x292>; @@ -8590,7 +8878,7 @@ sysmmu@16650000 { compatible = "samsung,exynos-sysmmu"; reg = <0x0 0x16650000 0x9000>; - interrupts = <0x0 0x11d 0x0 0x0 0x11e 0x0>; + interrupts = <0x0 0x11d 0x0 0x0 0x11e 0x0>; qos = <0xf>; clock-names = "aclk"; clocks = <0x1a 0x192>; @@ -8606,7 +8894,7 @@ sysmmu@16450000 { compatible = "samsung,exynos-sysmmu"; reg = <0x0 0x16450000 0x9000>; - interrupts = <0x0 0x12a 0x0 0x0 0x12b 0x0>; + interrupts = <0x0 0x12a 0x0 0x0 0x12b 0x0>; qos = <0xf>; clock-names = "aclk"; clocks = <0x1a 0x1a9>; @@ -8622,7 +8910,7 @@ sysmmu@16470000 { compatible = "samsung,exynos-sysmmu"; reg = <0x0 0x16470000 0x9000>; - interrupts = <0x0 0x12c 0x0 0x0 0x12d 0x0>; + interrupts = <0x0 0x12c 0x0 0x0 0x12d 0x0>; qos = <0xf>; clock-names = "aclk"; clocks = <0x1a 0x1aa>; @@ -8638,7 +8926,7 @@ sysmmu@16310000 { compatible = "samsung,exynos-sysmmu"; reg = <0x0 0x16310000 0x9000>; - interrupts = <0x0 0x156 0x0 0x0 0x157 0x0>; + interrupts = <0x0 0x156 0x0 0x0 0x157 0x0>; qos = <0xf>; clock-names = "aclk"; clocks = <0x1a 0x1cb>; @@ -8662,7 +8950,7 @@ speedy@141C0000 { compatible = "samsung,exynos-speedy"; reg = <0x0 0x141c0000 0x2000>; - interrupts = <0x0 0x23 0x0>; + interrupts = <0x0 0x23 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; pinctrl-names = "default"; @@ -8676,8 +8964,8 @@ s2mps18,wakeup = "enabled"; s2mps18,irq-gpio = <0xfa 0x1 0x0>; reg = <0x0>; - interrupts = <0x1 0x0 0x0>; - interrupt-parent = <0xfa>; + interrupts = <0x1 0x0 0x0>; + interrupt-parent = <0xfa>; pinctrl-names = "default"; pinctrl-0 = <0x11d 0x11e 0x11f>; gpios = <0x4d 0x3 0x0>; @@ -9165,7 +9453,7 @@ compatible = "samsung,exynos-acpm-ipc"; #address-cells = <0x2>; #size-cells = <0x1>; - interrupts = <0x0 0x44 0x0>; + interrupts = <0x0 0x44 0x0>; reg = <0x0 0x14100000 0x1000 0x0 0x2039000 0x30000>; initdata-base = <0x7f00>; num-timestamps = <0x20>; @@ -9381,7 +9669,7 @@ adc@14230000 { compatible = "samsung,exynos-adc-v3"; reg = <0x0 0x14230000 0x100>; - interrupts = <0x0 0x8 0x0>; + interrupts = <0x0 0x8 0x0>; #io-channel-cells = <0x1>; io-channel-ranges; clocks = <0x1a 0x66>; @@ -9393,13 +9681,13 @@ rtc@141E0000 { compatible = "samsung,exynos8-rtc"; reg = <0x0 0x141e0000 0x100>; - interrupts = <0x0 0x1f 0x0 0x0 0x20 0x0>; + interrupts = <0x0 0x1f 0x0 0x0 0x20 0x0>; }; watchdog_cl0@10050000 { compatible = "samsung,exynos8-wdt"; reg = <0x0 0x10050000 0x100>; - interrupts = <0x0 0x1d0 0x0>; + interrupts = <0x0 0x1d0 0x0>; clocks = <0x1a 0x1 0x1a 0x9d>; clock-names = "rate_watchdog", "gate_watchdog"; timeout-sec = <0x1e>; @@ -9410,7 +9698,7 @@ watchdog_cl1@10060000 { compatible = "samsung,exynos7-wdt"; reg = <0x0 0x10060000 0x100>; - interrupts = <0x0 0x1d1 0x0>; + interrupts = <0x0 0x1d1 0x0>; clocks = <0x1a 0x1 0x1a 0x9d>; clock-names = "rate_watchdog", "gate_watchdog"; timeout-sec = <0x14>; @@ -9424,7 +9712,7 @@ samsung,separate-uart-clk; reg = <0x0 0x10840000 0x100>; samsung,fifo-size = <0x100>; - interrupts = <0x0 0x1a6 0x0>; + interrupts = <0x0 0x1a6 0x0>; pinctrl-names = "default"; pinctrl-0 = <0x120 0x121>; samsung,usi-serial-v2; @@ -9442,7 +9730,7 @@ samsung,separate-uart-clk; reg = <0x0 0x10450000 0x100>; samsung,fifo-size = <0x40>; - interrupts = <0x0 0x18e 0x0>; + interrupts = <0x0 0x18e 0x0>; pinctrl-names = "default"; pinctrl-0 = <0x122>; samsung,usi-serial-v2; @@ -9458,7 +9746,7 @@ samsung,separate-uart-clk; reg = <0x0 0x10470000 0x100>; samsung,fifo-size = <0x40>; - interrupts = <0x0 0x190 0x0>; + interrupts = <0x0 0x190 0x0>; pinctrl-names = "default"; pinctrl-0 = <0x123>; samsung,usi-serial-v2; @@ -9474,7 +9762,7 @@ samsung,separate-uart-clk; reg = <0x0 0x10490000 0x100>; samsung,fifo-size = <0x40>; - interrupts = <0x0 0x192 0x0>; + interrupts = <0x0 0x192 0x0>; pinctrl-names = "default"; pinctrl-0 = <0x124>; samsung,usi-serial-v2; @@ -9490,7 +9778,7 @@ samsung,separate-uart-clk; reg = <0x0 0x104b0000 0x100>; samsung,fifo-size = <0x40>; - interrupts = <0x0 0x194 0x0>; + interrupts = <0x0 0x194 0x0>; pinctrl-names = "default"; pinctrl-0 = <0x125>; samsung,usi-serial-v2; @@ -9506,7 +9794,7 @@ samsung,separate-uart-clk; reg = <0x0 0x104d0000 0x100>; samsung,fifo-size = <0x40>; - interrupts = <0x0 0x196 0x0>; + interrupts = <0x0 0x196 0x0>; pinctrl-names = "default"; pinctrl-0 = <0x126>; samsung,usi-serial-v2; @@ -9522,7 +9810,7 @@ samsung,separate-uart-clk; reg = <0x0 0x104f0000 0x100>; samsung,fifo-size = <0x40>; - interrupts = <0x0 0x198 0x0>; + interrupts = <0x0 0x198 0x0>; pinctrl-names = "default"; pinctrl-0 = <0x127>; samsung,usi-serial-v2; @@ -9538,7 +9826,7 @@ samsung,separate-uart-clk; reg = <0x0 0x108a0000 0x100>; samsung,fifo-size = <0x40>; - interrupts = <0x0 0x1ac 0x0>; + interrupts = <0x0 0x1ac 0x0>; pinctrl-names = "default"; pinctrl-0 = <0x128>; samsung,usi-serial-v2; @@ -9554,7 +9842,7 @@ samsung,separate-uart-clk; reg = <0x0 0x108c0000 0x100>; samsung,fifo-size = <0x40>; - interrupts = <0x0 0x1ae 0x0>; + interrupts = <0x0 0x1ae 0x0>; pinctrl-names = "default"; pinctrl-0 = <0x129>; samsung,usi-serial-v2; @@ -9570,7 +9858,7 @@ samsung,separate-uart-clk; reg = <0x0 0x108e0000 0x100>; samsung,fifo-size = <0x100>; - interrupts = <0x0 0x1b0 0x0>; + interrupts = <0x0 0x1b0 0x0>; pinctrl-names = "default"; pinctrl-0 = <0x12a>; samsung,usi-serial-v2; @@ -9586,7 +9874,7 @@ samsung,separate-uart-clk; reg = <0x0 0x10900000 0x100>; samsung,fifo-size = <0x100>; - interrupts = <0x0 0x1b2 0x0>; + interrupts = <0x0 0x1b2 0x0>; pinctrl-names = "default"; pinctrl-0 = <0x12b>; samsung,usi-serial-v2; @@ -9602,7 +9890,7 @@ samsung,separate-uart-clk; reg = <0x0 0x10920000 0x100>; samsung,fifo-size = <0x100>; - interrupts = <0x0 0x1b4 0x0>; + interrupts = <0x0 0x1b4 0x0>; pinctrl-names = "default"; pinctrl-0 = <0x12c>; samsung,usi-serial-v2; @@ -9618,7 +9906,7 @@ samsung,separate-uart-clk; reg = <0x0 0x10940000 0x100>; samsung,fifo-size = <0x40>; - interrupts = <0x0 0x1b6 0x0>; + interrupts = <0x0 0x1b6 0x0>; pinctrl-names = "default"; pinctrl-0 = <0x12d>; samsung,usi-serial-v2; @@ -9634,7 +9922,7 @@ samsung,separate-uart-clk; reg = <0x0 0x10520000 0x100>; samsung,fifo-size = <0x40>; - interrupts = <0x0 0x19f 0x0>; + interrupts = <0x0 0x19f 0x0>; pinctrl-names = "default"; pinctrl-0 = <0x12e>; samsung,usi-serial-v2; @@ -9650,7 +9938,7 @@ samsung,separate-uart-clk; reg = <0x0 0x10540000 0x100>; samsung,fifo-size = <0x40>; - interrupts = <0x0 0x1a1 0x0>; + interrupts = <0x0 0x1a1 0x0>; pinctrl-names = "default"; pinctrl-0 = <0x12f>; samsung,usi-serial-v2; @@ -9666,7 +9954,7 @@ samsung,separate-uart-clk; reg = <0x0 0x10560000 0x100>; samsung,fifo-size = <0x40>; - interrupts = <0x0 0x1a3 0x0>; + interrupts = <0x0 0x1a3 0x0>; pinctrl-names = "default"; pinctrl-0 = <0x130>; samsung,usi-serial-v2; @@ -9682,7 +9970,7 @@ samsung,separate-uart-clk; reg = <0x0 0x14300000 0x100>; samsung,fifo-size = <0x40>; - interrupts = <0x0 0x0 0x0>; + interrupts = <0x0 0x0 0x0>; pinctrl-names = "default"; pinctrl-0 = <0x131>; samsung,usi-serial-v2; @@ -9698,7 +9986,7 @@ samsung,separate-uart-clk; reg = <0x0 0x14320000 0x100>; samsung,fifo-size = <0x40>; - interrupts = <0x0 0x2 0x0>; + interrupts = <0x0 0x2 0x0>; pinctrl-names = "default"; pinctrl-0 = <0x132>; samsung,usi-serial-v2; @@ -9714,7 +10002,7 @@ samsung,separate-uart-clk; reg = <0x0 0x14340000 0x100>; samsung,fifo-size = <0x40>; - interrupts = <0x0 0x4 0x0>; + interrupts = <0x0 0x4 0x0>; pinctrl-names = "default"; pinctrl-0 = <0x133>; samsung,usi-serial-v2; @@ -9730,7 +10018,7 @@ samsung,separate-uart-clk; reg = <0x0 0x14360000 0x100>; samsung,fifo-size = <0x40>; - interrupts = <0x0 0x6 0x0>; + interrupts = <0x0 0x6 0x0>; pinctrl-names = "default"; pinctrl-0 = <0x134>; samsung,usi-serial-v2; @@ -9746,7 +10034,7 @@ samsung,separate-uart-clk; reg = <0x0 0x13ac0000 0x100>; samsung,fifo-size = <0x40>; - interrupts = <0x0 0x68 0x0>; + interrupts = <0x0 0x68 0x0>; pinctrl-names = "default"; pinctrl-0 = <0x135>; samsung,usi-serial-v2; @@ -9762,7 +10050,7 @@ samsung,separate-uart-clk; reg = <0x0 0x13ae0000 0x100>; samsung,fifo-size = <0x40>; - interrupts = <0x0 0x69 0x0>; + interrupts = <0x0 0x69 0x0>; pinctrl-names = "default"; pinctrl-0 = <0x136>; samsung,usi-serial-v2; @@ -9891,7 +10179,7 @@ compatible = "samsung,exynos-dw-mshc"; reg = <0x0 0x11500000 0x2000>; reg-names = "dw_mmc"; - interrupts = <0x0 0xf9 0x0>; + interrupts = <0x0 0xf9 0x0>; #address-cells = <0x1>; #size-cells = <0x0>; clocks = <0x1a 0x302 0x1a 0x2ee>; @@ -9949,7 +10237,7 @@ compatible = "samsung,abox_gic"; reg = <0x0 0x17cf1000 0x1000 0x0 0x17cf2000 0x1004>; reg-names = "gicd", "gicc"; - interrupts = <0x0 0x4c 0x0>; + interrupts = <0x0 0x4c 0x0>; status = "okay"; linux,phandle = <0x142>; phandle = <0x142>; @@ -10280,17 +10568,17 @@ tee { compatible = "samsung,exynos-tee"; - interrupts = <0x0 0xe9 0x0>; + interrupts = <0x0 0xe9 0x0>; }; seclog { compatible = "samsung,exynos-seclog"; - interrupts = <0x0 0xda 0x0>; + interrupts = <0x0 0xda 0x0>; }; ufs-srpmb { compatible = "samsung,ufs-srpmb"; - interrupts = <0x0 0x1cc 0x0>; + interrupts = <0x0 0x1cc 0x0>; }; exynos-dm@17000000 { @@ -10392,7 +10680,7 @@ boost_table = <0x14 0xd1790 0xf 0xeadd0 0x5 0x133dc8 0x0>; up_rate_limit_table = <0x5>; down_rate_limit_table = <0x5>; - upscale_ratio_table = <0x32 0xeadd0 0x41>; + upscale_ratio_table = <0x32 0xeadd0 0x41 0x166a48 0x50>; }; }; @@ -10486,13 +10774,13 @@ dm-constraints { - mif-perf { + mif-perf { const-type = <0x0>; dm-type = <0x2>; table = <0x1dc130 0xce4c8 0x1b5fd0 0xce4c8 0x19c990 0xce4c8 0x163780 0xa50a0 0x130b00 0xa50a0 0x101148 0xa50a0 0xe7b08 0xa50a0 0xcb200 0x854d0 0xae8f8 0x854d0 0x91ff0 0x66c88 0x6f158 0x0>; }; - mif-skew { + mif-skew { guidance; const-type = <0x0>; dm-type = <0x2>; @@ -10518,13 +10806,13 @@ dm-constraints { - mif-perf { + mif-perf { const-type = <0x0>; dm-type = <0x2>; table = <0x2c0970 0x1b5fd0 0x2ba3e0 0x1b5fd0 0x294280 0x1b5fd0 0x287760 0x1b5fd0 0x261600 0x1b5fd0 0x234f10 0x1b5fd0 0x202290 0x1b5fd0 0x1e8c50 0x1b5fd0 0x1d5ba0 0x1b5fd0 0x1b5fd0 0x1b5fd0 0x19c990 0x177bb8 0x183350 0xf78f0 0x166a48 0xce4c8 0x133dc8 0xa50a0 0x11da50 0xa50a0 0x104410 0xa50a0 0xeadd0 0x854d0 0xd1790 0x854d0 0xb4e88 0x66c88 0x9eb10 0x66c88 0x91ff0 0x66c88>; }; - mif-skew { + mif-skew { guidance; const-type = <0x0>; dm-type = <0x2>; @@ -10537,7 +10825,7 @@ BIG@10070000 { compatible = "samsung,exynos9810-tmu"; reg = <0x0 0x10070000 0x700>; - interrupts = <0x0 0x1de 0x0>; + interrupts = <0x0 0x1de 0x0>; tmu_name = "BIG"; id = <0x0>; sensors = <0x5e>; @@ -10563,7 +10851,7 @@ LITTLE@10070000 { compatible = "samsung,exynos9810-tmu"; reg = <0x0 0x10070000 0x700>; - interrupts = <0x0 0x1de 0x0>; + interrupts = <0x0 0x1de 0x0>; tmu_name = "LITTLE"; id = <0x1>; sensors = <0x20>; @@ -10586,7 +10874,7 @@ G3D@10074000 { compatible = "samsung,exynos9810-tmu"; reg = <0x0 0x10074000 0x700>; - interrupts = <0x0 0x1df 0x0>; + interrupts = <0x0 0x1df 0x0>; tmu_name = "G3D"; id = <0x2>; sensors = <0x2>; @@ -10609,7 +10897,7 @@ ISP@10074000 { compatible = "samsung,exynos9810-tmu"; reg = <0x0 0x10074000 0x700>; - interrupts = <0x0 0x1df 0x0>; + interrupts = <0x0 0x1df 0x0>; tmu_name = "ISP"; id = <0x3>; sensors = <0x4>; @@ -10646,7 +10934,7 @@ k_pu = <0x0>; k_i = <0x0>; i_max = <0x0>; - integral_cutoff = <0x0>; + integral_cutoff = <0x0>; linux,phandle = <0x2f7>; phandle = <0x2f7>; @@ -10856,7 +11144,7 @@ k_pu = <0x0>; k_i = <0x0>; i_max = <0x0>; - integral_cutoff = <0x0>; + integral_cutoff = <0x0>; linux,phandle = <0x300>; phandle = <0x300>; @@ -11062,7 +11350,7 @@ bit_field = <0x14 0x4>; basecnt = <0x4>; irqcnt = <0x4>; - interrupts = <0x0 0x171 0x0 0x0 0x178 0x0 0x0 0x17f 0x0 0x0 0x186 0x0>; + interrupts = <0x0 0x171 0x0 0x0 0x178 0x0 0x0 0x17f 0x0 0x0 0x186 0x0>; linux,phandle = <0x309>; phandle = <0x309>; }; @@ -11071,7 +11359,7 @@ compatible = "samsung,exynos5-fimc-is"; #pb-id-cells = <0x6>; reg = <0x0 0x162f0000 0x100 0x0 0x16290000 0x10000 0x0 0x162a0000 0x10000 0x0 0x16430000 0x10000 0x0 0x16630000 0x10000 0x0 0x16440000 0x4000 0x0 0x16510000 0x10000 0x0 0x16520000 0x10000 0x0 0x16880000 0x10000 0x0 0x163a0000 0x100>; - interrupts = <0x0 0x152 0x0 0x0 0x153 0x0 0x0 0x154 0x0 0x0 0x155 0x0 0x0 0x123 0x0 0x0 0x124 0x0 0x0 0x121 0x0 0x0 0x122 0x0 0x0 0x128 0x0 0x0 0x129 0x0 0x0 0x127 0x0 0x0 0x136 0x0 0x0 0x137 0x0>; + interrupts = <0x0 0x152 0x0 0x0 0x153 0x0 0x0 0x154 0x0 0x0 0x155 0x0 0x0 0x123 0x0 0x0 0x124 0x0 0x0 0x121 0x0 0x0 0x122 0x0 0x0 0x128 0x0 0x0 0x129 0x0 0x0 0x127 0x0 0x0 0x136 0x0 0x0 0x137 0x0>; pinctrl-names = "default", "release"; pinctrl-0; pinctrl-1; @@ -11153,7 +11441,7 @@ fimc_is_dvfs { - table0 { + table0 { desc = "dvfs table v0.0 for 12M/8M"; default_int_cam = <0xa8750>; default_cam = <0xa8750>; @@ -11161,58 +11449,78 @@ default_int = <0x1a1f8>; default_hpg = <0x1>; front_preview_int_cam = <0x9c400>; - front_preview_cam = <0x927c0>; + front_preview_cam = <0x9c400>; front_preview_mif = <0xf78f0>; front_preview_int = <0x1a1f8>; front_preview_hpg = <0x1>; front_preview_full_int_cam = <0xa1220>; - front_preview_full_cam = <0x927c0>; + front_preview_full_cam = <0x9c400>; front_preview_full_mif = <0xf78f0>; front_preview_full_int = <0x1a1f8>; front_preview_full_hpg = <0x1>; front_capture_int_cam = <0xa1220>; - front_capture_cam = <0x927c0>; - front_capture_mif = <0xf78f0>; + front_capture_cam = <0x9c400>; + front_capture_mif = <0x1fefc8>; front_capture_int = <0x1a1f8>; front_capture_hpg = <0x1>; front_video_int_cam = <0x9c400>; - front_video_cam = <0x927c0>; + front_video_cam = <0x9c400>; front_video_mif = <0xf78f0>; front_video_int = <0x1a1f8>; front_video_hpg = <0x1>; front_video_whd_int_cam = <0x9c400>; - front_video_whd_cam = <0x927c0>; + front_video_whd_cam = <0x9c400>; front_video_whd_mif = <0xf78f0>; front_video_whd_int = <0x1a1f8>; front_video_whd_hpg = <0x1>; + front_video_uhd_int_cam = <0xa1220>; + front_video_uhd_cam = <0x9c400>; + front_video_uhd_mif = <0xf78f0>; + front_video_uhd_int = <0x1a1f8>; + front_video_uhd_hpg = <0x1>; + front_video_fhd_60fps_int_cam = <0xa1220>; + front_video_fhd_60fps_cam = <0x9c400>; + front_video_fhd_60fps_mif = <0xf78f0>; + front_video_fhd_60fps_int = <0x1a1f8>; + front_video_fhd_60fps_hpg = <0x1>; front_video_capture_int_cam = <0xa1220>; - front_video_capture_cam = <0x94ed0>; - front_video_capture_mif = <0xf78f0>; + front_video_capture_cam = <0x9c400>; + front_video_capture_mif = <0x1fefc8>; front_video_capture_int = <0x1a1f8>; front_video_capture_hpg = <0x1>; front_video_whd_capture_int_cam = <0xa1220>; - front_video_whd_capture_cam = <0x927c0>; - front_video_whd_capture_mif = <0xf78f0>; + front_video_whd_capture_cam = <0x9c400>; + front_video_whd_capture_mif = <0x1fefc8>; front_video_whd_capture_int = <0x1a1f8>; front_video_whd_capture_hpg = <0x1>; + front_video_uhd_capture_int_cam = <0xa1220>; + front_video_uhd_capture_cam = <0x9c400>; + front_video_uhd_capture_mif = <0x1fefc8>; + front_video_uhd_capture_int = <0x1a1f8>; + front_video_uhd_capture_hpg = <0x1>; + front_video_fhd_60fps_capture_int_cam = <0xa1220>; + front_video_fhd_60fps_capture_cam = <0x9c400>; + front_video_fhd_60fps_capture_mif = <0x1fefc8>; + front_video_fhd_60fps_capture_int = <0x1a1f8>; + front_video_fhd_60fps_capture_hpg = <0x1>; front_vt1_int_cam = <0x9c400>; - front_vt1_cam = <0x927c0>; + front_vt1_cam = <0x9c400>; front_vt1_mif = <0xf78f0>; front_vt1_int = <0x1a1f8>; front_vt1_hpg = <0x1>; front_vt2_int_cam = <0x9c400>; - front_vt2_cam = <0x927c0>; + front_vt2_cam = <0x9c400>; front_vt2_mif = <0xf78f0>; front_vt2_int = <0x1a1f8>; front_vt2_hpg = <0x1>; front_vt4_int_cam = <0x9c400>; - front_vt4_cam = <0x927c0>; + front_vt4_cam = <0x9c400>; front_vt4_mif = <0xf78f0>; front_vt4_int = <0x1a1f8>; front_vt4_hpg = <0x1>; front_preview_high_speed_fps_int_cam = <0xa1220>; - front_preview_high_speed_fps_cam = <0x94ed0>; - front_preview_high_speed_fps_mif = <0xf78f0>; + front_preview_high_speed_fps_cam = <0x9c400>; + front_preview_high_speed_fps_mif = <0x14a140>; front_preview_high_speed_fps_int = <0x1a1f8>; front_preview_high_speed_fps_hpg = <0x1>; rear2_preview_fhd_int_cam = <0x9c400>; @@ -11222,22 +11530,22 @@ rear2_preview_fhd_hpg = <0x1>; rear2_capture_int_cam = <0xa1220>; rear2_capture_cam = <0x9c400>; - rear2_capture_mif = <0xf78f0>; + rear2_capture_mif = <0x1fefc8>; rear2_capture_int = <0x1a1f8>; rear2_capture_hpg = <0x1>; - rear2_video_fhd_int_cam = <0x9c400>; + rear2_video_fhd_int_cam = <0xa1220>; rear2_video_fhd_cam = <0x9c400>; rear2_video_fhd_mif = <0xf78f0>; rear2_video_fhd_int = <0x1a1f8>; rear2_video_fhd_hpg = <0x1>; rear2_video_fhd_capture_int_cam = <0xa1220>; rear2_video_fhd_capture_cam = <0x9c400>; - rear2_video_fhd_capture_mif = <0xf78f0>; + rear2_video_fhd_capture_mif = <0x1fefc8>; rear2_video_fhd_capture_int = <0x1a1f8>; rear2_video_fhd_capture_hpg = <0x1>; rear_preview_fhd_int_cam = <0x9c400>; rear_preview_fhd_cam = <0x9c400>; - rear_preview_fhd_mif = <0xf78f0>; + rear_preview_fhd_mif = <0x177bb8>; rear_preview_fhd_int = <0x1a1f8>; rear_preview_fhd_hpg = <0x1>; rear_preview_whd_int_cam = <0x9c400>; @@ -11247,7 +11555,7 @@ rear_preview_whd_hpg = <0x1>; rear_preview_uhd_int_cam = <0xa1220>; rear_preview_uhd_cam = <0x9c400>; - rear_preview_uhd_mif = <0x177bb8>; + rear_preview_uhd_mif = <0x14a140>; rear_preview_uhd_int = <0x1a1f8>; rear_preview_uhd_hpg = <0x1>; rear_preview_uhd_60fps_int_cam = <0xa6040>; @@ -11257,27 +11565,27 @@ rear_preview_uhd_60fps_hpg = <0x1>; rear_preview_full_int_cam = <0xa1220>; rear_preview_full_cam = <0x9c400>; - rear_preview_full_mif = <0x14a140>; + rear_preview_full_mif = <0xf78f0>; rear_preview_full_int = <0x1a1f8>; rear_preview_full_hpg = <0x1>; rear_capture_int_cam = <0xa1220>; rear_capture_cam = <0x9c400>; - rear_capture_mif = <0xf78f0>; + rear_capture_mif = <0x1fefc8>; rear_capture_int = <0x1a1f8>; rear_capture_hpg = <0x1>; - rear_video_fhd_int_cam = <0x9c400>; + rear_video_fhd_int_cam = <0xa1220>; rear_video_fhd_cam = <0x9c400>; rear_video_fhd_mif = <0xf78f0>; rear_video_fhd_int = <0x1a1f8>; rear_video_fhd_hpg = <0x1>; - rear_video_whd_int_cam = <0x9c400>; + rear_video_whd_int_cam = <0xa1220>; rear_video_whd_cam = <0x9c400>; rear_video_whd_mif = <0xf78f0>; rear_video_whd_int = <0x1a1f8>; rear_video_whd_hpg = <0x1>; rear_video_uhd_int_cam = <0xa1220>; rear_video_uhd_cam = <0x9c400>; - rear_video_uhd_mif = <0x177bb8>; + rear_video_uhd_mif = <0x14a140>; rear_video_uhd_int = <0x1a1f8>; rear_video_uhd_hpg = <0x1>; rear_video_uhd_60fps_int_cam = <0xa6040>; @@ -11287,57 +11595,57 @@ rear_video_uhd_60fps_hpg = <0x1>; rear_video_fhd_capture_int_cam = <0xa1220>; rear_video_fhd_capture_cam = <0x9c400>; - rear_video_fhd_capture_mif = <0xf78f0>; + rear_video_fhd_capture_mif = <0x1fefc8>; rear_video_fhd_capture_int = <0x1a1f8>; rear_video_fhd_capture_hpg = <0x1>; rear_video_whd_capture_int_cam = <0xa1220>; rear_video_whd_capture_cam = <0x9c400>; - rear_video_whd_capture_mif = <0xf78f0>; + rear_video_whd_capture_mif = <0x1fefc8>; rear_video_whd_capture_int = <0x1a1f8>; rear_video_whd_capture_hpg = <0x1>; rear_video_uhd_capture_int_cam = <0xa1220>; rear_video_uhd_capture_cam = <0x9c400>; - rear_video_uhd_capture_mif = <0x177bb8>; + rear_video_uhd_capture_mif = <0x1fefc8>; rear_video_uhd_capture_int = <0x1a1f8>; rear_video_uhd_capture_hpg = <0x1>; - dual_preview_int_cam = <0x9c400>; + dual_preview_int_cam = <0xa1220>; dual_preview_cam = <0x9c400>; - dual_preview_mif = <0xf78f0>; + dual_preview_mif = <0x177bb8>; dual_preview_int = <0x1a1f8>; dual_preview_hpg = <0x1>; dual_capture_int_cam = <0xa1220>; dual_capture_cam = <0x9c400>; - dual_capture_mif = <0xf78f0>; + dual_capture_mif = <0x1fefc8>; dual_capture_int = <0x1a1f8>; dual_capture_hpg = <0x1>; - dual_video_fhd_int_cam = <0x9c400>; + dual_video_fhd_int_cam = <0xa1220>; dual_video_fhd_cam = <0x9c400>; - dual_video_fhd_mif = <0xf78f0>; + dual_video_fhd_mif = <0x14a140>; dual_video_fhd_int = <0x1a1f8>; dual_video_fhd_hpg = <0x1>; dual_video_fhd_capture_int_cam = <0xa1220>; dual_video_fhd_capture_cam = <0x9c400>; - dual_video_fhd_capture_mif = <0xf78f0>; + dual_video_fhd_capture_mif = <0x1fefc8>; dual_video_fhd_capture_int = <0x1a1f8>; dual_video_fhd_capture_hpg = <0x1>; dual_video_uhd_int_cam = <0xa1220>; dual_video_uhd_cam = <0x9c400>; - dual_video_uhd_mif = <0x177bb8>; + dual_video_uhd_mif = <0x14a140>; dual_video_uhd_int = <0x1a1f8>; dual_video_uhd_hpg = <0x1>; dual_video_uhd_capture_int_cam = <0xa1220>; dual_video_uhd_capture_cam = <0x9c400>; - dual_video_uhd_capture_mif = <0x177bb8>; + dual_video_uhd_capture_mif = <0x1fefc8>; dual_video_uhd_capture_int = <0x1a1f8>; dual_video_uhd_capture_hpg = <0x1>; dual_sync_preview_int_cam = <0xa1220>; dual_sync_preview_cam = <0x9c400>; - dual_sync_preview_mif = <0x177bb8>; + dual_sync_preview_mif = <0x1b5fd0>; dual_sync_preview_int = <0x1a1f8>; dual_sync_preview_hpg = <0x1>; dual_sync_capture_int_cam = <0xa3930>; dual_sync_capture_cam = <0x9c400>; - dual_sync_capture_mif = <0x1b5fd0>; + dual_sync_capture_mif = <0x1fefc8>; dual_sync_capture_int = <0x1a1f8>; dual_sync_capture_hpg = <0x1>; dual_sync_preview_whd_int_cam = <0xa6040>; @@ -11346,32 +11654,32 @@ dual_sync_preview_whd_int = <0x1a1f8>; dual_sync_preview_whd_hpg = <0x1>; dual_sync_whd_capture_int_cam = <0xa6040>; - dual_sync_whd_capture_cam = <0xa6040>; - dual_sync_whd_capture_mif = <0x1b5fd0>; + dual_sync_whd_capture_cam = <0x9c400>; + dual_sync_whd_capture_mif = <0x1fefc8>; dual_sync_whd_capture_int = <0x1a1f8>; dual_sync_whd_capture_hpg = <0x1>; - dual_sync_video_fhd_int_cam = <0xa1220>; - dual_sync_video_fhd_cam = <0xa6040>; + dual_sync_video_fhd_int_cam = <0xa6040>; + dual_sync_video_fhd_cam = <0x9c400>; dual_sync_video_fhd_mif = <0x177bb8>; dual_sync_video_fhd_int = <0x1a1f8>; dual_sync_video_fhd_hpg = <0x1>; - dual_sync_video_fhd_capture_int_cam = <0xa3930>; - dual_sync_video_fhd_capture_cam = <0xa6040>; - dual_sync_video_fhd_capture_mif = <0x1b5fd0>; + dual_sync_video_fhd_capture_int_cam = <0xa6040>; + dual_sync_video_fhd_capture_cam = <0x9c400>; + dual_sync_video_fhd_capture_mif = <0x1fefc8>; dual_sync_video_fhd_capture_int = <0x1a1f8>; dual_sync_video_fhd_capture_hpg = <0x1>; dual_sync_video_uhd_int_cam = <0xa6040>; - dual_sync_video_uhd_cam = <0xa6040>; + dual_sync_video_uhd_cam = <0x9c400>; dual_sync_video_uhd_mif = <0x177bb8>; dual_sync_video_uhd_int = <0x1a1f8>; dual_sync_video_uhd_hpg = <0x1>; dual_sync_video_uhd_capture_int_cam = <0xa6040>; - dual_sync_video_uhd_capture_cam = <0xa6040>; - dual_sync_video_uhd_capture_mif = <0x1b5fd0>; + dual_sync_video_uhd_capture_cam = <0x9c400>; + dual_sync_video_uhd_capture_mif = <0x1fefc8>; dual_sync_video_uhd_capture_int = <0x1a1f8>; dual_sync_video_uhd_capture_hpg = <0x1>; secure_front_int_cam = <0x9c400>; - secure_front_cam = <0x94ed0>; + secure_front_cam = <0x9c400>; secure_front_mif = <0xf78f0>; secure_front_int = <0x1a1f8>; secure_front_hpg = <0x1>; @@ -11382,7 +11690,7 @@ pip_preview_hpg = <0x1>; pip_capture_int_cam = <0xa3930>; pip_capture_cam = <0x9c400>; - pip_capture_mif = <0xf78f0>; + pip_capture_mif = <0x1fefc8>; pip_capture_int = <0x1a1f8>; pip_capture_hpg = <0x1>; pip_video_int_cam = <0xa1220>; @@ -11392,7 +11700,7 @@ pip_video_hpg = <0x1>; pip_video_capture_int_cam = <0xa3930>; pip_video_capture_cam = <0x9c400>; - pip_video_capture_mif = <0xf78f0>; + pip_video_capture_mif = <0x1fefc8>; pip_video_capture_int = <0x1a1f8>; pip_video_capture_hpg = <0x1>; preview_high_speed_fps_int_cam = <0xa1220>; @@ -11400,9 +11708,9 @@ preview_high_speed_fps_mif = <0xf78f0>; preview_high_speed_fps_int = <0x1a1f8>; preview_high_speed_fps_hpg = <0x1>; - video_high_speed_60fps_int_cam = <0xa1220>; + video_high_speed_60fps_int_cam = <0xa6040>; video_high_speed_60fps_cam = <0x9c400>; - video_high_speed_60fps_mif = <0x14a140>; + video_high_speed_60fps_mif = <0x177bb8>; video_high_speed_60fps_int = <0x1a1f8>; video_high_speed_60fps_hpg = <0x1>; video_high_speed_120fps_int_cam = <0xa1220>; @@ -11412,7 +11720,7 @@ video_high_speed_120fps_hpg = <0x1>; video_high_speed_240fps_int_cam = <0xa6040>; video_high_speed_240fps_cam = <0x9c400>; - video_high_speed_240fps_mif = <0x1b5fd0>; + video_high_speed_240fps_mif = <0x1fefc8>; video_high_speed_240fps_int = <0x1a1f8>; video_high_speed_240fps_hpg = <0x1>; video_high_speed_dualfps_int_cam = <0xa6040>; @@ -11420,9 +11728,9 @@ video_high_speed_dualfps_mif = <0x1b5fd0>; video_high_speed_dualfps_int = <0x1a1f8>; video_high_speed_dualfps_hpg = <0x6>; - video_high_speed_60fps_capture_int_cam = <0xa1220>; + video_high_speed_60fps_capture_int_cam = <0xa6040>; video_high_speed_60fps_capture_cam = <0x9c400>; - video_high_speed_60fps_capture_mif = <0x14a140>; + video_high_speed_60fps_capture_mif = <0x1fefc8>; video_high_speed_60fps_capture_int = <0x1a1f8>; video_high_speed_60fps_capture_hpg = <0x1>; ext_front_int_cam = <0xa8750>; @@ -11431,7 +11739,7 @@ ext_front_int = <0x825f0>; ext_front_hpg = <0x1>; ext_secure_int_cam = <0x9c400>; - ext_secure_cam = <0x94ed0>; + ext_secure_cam = <0x9c400>; ext_secure_mif = <0xf78f0>; ext_secure_int = <0x1a1f8>; ext_secure_hpg = <0x1>; @@ -11448,7 +11756,7 @@ compatible = "samsung,exynos5-camerapp-gdc"; #pb-id-cells = <0x6>; reg = <0x0 0x16530000 0x10000>; - interrupts = <0x0 0x125 0x0>; + interrupts = <0x0 0x125 0x0>; pinctrl-names = "default", "release"; pinctrl-0; pinctrl-1; @@ -11511,7 +11819,7 @@ compatible = "samsung,exynos5-fimc-is-sensor"; #pb-id-cells = <0x4>; reg = <0x0 0x16230000 0x1000 0x0 0x16160000 0x10000 0x0 0x162b0000 0x100 0x0 0x162b0400 0x100 0x0 0x162b0100 0x100 0x0 0x162b0400 0x100 0x0 0x162b0200 0x100 0x0 0x162b0400 0x100 0x0 0x162b0300 0x100 0x0 0x162b0400 0x100 0x0 0x162b0000 0x100 0x0 0x162b0400 0x100 0x0 0x16380000 0x100 0x0 0x16380400 0x100 0x0 0x16380100 0x100 0x0 0x16380400 0x100 0x0 0x16380200 0x100 0x0 0x16380400 0x100>; - interrupts = <0x0 0x148 0x0 0x0 0x14e 0x0 0x0 0x14e 0x0 0x0 0x14e 0x0 0x0 0x14e 0x0 0x0 0x14e 0x0 0x0 0x15a 0x0 0x0 0x15a 0x0 0x0 0x15a 0x0>; + interrupts = <0x0 0x148 0x0 0x0 0x14e 0x0 0x0 0x14e 0x0 0x0 0x14e 0x0 0x0 0x14e 0x0 0x0 0x14e 0x0 0x0 0x15a 0x0 0x0 0x15a 0x0 0x0 0x15a 0x0>; samsung,power-domain = <0xe>; phys = <0x16a 0x0>; phy-names = "csis_dphy"; @@ -11536,7 +11844,7 @@ compatible = "samsung,exynos5-fimc-is-sensor"; #pb-id-cells = <0x4>; reg = <0x0 0x16240000 0x1000 0x0 0x16180000 0x10000 0x0 0x162c0000 0x100 0x0 0x162c0400 0x100 0x0 0x162c0100 0x100 0x0 0x162c0400 0x100 0x0 0x162c0200 0x100 0x0 0x162c0400 0x100 0x0 0x162c0300 0x100 0x0 0x162c0400 0x100>; - interrupts = <0x0 0x149 0x0 0x0 0x14f 0x0 0x0 0x14f 0x0 0x0 0x14f 0x0 0x0 0x14f 0x0>; + interrupts = <0x0 0x149 0x0 0x0 0x14f 0x0 0x0 0x14f 0x0 0x0 0x14f 0x0 0x0 0x14f 0x0>; samsung,power-domain = <0xe>; phys = <0x16b 0x0>; phy-names = "csis_dphy"; @@ -11559,7 +11867,7 @@ compatible = "samsung,exynos5-fimc-is-sensor"; #pb-id-cells = <0x4>; reg = <0x0 0x16250000 0x1000 0x0 0x16170000 0x10000 0x0 0x162d0000 0x100 0x0 0x162d0400 0x100 0x0 0x162d0100 0x100 0x0 0x162d0400 0x100 0x0 0x162d0200 0x100 0x0 0x162d0400 0x100 0x0 0x162d0300 0x100 0x0 0x162d0400 0x100>; - interrupts = <0x0 0x14a 0x0 0x0 0x150 0x0 0x0 0x150 0x0 0x0 0x150 0x0 0x0 0x150 0x0>; + interrupts = <0x0 0x14a 0x0 0x0 0x150 0x0 0x0 0x150 0x0 0x0 0x150 0x0 0x0 0x150 0x0>; samsung,power-domain = <0xe>; phys = <0x16c 0x0>; phy-names = "csis_dphy"; @@ -11583,7 +11891,7 @@ compatible = "samsung,exynos5-fimc-is-sensor"; #pb-id-cells = <0x4>; reg = <0x0 0x16260000 0x1000 0x0 0x16190000 0x10000 0x0 0x162e0000 0x100 0x0 0x162e0400 0x100 0x0 0x162e0100 0x100 0x0 0x162e0400 0x100 0x0 0x162e0200 0x100 0x0 0x162e0400 0x100 0x0 0x162e0300 0x100 0x0 0x162e0400 0x100>; - interrupts = <0x0 0x14b 0x0 0x0 0x151 0x0 0x0 0x151 0x0 0x0 0x151 0x0 0x0 0x151 0x0>; + interrupts = <0x0 0x14b 0x0 0x0 0x151 0x0 0x0 0x151 0x0 0x0 0x151 0x0 0x0 0x151 0x0>; samsung,power-domain = <0xe>; phys = <0x16d 0x0>; phy-names = "csis_dphy"; @@ -11605,7 +11913,7 @@ fimc_is_pdp@16270000 { compatible = "samsung,exynos5-fimc-is-pdp"; reg = <0x0 0x16270000 0x2000>; - interrupts = <0x0 0x14c 0x0>; + interrupts = <0x0 0x14c 0x0>; id = <0x0>; linux,phandle = <0x30a>; phandle = <0x30a>; @@ -11613,7 +11921,7 @@ fimc_is_pdp@16280000 { compatible = "samsung,exynos5-fimc-is-pdp"; - interrupts = <0x0 0x14d 0x0>; + interrupts = <0x0 0x14d 0x0>; reg = <0x0 0x16280000 0x2000>; id = <0x1>; linux,phandle = <0x30b>; @@ -11630,7 +11938,7 @@ sysmmu@11420000 { compatible = "samsung,pcie-sysmmu"; reg = <0x0 0x11420000 0x9000>; - interrupts = <0x0 0x108 0x0>; + interrupts = <0x0 0x108 0x0>; clock-names = "aclk"; clocks = <0x1a 0x2ff>; port-name = "PCIe"; @@ -11645,7 +11953,7 @@ gpios = <0x16e 0x2 0x1>; reg = <0x0 0x116a0000 0x1000 0x0 0x116d0000 0x1000 0x0 0x11411044 0x10 0x0 0x11700000 0x1000 0x0 0x116c0000 0x1fc 0x0 0x127fe000 0x2000 0x0 0x11680000 0x1000>; reg-names = "elbi", "phy", "sysreg", "dbi", "pcs", "config", "ia"; - interrupts = <0x0 0xfd 0x0>; + interrupts = <0x0 0xfd 0x0>; samsung,syscon-phandle = <0x43>; samsung,sysreg-phandle = <0x16f>; clocks = <0x1a 0x2f0>; @@ -11656,8 +11964,8 @@ device_type = "pci"; ranges = <0x82000000 0x0 0x11800000 0x0 0x11800000 0x0 0xff0000>; #interrupt-cells = <0x1>; - interrupt-map-mask = <0x0 0x0 0x0 0x0>; - interrupt-map = <0x0 0x0 0x0 0x0 0x1 0x0 0xfd 0x4>; + interrupt-map-mask = <0x0 0x0 0x0 0x0>; + interrupt-map = <0x0 0x0 0x0 0x0 0x1 0x0 0xfd 0x4>; ip-ver = <0x981000>; num-lanes = <0x1>; ch-num = <0x0>; @@ -11680,7 +11988,7 @@ gpios = <0x16e 0x5 0x1>; reg = <0x0 0x116b0000 0x1000 0x0 0x116f0000 0x1000 0x0 0x11411054 0x10 0x0 0x11710000 0x1000 0x0 0x116e0000 0x1fc 0x0 0x137fe000 0x2000>; reg-names = "elbi", "phy", "sysreg", "dbi", "pcs", "config"; - interrupts = <0x0 0xfe 0x0>; + interrupts = <0x0 0xfe 0x0>; samsung,syscon-phandle = <0x43>; clocks = <0x1a 0x2f6>; pinctrl-names = "default"; @@ -11690,8 +11998,8 @@ device_type = "pci"; ranges = <0x82000000 0x0 0x12800000 0x0 0x12800000 0x0 0xff0000>; #interrupt-cells = <0x1>; - interrupt-map-mask = <0x0 0x0 0x0 0x0>; - interrupt-map = <0x0 0x0 0x0 0x0 0x1 0x0 0xfe 0x4>; + interrupt-map-mask = <0x0 0x0 0x0 0x0>; + interrupt-map = <0x0 0x0 0x0 0x0 0x1 0x0 0xfe 0x4>; ip-ver = <0x981000>; num-lanes = <0x1>; ch-num = <0x1>; @@ -11710,8 +12018,8 @@ compatible = "samsung,mailbox-asoc"; reg = <0x0 0x141b0000 0x10000>; reg-names = "sfr"; - interrupts = <0x0 0x49 0x0>; - interrupt-controller; + interrupts = <0x0 0x49 0x0>; + interrupt-controller; #interrupt-cells = <0x1>; linux,phandle = <0x17e>; phandle = <0x17e>; @@ -11730,9 +12038,9 @@ clock-names = "dmic", "dmic_if", "dmic_sync"; mailbox = <0x17e>; #sound-dai-cells = <0x1>; - interrupt-parent = <0x17e>; - interrupts = <0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19>; - interrupt-names = "error", "boot_completed", "ipc_received", "voice_triggered", "trigger_period_elapsed", "record_period_elapsed", "debuglog_bufzero", "debuglog_bufone", "audio_dump", "log_dump"; + interrupt-parent = <0x17e>; + interrupts = <0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19>; + interrupt-names = "error", "boot_completed", "ipc_received", "voice_triggered", "trigger_period_elapsed", "record_period_elapsed", "debuglog_bufzero", "debuglog_bufone", "audio_dump", "log_dump"; status = "okay"; lpsd-gain = <0x0>; dmic-gain = <0x0>; @@ -12196,41 +12504,41 @@ reg = <0x0 0x10000 0x0>; compatible = "sec_modem,modem_pdata"; status = "okay"; - interrupts = <0x0 0x4a 0x0 0x0 0x1b8 0x0>; - mif,name = "ss360ap"; - mif,modem_net = <0x0>; - mif,modem_type = <0xa>; - mif,use_handover = <0x0>; - mif,ipc_version = <0x32>; - mif,link_types = <0x200>; - mif,link_name = "shmem"; - mif,link_attrs = <0x7c9>; - mif,num_iodevs = <0x15>; - mif,buff_offset = <0x500000>; - mif,buff_size = <0x900000>; + interrupts = <0x0 0x4a 0x0 0x0 0x1b8 0x0>; + mif,name = "ss360ap"; + mif,modem_net = <0x0>; + mif,modem_type = <0xa>; + mif,use_handover = <0x0>; + mif,ipc_version = <0x32>; + mif,link_types = <0x200>; + mif,link_name = "shmem"; + mif,link_attrs = <0x7c9>; + mif,num_iodevs = <0x15>; + mif,buff_offset = <0x500000>; + mif,buff_size = <0x900000>; mbx_ap2cp_msg = <0x0>; mbx_cp2ap_msg = <0x1>; mbx_ap2cp_united_status = <0x2>; mbx_cp2ap_united_status = <0x3>; mbx_ap2cp_mif_value = <0x4>; mbx_ap2cp_kerneltime = <0x9>; - mif,int_ap2cp_msg = <0x0>; - mif,int_ap2cp_wakeup = <0x1>; - mif,int_ap2cp_status = <0x2>; - mif,int_ap2cp_active = <0x3>; - mif,int_ap2cp_smapper = <0x4>; - mif,irq_cp2ap_msg = <0x0>; - mif,irq_cp2ap_status = <0x2>; - mif,irq_cp2ap_active = <0x3>; - mif,irq_cp2ap_smapper = <0x4>; - mif,irq_cp2ap_wakelock = <0x8>; - mif,irq_cp2ap_ratmode = <0x9>; + mif,int_ap2cp_msg = <0x0>; + mif,int_ap2cp_wakeup = <0x1>; + mif,int_ap2cp_status = <0x2>; + mif,int_ap2cp_active = <0x3>; + mif,int_ap2cp_smapper = <0x4>; + mif,irq_cp2ap_msg = <0x0>; + mif,irq_cp2ap_status = <0x2>; + mif,irq_cp2ap_active = <0x3>; + mif,irq_cp2ap_smapper = <0x4>; + mif,irq_cp2ap_wakelock = <0x8>; + mif,irq_cp2ap_ratmode = <0x9>; mbx_cp2ap_dvfsreq_cpu = <0x5>; mbx_cp2ap_dvfsreq_mif = <0x6>; mbx_cp2ap_dvfsreq_int = <0x7>; - mif,irq_cp2ap_perf_req_cpu = <0x5>; - mif,irq_cp2ap_perf_req_mif = <0x6>; - mif,irq_cp2ap_perf_req_int = <0x7>; + mif,irq_cp2ap_perf_req_cpu = <0x5>; + mif,irq_cp2ap_perf_req_mif = <0x6>; + mif,irq_cp2ap_perf_req_int = <0x7>; sbi_cp_rat_mode_mask = <0x3f>; sbi_cp_rat_mode_pos = <0x1a>; sbi_cp_evs_mode_mask = <0x1>; @@ -12643,13 +12951,14 @@ status = "okay"; haptic,max_timeout = <0x2710>; haptic,multi_frequency = <0x7>; - haptic,duty = <0x8f0d 0xbebc 0x9896 0x7270 0x7f27 0x90f4 0x90f4>; - haptic,period = <0xbebc 0xfe50 0xcb73 0x9896 0xa98a 0x9896 0x9896>; + haptic,duty = <0x9ede 0xbebc 0x9896 0x7270 0x7f27 0x90f4 0x90f4>; + haptic,period = <0xbf68 0xfe50 0xcb73 0x9896 0xa98a 0x9896 0x9896>; haptic,reg2 = <0x82>; haptic,pwm_id = <0x1>; haptic,regulator_name = "VDD_MOTOR_3P3"; haptic,normal_ratio = <0x4b>; haptic,overdrive_ratio = <0x5f>; + haptic,type = "LINEAR_1040"; }; sound { @@ -13149,7 +13458,7 @@ reg = <0x0 0x14170000 0x180>; mcu,name = "mcu_ipc_cp"; mcu,id = <0x0>; - interrupts = <0x0 0x45 0x0>; + interrupts = <0x0 0x45 0x0>; mcu,irq_affinity_mask = <0x3>; linux,phandle = <0x31a>; phandle = <0x31a>; @@ -13214,7 +13523,7 @@ i2c_ch = <0x1>; }; - internal_vc { + internal_vc { vc_list = <0x2 0x2 0x0 0x3 0x3 0x0>; }; }; @@ -13256,7 +13565,7 @@ i2c_ch = <0x1>; }; - internal_vc { + internal_vc { vc_list = <0x1 0x1 0x0>; }; }; @@ -13301,7 +13610,7 @@ product_name = <0x64>; }; - internal_vc { + internal_vc { }; }; @@ -13440,7 +13749,7 @@ qos,table = <0x1b5fd0 0x19c990 0x183350 0x166a48 0x133dc8 0x11da50 0x104410 0xeadd0 0xd1790 0xb4e88 0x9eb10>; }; - mif { + mif { qos,label = "MIF"; qos,delay_time = <0xa>; qos,table_size = <0x8>; @@ -13490,74 +13799,264 @@ }; }; - argos { - compatible = "samsung,argos"; - #address-cells = <0x1>; + argos { + compatible = "samsung,argos"; + #address-cells = <0x1>; - boot_device@1 { - net_boost,label = "IPC"; - net_boost,node = "rmnet0 rmnet1 rmnet2 rmnet3 rmnet4 rmnet5 rmnet6 rmnet7 umts_dm0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x64 0x0 0x0 0x101148 0x0 0xce4c8 0x0 0x0 0x0 0x0 0x96 0x0 0x0 0x130b00 0x0 0xf78f0 0x0 0x0 0x0 0x0 0xc8 0x1d5ba0 0x0 0x19c990 0x0 0x1b5fd0 0x0 0x0 0x0 0x0>; - }; + boot_device@1 { + net_boost,label = "UFS"; + net_boost,node = [00]; + net_boost,sysnode = "/sys/class/scsi_host/host0/transferred_cnt"; - boot_device@2 { - net_boost,label = "CLAT"; - net_boost,node = "clat clat4 v4-rmnet0 v4-rmnet1 v4-rmnet2 v4-rmnet3 v4-rmnet4 v4-rmnet5 v4-rmnet6 v4-rmnet7"; - net_boost,table_size = <0x5>; - net_boost,table = <0x1 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x64 0x104410 0x0 0x0 0x0 0xf78f0 0x0 0x0 0x0 0x0 0xc8 0x110b48 0x0 0x0 0x0 0x1b5fd0 0x0 0x0 0x0 0x0 0x12c 0x133dc8 0x0 0x0 0x0 0x1b5fd0 0x0 0x0 0x0 0x0 0x190 0x166a48 0x0 0x0 0x0 0x1b5fd0 0x0 0x0 0x0 0x0>; - }; + net_boost,table { - boot_device@3 { - net_boost,label = "UFS"; - net_boost,node = [00]; - net_boost,sysnode = "/sys/class/scsi_host/host0/transferred_cnt"; - net_boost,table_size = <0x2>; - net_boost,table = <0x70 0x0 0x0 0x163780 0x0 0x14a140 0x0 0x0 0x0 0x0 0x320 0x104410 0x0 0x163780 0x0 0x177bb8 0x0 0x0 0x0 0x1>; - }; + level_0 { + threshold = <0x190>; + lit_min = <0x163780>; + mif = <0x14a140>; + }; - boot_device@4 { - net_boost,label = "WIFI"; - net_boost,node = "wlan0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x96 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0xc8 0x0 0x0 0x0 0x0 0x0 0x0 0x1 0x1 0x1 0x12c 0x0 0x0 0x0 0x0 0x0 0x0 0x1 0x1 0x1>; - }; + level_1 { + threshold = <0x320>; + big_min = <0x104410>; + lit_min = <0x163780>; + mif = <0x177bb8>; + hmp_boost = "enable"; + }; + }; + }; - boot_device@5 { - net_boost,label = "WIFI TX"; - net_boost,node = "wlan0"; - net_boost,table_size = <0x4>; - net_boost,table = <0x3c 0x166a48 0x0 0x163780 0x0 0x0 0x0 0x0 0x0 0x0 0x96 0x19c990 0x0 0x19c990 0x0 0x0 0x0 0x0 0x0 0x0 0xc8 0x1d5ba0 0x0 0x1b5fd0 0x0 0x14a140 0x61a80 0x1 0x1 0x1 0x12c 0x1e8c50 0x0 0x1b5fd0 0x0 0x1b5fd0 0x825f0 0x1 0x1 0x1>; - }; + boot_device@2 { + net_boost,label = "WIFI TX"; + net_boost,node = "wlan0"; + net_boost,slowdown; - boot_device@6 { - net_boost,label = "WIFI RX"; - net_boost,node = "wlan0"; - net_boost,table_size = <0x4>; - net_boost,table = <0x64 0x11da50 0x0 0x101148 0x0 0x0 0x0 0x0 0x0 0x0 0x96 0x166a48 0x0 0x130b00 0x0 0x0 0x0 0x0 0x0 0x0 0xc8 0x19c990 0x0 0x130b00 0x0 0xce4c8 0x61a80 0x1 0x1 0x1 0x12c 0x1d5ba0 0x0 0x163780 0x0 0x14a140 0x825f0 0x1 0x1 0x1>; - }; + net_boost,table { - boot_device@7 { - net_boost,label = "P2P"; - net_boost,node = "p2p-wlan0-0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x1e 0x1174c0 0x0 0x11da50 0x0 0x0 0x0 0x0 0x0 0x0 0x5a 0x1c9080 0x0 0x183350 0x0 0x0 0x3e418 0x0 0x0 0x0 0x12c 0x1fbd00 0x0 0x183350 0x0 0x854d0 0x3e418 0x1 0x1 0x1>; - }; + level_0 { + threshold = <0x3c>; + big_min = <0x166a48>; + lit_min = <0x163780>; + }; - boot_device@8 { - net_boost,label = "NAN"; - net_boost,node = "aware_data0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x1e 0x1174c0 0x0 0x11da50 0x0 0x0 0x0 0x0 0x0 0x0 0x5a 0x1c9080 0x0 0x183350 0x0 0x0 0x3e418 0x0 0x0 0x0 0x12c 0x1fbd00 0x0 0x183350 0x0 0x854d0 0x3e418 0x1 0x1 0x1>; - }; + level_1 { + threshold = <0x96>; + big_min = <0x19c990>; + lit_min = <0x19c990>; + }; - boot_device@9 { - net_boost,label = "USB"; - net_boost,node = "rndis0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x1 0x0 0xc8 0x0 0x0 0x163780 0x0 0x177fa0 0x0 0x0 0x1 0x0 0x12c 0x0 0x0 0x19c990 0x0 0x1b5fd0 0x825f0 0x0 0x1 0x0>; - }; - }; + level_2 { + threshold = <0xc8>; + big_min = <0x1d5ba0>; + lit_min = <0x1b5fd0>; + mif = <0x14a140>; + int = <0x61a80>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + + level_3 { + threshold = <0x12c>; + big_min = <0x1e8c50>; + lit_min = <0x1b5fd0>; + mif = <0x1b5fd0>; + int = <0x825f0>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + }; + }; + + boot_device@3 { + net_boost,label = "WIFI RX"; + net_boost,node = "wlan0"; + net_boost,slowdown; + + net_boost,table { + + level_0 { + threshold = <0x64>; + big_min = <0x11da50>; + lit_min = <0x101148>; + }; + + level_1 { + threshold = <0x96>; + big_min = <0x166a48>; + lit_min = <0x130b00>; + }; + + level_2 { + threshold = <0xc8>; + big_min = <0x19c990>; + lit_min = <0x130b00>; + mif = <0xce4c8>; + int = <0x61a80>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + + level_3 { + threshold = <0x12c>; + big_min = <0x1d5ba0>; + lit_min = <0x163780>; + mif = <0x14a140>; + int = <0x825f0>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + }; + }; + + boot_device@4 { + net_boost,label = "P2P"; + net_boost,node = "p2p-wlan0-0"; + net_boost,slowdown; + + net_boost,table { + + level_0 { + threshold = <0x3c>; + big_min = <0x166a48>; + lit_min = <0x163780>; + }; + + level_1 { + threshold = <0x96>; + big_min = <0x19c990>; + lit_min = <0x19c990>; + }; + + level_2 { + threshold = <0xc8>; + big_min = <0x1d5ba0>; + lit_min = <0x1b5fd0>; + mif = <0x14a140>; + int = <0x61a80>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + + level_3 { + threshold = <0x12c>; + big_min = <0x1e8c50>; + lit_min = <0x1b5fd0>; + mif = <0x1b5fd0>; + int = <0x825f0>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + }; + }; + + boot_device@5 { + net_boost,label = "NAN"; + net_boost,node = "aware_data0"; + net_boost,slowdown; + + net_boost,table { + + level_0 { + threshold = <0x3c>; + big_min = <0x166a48>; + lit_min = <0x163780>; + }; + + level_1 { + threshold = <0x96>; + big_min = <0x19c990>; + lit_min = <0x19c990>; + }; + + level_2 { + threshold = <0xc8>; + big_min = <0x1d5ba0>; + lit_min = <0x1b5fd0>; + mif = <0x14a140>; + int = <0x61a80>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + + level_3 { + threshold = <0x12c>; + big_min = <0x1e8c50>; + lit_min = <0x1b5fd0>; + mif = <0x1b5fd0>; + int = <0x825f0>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + }; + }; + + boot_device@6 { + net_boost,label = "IPC"; + net_boost,node = "rmnet0 rmnet1 rmnet2 rmnet3 rmnet4 rmnet5 rmnet6 rmnet7 umts_dm0"; + + net_boost,table { + + level_0 { + threshold = <0x64>; + lit_min = <0x101148>; + mif = <0xce4c8>; + }; + + level_1 { + threshold = <0x96>; + lit_min = <0x130b00>; + mif = <0xf78f0>; + }; + + level_2 { + threshold = <0xc8>; + big_min = <0x1d5ba0>; + lit_min = <0x19c990>; + mif = <0x1b5fd0>; + }; + }; + }; + + boot_device@7 { + net_boost,label = "CLAT"; + net_boost,node = "clat clat4 v4-rmnet0 v4-rmnet1 v4-rmnet2 v4-rmnet3 v4-rmnet4 v4-rmnet5 v4-rmnet6 v4-rmnet7"; + + net_boost,table { + + level_0 { + threshold = <0x64>; + big_min = <0x104410>; + mif = <0xf78f0>; + }; + + level_1 { + threshold = <0xc8>; + big_min = <0x110b48>; + mif = <0x1b5fd0>; + }; + + level_2 { + threshold = <0x12c>; + big_min = <0x133dc8>; + mif = <0x1b5fd0>; + }; + + level_3 { + threshold = <0x190>; + big_min = <0x166a48>; + mif = <0x1b5fd0>; + }; + }; + }; + }; dev_ril_bridge_pdata { compatible = "samsung,dev_ril_bridge_pdata"; @@ -13572,8 +14071,8 @@ exynos_console_debugger { compatible = "samsung,exynos_console_debugger"; reg = <0x0 0x10440000 0x100>; - interrupts = <0x0 0x18d 0x0>; - interrupt-names = "uart_irq"; + interrupts = <0x0 0x18d 0x0>; + interrupt-names = "uart_irq"; pinctrl-names = "default"; pinctrl-0 = <0xfd>; uart_port = <0x0>; @@ -13780,7 +14279,7 @@ fuelgauge,capacity = <0xce7>; fuelgauge,discharge_temp_threshold = <0x258>; fuelgauge,discharge_volt_threshold = <0x1068>; - fuelgauge,ttf_capacity = <0xdac>; + fuelgauge,ttf_capacity = <0xc4e>; fuelgauge,cv_data = <0x9b8 0x33d 0x711 0x969 0x340 0x704 0x917 0x345 0x6e9 0x8e0 0x348 0x6cf 0x886 0x34e 0x6b9 0x838 0x352 0x69a 0x7f6 0x356 0x686 0x79e 0x35b 0x668 0x770 0x35d 0x656 0x72e 0x361 0x63a 0x705 0x363 0x628 0x6d5 0x366 0x618 0x6a7 0x369 0x5fb 0x693 0x369 0x5f5 0x683 0x36b 0x5eb 0x67c 0x36b 0x5e8 0x675 0x36c 0x5e5 0x64f 0x36e 0x5de 0x62c 0x370 0x5cb 0x611 0x371 0x5b7 0x608 0x372 0x5b2 0x5f0 0x373 0x5ab 0x5c5 0x376 0x590 0x597 0x378 0x581 0x574 0x37b 0x567 0x543 0x37e 0x551 0x513 0x380 0x534 0x4f3 0x382 0x523 0x4cf 0x386 0x508 0x4b2 0x388 0x4ef 0x47c 0x38a 0x4db 0x455 0x38d 0x4bd 0x42b 0x38f 0x4a1 0x407 0x392 0x484 0x3f5 0x393 0x474 0x3cf 0x395 0x457 0x3c1 0x397 0x43c 0x399 0x399 0x428 0x37c 0x39b 0x40e 0x377 0x39b 0x3fb 0x35f 0x39d 0x3ec 0x341 0x39f 0x3d0 0x328 0x3a1 0x3b2 0x313 0x3a2 0x396 0x30c 0x3a3 0x388 0x2fc 0x3a4 0x37f 0x2e8 0x3a6 0x360 0x2da 0x3a7 0x34e 0x2cb 0x3a8 0x33c 0x2b5 0x3a9 0x320 0x2a9 0x3aa 0x30f 0x29a 0x3ac 0x2f0 0x28b 0x3ad 0x2df 0x280 0x3ae 0x2c8 0x274 0x3b1 0x2b9 0x26e 0x3b2 0x2a7 0x26a 0x3b3 0x298 0x258 0x3b6 0x286 0x254 0x3b7 0x273 0x24d 0x3b9 0x266 0x248 0x3b9 0x259 0x240 0x3bc 0x23c 0x241 0x3bd 0x229 0x232 0x3be 0x217 0x1ff 0x3c8 0x1fa 0x1f9 0x3c9 0x1e7 0x1ed 0x3cb 0x1d0 0x1ec 0x3cc 0x1b3 0x1e4 0x3cd 0x1a1 0x1e0 0x3cf 0x18e 0x1da 0x3d0 0x17c 0x1d6 0x3d1 0x16c 0x1ce 0x3d1 0x163 0x1c8 0x3d2 0x150 0x1c4 0x3d3 0x149 0x1be 0x3d5 0x12f 0x1b5 0x3d6 0x11a 0x1ad 0x3d8 0xff 0x1a7 0x3d9 0xf2 0x1a6 0x3da 0xe5 0x19e 0x3db 0xd3 0x19b 0x3dc 0xc7 0x195 0x3dd 0xbf 0x18d 0x3de 0xab 0x187 0x3df 0x8c 0x183 0x3e0 0x7e 0x180 0x3e1 0x6b 0x174 0x3e3 0x54 0x16c 0x3e5 0x36 0x164 0x3e6 0x1a 0x164 0x3e6 0xd 0x0 0x3e8 0x0>; }; diff --git a/arch/arm64/boot/dts/exynos/exynos9810-starlte_eur_open_26.dts b/arch/arm64/boot/dts/exynos/exynos9810-starlte_eur_open_26.dts index 4d6e26cf1519..647e13e0dab7 100644 --- a/arch/arm64/boot/dts/exynos/exynos9810-starlte_eur_open_26.dts +++ b/arch/arm64/boot/dts/exynos/exynos9810-starlte_eur_open_26.dts @@ -47,6 +47,7 @@ }; tima_region@0xB8000000 { + status = "disabled"; compatible = "removed-dma-pool"; reg = <0x0 0xb8000000 0x200000>; linux,phandle = <0x19b>; @@ -156,6 +157,7 @@ }; rkp_region@0xAF800000 { + status = "disabled"; compatible = "removed-dma-pool"; reg = <0x0 0xaf800000 0x2000000>; linux,phandle = <0x19c>; @@ -4385,156 +4387,442 @@ input_booster { status = "okay"; compatible = "input_booster"; - #address-cells = <0x1>; - #size-cells = <0x0>; + max_resource_count = [37 00]; + #address-cells = <1>; + #size-cells = <0>; + ib_release_values = "0,0,0,0,0,0,0"; booster_key@1 { - input_booster,label = "KEY"; - input_booster,type = <0x0>; - input_booster,levels = <0x1>; - input_booster,cpu_freqs = <0x104410>; - input_booster,hmp_boost = <0x1>; - input_booster,kfc_freqs = <0x0>; - input_booster,mif_freqs = <0x0>; - input_booster,int_freqs = <0x0>; - input_booster,dma_latency = <0x0>; - input_booster,head_times = <0x1f4>; - input_booster,tail_times = <0x1f4>; - input_booster,phase_times = <0x0>; + input_booster,label = "key"; + input_booster,type = <0>; /* BOOSTER_DEVICE_KEY */ + /* Time table */ + input_booster,head_time = <500>; + input_booster,tail_time = <500>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 0>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <0 0>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; }; + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 0>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 0>; + }; + }; + }; booster_key@2 { - input_booster,label = "TOUCHKEY"; - input_booster,type = <0x1>; - input_booster,levels = <0x1>; - input_booster,cpu_freqs = <0x104410>; - input_booster,hmp_boost = <0x1>; - input_booster,kfc_freqs = <0x0>; - input_booster,mif_freqs = <0x0>; - input_booster,int_freqs = <0x0>; - input_booster,dma_latency = <0x0>; - input_booster,head_times = <0x0>; - input_booster,tail_times = <0xc8>; - input_booster,phase_times = <0x0>; + input_booster,label = "touchkey"; + input_booster,type = <1>; /* BOOSTER_DEVICE_TOUCHKEY */ + /* Time table */ + input_booster,head_time = <0>; + input_booster,tail_time = <200>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 0>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <0 0>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; }; + resource@5 { + resource,label = "hmp"; + resource,value = <1 0>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 0>; + }; + }; + }; booster_key@3 { - input_booster,label = "TOUCH"; - input_booster,type = <0x2>; - input_booster,levels = <0x1 0x2 0x3>; - input_booster,cpu_freqs = <0x104410 0x104410 0xd1790>; - input_booster,hmp_boost = <0x1 0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0 0x0>; - input_booster,int_freqs = <0x0 0x0 0x0>; - input_booster,dma_latency = <0x0 0x0 0x0>; - input_booster,head_times = <0x82 0x82 0x0>; - input_booster,tail_times = <0x0 0x0 0x1f4>; - input_booster,phase_times = <0x0 0x0 0x0>; - }; - - booster_key@4 { - input_booster,label = "MULTITOUCH"; - input_booster,type = <0x3>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0xd1790>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x3e8 0x0>; - input_booster,tail_times = <0x0 0x1f4>; - input_booster,phase_times = <0x0 0x0>; + input_booster,label = "touch"; + input_booster,type = <2>; /* BOOSTER_DEVICE_TOUCH */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <500>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; }; + }; + booster_key@4 { // Input Booster + + input_booster,label = "multitouch"; + input_booster,type = <3>; /* BOOSTER_DEVICE_MULTITOUCH */ + /* Time table */ + input_booster,head_time = <1000>; + input_booster,tail_time = <500>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@5 { - input_booster,label = "KEYBOARD"; - input_booster,type = <0x4>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0x104410>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x82 0x82>; - input_booster,tail_times = <0x0 0x0>; - input_booster,phase_times = <0x0 0x0>; + input_booster,label = "keyboard"; + input_booster,type = <4>; /* BOOSTER_DEVICE_KEYBOARD */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <0>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; }; + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@6 { - input_booster,label = "MOUSE"; - input_booster,type = <0x5>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0xd1790>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x82 0x0>; - input_booster,tail_times = <0x0 0x1f4>; - input_booster,phase_times = <0x0 0x0>; + input_booster,label = "mouse"; + input_booster,type = <5>; /* BOOSTER_DEVICE_MOUSE */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <500>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; }; + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@7 { - input_booster,label = "MOUSE WHEEL"; - input_booster,type = <0x6>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0x0>; - input_booster,hmp_boost = <0x1 0x0>; - input_booster,kfc_freqs = <0xcb200 0x0>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x82 0x0>; - input_booster,tail_times = <0x0 0x0>; - input_booster,phase_times = <0x0 0x0>; + input_booster,label = "mouse_wheel"; + input_booster,type = <6>; /* BOOSTER_DEVICE_MOUSE */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <0>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; }; + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@8 { - input_booster,label = "PEN HOVER"; - input_booster,type = <0x7>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0xd1790>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x82 0x0>; - input_booster,tail_times = <0x0 0x1f4>; - input_booster,phase_times = <0x0 0x0>; + input_booster,label = "pen_hover"; + input_booster,type = <7>; /* BOOSTER_DEVICE_MOUSE */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <500>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; }; + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@9 { - input_booster,label = "PEN"; - input_booster,type = <0x8>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x11da50 0xd1790>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,bimc_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0xc8 0x0>; - input_booster,tail_times = <0x0 0x258>; + input_booster,label = "pen"; + input_booster,type = <8>; /* BOOSTER_DEVICE_MOUSE */ + /* Time table */ + input_booster,head_time = <200>; + input_booster,tail_time = <600>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1170000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; }; + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@10 { - input_booster,label = "KEY_TWO"; - input_booster,type = <0x9>; - input_booster,levels = <0x1>; - input_booster,cpu_freqs = <0x166a48>; - input_booster,hmp_boost = <0x1>; - input_booster,kfc_freqs = <0x101148>; - input_booster,mif_freqs = <0x0>; - input_booster,int_freqs = <0x0>; - input_booster,dma_latency = <0x0>; - input_booster,head_times = <0x2bc>; - input_booster,tail_times = <0x2bc>; - input_booster,phase_times = <0x0>; + input_booster,label = "key_two"; + input_booster,type = <9>; /* BOOSTER_DEVICE_KEY */ + /* Time table */ + input_booster,head_time = <700>; + input_booster,tail_time = <700>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1469000 0>; }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <1053000 0>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; // Input Booster - + /* If you need to add new key type, add it this position */ }; exynos-snapshot { @@ -5081,7 +5369,7 @@ gpu_dynamic_abb = <0x0>; gpu_early_clk_gating = <0x0>; gpu_dvs = <0x0>; - gpu_inter_frame_pm = <0x1>; + gpu_inter_frame_pm = <0x0>; gpu_perf_gathering = <0x0>; gpu_runtime_pm_delay_time = <0x32>; gpu_dvfs_polling_time = <0x1e>; @@ -8401,7 +8689,8 @@ status = "ok"; ip_ver = <0x11>; clock_rate = <0x17d78400>; - min_rate = <0x186a0>; + min_rate = <0x186a0>; + enc_ts_delta = <0x1 0x211208>; num_qos_steps = <0x8>; max_qos_steps = <0x9>; max_mb = <0x489732>; @@ -10375,7 +10664,7 @@ boost_table = <0x14 0xd1790 0xf 0xeadd0 0x5 0x133dc8 0x0>; up_rate_limit_table = <0x5>; down_rate_limit_table = <0x5>; - upscale_ratio_table = <0x32 0xeadd0 0x41>; + upscale_ratio_table = <0x32 0xeadd0 0x41 0x166a48 0x50>; }; }; @@ -11139,58 +11428,78 @@ default_int = <0x1a1f8>; default_hpg = <0x1>; front_preview_int_cam = <0x9c400>; - front_preview_cam = <0x927c0>; + front_preview_cam = <0x9c400>; front_preview_mif = <0xf78f0>; front_preview_int = <0x1a1f8>; front_preview_hpg = <0x1>; front_preview_full_int_cam = <0xa1220>; - front_preview_full_cam = <0x927c0>; + front_preview_full_cam = <0x9c400>; front_preview_full_mif = <0xf78f0>; front_preview_full_int = <0x1a1f8>; front_preview_full_hpg = <0x1>; front_capture_int_cam = <0xa1220>; - front_capture_cam = <0x927c0>; - front_capture_mif = <0xf78f0>; + front_capture_cam = <0x9c400>; + front_capture_mif = <0x1fefc8>; front_capture_int = <0x1a1f8>; front_capture_hpg = <0x1>; front_video_int_cam = <0x9c400>; - front_video_cam = <0x927c0>; + front_video_cam = <0x9c400>; front_video_mif = <0xf78f0>; front_video_int = <0x1a1f8>; front_video_hpg = <0x1>; front_video_whd_int_cam = <0x9c400>; - front_video_whd_cam = <0x927c0>; + front_video_whd_cam = <0x9c400>; front_video_whd_mif = <0xf78f0>; front_video_whd_int = <0x1a1f8>; front_video_whd_hpg = <0x1>; + front_video_uhd_int_cam = <0xa1220>; + front_video_uhd_cam = <0x9c400>; + front_video_uhd_mif = <0xf78f0>; + front_video_uhd_int = <0x1a1f8>; + front_video_uhd_hpg = <0x1>; + front_video_fhd_60fps_int_cam = <0xa1220>; + front_video_fhd_60fps_cam = <0x9c400>; + front_video_fhd_60fps_mif = <0xf78f0>; + front_video_fhd_60fps_int = <0x1a1f8>; + front_video_fhd_60fps_hpg = <0x1>; front_video_capture_int_cam = <0xa1220>; - front_video_capture_cam = <0x94ed0>; - front_video_capture_mif = <0xf78f0>; + front_video_capture_cam = <0x9c400>; + front_video_capture_mif = <0x1fefc8>; front_video_capture_int = <0x1a1f8>; front_video_capture_hpg = <0x1>; front_video_whd_capture_int_cam = <0xa1220>; - front_video_whd_capture_cam = <0x927c0>; - front_video_whd_capture_mif = <0xf78f0>; + front_video_whd_capture_cam = <0x9c400>; + front_video_whd_capture_mif = <0x1fefc8>; front_video_whd_capture_int = <0x1a1f8>; front_video_whd_capture_hpg = <0x1>; + front_video_uhd_capture_int_cam = <0xa1220>; + front_video_uhd_capture_cam = <0x9c400>; + front_video_uhd_capture_mif = <0x1fefc8>; + front_video_uhd_capture_int = <0x1a1f8>; + front_video_uhd_capture_hpg = <0x1>; + front_video_fhd_60fps_capture_int_cam = <0xa1220>; + front_video_fhd_60fps_capture_cam = <0x9c400>; + front_video_fhd_60fps_capture_mif = <0x1fefc8>; + front_video_fhd_60fps_capture_int = <0x1a1f8>; + front_video_fhd_60fps_capture_hpg = <0x1>; front_vt1_int_cam = <0x9c400>; - front_vt1_cam = <0x927c0>; + front_vt1_cam = <0x9c400>; front_vt1_mif = <0xf78f0>; front_vt1_int = <0x1a1f8>; front_vt1_hpg = <0x1>; front_vt2_int_cam = <0x9c400>; - front_vt2_cam = <0x927c0>; + front_vt2_cam = <0x9c400>; front_vt2_mif = <0xf78f0>; front_vt2_int = <0x1a1f8>; front_vt2_hpg = <0x1>; front_vt4_int_cam = <0x9c400>; - front_vt4_cam = <0x927c0>; + front_vt4_cam = <0x9c400>; front_vt4_mif = <0xf78f0>; front_vt4_int = <0x1a1f8>; front_vt4_hpg = <0x1>; front_preview_high_speed_fps_int_cam = <0xa1220>; - front_preview_high_speed_fps_cam = <0x94ed0>; - front_preview_high_speed_fps_mif = <0xf78f0>; + front_preview_high_speed_fps_cam = <0x9c400>; + front_preview_high_speed_fps_mif = <0x14a140>; front_preview_high_speed_fps_int = <0x1a1f8>; front_preview_high_speed_fps_hpg = <0x1>; rear2_preview_fhd_int_cam = <0x9c400>; @@ -11200,22 +11509,22 @@ rear2_preview_fhd_hpg = <0x1>; rear2_capture_int_cam = <0xa1220>; rear2_capture_cam = <0x9c400>; - rear2_capture_mif = <0xf78f0>; + rear2_capture_mif = <0x1fefc8>; rear2_capture_int = <0x1a1f8>; rear2_capture_hpg = <0x1>; - rear2_video_fhd_int_cam = <0x9c400>; + rear2_video_fhd_int_cam = <0xa1220>; rear2_video_fhd_cam = <0x9c400>; rear2_video_fhd_mif = <0xf78f0>; rear2_video_fhd_int = <0x1a1f8>; rear2_video_fhd_hpg = <0x1>; rear2_video_fhd_capture_int_cam = <0xa1220>; rear2_video_fhd_capture_cam = <0x9c400>; - rear2_video_fhd_capture_mif = <0xf78f0>; + rear2_video_fhd_capture_mif = <0x1fefc8>; rear2_video_fhd_capture_int = <0x1a1f8>; rear2_video_fhd_capture_hpg = <0x1>; rear_preview_fhd_int_cam = <0x9c400>; rear_preview_fhd_cam = <0x9c400>; - rear_preview_fhd_mif = <0xf78f0>; + rear_preview_fhd_mif = <0x177bb8>; rear_preview_fhd_int = <0x1a1f8>; rear_preview_fhd_hpg = <0x1>; rear_preview_whd_int_cam = <0x9c400>; @@ -11225,7 +11534,7 @@ rear_preview_whd_hpg = <0x1>; rear_preview_uhd_int_cam = <0xa1220>; rear_preview_uhd_cam = <0x9c400>; - rear_preview_uhd_mif = <0x177bb8>; + rear_preview_uhd_mif = <0x14a140>; rear_preview_uhd_int = <0x1a1f8>; rear_preview_uhd_hpg = <0x1>; rear_preview_uhd_60fps_int_cam = <0xa6040>; @@ -11235,27 +11544,27 @@ rear_preview_uhd_60fps_hpg = <0x1>; rear_preview_full_int_cam = <0xa1220>; rear_preview_full_cam = <0x9c400>; - rear_preview_full_mif = <0x14a140>; + rear_preview_full_mif = <0xf78f0>; rear_preview_full_int = <0x1a1f8>; rear_preview_full_hpg = <0x1>; rear_capture_int_cam = <0xa1220>; rear_capture_cam = <0x9c400>; - rear_capture_mif = <0xf78f0>; + rear_capture_mif = <0x1fefc8>; rear_capture_int = <0x1a1f8>; rear_capture_hpg = <0x1>; - rear_video_fhd_int_cam = <0x9c400>; + rear_video_fhd_int_cam = <0xa1220>; rear_video_fhd_cam = <0x9c400>; rear_video_fhd_mif = <0xf78f0>; rear_video_fhd_int = <0x1a1f8>; rear_video_fhd_hpg = <0x1>; - rear_video_whd_int_cam = <0x9c400>; + rear_video_whd_int_cam = <0xa1220>; rear_video_whd_cam = <0x9c400>; rear_video_whd_mif = <0xf78f0>; rear_video_whd_int = <0x1a1f8>; rear_video_whd_hpg = <0x1>; rear_video_uhd_int_cam = <0xa1220>; rear_video_uhd_cam = <0x9c400>; - rear_video_uhd_mif = <0x177bb8>; + rear_video_uhd_mif = <0x14a140>; rear_video_uhd_int = <0x1a1f8>; rear_video_uhd_hpg = <0x1>; rear_video_uhd_60fps_int_cam = <0xa6040>; @@ -11265,57 +11574,57 @@ rear_video_uhd_60fps_hpg = <0x1>; rear_video_fhd_capture_int_cam = <0xa1220>; rear_video_fhd_capture_cam = <0x9c400>; - rear_video_fhd_capture_mif = <0xf78f0>; + rear_video_fhd_capture_mif = <0x1fefc8>; rear_video_fhd_capture_int = <0x1a1f8>; rear_video_fhd_capture_hpg = <0x1>; rear_video_whd_capture_int_cam = <0xa1220>; rear_video_whd_capture_cam = <0x9c400>; - rear_video_whd_capture_mif = <0xf78f0>; + rear_video_whd_capture_mif = <0x1fefc8>; rear_video_whd_capture_int = <0x1a1f8>; rear_video_whd_capture_hpg = <0x1>; rear_video_uhd_capture_int_cam = <0xa1220>; rear_video_uhd_capture_cam = <0x9c400>; - rear_video_uhd_capture_mif = <0x177bb8>; + rear_video_uhd_capture_mif = <0x1fefc8>; rear_video_uhd_capture_int = <0x1a1f8>; rear_video_uhd_capture_hpg = <0x1>; - dual_preview_int_cam = <0x9c400>; + dual_preview_int_cam = <0xa1220>; dual_preview_cam = <0x9c400>; - dual_preview_mif = <0xf78f0>; + dual_preview_mif = <0x177bb8>; dual_preview_int = <0x1a1f8>; dual_preview_hpg = <0x1>; dual_capture_int_cam = <0xa1220>; dual_capture_cam = <0x9c400>; - dual_capture_mif = <0xf78f0>; + dual_capture_mif = <0x1fefc8>; dual_capture_int = <0x1a1f8>; dual_capture_hpg = <0x1>; - dual_video_fhd_int_cam = <0x9c400>; + dual_video_fhd_int_cam = <0xa1220>; dual_video_fhd_cam = <0x9c400>; - dual_video_fhd_mif = <0xf78f0>; + dual_video_fhd_mif = <0x14a140>; dual_video_fhd_int = <0x1a1f8>; dual_video_fhd_hpg = <0x1>; dual_video_fhd_capture_int_cam = <0xa1220>; dual_video_fhd_capture_cam = <0x9c400>; - dual_video_fhd_capture_mif = <0xf78f0>; + dual_video_fhd_capture_mif = <0x1fefc8>; dual_video_fhd_capture_int = <0x1a1f8>; dual_video_fhd_capture_hpg = <0x1>; dual_video_uhd_int_cam = <0xa1220>; dual_video_uhd_cam = <0x9c400>; - dual_video_uhd_mif = <0x177bb8>; + dual_video_uhd_mif = <0x14a140>; dual_video_uhd_int = <0x1a1f8>; dual_video_uhd_hpg = <0x1>; dual_video_uhd_capture_int_cam = <0xa1220>; dual_video_uhd_capture_cam = <0x9c400>; - dual_video_uhd_capture_mif = <0x177bb8>; + dual_video_uhd_capture_mif = <0x1fefc8>; dual_video_uhd_capture_int = <0x1a1f8>; dual_video_uhd_capture_hpg = <0x1>; dual_sync_preview_int_cam = <0xa1220>; dual_sync_preview_cam = <0x9c400>; - dual_sync_preview_mif = <0x177bb8>; + dual_sync_preview_mif = <0x1b5fd0>; dual_sync_preview_int = <0x1a1f8>; dual_sync_preview_hpg = <0x1>; dual_sync_capture_int_cam = <0xa3930>; dual_sync_capture_cam = <0x9c400>; - dual_sync_capture_mif = <0x1b5fd0>; + dual_sync_capture_mif = <0x1fefc8>; dual_sync_capture_int = <0x1a1f8>; dual_sync_capture_hpg = <0x1>; dual_sync_preview_whd_int_cam = <0xa6040>; @@ -11324,32 +11633,32 @@ dual_sync_preview_whd_int = <0x1a1f8>; dual_sync_preview_whd_hpg = <0x1>; dual_sync_whd_capture_int_cam = <0xa6040>; - dual_sync_whd_capture_cam = <0xa6040>; - dual_sync_whd_capture_mif = <0x1b5fd0>; + dual_sync_whd_capture_cam = <0x9c400>; + dual_sync_whd_capture_mif = <0x1fefc8>; dual_sync_whd_capture_int = <0x1a1f8>; dual_sync_whd_capture_hpg = <0x1>; - dual_sync_video_fhd_int_cam = <0xa1220>; - dual_sync_video_fhd_cam = <0xa6040>; + dual_sync_video_fhd_int_cam = <0xa6040>; + dual_sync_video_fhd_cam = <0x9c400>; dual_sync_video_fhd_mif = <0x177bb8>; dual_sync_video_fhd_int = <0x1a1f8>; dual_sync_video_fhd_hpg = <0x1>; - dual_sync_video_fhd_capture_int_cam = <0xa3930>; - dual_sync_video_fhd_capture_cam = <0xa6040>; - dual_sync_video_fhd_capture_mif = <0x1b5fd0>; + dual_sync_video_fhd_capture_int_cam = <0xa6040>; + dual_sync_video_fhd_capture_cam = <0x9c400>; + dual_sync_video_fhd_capture_mif = <0x1fefc8>; dual_sync_video_fhd_capture_int = <0x1a1f8>; dual_sync_video_fhd_capture_hpg = <0x1>; dual_sync_video_uhd_int_cam = <0xa6040>; - dual_sync_video_uhd_cam = <0xa6040>; + dual_sync_video_uhd_cam = <0x9c400>; dual_sync_video_uhd_mif = <0x177bb8>; dual_sync_video_uhd_int = <0x1a1f8>; dual_sync_video_uhd_hpg = <0x1>; dual_sync_video_uhd_capture_int_cam = <0xa6040>; - dual_sync_video_uhd_capture_cam = <0xa6040>; - dual_sync_video_uhd_capture_mif = <0x1b5fd0>; + dual_sync_video_uhd_capture_cam = <0x9c400>; + dual_sync_video_uhd_capture_mif = <0x1fefc8>; dual_sync_video_uhd_capture_int = <0x1a1f8>; dual_sync_video_uhd_capture_hpg = <0x1>; secure_front_int_cam = <0x9c400>; - secure_front_cam = <0x94ed0>; + secure_front_cam = <0x9c400>; secure_front_mif = <0xf78f0>; secure_front_int = <0x1a1f8>; secure_front_hpg = <0x1>; @@ -11360,7 +11669,7 @@ pip_preview_hpg = <0x1>; pip_capture_int_cam = <0xa3930>; pip_capture_cam = <0x9c400>; - pip_capture_mif = <0xf78f0>; + pip_capture_mif = <0x1fefc8>; pip_capture_int = <0x1a1f8>; pip_capture_hpg = <0x1>; pip_video_int_cam = <0xa1220>; @@ -11370,7 +11679,7 @@ pip_video_hpg = <0x1>; pip_video_capture_int_cam = <0xa3930>; pip_video_capture_cam = <0x9c400>; - pip_video_capture_mif = <0xf78f0>; + pip_video_capture_mif = <0x1fefc8>; pip_video_capture_int = <0x1a1f8>; pip_video_capture_hpg = <0x1>; preview_high_speed_fps_int_cam = <0xa1220>; @@ -11378,9 +11687,9 @@ preview_high_speed_fps_mif = <0xf78f0>; preview_high_speed_fps_int = <0x1a1f8>; preview_high_speed_fps_hpg = <0x1>; - video_high_speed_60fps_int_cam = <0xa1220>; + video_high_speed_60fps_int_cam = <0xa6040>; video_high_speed_60fps_cam = <0x9c400>; - video_high_speed_60fps_mif = <0x14a140>; + video_high_speed_60fps_mif = <0x177bb8>; video_high_speed_60fps_int = <0x1a1f8>; video_high_speed_60fps_hpg = <0x1>; video_high_speed_120fps_int_cam = <0xa1220>; @@ -11390,7 +11699,7 @@ video_high_speed_120fps_hpg = <0x1>; video_high_speed_240fps_int_cam = <0xa6040>; video_high_speed_240fps_cam = <0x9c400>; - video_high_speed_240fps_mif = <0x1b5fd0>; + video_high_speed_240fps_mif = <0x1fefc8>; video_high_speed_240fps_int = <0x1a1f8>; video_high_speed_240fps_hpg = <0x1>; video_high_speed_dualfps_int_cam = <0xa6040>; @@ -11398,9 +11707,9 @@ video_high_speed_dualfps_mif = <0x1b5fd0>; video_high_speed_dualfps_int = <0x1a1f8>; video_high_speed_dualfps_hpg = <0x6>; - video_high_speed_60fps_capture_int_cam = <0xa1220>; + video_high_speed_60fps_capture_int_cam = <0xa6040>; video_high_speed_60fps_capture_cam = <0x9c400>; - video_high_speed_60fps_capture_mif = <0x14a140>; + video_high_speed_60fps_capture_mif = <0x1fefc8>; video_high_speed_60fps_capture_int = <0x1a1f8>; video_high_speed_60fps_capture_hpg = <0x1>; ext_front_int_cam = <0xa8750>; @@ -11409,7 +11718,7 @@ ext_front_int = <0x825f0>; ext_front_hpg = <0x1>; ext_secure_int_cam = <0x9c400>; - ext_secure_cam = <0x94ed0>; + ext_secure_cam = <0x9c400>; ext_secure_mif = <0xf78f0>; ext_secure_int = <0x1a1f8>; ext_secure_hpg = <0x1>; @@ -12621,13 +12930,14 @@ status = "okay"; haptic,max_timeout = <0x2710>; haptic,multi_frequency = <0x7>; - haptic,duty = <0x8583 0xb204 0x8e6a 0x6acf 0x76ad 0x90f4 0x90f4>; - haptic,period = <0xbebc 0xfe50 0xcb73 0x9896 0xa98a 0x9896 0x9896>; + haptic,duty = <0x9ede 0xbebc 0x9896 0x7270 0x7f27 0x90f4 0x90f4>; + haptic,period = <0xbf68 0xfe50 0xcb73 0x9896 0xa98a 0x9896 0x9896>; haptic,reg2 = <0x82>; haptic,pwm_id = <0x1>; haptic,regulator_name = "VDD_MOTOR_3P3"; - haptic,normal_ratio = <0x46>; + haptic,normal_ratio = <0x4b>; haptic,overdrive_ratio = <0x5f>; + haptic,type = "LINEAR_1040"; }; sound { @@ -13425,74 +13735,264 @@ }; }; - argos { - compatible = "samsung,argos"; - #address-cells = <0x1>; + argos { + compatible = "samsung,argos"; + #address-cells = <0x1>; - boot_device@1 { - net_boost,label = "IPC"; - net_boost,node = "rmnet0 rmnet1 rmnet2 rmnet3 rmnet4 rmnet5 rmnet6 rmnet7 umts_dm0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x64 0x0 0x0 0x101148 0x0 0xce4c8 0x0 0x0 0x0 0x0 0x96 0x0 0x0 0x130b00 0x0 0xf78f0 0x0 0x0 0x0 0x0 0xc8 0x1d5ba0 0x0 0x19c990 0x0 0x1b5fd0 0x0 0x0 0x0 0x0>; - }; + boot_device@1 { + net_boost,label = "UFS"; + net_boost,node = [00]; + net_boost,sysnode = "/sys/class/scsi_host/host0/transferred_cnt"; - boot_device@2 { - net_boost,label = "CLAT"; - net_boost,node = "clat clat4 v4-rmnet0 v4-rmnet1 v4-rmnet2 v4-rmnet3 v4-rmnet4 v4-rmnet5 v4-rmnet6 v4-rmnet7"; - net_boost,table_size = <0x5>; - net_boost,table = <0x1 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x64 0x104410 0x0 0x0 0x0 0xf78f0 0x0 0x0 0x0 0x0 0xc8 0x110b48 0x0 0x0 0x0 0x1b5fd0 0x0 0x0 0x0 0x0 0x12c 0x133dc8 0x0 0x0 0x0 0x1b5fd0 0x0 0x0 0x0 0x0 0x190 0x166a48 0x0 0x0 0x0 0x1b5fd0 0x0 0x0 0x0 0x0>; - }; + net_boost,table { - boot_device@3 { - net_boost,label = "UFS"; - net_boost,node = [00]; - net_boost,sysnode = "/sys/class/scsi_host/host0/transferred_cnt"; - net_boost,table_size = <0x2>; - net_boost,table = <0x70 0x0 0x0 0x163780 0x0 0x14a140 0x0 0x0 0x0 0x0 0x320 0x104410 0x0 0x163780 0x0 0x177bb8 0x0 0x0 0x0 0x1>; - }; + level_0 { + threshold = <0x190>; + lit_min = <0x163780>; + mif = <0x14a140>; + }; - boot_device@4 { - net_boost,label = "WIFI"; - net_boost,node = "wlan0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x96 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0xc8 0x0 0x0 0x0 0x0 0x0 0x0 0x1 0x1 0x1 0x12c 0x0 0x0 0x0 0x0 0x0 0x0 0x1 0x1 0x1>; - }; + level_1 { + threshold = <0x320>; + big_min = <0x104410>; + lit_min = <0x163780>; + mif = <0x177bb8>; + hmp_boost = "enable"; + }; + }; + }; - boot_device@5 { - net_boost,label = "WIFI TX"; - net_boost,node = "wlan0"; - net_boost,table_size = <0x4>; - net_boost,table = <0x3c 0x166a48 0x0 0x163780 0x0 0x0 0x0 0x0 0x0 0x0 0x96 0x19c990 0x0 0x19c990 0x0 0x0 0x0 0x0 0x0 0x0 0xc8 0x1d5ba0 0x0 0x1b5fd0 0x0 0x14a140 0x61a80 0x1 0x1 0x1 0x12c 0x1e8c50 0x0 0x1b5fd0 0x0 0x1b5fd0 0x825f0 0x1 0x1 0x1>; - }; + boot_device@2 { + net_boost,label = "WIFI TX"; + net_boost,node = "wlan0"; + net_boost,slowdown; - boot_device@6 { - net_boost,label = "WIFI RX"; - net_boost,node = "wlan0"; - net_boost,table_size = <0x4>; - net_boost,table = <0x64 0x11da50 0x0 0x101148 0x0 0x0 0x0 0x0 0x0 0x0 0x96 0x166a48 0x0 0x130b00 0x0 0x0 0x0 0x0 0x0 0x0 0xc8 0x19c990 0x0 0x130b00 0x0 0xce4c8 0x61a80 0x1 0x1 0x1 0x12c 0x1d5ba0 0x0 0x163780 0x0 0x14a140 0x825f0 0x1 0x1 0x1>; - }; + net_boost,table { - boot_device@7 { - net_boost,label = "P2P"; - net_boost,node = "p2p-wlan0-0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x1e 0x1174c0 0x0 0x11da50 0x0 0x0 0x0 0x0 0x0 0x0 0x5a 0x1c9080 0x0 0x183350 0x0 0x0 0x3e418 0x0 0x0 0x0 0x12c 0x1fbd00 0x0 0x183350 0x0 0x854d0 0x3e418 0x1 0x1 0x1>; - }; + level_0 { + threshold = <0x3c>; + big_min = <0x166a48>; + lit_min = <0x163780>; + }; - boot_device@8 { - net_boost,label = "NAN"; - net_boost,node = "aware_data0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x1e 0x1174c0 0x0 0x11da50 0x0 0x0 0x0 0x0 0x0 0x0 0x5a 0x1c9080 0x0 0x183350 0x0 0x0 0x3e418 0x0 0x0 0x0 0x12c 0x1fbd00 0x0 0x183350 0x0 0x854d0 0x3e418 0x1 0x1 0x1>; - }; + level_1 { + threshold = <0x96>; + big_min = <0x19c990>; + lit_min = <0x19c990>; + }; - boot_device@9 { - net_boost,label = "USB"; - net_boost,node = "rndis0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x1 0x0 0xc8 0x0 0x0 0x163780 0x0 0x177fa0 0x0 0x0 0x1 0x0 0x12c 0x0 0x0 0x19c990 0x0 0x1b5fd0 0x825f0 0x0 0x1 0x0>; - }; - }; + level_2 { + threshold = <0xc8>; + big_min = <0x1d5ba0>; + lit_min = <0x1b5fd0>; + mif = <0x14a140>; + int = <0x61a80>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + + level_3 { + threshold = <0x12c>; + big_min = <0x1e8c50>; + lit_min = <0x1b5fd0>; + mif = <0x1b5fd0>; + int = <0x825f0>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + }; + }; + + boot_device@3 { + net_boost,label = "WIFI RX"; + net_boost,node = "wlan0"; + net_boost,slowdown; + + net_boost,table { + + level_0 { + threshold = <0x64>; + big_min = <0x11da50>; + lit_min = <0x101148>; + }; + + level_1 { + threshold = <0x96>; + big_min = <0x166a48>; + lit_min = <0x130b00>; + }; + + level_2 { + threshold = <0xc8>; + big_min = <0x19c990>; + lit_min = <0x130b00>; + mif = <0xce4c8>; + int = <0x61a80>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + + level_3 { + threshold = <0x12c>; + big_min = <0x1d5ba0>; + lit_min = <0x163780>; + mif = <0x14a140>; + int = <0x825f0>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + }; + }; + + boot_device@4 { + net_boost,label = "P2P"; + net_boost,node = "p2p-wlan0-0"; + net_boost,slowdown; + + net_boost,table { + + level_0 { + threshold = <0x3c>; + big_min = <0x166a48>; + lit_min = <0x163780>; + }; + + level_1 { + threshold = <0x96>; + big_min = <0x19c990>; + lit_min = <0x19c990>; + }; + + level_2 { + threshold = <0xc8>; + big_min = <0x1d5ba0>; + lit_min = <0x1b5fd0>; + mif = <0x14a140>; + int = <0x61a80>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + + level_3 { + threshold = <0x12c>; + big_min = <0x1e8c50>; + lit_min = <0x1b5fd0>; + mif = <0x1b5fd0>; + int = <0x825f0>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + }; + }; + + boot_device@5 { + net_boost,label = "NAN"; + net_boost,node = "aware_data0"; + net_boost,slowdown; + + net_boost,table { + + level_0 { + threshold = <0x3c>; + big_min = <0x166a48>; + lit_min = <0x163780>; + }; + + level_1 { + threshold = <0x96>; + big_min = <0x19c990>; + lit_min = <0x19c990>; + }; + + level_2 { + threshold = <0xc8>; + big_min = <0x1d5ba0>; + lit_min = <0x1b5fd0>; + mif = <0x14a140>; + int = <0x61a80>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + + level_3 { + threshold = <0x12c>; + big_min = <0x1e8c50>; + lit_min = <0x1b5fd0>; + mif = <0x1b5fd0>; + int = <0x825f0>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + }; + }; + + boot_device@6 { + net_boost,label = "IPC"; + net_boost,node = "rmnet0 rmnet1 rmnet2 rmnet3 rmnet4 rmnet5 rmnet6 rmnet7 umts_dm0"; + + net_boost,table { + + level_0 { + threshold = <0x64>; + lit_min = <0x101148>; + mif = <0xce4c8>; + }; + + level_1 { + threshold = <0x96>; + lit_min = <0x130b00>; + mif = <0xf78f0>; + }; + + level_2 { + threshold = <0xc8>; + big_min = <0x1d5ba0>; + lit_min = <0x19c990>; + mif = <0x1b5fd0>; + }; + }; + }; + + boot_device@7 { + net_boost,label = "CLAT"; + net_boost,node = "clat clat4 v4-rmnet0 v4-rmnet1 v4-rmnet2 v4-rmnet3 v4-rmnet4 v4-rmnet5 v4-rmnet6 v4-rmnet7"; + + net_boost,table { + + level_0 { + threshold = <0x64>; + big_min = <0x104410>; + mif = <0xf78f0>; + }; + + level_1 { + threshold = <0xc8>; + big_min = <0x110b48>; + mif = <0x1b5fd0>; + }; + + level_2 { + threshold = <0x12c>; + big_min = <0x133dc8>; + mif = <0x1b5fd0>; + }; + + level_3 { + threshold = <0x190>; + big_min = <0x166a48>; + mif = <0x1b5fd0>; + }; + }; + }; + }; dev_ril_bridge_pdata { compatible = "samsung,dev_ril_bridge_pdata"; @@ -13715,7 +14215,7 @@ fuelgauge,capacity = <0xb97>; fuelgauge,discharge_temp_threshold = <0x258>; fuelgauge,discharge_volt_threshold = <0x1068>; - fuelgauge,ttf_capacity = <0xbb8>; + fuelgauge,ttf_capacity = <0xa8c>; fuelgauge,cv_data = <0x9b8 0x33d 0x711 0x969 0x340 0x704 0x917 0x345 0x6e9 0x8e0 0x348 0x6cf 0x886 0x34e 0x6b9 0x838 0x352 0x69a 0x7f6 0x356 0x686 0x79e 0x35b 0x668 0x770 0x35d 0x656 0x72e 0x361 0x63a 0x705 0x363 0x628 0x6d5 0x366 0x618 0x6a7 0x369 0x5fb 0x693 0x369 0x5f5 0x683 0x36b 0x5eb 0x67c 0x36b 0x5e8 0x675 0x36c 0x5e5 0x64f 0x36e 0x5de 0x62c 0x370 0x5cb 0x611 0x371 0x5b7 0x608 0x372 0x5b2 0x5f0 0x373 0x5ab 0x5c5 0x376 0x590 0x597 0x378 0x581 0x574 0x37b 0x567 0x543 0x37e 0x551 0x513 0x380 0x534 0x4f3 0x382 0x523 0x4cf 0x386 0x508 0x4b2 0x388 0x4ef 0x47c 0x38a 0x4db 0x455 0x38d 0x4bd 0x42b 0x38f 0x4a1 0x407 0x392 0x484 0x3f5 0x393 0x474 0x3cf 0x395 0x457 0x3c1 0x397 0x43c 0x399 0x399 0x428 0x37c 0x39b 0x40e 0x377 0x39b 0x3fb 0x35f 0x39d 0x3ec 0x341 0x39f 0x3d0 0x328 0x3a1 0x3b2 0x313 0x3a2 0x396 0x30c 0x3a3 0x388 0x2fc 0x3a4 0x37f 0x2e8 0x3a6 0x360 0x2da 0x3a7 0x34e 0x2cb 0x3a8 0x33c 0x2b5 0x3a9 0x320 0x2a9 0x3aa 0x30f 0x29a 0x3ac 0x2f0 0x28b 0x3ad 0x2df 0x280 0x3ae 0x2c8 0x274 0x3b1 0x2b9 0x26e 0x3b2 0x2a7 0x26a 0x3b3 0x298 0x258 0x3b6 0x286 0x254 0x3b7 0x273 0x24d 0x3b9 0x266 0x248 0x3b9 0x259 0x240 0x3bc 0x23c 0x241 0x3bd 0x229 0x232 0x3be 0x217 0x1ff 0x3c8 0x1fa 0x1f9 0x3c9 0x1e7 0x1ed 0x3cb 0x1d0 0x1ec 0x3cc 0x1b3 0x1e4 0x3cd 0x1a1 0x1e0 0x3cf 0x18e 0x1da 0x3d0 0x17c 0x1d6 0x3d1 0x16c 0x1ce 0x3d1 0x163 0x1c8 0x3d2 0x150 0x1c4 0x3d3 0x149 0x1be 0x3d5 0x12f 0x1b5 0x3d6 0x11a 0x1ad 0x3d8 0xff 0x1a7 0x3d9 0xf2 0x1a6 0x3da 0xe5 0x19e 0x3db 0xd3 0x19b 0x3dc 0xc7 0x195 0x3dd 0xbf 0x18d 0x3de 0xab 0x187 0x3df 0x8c 0x183 0x3e0 0x7e 0x180 0x3e1 0x6b 0x174 0x3e3 0x54 0x16c 0x3e5 0x36 0x164 0x3e6 0x1a 0x164 0x3e6 0xd 0x0 0x3e8 0x0>; }; diff --git a/arch/arm64/boot/dts/exynos/exynos9810-starlte_kor_26.dts b/arch/arm64/boot/dts/exynos/exynos9810-starlte_kor_26.dts index d74ec97cea7e..89d2742f323e 100644 --- a/arch/arm64/boot/dts/exynos/exynos9810-starlte_kor_26.dts +++ b/arch/arm64/boot/dts/exynos/exynos9810-starlte_kor_26.dts @@ -47,6 +47,7 @@ }; tima_region@0xB8000000 { + status = "disabled"; compatible = "removed-dma-pool"; reg = <0x0 0xb8000000 0x200000>; linux,phandle = <0x1a4>; @@ -156,6 +157,7 @@ }; rkp_region@0xAF800000 { + status = "disabled"; compatible = "removed-dma-pool"; reg = <0x0 0xaf800000 0x2000000>; linux,phandle = <0x1a5>; @@ -4438,156 +4440,442 @@ input_booster { status = "okay"; compatible = "input_booster"; - #address-cells = <0x1>; - #size-cells = <0x0>; + max_resource_count = [37 00]; + #address-cells = <1>; + #size-cells = <0>; + ib_release_values = "0,0,0,0,0,0,0"; booster_key@1 { - input_booster,label = "KEY"; - input_booster,type = <0x0>; - input_booster,levels = <0x1>; - input_booster,cpu_freqs = <0x104410>; - input_booster,hmp_boost = <0x1>; - input_booster,kfc_freqs = <0x0>; - input_booster,mif_freqs = <0x0>; - input_booster,int_freqs = <0x0>; - input_booster,dma_latency = <0x0>; - input_booster,head_times = <0x1f4>; - input_booster,tail_times = <0x1f4>; - input_booster,phase_times = <0x0>; + input_booster,label = "key"; + input_booster,type = <0>; /* BOOSTER_DEVICE_KEY */ + /* Time table */ + input_booster,head_time = <500>; + input_booster,tail_time = <500>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 0>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <0 0>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; }; + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 0>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 0>; + }; + }; + }; booster_key@2 { - input_booster,label = "TOUCHKEY"; - input_booster,type = <0x1>; - input_booster,levels = <0x1>; - input_booster,cpu_freqs = <0x104410>; - input_booster,hmp_boost = <0x1>; - input_booster,kfc_freqs = <0x0>; - input_booster,mif_freqs = <0x0>; - input_booster,int_freqs = <0x0>; - input_booster,dma_latency = <0x0>; - input_booster,head_times = <0x0>; - input_booster,tail_times = <0xc8>; - input_booster,phase_times = <0x0>; + input_booster,label = "touchkey"; + input_booster,type = <1>; /* BOOSTER_DEVICE_TOUCHKEY */ + /* Time table */ + input_booster,head_time = <0>; + input_booster,tail_time = <200>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 0>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <0 0>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; }; + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 0>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 0>; + }; + }; + }; booster_key@3 { - input_booster,label = "TOUCH"; - input_booster,type = <0x2>; - input_booster,levels = <0x1 0x2 0x3>; - input_booster,cpu_freqs = <0x104410 0x104410 0xd1790>; - input_booster,hmp_boost = <0x1 0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0 0x0>; - input_booster,int_freqs = <0x0 0x0 0x0>; - input_booster,dma_latency = <0x0 0x0 0x0>; - input_booster,head_times = <0x82 0x82 0x0>; - input_booster,tail_times = <0x0 0x0 0x1f4>; - input_booster,phase_times = <0x0 0x0 0x0>; - }; - - booster_key@4 { - input_booster,label = "MULTITOUCH"; - input_booster,type = <0x3>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0xd1790>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x3e8 0x0>; - input_booster,tail_times = <0x0 0x1f4>; - input_booster,phase_times = <0x0 0x0>; + input_booster,label = "touch"; + input_booster,type = <2>; /* BOOSTER_DEVICE_TOUCH */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <500>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; }; + booster_key@4 { // Input Booster + + input_booster,label = "multitouch"; + input_booster,type = <3>; /* BOOSTER_DEVICE_MULTITOUCH */ + /* Time table */ + input_booster,head_time = <1000>; + input_booster,tail_time = <500>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@5 { - input_booster,label = "KEYBOARD"; - input_booster,type = <0x4>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0x104410>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x82 0x82>; - input_booster,tail_times = <0x0 0x0>; - input_booster,phase_times = <0x0 0x0>; + input_booster,label = "keyboard"; + input_booster,type = <4>; /* BOOSTER_DEVICE_KEYBOARD */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <0>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; }; + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@6 { - input_booster,label = "MOUSE"; - input_booster,type = <0x5>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0xd1790>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x82 0x0>; - input_booster,tail_times = <0x0 0x1f4>; - input_booster,phase_times = <0x0 0x0>; + input_booster,label = "mouse"; + input_booster,type = <5>; /* BOOSTER_DEVICE_MOUSE */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <500>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; }; + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@7 { - input_booster,label = "MOUSE WHEEL"; - input_booster,type = <0x6>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0x0>; - input_booster,hmp_boost = <0x1 0x0>; - input_booster,kfc_freqs = <0xcb200 0x0>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x82 0x0>; - input_booster,tail_times = <0x0 0x0>; - input_booster,phase_times = <0x0 0x0>; + input_booster,label = "mouse_wheel"; + input_booster,type = <6>; /* BOOSTER_DEVICE_MOUSE */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <0>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; }; + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@8 { - input_booster,label = "PEN HOVER"; - input_booster,type = <0x7>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x104410 0xd1790>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,mif_freqs = <0x0 0x0>; - input_booster,int_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0x82 0x0>; - input_booster,tail_times = <0x0 0x1f4>; - input_booster,phase_times = <0x0 0x0>; + input_booster,label = "pen_hover"; + input_booster,type = <7>; /* BOOSTER_DEVICE_MOUSE */ + /* Time table */ + input_booster,head_time = <130>; + input_booster,tail_time = <500>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1066000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; }; + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@9 { - input_booster,label = "PEN"; - input_booster,type = <0x8>; - input_booster,levels = <0x1 0x2>; - input_booster,cpu_freqs = <0x11da50 0xd1790>; - input_booster,hmp_boost = <0x1 0x1>; - input_booster,kfc_freqs = <0xcb200 0xcb200>; - input_booster,bimc_freqs = <0x0 0x0>; - input_booster,dma_latency = <0x0 0x0>; - input_booster,head_times = <0xc8 0x0>; - input_booster,tail_times = <0x0 0x258>; + input_booster,label = "pen"; + input_booster,type = <8>; /* BOOSTER_DEVICE_MOUSE */ + /* Time table */ + input_booster,head_time = <200>; + input_booster,tail_time = <600>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1170000 858000>; + }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <832000 832000>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; }; + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; booster_key@10 { - input_booster,label = "KEY_TWO"; - input_booster,type = <0x9>; - input_booster,levels = <0x1>; - input_booster,cpu_freqs = <0x166a48>; - input_booster,hmp_boost = <0x1>; - input_booster,kfc_freqs = <0x101148>; - input_booster,mif_freqs = <0x0>; - input_booster,int_freqs = <0x0>; - input_booster,dma_latency = <0x0>; - input_booster,head_times = <0x2bc>; - input_booster,tail_times = <0x2bc>; - input_booster,phase_times = <0x0>; + input_booster,label = "key_two"; + input_booster,type = <9>; /* BOOSTER_DEVICE_KEY */ + /* Time table */ + input_booster,head_time = <700>; + input_booster,tail_time = <700>; + + /* Frequency table */ + /* for level : Head, Tail */ + inputbooster,resource { + compatible = "resource"; + + resource@1 { + resource,label = "cluster1"; + resource,value = <1469000 0>; }; + + resource@2 { + resource,label = "cluster0"; + resource,value = <1053000 0>; + }; + + resource@3 { + resource,label = "mif"; + resource,value = <0 0>; + }; + + resource@4 { + resource,label = "int"; + resource,value = <0 0>; + }; + + resource@5 { + resource,label = "hmp"; + resource,value = <1 1>; + }; + + resource@6 { + resource,label = "ucc"; + resource,value = <1 1>; + }; + }; + }; // Input Booster - + /* If you need to add new key type, add it this position */ }; exynos-snapshot { @@ -5134,7 +5422,7 @@ gpu_dynamic_abb = <0x0>; gpu_early_clk_gating = <0x0>; gpu_dvs = <0x0>; - gpu_inter_frame_pm = <0x1>; + gpu_inter_frame_pm = <0x0>; gpu_perf_gathering = <0x0>; gpu_runtime_pm_delay_time = <0x32>; gpu_dvfs_polling_time = <0x1e>; @@ -8450,6 +8738,7 @@ ip_ver = <0x11>; clock_rate = <0x17d78400>; min_rate = <0x186a0>; + enc_ts_delta = <0x1 0x211208>; num_qos_steps = <0x8>; max_qos_steps = <0x9>; max_mb = <0x489732>; @@ -10433,7 +10722,7 @@ boost_table = <0x14 0xd1790 0xf 0xeadd0 0x5 0x133dc8 0x0>; up_rate_limit_table = <0x5>; down_rate_limit_table = <0x5>; - upscale_ratio_table = <0x32 0xeadd0 0x41>; + upscale_ratio_table = <0x32 0xeadd0 0x41 0x166a48 0x50>; }; }; @@ -11197,58 +11486,78 @@ default_int = <0x1a1f8>; default_hpg = <0x1>; front_preview_int_cam = <0x9c400>; - front_preview_cam = <0x927c0>; + front_preview_cam = <0x9c400>; front_preview_mif = <0xf78f0>; front_preview_int = <0x1a1f8>; front_preview_hpg = <0x1>; front_preview_full_int_cam = <0xa1220>; - front_preview_full_cam = <0x927c0>; + front_preview_full_cam = <0x9c400>; front_preview_full_mif = <0xf78f0>; front_preview_full_int = <0x1a1f8>; front_preview_full_hpg = <0x1>; front_capture_int_cam = <0xa1220>; - front_capture_cam = <0x927c0>; - front_capture_mif = <0xf78f0>; + front_capture_cam = <0x9c400>; + front_capture_mif = <0x1fefc8>; front_capture_int = <0x1a1f8>; front_capture_hpg = <0x1>; front_video_int_cam = <0x9c400>; - front_video_cam = <0x927c0>; + front_video_cam = <0x9c400>; front_video_mif = <0xf78f0>; front_video_int = <0x1a1f8>; front_video_hpg = <0x1>; front_video_whd_int_cam = <0x9c400>; - front_video_whd_cam = <0x927c0>; + front_video_whd_cam = <0x9c400>; front_video_whd_mif = <0xf78f0>; front_video_whd_int = <0x1a1f8>; front_video_whd_hpg = <0x1>; + front_video_uhd_int_cam = <0xa1220>; + front_video_uhd_cam = <0x9c400>; + front_video_uhd_mif = <0xf78f0>; + front_video_uhd_int = <0x1a1f8>; + front_video_uhd_hpg = <0x1>; + front_video_fhd_60fps_int_cam = <0xa1220>; + front_video_fhd_60fps_cam = <0x9c400>; + front_video_fhd_60fps_mif = <0xf78f0>; + front_video_fhd_60fps_int = <0x1a1f8>; + front_video_fhd_60fps_hpg = <0x1>; front_video_capture_int_cam = <0xa1220>; - front_video_capture_cam = <0x94ed0>; - front_video_capture_mif = <0xf78f0>; + front_video_capture_cam = <0x9c400>; + front_video_capture_mif = <0x1fefc8>; front_video_capture_int = <0x1a1f8>; front_video_capture_hpg = <0x1>; front_video_whd_capture_int_cam = <0xa1220>; - front_video_whd_capture_cam = <0x927c0>; - front_video_whd_capture_mif = <0xf78f0>; + front_video_whd_capture_cam = <0x9c400>; + front_video_whd_capture_mif = <0x1fefc8>; front_video_whd_capture_int = <0x1a1f8>; front_video_whd_capture_hpg = <0x1>; + front_video_uhd_capture_int_cam = <0xa1220>; + front_video_uhd_capture_cam = <0x9c400>; + front_video_uhd_capture_mif = <0x1fefc8>; + front_video_uhd_capture_int = <0x1a1f8>; + front_video_uhd_capture_hpg = <0x1>; + front_video_fhd_60fps_capture_int_cam = <0xa1220>; + front_video_fhd_60fps_capture_cam = <0x9c400>; + front_video_fhd_60fps_capture_mif = <0x1fefc8>; + front_video_fhd_60fps_capture_int = <0x1a1f8>; + front_video_fhd_60fps_capture_hpg = <0x1>; front_vt1_int_cam = <0x9c400>; - front_vt1_cam = <0x927c0>; + front_vt1_cam = <0x9c400>; front_vt1_mif = <0xf78f0>; front_vt1_int = <0x1a1f8>; front_vt1_hpg = <0x1>; front_vt2_int_cam = <0x9c400>; - front_vt2_cam = <0x927c0>; + front_vt2_cam = <0x9c400>; front_vt2_mif = <0xf78f0>; front_vt2_int = <0x1a1f8>; front_vt2_hpg = <0x1>; front_vt4_int_cam = <0x9c400>; - front_vt4_cam = <0x927c0>; + front_vt4_cam = <0x9c400>; front_vt4_mif = <0xf78f0>; front_vt4_int = <0x1a1f8>; front_vt4_hpg = <0x1>; front_preview_high_speed_fps_int_cam = <0xa1220>; - front_preview_high_speed_fps_cam = <0x94ed0>; - front_preview_high_speed_fps_mif = <0xf78f0>; + front_preview_high_speed_fps_cam = <0x9c400>; + front_preview_high_speed_fps_mif = <0x14a140>; front_preview_high_speed_fps_int = <0x1a1f8>; front_preview_high_speed_fps_hpg = <0x1>; rear2_preview_fhd_int_cam = <0x9c400>; @@ -11258,22 +11567,22 @@ rear2_preview_fhd_hpg = <0x1>; rear2_capture_int_cam = <0xa1220>; rear2_capture_cam = <0x9c400>; - rear2_capture_mif = <0xf78f0>; + rear2_capture_mif = <0x1fefc8>; rear2_capture_int = <0x1a1f8>; rear2_capture_hpg = <0x1>; - rear2_video_fhd_int_cam = <0x9c400>; + rear2_video_fhd_int_cam = <0xa1220>; rear2_video_fhd_cam = <0x9c400>; rear2_video_fhd_mif = <0xf78f0>; rear2_video_fhd_int = <0x1a1f8>; rear2_video_fhd_hpg = <0x1>; rear2_video_fhd_capture_int_cam = <0xa1220>; rear2_video_fhd_capture_cam = <0x9c400>; - rear2_video_fhd_capture_mif = <0xf78f0>; + rear2_video_fhd_capture_mif = <0x1fefc8>; rear2_video_fhd_capture_int = <0x1a1f8>; rear2_video_fhd_capture_hpg = <0x1>; rear_preview_fhd_int_cam = <0x9c400>; rear_preview_fhd_cam = <0x9c400>; - rear_preview_fhd_mif = <0xf78f0>; + rear_preview_fhd_mif = <0x177bb8>; rear_preview_fhd_int = <0x1a1f8>; rear_preview_fhd_hpg = <0x1>; rear_preview_whd_int_cam = <0x9c400>; @@ -11283,7 +11592,7 @@ rear_preview_whd_hpg = <0x1>; rear_preview_uhd_int_cam = <0xa1220>; rear_preview_uhd_cam = <0x9c400>; - rear_preview_uhd_mif = <0x177bb8>; + rear_preview_uhd_mif = <0x14a140>; rear_preview_uhd_int = <0x1a1f8>; rear_preview_uhd_hpg = <0x1>; rear_preview_uhd_60fps_int_cam = <0xa6040>; @@ -11293,27 +11602,27 @@ rear_preview_uhd_60fps_hpg = <0x1>; rear_preview_full_int_cam = <0xa1220>; rear_preview_full_cam = <0x9c400>; - rear_preview_full_mif = <0x14a140>; + rear_preview_full_mif = <0xf78f0>; rear_preview_full_int = <0x1a1f8>; rear_preview_full_hpg = <0x1>; rear_capture_int_cam = <0xa1220>; rear_capture_cam = <0x9c400>; - rear_capture_mif = <0xf78f0>; + rear_capture_mif = <0x1fefc8>; rear_capture_int = <0x1a1f8>; rear_capture_hpg = <0x1>; - rear_video_fhd_int_cam = <0x9c400>; + rear_video_fhd_int_cam = <0xa1220>; rear_video_fhd_cam = <0x9c400>; rear_video_fhd_mif = <0xf78f0>; rear_video_fhd_int = <0x1a1f8>; rear_video_fhd_hpg = <0x1>; - rear_video_whd_int_cam = <0x9c400>; + rear_video_whd_int_cam = <0xa1220>; rear_video_whd_cam = <0x9c400>; rear_video_whd_mif = <0xf78f0>; rear_video_whd_int = <0x1a1f8>; rear_video_whd_hpg = <0x1>; rear_video_uhd_int_cam = <0xa1220>; rear_video_uhd_cam = <0x9c400>; - rear_video_uhd_mif = <0x177bb8>; + rear_video_uhd_mif = <0x14a140>; rear_video_uhd_int = <0x1a1f8>; rear_video_uhd_hpg = <0x1>; rear_video_uhd_60fps_int_cam = <0xa6040>; @@ -11323,57 +11632,57 @@ rear_video_uhd_60fps_hpg = <0x1>; rear_video_fhd_capture_int_cam = <0xa1220>; rear_video_fhd_capture_cam = <0x9c400>; - rear_video_fhd_capture_mif = <0xf78f0>; + rear_video_fhd_capture_mif = <0x1fefc8>; rear_video_fhd_capture_int = <0x1a1f8>; rear_video_fhd_capture_hpg = <0x1>; rear_video_whd_capture_int_cam = <0xa1220>; rear_video_whd_capture_cam = <0x9c400>; - rear_video_whd_capture_mif = <0xf78f0>; + rear_video_whd_capture_mif = <0x1fefc8>; rear_video_whd_capture_int = <0x1a1f8>; rear_video_whd_capture_hpg = <0x1>; rear_video_uhd_capture_int_cam = <0xa1220>; rear_video_uhd_capture_cam = <0x9c400>; - rear_video_uhd_capture_mif = <0x177bb8>; + rear_video_uhd_capture_mif = <0x1fefc8>; rear_video_uhd_capture_int = <0x1a1f8>; rear_video_uhd_capture_hpg = <0x1>; - dual_preview_int_cam = <0x9c400>; + dual_preview_int_cam = <0xa1220>; dual_preview_cam = <0x9c400>; - dual_preview_mif = <0xf78f0>; + dual_preview_mif = <0x177bb8>; dual_preview_int = <0x1a1f8>; dual_preview_hpg = <0x1>; dual_capture_int_cam = <0xa1220>; dual_capture_cam = <0x9c400>; - dual_capture_mif = <0xf78f0>; + dual_capture_mif = <0x1fefc8>; dual_capture_int = <0x1a1f8>; dual_capture_hpg = <0x1>; - dual_video_fhd_int_cam = <0x9c400>; + dual_video_fhd_int_cam = <0xa1220>; dual_video_fhd_cam = <0x9c400>; - dual_video_fhd_mif = <0xf78f0>; + dual_video_fhd_mif = <0x14a140>; dual_video_fhd_int = <0x1a1f8>; dual_video_fhd_hpg = <0x1>; dual_video_fhd_capture_int_cam = <0xa1220>; dual_video_fhd_capture_cam = <0x9c400>; - dual_video_fhd_capture_mif = <0xf78f0>; + dual_video_fhd_capture_mif = <0x1fefc8>; dual_video_fhd_capture_int = <0x1a1f8>; dual_video_fhd_capture_hpg = <0x1>; dual_video_uhd_int_cam = <0xa1220>; dual_video_uhd_cam = <0x9c400>; - dual_video_uhd_mif = <0x177bb8>; + dual_video_uhd_mif = <0x14a140>; dual_video_uhd_int = <0x1a1f8>; dual_video_uhd_hpg = <0x1>; dual_video_uhd_capture_int_cam = <0xa1220>; dual_video_uhd_capture_cam = <0x9c400>; - dual_video_uhd_capture_mif = <0x177bb8>; + dual_video_uhd_capture_mif = <0x1fefc8>; dual_video_uhd_capture_int = <0x1a1f8>; dual_video_uhd_capture_hpg = <0x1>; dual_sync_preview_int_cam = <0xa1220>; dual_sync_preview_cam = <0x9c400>; - dual_sync_preview_mif = <0x177bb8>; + dual_sync_preview_mif = <0x1b5fd0>; dual_sync_preview_int = <0x1a1f8>; dual_sync_preview_hpg = <0x1>; dual_sync_capture_int_cam = <0xa3930>; dual_sync_capture_cam = <0x9c400>; - dual_sync_capture_mif = <0x1b5fd0>; + dual_sync_capture_mif = <0x1fefc8>; dual_sync_capture_int = <0x1a1f8>; dual_sync_capture_hpg = <0x1>; dual_sync_preview_whd_int_cam = <0xa6040>; @@ -11382,32 +11691,32 @@ dual_sync_preview_whd_int = <0x1a1f8>; dual_sync_preview_whd_hpg = <0x1>; dual_sync_whd_capture_int_cam = <0xa6040>; - dual_sync_whd_capture_cam = <0xa6040>; - dual_sync_whd_capture_mif = <0x1b5fd0>; + dual_sync_whd_capture_cam = <0x9c400>; + dual_sync_whd_capture_mif = <0x1fefc8>; dual_sync_whd_capture_int = <0x1a1f8>; dual_sync_whd_capture_hpg = <0x1>; - dual_sync_video_fhd_int_cam = <0xa1220>; - dual_sync_video_fhd_cam = <0xa6040>; + dual_sync_video_fhd_int_cam = <0xa6040>; + dual_sync_video_fhd_cam = <0x9c400>; dual_sync_video_fhd_mif = <0x177bb8>; dual_sync_video_fhd_int = <0x1a1f8>; dual_sync_video_fhd_hpg = <0x1>; - dual_sync_video_fhd_capture_int_cam = <0xa3930>; - dual_sync_video_fhd_capture_cam = <0xa6040>; - dual_sync_video_fhd_capture_mif = <0x1b5fd0>; + dual_sync_video_fhd_capture_int_cam = <0xa6040>; + dual_sync_video_fhd_capture_cam = <0x9c400>; + dual_sync_video_fhd_capture_mif = <0x1fefc8>; dual_sync_video_fhd_capture_int = <0x1a1f8>; dual_sync_video_fhd_capture_hpg = <0x1>; dual_sync_video_uhd_int_cam = <0xa6040>; - dual_sync_video_uhd_cam = <0xa6040>; + dual_sync_video_uhd_cam = <0x9c400>; dual_sync_video_uhd_mif = <0x177bb8>; dual_sync_video_uhd_int = <0x1a1f8>; dual_sync_video_uhd_hpg = <0x1>; dual_sync_video_uhd_capture_int_cam = <0xa6040>; - dual_sync_video_uhd_capture_cam = <0xa6040>; - dual_sync_video_uhd_capture_mif = <0x1b5fd0>; + dual_sync_video_uhd_capture_cam = <0x9c400>; + dual_sync_video_uhd_capture_mif = <0x1fefc8>; dual_sync_video_uhd_capture_int = <0x1a1f8>; dual_sync_video_uhd_capture_hpg = <0x1>; secure_front_int_cam = <0x9c400>; - secure_front_cam = <0x94ed0>; + secure_front_cam = <0x9c400>; secure_front_mif = <0xf78f0>; secure_front_int = <0x1a1f8>; secure_front_hpg = <0x1>; @@ -11418,7 +11727,7 @@ pip_preview_hpg = <0x1>; pip_capture_int_cam = <0xa3930>; pip_capture_cam = <0x9c400>; - pip_capture_mif = <0xf78f0>; + pip_capture_mif = <0x1fefc8>; pip_capture_int = <0x1a1f8>; pip_capture_hpg = <0x1>; pip_video_int_cam = <0xa1220>; @@ -11428,7 +11737,7 @@ pip_video_hpg = <0x1>; pip_video_capture_int_cam = <0xa3930>; pip_video_capture_cam = <0x9c400>; - pip_video_capture_mif = <0xf78f0>; + pip_video_capture_mif = <0x1fefc8>; pip_video_capture_int = <0x1a1f8>; pip_video_capture_hpg = <0x1>; preview_high_speed_fps_int_cam = <0xa1220>; @@ -11436,9 +11745,9 @@ preview_high_speed_fps_mif = <0xf78f0>; preview_high_speed_fps_int = <0x1a1f8>; preview_high_speed_fps_hpg = <0x1>; - video_high_speed_60fps_int_cam = <0xa1220>; + video_high_speed_60fps_int_cam = <0xa6040>; video_high_speed_60fps_cam = <0x9c400>; - video_high_speed_60fps_mif = <0x14a140>; + video_high_speed_60fps_mif = <0x177bb8>; video_high_speed_60fps_int = <0x1a1f8>; video_high_speed_60fps_hpg = <0x1>; video_high_speed_120fps_int_cam = <0xa1220>; @@ -11448,7 +11757,7 @@ video_high_speed_120fps_hpg = <0x1>; video_high_speed_240fps_int_cam = <0xa6040>; video_high_speed_240fps_cam = <0x9c400>; - video_high_speed_240fps_mif = <0x1b5fd0>; + video_high_speed_240fps_mif = <0x1fefc8>; video_high_speed_240fps_int = <0x1a1f8>; video_high_speed_240fps_hpg = <0x1>; video_high_speed_dualfps_int_cam = <0xa6040>; @@ -11456,9 +11765,9 @@ video_high_speed_dualfps_mif = <0x1b5fd0>; video_high_speed_dualfps_int = <0x1a1f8>; video_high_speed_dualfps_hpg = <0x6>; - video_high_speed_60fps_capture_int_cam = <0xa1220>; + video_high_speed_60fps_capture_int_cam = <0xa6040>; video_high_speed_60fps_capture_cam = <0x9c400>; - video_high_speed_60fps_capture_mif = <0x14a140>; + video_high_speed_60fps_capture_mif = <0x1fefc8>; video_high_speed_60fps_capture_int = <0x1a1f8>; video_high_speed_60fps_capture_hpg = <0x1>; ext_front_int_cam = <0xa8750>; @@ -11467,7 +11776,7 @@ ext_front_int = <0x825f0>; ext_front_hpg = <0x1>; ext_secure_int_cam = <0x9c400>; - ext_secure_cam = <0x94ed0>; + ext_secure_cam = <0x9c400>; ext_secure_mif = <0xf78f0>; ext_secure_int = <0x1a1f8>; ext_secure_hpg = <0x1>; @@ -12679,13 +12988,14 @@ status = "okay"; haptic,max_timeout = <0x2710>; haptic,multi_frequency = <0x7>; - haptic,duty = <0x8583 0xb204 0x8e6a 0x6acf 0x76ad 0x90f4 0x90f4>; - haptic,period = <0xbebc 0xfe50 0xcb73 0x9896 0xa98a 0x9896 0x9896>; + haptic,duty = <0x9ede 0xbebc 0x9896 0x7270 0x7f27 0x90f4 0x90f4>; + haptic,period = <0xbf68 0xfe50 0xcb73 0x9896 0xa98a 0x9896 0x9896>; haptic,reg2 = <0x82>; haptic,pwm_id = <0x1>; haptic,regulator_name = "VDD_MOTOR_3P3"; - haptic,normal_ratio = <0x46>; + haptic,normal_ratio = <0x4b>; haptic,overdrive_ratio = <0x5f>; + haptic,type = "LINEAR_1040"; }; sound { @@ -13483,74 +13793,264 @@ }; }; - argos { - compatible = "samsung,argos"; - #address-cells = <0x1>; + argos { + compatible = "samsung,argos"; + #address-cells = <0x1>; - boot_device@1 { - net_boost,label = "IPC"; - net_boost,node = "rmnet0 rmnet1 rmnet2 rmnet3 rmnet4 rmnet5 rmnet6 rmnet7 umts_dm0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x64 0x0 0x0 0x101148 0x0 0xce4c8 0x0 0x0 0x0 0x0 0x96 0x0 0x0 0x130b00 0x0 0xf78f0 0x0 0x0 0x0 0x0 0xc8 0x1d5ba0 0x0 0x19c990 0x0 0x1b5fd0 0x0 0x0 0x0 0x0>; - }; + boot_device@1 { + net_boost,label = "UFS"; + net_boost,node = [00]; + net_boost,sysnode = "/sys/class/scsi_host/host0/transferred_cnt"; - boot_device@2 { - net_boost,label = "CLAT"; - net_boost,node = "clat clat4 v4-rmnet0 v4-rmnet1 v4-rmnet2 v4-rmnet3 v4-rmnet4 v4-rmnet5 v4-rmnet6 v4-rmnet7"; - net_boost,table_size = <0x5>; - net_boost,table = <0x1 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x64 0x104410 0x0 0x0 0x0 0xf78f0 0x0 0x0 0x0 0x0 0xc8 0x110b48 0x0 0x0 0x0 0x1b5fd0 0x0 0x0 0x0 0x0 0x12c 0x133dc8 0x0 0x0 0x0 0x1b5fd0 0x0 0x0 0x0 0x0 0x190 0x166a48 0x0 0x0 0x0 0x1b5fd0 0x0 0x0 0x0 0x0>; - }; + net_boost,table { - boot_device@3 { - net_boost,label = "UFS"; - net_boost,node = [00]; - net_boost,sysnode = "/sys/class/scsi_host/host0/transferred_cnt"; - net_boost,table_size = <0x2>; - net_boost,table = <0x70 0x0 0x0 0x163780 0x0 0x14a140 0x0 0x0 0x0 0x0 0x320 0x104410 0x0 0x163780 0x0 0x177bb8 0x0 0x0 0x0 0x1>; - }; + level_0 { + threshold = <0x190>; + lit_min = <0x163780>; + mif = <0x14a140>; + }; - boot_device@4 { - net_boost,label = "WIFI"; - net_boost,node = "wlan0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x96 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0xc8 0x0 0x0 0x0 0x0 0x0 0x0 0x1 0x1 0x1 0x12c 0x0 0x0 0x0 0x0 0x0 0x0 0x1 0x1 0x1>; - }; + level_1 { + threshold = <0x320>; + big_min = <0x104410>; + lit_min = <0x163780>; + mif = <0x177bb8>; + hmp_boost = "enable"; + }; + }; + }; - boot_device@5 { - net_boost,label = "WIFI TX"; - net_boost,node = "wlan0"; - net_boost,table_size = <0x4>; - net_boost,table = <0x3c 0x166a48 0x0 0x163780 0x0 0x0 0x0 0x0 0x0 0x0 0x96 0x19c990 0x0 0x19c990 0x0 0x0 0x0 0x0 0x0 0x0 0xc8 0x1d5ba0 0x0 0x1b5fd0 0x0 0x14a140 0x61a80 0x1 0x1 0x1 0x12c 0x1e8c50 0x0 0x1b5fd0 0x0 0x1b5fd0 0x825f0 0x1 0x1 0x1>; - }; + boot_device@2 { + net_boost,label = "WIFI TX"; + net_boost,node = "wlan0"; + net_boost,slowdown; - boot_device@6 { - net_boost,label = "WIFI RX"; - net_boost,node = "wlan0"; - net_boost,table_size = <0x4>; - net_boost,table = <0x64 0x11da50 0x0 0x101148 0x0 0x0 0x0 0x0 0x0 0x0 0x96 0x166a48 0x0 0x130b00 0x0 0x0 0x0 0x0 0x0 0x0 0xc8 0x19c990 0x0 0x130b00 0x0 0xce4c8 0x61a80 0x1 0x1 0x1 0x12c 0x1d5ba0 0x0 0x163780 0x0 0x14a140 0x825f0 0x1 0x1 0x1>; - }; + net_boost,table { - boot_device@7 { - net_boost,label = "P2P"; - net_boost,node = "p2p-wlan0-0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x1e 0x1174c0 0x0 0x11da50 0x0 0x0 0x0 0x0 0x0 0x0 0x5a 0x1c9080 0x0 0x183350 0x0 0x0 0x3e418 0x0 0x0 0x0 0x12c 0x1fbd00 0x0 0x183350 0x0 0x854d0 0x3e418 0x1 0x1 0x1>; - }; + level_0 { + threshold = <0x3c>; + big_min = <0x166a48>; + lit_min = <0x163780>; + }; - boot_device@8 { - net_boost,label = "NAN"; - net_boost,node = "aware_data0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x1e 0x1174c0 0x0 0x11da50 0x0 0x0 0x0 0x0 0x0 0x0 0x5a 0x1c9080 0x0 0x183350 0x0 0x0 0x3e418 0x0 0x0 0x0 0x12c 0x1fbd00 0x0 0x183350 0x0 0x854d0 0x3e418 0x1 0x1 0x1>; - }; + level_1 { + threshold = <0x96>; + big_min = <0x19c990>; + lit_min = <0x19c990>; + }; - boot_device@9 { - net_boost,label = "USB"; - net_boost,node = "rndis0"; - net_boost,table_size = <0x3>; - net_boost,table = <0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x1 0x0 0xc8 0x0 0x0 0x163780 0x0 0x177fa0 0x0 0x0 0x1 0x0 0x12c 0x0 0x0 0x19c990 0x0 0x1b5fd0 0x825f0 0x0 0x1 0x0>; - }; - }; + level_2 { + threshold = <0xc8>; + big_min = <0x1d5ba0>; + lit_min = <0x1b5fd0>; + mif = <0x14a140>; + int = <0x61a80>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + + level_3 { + threshold = <0x12c>; + big_min = <0x1e8c50>; + lit_min = <0x1b5fd0>; + mif = <0x1b5fd0>; + int = <0x825f0>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + }; + }; + + boot_device@3 { + net_boost,label = "WIFI RX"; + net_boost,node = "wlan0"; + net_boost,slowdown; + + net_boost,table { + + level_0 { + threshold = <0x64>; + big_min = <0x11da50>; + lit_min = <0x101148>; + }; + + level_1 { + threshold = <0x96>; + big_min = <0x166a48>; + lit_min = <0x130b00>; + }; + + level_2 { + threshold = <0xc8>; + big_min = <0x19c990>; + lit_min = <0x130b00>; + mif = <0xce4c8>; + int = <0x61a80>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + + level_3 { + threshold = <0x12c>; + big_min = <0x1d5ba0>; + lit_min = <0x163780>; + mif = <0x14a140>; + int = <0x825f0>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + }; + }; + + boot_device@4 { + net_boost,label = "P2P"; + net_boost,node = "p2p-wlan0-0"; + net_boost,slowdown; + + net_boost,table { + + level_0 { + threshold = <0x3c>; + big_min = <0x166a48>; + lit_min = <0x163780>; + }; + + level_1 { + threshold = <0x96>; + big_min = <0x19c990>; + lit_min = <0x19c990>; + }; + + level_2 { + threshold = <0xc8>; + big_min = <0x1d5ba0>; + lit_min = <0x1b5fd0>; + mif = <0x14a140>; + int = <0x61a80>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + + level_3 { + threshold = <0x12c>; + big_min = <0x1e8c50>; + lit_min = <0x1b5fd0>; + mif = <0x1b5fd0>; + int = <0x825f0>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + }; + }; + + boot_device@5 { + net_boost,label = "NAN"; + net_boost,node = "aware_data0"; + net_boost,slowdown; + + net_boost,table { + + level_0 { + threshold = <0x3c>; + big_min = <0x166a48>; + lit_min = <0x163780>; + }; + + level_1 { + threshold = <0x96>; + big_min = <0x19c990>; + lit_min = <0x19c990>; + }; + + level_2 { + threshold = <0xc8>; + big_min = <0x1d5ba0>; + lit_min = <0x1b5fd0>; + mif = <0x14a140>; + int = <0x61a80>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + + level_3 { + threshold = <0x12c>; + big_min = <0x1e8c50>; + lit_min = <0x1b5fd0>; + mif = <0x1b5fd0>; + int = <0x825f0>; + task_affinity = "enable"; + irq_affinity = "enable"; + hmp_boost = "enable"; + }; + }; + }; + + boot_device@6 { + net_boost,label = "IPC"; + net_boost,node = "rmnet0 rmnet1 rmnet2 rmnet3 rmnet4 rmnet5 rmnet6 rmnet7 umts_dm0"; + + net_boost,table { + + level_0 { + threshold = <0x64>; + lit_min = <0x101148>; + mif = <0xce4c8>; + }; + + level_1 { + threshold = <0x96>; + lit_min = <0x130b00>; + mif = <0xf78f0>; + }; + + level_2 { + threshold = <0xc8>; + big_min = <0x1d5ba0>; + lit_min = <0x19c990>; + mif = <0x1b5fd0>; + }; + }; + }; + + boot_device@7 { + net_boost,label = "CLAT"; + net_boost,node = "clat clat4 v4-rmnet0 v4-rmnet1 v4-rmnet2 v4-rmnet3 v4-rmnet4 v4-rmnet5 v4-rmnet6 v4-rmnet7"; + + net_boost,table { + + level_0 { + threshold = <0x64>; + big_min = <0x104410>; + mif = <0xf78f0>; + }; + + level_1 { + threshold = <0xc8>; + big_min = <0x110b48>; + mif = <0x1b5fd0>; + }; + + level_2 { + threshold = <0x12c>; + big_min = <0x133dc8>; + mif = <0x1b5fd0>; + }; + + level_3 { + threshold = <0x190>; + big_min = <0x166a48>; + mif = <0x1b5fd0>; + }; + }; + }; + }; dev_ril_bridge_pdata { compatible = "samsung,dev_ril_bridge_pdata"; @@ -13773,7 +14273,7 @@ fuelgauge,capacity = <0xb97>; fuelgauge,discharge_temp_threshold = <0x258>; fuelgauge,discharge_volt_threshold = <0x1068>; - fuelgauge,ttf_capacity = <0xbb8>; + fuelgauge,ttf_capacity = <0xa8c>; fuelgauge,cv_data = <0x9b8 0x33d 0x711 0x969 0x340 0x704 0x917 0x345 0x6e9 0x8e0 0x348 0x6cf 0x886 0x34e 0x6b9 0x838 0x352 0x69a 0x7f6 0x356 0x686 0x79e 0x35b 0x668 0x770 0x35d 0x656 0x72e 0x361 0x63a 0x705 0x363 0x628 0x6d5 0x366 0x618 0x6a7 0x369 0x5fb 0x693 0x369 0x5f5 0x683 0x36b 0x5eb 0x67c 0x36b 0x5e8 0x675 0x36c 0x5e5 0x64f 0x36e 0x5de 0x62c 0x370 0x5cb 0x611 0x371 0x5b7 0x608 0x372 0x5b2 0x5f0 0x373 0x5ab 0x5c5 0x376 0x590 0x597 0x378 0x581 0x574 0x37b 0x567 0x543 0x37e 0x551 0x513 0x380 0x534 0x4f3 0x382 0x523 0x4cf 0x386 0x508 0x4b2 0x388 0x4ef 0x47c 0x38a 0x4db 0x455 0x38d 0x4bd 0x42b 0x38f 0x4a1 0x407 0x392 0x484 0x3f5 0x393 0x474 0x3cf 0x395 0x457 0x3c1 0x397 0x43c 0x399 0x399 0x428 0x37c 0x39b 0x40e 0x377 0x39b 0x3fb 0x35f 0x39d 0x3ec 0x341 0x39f 0x3d0 0x328 0x3a1 0x3b2 0x313 0x3a2 0x396 0x30c 0x3a3 0x388 0x2fc 0x3a4 0x37f 0x2e8 0x3a6 0x360 0x2da 0x3a7 0x34e 0x2cb 0x3a8 0x33c 0x2b5 0x3a9 0x320 0x2a9 0x3aa 0x30f 0x29a 0x3ac 0x2f0 0x28b 0x3ad 0x2df 0x280 0x3ae 0x2c8 0x274 0x3b1 0x2b9 0x26e 0x3b2 0x2a7 0x26a 0x3b3 0x298 0x258 0x3b6 0x286 0x254 0x3b7 0x273 0x24d 0x3b9 0x266 0x248 0x3b9 0x259 0x240 0x3bc 0x23c 0x241 0x3bd 0x229 0x232 0x3be 0x217 0x1ff 0x3c8 0x1fa 0x1f9 0x3c9 0x1e7 0x1ed 0x3cb 0x1d0 0x1ec 0x3cc 0x1b3 0x1e4 0x3cd 0x1a1 0x1e0 0x3cf 0x18e 0x1da 0x3d0 0x17c 0x1d6 0x3d1 0x16c 0x1ce 0x3d1 0x163 0x1c8 0x3d2 0x150 0x1c4 0x3d3 0x149 0x1be 0x3d5 0x12f 0x1b5 0x3d6 0x11a 0x1ad 0x3d8 0xff 0x1a7 0x3d9 0xf2 0x1a6 0x3da 0xe5 0x19e 0x3db 0xd3 0x19b 0x3dc 0xc7 0x195 0x3dd 0xbf 0x18d 0x3de 0xab 0x187 0x3df 0x8c 0x183 0x3e0 0x7e 0x180 0x3e1 0x6b 0x174 0x3e3 0x54 0x16c 0x3e5 0x36 0x164 0x3e6 0x1a 0x164 0x3e6 0xd 0x0 0x3e8 0x0>; }; diff --git a/arch/arm64/configs/crownlte_defconfig b/arch/arm64/configs/crownlte_defconfig new file mode 100644 index 000000000000..69a4ab7fb21b --- /dev/null +++ b/arch/arm64/configs/crownlte_defconfig @@ -0,0 +1,29 @@ +# +# +# crownlte Defconfig +# +# +CONFIG_VMPRESSURE_LEVEL_MED=70 +# CONFIG_MUIC_UNIVERSAL is not set +# CONFIG_INPUT_TOUCHSCREEN_TCLM is not set +CONFIG_INPUT_TOUCHSCREEN_TCLMV2=y +# CONFIG_TOUCHSCREEN_SEC_TS is not set +CONFIG_TOUCHSCREEN_SEC_TS_Y771=y +CONFIG_INPUT_WACOM=y +CONFIG_EPEN_WACOM_W9018=y +# CONFIG_MFD_MAX77865 is not set +CONFIG_CAMERA_CIS_3M3_OBJ=y +# CONFIG_OIS_USE_RUMBA_S4 is not set +# CONFIG_CAMERA_STAR is not set +# CONFIG_CAMERA_STAR2 is not set +CONFIG_CAMERA_CROWN=y +CONFIG_OIS_USE_RUMBA_S6=y +CONFIG_SUPPORT_DIM_FLASH=y +CONFIG_SELF_MOVE_3PX=y +# CONFIG_FUELGAUGE_MAX77865 is not set +# CONFIG_CHARGER_MAX77865 is not set +CONFIG_WIRELESS_FIRMWARE_65=y +CONFIG_SENSORS_SSP_AK09918=y +CONFIG_SENSORS_SSP_LIGHT_MAX_GAIN_2BYTE=y +# CONFIG_SENSORS_SSP_STAR is not set +CONFIG_SENSORS_SSP_CROWN=y diff --git a/arch/arm64/configs/ds_defconfig b/arch/arm64/configs/ds_defconfig new file mode 100644 index 000000000000..c572797cc9c7 --- /dev/null +++ b/arch/arm64/configs/ds_defconfig @@ -0,0 +1,32 @@ +# +# +# DS Defconfig +# +# +CONFIG_BOEFFLA_WL_BLOCKER=y +CONFIG_CUSTOM_FORCETOUCH=y +CONFIG_SEC_INPUT_BOOSTER=y +CONFIG_ARGOS=y +CONFIG_ARGOS_CLUSTER_NUM=2 +CONFIG_PROC_AVC=y +CONFIG_PAGE_BOOST=y +CONFIG_PAGE_BOOST_RECORDING=y +CONFIG_PROCESS_RECLAIM=y +CONFIG_INCREASE_MAXIMUM_SWAPPINESS=y +# +# SEC Memory Management Options +# +CONFIG_SEC_MM=y +# +# MoroSound +# +CONFIG_MORO_SOUND=y +# +# Flar2 Wake Gestures +# +CONFIG_WAKE_GESTURES=y +# +# Wireguard +# +CONFIG_WIREGUARD=y +# CONFIG_WIREGUARD_DEBUG is not set \ No newline at end of file diff --git a/arch/arm64/configs/eur_defconfig b/arch/arm64/configs/eur_defconfig new file mode 100644 index 000000000000..212150a4a123 --- /dev/null +++ b/arch/arm64/configs/eur_defconfig @@ -0,0 +1,10 @@ +# +# +# International Defconfig +# +# +CONFIG_WLAN_REGION_CODE=100 +# CONFIG_MEDIA_RADIO_SUPPORT is not set +# CONFIG_TDMB is not set +# CONFIG_TDMB_NOTIFIER is not set + diff --git a/arch/arm64/configs/exynos9810-crownlte_defconfig b/arch/arm64/configs/exynos9810-crownlte_defconfig deleted file mode 100644 index ee602cb01788..000000000000 --- a/arch/arm64/configs/exynos9810-crownlte_defconfig +++ /dev/null @@ -1,5953 +0,0 @@ -# -# Automatically generated file; DO NOT EDIT. -# Linux/arm64 4.9.118 Kernel Configuration -# -CONFIG_ARM64=y -CONFIG_64BIT=y -CONFIG_ARCH_PHYS_ADDR_T_64BIT=y -CONFIG_MMU=y -CONFIG_DEBUG_RODATA=y -CONFIG_ARM64_PAGE_SHIFT=12 -CONFIG_ARM64_CONT_SHIFT=4 -CONFIG_ARCH_MMAP_RND_BITS_MIN=18 -CONFIG_ARCH_MMAP_RND_BITS_MAX=24 -CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11 -CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16 -CONFIG_STACKTRACE_SUPPORT=y -CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000 -CONFIG_LOCKDEP_SUPPORT=y -CONFIG_TRACE_IRQFLAGS_SUPPORT=y -CONFIG_RWSEM_XCHGADD_ALGORITHM=y -CONFIG_GENERIC_BUG=y -CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y -CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CSUM=y -CONFIG_GENERIC_CALIBRATE_DELAY=y -# CONFIG_ZONE_DMA is not set -CONFIG_HAVE_GENERIC_RCU_GUP=y -CONFIG_ARCH_DMA_ADDR_T_64BIT=y -CONFIG_NEED_DMA_MAP_STATE=y -CONFIG_NEED_SG_DMA_LENGTH=y -CONFIG_SMP=y -CONFIG_SWIOTLB=y -CONFIG_IOMMU_HELPER=y -CONFIG_KERNEL_MODE_NEON=y -CONFIG_FIX_EARLYCON_MEM=y -CONFIG_PGTABLE_LEVELS=3 -CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" -CONFIG_IRQ_WORK=y -CONFIG_BUILDTIME_EXTABLE_SORT=y -CONFIG_THREAD_INFO_IN_TASK=y - -# -# General setup -# -CONFIG_INIT_ENV_ARG_LIMIT=32 -CONFIG_CROSS_COMPILE="" -# CONFIG_COMPILE_TEST is not set -CONFIG_LOCALVERSION="" -CONFIG_LOCALVERSION_AUTO=y -CONFIG_DEFAULT_HOSTNAME="(none)" -CONFIG_SWAP=y -# CONFIG_SYSVIPC is not set -CONFIG_POSIX_MQUEUE=y -CONFIG_POSIX_MQUEUE_SYSCTL=y -CONFIG_CROSS_MEMORY_ATTACH=y -# CONFIG_FHANDLE is not set -# CONFIG_USELIB is not set -CONFIG_AUDIT=y -CONFIG_HAVE_ARCH_AUDITSYSCALL=y -CONFIG_AUDITSYSCALL=y -CONFIG_AUDIT_WATCH=y -CONFIG_AUDIT_TREE=y - -# -# IRQ subsystem -# -CONFIG_GENERIC_IRQ_PROBE=y -CONFIG_GENERIC_IRQ_SHOW=y -CONFIG_GENERIC_IRQ_SHOW_LEVEL=y -CONFIG_GENERIC_IRQ_MIGRATION=y -CONFIG_HARDIRQS_SW_RESEND=y -CONFIG_GENERIC_IRQ_CHIP=y -CONFIG_IRQ_DOMAIN=y -CONFIG_IRQ_DOMAIN_HIERARCHY=y -CONFIG_GENERIC_MSI_IRQ=y -CONFIG_GENERIC_MSI_IRQ_DOMAIN=y -CONFIG_HANDLE_DOMAIN_IRQ=y -# CONFIG_IRQ_DOMAIN_DEBUG is not set -CONFIG_IRQ_FORCED_THREADING=y -CONFIG_SPARSE_IRQ=y -CONFIG_ARCH_CLOCKSOURCE_DATA=y -CONFIG_GENERIC_TIME_VSYSCALL=y -CONFIG_GENERIC_CLOCKEVENTS=y -CONFIG_ARCH_HAS_TICK_BROADCAST=y -CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y - -# -# Timers subsystem -# -CONFIG_TICK_ONESHOT=y -CONFIG_NO_HZ_COMMON=y -# CONFIG_HZ_PERIODIC is not set -CONFIG_NO_HZ_IDLE=y -# CONFIG_NO_HZ_FULL is not set -CONFIG_NO_HZ=y -CONFIG_HIGH_RES_TIMERS=y - -# -# CPU/Task time and stats accounting -# -CONFIG_TICK_CPU_ACCOUNTING=y -# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set -# CONFIG_IRQ_TIME_ACCOUNTING is not set -# CONFIG_SCHED_WALT is not set -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_TASKSTATS=y -CONFIG_TASK_DELAY_ACCT=y -CONFIG_TASK_XACCT=y -CONFIG_TASK_IO_ACCOUNTING=y - -# -# RCU Subsystem -# -CONFIG_PREEMPT_RCU=y -# CONFIG_RCU_EXPERT is not set -CONFIG_SRCU=y -# CONFIG_TASKS_RCU is not set -CONFIG_RCU_STALL_COMMON=y -# CONFIG_TREE_RCU_TRACE is not set -# CONFIG_RCU_EXPEDITE_BOOT is not set -CONFIG_BUILD_BIN2C=y -CONFIG_IKCONFIG=y -CONFIG_IKCONFIG_PROC=y -CONFIG_LOG_BUF_SHIFT=19 -CONFIG_LOG_CPU_MAX_BUF_SHIFT=12 -CONFIG_GENERIC_SCHED_CLOCK=y -CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y -CONFIG_CGROUPS=y -CONFIG_CGROUP_DEBUG=y -CONFIG_CGROUP_FREEZER=y -CONFIG_CGROUP_PIDS=y -CONFIG_CGROUP_DEVICE=y -CONFIG_CPUSETS=y -CONFIG_PROC_PID_CPUSET=y -CONFIG_CGROUP_CPUACCT=y -CONFIG_CGROUP_SCHEDTUNE=y -CONFIG_PAGE_COUNTER=y -CONFIG_MEMCG=y -CONFIG_MEMCG_SWAP=y -CONFIG_MEMCG_SWAP_ENABLED=y -CONFIG_MEMCG_FORCE_USE_VM_SWAPPINESS=y -# CONFIG_BLK_CGROUP is not set -CONFIG_CGROUP_SCHED=y -CONFIG_FAIR_GROUP_SCHED=y -CONFIG_CFS_BANDWIDTH=y -CONFIG_RT_GROUP_SCHED=y -# CONFIG_CGROUP_PERF is not set -CONFIG_CGROUP_BPF=y -CONFIG_SOCK_CGROUP_DATA=y -# CONFIG_CHECKPOINT_RESTORE is not set -CONFIG_NAMESPACES=y -CONFIG_UTS_NS=y -CONFIG_IPC_NS=y -CONFIG_USER_NS=y -CONFIG_PID_NS=y -CONFIG_NET_NS=y -# CONFIG_SCHED_AUTOGROUP is not set -CONFIG_SCHED_TUNE=y -CONFIG_SCHED_EHMP=y -CONFIG_DEFAULT_USE_ENERGY_AWARE=y -CONFIG_SCHED_USE_FLUID_RT=y -# CONFIG_SYSFS_DEPRECATED is not set -# CONFIG_RELAY is not set -CONFIG_BLK_DEV_INITRD=y -CONFIG_INITRAMFS_SOURCE="" -CONFIG_RD_GZIP=y -CONFIG_RD_BZIP2=y -CONFIG_RD_LZMA=y -CONFIG_RD_XZ=y -CONFIG_RD_LZO=y -CONFIG_RD_LZ4=y -# CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE is not set -CONFIG_CC_OPTIMIZE_FOR_SIZE=y -CONFIG_SYSCTL=y -CONFIG_ANON_INODES=y -CONFIG_HAVE_UID16=y -CONFIG_SYSCTL_EXCEPTION_TRACE=y -CONFIG_BPF=y -CONFIG_EXPERT=y -CONFIG_UID16=y -CONFIG_MULTIUSER=y -# CONFIG_SGETMASK_SYSCALL is not set -CONFIG_SYSFS_SYSCALL=y -# CONFIG_SYSCTL_SYSCALL is not set -CONFIG_KALLSYMS=y -# CONFIG_KALLSYMS_ALL is not set -# CONFIG_KALLSYMS_ABSOLUTE_PERCPU is not set -CONFIG_KALLSYMS_BASE_RELATIVE=y -CONFIG_PRINTK=y -CONFIG_BUG=y -CONFIG_ELF_CORE=y -CONFIG_BASE_FULL=y -CONFIG_FUTEX=y -CONFIG_EPOLL=y -CONFIG_SIGNALFD=y -CONFIG_TIMERFD=y -CONFIG_EVENTFD=y -CONFIG_BPF_SYSCALL=y -CONFIG_SHMEM=y -CONFIG_AIO=y -CONFIG_ADVISE_SYSCALLS=y -# CONFIG_USERFAULTFD is not set -CONFIG_PCI_QUIRKS=y -CONFIG_MEMBARRIER=y -CONFIG_EMBEDDED=y -CONFIG_HAVE_PERF_EVENTS=y - -# -# Kernel Performance Events And Counters -# -CONFIG_PERF_EVENTS=y -# CONFIG_DEBUG_PERF_USE_VMALLOC is not set -CONFIG_VM_EVENT_COUNTERS=y -CONFIG_SLUB_DEBUG=y -# CONFIG_PTRACK_DEBUG is not set -# CONFIG_COMPAT_BRK is not set -# CONFIG_SLAB is not set -CONFIG_SLUB=y -# CONFIG_SLOB is not set -# CONFIG_SLAB_FREELIST_RANDOM is not set -CONFIG_SLUB_CPU_PARTIAL=y -# CONFIG_SYSTEM_DATA_VERIFICATION is not set -CONFIG_DEFERRED_INITCALLS=y -CONFIG_PROFILING=y -CONFIG_TRACEPOINTS=y -# CONFIG_KPROBES is not set -# CONFIG_JUMP_LABEL is not set -# CONFIG_UPROBES is not set -# CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set -CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y -CONFIG_HAVE_KPROBES=y -CONFIG_HAVE_KRETPROBES=y -CONFIG_HAVE_ARCH_TRACEHOOK=y -CONFIG_HAVE_DMA_CONTIGUOUS=y -CONFIG_GENERIC_SMP_IDLE_THREAD=y -CONFIG_GENERIC_IDLE_POLL_SETUP=y -CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y -CONFIG_HAVE_CLK=y -CONFIG_HAVE_DMA_API_DEBUG=y -CONFIG_HAVE_HW_BREAKPOINT=y -CONFIG_HAVE_PERF_REGS=y -CONFIG_HAVE_PERF_USER_STACK_DUMP=y -CONFIG_HAVE_ARCH_JUMP_LABEL=y -CONFIG_HAVE_RCU_TABLE_FREE=y -CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y -CONFIG_HAVE_CMPXCHG_LOCAL=y -CONFIG_HAVE_CMPXCHG_DOUBLE=y -CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y -CONFIG_HAVE_ARCH_SECCOMP_FILTER=y -CONFIG_SECCOMP_FILTER=y -CONFIG_HAVE_GCC_PLUGINS=y -# CONFIG_GCC_PLUGINS is not set -CONFIG_HAVE_CC_STACKPROTECTOR=y -CONFIG_CC_STACKPROTECTOR=y -# CONFIG_CC_STACKPROTECTOR_NONE is not set -# CONFIG_CC_STACKPROTECTOR_REGULAR is not set -CONFIG_CC_STACKPROTECTOR_STRONG=y -# CONFIG_LTO is not set -CONFIG_ARCH_SUPPORTS_LTO_CLANG=y -CONFIG_LTO_NONE=y -# CONFIG_LTO_CLANG is not set -CONFIG_HAVE_CONTEXT_TRACKING=y -CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y -CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y -CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y -CONFIG_HAVE_ARCH_HUGE_VMAP=y -CONFIG_HAVE_MOD_ARCH_SPECIFIC=y -CONFIG_MODULES_USE_ELF_RELA=y -CONFIG_ARCH_HAS_ELF_RANDOMIZE=y -CONFIG_HAVE_ARCH_MMAP_RND_BITS=y -CONFIG_ARCH_MMAP_RND_BITS=18 -CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y -CONFIG_ARCH_MMAP_RND_COMPAT_BITS=11 -# CONFIG_HAVE_ARCH_HASH is not set -# CONFIG_ISA_BUS_API is not set -CONFIG_CLONE_BACKWARDS=y -CONFIG_OLD_SIGSUSPEND3=y -CONFIG_COMPAT_OLD_SIGACTION=y -# CONFIG_CPU_NO_EFFICIENT_FFS is not set -# CONFIG_HAVE_ARCH_VMAP_STACK is not set - -# -# GCOV-based kernel profiling -# -# CONFIG_GCOV_KERNEL is not set -CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y -CONFIG_HAVE_GENERIC_DMA_COHERENT=y -CONFIG_SLABINFO=y -CONFIG_RT_MUTEXES=y -CONFIG_BASE_SMALL=0 -CONFIG_MODULES=y -# CONFIG_MODULE_FORCE_LOAD is not set -CONFIG_MODULE_UNLOAD=y -# CONFIG_MODULE_FORCE_UNLOAD is not set -CONFIG_MODVERSIONS=y -# CONFIG_MODULE_SRCVERSION_ALL is not set -# CONFIG_MODULE_SIG is not set -# CONFIG_MODULE_COMPRESS is not set -# CONFIG_TRIM_UNUSED_KSYMS is not set -CONFIG_MODULES_TREE_LOOKUP=y -CONFIG_BLOCK=y -# CONFIG_BLK_DEV_BSG is not set -# CONFIG_BLK_DEV_BSGLIB is not set -# CONFIG_BLK_DEV_INTEGRITY is not set -# CONFIG_BLK_CMDLINE_PARSER is not set -CONFIG_JOURNAL_DATA_TAG=y -# CONFIG_JOURNAL_DATA_TAG_DEBUG is not set - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_AIX_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_BSD_DISKLABEL is not set -# CONFIG_MINIX_SUBPARTITION is not set -# CONFIG_SOLARIS_X86_PARTITION is not set -# CONFIG_UNIXWARE_DISKLABEL is not set -# CONFIG_LDM_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_KARMA_PARTITION is not set -CONFIG_EFI_PARTITION=y -# CONFIG_SYSV68_PARTITION is not set -# CONFIG_CMDLINE_PARTITION is not set -CONFIG_BLOCK_COMPAT=y -CONFIG_BLK_MQ_PCI=y -CONFIG_BLOCK_SUPPORT_STLOG=y - -# -# IO Schedulers -# -CONFIG_IOSCHED_NOOP=y -# CONFIG_IOSCHED_DEADLINE is not set -CONFIG_IOSCHED_CFQ=y -CONFIG_DEFAULT_CFQ=y -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="cfq" -CONFIG_ASN1=y -CONFIG_UNINLINE_SPIN_UNLOCK=y -CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y -CONFIG_MUTEX_SPIN_ON_OWNER=y -CONFIG_RWSEM_SPIN_ON_OWNER=y -CONFIG_LOCK_SPIN_ON_OWNER=y -CONFIG_FREEZER=y - -# -# Platform selection -# -# CONFIG_ARCH_SUNXI is not set -# CONFIG_ARCH_ALPINE is not set -# CONFIG_ARCH_BCM2835 is not set -# CONFIG_ARCH_BCM_IPROC is not set -# CONFIG_ARCH_BERLIN is not set -# CONFIG_ARCH_BRCMSTB is not set -CONFIG_ARCH_EXYNOS=y -# CONFIG_ARCH_LAYERSCAPE is not set -# CONFIG_ARCH_LG1K is not set -# CONFIG_ARCH_HISI is not set -# CONFIG_ARCH_MEDIATEK is not set -# CONFIG_ARCH_MESON is not set -# CONFIG_ARCH_MVEBU is not set -# CONFIG_ARCH_QCOM is not set -# CONFIG_ARCH_ROCKCHIP is not set -# CONFIG_ARCH_SEATTLE is not set -# CONFIG_ARCH_RENESAS is not set -# CONFIG_ARCH_STRATIX10 is not set -# CONFIG_ARCH_TEGRA is not set -# CONFIG_ARCH_SPRD is not set -# CONFIG_ARCH_THUNDER is not set -# CONFIG_ARCH_UNIPHIER is not set -# CONFIG_ARCH_VEXPRESS is not set -# CONFIG_ARCH_VULCAN is not set -# CONFIG_ARCH_XGENE is not set -# CONFIG_ARCH_ZX is not set -# CONFIG_ARCH_ZYNQMP is not set - -# -# Samsung Exynos -# -# CONFIG_SOC_EXYNOS8895 is not set -# CONFIG_ARCH_EXYNOS8 is not set -CONFIG_SOC_EXYNOS9810=y -CONFIG_SOC_EXYNOS9810_EVT1=y -# CONFIG_MACH_EXYNOS9810_NONE is not set -CONFIG_MACH_EXYNOS9810_CROWNLTE_EUR_OPEN=y -# CONFIG_MACH_EXYNOS9810_STARLTE_EUR_OPEN is not set -# CONFIG_MACH_EXYNOS9810_STAR2LTE_EUR_OPEN is not set -CONFIG_ARCH_EXYNOS9=y -CONFIG_EXYNOS_DTBTOOL=y -CONFIG_EXYNOS_DTBH_PLATFORM_CODE=0x50a6 -CONFIG_EXYNOS_DTBH_SUBTYPE_CODE=0x217584da -CONFIG_EXYNOS_DTBH_PAGE_SIZE=2048 -# CONFIG_ZONE_MOVABLE is not set - -# -# Bus support -# -CONFIG_PCI=y -CONFIG_PCI_DOMAINS=y -CONFIG_PCI_DOMAINS_GENERIC=y -CONFIG_PCI_SYSCALL=y -CONFIG_PCIEPORTBUS=y -CONFIG_PCIEAER=y -# CONFIG_PCIE_ECRC is not set -# CONFIG_PCIEAER_INJECT is not set -CONFIG_PCIEASPM=y -# CONFIG_PCIEASPM_DEBUG is not set -CONFIG_PCIEASPM_DEFAULT=y -# CONFIG_PCIEASPM_POWERSAVE is not set -# CONFIG_PCIEASPM_PERFORMANCE is not set -CONFIG_PCIE_PME=y -# CONFIG_PCIE_DPC is not set -# CONFIG_PCIE_PTM is not set -CONFIG_PCI_BUS_ADDR_T_64BIT=y -CONFIG_PCI_MSI=y -CONFIG_PCI_MSI_IRQ_DOMAIN=y -# CONFIG_PCI_DEBUG is not set -# CONFIG_PCI_REALLOC_ENABLE_AUTO is not set -# CONFIG_PCI_STUB is not set -# CONFIG_PCI_IOV is not set -# CONFIG_PCI_PRI is not set -# CONFIG_PCI_PASID is not set -# CONFIG_HOTPLUG_PCI is not set - -# -# PCI host controller drivers -# -# CONFIG_PCIE_DW_PLAT is not set -CONFIG_PCIE_DW=y -CONFIG_PCI_EXYNOS=y -CONFIG_EXYNOS_PCIE_IOMMU=y -CONFIG_PCIE_IOMMU_HISTORY_LOG=y -# CONFIG_SEC_PANIC_PCIE_ERR is not set -# CONFIG_PCI_HOST_GENERIC is not set -# CONFIG_PCI_HISI is not set -# CONFIG_PCI_HOST_THUNDER_PEM is not set -# CONFIG_PCI_HOST_THUNDER_ECAM is not set - -# -# Kernel Features -# - -# -# ARM errata workarounds via the alternatives framework -# -CONFIG_ARM64_ERRATUM_826319=y -CONFIG_ARM64_ERRATUM_827319=y -CONFIG_ARM64_ERRATUM_824069=y -CONFIG_ARM64_ERRATUM_819472=y -CONFIG_ARM64_ERRATUM_832075=y -CONFIG_ARM64_ERRATUM_845719=y -CONFIG_ARM64_ERRATUM_843419=y -CONFIG_ARM64_ERRATUM_814818=y -CONFIG_ARM64_ERRATUM_1024718=y -CONFIG_CAVIUM_ERRATUM_22375=y -CONFIG_CAVIUM_ERRATUM_23154=y -CONFIG_CAVIUM_ERRATUM_27456=y -CONFIG_QCOM_QDF2400_ERRATUM_0065=y -CONFIG_ARM64_4K_PAGES=y -# CONFIG_ARM64_16K_PAGES is not set -# CONFIG_ARM64_64K_PAGES is not set -CONFIG_ARM64_VA_BITS_39=y -# CONFIG_ARM64_VA_BITS_48 is not set -CONFIG_ARM64_VA_BITS=39 -# CONFIG_CPU_BIG_ENDIAN is not set -CONFIG_SCHED_MC=y -# CONFIG_SCHED_SMT is not set -# CONFIG_DISABLE_CPU_SCHED_DOMAIN_BALANCE is not set -CONFIG_NR_CPUS=8 -CONFIG_HOTPLUG_CPU=y -# CONFIG_NUMA is not set -# CONFIG_PREEMPT_NONE is not set -# CONFIG_PREEMPT_VOLUNTARY is not set -CONFIG_PREEMPT=y -CONFIG_PREEMPT_COUNT=y -# CONFIG_HZ_100 is not set -CONFIG_HZ_250=y -# CONFIG_HZ_300 is not set -# CONFIG_HZ_1000 is not set -CONFIG_HZ=250 -CONFIG_SCHED_HRTICK=y -CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y -CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y -CONFIG_ARCH_SPARSEMEM_ENABLE=y -CONFIG_ARCH_SPARSEMEM_DEFAULT=y -CONFIG_ARCH_SELECT_MEMORY_MODEL=y -CONFIG_HAVE_ARCH_PFN_VALID=y -CONFIG_HW_PERF_EVENTS=y -CONFIG_SYS_SUPPORTS_HUGETLBFS=y -CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y -CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y -CONFIG_SELECT_MEMORY_MODEL=y -CONFIG_SPARSEMEM_MANUAL=y -CONFIG_SPARSEMEM=y -CONFIG_HAVE_MEMORY_PRESENT=y -CONFIG_SPARSEMEM_EXTREME=y -CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y -CONFIG_SPARSEMEM_VMEMMAP=y -CONFIG_HAVE_MEMBLOCK=y -CONFIG_NO_BOOTMEM=y -CONFIG_MEMORY_ISOLATION=y -# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set -CONFIG_SPLIT_PTLOCK_CPUS=4 -CONFIG_COMPACTION=y -CONFIG_MIGRATION=y -CONFIG_PHYS_ADDR_T_64BIT=y -CONFIG_KSM=y -CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 -# CONFIG_TRANSPARENT_HUGEPAGE is not set -# CONFIG_CLEANCACHE is not set -CONFIG_FRONTSWAP=y -CONFIG_CMA=y -# CONFIG_CMA_DEBUG is not set -# CONFIG_CMA_DEBUGFS is not set -CONFIG_CMA_AREAS=7 -CONFIG_ZSWAP=y -CONFIG_ZSWAP_MIGRATION_SUPPORT=y -# CONFIG_ZSWAP_ENABLE_WRITEBACK is not set -# CONFIG_ZSWAP_SAME_PAGE_SHARING is not set -CONFIG_ZPOOL=y -# CONFIG_ZBUD is not set -# CONFIG_Z3FOLD is not set -CONFIG_ZSMALLOC=y -CONFIG_PGTABLE_MAPPING=y -CONFIG_ZSMALLOC_STAT=y -CONFIG_DIRECT_RECLAIM_FILE_PAGES_ONLY=y -CONFIG_INCREASE_MAXIMUM_SWAPPINESS=y -CONFIG_FIX_INACTIVE_RATIO=y -# CONFIG_SWAP_ENABLE_READAHEAD is not set -CONFIG_GENERIC_EARLY_IOREMAP=y -CONFIG_HPA=y -# CONFIG_IDLE_PAGE_TRACKING is not set -CONFIG_FRAME_VECTOR=y -CONFIG_LARGE_DIRTY_BUFFER=y -CONFIG_MAX_DIRTY_THRESH_PAGES=25600 -CONFIG_BALANCE_ANON_FILE_RECLAIM=y -CONFIG_MMAP_READAROUND_LIMIT=0 -CONFIG_RBIN=y -CONFIG_VMPRESSURE_LEVEL_MED=70 -CONFIG_SECCOMP=y -# CONFIG_PARAVIRT is not set -# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set -# CONFIG_KEXEC is not set -# CONFIG_XEN is not set -CONFIG_FORCE_MAX_ZONEORDER=11 -CONFIG_UNMAP_KERNEL_AT_EL0=y -CONFIG_HARDEN_BRANCH_PREDICTOR=y -CONFIG_ARM64_SSBD=y -CONFIG_ARMV8_DEPRECATED=y -CONFIG_SWP_EMULATION=y -CONFIG_CP15_BARRIER_EMULATION=y -CONFIG_SETEND_EMULATION=y -CONFIG_ARM64_SW_TTBR0_PAN=y - -# -# JOP Attack Prevention -# -CONFIG_RKP_CFP_JOPP=y -CONFIG_RKP_CFP_JOPP_MAGIC=0x00be7bad - -# -# ARMv8.1 architectural features -# -# CONFIG_ARM64_HW_AFDBM is not set -# CONFIG_ARM64_PAN is not set -# CONFIG_ARM64_LSE_ATOMICS is not set -# CONFIG_ARM64_VHE is not set - -# -# ARMv8.2 architectural features -# -# CONFIG_ARM64_UAO is not set -CONFIG_ARM64_MODULE_CMODEL_LARGE=y -CONFIG_ARM64_MODULE_PLTS=y -# CONFIG_RELOCATABLE_KERNEL is not set -CONFIG_RELOCATABLE=y -CONFIG_RANDOMIZE_BASE=y -CONFIG_RANDOMIZE_MODULE_REGION_FULL=y - -# -# Boot options -# -CONFIG_CMDLINE="" -# CONFIG_EFI is not set -# CONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE is not set -CONFIG_LOD_SEC=y -CONFIG_TIMA=y -CONFIG_TIMA_LKMAUTH=y -CONFIG_TIMA_LKM_BLOCK=y -# CONFIG_TIMA_LKMAUTH_CODE_PROT is not set -CONFIG_UH=y -CONFIG_UH_DEBUG=y -CONFIG_UH_RKP=y -CONFIG_UH_RKP_8G=y -# CONFIG_UH_INFORM is not set -# CONFIG_UH_RKP_FIMC_TYPE is not set -CONFIG_RKP_KDP=y -CONFIG_RKP_NS_PROT=y -CONFIG_RKP_DMAP_PROT=y - -# -# Userspace binary formats -# -CONFIG_BINFMT_ELF=y -CONFIG_COMPAT_BINFMT_ELF=y -CONFIG_ELFCORE=y -# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set -CONFIG_BINFMT_SCRIPT=y -# CONFIG_HAVE_AOUT is not set -# CONFIG_BINFMT_MISC is not set -CONFIG_COREDUMP=y -CONFIG_COMPAT=y - -# -# Power management options -# -CONFIG_SUSPEND=y -CONFIG_SUSPEND_FREEZER=y -# CONFIG_SUSPEND_SKIP_SYNC is not set -CONFIG_WAKELOCK=y -# CONFIG_HIBERNATION is not set -CONFIG_PM_SLEEP=y -CONFIG_PM_SLEEP_SMP=y -CONFIG_PM_AUTOSLEEP=y -CONFIG_PM_WAKELOCKS=y -CONFIG_PM_WAKELOCKS_LIMIT=0 -# CONFIG_PM_WAKELOCKS_GC is not set -CONFIG_PM=y -CONFIG_PM_DEBUG=y -# CONFIG_PM_ADVANCED_DEBUG is not set -# CONFIG_PM_TEST_SUSPEND is not set -CONFIG_PM_SLEEP_DEBUG=y -# CONFIG_DPM_WATCHDOG is not set -CONFIG_PM_OPP=y -CONFIG_PM_CLK=y -CONFIG_PM_GENERIC_DOMAINS=y -# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set -CONFIG_PM_GENERIC_DOMAINS_SLEEP=y -CONFIG_PM_GENERIC_DOMAINS_OF=y -CONFIG_CPU_PM=y -CONFIG_FOTA_LIMIT=y -CONFIG_ARCH_HIBERNATION_POSSIBLE=y -CONFIG_ARCH_SUSPEND_POSSIBLE=y - -# -# CPU Power Management -# - -# -# CPU Idle -# -CONFIG_CPU_IDLE=y -CONFIG_CPU_IDLE_MULTIPLE_DRIVERS=y -# CONFIG_CPU_IDLE_GOV_LADDER is not set -CONFIG_CPU_IDLE_GOV_MENU=y -CONFIG_DT_IDLE_STATES=y - -# -# ARM CPU Idle Drivers -# -# CONFIG_ARM_CPUIDLE is not set -CONFIG_ARM64_EXYNOS_CPUIDLE=y -# CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set - -# -# CPU Frequency scaling -# -CONFIG_CPU_FREQ=y -CONFIG_CPU_FREQ_GOV_ATTR_SET=y -CONFIG_CPU_FREQ_STAT=y -# CONFIG_CPU_FREQ_STAT_DETAILS is not set -CONFIG_CPU_FREQ_TIMES=y -# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set -# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set -# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set -# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set -# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set -# CONFIG_CPU_FREQ_DEFAULT_GOV_SCHED is not set -# CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE is not set -CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y -# CONFIG_CPU_FREQ_GOV_PERFORMANCE is not set -# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set -# CONFIG_CPU_FREQ_GOV_USERSPACE is not set -# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set -# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set -# CONFIG_CPU_FREQ_GOV_SCHED is not set -# CONFIG_CPU_FREQ_GOV_INTERACTIVE is not set -CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y -CONFIG_FREQVAR_TUNE=y - -# -# CPU frequency scaling drivers -# -# CONFIG_CPUFREQ_DT is not set -# CONFIG_ARM_BIG_LITTLE_CPUFREQ is not set -# CONFIG_ARM_KIRKWOOD_CPUFREQ is not set -CONFIG_ARM_EXYNOS_ACME=y -CONFIG_ARM_EXYNOS_UFC=y -CONFIG_NET=y -CONFIG_NET_INGRESS=y -CONFIG_NET_EGRESS=y - -# -# Networking options -# -CONFIG_PACKET=y -# CONFIG_PACKET_DIAG is not set -CONFIG_UNIX=y -# CONFIG_UNIX_DIAG is not set -CONFIG_XFRM=y -CONFIG_XFRM_ALGO=y -CONFIG_XFRM_USER=y -CONFIG_XFRM_INTERFACE=y -# CONFIG_XFRM_SUB_POLICY is not set -# CONFIG_XFRM_MIGRATE is not set -CONFIG_XFRM_STATISTICS=y -CONFIG_XFRM_IPCOMP=y -CONFIG_NET_KEY=y -# CONFIG_NET_KEY_MIGRATE is not set -CONFIG_INET=y -CONFIG_IP_MULTICAST=y -CONFIG_IP_ADVANCED_ROUTER=y -# CONFIG_IP_FIB_TRIE_STATS is not set -CONFIG_IP_MULTIPLE_TABLES=y -# CONFIG_IP_ROUTE_MULTIPATH is not set -# CONFIG_IP_ROUTE_VERBOSE is not set -CONFIG_IP_PNP=y -CONFIG_IP_PNP_DHCP=y -CONFIG_IP_PNP_BOOTP=y -CONFIG_IP_PNP_RARP=y -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE_DEMUX is not set -CONFIG_NET_IP_TUNNEL=y -# CONFIG_IP_MROUTE is not set -# CONFIG_SYN_COOKIES is not set -CONFIG_NET_IPVTI=y -# CONFIG_NET_UDP_TUNNEL is not set -# CONFIG_NET_FOU is not set -# CONFIG_NET_FOU_IP_TUNNELS is not set -# CONFIG_INET_AH is not set -CONFIG_INET_ESP=y -# CONFIG_INET_IPCOMP is not set -# CONFIG_INET_XFRM_TUNNEL is not set -CONFIG_INET_TUNNEL=y -CONFIG_INET_XFRM_MODE_TRANSPORT=y -CONFIG_INET_XFRM_MODE_TUNNEL=y -# CONFIG_INET_XFRM_MODE_BEET is not set -CONFIG_INET_DIAG=y -CONFIG_INET_TCP_DIAG=y -CONFIG_INET_UDP_DIAG=y -CONFIG_INET_DIAG_DESTROY=y -CONFIG_TCP_CONG_ADVANCED=y -CONFIG_TCP_CONG_BIC=y -CONFIG_TCP_CONG_CUBIC=y -CONFIG_TCP_CONG_WESTWOOD=m -CONFIG_TCP_CONG_HTCP=m -# CONFIG_TCP_CONG_HSTCP is not set -# CONFIG_TCP_CONG_HYBLA is not set -# CONFIG_TCP_CONG_VEGAS is not set -# CONFIG_TCP_CONG_NV is not set -# CONFIG_TCP_CONG_SCALABLE is not set -# CONFIG_TCP_CONG_LP is not set -# CONFIG_TCP_CONG_VENO is not set -# CONFIG_TCP_CONG_YEAH is not set -# CONFIG_TCP_CONG_ILLINOIS is not set -# CONFIG_TCP_CONG_DCTCP is not set -# CONFIG_TCP_CONG_CDG is not set -# CONFIG_TCP_CONG_BBR is not set -CONFIG_TCP_CONG_LIA=y -CONFIG_TCP_CONG_OLIA=y -# CONFIG_TCP_CONG_WVEGAS is not set -# CONFIG_TCP_CONG_BALIA is not set -CONFIG_DEFAULT_BIC=y -# CONFIG_DEFAULT_CUBIC is not set -# CONFIG_DEFAULT_LIA is not set -# CONFIG_DEFAULT_OLIA is not set -# CONFIG_DEFAULT_RENO is not set -CONFIG_DEFAULT_TCP_CONG="bic" -# CONFIG_TCP_MD5SIG is not set -CONFIG_IPV6=y -CONFIG_IPV6_ROUTER_PREF=y -CONFIG_IPV6_ROUTE_INFO=y -CONFIG_IPV6_OPTIMISTIC_DAD=y -CONFIG_INET6_AH=y -CONFIG_INET6_ESP=y -CONFIG_INET6_IPCOMP=y -CONFIG_IPV6_MIP6=y -# CONFIG_IPV6_ILA is not set -CONFIG_INET6_XFRM_TUNNEL=y -CONFIG_INET6_TUNNEL=y -CONFIG_INET6_XFRM_MODE_TRANSPORT=y -CONFIG_INET6_XFRM_MODE_TUNNEL=y -CONFIG_INET6_XFRM_MODE_BEET=y -# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set -CONFIG_IPV6_VTI=y -CONFIG_IPV6_SIT=y -# CONFIG_IPV6_SIT_6RD is not set -CONFIG_IPV6_NDISC_NODETYPE=y -CONFIG_IPV6_TUNNEL=y -# CONFIG_IPV6_FOU is not set -# CONFIG_IPV6_FOU_TUNNEL is not set -CONFIG_IPV6_MULTIPLE_TABLES=y -# CONFIG_IPV6_SUBTREES is not set -# CONFIG_IPV6_MROUTE is not set -# CONFIG_NETLABEL is not set -CONFIG_MPTCP=y -# CONFIG_MPTCP_PM_ADVANCED is not set -CONFIG_DEFAULT_MPTCP_PM="default" -# CONFIG_MPTCP_SCHED_ADVANCED is not set -CONFIG_DEFAULT_MPTCP_SCHED="default" -CONFIG_ANDROID_PARANOID_NETWORK=y -CONFIG_NETWORK_SECMARK=y -# CONFIG_NET_PTP_CLASSIFY is not set -# CONFIG_NETWORK_PHY_TIMESTAMPING is not set -CONFIG_NETFILTER=y -# CONFIG_NETFILTER_DEBUG is not set -CONFIG_NETFILTER_ADVANCED=y - -# -# Core Netfilter Configuration -# -CONFIG_NETFILTER_INGRESS=y -CONFIG_NETFILTER_NETLINK=y -# CONFIG_NETFILTER_NETLINK_ACCT is not set -CONFIG_NETFILTER_NETLINK_QUEUE=y -CONFIG_NETFILTER_NETLINK_LOG=y -CONFIG_NF_CONNTRACK=y -CONFIG_NF_LOG_COMMON=y -CONFIG_NF_CONNTRACK_MARK=y -CONFIG_NF_CONNTRACK_SECMARK=y -# CONFIG_NF_CONNTRACK_ZONES is not set -CONFIG_NF_CONNTRACK_PROCFS=y -CONFIG_NF_CONNTRACK_EVENTS=y -# CONFIG_NF_CONNTRACK_TIMEOUT is not set -# CONFIG_NF_CONNTRACK_TIMESTAMP is not set -CONFIG_NF_CONNTRACK_LABELS=y -CONFIG_NF_CT_PROTO_DCCP=y -CONFIG_NF_CT_PROTO_GRE=y -CONFIG_NF_CT_PROTO_SCTP=y -CONFIG_NF_CT_PROTO_UDPLITE=y -CONFIG_NF_CONNTRACK_AMANDA=y -CONFIG_NF_CONNTRACK_FTP=y -CONFIG_NF_CONNTRACK_H323=y -CONFIG_NF_CONNTRACK_IRC=y -CONFIG_NF_CONNTRACK_BROADCAST=y -CONFIG_NF_CONNTRACK_NETBIOS_NS=y -# CONFIG_NF_CONNTRACK_SNMP is not set -CONFIG_NF_CONNTRACK_PPTP=y -CONFIG_NF_CONNTRACK_SANE=y -# CONFIG_NF_CONNTRACK_SIP is not set -CONFIG_NF_CONNTRACK_TFTP=y -CONFIG_NF_CT_NETLINK=y -# CONFIG_NF_CT_NETLINK_TIMEOUT is not set -# CONFIG_NETFILTER_NETLINK_GLUE_CT is not set -CONFIG_NF_NAT=y -CONFIG_NF_NAT_NEEDED=y -CONFIG_NF_NAT_PROTO_DCCP=y -CONFIG_NF_NAT_PROTO_UDPLITE=y -CONFIG_NF_NAT_PROTO_SCTP=y -CONFIG_NF_NAT_AMANDA=y -CONFIG_NF_NAT_FTP=y -CONFIG_NF_NAT_IRC=y -# CONFIG_NF_NAT_SIP is not set -CONFIG_NF_NAT_TFTP=y -CONFIG_NF_NAT_REDIRECT=y -# CONFIG_NF_TABLES is not set -CONFIG_NETFILTER_XTABLES=y - -# -# Xtables combined modules -# -CONFIG_NETFILTER_XT_MARK=y -CONFIG_NETFILTER_XT_CONNMARK=y - -# -# Xtables targets -# -# CONFIG_NETFILTER_XT_TARGET_AUDIT is not set -# CONFIG_NETFILTER_XT_TARGET_CHECKSUM is not set -CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y -CONFIG_NETFILTER_XT_TARGET_CONNMARK=y -CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y -CONFIG_NETFILTER_XT_TARGET_CT=y -# CONFIG_NETFILTER_XT_TARGET_DSCP is not set -# CONFIG_NETFILTER_XT_TARGET_HL is not set -# CONFIG_NETFILTER_XT_TARGET_HMARK is not set -CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y -# CONFIG_NETFILTER_XT_TARGET_LED is not set -CONFIG_NETFILTER_XT_TARGET_LOG=y -CONFIG_NETFILTER_XT_TARGET_MARK=y -CONFIG_NETFILTER_XT_NAT=y -CONFIG_NETFILTER_XT_TARGET_NETMAP=y -CONFIG_NETFILTER_XT_TARGET_NFLOG=y -CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y -# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set -# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set -CONFIG_NETFILTER_XT_TARGET_REDIRECT=y -# CONFIG_NETFILTER_XT_TARGET_TEE is not set -CONFIG_NETFILTER_XT_TARGET_TPROXY=y -CONFIG_NETFILTER_XT_TARGET_TRACE=y -CONFIG_NETFILTER_XT_TARGET_SECMARK=y -CONFIG_NETFILTER_XT_TARGET_TCPMSS=y -# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set - -# -# Xtables matches -# -# CONFIG_NETFILTER_XT_MATCH_ADDRTYPE is not set -CONFIG_NETFILTER_XT_MATCH_BPF=y -# CONFIG_NETFILTER_XT_MATCH_CGROUP is not set -# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set -CONFIG_NETFILTER_XT_MATCH_COMMENT=y -CONFIG_NETFILTER_XT_MATCH_CONNBYTES=y -CONFIG_NETFILTER_XT_MATCH_CONNLABEL=y -CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y -CONFIG_NETFILTER_XT_MATCH_CONNMARK=y -CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y -# CONFIG_NETFILTER_XT_MATCH_CPU is not set -# CONFIG_NETFILTER_XT_MATCH_DCCP is not set -# CONFIG_NETFILTER_XT_MATCH_DEVGROUP is not set -# CONFIG_NETFILTER_XT_MATCH_DSCP is not set -CONFIG_NETFILTER_XT_MATCH_ECN=y -# CONFIG_NETFILTER_XT_MATCH_ESP is not set -CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y -CONFIG_NETFILTER_XT_MATCH_HELPER=y -CONFIG_NETFILTER_XT_MATCH_HL=y -# CONFIG_NETFILTER_XT_MATCH_IPCOMP is not set -CONFIG_NETFILTER_XT_MATCH_IPRANGE=y -# CONFIG_NETFILTER_XT_MATCH_L2TP is not set -CONFIG_NETFILTER_XT_MATCH_LENGTH=y -CONFIG_NETFILTER_XT_MATCH_LIMIT=y -CONFIG_NETFILTER_XT_MATCH_MAC=y -CONFIG_NETFILTER_XT_MATCH_MARK=y -# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set -# CONFIG_NETFILTER_XT_MATCH_NFACCT is not set -# CONFIG_NETFILTER_XT_MATCH_OSF is not set -# CONFIG_NETFILTER_XT_MATCH_OWNER is not set -CONFIG_NETFILTER_XT_MATCH_POLICY=y -CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y -CONFIG_NETFILTER_XT_MATCH_QTAGUID=y -CONFIG_NETFILTER_XT_MATCH_ONESHOT=y -CONFIG_NETFILTER_XT_MATCH_QUOTA=y -CONFIG_NETFILTER_XT_MATCH_QUOTA2=y -CONFIG_NETFILTER_XT_MATCH_QUOTA2_LOG=y -# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set -# CONFIG_NETFILTER_XT_MATCH_REALM is not set -# CONFIG_NETFILTER_XT_MATCH_RECENT is not set -CONFIG_NETFILTER_XT_MATCH_SCTP=y -CONFIG_NETFILTER_XT_MATCH_SOCKET=y -CONFIG_NETFILTER_XT_MATCH_STATE=y -CONFIG_NETFILTER_XT_MATCH_STATISTIC=y -CONFIG_NETFILTER_XT_MATCH_STRING=y -# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set -CONFIG_NETFILTER_XT_MATCH_TIME=y -CONFIG_NETFILTER_XT_MATCH_U32=y -CONFIG_NF_HISTORY=y -# CONFIG_IP_SET is not set -# CONFIG_IP_VS is not set - -# -# IP: Netfilter Configuration -# -CONFIG_NF_DEFRAG_IPV4=y -CONFIG_NF_CONNTRACK_IPV4=y -# CONFIG_NF_DUP_IPV4 is not set -# CONFIG_NF_LOG_ARP is not set -CONFIG_NF_LOG_IPV4=y -CONFIG_NF_REJECT_IPV4=y -CONFIG_NF_NAT_IPV4=y -CONFIG_NF_NAT_MASQUERADE_IPV4=y -CONFIG_NF_NAT_PROTO_GRE=y -CONFIG_NF_NAT_PPTP=y -CONFIG_NF_NAT_H323=y -CONFIG_IP_NF_IPTABLES=y -CONFIG_IP_NF_MATCH_AH=y -CONFIG_IP_NF_MATCH_ECN=y -CONFIG_IP_NF_MATCH_RPFILTER=y -CONFIG_IP_NF_MATCH_TTL=y -CONFIG_IP_NF_FILTER=y -CONFIG_IP_NF_TARGET_REJECT=y -# CONFIG_IP_NF_TARGET_SYNPROXY is not set -CONFIG_IP_NF_NAT=y -CONFIG_IP_NF_TARGET_MASQUERADE=y -CONFIG_IP_NF_TARGET_NETMAP=y -CONFIG_IP_NF_TARGET_REDIRECT=y -CONFIG_IP_NF_MANGLE=y -# CONFIG_IP_NF_TARGET_CLUSTERIP is not set -# CONFIG_IP_NF_TARGET_ECN is not set -# CONFIG_IP_NF_TARGET_TTL is not set -CONFIG_IP_NF_RAW=y -CONFIG_IP_NF_SECURITY=y -CONFIG_IP_NF_ARPTABLES=y -CONFIG_IP_NF_ARPFILTER=y -CONFIG_IP_NF_ARP_MANGLE=y - -# -# IPv6: Netfilter Configuration -# -CONFIG_NF_DEFRAG_IPV6=y -CONFIG_NF_CONNTRACK_IPV6=y -# CONFIG_NF_DUP_IPV6 is not set -CONFIG_NF_REJECT_IPV6=y -CONFIG_NF_LOG_IPV6=y -CONFIG_NF_NAT_IPV6=y -# CONFIG_NF_NAT_MASQUERADE_IPV6 is not set -CONFIG_IP6_NF_IPTABLES=y -# CONFIG_IP6_NF_MATCH_AH is not set -# CONFIG_IP6_NF_MATCH_EUI64 is not set -# CONFIG_IP6_NF_MATCH_FRAG is not set -# CONFIG_IP6_NF_MATCH_OPTS is not set -# CONFIG_IP6_NF_MATCH_HL is not set -# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set -# CONFIG_IP6_NF_MATCH_MH is not set -CONFIG_IP6_NF_MATCH_RPFILTER=y -# CONFIG_IP6_NF_MATCH_RT is not set -# CONFIG_IP6_NF_TARGET_HL is not set -CONFIG_IP6_NF_FILTER=y -CONFIG_IP6_NF_TARGET_REJECT=y -# CONFIG_IP6_NF_TARGET_SYNPROXY is not set -CONFIG_IP6_NF_MANGLE=y -CONFIG_IP6_NF_RAW=y -# CONFIG_IP6_NF_SECURITY is not set -CONFIG_IP6_NF_NAT=y -# CONFIG_IP6_NF_TARGET_MASQUERADE is not set -# CONFIG_IP6_NF_TARGET_NPT is not set -# CONFIG_IP_DCCP is not set -# CONFIG_IP_SCTP is not set -# CONFIG_RDS is not set -# CONFIG_TIPC is not set -# CONFIG_ATM is not set -# CONFIG_L2TP is not set -# CONFIG_BRIDGE is not set -CONFIG_HAVE_NET_DSA=y -# CONFIG_NET_DSA is not set -# CONFIG_VLAN_8021Q is not set -# CONFIG_DECNET is not set -# CONFIG_LLC2 is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -CONFIG_PHONET=y -# CONFIG_6LOWPAN is not set -# CONFIG_IEEE802154 is not set -CONFIG_NET_SCHED=y - -# -# Queueing/Scheduling -# -# CONFIG_NET_SCH_CBQ is not set -CONFIG_NET_SCH_HTB=y -# CONFIG_NET_SCH_HFSC is not set -CONFIG_NET_SCH_PRIO=y -# CONFIG_NET_SCH_MULTIQ is not set -# CONFIG_NET_SCH_RED is not set -# CONFIG_NET_SCH_SFB is not set -# CONFIG_NET_SCH_SFQ is not set -# CONFIG_NET_SCH_TEQL is not set -# CONFIG_NET_SCH_TBF is not set -# CONFIG_NET_SCH_GRED is not set -# CONFIG_NET_SCH_DSMARK is not set -# CONFIG_NET_SCH_NETEM is not set -# CONFIG_NET_SCH_DRR is not set -# CONFIG_NET_SCH_MQPRIO is not set -# CONFIG_NET_SCH_CHOKE is not set -# CONFIG_NET_SCH_QFQ is not set -# CONFIG_NET_SCH_CODEL is not set -# CONFIG_NET_SCH_FQ_CODEL is not set -# CONFIG_NET_SCH_FQ is not set -# CONFIG_NET_SCH_HHF is not set -# CONFIG_NET_SCH_PIE is not set -CONFIG_NET_SCH_INGRESS=y -# CONFIG_NET_SCH_PLUG is not set - -# -# Classification -# -CONFIG_NET_CLS=y -CONFIG_NET_CLS_BASIC=y -# CONFIG_NET_CLS_TCINDEX is not set -# CONFIG_NET_CLS_ROUTE4 is not set -# CONFIG_NET_CLS_FW is not set -CONFIG_NET_CLS_U32=y -# CONFIG_CLS_U32_PERF is not set -# CONFIG_CLS_U32_MARK is not set -# CONFIG_NET_CLS_RSVP is not set -# CONFIG_NET_CLS_RSVP6 is not set -# CONFIG_NET_CLS_FLOW is not set -CONFIG_NET_CLS_CGROUP=y -# CONFIG_NET_CLS_BPF is not set -# CONFIG_NET_CLS_FLOWER is not set -# CONFIG_NET_CLS_MATCHALL is not set -CONFIG_NET_EMATCH=y -CONFIG_NET_EMATCH_STACK=32 -# CONFIG_NET_EMATCH_CMP is not set -# CONFIG_NET_EMATCH_NBYTE is not set -CONFIG_NET_EMATCH_U32=y -# CONFIG_NET_EMATCH_META is not set -# CONFIG_NET_EMATCH_TEXT is not set -CONFIG_NET_CLS_ACT=y -CONFIG_NET_ACT_POLICE=y -CONFIG_NET_ACT_GACT=y -# CONFIG_GACT_PROB is not set -CONFIG_NET_ACT_MIRRED=y -# CONFIG_NET_ACT_IPT is not set -# CONFIG_NET_ACT_NAT is not set -# CONFIG_NET_ACT_PEDIT is not set -# CONFIG_NET_ACT_SIMP is not set -# CONFIG_NET_ACT_SKBEDIT is not set -# CONFIG_NET_ACT_CSUM is not set -# CONFIG_NET_ACT_VLAN is not set -# CONFIG_NET_ACT_BPF is not set -# CONFIG_NET_ACT_CONNMARK is not set -# CONFIG_NET_ACT_SKBMOD is not set -# CONFIG_NET_ACT_IFE is not set -# CONFIG_NET_ACT_TUNNEL_KEY is not set -# CONFIG_NET_CLS_IND is not set -CONFIG_NET_SCH_FIFO=y -# CONFIG_DCB is not set -# CONFIG_DNS_RESOLVER is not set -# CONFIG_BATMAN_ADV is not set -# CONFIG_OPENVSWITCH is not set -# CONFIG_VSOCKETS is not set -# CONFIG_NETLINK_DIAG is not set -# CONFIG_MPLS is not set -# CONFIG_HSR is not set -# CONFIG_NET_SWITCHDEV is not set -# CONFIG_NET_L3_MASTER_DEV is not set -# CONFIG_NET_NCSI is not set -CONFIG_KNOX_NCM=y -CONFIG_RPS=y -CONFIG_RFS_ACCEL=y -CONFIG_XPS=y -# CONFIG_CGROUP_NET_PRIO is not set -CONFIG_CGROUP_NET_CLASSID=y -CONFIG_NET_RX_BUSY_POLL=y -CONFIG_BQL=y -# CONFIG_BPF_JIT is not set -CONFIG_NET_FLOW_LIMIT=y - -# -# Network testing -# -# CONFIG_NET_PKTGEN is not set -# CONFIG_NET_DROP_MONITOR is not set -# CONFIG_HAMRADIO is not set -# CONFIG_CAN is not set -# CONFIG_IRDA is not set -CONFIG_BT=y -CONFIG_BT_BREDR=y -# CONFIG_BT_RFCOMM is not set -# CONFIG_BT_BNEP is not set -# CONFIG_BT_HIDP is not set -CONFIG_BT_HS=y -CONFIG_BT_LE=y -# CONFIG_BT_LEDS is not set -# CONFIG_BT_SELFTEST is not set -CONFIG_BT_DEBUGFS=y - -# -# Bluetooth device drivers -# -# CONFIG_BT_HCIBTUSB is not set -# CONFIG_BT_HCIBTSDIO is not set -# CONFIG_BT_HCIUART is not set -# CONFIG_BT_HCIBCM203X is not set -# CONFIG_BT_HCIBFUSB is not set -# CONFIG_BT_HCIVHCI is not set -# CONFIG_BT_MRVL is not set -CONFIG_BT_BCM43XX=y -# CONFIG_AF_RXRPC is not set -# CONFIG_AF_KCM is not set -# CONFIG_STREAM_PARSER is not set -CONFIG_FIB_RULES=y -CONFIG_WIRELESS=y -CONFIG_CFG80211=y -CONFIG_NL80211_TESTMODE=y -# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set -# CONFIG_CFG80211_CERTIFICATION_ONUS is not set -CONFIG_CFG80211_DEFAULT_PS=y -# CONFIG_CFG80211_DEBUGFS is not set -# CONFIG_CFG80211_INTERNAL_REGDB is not set -CONFIG_CFG80211_CRDA_SUPPORT=y -# CONFIG_CFG80211_WEXT is not set -# CONFIG_LIB80211 is not set -CONFIG_CFG80211_REG_NOT_UPDATED=y -# CONFIG_MAC80211 is not set -CONFIG_MAC80211_STA_HASH_MAX_SIZE=0 -# CONFIG_WIMAX is not set -CONFIG_RFKILL=y -CONFIG_RFKILL_PM=y -CONFIG_RFKILL_LEDS=y -# CONFIG_RFKILL_INPUT is not set -# CONFIG_RFKILL_REGULATOR is not set -# CONFIG_RFKILL_GPIO is not set -# CONFIG_NET_9P is not set -# CONFIG_CAIF is not set -# CONFIG_CEPH_LIB is not set -# CONFIG_NFC is not set -CONFIG_SAMSUNG_NFC=y - -# -# Near Field Communication (NFC) devices -# -CONFIG_SEC_NFC=y -CONFIG_ESE_P3_LSI=y -# CONFIG_ESE_FACTORY_ONLY is not set -# CONFIG_NFC_PN547 is not set -# CONFIG_NFC_P61 is not set -CONFIG_ESE_SECURE=y -CONFIG_ESE_SECURE_SPI_PORT=7 -CONFIG_ESE_SECURE_USI_MODE=12 -CONFIG_ESE_SECURE_GPIO="" -# CONFIG_ESE_COFFEE is not set -CONFIG_SEC_NFC_LOGGER=y -# CONFIG_LWTUNNEL is not set -CONFIG_DST_CACHE=y -# CONFIG_NET_DEVLINK is not set -CONFIG_MAY_USE_DEVLINK=y -CONFIG_HAVE_EBPF_JIT=y -CONFIG_NETPM=y - -# -# Device Drivers -# -CONFIG_ARM_AMBA=y - -# -# Generic Driver Options -# -CONFIG_UEVENT_HELPER=y -CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" -CONFIG_DEVTMPFS=y -# CONFIG_DEVTMPFS_MOUNT is not set -CONFIG_STANDALONE=y -CONFIG_PREVENT_FIRMWARE_BUILD=y -CONFIG_FW_LOADER=y -CONFIG_FIRMWARE_IN_KERNEL=y -CONFIG_EXTRA_FIRMWARE="" -CONFIG_FW_LOADER_USER_HELPER=y -CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y -CONFIG_ALLOW_DEV_COREDUMP=y -# CONFIG_DEBUG_DRIVER is not set -# CONFIG_DEBUG_DEVRES is not set -# CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set -# CONFIG_SYS_HYPERVISOR is not set -# CONFIG_GENERIC_CPU_DEVICES is not set -CONFIG_GENERIC_CPU_AUTOPROBE=y -CONFIG_SOC_BUS=y -CONFIG_REGMAP=y -CONFIG_REGMAP_I2C=y -CONFIG_REGMAP_SPI=y -CONFIG_REGMAP_MMIO=y -CONFIG_REGMAP_IRQ=y -CONFIG_DMA_SHARED_BUFFER=y -# CONFIG_FENCE_TRACE is not set -CONFIG_DMA_CMA=y - -# -# Default contiguous memory area size: -# -CONFIG_CMA_SIZE_MBYTES=26 -CONFIG_CMA_SIZE_SEL_MBYTES=y -# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set -# CONFIG_CMA_SIZE_SEL_MIN is not set -# CONFIG_CMA_SIZE_SEL_MAX is not set -CONFIG_CMA_ALIGNMENT=8 - -# -# Bus devices -# -# CONFIG_ARM_CCI400_PMU is not set -# CONFIG_ARM_CCI5xx_PMU is not set -# CONFIG_ARM_CCN is not set -# CONFIG_VEXPRESS_CONFIG is not set -# CONFIG_CONNECTOR is not set -# CONFIG_MTD is not set -CONFIG_DTC=y -CONFIG_OF=y -# CONFIG_OF_UNITTEST is not set -CONFIG_OF_FLATTREE=y -CONFIG_OF_EARLY_FLATTREE=y -CONFIG_OF_ADDRESS=y -CONFIG_OF_ADDRESS_PCI=y -CONFIG_OF_IRQ=y -CONFIG_OF_NET=y -CONFIG_OF_MDIO=y -CONFIG_OF_PCI=y -CONFIG_OF_PCI_IRQ=y -CONFIG_OF_RESERVED_MEM=y -# CONFIG_OF_OVERLAY is not set -# CONFIG_PARPORT is not set -CONFIG_BLK_DEV=y -# CONFIG_BLK_DEV_NULL_BLK is not set -# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set -# CONFIG_ZRAM is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_UMEM is not set -# CONFIG_BLK_DEV_COW_COMMON is not set -CONFIG_BLK_DEV_LOOP=y -CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 -# CONFIG_BLK_DEV_CRYPTOLOOP is not set -# CONFIG_BLK_DEV_DRBD is not set -# CONFIG_BLK_DEV_NBD is not set -# CONFIG_BLK_DEV_SKD is not set -# CONFIG_BLK_DEV_SX8 is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_COUNT=16 -CONFIG_BLK_DEV_RAM_SIZE=8192 -# CONFIG_CDROM_PKTCDVD is not set -# CONFIG_ATA_OVER_ETH is not set -# CONFIG_BLK_DEV_RBD is not set -# CONFIG_BLK_DEV_RSXX is not set -# CONFIG_BLK_DEV_NVME is not set -# CONFIG_NVME_TARGET is not set - -# -# Misc devices -# -# CONFIG_SENSORS_LIS3LV02D is not set -# CONFIG_AD525X_DPOT is not set -# CONFIG_DUMMY_IRQ is not set -# CONFIG_PHANTOM is not set -# CONFIG_SGI_IOC4 is not set -# CONFIG_TIFM_CORE is not set -# CONFIG_ICS932S401 is not set -# CONFIG_ENCLOSURE_SERVICES is not set -# CONFIG_HP_ILO is not set -# CONFIG_APDS9802ALS is not set -# CONFIG_ISL29003 is not set -# CONFIG_ISL29020 is not set -# CONFIG_SENSORS_TSL2550 is not set -# CONFIG_SENSORS_BH1770 is not set -# CONFIG_SENSORS_APDS990X is not set -# CONFIG_HMC6352 is not set -# CONFIG_DS1682 is not set -# CONFIG_TI_DAC7512 is not set -# CONFIG_USB_SWITCH_FSA9480 is not set -# CONFIG_LATTICE_ECP3_CONFIG is not set -# CONFIG_SRAM is not set -CONFIG_UID_SYS_STATS=y -CONFIG_DEBUG_UID_CPUTIME=y -# CONFIG_UID_SYS_STATS_DEBUG is not set -CONFIG_MEMORY_STATE_TIME=y -CONFIG_TIMA_LOG=y -# CONFIG_KNOX_KAP is not set -# CONFIG_C2PORT is not set - -# -# EEPROM support -# -# CONFIG_EEPROM_AT24 is not set -# CONFIG_EEPROM_AT25 is not set -# CONFIG_EEPROM_LEGACY is not set -# CONFIG_EEPROM_MAX6875 is not set -# CONFIG_EEPROM_93CX6 is not set -# CONFIG_EEPROM_93XX46 is not set -# CONFIG_CB710_CORE is not set - -# -# Texas Instruments shared transport line discipline -# -# CONFIG_TI_ST is not set -# CONFIG_SENSORS_LIS3_SPI is not set -# CONFIG_SENSORS_LIS3_I2C is not set - -# -# Altera FPGA firmware download module -# -# CONFIG_ALTERA_STAPL is not set - -# -# Intel MIC Bus Driver -# - -# -# SCIF Bus Driver -# - -# -# VOP Bus Driver -# - -# -# Intel MIC Host Driver -# - -# -# Intel MIC Card Driver -# - -# -# SCIF Driver -# - -# -# Intel MIC Coprocessor State Management (COSM) Drivers -# - -# -# VOP Driver -# -# CONFIG_GENWQE is not set -# CONFIG_ECHO is not set -# CONFIG_CXL_BASE is not set -# CONFIG_CXL_AFU_DRIVER_OPS is not set -CONFIG_MCU_IPC=y -# CONFIG_MCU_IPC_TEST is not set -CONFIG_SHM_IPC=y -CONFIG_SEC_SIPC_MODEM_IF=y -CONFIG_SEC_MODEM_SS310AP=y -CONFIG_CP_ZEROCOPY=y -# CONFIG_CP_SMAPPER is not set - -# -# Configuration Description -# -# CONFIG_BOOT_DEVICE_SPI is not set -# CONFIG_LINK_DEVICE_MEMORY is not set -# CONFIG_LINK_POWER_MANAGEMENT is not set -# CONFIG_LINK_DEVICE_WITH_SBD_ARCH is not set -CONFIG_LINK_DEVICE_NAPI=y -# CONFIG_LINK_DEVICE_C2C is not set -# CONFIG_LINK_DEVICE_LLI is not set -CONFIG_LINK_DEVICE_SHMEM=y -# CONFIG_LINK_DEVICE_HSIC is not set -# CONFIG_LTE_MODEM_XMM7260 is not set -CONFIG_UMTS_MODEM_SS310AP=y -# CONFIG_DEBUG_PKTLOG is not set -# CONFIG_LINK_CONTROL_MSG_IOSM is not set -CONFIG_CP_SECURE_BOOT=y -# CONFIG_GPIO_DS_DETECT is not set -CONFIG_CP_RAM_LOGGING=y -# CONFIG_HW_REV_DETECT is not set -CONFIG_MODEM_IF_QOS=y -CONFIG_MODEM_IF_NET_GRO=y -CONFIG_KLAT=y - -# -# Samsung Modem Interface Driver for Memory-type Interface -# -# CONFIG_SEC_MODEM_IF is not set -CONFIG_DEV_RIL_BRIDGE=y - -# -# NOTIFIER configs -# -CONFIG_VBUS_NOTIFIER=y - -# -# MUIC configs -# -CONFIG_USE_MUIC=y -CONFIG_USE_SAFEOUT=y -CONFIG_MUIC_NOTIFIER=y -CONFIG_MUIC_MAX77705=y -CONFIG_HV_MUIC_MAX77705_AFC=y -# CONFIG_MUIC_UNIVERSAL is not set -CONFIG_MUIC_SUPPORT_CCIC=y -CONFIG_MUIC_MAX77705_CCIC=y -CONFIG_HICCUP_CHARGER=y -# CONFIG_MUIC_HV_SUPPORT_POGO_DOCK is not set -# CONFIG_MUIC_SM5508 is not set - -# -# SCSI device support -# -CONFIG_SCSI_MOD=y -# CONFIG_RAID_ATTRS is not set -CONFIG_SCSI=y -CONFIG_UFS_SRPMB=y -CONFIG_SCSI_DMA=y -# CONFIG_SCSI_NETLINK is not set -# CONFIG_SCSI_MQ_DEFAULT is not set -CONFIG_SCSI_PROC_FS=y - -# -# SCSI support type (disk, tape, CD-ROM) -# -CONFIG_BLK_DEV_SD=y -# CONFIG_CHR_DEV_ST is not set -# CONFIG_CHR_DEV_OSST is not set -# CONFIG_BLK_DEV_SR is not set -# CONFIG_CHR_DEV_SG is not set -# CONFIG_CHR_DEV_SCH is not set -# CONFIG_SCSI_CONSTANTS is not set -# CONFIG_SCSI_LOGGING is not set -# CONFIG_SCSI_SCAN_ASYNC is not set - -# -# SCSI Transports -# -# CONFIG_SCSI_SPI_ATTRS is not set -# CONFIG_SCSI_FC_ATTRS is not set -# CONFIG_SCSI_ISCSI_ATTRS is not set -# CONFIG_SCSI_SAS_ATTRS is not set -# CONFIG_SCSI_SAS_LIBSAS is not set -# CONFIG_SCSI_SRP_ATTRS is not set -CONFIG_SCSI_LOWLEVEL=y -# CONFIG_ISCSI_TCP is not set -# CONFIG_ISCSI_BOOT_SYSFS is not set -# CONFIG_SCSI_CXGB3_ISCSI is not set -# CONFIG_SCSI_CXGB4_ISCSI is not set -# CONFIG_SCSI_BNX2_ISCSI is not set -# CONFIG_BE2ISCSI is not set -# CONFIG_BLK_DEV_3W_XXXX_RAID is not set -# CONFIG_SCSI_HPSA is not set -# CONFIG_SCSI_3W_9XXX is not set -# CONFIG_SCSI_3W_SAS is not set -# CONFIG_SCSI_ACARD is not set -# CONFIG_SCSI_AACRAID is not set -# CONFIG_SCSI_AIC7XXX is not set -# CONFIG_SCSI_AIC79XX is not set -# CONFIG_SCSI_AIC94XX is not set -# CONFIG_SCSI_HISI_SAS is not set -# CONFIG_SCSI_MVSAS is not set -# CONFIG_SCSI_MVUMI is not set -# CONFIG_SCSI_ADVANSYS is not set -# CONFIG_SCSI_ARCMSR is not set -# CONFIG_SCSI_ESAS2R is not set -# CONFIG_MEGARAID_NEWGEN is not set -# CONFIG_MEGARAID_LEGACY is not set -# CONFIG_MEGARAID_SAS is not set -# CONFIG_SCSI_MPT3SAS is not set -# CONFIG_SCSI_MPT2SAS is not set -# CONFIG_SCSI_SMARTPQI is not set -CONFIG_SCSI_UFSHCD=y -# CONFIG_UFS_UN_18DIGITS is not set -# CONFIG_SCSI_UFSHCD_PCI is not set -CONFIG_SCSI_UFSHCD_PLATFORM=y -# CONFIG_SCSI_UFS_DWC_TC_PLATFORM is not set -CONFIG_SCSI_UFS_ASYNC_RELINK=y -CONFIG_SCSI_UFS_CMD_LOGGING=y -# CONFIG_SCSI_UFS_TEST_MODE is not set -CONFIG_UFS_DATA_LOG=y -CONFIG_UFS_DATA_LOG_MAGIC_CODE=y -CONFIG_SCSI_UFS_EXYNOS=y -CONFIG_SCSI_UFS_EXYNOS_FMP=y -CONFIG_SCSI_UFS_EXYNOS_SMU=y -# CONFIG_SCSI_HPTIOP is not set -# CONFIG_SCSI_SNIC is not set -# CONFIG_SCSI_DMX3191D is not set -# CONFIG_SCSI_FUTURE_DOMAIN is not set -# CONFIG_SCSI_IPS is not set -# CONFIG_SCSI_INITIO is not set -# CONFIG_SCSI_INIA100 is not set -# CONFIG_SCSI_STEX is not set -# CONFIG_SCSI_SYM53C8XX_2 is not set -# CONFIG_SCSI_QLOGIC_1280 is not set -# CONFIG_SCSI_QLA_ISCSI is not set -# CONFIG_SCSI_DC395x is not set -# CONFIG_SCSI_AM53C974 is not set -# CONFIG_SCSI_WD719X is not set -# CONFIG_SCSI_DEBUG is not set -# CONFIG_SCSI_PMCRAID is not set -# CONFIG_SCSI_PM8001 is not set -# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set -# CONFIG_SCSI_DH is not set -# CONFIG_SCSI_OSD_INITIATOR is not set -CONFIG_HAVE_PATA_PLATFORM=y -# CONFIG_ATA is not set -CONFIG_MD=y -# CONFIG_BLK_DEV_MD is not set -# CONFIG_BCACHE is not set -CONFIG_BLK_DEV_DM_BUILTIN=y -CONFIG_BLK_DEV_DM=y -# CONFIG_DM_MQ_DEFAULT is not set -# CONFIG_DM_DEBUG is not set -CONFIG_DM_BUFIO=y -# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set -CONFIG_DM_CRYPT=y -# CONFIG_DM_SNAPSHOT is not set -# CONFIG_DM_THIN_PROVISIONING is not set -# CONFIG_DM_CACHE is not set -# CONFIG_DM_ERA is not set -# CONFIG_DM_MIRROR is not set -# CONFIG_DM_RAID is not set -# CONFIG_DM_ZERO is not set -# CONFIG_DM_MULTIPATH is not set -# CONFIG_DM_DELAY is not set -CONFIG_DM_UEVENT=y -# CONFIG_DM_FLAKEY is not set -CONFIG_DM_VERITY=y -# CONFIG_DM_VERITY_HASH_PREFETCH_MIN_SIZE_128 is not set -CONFIG_DM_VERITY_HASH_PREFETCH_MIN_SIZE=1 -CONFIG_DM_VERITY_FEC=y -# CONFIG_DM_SWITCH is not set -# CONFIG_DM_LOG_WRITES is not set -CONFIG_DM_ANDROID_VERITY_AT_MOST_ONCE_DEFAULT_ENABLED=y -# CONFIG_TARGET_CORE is not set -# CONFIG_FUSION is not set - -# -# IEEE 1394 (FireWire) support -# -# CONFIG_FIREWIRE is not set -# CONFIG_FIREWIRE_NOSY is not set -CONFIG_NETDEVICES=y -CONFIG_MII=y -CONFIG_NET_CORE=y -# CONFIG_BONDING is not set -# CONFIG_DUMMY is not set -# CONFIG_EQUALIZER is not set -# CONFIG_NET_FC is not set -# CONFIG_IFB is not set -# CONFIG_NET_TEAM is not set -# CONFIG_MACVLAN is not set -# CONFIG_VXLAN is not set -# CONFIG_MACSEC is not set -# CONFIG_NETCONSOLE is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set -CONFIG_TUN=y -# CONFIG_TUN_VNET_CROSS_LE is not set -CONFIG_VETH=y -# CONFIG_NLMON is not set -# CONFIG_ARCNET is not set - -# -# CAIF transport drivers -# - -# -# Distributed Switch Architecture drivers -# -CONFIG_ETHERNET=y -CONFIG_NET_VENDOR_3COM=y -# CONFIG_VORTEX is not set -# CONFIG_TYPHOON is not set -CONFIG_NET_VENDOR_ADAPTEC=y -# CONFIG_ADAPTEC_STARFIRE is not set -CONFIG_NET_VENDOR_AGERE=y -# CONFIG_ET131X is not set -CONFIG_NET_VENDOR_ALTEON=y -# CONFIG_ACENIC is not set -# CONFIG_ALTERA_TSE is not set -CONFIG_NET_VENDOR_AMAZON=y -CONFIG_NET_VENDOR_AMD=y -# CONFIG_AMD8111_ETH is not set -# CONFIG_PCNET32 is not set -# CONFIG_AMD_XGBE is not set -CONFIG_NET_VENDOR_ARC=y -# CONFIG_ARC_EMAC is not set -# CONFIG_EMAC_ROCKCHIP is not set -CONFIG_NET_VENDOR_ATHEROS=y -# CONFIG_ATL2 is not set -# CONFIG_ATL1 is not set -# CONFIG_ATL1E is not set -# CONFIG_ATL1C is not set -# CONFIG_ALX is not set -# CONFIG_NET_VENDOR_AURORA is not set -CONFIG_NET_CADENCE=y -# CONFIG_MACB is not set -CONFIG_NET_VENDOR_BROADCOM=y -# CONFIG_B44 is not set -# CONFIG_BCMGENET is not set -# CONFIG_BNX2 is not set -# CONFIG_CNIC is not set -# CONFIG_TIGON3 is not set -# CONFIG_BNX2X is not set -# CONFIG_SYSTEMPORT is not set -# CONFIG_BNXT is not set -CONFIG_NET_VENDOR_BROCADE=y -# CONFIG_BNA is not set -CONFIG_NET_VENDOR_CAVIUM=y -# CONFIG_THUNDER_NIC_PF is not set -# CONFIG_THUNDER_NIC_VF is not set -# CONFIG_THUNDER_NIC_BGX is not set -# CONFIG_THUNDER_NIC_RGX is not set -# CONFIG_LIQUIDIO is not set -CONFIG_NET_VENDOR_CHELSIO=y -# CONFIG_CHELSIO_T1 is not set -# CONFIG_CHELSIO_T3 is not set -# CONFIG_CHELSIO_T4 is not set -# CONFIG_CHELSIO_T4VF is not set -CONFIG_NET_VENDOR_CISCO=y -# CONFIG_ENIC is not set -# CONFIG_DNET is not set -CONFIG_NET_VENDOR_DEC=y -# CONFIG_NET_TULIP is not set -CONFIG_NET_VENDOR_DLINK=y -# CONFIG_DL2K is not set -# CONFIG_SUNDANCE is not set -CONFIG_NET_VENDOR_EMULEX=y -# CONFIG_BE2NET is not set -CONFIG_NET_VENDOR_EZCHIP=y -# CONFIG_EZCHIP_NPS_MANAGEMENT_ENET is not set -CONFIG_NET_VENDOR_EXAR=y -# CONFIG_S2IO is not set -# CONFIG_VXGE is not set -CONFIG_NET_VENDOR_HISILICON=y -# CONFIG_HIX5HD2_GMAC is not set -# CONFIG_HISI_FEMAC is not set -# CONFIG_HIP04_ETH is not set -# CONFIG_HNS is not set -# CONFIG_HNS_DSAF is not set -# CONFIG_HNS_ENET is not set -CONFIG_NET_VENDOR_HP=y -# CONFIG_HP100 is not set -CONFIG_NET_VENDOR_INTEL=y -# CONFIG_E100 is not set -# CONFIG_E1000 is not set -# CONFIG_E1000E is not set -# CONFIG_IGB is not set -# CONFIG_IGBVF is not set -# CONFIG_IXGB is not set -# CONFIG_IXGBE is not set -# CONFIG_IXGBEVF is not set -# CONFIG_I40E is not set -# CONFIG_I40EVF is not set -# CONFIG_FM10K is not set -CONFIG_NET_VENDOR_I825XX=y -# CONFIG_JME is not set -CONFIG_NET_VENDOR_MARVELL=y -# CONFIG_MVMDIO is not set -# CONFIG_MVNETA_BM is not set -# CONFIG_SKGE is not set -# CONFIG_SKY2 is not set -CONFIG_NET_VENDOR_MELLANOX=y -# CONFIG_MLX4_EN is not set -# CONFIG_MLX4_CORE is not set -# CONFIG_MLX5_CORE is not set -# CONFIG_MLXSW_CORE is not set -CONFIG_NET_VENDOR_MICREL=y -# CONFIG_KS8842 is not set -# CONFIG_KS8851 is not set -# CONFIG_KS8851_MLL is not set -# CONFIG_KSZ884X_PCI is not set -CONFIG_NET_VENDOR_MICROCHIP=y -# CONFIG_ENC28J60 is not set -# CONFIG_ENCX24J600 is not set -CONFIG_NET_VENDOR_MYRI=y -# CONFIG_MYRI10GE is not set -# CONFIG_FEALNX is not set -CONFIG_NET_VENDOR_NATSEMI=y -# CONFIG_NATSEMI is not set -# CONFIG_NS83820 is not set -CONFIG_NET_VENDOR_NETRONOME=y -# CONFIG_NFP_NETVF is not set -CONFIG_NET_VENDOR_8390=y -# CONFIG_NE2K_PCI is not set -CONFIG_NET_VENDOR_NVIDIA=y -# CONFIG_FORCEDETH is not set -CONFIG_NET_VENDOR_OKI=y -# CONFIG_ETHOC is not set -CONFIG_NET_PACKET_ENGINE=y -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -CONFIG_NET_VENDOR_QLOGIC=y -# CONFIG_QLA3XXX is not set -# CONFIG_QLCNIC is not set -# CONFIG_QLGE is not set -# CONFIG_NETXEN_NIC is not set -# CONFIG_QED is not set -CONFIG_NET_VENDOR_QUALCOMM=y -# CONFIG_QCA7000 is not set -# CONFIG_QCOM_EMAC is not set -CONFIG_NET_VENDOR_REALTEK=y -# CONFIG_8139CP is not set -# CONFIG_8139TOO is not set -# CONFIG_R8169 is not set -CONFIG_NET_VENDOR_RENESAS=y -CONFIG_NET_VENDOR_RDC=y -# CONFIG_R6040 is not set -CONFIG_NET_VENDOR_ROCKER=y -CONFIG_NET_VENDOR_SAMSUNG=y -# CONFIG_SXGBE_ETH is not set -CONFIG_NET_VENDOR_SEEQ=y -CONFIG_NET_VENDOR_SILAN=y -# CONFIG_SC92031 is not set -CONFIG_NET_VENDOR_SIS=y -# CONFIG_SIS900 is not set -# CONFIG_SIS190 is not set -# CONFIG_SFC is not set -CONFIG_NET_VENDOR_SMSC=y -# CONFIG_SMC91X is not set -# CONFIG_EPIC100 is not set -# CONFIG_SMSC911X is not set -# CONFIG_SMSC9420 is not set -CONFIG_NET_VENDOR_STMICRO=y -# CONFIG_STMMAC_ETH is not set -CONFIG_NET_VENDOR_SUN=y -# CONFIG_HAPPYMEAL is not set -# CONFIG_SUNGEM is not set -# CONFIG_CASSINI is not set -# CONFIG_NIU is not set -CONFIG_NET_VENDOR_SYNOPSYS=y -# CONFIG_SYNOPSYS_DWC_ETH_QOS is not set -CONFIG_NET_VENDOR_TEHUTI=y -# CONFIG_TEHUTI is not set -CONFIG_NET_VENDOR_TI=y -# CONFIG_TI_CPSW_ALE is not set -# CONFIG_TLAN is not set -CONFIG_NET_VENDOR_VIA=y -# CONFIG_VIA_RHINE is not set -# CONFIG_VIA_VELOCITY is not set -CONFIG_NET_VENDOR_WIZNET=y -# CONFIG_WIZNET_W5100 is not set -# CONFIG_WIZNET_W5300 is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -CONFIG_PHYLIB=y -CONFIG_SWPHY=y - -# -# MDIO bus device drivers -# -# CONFIG_MDIO_BCM_UNIMAC is not set -# CONFIG_MDIO_BITBANG is not set -# CONFIG_MDIO_BUS_MUX_GPIO is not set -# CONFIG_MDIO_BUS_MUX_MMIOREG is not set -# CONFIG_MDIO_HISI_FEMAC is not set -# CONFIG_MDIO_OCTEON is not set -# CONFIG_MDIO_THUNDER is not set - -# -# MII PHY device drivers -# -# CONFIG_AMD_PHY is not set -# CONFIG_AQUANTIA_PHY is not set -# CONFIG_AT803X_PHY is not set -# CONFIG_BCM7XXX_PHY is not set -# CONFIG_BCM87XX_PHY is not set -# CONFIG_BROADCOM_PHY is not set -# CONFIG_CICADA_PHY is not set -# CONFIG_DAVICOM_PHY is not set -# CONFIG_DP83848_PHY is not set -# CONFIG_DP83867_PHY is not set -CONFIG_FIXED_PHY=y -# CONFIG_ICPLUS_PHY is not set -# CONFIG_INTEL_XWAY_PHY is not set -# CONFIG_LSI_ET1011C_PHY is not set -# CONFIG_LXT_PHY is not set -# CONFIG_MARVELL_PHY is not set -# CONFIG_MICREL_PHY is not set -# CONFIG_MICROCHIP_PHY is not set -# CONFIG_MICROSEMI_PHY is not set -# CONFIG_NATIONAL_PHY is not set -# CONFIG_QSEMI_PHY is not set -# CONFIG_REALTEK_PHY is not set -# CONFIG_SMSC_PHY is not set -# CONFIG_STE10XP is not set -# CONFIG_TERANETICS_PHY is not set -# CONFIG_VITESSE_PHY is not set -# CONFIG_XILINX_GMII2RGMII is not set -# CONFIG_MICREL_KS8995MA is not set -CONFIG_PPP=y -CONFIG_PPP_BSDCOMP=y -CONFIG_PPP_DEFLATE=y -# CONFIG_PPP_FILTER is not set -CONFIG_PPP_MPPE=y -# CONFIG_PPP_MULTILINK is not set -# CONFIG_PPPOE is not set -CONFIG_PPPOLAC=y -CONFIG_PPPOPNS=y -# CONFIG_PPP_ASYNC is not set -# CONFIG_PPP_SYNC_TTY is not set -# CONFIG_SLIP is not set -CONFIG_SLHC=y -CONFIG_USB_NET_DRIVERS=y -# CONFIG_USB_CATC is not set -# CONFIG_USB_KAWETH is not set -# CONFIG_USB_PEGASUS is not set -CONFIG_USB_RTL8150=y -CONFIG_USB_RTL8152=y -# CONFIG_USB_LAN78XX is not set -CONFIG_USB_USBNET=y -CONFIG_USB_NET_AX8817X=y -CONFIG_USB_NET_AX88179_178A=y -CONFIG_USB_NET_CDCETHER=y -CONFIG_USB_NET_CDC_EEM=y -CONFIG_USB_NET_CDC_NCM=y -# CONFIG_USB_NET_HUAWEI_CDC_NCM is not set -CONFIG_USB_NET_CDC_MBIM=y -# CONFIG_USB_NET_DM9601 is not set -# CONFIG_USB_NET_SR9700 is not set -# CONFIG_USB_NET_SR9800 is not set -CONFIG_USB_NET_SMSC75XX=y -CONFIG_USB_NET_SMSC95XX=y -# CONFIG_USB_NET_GL620A is not set -CONFIG_USB_NET_NET1080=y -# CONFIG_USB_NET_PLUSB is not set -# CONFIG_USB_NET_MCS7830 is not set -# CONFIG_USB_NET_RNDIS_HOST is not set -CONFIG_USB_NET_CDC_SUBSET_ENABLE=y -CONFIG_USB_NET_CDC_SUBSET=y -# CONFIG_USB_ALI_M5632 is not set -# CONFIG_USB_AN2720 is not set -CONFIG_USB_BELKIN=y -CONFIG_USB_ARMLINUX=y -# CONFIG_USB_EPSON2888 is not set -# CONFIG_USB_KC2190 is not set -CONFIG_USB_NET_ZAURUS=y -# CONFIG_USB_NET_CX82310_ETH is not set -# CONFIG_USB_NET_KALMIA is not set -# CONFIG_USB_NET_QMI_WWAN is not set -# CONFIG_USB_HSO is not set -# CONFIG_USB_NET_INT51X1 is not set -# CONFIG_USB_CDC_PHONET is not set -# CONFIG_USB_IPHETH is not set -# CONFIG_USB_SIERRA_NET is not set -# CONFIG_USB_VL600 is not set -# CONFIG_USB_NET_CH9200 is not set -CONFIG_WLAN=y -CONFIG_WLAN_VENDOR_ADMTEK=y -CONFIG_WLAN_VENDOR_ATH=y -# CONFIG_ATH_DEBUG is not set -# CONFIG_ATH5K_PCI is not set -# CONFIG_ATH6KL is not set -# CONFIG_WIL6210 is not set -CONFIG_WLAN_VENDOR_ATMEL=y -# CONFIG_ATMEL is not set -CONFIG_WLAN_VENDOR_BROADCOM=y -# CONFIG_BRCMFMAC is not set -CONFIG_BROADCOM_WIFI=y -# CONFIG_BCM4330 is not set -# CONFIG_BCM4343 is not set -# CONFIG_BCM43436 is not set -# CONFIG_BCM4334 is not set -# CONFIG_BCM4335 is not set -# CONFIG_BCM4339 is not set -# CONFIG_BCM4354 is not set -# CONFIG_BCM43012 is not set -# CONFIG_BCM4358 is not set -# CONFIG_BCM4359 is not set -CONFIG_BCM4361=y -# CONFIG_BCM4375 is not set -# CONFIG_BCM43241 is not set -# CONFIG_BCM43456 is not set -# CONFIG_BCM43455 is not set -# CONFIG_BCM4334W is not set -# CONFIG_BCM43454 is not set -CONFIG_BCMDHD_FW_PATH="/etc/wifi/bcmdhd_sta.bin" -CONFIG_BCMDHD_NVRAM_PATH="/etc/wifi/nvram_net.txt" -CONFIG_BROADCOM_WIFI_RESERVED_MEM=y -CONFIG_WLAN_REGION_CODE=100 -CONFIG_WLAIBSS=y -CONFIG_WL_RELMCAST=y -# CONFIG_WL_NAN is not set -CONFIG_BCMDHD_PCIE=y -# CONFIG_BCMDHD_PREALLOC_PKTIDMAP is not set -CONFIG_BCMDHD_PREALLOC_MEMDUMP=y -# CONFIG_WLAN_HERO is not set -# CONFIG_WLAN_HERO2 is not set -CONFIG_BCMDHD_OOB_HOST_WAKE=y -# CONFIG_SPLIT_ARGOS_SET is not set -# CONFIG_WLAN_GRACE is not set -# CONFIG_WLAN_GREAT is not set -# CONFIG_BCM_DETECT_CONSECUTIVE_HANG is not set -# CONFIG_WLAN_TSQ_MULTIPLIER is not set -# CONFIG_DHD_DRIVEN_RANDOM_MAC_SCAN is not set -CONFIG_WLAN_VENDOR_CISCO=y -CONFIG_WLAN_VENDOR_INTEL=y -# CONFIG_IPW2100 is not set -# CONFIG_IPW2200 is not set -CONFIG_WLAN_VENDOR_INTERSIL=y -# CONFIG_HOSTAP is not set -# CONFIG_HERMES is not set -# CONFIG_PRISM54 is not set -CONFIG_WLAN_VENDOR_MARVELL=y -# CONFIG_LIBERTAS is not set -# CONFIG_MWIFIEX is not set -CONFIG_WLAN_VENDOR_MEDIATEK=y -CONFIG_WLAN_VENDOR_RALINK=y -CONFIG_WLAN_VENDOR_REALTEK=y -CONFIG_WLAN_VENDOR_RSI=y -CONFIG_WLAN_VENDOR_ST=y -CONFIG_WLAN_VENDOR_TI=y -CONFIG_WLAN_VENDOR_ZYDAS=y -# CONFIG_USB_ZD1201 is not set -# CONFIG_USB_NET_RNDIS_WLAN is not set - -# -# Enable WiMAX (Networking options) to see the WiMAX drivers -# -# CONFIG_WAN is not set -# CONFIG_VMXNET3 is not set -# CONFIG_ISDN is not set -# CONFIG_NVM is not set - -# -# Input device support -# -CONFIG_INPUT=y -CONFIG_INPUT_LEDS=y -CONFIG_INPUT_FF_MEMLESS=y -# CONFIG_INPUT_POLLDEV is not set -# CONFIG_INPUT_SPARSEKMAP is not set -# CONFIG_INPUT_MATRIXKMAP is not set - -# -# Userland interfaces -# -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -CONFIG_INPUT_EVDEV=y -# CONFIG_INPUT_EVBUG is not set -CONFIG_INPUT_KEYRESET=y -# CONFIG_INPUT_TOUCHSCREEN_TCLM is not set -CONFIG_INPUT_TOUCHSCREEN_TCLMV2=y -CONFIG_INPUT_KEYCOMBO=y -CONFIG_HALL=y -CONFIG_HALL_EVENT_REVERSE=y -CONFIG_CERTIFY_HALL=y -# CONFIG_GLOVE_TOUCH is not set - -# -# Input Device Drivers -# -CONFIG_INPUT_KEYBOARD=y -# CONFIG_KEYBOARD_ADC is not set -# CONFIG_KEYBOARD_ADP5588 is not set -# CONFIG_KEYBOARD_ADP5589 is not set -CONFIG_KEYBOARD_ATKBD=y -# CONFIG_KEYBOARD_QT1070 is not set -# CONFIG_KEYBOARD_QT2160 is not set -# CONFIG_KEYBOARD_LKKBD is not set -CONFIG_KEYBOARD_GPIO=y -# CONFIG_KEYBOARD_GPIO_POLLED is not set -# CONFIG_KEYBOARD_TCA6416 is not set -# CONFIG_KEYBOARD_TCA8418 is not set -# CONFIG_KEYBOARD_MATRIX is not set -# CONFIG_KEYBOARD_LM8323 is not set -# CONFIG_KEYBOARD_LM8333 is not set -# CONFIG_KEYBOARD_MAX7359 is not set -# CONFIG_KEYBOARD_MCS is not set -# CONFIG_KEYBOARD_MPR121 is not set -# CONFIG_KEYBOARD_NEWTON is not set -# CONFIG_KEYBOARD_OPENCORES is not set -# CONFIG_KEYBOARD_SAMSUNG is not set -# CONFIG_KEYBOARD_STOWAWAY is not set -# CONFIG_KEYBOARD_SUNKBD is not set -# CONFIG_KEYBOARD_OMAP4 is not set -# CONFIG_KEYBOARD_XTKBD is not set -# CONFIG_KEYBOARD_CAP11XX is not set -# CONFIG_KEYBOARD_BCM is not set -# CONFIG_INPUT_MOUSE is not set -CONFIG_INPUT_JOYSTICK=y -# CONFIG_JOYSTICK_ANALOG is not set -# CONFIG_JOYSTICK_A3D is not set -# CONFIG_JOYSTICK_ADI is not set -# CONFIG_JOYSTICK_COBRA is not set -# CONFIG_JOYSTICK_GF2K is not set -# CONFIG_JOYSTICK_GRIP is not set -# CONFIG_JOYSTICK_GRIP_MP is not set -# CONFIG_JOYSTICK_GUILLEMOT is not set -# CONFIG_JOYSTICK_INTERACT is not set -# CONFIG_JOYSTICK_SIDEWINDER is not set -# CONFIG_JOYSTICK_TMDC is not set -# CONFIG_JOYSTICK_IFORCE is not set -# CONFIG_JOYSTICK_WARRIOR is not set -# CONFIG_JOYSTICK_MAGELLAN is not set -# CONFIG_JOYSTICK_SPACEORB is not set -# CONFIG_JOYSTICK_SPACEBALL is not set -# CONFIG_JOYSTICK_STINGER is not set -# CONFIG_JOYSTICK_TWIDJOY is not set -# CONFIG_JOYSTICK_ZHENHUA is not set -# CONFIG_JOYSTICK_AS5011 is not set -# CONFIG_JOYSTICK_JOYDUMP is not set -CONFIG_JOYSTICK_XPAD=y -CONFIG_JOYSTICK_XPAD_FF=y -CONFIG_JOYSTICK_XPAD_LEDS=y -CONFIG_INPUT_TABLET=y -CONFIG_TABLET_USB_ACECAD=y -CONFIG_TABLET_USB_AIPTEK=y -CONFIG_TABLET_USB_GTCO=y -CONFIG_TABLET_USB_HANWANG=y -CONFIG_TABLET_USB_KBTAB=y -# CONFIG_TABLET_USB_PEGASUS is not set -# CONFIG_TABLET_SERIAL_WACOM4 is not set -CONFIG_INPUT_TOUCHSCREEN=y -CONFIG_TOUCHSCREEN_PROPERTIES=y -# CONFIG_TOUCHSCREEN_ADS7846 is not set -# CONFIG_TOUCHSCREEN_AD7877 is not set -# CONFIG_TOUCHSCREEN_AD7879 is not set -# CONFIG_TOUCHSCREEN_AR1021_I2C is not set -# CONFIG_TOUCHSCREEN_ATMEL_MXT is not set -# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set -# CONFIG_TOUCHSCREEN_BU21013 is not set -# CONFIG_TOUCHSCREEN_CHIPONE_ICN8318 is not set -# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set -# CONFIG_TOUCHSCREEN_CYTTSP_CORE is not set -# CONFIG_TOUCHSCREEN_CYTTSP4_CORE is not set -# CONFIG_TOUCHSCREEN_DYNAPRO is not set -# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set -# CONFIG_TOUCHSCREEN_EETI is not set -# CONFIG_TOUCHSCREEN_EGALAX is not set -# CONFIG_TOUCHSCREEN_EGALAX_SERIAL is not set -# CONFIG_TOUCHSCREEN_FUJITSU is not set -# CONFIG_TOUCHSCREEN_GOODIX is not set -# CONFIG_TOUCHSCREEN_ILI210X is not set -# CONFIG_TOUCHSCREEN_GUNZE is not set -# CONFIG_TOUCHSCREEN_EKTF2127 is not set -# CONFIG_TOUCHSCREEN_ELAN is not set -# CONFIG_TOUCHSCREEN_ELO is not set -# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set -# CONFIG_TOUCHSCREEN_WACOM_I2C is not set -# CONFIG_TOUCHSCREEN_MAX11801 is not set -# CONFIG_TOUCHSCREEN_MCS5000 is not set -# CONFIG_TOUCHSCREEN_MMS114 is not set -# CONFIG_TOUCHSCREEN_MELFAS_MIP4 is not set -# CONFIG_TOUCHSCREEN_MTOUCH is not set -# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set -# CONFIG_TOUCHSCREEN_INEXIO is not set -# CONFIG_TOUCHSCREEN_MK712 is not set -# CONFIG_TOUCHSCREEN_PENMOUNT is not set -# CONFIG_TOUCHSCREEN_EDT_FT5X06 is not set -# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set -# CONFIG_TOUCHSCREEN_TOUCHWIN is not set -# CONFIG_TOUCHSCREEN_PIXCIR is not set -# CONFIG_TOUCHSCREEN_WDT87XX_I2C is not set -# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set -# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set -# CONFIG_TOUCHSCREEN_TSC_SERIO is not set -# CONFIG_TOUCHSCREEN_TSC2004 is not set -# CONFIG_TOUCHSCREEN_TSC2005 is not set -# CONFIG_TOUCHSCREEN_TSC2007 is not set -# CONFIG_TOUCHSCREEN_RM_TS is not set -# CONFIG_TOUCHSCREEN_SILEAD is not set -# CONFIG_TOUCHSCREEN_SIS_I2C is not set -# CONFIG_TOUCHSCREEN_ST1232 is not set -# CONFIG_TOUCHSCREEN_SURFACE3_SPI is not set -# CONFIG_TOUCHSCREEN_SX8654 is not set -# CONFIG_TOUCHSCREEN_TPS6507X is not set -# CONFIG_TOUCHSCREEN_ZFORCE is not set -# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set -CONFIG_TOUCHSCREEN_DUMP_MODE=y -# CONFIG_TOUCHSCREEN_SEC_TS is not set -# CONFIG_TOUCHSCREEN_SEC_TS_GLOVEMODE is not set -CONFIG_TOUCHSCREEN_SEC_TS_Y771=y -# CONFIG_TOUCHSCREEN_FTS is not set -# CONFIG_TOUCHSCREEN_FTS7 is not set -# CONFIG_TOUCHSCREEN_FTS7_VALLEY is not set -# CONFIG_TOUCHSCREEN_FTS7_HAECHI is not set -CONFIG_INPUT_WACOM=y -CONFIG_EPEN_WACOM_W9018=y -# CONFIG_WACOM_LCD_FREQ_COMPENSATE is not set -CONFIG_INPUT_MISC=y -# CONFIG_INPUT_AD714X is not set -# CONFIG_INPUT_ATMEL_CAPTOUCH is not set -# CONFIG_INPUT_BMA150 is not set -# CONFIG_INPUT_E3X0_BUTTON is not set -# CONFIG_INPUT_MMA8450 is not set -# CONFIG_INPUT_MPU3050 is not set -# CONFIG_INPUT_GP2A is not set -# CONFIG_INPUT_GPIO_BEEPER is not set -# CONFIG_INPUT_GPIO_TILT_POLLED is not set -# CONFIG_INPUT_GPIO_DECODER is not set -# CONFIG_INPUT_ATI_REMOTE2 is not set -CONFIG_INPUT_KEYCHORD=y -# CONFIG_INPUT_KEYSPAN_REMOTE is not set -# CONFIG_INPUT_KXTJ9 is not set -# CONFIG_INPUT_POWERMATE is not set -# CONFIG_INPUT_YEALINK is not set -# CONFIG_INPUT_CM109 is not set -# CONFIG_INPUT_REGULATOR_HAPTIC is not set -CONFIG_INPUT_UINPUT=y -CONFIG_INPUT_GPIO=y -# CONFIG_INPUT_PCF8574 is not set -# CONFIG_INPUT_PWM_BEEPER is not set -# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set -# CONFIG_INPUT_ADXL34X is not set -# CONFIG_INPUT_IMS_PCU is not set -# CONFIG_INPUT_CMA3000 is not set -# CONFIG_INPUT_SOC_BUTTON_ARRAY is not set -# CONFIG_INPUT_DRV260X_HAPTICS is not set -# CONFIG_INPUT_DRV2665_HAPTICS is not set -# CONFIG_INPUT_DRV2667_HAPTICS is not set -# CONFIG_RMI4_CORE is not set - -# -# Hardware I/O ports -# -CONFIG_SERIO=y -# CONFIG_SERIO_SERPORT is not set -# CONFIG_SERIO_AMBAKMI is not set -# CONFIG_SERIO_PCIPS2 is not set -CONFIG_SERIO_LIBPS2=y -# CONFIG_SERIO_RAW is not set -# CONFIG_SERIO_ALTERA_PS2 is not set -# CONFIG_SERIO_PS2MULT is not set -# CONFIG_SERIO_ARC_PS2 is not set -# CONFIG_SERIO_APBPS2 is not set -# CONFIG_USERIO is not set -# CONFIG_GAMEPORT is not set - -# -# Character devices -# -CONFIG_TTY=y -# CONFIG_VT is not set -CONFIG_UNIX98_PTYS=y -# CONFIG_LEGACY_PTYS is not set -# CONFIG_SERIAL_NONSTANDARD is not set -# CONFIG_NOZOMI is not set -# CONFIG_N_GSM is not set -# CONFIG_TRACE_SINK is not set -# CONFIG_DEVMEM is not set -# CONFIG_DEVKMEM is not set - -# -# Serial drivers -# -CONFIG_SERIAL_EARLYCON=y -# CONFIG_SERIAL_8250 is not set - -# -# Non-8250 serial port support -# -# CONFIG_SERIAL_AMBA_PL010 is not set -# CONFIG_SERIAL_AMBA_PL011 is not set -# CONFIG_SERIAL_EARLYCON_ARM_SEMIHOST is not set -CONFIG_SERIAL_SAMSUNG=y -CONFIG_SERIAL_SAMSUNG_UARTS_4=y -CONFIG_SERIAL_SAMSUNG_UARTS=4 -CONFIG_SERIAL_SAMSUNG_CONSOLE=y -CONFIG_S3C_LOWLEVEL_UART_PORT=0 -CONFIG_SERIAL_SAMSUNG_HWACG=y -# CONFIG_SERIAL_MAX3100 is not set -# CONFIG_SERIAL_MAX310X is not set -# CONFIG_SERIAL_UARTLITE is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -# CONFIG_SERIAL_JSM is not set -# CONFIG_SERIAL_SCCNXP is not set -# CONFIG_SERIAL_SC16IS7XX is not set -# CONFIG_SERIAL_ALTERA_JTAGUART is not set -# CONFIG_SERIAL_ALTERA_UART is not set -# CONFIG_SERIAL_IFX6X60 is not set -# CONFIG_SERIAL_XILINX_PS_UART is not set -# CONFIG_SERIAL_ARC is not set -# CONFIG_SERIAL_RP2 is not set -# CONFIG_SERIAL_FSL_LPUART is not set -# CONFIG_SERIAL_CONEXANT_DIGICOLOR is not set -# CONFIG_TTY_PRINTK is not set -# CONFIG_HVC_DCC is not set -# CONFIG_IPMI_HANDLER is not set -CONFIG_HW_RANDOM=y -# CONFIG_HW_RANDOM_TIMERIOMEM is not set -# CONFIG_HW_RANDOM_EXYNOS is not set -CONFIG_HW_RANDOM_CAVIUM=y -CONFIG_HW_RANDOM_EXYNOS_SWD=y -CONFIG_EXYRNG_FIPS_COMPLIANCE=y -# CONFIG_EXYRNG_FAIL_POLICY_DISABLE is not set -CONFIG_EXYRNG_FAIL_POLICY_RESET=y -CONFIG_EXYRNG_USE_CRYPTOMANAGER=y -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# PCMCIA character devices -# -# CONFIG_RAW_DRIVER is not set -# CONFIG_TCG_TPM is not set -# CONFIG_XILLYBUS is not set - -# -# I2C support -# -CONFIG_I2C=y -CONFIG_I2C_BOARDINFO=y -CONFIG_I2C_COMPAT=y -CONFIG_I2C_CHARDEV=y -CONFIG_I2C_MUX=y - -# -# Multiplexer I2C Chip support -# -# CONFIG_I2C_ARB_GPIO_CHALLENGE is not set -# CONFIG_I2C_MUX_GPIO is not set -# CONFIG_I2C_MUX_PCA9541 is not set -# CONFIG_I2C_MUX_PCA954x is not set -# CONFIG_I2C_MUX_PINCTRL is not set -# CONFIG_I2C_MUX_REG is not set -# CONFIG_I2C_DEMUX_PINCTRL is not set -CONFIG_I2C_HELPER_AUTO=y - -# -# I2C Hardware Bus support -# - -# -# PC SMBus host controller drivers -# -# CONFIG_I2C_ALI1535 is not set -# CONFIG_I2C_ALI1563 is not set -# CONFIG_I2C_ALI15X3 is not set -# CONFIG_I2C_AMD756 is not set -# CONFIG_I2C_AMD8111 is not set -# CONFIG_I2C_I801 is not set -# CONFIG_I2C_ISCH is not set -# CONFIG_I2C_PIIX4 is not set -# CONFIG_I2C_NFORCE2 is not set -# CONFIG_I2C_SIS5595 is not set -# CONFIG_I2C_SIS630 is not set -# CONFIG_I2C_SIS96X is not set -# CONFIG_I2C_VIA is not set -# CONFIG_I2C_VIAPRO is not set - -# -# I2C system bus drivers (mostly embedded / system-on-chip) -# -# CONFIG_I2C_CADENCE is not set -# CONFIG_I2C_CBUS_GPIO is not set -# CONFIG_I2C_DESIGNWARE_PLATFORM is not set -# CONFIG_I2C_DESIGNWARE_PCI is not set -# CONFIG_I2C_EMEV2 is not set -CONFIG_I2C_EXYNOS5=y -CONFIG_I2C_SAMSUNG_HWACG=y -CONFIG_EXYNOS_SPEEDY=y -# CONFIG_I2C_GPIO is not set -# CONFIG_I2C_NOMADIK is not set -# CONFIG_I2C_OCORES is not set -# CONFIG_I2C_PCA_PLATFORM is not set -# CONFIG_I2C_PXA_PCI is not set -# CONFIG_I2C_RK3X is not set -CONFIG_HAVE_S3C2410_I2C=y -# CONFIG_I2C_S3C2410 is not set -# CONFIG_I2C_SIMTEC is not set -# CONFIG_I2C_THUNDERX is not set -# CONFIG_I2C_XILINX is not set - -# -# External I2C/SMBus adapter drivers -# -# CONFIG_I2C_DIOLAN_U2C is not set -# CONFIG_I2C_PARPORT_LIGHT is not set -# CONFIG_I2C_ROBOTFUZZ_OSIF is not set -# CONFIG_I2C_TAOS_EVM is not set -# CONFIG_I2C_TINY_USB is not set - -# -# Other I2C/SMBus bus drivers -# -# CONFIG_I2C_STUB is not set -# CONFIG_I2C_SLAVE is not set -# CONFIG_I2C_DEBUG_CORE is not set -# CONFIG_I2C_DEBUG_ALGO is not set -# CONFIG_I2C_DEBUG_BUS is not set -CONFIG_SPI=y -# CONFIG_SPI_DEBUG is not set -CONFIG_SPI_MASTER=y - -# -# SPI Master Controller Drivers -# -# CONFIG_SPI_ALTERA is not set -# CONFIG_SPI_AXI_SPI_ENGINE is not set -CONFIG_SPI_BITBANG=y -# CONFIG_SPI_CADENCE is not set -# CONFIG_SPI_DESIGNWARE is not set -CONFIG_SPI_GPIO=y -# CONFIG_SPI_FSL_SPI is not set -CONFIG_SENSORS_FP_SPI_NUMBER=1 -# CONFIG_SPI_OC_TINY is not set -# CONFIG_SPI_PL022 is not set -# CONFIG_SPI_PXA2XX is not set -# CONFIG_SPI_PXA2XX_PCI is not set -# CONFIG_SPI_ROCKCHIP is not set -CONFIG_SPI_S3C64XX=y -# CONFIG_SPI_SC18IS602 is not set -# CONFIG_SPI_THUNDERX is not set -# CONFIG_SPI_XCOMM is not set -# CONFIG_SPI_XILINX is not set -# CONFIG_SPI_ZYNQMP_GQSPI is not set - -# -# SPI Protocol Masters -# -CONFIG_SPI_SPIDEV=y -# CONFIG_SPI_LOOPBACK_TEST is not set -# CONFIG_SPI_TLE62X0 is not set -# CONFIG_SPMI is not set -# CONFIG_HSI is not set - -# -# PPS support -# -# CONFIG_PPS is not set - -# -# PPS generators support -# - -# -# PTP clock support -# -# CONFIG_PTP_1588_CLOCK is not set - -# -# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. -# -CONFIG_PINCTRL=y - -# -# Pin controllers -# -CONFIG_PINMUX=y -CONFIG_PINCONF=y -CONFIG_GENERIC_PINCONF=y -# CONFIG_DEBUG_PINCTRL is not set -# CONFIG_PINCTRL_AMD is not set -# CONFIG_PINCTRL_SINGLE is not set -CONFIG_PINCTRL_SAMSUNG=y -CONFIG_PINCTRL_EXYNOS=y -# CONFIG_SEC_GPIO_DVS is not set -CONFIG_PINCTRL_MADERA=y -CONFIG_PINCTRL_CS47L92=y -CONFIG_GPIOLIB=y -CONFIG_OF_GPIO=y -# CONFIG_DEBUG_GPIO is not set -CONFIG_GPIO_SYSFS=y - -# -# Memory mapped GPIO drivers -# -# CONFIG_GPIO_74XX_MMIO is not set -# CONFIG_GPIO_ALTERA is not set -# CONFIG_GPIO_DWAPB is not set -# CONFIG_GPIO_GENERIC_PLATFORM is not set -# CONFIG_GPIO_GRGPIO is not set -# CONFIG_GPIO_MOCKUP is not set -# CONFIG_GPIO_PL061 is not set -# CONFIG_GPIO_SYSCON is not set -# CONFIG_GPIO_VX855 is not set -# CONFIG_GPIO_XGENE is not set -# CONFIG_GPIO_XILINX is not set -# CONFIG_GPIO_ZX is not set - -# -# I2C GPIO expanders -# -# CONFIG_GPIO_ADP5588 is not set -# CONFIG_GPIO_ADNP is not set -# CONFIG_GPIO_MAX7300 is not set -# CONFIG_GPIO_MAX732X is not set -# CONFIG_GPIO_PCA953X is not set -CONFIG_GPIO_PCAL6524=y -# CONFIG_GPIO_PCF857X is not set -# CONFIG_GPIO_SX150X is not set -# CONFIG_GPIO_TPIC2810 is not set -# CONFIG_GPIO_TS4900 is not set - -# -# MFD GPIO expanders -# -# CONFIG_GPIO_MADERA is not set - -# -# PCI GPIO expanders -# -# CONFIG_GPIO_AMD8111 is not set -# CONFIG_GPIO_BT8XX is not set -# CONFIG_GPIO_ML_IOH is not set -# CONFIG_GPIO_RDC321X is not set - -# -# SPI GPIO expanders -# -# CONFIG_GPIO_74X164 is not set -# CONFIG_GPIO_MAX7301 is not set -# CONFIG_GPIO_MC33880 is not set -# CONFIG_GPIO_PISOSR is not set - -# -# SPI or I2C GPIO expanders -# -# CONFIG_GPIO_MCP23S08 is not set - -# -# USB GPIO expanders -# -# CONFIG_W1 is not set -CONFIG_POWER_SUPPLY=y -# CONFIG_POWER_SUPPLY_DEBUG is not set -# CONFIG_PDA_POWER is not set -# CONFIG_GENERIC_ADC_BATTERY is not set -# CONFIG_TEST_POWER is not set -# CONFIG_BATTERY_DS2780 is not set -# CONFIG_BATTERY_DS2781 is not set -# CONFIG_BATTERY_DS2782 is not set -# CONFIG_BATTERY_SBS is not set -# CONFIG_BATTERY_BQ27XXX is not set -# CONFIG_BATTERY_MAX17040 is not set -# CONFIG_BATTERY_MAX17042 is not set -# CONFIG_CHARGER_MAX8903 is not set -# CONFIG_CHARGER_LP8727 is not set -# CONFIG_CHARGER_GPIO is not set -# CONFIG_CHARGER_MANAGER is not set -# CONFIG_CHARGER_BQ2415X is not set -# CONFIG_CHARGER_BQ24190 is not set -# CONFIG_CHARGER_BQ24257 is not set -# CONFIG_CHARGER_BQ24735 is not set -# CONFIG_CHARGER_BQ25890 is not set -# CONFIG_CHARGER_SMB347 is not set -# CONFIG_BATTERY_GAUGE_LTC2941 is not set -# CONFIG_CHARGER_RT9455 is not set -CONFIG_POWER_RESET=y -# CONFIG_POWER_RESET_GPIO is not set -# CONFIG_POWER_RESET_GPIO_RESTART is not set -# CONFIG_POWER_RESET_LTC2952 is not set -# CONFIG_POWER_RESET_RESTART is not set -# CONFIG_POWER_RESET_XGENE is not set -# CONFIG_POWER_RESET_SYSCON is not set -# CONFIG_POWER_RESET_SYSCON_POWEROFF is not set -# CONFIG_POWER_AVS is not set -CONFIG_HWMON=y -# CONFIG_HWMON_VID is not set -# CONFIG_HWMON_DEBUG_CHIP is not set - -# -# Native drivers -# -# CONFIG_SENSORS_AD7314 is not set -# CONFIG_SENSORS_AD7414 is not set -# CONFIG_SENSORS_AD7418 is not set -# CONFIG_SENSORS_ADM1021 is not set -# CONFIG_SENSORS_ADM1025 is not set -# CONFIG_SENSORS_ADM1026 is not set -# CONFIG_SENSORS_ADM1029 is not set -# CONFIG_SENSORS_ADM1031 is not set -# CONFIG_SENSORS_ADM9240 is not set -# CONFIG_SENSORS_ADT7310 is not set -# CONFIG_SENSORS_ADT7410 is not set -# CONFIG_SENSORS_ADT7411 is not set -# CONFIG_SENSORS_ADT7462 is not set -# CONFIG_SENSORS_ADT7470 is not set -# CONFIG_SENSORS_ADT7475 is not set -# CONFIG_SENSORS_ASC7621 is not set -# CONFIG_SENSORS_ATXP1 is not set -# CONFIG_SENSORS_DS620 is not set -# CONFIG_SENSORS_DS1621 is not set -# CONFIG_SENSORS_I5K_AMB is not set -# CONFIG_SENSORS_F71805F is not set -# CONFIG_SENSORS_F71882FG is not set -# CONFIG_SENSORS_F75375S is not set -# CONFIG_SENSORS_FTSTEUTATES is not set -# CONFIG_SENSORS_GL518SM is not set -# CONFIG_SENSORS_GL520SM is not set -# CONFIG_SENSORS_G760A is not set -# CONFIG_SENSORS_G762 is not set -# CONFIG_SENSORS_GPIO_FAN is not set -# CONFIG_SENSORS_HIH6130 is not set -# CONFIG_SENSORS_IIO_HWMON is not set -# CONFIG_SENSORS_IT87 is not set -# CONFIG_SENSORS_JC42 is not set -# CONFIG_SENSORS_POWR1220 is not set -# CONFIG_SENSORS_LINEAGE is not set -# CONFIG_SENSORS_LTC2945 is not set -# CONFIG_SENSORS_LTC2990 is not set -# CONFIG_SENSORS_LTC4151 is not set -# CONFIG_SENSORS_LTC4215 is not set -# CONFIG_SENSORS_LTC4222 is not set -# CONFIG_SENSORS_LTC4245 is not set -# CONFIG_SENSORS_LTC4260 is not set -# CONFIG_SENSORS_LTC4261 is not set -# CONFIG_SENSORS_MAX1111 is not set -# CONFIG_SENSORS_MAX16065 is not set -# CONFIG_SENSORS_MAX1619 is not set -# CONFIG_SENSORS_MAX1668 is not set -# CONFIG_SENSORS_MAX197 is not set -# CONFIG_SENSORS_MAX31722 is not set -# CONFIG_SENSORS_MAX6639 is not set -# CONFIG_SENSORS_MAX6642 is not set -# CONFIG_SENSORS_MAX6650 is not set -# CONFIG_SENSORS_MAX6697 is not set -# CONFIG_SENSORS_MAX31790 is not set -# CONFIG_SENSORS_MCP3021 is not set -# CONFIG_SENSORS_ADCXX is not set -# CONFIG_SENSORS_LM63 is not set -# CONFIG_SENSORS_LM70 is not set -# CONFIG_SENSORS_LM73 is not set -# CONFIG_SENSORS_LM75 is not set -# CONFIG_SENSORS_LM77 is not set -# CONFIG_SENSORS_LM78 is not set -# CONFIG_SENSORS_LM80 is not set -# CONFIG_SENSORS_LM83 is not set -# CONFIG_SENSORS_LM85 is not set -# CONFIG_SENSORS_LM87 is not set -# CONFIG_SENSORS_LM90 is not set -# CONFIG_SENSORS_LM92 is not set -# CONFIG_SENSORS_LM93 is not set -# CONFIG_SENSORS_LM95234 is not set -# CONFIG_SENSORS_LM95241 is not set -# CONFIG_SENSORS_LM95245 is not set -# CONFIG_SENSORS_PC87360 is not set -# CONFIG_SENSORS_PC87427 is not set -# CONFIG_SENSORS_NTC_THERMISTOR is not set -# CONFIG_SENSORS_NCT6683 is not set -# CONFIG_SENSORS_NCT6775 is not set -# CONFIG_SENSORS_NCT7802 is not set -# CONFIG_SENSORS_NCT7904 is not set -# CONFIG_SENSORS_PCF8591 is not set -# CONFIG_PMBUS is not set -# CONFIG_SENSORS_PWM_FAN is not set -# CONFIG_SENSORS_SHT15 is not set -# CONFIG_SENSORS_SHT21 is not set -# CONFIG_SENSORS_SHT3x is not set -# CONFIG_SENSORS_SHTC1 is not set -# CONFIG_SENSORS_SIS5595 is not set -# CONFIG_SENSORS_DME1737 is not set -# CONFIG_SENSORS_EMC1403 is not set -# CONFIG_SENSORS_EMC2103 is not set -# CONFIG_SENSORS_EMC6W201 is not set -# CONFIG_SENSORS_SMSC47M1 is not set -# CONFIG_SENSORS_SMSC47M192 is not set -# CONFIG_SENSORS_SMSC47B397 is not set -# CONFIG_SENSORS_SCH56XX_COMMON is not set -# CONFIG_SENSORS_SCH5627 is not set -# CONFIG_SENSORS_SCH5636 is not set -# CONFIG_SENSORS_SMM665 is not set -# CONFIG_SENSORS_ADC128D818 is not set -# CONFIG_SENSORS_ADS1015 is not set -# CONFIG_SENSORS_ADS7828 is not set -# CONFIG_SENSORS_ADS7871 is not set -# CONFIG_SENSORS_AMC6821 is not set -# CONFIG_SENSORS_INA209 is not set -# CONFIG_SENSORS_INA2XX is not set -# CONFIG_SENSORS_INA3221 is not set -# CONFIG_SENSORS_TC74 is not set -# CONFIG_SENSORS_THMC50 is not set -# CONFIG_SENSORS_TMP102 is not set -# CONFIG_SENSORS_TMP103 is not set -# CONFIG_SENSORS_TMP401 is not set -# CONFIG_SENSORS_TMP421 is not set -# CONFIG_SENSORS_VIA686A is not set -# CONFIG_SENSORS_VT1211 is not set -# CONFIG_SENSORS_VT8231 is not set -# CONFIG_SENSORS_W83781D is not set -# CONFIG_SENSORS_W83791D is not set -# CONFIG_SENSORS_W83792D is not set -# CONFIG_SENSORS_W83793 is not set -# CONFIG_SENSORS_W83795 is not set -# CONFIG_SENSORS_W83L785TS is not set -# CONFIG_SENSORS_W83L786NG is not set -# CONFIG_SENSORS_W83627HF is not set -# CONFIG_SENSORS_W83627EHF is not set -CONFIG_SENSORS_SEC_THERMISTOR=y -CONFIG_THERMAL=y -CONFIG_THERMAL_HWMON=y -CONFIG_THERMAL_OF=y -CONFIG_THERMAL_WRITABLE_TRIPS=y -CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y -# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set -# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set -# CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR is not set -# CONFIG_THERMAL_GOV_FAIR_SHARE is not set -CONFIG_THERMAL_GOV_STEP_WISE=y -# CONFIG_THERMAL_GOV_BANG_BANG is not set -# CONFIG_THERMAL_GOV_USER_SPACE is not set -CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y -CONFIG_CPU_THERMAL=y -# CONFIG_CLOCK_THERMAL is not set -# CONFIG_DEVFREQ_THERMAL is not set -CONFIG_GPU_THERMAL=y -CONFIG_ISP_THERMAL=y -CONFIG_THERMAL_EMULATION=y -# CONFIG_QORIQ_THERMAL is not set - -# -# ACPI INT340X thermal drivers -# - -# -# Samsung thermal drivers -# -CONFIG_EXYNOS_THERMAL=y -CONFIG_EXYNOS_ACPM_THERMAL=y -# CONFIG_GENERIC_ADC_THERMAL is not set -CONFIG_WATCHDOG=y -CONFIG_WATCHDOG_CORE=y -# CONFIG_WATCHDOG_NOWAYOUT is not set -# CONFIG_WATCHDOG_SYSFS is not set - -# -# Watchdog Device Drivers -# -CONFIG_SOFT_WATCHDOG=y -# CONFIG_GPIO_WATCHDOG is not set -# CONFIG_XILINX_WATCHDOG is not set -# CONFIG_ZIIRAVE_WATCHDOG is not set -# CONFIG_ARM_SP805_WATCHDOG is not set -# CONFIG_ARM_SBSA_WATCHDOG is not set -# CONFIG_CADENCE_WATCHDOG is not set -CONFIG_HAVE_S3C2410_WATCHDOG=y -CONFIG_S3C2410_WATCHDOG=y -CONFIG_S3C2410_SHUTDOWN_REBOOT=y -# CONFIG_DW_WATCHDOG is not set -# CONFIG_MAX63XX_WATCHDOG is not set -# CONFIG_ALIM7101_WDT is not set -# CONFIG_I6300ESB_WDT is not set -# CONFIG_MEN_A21_WDT is not set - -# -# PCI-based Watchdog Cards -# -# CONFIG_PCIPCWATCHDOG is not set -# CONFIG_WDTPCI is not set - -# -# USB-based Watchdog Cards -# -# CONFIG_USBPCWATCHDOG is not set - -# -# Watchdog Pretimeout Governors -# -# CONFIG_WATCHDOG_PRETIMEOUT_GOV is not set -CONFIG_SSB_POSSIBLE=y - -# -# Sonics Silicon Backplane -# -# CONFIG_SSB is not set -CONFIG_BCMA_POSSIBLE=y - -# -# Broadcom specific AMBA -# -# CONFIG_BCMA is not set - -# -# Multifunction device drivers -# -CONFIG_MFD_CORE=y -# CONFIG_MFD_ACT8945A is not set -# CONFIG_MFD_AS3711 is not set -# CONFIG_MFD_AS3722 is not set -# CONFIG_PMIC_ADP5520 is not set -# CONFIG_MFD_AAT2870_CORE is not set -# CONFIG_MFD_ATMEL_FLEXCOM is not set -# CONFIG_MFD_ATMEL_HLCDC is not set -# CONFIG_MFD_BCM590XX is not set -# CONFIG_MFD_AXP20X_I2C is not set -# CONFIG_MFD_CROS_EC is not set -CONFIG_MFD_MADERA=y -# CONFIG_MFD_MADERA_I2C is not set -CONFIG_MFD_MADERA_SPI=y -# CONFIG_MFD_CS47L35 is not set -# CONFIG_MFD_CS47L85 is not set -# CONFIG_MFD_CS47L90 is not set -CONFIG_MFD_CS47L92=y -# CONFIG_PMIC_DA903X is not set -# CONFIG_MFD_DA9052_SPI is not set -# CONFIG_MFD_DA9052_I2C is not set -# CONFIG_MFD_DA9055 is not set -# CONFIG_MFD_DA9062 is not set -# CONFIG_MFD_DA9063 is not set -# CONFIG_MFD_DA9150 is not set -# CONFIG_MFD_DLN2 is not set -# CONFIG_MFD_EXYNOS_LPASS is not set -# CONFIG_MFD_MC13XXX_SPI is not set -# CONFIG_MFD_MC13XXX_I2C is not set -# CONFIG_MFD_HI6421_PMIC is not set -# CONFIG_HTC_PASIC3 is not set -# CONFIG_HTC_I2CPLD is not set -# CONFIG_LPC_ICH is not set -# CONFIG_LPC_SCH is not set -# CONFIG_INTEL_SOC_PMIC is not set -# CONFIG_MFD_JANZ_CMODIO is not set -# CONFIG_MFD_KEMPLD is not set -# CONFIG_MFD_88PM800 is not set -# CONFIG_MFD_88PM805 is not set -# CONFIG_MFD_88PM860X is not set -# CONFIG_MFD_MAX14577 is not set -# CONFIG_MFD_MAX77620 is not set -# CONFIG_MFD_MAX77686 is not set -# CONFIG_MFD_MAX77693 is not set -# CONFIG_MFD_MAX77843 is not set -# CONFIG_MFD_MAX77865 is not set -CONFIG_MFD_MAX77705=y -# CONFIG_MFD_MAX8907 is not set -# CONFIG_MFD_MAX8925 is not set -# CONFIG_MFD_MAX8997 is not set -# CONFIG_MFD_MAX8998 is not set -# CONFIG_MFD_MT6397 is not set -# CONFIG_MFD_MENF21BMC is not set -# CONFIG_EZX_PCAP is not set -# CONFIG_MFD_VIPERBOARD is not set -# CONFIG_MFD_RETU is not set -# CONFIG_MFD_PCF50633 is not set -# CONFIG_MFD_RDC321X is not set -# CONFIG_MFD_RTSX_PCI is not set -# CONFIG_MFD_RT5033 is not set -# CONFIG_MFD_RTSX_USB is not set -# CONFIG_MFD_RC5T583 is not set -# CONFIG_MFD_RK808 is not set -# CONFIG_MFD_RN5T618 is not set -CONFIG_MFD_SEC_CORE=y -# CONFIG_MFD_S2MPS17 is not set -CONFIG_MFD_S2MPS18=y -CONFIG_MFD_S2MPB02=y -# CONFIG_MFD_SI476X_CORE is not set -# CONFIG_MFD_SM501 is not set -# CONFIG_MFD_SKY81452 is not set -# CONFIG_MFD_SMSC is not set -# CONFIG_ABX500_CORE is not set -# CONFIG_MFD_STMPE is not set -CONFIG_MFD_SYSCON=y -# CONFIG_MFD_TI_AM335X_TSCADC is not set -# CONFIG_MFD_LP3943 is not set -# CONFIG_MFD_LP8788 is not set -# CONFIG_MFD_PALMAS is not set -# CONFIG_TPS6105X is not set -# CONFIG_TPS65010 is not set -# CONFIG_TPS6507X is not set -# CONFIG_MFD_TPS65086 is not set -# CONFIG_MFD_TPS65090 is not set -# CONFIG_MFD_TPS65217 is not set -# CONFIG_MFD_TI_LP873X is not set -# CONFIG_MFD_TPS65218 is not set -# CONFIG_MFD_TPS6586X is not set -# CONFIG_MFD_TPS65910 is not set -# CONFIG_MFD_TPS65912_I2C is not set -# CONFIG_MFD_TPS65912_SPI is not set -# CONFIG_MFD_TPS80031 is not set -# CONFIG_TWL4030_CORE is not set -# CONFIG_TWL6040_CORE is not set -# CONFIG_MFD_WL1273_CORE is not set -# CONFIG_MFD_LM3533 is not set -# CONFIG_MFD_TC3589X is not set -# CONFIG_MFD_TMIO is not set -# CONFIG_MFD_VX855 is not set -# CONFIG_MFD_ARIZONA_I2C is not set -# CONFIG_MFD_ARIZONA_SPI is not set -# CONFIG_MFD_WM8400 is not set -# CONFIG_MFD_WM831X_I2C is not set -# CONFIG_MFD_WM831X_SPI is not set -# CONFIG_MFD_WM8350_I2C is not set -# CONFIG_MFD_WM8994 is not set -CONFIG_REGULATOR=y -# CONFIG_REGULATOR_DEBUG is not set -CONFIG_REGULATOR_FIXED_VOLTAGE=y -# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set -# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set -# CONFIG_REGULATOR_ACT8865 is not set -# CONFIG_REGULATOR_AD5398 is not set -# CONFIG_REGULATOR_ANATOP is not set -CONFIG_REGULATOR_ARIZONA_LDO1=y -CONFIG_REGULATOR_ARIZONA_MICSUPP=y -# CONFIG_REGULATOR_DA9210 is not set -# CONFIG_REGULATOR_DA9211 is not set -# CONFIG_REGULATOR_FAN53555 is not set -# CONFIG_REGULATOR_GPIO is not set -# CONFIG_REGULATOR_ISL9305 is not set -# CONFIG_REGULATOR_ISL6271A is not set -# CONFIG_REGULATOR_LP3971 is not set -# CONFIG_REGULATOR_LP3972 is not set -# CONFIG_REGULATOR_LP872X is not set -# CONFIG_REGULATOR_LP8755 is not set -# CONFIG_REGULATOR_LTC3589 is not set -# CONFIG_REGULATOR_LTC3676 is not set -# CONFIG_REGULATOR_MAX1586 is not set -# CONFIG_REGULATOR_MAX8649 is not set -# CONFIG_REGULATOR_MAX8660 is not set -# CONFIG_REGULATOR_MAX8952 is not set -# CONFIG_REGULATOR_MAX8973 is not set -# CONFIG_REGULATOR_MT6311 is not set -# CONFIG_REGULATOR_PFUZE100 is not set -# CONFIG_REGULATOR_PV88060 is not set -# CONFIG_REGULATOR_PV88080 is not set -# CONFIG_REGULATOR_PV88090 is not set -# CONFIG_REGULATOR_PWM is not set -# CONFIG_REGULATOR_S2MPA01 is not set -# CONFIG_REGULATOR_S2MPS11 is not set -CONFIG_REGULATOR_S2MPS18=y -CONFIG_REGULATOR_S2MPB02=y -CONFIG_REGULATOR_S2MPB03=y -# CONFIG_REGULATOR_S2DOS03 is not set -CONFIG_REGULATOR_S2DOS05=y -# CONFIG_REGULATOR_S5M8767 is not set -# CONFIG_REGULATOR_TPS51632 is not set -# CONFIG_REGULATOR_TPS62360 is not set -# CONFIG_REGULATOR_TPS65023 is not set -# CONFIG_REGULATOR_TPS6507X is not set -# CONFIG_REGULATOR_TPS6524X is not set -CONFIG_MEDIA_SUPPORT=y - -# -# Multimedia core support -# -CONFIG_MEDIA_CAMERA_SUPPORT=y -# CONFIG_MEDIA_ANALOG_TV_SUPPORT is not set -# CONFIG_MEDIA_DIGITAL_TV_SUPPORT is not set -# CONFIG_MEDIA_RADIO_SUPPORT is not set -# CONFIG_MEDIA_SDR_SUPPORT is not set -# CONFIG_MEDIA_RC_SUPPORT is not set -CONFIG_MEDIA_M2M1SHOT=y -# CONFIG_MEDIA_M2M1SHOT_TESTDEV is not set -# CONFIG_MEDIA_M2M1SHOT2 is not set -# CONFIG_MEDIA_CONTROLLER is not set -CONFIG_VIDEO_DEV=y -CONFIG_VIDEO_V4L2=y -# CONFIG_VIDEO_ADV_DEBUG is not set -# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set -CONFIG_V4L2_MEM2MEM_DEV=y -CONFIG_VIDEOBUF2_CORE=y -CONFIG_VIDEOBUF2_MEMOPS=y -CONFIG_VIDEOBUF2_ION=y -# CONFIG_TTPCI_EEPROM is not set - -# -# Media drivers -# -# CONFIG_MEDIA_USB_SUPPORT is not set -# CONFIG_SEC_DL1750 is not set -# CONFIG_MEDIA_PCI_SUPPORT is not set -CONFIG_V4L_PLATFORM_DRIVERS=y -# CONFIG_VIDEO_CAFE_CCIC is not set -CONFIG_VIDEO_EXYNOS=y -CONFIG_VIDEO_EXYNOS_SCALER=y -# CONFIG_SCALER_NO_SOFTRST is not set -# CONFIG_VIDEO_EXYNOS_G2D1SHOT is not set -CONFIG_VIDEO_EXYNOS_MFC=y -CONFIG_EXYNOS_MFC_V12=y -CONFIG_VIDEO_EXYNOS_SMFC=y -CONFIG_VIDEO_EXYNOS_FIMC_IS2=y -CONFIG_EXYNOS_FIMC_IS=y -CONFIG_FIMC_IS_V6_0_0=y - -# -# Sensor/CAMIF Setting -# - -# -# CSI Setting -# -# CONFIG_EXYNOS_DEVICE_MIPI_CSIS_VER3 is not set -CONFIG_EXYNOS_DEVICE_MIPI_CSIS_VER4=y -CONFIG_CSIS_V5_1=y -CONFIG_USE_CSI_DMAOUT_FEATURE=y - -# -# BNS Setting -# -# CONFIG_EXYNOS_FIMC_BNS is not set -CONFIG_CAMERA_CIS_SELECT=y -# CONFIG_CAMERA_CIS_6B2_OBJ is not set -# CONFIG_CAMERA_CIS_5E2_OBJ is not set -# CONFIG_CAMERA_CIS_5E3_OBJ is not set -# CONFIG_CAMERA_CIS_4H5YC_OBJ is not set -# CONFIG_CAMERA_CIS_4H5_OBJ is not set -# CONFIG_CAMERA_CIS_2P2_OBJ is not set -# CONFIG_CAMERA_CIS_2P8_OBJ is not set -# CONFIG_CAMERA_CIS_3P3_OBJ is not set -# CONFIG_CAMERA_CIS_3L2_OBJ is not set -CONFIG_CAMERA_CIS_3H1_OBJ=y -# CONFIG_CAMERA_CIS_3H1_C3_OBJ is not set -# CONFIG_CAMERA_CIS_4E6_OBJ is not set -# CONFIG_CAMERA_CIS_5E6_OBJ is not set -CONFIG_CAMERA_CIS_5F1_OBJ=y -# CONFIG_CAMERA_CIS_3M2_OBJ is not set -CONFIG_CAMERA_CIS_3M3_OBJ=y -# CONFIG_CAMERA_CIS_2L1_OBJ is not set -# CONFIG_CAMERA_CIS_3P8_OBJ is not set -# CONFIG_CAMERA_CIS_3P8SP_OBJ is not set -# CONFIG_CAMERA_CIS_2P7SX_OBJ is not set -# CONFIG_CAMERA_CIS_2L2_OBJ is not set -CONFIG_CAMERA_CIS_2L3_OBJ=y -# CONFIG_CAMERA_CIS_IMX260_OBJ is not set -# CONFIG_CAMERA_CIS_IMX333_OBJ is not set -# CONFIG_CAMERA_CIS_2L7_OBJ is not set -# CONFIG_CAMERA_CIS_IMX320_OBJ is not set -# CONFIG_CAMERA_CIS_IMX320_C3_OBJ is not set -# CONFIG_CAMERA_CIS_IMX219_OBJ is not set -# CONFIG_CAMERA_CIS_IMX258_OBJ is not set -# CONFIG_CAMERA_CIS_IMX241_OBJ is not set -# CONFIG_CAMERA_CIS_SR259_OBJ is not set -# CONFIG_CAMERA_CIS_VIRTUAL_OBJ is not set -CONFIG_CAMERA_ACT_SELECT=y -# CONFIG_CAMERA_ACT_AK7348_OBJ is not set -# CONFIG_CAMERA_ACT_AK7345_OBJ is not set -# CONFIG_CAMERA_ACT_AK7371_OBJ is not set -# CONFIG_CAMERA_ACT_DW9714_OBJ is not set -# CONFIG_CAMERA_ACT_DW9804_OBJ is not set -# CONFIG_CAMERA_ACT_DW9807_OBJ is not set -# CONFIG_CAMERA_ACT_AK7372_OBJ is not set -CONFIG_CAMERA_ACT_AK737X_OBJ=y -# CONFIG_CAMERA_ACT_ZC533_OBJ is not set -CONFIG_CAMERA_FLASH_SELECT=y -# CONFIG_CAMERA_FLASH_LM3560_OBJ is not set -# CONFIG_CAMERA_FLASH_RT5033_OBJ is not set -CONFIG_CAMERA_FLASH_S2MPB02_OBJ=y -# CONFIG_CAMERA_FLASH_GPIO_OBJ is not set -# CONFIG_CAMERA_FLASH_I2C_OBJ is not set -# CONFIG_CAMERA_FLASH_KTD2692_OBJ is not set -# CONFIG_CAMERA_OIS_SELECT is not set -# CONFIG_CAMERA_FPGA_DPHY is not set -CONFIG_CAMERA_PDP=y -CONFIG_CAMERA_APERTURE_AK7372_OBJ=y - -# -# Base Feature Setting -# - -# -# Direct FIMC-IS Control Setting -# -CONFIG_USE_DIRECT_IS_CONTROL=y -# CONFIG_CAMERA_FIMC_SCALER_USE is not set -# CONFIG_CAMERA_MC_SCALER_VER1_USE is not set -CONFIG_CAMERA_MC_SCALER_VER2_USE=y -# CONFIG_MC_SCALER_V1_22_V1_23 is not set -# CONFIG_MC_SCALER_V2_0 is not set -# CONFIG_MC_SCALER_V2_10 is not set -# CONFIG_MC_SCALER_V3_0 is not set -# CONFIG_MC_SCALER_V3_20 is not set -CONFIG_MC_SCALER_V4_0=y -CONFIG_USE_HW_API_COMMON=y -CONFIG_USE_SENSOR_GROUP=y -CONFIG_DCP_V1_0=y -# CONFIG_SRDZ_V1_0 is not set - -# -# Vendor Feature Setting -# -# CONFIG_VENDER_DEFAULT is not set -CONFIG_VENDER_MCD=y -# CONFIG_VENDER_PSV is not set -CONFIG_SECURE_CAMERA_USE=y -# CONFIG_CAMERA_EEPROM_SUPPORT_REAR is not set -CONFIG_CAMERA_EEPROM_SUPPORT_FRONT=y -# CONFIG_COMPANION_USE is not set -# CONFIG_COMPANION_C1_USE is not set -# CONFIG_COMPANION_C2_USE is not set -# CONFIG_COMPANION_C3_USE is not set -# CONFIG_COMPANION_DCDC_USE is not set -# CONFIG_PREPROCESSOR_STANDBY_USE is not set -CONFIG_SENSOR_RETENTION_USE=y -CONFIG_OIS_USE=y -# CONFIG_OIS_FW_UPDATE_THREAD_USE is not set -CONFIG_AF_HOST_CONTROL=y -CONFIG_TORCH_CURRENT_CHANGE_SUPPORT=y -# CONFIG_CAMERA_HERO is not set -# CONFIG_CAMERA_VJFLTE is not set -# CONFIG_OIS_USE_RUMBA_S4 is not set -# CONFIG_CAMERA_STAR is not set -# CONFIG_CAMERA_STAR2 is not set -CONFIG_CAMERA_CROWN=y -CONFIG_OIS_USE_RUMBA_S6=y -CONFIG_USE_SIGNED_BINARY=y -# CONFIG_USE_CAMERA_LDU is not set -# CONFIG_VIDEO_EXYNOS_CAMREA_POSTPROCESS is not set -CONFIG_VIDEO_EXYNOS_REPEATER=y -CONFIG_VIDEO_EXYNOS_TSMUX=y -CONFIG_VIDEO_EXYNOS_ASTC=y -CONFIG_MEDIA_EXYNOS=y -# CONFIG_SOC_CAMERA is not set -# CONFIG_V4L_MEM2MEM_DRIVERS is not set -# CONFIG_V4L_TEST_DRIVERS is not set - -# -# Supported MMC/SDIO adapters -# -# CONFIG_CYPRESS_FIRMWARE is not set - -# -# Media ancillary drivers (tuners, sensors, i2c, spi, frontends) -# -CONFIG_MEDIA_SUBDRV_AUTOSELECT=y - -# -# Audio decoders, processors and mixers -# - -# -# RDS decoders -# - -# -# Video decoders -# - -# -# Video and audio decoders -# - -# -# Video encoders -# - -# -# Camera sensor devices -# - -# -# Flash devices -# - -# -# Video improvement chips -# - -# -# Audio/Video compression chips -# - -# -# Miscellaneous helper chips -# - -# -# Sensors used on soc_camera driver -# - -# -# Tools to develop new frontends -# -# CONFIG_DVB_DUMMY_FE is not set -# CONFIG_TDMB is not set -# CONFIG_TDMB_NOTIFIER is not set - -# -# Graphics support -# - -# -# ARM GPU Configuration -# -CONFIG_MALI_MIDGARD=y -CONFIG_MALI_GATOR_SUPPORT=y -# CONFIG_MALI_MIDGARD_DVFS is not set -CONFIG_MALI_MIDGARD_ENABLE_TRACE=y -# CONFIG_MALI_DEVFREQ is not set -# CONFIG_MALI_DMA_FENCE is not set -CONFIG_MALI_EXPERT=y -# CONFIG_MALI_CORESTACK is not set -# CONFIG_MALI_PRFCNT_SET_SECONDARY is not set -CONFIG_MALI_PLATFORM_THIRDPARTY=y -CONFIG_MALI_PLATFORM_THIRDPARTY_NAME="exynos" -# CONFIG_MALI_DEBUG is not set -# CONFIG_MALI_FENCE_DEBUG is not set -# CONFIG_MALI_NO_MALI is not set -# CONFIG_MALI_SYSTEM_TRACE is not set -# CONFIG_MALI_PWRSOFT_765 is not set -CONFIG_EXYNOS_SOC_NAME="9810" -CONFIG_MALI_DVFS=y -CONFIG_MALI_RT_PM=y -CONFIG_MALI_EXYNOS_TRACE=y -CONFIG_MALI_DEBUG_SYS=y -CONFIG_MALI_SEC_CL_BOOST=y -CONFIG_MALI_PM_QOS=y -# CONFIG_MALI_BTS_OPTIMIZATION is not set -CONFIG_MALI_DEBUG_KERNEL_SYSFS=y -CONFIG_MALI_EXYNOS_SECURE_RENDERING=y -CONFIG_MALI_THEX=y -# CONFIG_MALI_THEX_R5P0 is not set -# CONFIG_MALI_THEX_R7P0 is not set -# CONFIG_MALI_THEX_R8P0 is not set -# CONFIG_MALI_THEX_R9P0 is not set -# CONFIG_MALI_THEX_R12P0 is not set -# CONFIG_MALI_THEX_R15P0 is not set -# CONFIG_MALI_THEX_R16P0 is not set -CONFIG_MALI_BIFROST_R19P0_Q=y -# CONFIG_MALI_2MB_ALLOC is not set -# CONFIG_MALI_SEC_JOB_STATUS_CHECK is not set -# CONFIG_MALI_JOB_DUMP is not set -CONFIG_MALI_KUTF=m -# CONFIG_MALI_SUSTAINABLE_OPT is not set -# CONFIG_MALI_PLATFORM_POWER_DOWN_ONLY is not set -CONFIG_MALI_REAL_HW=y -# CONFIG_MALI_MEMORY_FULLY_BACKED is not set -# CONFIG_MALI_DMA_BUF_MAP_ON_DEMAND is not set -CONFIG_MALI_DMA_BUF_LEGACY_COMPAT=y -CONFIG_MALI_SEC_VK_BOOST=y -CONFIG_VGA_ARB=y -CONFIG_VGA_ARB_MAX_GPUS=16 -# CONFIG_DRM is not set - -# -# ACP (Audio CoProcessor) Configuration -# -CONFIG_EXYNOS_HDR_TUNABLE_TONEMAPPING=y - -# -# Exynos Graphic Devices -# -CONFIG_EXYNOS_GRAPHICS_G2D=y - -# -# Frame buffer Devices -# -CONFIG_FB=y -# CONFIG_FIRMWARE_EDID is not set -CONFIG_FB_CMDLINE=y -CONFIG_FB_NOTIFY=y -# CONFIG_FB_DDC is not set -# CONFIG_FB_BOOT_VESA_SUPPORT is not set -CONFIG_FB_CFB_FILLRECT=y -CONFIG_FB_CFB_COPYAREA=y -CONFIG_FB_CFB_IMAGEBLIT=y -# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set -# CONFIG_FB_SYS_FILLRECT is not set -# CONFIG_FB_SYS_COPYAREA is not set -# CONFIG_FB_SYS_IMAGEBLIT is not set -# CONFIG_FB_FOREIGN_ENDIAN is not set -# CONFIG_FB_SYS_FOPS is not set -# CONFIG_FB_SVGALIB is not set -# CONFIG_FB_MACMODES is not set -# CONFIG_FB_BACKLIGHT is not set -CONFIG_FB_MODE_HELPERS=y -# CONFIG_FB_TILEBLITTING is not set - -# -# Frame buffer hardware drivers -# -# CONFIG_FB_CIRRUS is not set -# CONFIG_FB_PM2 is not set -# CONFIG_FB_ARMCLCD is not set -# CONFIG_FB_CYBER2000 is not set -# CONFIG_FB_ASILIANT is not set -# CONFIG_FB_IMSTT is not set -# CONFIG_FB_OPENCORES is not set -# CONFIG_FB_S1D13XXX is not set -# CONFIG_FB_NVIDIA is not set -# CONFIG_FB_RIVA is not set -# CONFIG_FB_I740 is not set -# CONFIG_FB_MATROX is not set -# CONFIG_FB_RADEON is not set -# CONFIG_FB_ATY128 is not set -# CONFIG_FB_ATY is not set -# CONFIG_FB_S3 is not set -# CONFIG_FB_SAVAGE is not set -# CONFIG_FB_SIS is not set -# CONFIG_FB_NEOMAGIC is not set -# CONFIG_FB_KYRO is not set -# CONFIG_FB_3DFX is not set -# CONFIG_FB_VOODOO1 is not set -# CONFIG_FB_VT8623 is not set -# CONFIG_FB_TRIDENT is not set -# CONFIG_FB_ARK is not set -# CONFIG_FB_PM3 is not set -# CONFIG_FB_CARMINE is not set -# CONFIG_FB_S3C is not set -# CONFIG_FB_SMSCUFX is not set -# CONFIG_FB_UDL is not set -# CONFIG_FB_IBM_GXT4500 is not set -# CONFIG_FB_VIRTUAL is not set -# CONFIG_FB_METRONOME is not set -# CONFIG_FB_MB862XX is not set -# CONFIG_FB_BROADSHEET is not set -# CONFIG_FB_AUO_K190X is not set -CONFIG_FB_SIMPLE=y -CONFIG_EXYNOS_DECON_9810=y -CONFIG_EXYNOS_DECON_FB=y -CONFIG_EXYNOS_DPP=y -CONFIG_EXYNOS_MIPI_DSIM=y -CONFIG_EXYNOS_DISPLAYPORT=y -# CONFIG_DISPLAYPORT_ENG is not set -CONFIG_LOGGING_BIGDATA_BUG=y -# CONFIG_EXYNOS_ZEBU_EMUL_DISP is not set -CONFIG_FB_WINDOW_UPDATE=y -CONFIG_DECON_BLOCKING_MODE=y -CONFIG_DECON_EVENT_LOG=y -CONFIG_DECON_HIBER=y -CONFIG_EXYNOS_HIBERNATION_THREAD=y -CONFIG_SUPPORT_DOZE=y -CONFIG_EXYNOS_AFBC=y -CONFIG_EXYNOS_DSIM_DITHER=y -CONFIG_DECON_BTS_LEGACY=y -CONFIG_DPU_2_0_FENCE=y -# CONFIG_FB_TEST is not set -# CONFIG_DSIM_CMD_TEST is not set -CONFIG_DPU_2_0_RELEASE_FENCES=y -CONFIG_SUPPORT_DSU=y -CONFIG_EXYNOS_DECON_LCD=y -CONFIG_EXYNOS_COMMON_PANEL=y -# CONFIG_EXYNOS_DECON_LCD_S6E3HA2K is not set -# CONFIG_EXYNOS_DECON_LCD_S6E3HF4 is not set -# CONFIG_EXYNOS_DECON_LCD_S6E3HA6 is not set -CONFIG_EXYNOS_DECON_LCD_S6E3HA8=y -CONFIG_SEC_DISPLAYPORT_LOGGER=y -CONFIG_SEC_DISPLAYPORT_BIGDATA=y -CONFIG_EXYNOS_DECON_MDNIE_LITE=y -CONFIG_SUPPORT_AFC=y -CONFIG_EXYNOS_DECON_LCD_SYSFS=y -CONFIG_EXYNOS_DECON_LCD_SPI=y -CONFIG_EXYNOS_DECON_LCD_COPR=y -CONFIG_EXYNOS_DECON_LCD_TUNING=y -CONFIG_PANEL_AID_DIMMING=y -CONFIG_DISP_PMIC_SSD=y -# CONFIG_OLD_DISP_TIMING is not set -CONFIG_SUPPORT_HMD=y -CONFIG_EXTEND_LIVE_CLOCK=y -CONFIG_SUPPORT_AOD_BL=y -# CONFIG_DONT_SUPPORT_SEAMLESS_AOD is not set -# CONFIG_EXYNOS_DECON_LCD_S6E3HF3 is not set -# CONFIG_ACTIVE_CLOCK is not set -CONFIG_SUPPORT_DDI_FLASH=y -CONFIG_SUPPORT_POC_FLASH=y -CONFIG_SUPPORT_DIM_FLASH=y -CONFIG_SUPPORT_GRAM_CHECKSUM=y -CONFIG_PANEL_BACKLIGHT_PAC_3_0=y -CONFIG_DISPLAY_USE_INFO=y -CONFIG_SELF_MOVE_3PX=y -# CONFIG_NO_LCD is not set -# CONFIG_FB_SSD1307 is not set -# CONFIG_FB_SM712 is not set -CONFIG_BACKLIGHT_LCD_SUPPORT=y -CONFIG_LCD_CLASS_DEVICE=y -# CONFIG_LCD_L4F00242T03 is not set -# CONFIG_LCD_LMS283GF05 is not set -# CONFIG_LCD_LTV350QV is not set -# CONFIG_LCD_ILI922X is not set -# CONFIG_LCD_ILI9320 is not set -# CONFIG_LCD_TDO24M is not set -# CONFIG_LCD_VGG2432A4 is not set -# CONFIG_LCD_PLATFORM is not set -# CONFIG_LCD_S6E63M0 is not set -# CONFIG_LCD_LD9040 is not set -# CONFIG_LCD_AMS369FG06 is not set -# CONFIG_LCD_LMS501KF03 is not set -# CONFIG_LCD_HX8357 is not set -CONFIG_BACKLIGHT_CLASS_DEVICE=y -# CONFIG_BACKLIGHT_GENERIC is not set -# CONFIG_BACKLIGHT_PWM is not set -# CONFIG_BACKLIGHT_PM8941_WLED is not set -# CONFIG_BACKLIGHT_ADP8860 is not set -# CONFIG_BACKLIGHT_ADP8870 is not set -# CONFIG_BACKLIGHT_LM3630A is not set -# CONFIG_BACKLIGHT_LM3639 is not set -# CONFIG_BACKLIGHT_LP855X is not set -# CONFIG_BACKLIGHT_GPIO is not set -# CONFIG_BACKLIGHT_LV5207LP is not set -# CONFIG_BACKLIGHT_BD6107 is not set -# CONFIG_VGASTATE is not set -# CONFIG_LOGO is not set -CONFIG_SOUND=y -# CONFIG_SOUND_OSS_CORE is not set -CONFIG_SND=y -CONFIG_SND_TIMER=y -CONFIG_SND_PCM=y -CONFIG_SND_DMAENGINE_PCM=y -CONFIG_SND_HWDEP=y -CONFIG_SND_RAWMIDI=y -CONFIG_SND_COMPRESS_OFFLOAD=y -CONFIG_SND_JACK=y -CONFIG_SND_JACK_INPUT_DEV=y -# CONFIG_SND_SEQUENCER is not set -# CONFIG_SND_MIXER_OSS is not set -# CONFIG_SND_PCM_OSS is not set -CONFIG_SND_PCM_TIMER=y -# CONFIG_SND_HRTIMER is not set -CONFIG_SND_DYNAMIC_MINORS=y -CONFIG_SND_MAX_CARDS=32 -CONFIG_SND_SUPPORT_OLD_API=y -CONFIG_SND_PROC_FS=y -CONFIG_SND_VERBOSE_PROCFS=y -# CONFIG_SND_VERBOSE_PRINTK is not set -# CONFIG_SND_DEBUG is not set -# CONFIG_SND_RAWMIDI_SEQ is not set -# CONFIG_SND_OPL3_LIB_SEQ is not set -# CONFIG_SND_OPL4_LIB_SEQ is not set -# CONFIG_SND_SBAWE_SEQ is not set -# CONFIG_SND_EMU10K1_SEQ is not set -CONFIG_SND_DRIVERS=y -# CONFIG_SND_DUMMY is not set -# CONFIG_SND_ALOOP is not set -# CONFIG_SND_MTPAV is not set -# CONFIG_SND_SERIAL_U16550 is not set -# CONFIG_SND_MPU401 is not set -CONFIG_SND_PCI=y -# CONFIG_SND_AD1889 is not set -# CONFIG_SND_ATIIXP is not set -# CONFIG_SND_ATIIXP_MODEM is not set -# CONFIG_SND_AU8810 is not set -# CONFIG_SND_AU8820 is not set -# CONFIG_SND_AU8830 is not set -# CONFIG_SND_AW2 is not set -# CONFIG_SND_BT87X is not set -# CONFIG_SND_CA0106 is not set -# CONFIG_SND_CMIPCI is not set -# CONFIG_SND_OXYGEN is not set -# CONFIG_SND_CS4281 is not set -# CONFIG_SND_CS46XX is not set -# CONFIG_SND_CTXFI is not set -# CONFIG_SND_DARLA20 is not set -# CONFIG_SND_GINA20 is not set -# CONFIG_SND_LAYLA20 is not set -# CONFIG_SND_DARLA24 is not set -# CONFIG_SND_GINA24 is not set -# CONFIG_SND_LAYLA24 is not set -# CONFIG_SND_MONA is not set -# CONFIG_SND_MIA is not set -# CONFIG_SND_ECHO3G is not set -# CONFIG_SND_INDIGO is not set -# CONFIG_SND_INDIGOIO is not set -# CONFIG_SND_INDIGODJ is not set -# CONFIG_SND_INDIGOIOX is not set -# CONFIG_SND_INDIGODJX is not set -# CONFIG_SND_ENS1370 is not set -# CONFIG_SND_ENS1371 is not set -# CONFIG_SND_FM801 is not set -# CONFIG_SND_HDSP is not set -# CONFIG_SND_HDSPM is not set -# CONFIG_SND_ICE1724 is not set -# CONFIG_SND_INTEL8X0 is not set -# CONFIG_SND_INTEL8X0M is not set -# CONFIG_SND_KORG1212 is not set -# CONFIG_SND_LOLA is not set -# CONFIG_SND_LX6464ES is not set -# CONFIG_SND_MIXART is not set -# CONFIG_SND_NM256 is not set -# CONFIG_SND_PCXHR is not set -# CONFIG_SND_RIPTIDE is not set -# CONFIG_SND_RME32 is not set -# CONFIG_SND_RME96 is not set -# CONFIG_SND_RME9652 is not set -# CONFIG_SND_SE6X is not set -# CONFIG_SND_VIA82XX is not set -# CONFIG_SND_VIA82XX_MODEM is not set -# CONFIG_SND_VIRTUOSO is not set -# CONFIG_SND_VX222 is not set -# CONFIG_SND_YMFPCI is not set - -# -# HD-Audio -# -# CONFIG_SND_HDA_INTEL is not set -CONFIG_SND_HDA_PREALLOC_SIZE=64 -CONFIG_SND_SPI=y -CONFIG_SND_USB=y -CONFIG_SND_USB_AUDIO=y -# CONFIG_SND_EXYNOS_USB_AUDIO is not set -# CONFIG_SND_USB_UA101 is not set -# CONFIG_SND_USB_CAIAQ is not set -# CONFIG_SND_USB_6FIRE is not set -# CONFIG_SND_USB_HIFACE is not set -# CONFIG_SND_BCD2000 is not set -# CONFIG_SND_USB_POD is not set -# CONFIG_SND_USB_PODHD is not set -# CONFIG_SND_USB_TONEPORT is not set -# CONFIG_SND_USB_VARIAX is not set -CONFIG_SND_SOC=y -CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y -CONFIG_SND_SOC_COMPRESS=y -# CONFIG_SND_SOC_AMD_ACP is not set -# CONFIG_SND_ATMEL_SOC is not set -# CONFIG_SND_DESIGNWARE_I2S is not set - -# -# SoC Audio for Freescale CPUs -# - -# -# Common SoC Audio options for Freescale CPUs: -# -# CONFIG_SND_SOC_FSL_ASRC is not set -# CONFIG_SND_SOC_FSL_SAI is not set -# CONFIG_SND_SOC_FSL_SSI is not set -# CONFIG_SND_SOC_FSL_SPDIF is not set -# CONFIG_SND_SOC_FSL_ESAI is not set -# CONFIG_SND_SOC_IMX_AUDMUX is not set -# CONFIG_SND_SOC_IMG is not set -CONFIG_SND_SOC_SAMSUNG=y -# CONFIG_SND_SAMSUNG_PCM is not set -# CONFIG_SND_SAMSUNG_SPDIF is not set -# CONFIG_SND_SAMSUNG_I2S is not set -CONFIG_SND_SOC_SAMSUNG_DISPLAYPORT=y -# CONFIG_SND_SOC_SAMSUNG_SMDK_WM8994 is not set -# CONFIG_SND_SOC_SAMSUNG_SMDK_SPDIF is not set -# CONFIG_SND_SOC_SMDK_WM8994_PCM is not set -# CONFIG_SND_SOC_SNOW is not set -# CONFIG_SND_SOC_SAMSUNG_EXYNOS8895 is not set -# CONFIG_SND_SOC_SAMSUNG_EXYNOS8895_MOON is not set -# CONFIG_SND_SOC_SAMSUNG_EXYNOS8895_MAX98506 is not set -CONFIG_SND_SOC_SAMSUNG_EXYNOS9810=y -# CONFIG_SND_SOC_SAMSUNG_EXYNOS9810_MOON is not set -CONFIG_SND_SOC_SAMSUNG_STAR_ASHETON=y -# CONFIG_SND_SOC_SAMSUNG_EXYNOS9810_MAX98506 is not set -CONFIG_SND_SOC_SAMSUNG_EXYNOS9810_MAX98512=y -# CONFIG_SND_SOC_SAMSUNG_EXYNOS8895_COD3033 is not set -# CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631 is not set -CONFIG_SND_SOC_SAMSUNG_AUDIO=y -CONFIG_SND_SOC_SAMSUNG_ABOX=y -CONFIG_SEC_SND_ADAPTATION=y -CONFIG_SND_SOC_SAMSUNG_MAILBOX=y -CONFIG_SND_SOC_SAMSUNG_VTS=y -# CONFIG_SND_SOC_XTFPGA_I2S is not set -CONFIG_SND_SOC_I2C_AND_SPI=y - -# -# CODEC drivers -# -CONFIG_SND_SOC_WM_ADSP=y -# CONFIG_SND_SOC_AC97_CODEC is not set -# CONFIG_SND_SOC_ADAU1701 is not set -# CONFIG_SND_SOC_ADAU7002 is not set -# CONFIG_SND_SOC_AK4104 is not set -# CONFIG_SND_SOC_AK4554 is not set -# CONFIG_SND_SOC_AK4613 is not set -# CONFIG_SND_SOC_AK4642 is not set -# CONFIG_SND_SOC_AK5386 is not set -# CONFIG_SND_SOC_ALC5623 is not set -# CONFIG_SND_SOC_BT_SCO is not set -# CONFIG_SND_SOC_CS35L32 is not set -# CONFIG_SND_SOC_CS35L33 is not set -# CONFIG_SND_SOC_CS42L51_I2C is not set -# CONFIG_SND_SOC_CS42L52 is not set -# CONFIG_SND_SOC_CS42L56 is not set -# CONFIG_SND_SOC_CS42L73 is not set -# CONFIG_SND_SOC_CS4265 is not set -# CONFIG_SND_SOC_CS4270 is not set -# CONFIG_SND_SOC_CS4271_I2C is not set -# CONFIG_SND_SOC_CS4271_SPI is not set -# CONFIG_SND_SOC_CS42XX8_I2C is not set -# CONFIG_SND_SOC_CS4349 is not set -CONFIG_SND_SOC_CS47L92=y -# CONFIG_SND_SOC_CS53L30 is not set -# CONFIG_SND_SOC_ES8328 is not set -# CONFIG_SND_SOC_GTM601 is not set -# CONFIG_SND_SOC_INNO_RK3036 is not set -CONFIG_SND_SOC_MADERA=y -# CONFIG_SND_SOC_MAX98504 is not set -# CONFIG_SND_SOC_MAX98506 is not set -CONFIG_SND_SOC_MAX98512=y -CONFIG_SND_SOC_MAXIM_DSM=y -CONFIG_SND_SOC_MAXIM_DSM_CAL=y -# CONFIG_SND_SOC_MAX9860 is not set -# CONFIG_SND_SOC_PCM1681 is not set -# CONFIG_SND_SOC_PCM179X_I2C is not set -# CONFIG_SND_SOC_PCM179X_SPI is not set -# CONFIG_SND_SOC_PCM3168A_I2C is not set -# CONFIG_SND_SOC_PCM3168A_SPI is not set -# CONFIG_SND_SOC_PCM512x_I2C is not set -# CONFIG_SND_SOC_PCM512x_SPI is not set -# CONFIG_SND_SOC_RT5616 is not set -# CONFIG_SND_SOC_RT5631 is not set -# CONFIG_SND_SOC_RT5677_SPI is not set -# CONFIG_SND_SOC_SGTL5000 is not set -# CONFIG_SND_SOC_SIRF_AUDIO_CODEC is not set -# CONFIG_SND_SOC_SPDIF is not set -# CONFIG_SND_SOC_SSM2602_SPI is not set -# CONFIG_SND_SOC_SSM2602_I2C is not set -# CONFIG_SND_SOC_SSM4567 is not set -# CONFIG_SND_SOC_STA32X is not set -# CONFIG_SND_SOC_STA350 is not set -# CONFIG_SND_SOC_STI_SAS is not set -# CONFIG_SND_SOC_TAS2552 is not set -# CONFIG_SND_SOC_TAS5086 is not set -# CONFIG_SND_SOC_TAS571X is not set -# CONFIG_SND_SOC_TAS5720 is not set -# CONFIG_SND_SOC_TFA9879 is not set -# CONFIG_SND_SOC_TLV320AIC23_I2C is not set -# CONFIG_SND_SOC_TLV320AIC23_SPI is not set -# CONFIG_SND_SOC_TLV320AIC31XX is not set -# CONFIG_SND_SOC_TLV320AIC3X is not set -# CONFIG_SND_SOC_TS3A227E is not set -# CONFIG_SND_SOC_WM8510 is not set -# CONFIG_SND_SOC_WM8523 is not set -# CONFIG_SND_SOC_WM8580 is not set -# CONFIG_SND_SOC_WM8711 is not set -# CONFIG_SND_SOC_WM8728 is not set -# CONFIG_SND_SOC_WM8731 is not set -# CONFIG_SND_SOC_WM8737 is not set -# CONFIG_SND_SOC_WM8741 is not set -# CONFIG_SND_SOC_WM8750 is not set -# CONFIG_SND_SOC_WM8753 is not set -# CONFIG_SND_SOC_WM8770 is not set -# CONFIG_SND_SOC_WM8776 is not set -# CONFIG_SND_SOC_WM8804_I2C is not set -# CONFIG_SND_SOC_WM8804_SPI is not set -# CONFIG_SND_SOC_WM8903 is not set -# CONFIG_SND_SOC_WM8960 is not set -# CONFIG_SND_SOC_WM8962 is not set -# CONFIG_SND_SOC_WM8974 is not set -# CONFIG_SND_SOC_WM8978 is not set -# CONFIG_SND_SOC_WM8985 is not set -# CONFIG_SND_SOC_NAU8810 is not set -# CONFIG_SND_SOC_TPA6130A2 is not set -# CONFIG_SND_SIMPLE_CARD is not set -# CONFIG_SND_SIMPLE_SCU_CARD is not set -# CONFIG_SOUND_PRIME is not set - -# -# HID support -# -CONFIG_HID=y -# CONFIG_HID_BATTERY_STRENGTH is not set -CONFIG_HIDRAW=y -CONFIG_UHID=y -CONFIG_HID_GENERIC=y - -# -# Special HID drivers -# -CONFIG_HID_A4TECH=y -CONFIG_HID_ACRUX=y -CONFIG_HID_ACRUX_FF=y -CONFIG_HID_APPLE=y -# CONFIG_HID_APPLEIR is not set -# CONFIG_HID_AUREAL is not set -CONFIG_HID_BELKIN=y -# CONFIG_HID_BETOP_FF is not set -CONFIG_HID_CHERRY=y -CONFIG_HID_CHICONY=y -# CONFIG_HID_CORSAIR is not set -CONFIG_HID_PRODIKEYS=y -# CONFIG_HID_CMEDIA is not set -# CONFIG_HID_CP2112 is not set -CONFIG_HID_CYPRESS=y -CONFIG_HID_DRAGONRISE=y -CONFIG_DRAGONRISE_FF=y -CONFIG_HID_EMS_FF=y -CONFIG_HID_ELECOM=y -# CONFIG_HID_ELO is not set -CONFIG_HID_EZKEY=y -# CONFIG_HID_GEMBIRD is not set -# CONFIG_HID_GFRM is not set -CONFIG_HID_HOLTEK=y -# CONFIG_HOLTEK_FF is not set -# CONFIG_HID_GT683R is not set -CONFIG_HID_KEYTOUCH=y -CONFIG_HID_KYE=y -CONFIG_HID_UCLOGIC=y -CONFIG_HID_WALTOP=y -CONFIG_HID_GYRATION=y -# CONFIG_HID_ICADE is not set -CONFIG_HID_TWINHAN=y -CONFIG_HID_KENSINGTON=y -CONFIG_HID_LCPOWER=y -# CONFIG_HID_LED is not set -# CONFIG_HID_LENOVO is not set -CONFIG_HID_LOGITECH=y -CONFIG_HID_LOGITECH_DJ=y -CONFIG_HID_LOGITECH_HIDPP=y -CONFIG_LOGITECH_FF=y -CONFIG_LOGIRUMBLEPAD2_FF=y -CONFIG_LOGIG940_FF=y -CONFIG_LOGIWHEELS_FF=y -CONFIG_HID_MAGICMOUSE=y -CONFIG_HID_MICROSOFT=y -CONFIG_HID_MONTEREY=y -CONFIG_HID_MULTITOUCH=y -CONFIG_HID_NTRIG=y -CONFIG_HID_ORTEK=y -CONFIG_HID_PANTHERLORD=y -CONFIG_PANTHERLORD_FF=y -# CONFIG_HID_PENMOUNT is not set -CONFIG_HID_PETALYNX=y -CONFIG_HID_PICOLCD=y -# CONFIG_HID_PICOLCD_FB is not set -# CONFIG_HID_PICOLCD_BACKLIGHT is not set -# CONFIG_HID_PICOLCD_LCD is not set -# CONFIG_HID_PICOLCD_LEDS is not set -# CONFIG_HID_PLANTRONICS is not set -CONFIG_HID_PRIMAX=y -CONFIG_HID_ROCCAT=y -CONFIG_HID_SAITEK=y -CONFIG_HID_SAMSUNG=y -CONFIG_HID_SONY=y -CONFIG_SONY_FF=y -CONFIG_HID_SPEEDLINK=y -# CONFIG_HID_STEELSERIES is not set -CONFIG_HID_SUNPLUS=y -# CONFIG_HID_RMI is not set -CONFIG_HID_GREENASIA=y -CONFIG_GREENASIA_FF=y -CONFIG_HID_SMARTJOYPLUS=y -CONFIG_SMARTJOYPLUS_FF=y -CONFIG_HID_SYNAPTICS_BT=y -CONFIG_HID_TIVO=y -CONFIG_HID_TOPSEED=y -# CONFIG_HID_THINGM is not set -CONFIG_HID_THRUSTMASTER=y -# CONFIG_THRUSTMASTER_FF is not set -CONFIG_HID_WACOM=y -CONFIG_HID_WIIMOTE=y -# CONFIG_HID_XINMO is not set -CONFIG_HID_ZEROPLUS=y -# CONFIG_ZEROPLUS_FF is not set -CONFIG_HID_ZYDACRON=y -# CONFIG_HID_SENSOR_HUB is not set -# CONFIG_HID_ALPS is not set -CONFIG_HID_OVR=y -CONFIG_HID_TVR=y -CONFIG_HID_MADCATZ=y - -# -# USB HID support -# -CONFIG_USB_HID=y -# CONFIG_HID_PID is not set -CONFIG_USB_HIDDEV=y - -# -# I2C HID support -# -# CONFIG_I2C_HID is not set -CONFIG_USB_OHCI_LITTLE_ENDIAN=y -CONFIG_USB_SUPPORT=y -CONFIG_USB_COMMON=y -CONFIG_USB_ARCH_HAS_HCD=y -CONFIG_USB=y -CONFIG_USB_ANNOUNCE_NEW_DEVICES=y - -# -# Miscellaneous USB options -# -CONFIG_USB_DEFAULT_PERSIST=y -# CONFIG_USB_DYNAMIC_MINORS is not set -# CONFIG_USB_OTG is not set -# CONFIG_USB_OTG_WHITELIST is not set -# CONFIG_USB_OTG_BLACKLIST_HUB is not set -# CONFIG_USB_LEDS_TRIGGER_USBPORT is not set -# CONFIG_USB_MON is not set -# CONFIG_USB_WUSB_CBAF is not set - -# -# USB Host Controller Drivers -# -# CONFIG_USB_C67X00_HCD is not set -CONFIG_USB_XHCI_HCD=y -CONFIG_USB_XHCI_PCI=y -CONFIG_USB_XHCI_PLATFORM=y -# CONFIG_USB_EHCI_HCD is not set -# CONFIG_USB_OXU210HP_HCD is not set -# CONFIG_USB_ISP116X_HCD is not set -# CONFIG_USB_ISP1362_HCD is not set -# CONFIG_USB_FOTG210_HCD is not set -# CONFIG_USB_MAX3421_HCD is not set -# CONFIG_USB_OHCI_HCD is not set -# CONFIG_USB_UHCI_HCD is not set -# CONFIG_USB_SL811_HCD is not set -# CONFIG_USB_R8A66597_HCD is not set -# CONFIG_USB_HCD_TEST_MODE is not set -# CONFIG_USB_HOST_L1_SUPPORT is not set - -# -# USB Device Class drivers -# -CONFIG_USB_ACM=y -CONFIG_USB_PRINTER=y -CONFIG_USB_WDM=y -# CONFIG_USB_TMC is not set - -# -# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may -# - -# -# also be needed; see USB_STORAGE Help for more info -# -CONFIG_USB_STORAGE=y -# CONFIG_USB_STORAGE_DEBUG is not set -# CONFIG_USB_STORAGE_REALTEK is not set -# CONFIG_USB_STORAGE_DATAFAB is not set -# CONFIG_USB_STORAGE_FREECOM is not set -# CONFIG_USB_STORAGE_ISD200 is not set -# CONFIG_USB_STORAGE_USBAT is not set -# CONFIG_USB_STORAGE_SDDR09 is not set -# CONFIG_USB_STORAGE_SDDR55 is not set -# CONFIG_USB_STORAGE_JUMPSHOT is not set -# CONFIG_USB_STORAGE_ALAUDA is not set -# CONFIG_USB_STORAGE_ONETOUCH is not set -# CONFIG_USB_STORAGE_KARMA is not set -# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set -# CONFIG_USB_STORAGE_ENE_UB6250 is not set -# CONFIG_USB_UAS is not set - -# -# USB Imaging devices -# -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_MICROTEK is not set -# CONFIG_USBIP_CORE is not set -# CONFIG_USB_MUSB_HDRC is not set - -# -# USB Notify features -# -CONFIG_USB_HOST_NOTIFY=y -CONFIG_USB_NOTIFY_LAYER=y -CONFIG_USB_NOTIFIER=y -CONFIG_USB_DEBUG_DETAILED_LOG=y -CONFIG_USB_STORAGE_DETECT=y -CONFIG_USB_HMT_SAMSUNG_INPUT=y -CONFIG_USB_EXTERNAL_NOTIFY=y -CONFIG_USB_NOTIFY_PROC_LOG=y -CONFIG_USB_HOST_SAMSUNG_FEATURE=y -CONFIG_USB_HW_PARAM=y - -# -# USB TypeC Manager configs -# -CONFIG_USB_TYPEC_MANAGER_NOTIFIER=y -CONFIG_USB_DWC3=y -# CONFIG_USB_DWC3_HOST is not set -# CONFIG_USB_DWC3_GADGET is not set -CONFIG_USB_DWC3_DUAL_ROLE=y - -# -# Platform Glue Driver Support -# -CONFIG_USB_DWC3_EXYNOS=y -CONFIG_USB_DWC3_PCI=y -CONFIG_USB_DWC3_OF_SIMPLE=y -CONFIG_USB_ANDROID_SAMSUNG_DISABLE_U1_U2=y -# CONFIG_USB_DWC2 is not set -# CONFIG_USB_CHIPIDEA is not set -# CONFIG_USB_ISP1760 is not set - -# -# USB port drivers -# -CONFIG_USB_SERIAL=y -# CONFIG_USB_SERIAL_CONSOLE is not set -# CONFIG_USB_SERIAL_GENERIC is not set -# CONFIG_USB_SERIAL_SIMPLE is not set -# CONFIG_USB_SERIAL_AIRCABLE is not set -# CONFIG_USB_SERIAL_ARK3116 is not set -# CONFIG_USB_SERIAL_BELKIN is not set -# CONFIG_USB_SERIAL_CH341 is not set -# CONFIG_USB_SERIAL_WHITEHEAT is not set -# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set -# CONFIG_USB_SERIAL_CP210X is not set -# CONFIG_USB_SERIAL_CYPRESS_M8 is not set -# CONFIG_USB_SERIAL_EMPEG is not set -CONFIG_USB_SERIAL_FTDI_SIO=y -# CONFIG_USB_SERIAL_VISOR is not set -# CONFIG_USB_SERIAL_IPAQ is not set -# CONFIG_USB_SERIAL_IR is not set -# CONFIG_USB_SERIAL_EDGEPORT is not set -# CONFIG_USB_SERIAL_EDGEPORT_TI is not set -# CONFIG_USB_SERIAL_F81232 is not set -# CONFIG_USB_SERIAL_GARMIN is not set -# CONFIG_USB_SERIAL_IPW is not set -# CONFIG_USB_SERIAL_IUU is not set -# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set -# CONFIG_USB_SERIAL_KEYSPAN is not set -# CONFIG_USB_SERIAL_KLSI is not set -# CONFIG_USB_SERIAL_KOBIL_SCT is not set -# CONFIG_USB_SERIAL_MCT_U232 is not set -# CONFIG_USB_SERIAL_METRO is not set -# CONFIG_USB_SERIAL_MOS7720 is not set -# CONFIG_USB_SERIAL_MOS7840 is not set -# CONFIG_USB_SERIAL_MXUPORT is not set -# CONFIG_USB_SERIAL_NAVMAN is not set -CONFIG_USB_SERIAL_PL2303=y -# CONFIG_USB_SERIAL_OTI6858 is not set -# CONFIG_USB_SERIAL_QCAUX is not set -# CONFIG_USB_SERIAL_QUALCOMM is not set -# CONFIG_USB_SERIAL_SPCP8X5 is not set -# CONFIG_USB_SERIAL_SAFE is not set -# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set -# CONFIG_USB_SERIAL_SYMBOL is not set -# CONFIG_USB_SERIAL_TI is not set -# CONFIG_USB_SERIAL_CYBERJACK is not set -# CONFIG_USB_SERIAL_XIRCOM is not set -# CONFIG_USB_SERIAL_OPTION is not set -# CONFIG_USB_SERIAL_OMNINET is not set -# CONFIG_USB_SERIAL_OPTICON is not set -# CONFIG_USB_SERIAL_XSENS_MT is not set -# CONFIG_USB_SERIAL_WISHBONE is not set -# CONFIG_USB_SERIAL_SSU100 is not set -# CONFIG_USB_SERIAL_QT2 is not set -# CONFIG_USB_SERIAL_DEBUG is not set - -# -# USB Miscellaneous drivers -# -# CONFIG_USB_EMI62 is not set -# CONFIG_USB_EMI26 is not set -# CONFIG_USB_ADUTUX is not set -# CONFIG_USB_SEVSEG is not set -# CONFIG_USB_RIO500 is not set -# CONFIG_USB_LEGOTOWER is not set -# CONFIG_USB_LCD is not set -# CONFIG_USB_CYPRESS_CY7C63 is not set -# CONFIG_USB_CYTHERM is not set -# CONFIG_USB_IDMOUSE is not set -# CONFIG_USB_FTDI_ELAN is not set -# CONFIG_USB_APPLEDISPLAY is not set -# CONFIG_USB_LD is not set -# CONFIG_USB_TRANCEVIBRATOR is not set -# CONFIG_USB_IOWARRIOR is not set -# CONFIG_USB_TEST is not set -# CONFIG_USB_EHSET_TEST_FIXTURE is not set -# CONFIG_USB_ISIGHTFW is not set -# CONFIG_USB_YUREX is not set -# CONFIG_USB_EZUSB_FX2 is not set -# CONFIG_USB_HSIC_USB3503 is not set -# CONFIG_USB_HSIC_USB4604 is not set -# CONFIG_USB_LINK_LAYER_TEST is not set -# CONFIG_USB_CHAOSKEY is not set -# CONFIG_USB_GL3523 is not set - -# -# USB Physical Layer drivers -# -# CONFIG_USB_PHY is not set -# CONFIG_USB_OTG_WAKELOCK is not set -# CONFIG_NOP_USB_XCEIV is not set -# CONFIG_USB_GPIO_VBUS is not set -# CONFIG_USB_ISP1301 is not set -# CONFIG_USB_ULPI is not set -CONFIG_USB_GADGET=y -# CONFIG_USB_GADGET_DEBUG is not set -# CONFIG_USB_GADGET_DEBUG_FILES is not set -# CONFIG_USB_GADGET_DEBUG_FS is not set -CONFIG_USB_GADGET_VBUS_DRAW=2 -CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2 -CONFIG_USB_G_ANDROID=y -CONFIG_USB_ANDROID_SAMSUNG_COMPOSITE=y -CONFIG_USB_DUN_SUPPORT=y -# CONFIG_USB_RNDIS_MULTIPACKET_WITH_TIMER is not set -CONFIG_USB_NCM_SUPPORT_MTU_CHANGE=y -# CONFIG_USB_ANDROID_RNDIS_DWORD_ALIGNED is not set - -# -# USB Peripheral Controller -# -# CONFIG_USB_FOTG210_UDC is not set -# CONFIG_USB_GR_UDC is not set -# CONFIG_USB_R8A66597 is not set -# CONFIG_USB_PXA27X is not set -# CONFIG_USB_MV_UDC is not set -# CONFIG_USB_MV_U3D is not set -# CONFIG_USB_M66592 is not set -# CONFIG_USB_BDC_UDC is not set -# CONFIG_USB_AMD5536UDC is not set -# CONFIG_USB_NET2272 is not set -# CONFIG_USB_NET2280 is not set -# CONFIG_USB_GOKU is not set -# CONFIG_USB_EG20T is not set -# CONFIG_USB_GADGET_XILINX is not set -# CONFIG_USB_DUMMY_HCD is not set -CONFIG_USB_LIBCOMPOSITE=y -CONFIG_USB_F_ACM=y -CONFIG_USB_U_SERIAL=y -CONFIG_USB_U_ETHER=y -CONFIG_USB_F_NCM=y -CONFIG_USB_F_RNDIS=y -CONFIG_USB_F_FS=y -CONFIG_USB_F_MIDI=y -CONFIG_USB_F_MTP=y -CONFIG_USB_F_PTP=y -CONFIG_USB_F_AUDIO_SRC=y -CONFIG_USB_F_ACC=y -CONFIG_USB_F_CONN_GADGET=y -CONFIG_USB_CONFIGFS=y -# CONFIG_USB_CONFIGFS_SERIAL is not set -CONFIG_USB_CONFIGFS_ACM=y -# CONFIG_USB_CONFIGFS_OBEX is not set -CONFIG_USB_CONFIGFS_NCM=y -# CONFIG_USB_CONFIGFS_ECM is not set -# CONFIG_USB_CONFIGFS_ECM_SUBSET is not set -CONFIG_USB_CONFIGFS_RNDIS=y -# CONFIG_USB_CONFIGFS_EEM is not set -# CONFIG_USB_CONFIGFS_PHONET is not set -# CONFIG_USB_CONFIGFS_MASS_STORAGE is not set -# CONFIG_USB_CONFIGFS_F_LB_SS is not set -CONFIG_USB_CONFIGFS_F_FS=y -CONFIG_USB_CONFIGFS_F_DM=y -# CONFIG_USB_CONFIGFS_F_ADB is not set -CONFIG_USB_CONFIGFS_F_MTP=y -CONFIG_USB_CONFIGFS_F_PTP=y -CONFIG_USB_CONFIGFS_F_CONN_GADGET=y -# CONFIG_USB_F_CONN_GADGET_NDOP is not set -CONFIG_USB_CONFIGFS_F_ACC=y -CONFIG_USB_CONFIGFS_F_AUDIO_SRC=y -CONFIG_USB_CONFIGFS_UEVENT=y -CONFIG_USB_RNDIS_MULTIPACKET=y -# CONFIG_USB_CONFIGFS_F_UAC1 is not set -# CONFIG_USB_CONFIGFS_F_UAC2 is not set -CONFIG_USB_CONFIGFS_F_MIDI=y -# CONFIG_USB_CONFIGFS_F_HID is not set -# CONFIG_USB_CONFIGFS_F_UVC is not set -# CONFIG_USB_CONFIGFS_F_PRINTER is not set -# CONFIG_USB_ZERO is not set -# CONFIG_USB_AUDIO is not set -# CONFIG_USB_ETH is not set -# CONFIG_USB_G_NCM is not set -# CONFIG_USB_GADGETFS is not set -# CONFIG_USB_FUNCTIONFS is not set -# CONFIG_USB_MASS_STORAGE is not set -# CONFIG_USB_G_SERIAL is not set -# CONFIG_USB_MIDI_GADGET is not set -# CONFIG_USB_G_PRINTER is not set -# CONFIG_USB_CDC_COMPOSITE is not set -# CONFIG_USB_G_NOKIA is not set -# CONFIG_USB_G_ACM_MS is not set -# CONFIG_USB_G_MULTI is not set -# CONFIG_USB_G_HID is not set -# CONFIG_USB_G_DBGP is not set -# CONFIG_USB_G_WEBCAM is not set - -# -# USB Power Delivery and Type-C drivers -# -CONFIG_TYPEC=y -# CONFIG_USB_LED_TRIG is not set -# CONFIG_USB_ULPI_BUS is not set -# CONFIG_UWB is not set -CONFIG_MMC=y -# CONFIG_MMC_DEBUG is not set -CONFIG_MMC_BLOCK_DEFERRED_RESUME=y -CONFIG_MMC_SUPPORT_STLOG=y -CONFIG_PWRSEQ_EMMC=y -CONFIG_PWRSEQ_SIMPLE=y -# CONFIG_MMC_EMBEDDED_SDIO is not set -# CONFIG_MMC_PARANOID_SD_INIT is not set - -# -# MMC/SD/SDIO Card Drivers -# -CONFIG_MMC_BLOCK=y -CONFIG_MMC_BLOCK_MINORS=8 -CONFIG_MMC_BLOCK_BOUNCE=y -# CONFIG_SDIO_UART is not set -# CONFIG_MMC_TEST is not set -# CONFIG_MMC_SIMULATE_MAX_SPEED is not set - -# -# MMC/SD/SDIO Host Controller Drivers -# -# CONFIG_MMC_ARMMMCI is not set -# CONFIG_MMC_SDHCI is not set -# CONFIG_MMC_TIFM_SD is not set -# CONFIG_MMC_SPI is not set -# CONFIG_MMC_CB710 is not set -# CONFIG_MMC_VIA_SDMMC is not set -CONFIG_MMC_DW=y -CONFIG_MMC_DW_IDMAC=y -CONFIG_MMC_DW_64BIT_DESC=y -CONFIG_MMC_DW_PLTFM=y -CONFIG_MMC_DW_EXYNOS=y -CONFIG_MMC_DW_DEBUG=y -CONFIG_MMC_DW_FORCE_32BIT_SFR_RW=y -# CONFIG_MMC_DW_EXYNOS_FMP is not set -# CONFIG_MMC_DW_EXYNOS_SMU is not set -# CONFIG_MMC_DW_K3 is not set -# CONFIG_MMC_DW_PCI is not set -# CONFIG_MMC_VUB300 is not set -# CONFIG_MMC_USHC is not set -# CONFIG_MMC_USDHI6ROL0 is not set -# CONFIG_MMC_TOSHIBA_PCI is not set -# CONFIG_MMC_MTK is not set -# CONFIG_MMC_SRPMB is not set -# CONFIG_MEMSTICK is not set -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y -# CONFIG_LEDS_CLASS_FLASH is not set - -# -# LED drivers -# -# CONFIG_LEDS_BCM6328 is not set -# CONFIG_LEDS_BCM6358 is not set -# CONFIG_LEDS_LM3530 is not set -# CONFIG_LEDS_LM3642 is not set -# CONFIG_LEDS_PCA9532 is not set -# CONFIG_LEDS_GPIO is not set -# CONFIG_LEDS_LP3944 is not set -# CONFIG_LEDS_LP5521 is not set -# CONFIG_LEDS_LP5523 is not set -# CONFIG_LEDS_LP5562 is not set -# CONFIG_LEDS_LP8501 is not set -# CONFIG_LEDS_LP8860 is not set -# CONFIG_LEDS_PCA955X is not set -# CONFIG_LEDS_PCA963X is not set -# CONFIG_LEDS_DAC124S085 is not set -# CONFIG_LEDS_PWM is not set -# CONFIG_LEDS_REGULATOR is not set -# CONFIG_LEDS_BD2802 is not set -# CONFIG_LEDS_LT3593 is not set -# CONFIG_LEDS_TCA6507 is not set -# CONFIG_LEDS_TLC591XX is not set -CONFIG_LEDS_MAX77705_RGB=y -# CONFIG_LEDS_LM355x is not set -# CONFIG_LEDS_KTD2692 is not set -# CONFIG_LEDS_IS31FL319X is not set -# CONFIG_LEDS_IS31FL32XX is not set - -# -# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM) -# -# CONFIG_LEDS_BLINKM is not set -# CONFIG_LEDS_SYSCON is not set -CONFIG_LEDS_S2MPB02=y -# CONFIG_LEDS_S2MPB02_MULTI_TORCH_REAR2 is not set -# CONFIG_LEDS_KTD2692_MULTI_TORCH_REAR3 is not set -CONFIG_LEDS_IRIS_IRLED_SUPPORT=y -# CONFIG_LEDS_IRIS_IRLED_CERTIFICATE_SUPPORT is not set - -# -# LED Triggers -# -CONFIG_LEDS_TRIGGERS=y -# CONFIG_LEDS_TRIGGER_TIMER is not set -# CONFIG_LEDS_TRIGGER_ONESHOT is not set -# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set -# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set -# CONFIG_LEDS_TRIGGER_CPU is not set -# CONFIG_LEDS_TRIGGER_GPIO is not set -# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set - -# -# iptables trigger is under Netfilter config (LED target) -# -# CONFIG_LEDS_TRIGGER_TRANSIENT is not set -# CONFIG_LEDS_TRIGGER_CAMERA is not set -# CONFIG_LEDS_TRIGGER_PANIC is not set -CONFIG_SWITCH=y -# CONFIG_SWITCH_GPIO is not set -# CONFIG_SWITCH_MADERA is not set -# CONFIG_ACCESSIBILITY is not set -# CONFIG_INFINIBAND is not set -CONFIG_EDAC_SUPPORT=y -# CONFIG_EDAC is not set -CONFIG_RTC_LIB=y -CONFIG_RTC_CLASS=y -CONFIG_RTC_HCTOSYS=y -CONFIG_RTC_HCTOSYS_DEVICE="rtc0" -CONFIG_RTC_SYSTOHC=y -CONFIG_RTC_SYSTOHC_DEVICE="rtc0" -# CONFIG_RTC_DEBUG is not set - -# -# RTC interfaces -# -CONFIG_RTC_INTF_SYSFS=y -CONFIG_RTC_INTF_PROC=y -CONFIG_RTC_INTF_DEV=y -# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set -# CONFIG_RTC_DRV_TEST is not set - -# -# I2C RTC drivers -# -# CONFIG_RTC_DRV_ABB5ZES3 is not set -# CONFIG_RTC_DRV_ABX80X is not set -# CONFIG_RTC_DRV_DS1307 is not set -# CONFIG_RTC_DRV_DS1374 is not set -# CONFIG_RTC_DRV_DS1672 is not set -# CONFIG_RTC_DRV_HYM8563 is not set -# CONFIG_RTC_DRV_MAX6900 is not set -# CONFIG_RTC_DRV_RS5C372 is not set -# CONFIG_RTC_DRV_ISL1208 is not set -# CONFIG_RTC_DRV_ISL12022 is not set -# CONFIG_RTC_DRV_X1205 is not set -# CONFIG_RTC_DRV_PCF8523 is not set -# CONFIG_RTC_DRV_PCF85063 is not set -# CONFIG_RTC_DRV_PCF8563 is not set -# CONFIG_RTC_DRV_PCF8583 is not set -# CONFIG_RTC_DRV_M41T80 is not set -# CONFIG_RTC_DRV_BQ32K is not set -# CONFIG_RTC_DRV_S35390A is not set -# CONFIG_RTC_DRV_FM3130 is not set -# CONFIG_RTC_DRV_RX8010 is not set -# CONFIG_RTC_DRV_RX8581 is not set -# CONFIG_RTC_DRV_RX8025 is not set -# CONFIG_RTC_DRV_EM3027 is not set -# CONFIG_RTC_DRV_RV8803 is not set -# CONFIG_RTC_DRV_S5M is not set - -# -# SPI RTC drivers -# -# CONFIG_RTC_DRV_M41T93 is not set -# CONFIG_RTC_DRV_M41T94 is not set -# CONFIG_RTC_DRV_DS1302 is not set -# CONFIG_RTC_DRV_DS1305 is not set -# CONFIG_RTC_DRV_DS1343 is not set -# CONFIG_RTC_DRV_DS1347 is not set -# CONFIG_RTC_DRV_DS1390 is not set -# CONFIG_RTC_DRV_MAX6916 is not set -# CONFIG_RTC_DRV_R9701 is not set -# CONFIG_RTC_DRV_RX4581 is not set -# CONFIG_RTC_DRV_RX6110 is not set -# CONFIG_RTC_DRV_RS5C348 is not set -# CONFIG_RTC_DRV_MAX6902 is not set -# CONFIG_RTC_DRV_PCF2123 is not set -# CONFIG_RTC_DRV_MCP795 is not set -CONFIG_RTC_I2C_AND_SPI=y - -# -# SPI and I2C RTC drivers -# -# CONFIG_RTC_DRV_DS3232 is not set -# CONFIG_RTC_DRV_PCF2127 is not set -# CONFIG_RTC_DRV_RV3029C2 is not set - -# -# Platform RTC drivers -# -# CONFIG_RTC_DRV_DS1286 is not set -# CONFIG_RTC_DRV_DS1511 is not set -# CONFIG_RTC_DRV_DS1553 is not set -# CONFIG_RTC_DRV_DS1685_FAMILY is not set -# CONFIG_RTC_DRV_DS1742 is not set -# CONFIG_RTC_DRV_DS2404 is not set -# CONFIG_RTC_DRV_STK17TA8 is not set -# CONFIG_RTC_DRV_M48T86 is not set -# CONFIG_RTC_DRV_M48T35 is not set -# CONFIG_RTC_DRV_M48T59 is not set -# CONFIG_RTC_DRV_MSM6242 is not set -# CONFIG_RTC_DRV_BQ4802 is not set -# CONFIG_RTC_DRV_RP5C01 is not set -# CONFIG_RTC_DRV_V3020 is not set -# CONFIG_RTC_DRV_ZYNQMP is not set - -# -# on-CPU RTC drivers -# -CONFIG_HAVE_S3C_RTC=y -# CONFIG_RTC_DRV_S3C is not set -# CONFIG_RTC_DRV_SEC is not set -CONFIG_RTC_ALARM_BOOT=y -CONFIG_RTC_DRV_S2MPS18=y -# CONFIG_RTC_DRV_PL030 is not set -# CONFIG_RTC_DRV_PL031 is not set -# CONFIG_RTC_DRV_SNVS is not set - -# -# HID Sensor RTC drivers -# -# CONFIG_RTC_DRV_HID_SENSOR_TIME is not set -CONFIG_DMADEVICES=y -# CONFIG_DMADEVICES_DEBUG is not set - -# -# DMA Devices -# -CONFIG_DMA_ENGINE=y -CONFIG_DMA_OF=y -# CONFIG_AMBA_PL08X is not set -# CONFIG_FSL_EDMA is not set -# CONFIG_INTEL_IDMA64 is not set -# CONFIG_MV_XOR_V2 is not set -CONFIG_SAMSUNG_DMADEV=y -CONFIG_PL330_DMA=y -# CONFIG_XILINX_DMA is not set -# CONFIG_XILINX_ZYNQMP_DMA is not set -# CONFIG_QCOM_HIDMA_MGMT is not set -# CONFIG_QCOM_HIDMA is not set -# CONFIG_DW_DMAC is not set -# CONFIG_DW_DMAC_PCI is not set - -# -# DMA Clients -# -# CONFIG_ASYNC_TX_DMA is not set -# CONFIG_DMATEST is not set - -# -# DMABUF options -# -CONFIG_SYNC_FILE=y -CONFIG_SW_SYNC=y -# CONFIG_AUXDISPLAY is not set -# CONFIG_UIO is not set -# CONFIG_VFIO is not set -# CONFIG_VIRT_DRIVERS is not set - -# -# Virtio drivers -# -# CONFIG_VIRTIO_PCI is not set -# CONFIG_VIRTIO_MMIO is not set - -# -# Microsoft Hyper-V guest support -# -CONFIG_STAGING=y -# CONFIG_PRISM2_USB is not set -# CONFIG_COMEDI is not set -# CONFIG_RTL8192U is not set -# CONFIG_RTLLIB is not set -# CONFIG_R8712U is not set -# CONFIG_R8188EU is not set -# CONFIG_RTS5208 is not set - -# -# IIO staging drivers -# - -# -# Accelerometers -# -# CONFIG_ADIS16201 is not set -# CONFIG_ADIS16203 is not set -# CONFIG_ADIS16209 is not set -# CONFIG_ADIS16240 is not set -# CONFIG_SCA3000 is not set - -# -# Analog to digital converters -# -# CONFIG_AD7606 is not set -# CONFIG_AD7780 is not set -# CONFIG_AD7816 is not set -# CONFIG_AD7192 is not set -# CONFIG_AD7280 is not set - -# -# Analog digital bi-direction converters -# -# CONFIG_ADT7316 is not set - -# -# Capacitance to digital converters -# -# CONFIG_AD7150 is not set -# CONFIG_AD7152 is not set -# CONFIG_AD7746 is not set - -# -# Direct Digital Synthesis -# -# CONFIG_AD9832 is not set -# CONFIG_AD9834 is not set - -# -# Digital gyroscope sensors -# -# CONFIG_ADIS16060 is not set - -# -# Network Analyzer, Impedance Converters -# -# CONFIG_AD5933 is not set - -# -# Light sensors -# -# CONFIG_SENSORS_ISL29018 is not set -# CONFIG_SENSORS_ISL29028 is not set -# CONFIG_TSL2583 is not set -# CONFIG_TSL2x7x is not set - -# -# Active energy metering IC -# -# CONFIG_ADE7753 is not set -# CONFIG_ADE7754 is not set -# CONFIG_ADE7758 is not set -# CONFIG_ADE7759 is not set -# CONFIG_ADE7854 is not set - -# -# Resolver to digital converters -# -# CONFIG_AD2S90 is not set -# CONFIG_AD2S1200 is not set -# CONFIG_AD2S1210 is not set - -# -# Triggers - standalone -# -# CONFIG_FB_SM750 is not set -# CONFIG_FB_XGI is not set - -# -# Speakup console speech -# -# CONFIG_STAGING_MEDIA is not set - -# -# Android -# -CONFIG_ASHMEM=y -CONFIG_ANDROID_LOW_MEMORY_KILLER=y -CONFIG_ANDROID_LOW_MEMORY_KILLER_AUTODETECT_OOM_ADJ_VALUES=y -CONFIG_ANDROID_INTF_ALARM_DEV=y -# CONFIG_ANDROID_VSOC is not set -CONFIG_SAMSUNG_FREECESS=y -CONFIG_ION=y -# CONFIG_ION_TEST is not set -# CONFIG_ION_DUMMY is not set -# CONFIG_ION_OF is not set -CONFIG_ION_EXYNOS=y -CONFIG_ION_EXYNOS_STAT_LOG=y -CONFIG_ION_RBIN_HEAP=y -# CONFIG_ION_EXYNOS_OF is not set -CONFIG_ANDROID_SWITCH=y -# CONFIG_STAGING_BOARD is not set -# CONFIG_LTE_GDM724X is not set -# CONFIG_LNET is not set -# CONFIG_DGNC is not set -# CONFIG_GS_FPGABOOT is not set -# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set -# CONFIG_FB_TFT is not set -# CONFIG_FSL_MC_BUS is not set -# CONFIG_WILC1000_SDIO is not set -# CONFIG_WILC1000_SPI is not set -# CONFIG_MOST is not set -# CONFIG_KS7010 is not set -# CONFIG_GREYBUS is not set -CONFIG_SEC_EXT=y - -# -# sec sysfs Feature -# -CONFIG_SEC_SYSFS=y -CONFIG_SEC_REBOOT=y -CONFIG_SEC_DEBUG=y -CONFIG_SEC_DEBUG_RESET_REASON=y -CONFIG_SEC_DEBUG_EXTRA_INFO=y -CONFIG_SEC_DEBUG_HW_PARAM=y -CONFIG_SEC_DEBUG_UPLOAD=y - -# -# Samsung TN Build Options -# -# CONFIG_SEC_FACTORY is not set - -# -# Samsung TN BSP Options -# -CONFIG_ARGOS=y -CONFIG_SEC_PARAM=y -CONFIG_CM_OFFSET=7340596 -CONFIG_SAMSUNG_PRODUCT_SHIP=y -CONFIG_SEC_HQM_DEVICE=y - -# -# Samsung TN Logging Options -# -CONFIG_SEC_AVC_LOG=y -CONFIG_SEC_DEBUG_TSP_LOG=y -CONFIG_SEC_DEBUG_AUTO_SUMMARY=y -CONFIG_SEC_UPLOAD=y -CONFIG_SEC_DEBUG_LAST_KMSG=y -CONFIG_SEC_DEBUG_INIT_LOG=y -CONFIG_SEC_DEBUG_PPMPU=y -CONFIG_SEC_DEBUG_BRANCH_VERIFIER=y -CONFIG_SEC_DEBUG_INDIRECT_BRANCH_VERIFIER=y -CONFIG_SEC_DEBUG_INIT_EXIT_PANIC=y -CONFIG_SEC_DEBUG_SOFTDOG_PWDT=y -CONFIG_SEC_BOOTSTAT=y - -# -# Samsung Mobile Power Management Options -# -CONFIG_SEC_PM=y -CONFIG_SEC_PM_DEBUG=y -CONFIG_SEC_PM_BIGDATA=y - -# -# Samsung TN NAD Options -# -CONFIG_SEC_NAD=y -CONFIG_SEC_NAD_MANUAL_PARAM_READTIME=10 -CONFIG_SEC_SUPPORT_SECOND_NAD=y -CONFIG_SEC_NAD_BALANCER=y -# CONFIG_SEC_NAD_HPM is not set -CONFIG_SEC_NAD_API=y -CONFIG_SEC_SUPPORT_VST=y -CONFIG_SEC_DUMP_SUMMARY=y - -# -# Logging Heavy Task Cpu Options -# -CONFIG_SEC_HEAVY_TASK_CPU=y - -# -# Samsung ubsan debug feature -# -# CONFIG_SEC_DEBUG_UBSAN is not set - -# -# Samsung kasan debug feature -# -# CONFIG_SEC_DEBUG_KASAN is not set -CONFIG_SEC_DEBUG_SUPPORT_FORCE_UPLOAD=y - -# -# Samsung TN option for VTS test -# -# CONFIG_SEC_VTS_TEST is not set -CONFIG_VNSWAP=y -CONFIG_SEC_STI=y - -# -# Samsung ABC Options -# -CONFIG_SEC_ABC=y - -# -# Samsung ABC Hub Options -# -CONFIG_SEC_ABC_HUB=y - -# -# Samsung ABC Hub Connect Detect Options -# -CONFIG_SEC_ABC_HUB_COND=y - -# -# Samsung ABC Hub Booting Time Check Options -# -CONFIG_SEC_ABC_HUB_BOOTC=y - -# -# Samsung ABC Hub Booting Time Check eng mode Options -# -# CONFIG_SEC_ABC_HUB_BOOTC_ENG is not set -# CONFIG_GOLDFISH is not set -# CONFIG_CHROME_PLATFORMS is not set -CONFIG_CLKDEV_LOOKUP=y -CONFIG_HAVE_CLK_PREPARE=y -CONFIG_COMMON_CLK=y - -# -# Common Clock Framework -# -# CONFIG_COMMON_CLK_VERSATILE is not set -# CONFIG_COMMON_CLK_SI5351 is not set -# CONFIG_COMMON_CLK_SI514 is not set -# CONFIG_COMMON_CLK_SI570 is not set -# CONFIG_COMMON_CLK_CDCE706 is not set -# CONFIG_COMMON_CLK_CDCE925 is not set -# CONFIG_COMMON_CLK_CS2000_CP is not set -# CONFIG_COMMON_CLK_S2MPS11 is not set -# CONFIG_CLK_QORIQ is not set -CONFIG_COMMON_CLK_XGENE=y -# CONFIG_COMMON_CLK_NXP is not set -# CONFIG_COMMON_CLK_PWM is not set -# CONFIG_COMMON_CLK_PXA is not set -# CONFIG_COMMON_CLK_PIC32 is not set -CONFIG_COMMON_CLK_SAMSUNG=y -CONFIG_COMPOSITE_CLK_SAMSUNG=y -CONFIG_EXYNOS_ARM64_COMMON_CLK=y -CONFIG_EXYNOS_AUDSS_CLK_CON=y - -# -# Hardware Spinlock drivers -# - -# -# Clock Source drivers -# -CONFIG_CLKSRC_OF=y -CONFIG_CLKSRC_PROBE=y -CONFIG_ARM_ARCH_TIMER=y -CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y -# CONFIG_ARM_ARCH_TIMER_VCT_ACCESS is not set -CONFIG_FSL_ERRATUM_A008585=y -# CONFIG_ARM_TIMER_SP804 is not set -# CONFIG_ATMEL_PIT is not set -CONFIG_CLKSRC_EXYNOS_MCT=y -# CONFIG_SH_TIMER_CMT is not set -# CONFIG_SH_TIMER_MTU2 is not set -# CONFIG_SH_TIMER_TMU is not set -# CONFIG_EM_TIMER_STI is not set -# CONFIG_MAILBOX is not set -CONFIG_IOMMU_API=y -CONFIG_IOMMU_SUPPORT=y - -# -# Generic IOMMU Pagetable Support -# -# CONFIG_IOMMU_IO_PGTABLE_LPAE is not set -# CONFIG_IOMMU_IO_PGTABLE_ARMV7S is not set -CONFIG_IOMMU_IOVA=y -CONFIG_OF_IOMMU=y -CONFIG_IOMMU_DMA=y -CONFIG_EXYNOS_IOMMU=y -CONFIG_EXYNOS_IOVMM=y -# CONFIG_EXYNOS_IOMMU_DEBUG is not set -# CONFIG_ARM_SMMU is not set -# CONFIG_ARM_SMMU_V3 is not set - -# -# Remoteproc drivers -# -# CONFIG_STE_MODEM_RPROC is not set - -# -# Rpmsg drivers -# - -# -# SOC (System On Chip) specific Drivers -# - -# -# Broadcom SoC drivers -# -CONFIG_SOC_SAMSUNG=y -CONFIG_EXYNOS_CHIPID=y -CONFIG_EXYNOS_PMU=y -CONFIG_ECT=y -CONFIG_ECT_DUMP=y -CONFIG_EXYNOS_PD=y -# CONFIG_EXYNOS_RGT is not set -# CONFIG_EXYNOS_BCM is not set -CONFIG_CAL_IF=y -CONFIG_EXYNOS_REBOOT=y -CONFIG_CMU_EWF=y -CONFIG_EXYNOS_PM_DVS=y -CONFIG_PMUCAL=y -CONFIG_FLEXPMU=y -CONFIG_EXYNOS_FLEXPMU_DBG=y -CONFIG_CMUCAL=y -CONFIG_CP_PMUCAL=y -CONFIG_CMUCAL_DEBUG=y -CONFIG_CMUCAL_QCH_IGNORE_SUPPORT=y -CONFIG_ACPM_DVFS=y -CONFIG_EXYNOS_ACPM=y -CONFIG_EXYNOS9810_ACPM=y -CONFIG_EXYNOS_ACPM_MFD=y -CONFIG_EXYNOS_ACPM_S2D=y -CONFIG_EXYNOS_CONTENT_PATH_PROTECTION=y -CONFIG_USI_V2=y -CONFIG_USI=y -CONFIG_EXYNOS_HOTPLUG_GOVERNOR=y -CONFIG_EXYNOS_DVFS_MANAGER=y -CONFIG_EXYNOS_SDM=y -# CONFIG_EXYNOS_OCP is not set -CONFIG_EXYNOS_MCINFO=y -CONFIG_MCINFO_SYSFS=y -CONFIG_EXYNOS_SECURE_LOG=y -CONFIG_SAMSUNG_VST_CAL=y -CONFIG_EXYNOS_KERNEL_PROTECTION=y -CONFIG_EXYNOS_SMC_LOG_THRESHOLD=0 -CONFIG_EXYNOS_SNAPSHOT_LOGGING_SMC_CALL=y -CONFIG_EXYNOS_HDCP2=y -# CONFIG_HDCP2_EMULATION_MODE is not set -CONFIG_HDCP2_DP_ENABLE=y -# CONFIG_HDCP2_IIA_ENABLE is not set -CONFIG_SENSORS_FP_USI_NUMBER=0 -# CONFIG_SUNXI_SRAM is not set -# CONFIG_SOC_TI is not set -CONFIG_PM_DEVFREQ=y - -# -# DEVFREQ Governors -# -# CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND is not set -# CONFIG_DEVFREQ_GOV_SIMPLE_USAGE is not set -# CONFIG_DEVFREQ_GOV_SIMPLE_EXYNOS is not set -CONFIG_DEVFREQ_GOV_SIMPLE_INTERACTIVE=y -# CONFIG_DEVFREQ_GOV_PERFORMANCE is not set -# CONFIG_DEVFREQ_GOV_POWERSAVE is not set -# CONFIG_DEVFREQ_GOV_USERSPACE is not set -# CONFIG_DEVFREQ_GOV_PASSIVE is not set - -# -# DEVFREQ Drivers -# -CONFIG_ARM_EXYNOS_DEVFREQ=y -CONFIG_ARM_EXYNOS_DEVFREQ_DEBUG=y -# CONFIG_ARM_EXYNOS_BUS_DEVFREQ is not set -# CONFIG_PM_DEVFREQ_EVENT is not set -CONFIG_ARM_EXYNOS9810_BUS_DEVFREQ=y -CONFIG_EXTCON=y - -# -# Extcon Device Drivers -# -# CONFIG_EXTCON_ADC_JACK is not set -# CONFIG_EXTCON_GPIO is not set -CONFIG_EXTCON_MADERA=y -CONFIG_EXTCON_MADERA_INPUT_EVENT=y -# CONFIG_EXTCON_PTT is not set -# CONFIG_EXTCON_MAX3355 is not set -# CONFIG_EXTCON_QCOM_SPMI_MISC is not set -# CONFIG_EXTCON_RT8973A is not set -# CONFIG_EXTCON_SM5502 is not set -# CONFIG_EXTCON_USB_GPIO is not set -# CONFIG_MEMORY is not set -CONFIG_IIO=y -CONFIG_IIO_BUFFER=y -# CONFIG_IIO_BUFFER_CB is not set -CONFIG_IIO_KFIFO_BUF=y -# CONFIG_IIO_CONFIGFS is not set -CONFIG_IIO_TRIGGER=y -CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 -# CONFIG_IIO_SW_DEVICE is not set -# CONFIG_IIO_SW_TRIGGER is not set - -# -# Accelerometers -# -# CONFIG_BMA180 is not set -# CONFIG_BMA220 is not set -# CONFIG_BMC150_ACCEL is not set -# CONFIG_DMARD06 is not set -# CONFIG_DMARD09 is not set -# CONFIG_IIO_ST_ACCEL_3AXIS is not set -# CONFIG_KXSD9 is not set -# CONFIG_KXCJK1013 is not set -# CONFIG_MC3230 is not set -# CONFIG_MMA7455_I2C is not set -# CONFIG_MMA7455_SPI is not set -# CONFIG_MMA7660 is not set -# CONFIG_MMA8452 is not set -# CONFIG_MMA9551 is not set -# CONFIG_MMA9553 is not set -# CONFIG_MXC4005 is not set -# CONFIG_MXC6255 is not set -# CONFIG_STK8312 is not set -# CONFIG_STK8BA50 is not set - -# -# Analog to digital converters -# -# CONFIG_AD7266 is not set -# CONFIG_AD7291 is not set -# CONFIG_AD7298 is not set -# CONFIG_AD7476 is not set -# CONFIG_AD7791 is not set -# CONFIG_AD7793 is not set -# CONFIG_AD7887 is not set -# CONFIG_AD7923 is not set -# CONFIG_AD799X is not set -# CONFIG_CC10001_ADC is not set -CONFIG_EXYNOS_ADC=y -# CONFIG_HI8435 is not set -# CONFIG_INA2XX_ADC is not set -# CONFIG_LTC2485 is not set -# CONFIG_MAX1027 is not set -# CONFIG_MAX1363 is not set -# CONFIG_MCP320X is not set -# CONFIG_MCP3422 is not set -# CONFIG_NAU7802 is not set -# CONFIG_TI_ADC081C is not set -# CONFIG_TI_ADC0832 is not set -# CONFIG_TI_ADC12138 is not set -# CONFIG_TI_ADC128S052 is not set -# CONFIG_TI_ADC161S626 is not set -# CONFIG_TI_ADS1015 is not set -# CONFIG_TI_ADS8688 is not set -# CONFIG_VF610_ADC is not set - -# -# Amplifiers -# -# CONFIG_AD8366 is not set - -# -# Chemical Sensors -# -# CONFIG_ATLAS_PH_SENSOR is not set -# CONFIG_IAQCORE is not set -# CONFIG_VZ89X is not set - -# -# Hid Sensor IIO Common -# - -# -# SSP Sensor Common -# -# CONFIG_IIO_SSP_SENSORHUB is not set - -# -# Digital to analog converters -# -# CONFIG_AD5064 is not set -# CONFIG_AD5360 is not set -# CONFIG_AD5380 is not set -# CONFIG_AD5421 is not set -# CONFIG_AD5446 is not set -# CONFIG_AD5449 is not set -# CONFIG_AD5592R is not set -# CONFIG_AD5593R is not set -# CONFIG_AD5504 is not set -# CONFIG_AD5624R_SPI is not set -# CONFIG_AD5686 is not set -# CONFIG_AD5755 is not set -# CONFIG_AD5761 is not set -# CONFIG_AD5764 is not set -# CONFIG_AD5791 is not set -# CONFIG_AD7303 is not set -# CONFIG_AD8801 is not set -# CONFIG_M62332 is not set -# CONFIG_MAX517 is not set -# CONFIG_MAX5821 is not set -# CONFIG_MCP4725 is not set -# CONFIG_MCP4922 is not set -# CONFIG_VF610_DAC is not set - -# -# IIO dummy driver -# - -# -# Frequency Synthesizers DDS/PLL -# - -# -# Clock Generator/Distribution -# -# CONFIG_AD9523 is not set - -# -# Phase-Locked Loop (PLL) frequency synthesizers -# -# CONFIG_ADF4350 is not set - -# -# Digital gyroscope sensors -# -# CONFIG_ADIS16080 is not set -# CONFIG_ADIS16130 is not set -# CONFIG_ADIS16136 is not set -# CONFIG_ADIS16260 is not set -# CONFIG_ADXRS450 is not set -# CONFIG_BMG160 is not set -# CONFIG_IIO_ST_GYRO_3AXIS is not set -# CONFIG_ITG3200 is not set - -# -# Health Sensors -# - -# -# Heart Rate Monitors -# -# CONFIG_AFE4403 is not set -# CONFIG_AFE4404 is not set -# CONFIG_MAX30100 is not set - -# -# Humidity sensors -# -# CONFIG_AM2315 is not set -# CONFIG_DHT11 is not set -# CONFIG_HDC100X is not set -# CONFIG_HTU21 is not set -# CONFIG_SI7005 is not set -# CONFIG_SI7020 is not set - -# -# Inertial measurement units -# -# CONFIG_ADIS16400 is not set -# CONFIG_ADIS16480 is not set -# CONFIG_BMI160_I2C is not set -# CONFIG_BMI160_SPI is not set -# CONFIG_KMX61 is not set -# CONFIG_INV_MPU6050_I2C is not set -# CONFIG_INV_MPU6050_SPI is not set - -# -# Light sensors -# -# CONFIG_ADJD_S311 is not set -# CONFIG_AL3320A is not set -# CONFIG_APDS9300 is not set -# CONFIG_APDS9960 is not set -# CONFIG_BH1750 is not set -# CONFIG_BH1780 is not set -# CONFIG_CM32181 is not set -# CONFIG_CM3232 is not set -# CONFIG_CM3323 is not set -# CONFIG_CM36651 is not set -# CONFIG_GP2AP020A00F is not set -# CONFIG_ISL29125 is not set -# CONFIG_JSA1212 is not set -# CONFIG_RPR0521 is not set -# CONFIG_LTR501 is not set -# CONFIG_MAX44000 is not set -# CONFIG_OPT3001 is not set -# CONFIG_PA12203001 is not set -# CONFIG_SI1145 is not set -# CONFIG_STK3310 is not set -# CONFIG_TCS3414 is not set -# CONFIG_TCS3472 is not set -# CONFIG_SENSORS_TSL2563 is not set -# CONFIG_TSL4531 is not set -# CONFIG_US5182D is not set -# CONFIG_VCNL4000 is not set -# CONFIG_VEML6070 is not set - -# -# Magnetometer sensors -# -# CONFIG_AK8974 is not set -# CONFIG_AK8975 is not set -# CONFIG_AK09911 is not set -# CONFIG_BMC150_MAGN_I2C is not set -# CONFIG_BMC150_MAGN_SPI is not set -# CONFIG_MAG3110 is not set -# CONFIG_MMC35240 is not set -# CONFIG_IIO_ST_MAGN_3AXIS is not set -# CONFIG_SENSORS_HMC5843_I2C is not set -# CONFIG_SENSORS_HMC5843_SPI is not set - -# -# Inclinometer sensors -# - -# -# Triggers - standalone -# -# CONFIG_IIO_INTERRUPT_TRIGGER is not set -# CONFIG_IIO_SYSFS_TRIGGER is not set - -# -# Digital potentiometers -# -# CONFIG_DS1803 is not set -# CONFIG_MAX5487 is not set -# CONFIG_MCP4131 is not set -# CONFIG_MCP4531 is not set -# CONFIG_TPL0102 is not set - -# -# Pressure sensors -# -# CONFIG_BMP280 is not set -# CONFIG_HP03 is not set -# CONFIG_MPL115_I2C is not set -# CONFIG_MPL115_SPI is not set -# CONFIG_MPL3115 is not set -# CONFIG_MS5611 is not set -# CONFIG_MS5637 is not set -# CONFIG_IIO_ST_PRESS is not set -# CONFIG_T5403 is not set -# CONFIG_HP206C is not set -# CONFIG_ZPA2326 is not set - -# -# Lightning sensors -# -# CONFIG_AS3935 is not set - -# -# Proximity sensors -# -# CONFIG_LIDAR_LITE_V2 is not set -# CONFIG_SX9500 is not set - -# -# Temperature sensors -# -# CONFIG_MAXIM_THERMOCOUPLE is not set -# CONFIG_MLX90614 is not set -# CONFIG_TMP006 is not set -# CONFIG_TSYS01 is not set -# CONFIG_TSYS02D is not set -# CONFIG_NTB is not set -# CONFIG_VME_BUS is not set -CONFIG_PWM=y -CONFIG_PWM_SYSFS=y -# CONFIG_PWM_FSL_FTM is not set -# CONFIG_PWM_PCA9685 is not set -CONFIG_PWM_SAMSUNG=y -CONFIG_IRQCHIP=y -CONFIG_ARM_GIC=y -CONFIG_ARM_GIC_MAX_NR=1 -CONFIG_ARM_GIC_V2M=y -CONFIG_ARM_GIC_V3_ITS=y -CONFIG_MADERA_IRQ=y -# CONFIG_IPACK_BUS is not set -CONFIG_BATTERY_SAMSUNG=y -CONFIG_BATTERY_SWELLING=y -# CONFIG_BATTERY_SWELLING_SELF_DISCHARGING is not set -CONFIG_CALC_TIME_TO_FULL=y -# CONFIG_SW_SELF_DISCHARGING is not set -CONFIG_BATTERY_AGE_FORECAST=y -# CONFIG_MULTI_CHARGING is not set -# CONFIG_STEP_CHARGING is not set -# CONFIG_UPDATE_BATTERY_DATA is not set -# CONFIG_SAMSUNG_BATTERY_ENG_TEST is not set -# CONFIG_FUELGAUGE_DUMMY is not set -# CONFIG_FUELGAUGE_MAX17042 is not set -# CONFIG_FUELGAUGE_MAX17048 is not set -# CONFIG_FUELGAUGE_MAX17050 is not set -# CONFIG_FUELGAUGE_MAX77823 is not set -# CONFIG_FUELGAUGE_MAX77843 is not set -# CONFIG_FUELGAUGE_MAX77833 is not set -# CONFIG_FUELGAUGE_MAX77854 is not set -# CONFIG_CHARGER_DUMMY is not set -# CONFIG_CHARGER_SMB328 is not set -# CONFIG_CHARGER_BQ24157 is not set -# CONFIG_CHARGER_BQ24191 is not set -# CONFIG_CHARGER_BQ24260 is not set -# CONFIG_CHARGER_MAX77823 is not set -# CONFIG_CHARGER_MAX77843 is not set -# CONFIG_CHARGER_MAX77833 is not set -# CONFIG_CHARGER_MAX77854 is not set -# CONFIG_CHARGER_DA9155 is not set -# CONFIG_WIRELESS_CHARGER_HIGH_VOLTAGE is not set -# CONFIG_CS100_JPNCONCEPT is not set -# CONFIG_WIRELESS_CHARGER_BQ51221 is not set -# CONFIG_WIRELESS_CHARGER_P9220 is not set -CONFIG_WIRELESS_FIRMWARE_UPDATE=y -CONFIG_AFC_CHARGER_MODE=y -# CONFIG_SAMSUNG_LPM_MODE is not set -# CONFIG_EN_OOPS is not set -# CONFIG_STORE_MODE is not set -CONFIG_BATTERY_NOTIFIER=y -CONFIG_BATTERY_SAMSUNG_V2=y -# CONFIG_BATTERY_AGE_FORECAST_DETACHABLE is not set -# CONFIG_BATTERY_AGE_FORECAST_B2B is not set -# CONFIG_ENG_BATTERY_CONCEPT is not set -# CONFIG_AFC_CURR_CONTROL_BY_TEMP is not set -CONFIG_BATTERY_CISD=y -# CONFIG_FUELGAUGE_MAX77865 is not set -CONFIG_FUELGAUGE_MAX77705=y -# CONFIG_CHARGER_MAX77865 is not set -CONFIG_CHARGER_MAX77705=y -CONFIG_CHARGER_MAX77705_OTG_LIMIT=y -CONFIG_MAX77705_CHECK_B2SOVRC=y -# CONFIG_WIRELESS_NO_HV is not set -# CONFIG_WIRELESS_CHARGER_S2MIW03 is not set -CONFIG_WIRELESS_CHARGER_MFC=y -CONFIG_SUPPORT_HV_CTRL=y -CONFIG_QH_ALGORITHM=y -# CONFIG_ENABLE_100MA_CHARGING_BEFORE_USB_CONFIGURED is not set -CONFIG_WIRELESS_FIRMWARE_65=y -# CONFIG_RESET_CONTROLLER is not set -# CONFIG_FMC is not set - -# -# PHY Subsystem -# -CONFIG_GENERIC_PHY=y -# CONFIG_PHY_EXYNOS_MIPI_VIDEO is not set -CONFIG_PHY_EXYNOS9810_MIPI=y -CONFIG_PHY_EXYNOS_DISPLAYPORT=y -# CONFIG_PHY_PXA_28NM_HSIC is not set -# CONFIG_PHY_PXA_28NM_USB2 is not set -# CONFIG_PHY_EXYNOS_DP_VIDEO is not set -# CONFIG_BCM_KONA_USB2_PHY is not set -CONFIG_PHY_EXYNOS5_USBDRD=y -CONFIG_PHY_EXYNOS_USBDRD=y -# CONFIG_PHY_EXYNOS_DEBUGFS is not set -CONFIG_PHY_SAMSUNG_USB_CAL=y -# CONFIG_PHY_XGENE is not set -# CONFIG_POWERCAP is not set -# CONFIG_MCB is not set - -# -# Performance monitor support -# -CONFIG_ARM_PMU=y -CONFIG_RAS=y -# CONFIG_THUNDERBOLT is not set - -# -# Android -# -CONFIG_ANDROID=y -CONFIG_ANDROID_BINDER_IPC=y -CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder" -# CONFIG_ANDROID_BINDER_IPC_SELFTEST is not set -# CONFIG_LIBNVDIMM is not set -# CONFIG_NVMEM is not set -# CONFIG_STM is not set -# CONFIG_INTEL_TH is not set - -# -# FPGA Configuration Support -# -# CONFIG_FPGA is not set -CONFIG_TRACE=y -CONFIG_EXYNOS_ITMON=y -CONFIG_EXYNOS_SNAPSHOT=y -CONFIG_EXYNOS_SNAPSHOT_CALLSTACK=4 -CONFIG_EXYNOS_SNAPSHOT_IRQ_EXIT=y -CONFIG_EXYNOS_SNAPSHOT_IRQ_EXIT_THRESHOLD=0 -# CONFIG_EXYNOS_SNAPSHOT_IRQ_DISABLED is not set -# CONFIG_EXYNOS_SNAPSHOT_SPINLOCK is not set -CONFIG_EXYNOS_SNAPSHOT_CLK=y -CONFIG_EXYNOS_SNAPSHOT_PMU=y -CONFIG_EXYNOS_SNAPSHOT_FREQ=y -CONFIG_EXYNOS_SNAPSHOT_DM=y -CONFIG_EXYNOS_SNAPSHOT_HRTIMER=y -# CONFIG_EXYNOS_SNAPSHOT_REG is not set -CONFIG_EXYNOS_SNAPSHOT_REGULATOR=y -CONFIG_EXYNOS_SNAPSHOT_ACPM=y -CONFIG_EXYNOS_SNAPSHOT_THERMAL=y -CONFIG_EXYNOS_SNAPSHOT_UART=y -CONFIG_EXYNOS_SNAPSHOT_I2C=y -CONFIG_EXYNOS_SNAPSHOT_SPI=y -# CONFIG_EXYNOS_SNAPSHOT_LOGGING_HVC_CALL is not set -CONFIG_EXYNOS_SNAPSHOT_PANIC_REBOOT=y -CONFIG_EXYNOS_SNAPSHOT_WATCHDOG_RESET=y -CONFIG_EXYNOS_SNAPSHOT_CRASH_KEY=y -# CONFIG_EXYNOS_SNAPSHOT_MINIMIZED_MODE is not set -CONFIG_EXYNOS_CORESIGHT=y -CONFIG_EXYNOS_CORESIGHT_PC_INFO=y -CONFIG_PC_ITERATION=5 -# CONFIG_EXYNOS_CORESIGHT_MAINTAIN_DBG_REG is not set -CONFIG_EXYNOS_CONSOLE_DEBUGGER=y -CONFIG_EXYNOS_CONSOLE_DEBUGGER_INTERFACE=y -# CONFIG_EXYNOS_CORESIGHT_ETM is not set -CONFIG_VISION_SUPPORT=y -CONFIG_EXYNOS_IVA=y -CONFIG_IVA_VER=20 -CONFIG_EXYNOS_SCORE=y -CONFIG_EXYNOS_SCORE_V2=y - -# -# CCIC configs -# -CONFIG_CCIC_NOTIFIER=y -# CONFIG_CCIC_S2MM003 is not set -CONFIG_CCIC_S2MM005=y -CONFIG_CCIC_MAX77705=y -# CONFIG_CCIC_MAX77705_DEBUG is not set -CONFIG_CCIC_ALTERNATE_MODE=y -CONFIG_CCIC_LPM_ENABLE=y -# CONFIG_CCIC_WATER_DETECT is not set -CONFIG_SENSORS_SYSFS=y -CONFIG_SENSORS_SSP=y -CONFIG_SENSORS_SSP_BBD=y -# CONFIG_SENSORS_SSP_MPU6500 is not set -# CONFIG_SENSORS_SSP_ICM20610 is not set -# CONFIG_SENSORS_SSP_BMI058 is not set -# CONFIG_SENSORS_SSP_K6DS3TR is not set -CONFIG_SENSORS_SSP_LSM6DSL=y -# CONFIG_SENSORS_SSP_AK09911 is not set -# CONFIG_SENSORS_SSP_YAS532 is not set -# CONFIG_SENSORS_SSP_YAS537 is not set -# CONFIG_SENSORS_SSP_YAS539 is not set -CONFIG_SENSORS_SSP_MAGNETIC_COMMON=y -CONFIG_SENSORS_SSP_AK09918=y -# CONFIG_SENSORS_SSP_CM3320 is not set -# CONFIG_SENSORS_SSP_MAX88920 is not set -# CONFIG_SENSORS_SSP_MAX88921 is not set -# CONFIG_SENSORS_SSP_LPS25H is not set -CONFIG_SENSORS_SSP_LPS22H=y -# CONFIG_SENSORS_SSP_SHTC1 is not set -# CONFIG_SENSORS_SSP_STM32F401 is not set -CONFIG_SENSORS_SSP_SENSORHUB=y -CONFIG_SENSORS_SSP_MOBEAM=y -# CONFIG_SENSORS_SSP_IRLED is not set -CONFIG_MAX86902_THRESHOLD=70000 -# CONFIG_SENSOR_SSP_PROXIMTY_FOR_WINDOW_TYPE is not set -# CONFIG_SENSORS_SSP_TMD4905 is not set -CONFIG_SENSORS_SSP_TMD4906=y -# CONFIG_SENSORS_SSP_TMD4904 is not set -# CONFIG_SENSORS_SSP_TMD4903 is not set -# CONFIG_SENSORS_SSP_TMG399x is not set -# CONFIG_SENSORS_SSP_CM3323 is not set -# CONFIG_SENSORS_SSP_PROX_SETTING is not set -CONFIG_SENSORS_SSP_PROX_AUTOCAL_AMS=y -# CONFIG_SENSORS_SSP_PROX_FACTORYCAL is not set -CONFIG_SENSORS_SSP_LIGHT_REPORT_LUX=y -CONFIG_SENSORS_SSP_LIGHT_MAX_GAIN_2BYTE=y -CONFIG_SENSORS_SSP_LIGHT_COLORID=y -CONFIG_SENSORS_SSP_IRDATA_FOR_CAMERA=y -CONFIG_SENSORS_MULTIPLE_GLASS_TYPE=y -# CONFIG_SENSORS_SSP_SX9306 is not set -# CONFIG_SENSORS_SX9310 is not set -# CONFIG_SENSORS_SX9310_USE_2ND_CH is not set -CONFIG_SENSORS_SX9320=y -CONFIG_SENSORS_SX9320_NORMAL_TOUCH_THRESHOLD=221 -CONFIG_SENSORS_SSP_INTERRUPT_GYRO_SENSOR=y -CONFIG_SENSORS_SSP_HIFI_BATCHING=y -# CONFIG_SENSORS_SSP_VLTE is not set -# CONFIG_SENSORS_SSP_NOBLELTE is not set -# CONFIG_SENSORS_SSP_ZENLTE is not set -# CONFIG_SENSORS_SSP_LUCKY is not set -# CONFIG_SENSORS_SSP_GRACE is not set -# CONFIG_SENSORS_SSP_DREAM is not set -# CONFIG_SENSORS_SSP_GREAT is not set -# CONFIG_SENSORS_SSP_STAR is not set -CONFIG_SENSORS_SSP_CROWN=y -# CONFIG_SENSORS_SSP_HAECHI is not set -# CONFIG_SENSORS_SSP_LUGE is not set -CONFIG_SSP_MOTOR_CALLBACK=y -CONFIG_SENSORS_SSP_THERMISTOR=y -# CONFIG_SSP_REGISTER_RW is not set -CONFIG_SSP_SUPPORT_MAGNETIC_OVERFLOW=y -# CONFIG_BCM_GPS_TTY_DRIVER is not set -# CONFIG_BCM_GPS_I2C_DRIVER is not set -CONFIG_BCM_GPS_SPI_DRIVER=y -# CONFIG_SENSORS_HRMSENSOR is not set -CONFIG_SENSORS_MAX86915=y -CONFIG_GPS_BCMxxxxx=y -# CONFIG_GPS_BCM4752 is not set -# CONFIG_GPS_BCM47521 is not set -# CONFIG_GPS_BCM4753 is not set -CONFIG_GPS_BCM47531=y -CONFIG_GPS_BCM4773=y -CONFIG_EXYNOS_BTS=y -CONFIG_EXYNOS9810_BTS=y -CONFIG_TRUSTONIC_TEE=y -CONFIG_TRUSTONIC_TEE_LPAE=y -# CONFIG_TRUSTONIC_TEE_DEBUG is not set -CONFIG_TRUSTONIC_TRUSTED_UI=y -CONFIG_TRUSTONIC_TRUSTED_UI_FB_BLANK=y -CONFIG_SECURE_OS_CONTROL=y -CONFIG_SECURE_OS_BOOSTER_API=y -# CONFIG_SECURE_OS_SUPPORT_MCT_DISABLE is not set -CONFIG_TRUSTED_UI_TOUCH_ENABLE=y -# CONFIG_TEE is not set -CONFIG_MOTOR_DRV_MAX77705=y -CONFIG_SEC_HAPTIC=y -CONFIG_SENSORS_FINGERPRINT=y -# CONFIG_SENSORS_FPRINT_SECURE is not set -# CONFIG_SENSORS_FINGERPRINT_32BITS_PLATFORM_ONLY is not set -# CONFIG_SENSORS_VFS7XXX is not set -# CONFIG_SENSORS_VFS8XXX is not set -CONFIG_SENSORS_ET5XX=y -CONFIG_GATOR=m -CONFIG_FIVE_TEE_DRIVER=y -# CONFIG_FIVE_USE_EMULATOR is not set -CONFIG_FIVE_USE_TRUSTONIC=y -# CONFIG_TEE_DRIVER_DEBUG is not set -CONFIG_FIVE_TRUSTLET_PATH="five/ffffffff000000000000000000000072.tlbin" -# CONFIG_FIVE_EARLY_LOAD_TRUSTED_APP is not set - -# -# MPSD System Intelligence kernel module -# -CONFIG_MPSD=y -# CONFIG_MPSD_DEBUG is not set -CONFIG_ICD=y -CONFIG_ICD_USE_TRUSTONIC=y -CONFIG_TZIC=y -CONFIG_TZIC_USE_TRUSTONIC=y -# CONFIG_TZIC_DEFAULT is not set - -# -# Firmware Drivers -# -CONFIG_ARM_PSCI_FW=y -# CONFIG_FIRMWARE_MEMMAP is not set -# CONFIG_FW_CFG_SYSFS is not set -CONFIG_HAVE_ARM_SMCCC=y -# CONFIG_MESON_SM is not set -# CONFIG_ACPI is not set - -# -# File systems -# -CONFIG_DCACHE_WORD_ACCESS=y -CONFIG_INTERRUPTIBLE_SYNC=y -CONFIG_EXT2_FS=y -CONFIG_EXT2_FS_XATTR=y -# CONFIG_EXT2_FS_POSIX_ACL is not set -CONFIG_EXT2_FS_SECURITY=y -CONFIG_EXT3_FS=y -# CONFIG_EXT3_FS_POSIX_ACL is not set -# CONFIG_EXT3_FS_SECURITY is not set -CONFIG_EXT4_FS=y -CONFIG_EXT4_FS_POSIX_ACL=y -CONFIG_EXT4_FS_SECURITY=y -CONFIG_EXT4_ENCRYPTION=y -CONFIG_EXT4_FS_ENCRYPTION=y -# CONFIG_EXT4_DEBUG is not set -CONFIG_JBD2=y -# CONFIG_JBD2_DEBUG is not set -CONFIG_FS_MBCACHE=y -# CONFIG_REISERFS_FS is not set -# CONFIG_JFS_FS is not set -# CONFIG_XFS_FS is not set -# CONFIG_GFS2_FS is not set -# CONFIG_OCFS2_FS is not set -# CONFIG_BTRFS_FS is not set -# CONFIG_NILFS2_FS is not set -# CONFIG_F2FS_FS is not set -# CONFIG_FS_DAX is not set -CONFIG_FS_POSIX_ACL=y -# CONFIG_EXPORTFS_BLOCK_OPS is not set -CONFIG_FILE_LOCKING=y -CONFIG_MANDATORY_FILE_LOCKING=y -CONFIG_FS_ENCRYPTION=y -CONFIG_FS_PRIVATE_ENCRYPTION=y -# CONFIG_FS_CRYPTO_SEC_EXTENSION is not set -CONFIG_CRYPTO_FIPS=y -# CONFIG_FSCRYPT_SDP is not set -CONFIG_FSNOTIFY=y -CONFIG_DNOTIFY=y -CONFIG_INOTIFY_USER=y -# CONFIG_FANOTIFY is not set -CONFIG_QUOTA=y -CONFIG_QUOTA_NETLINK_INTERFACE=y -CONFIG_PRINT_QUOTA_WARNING=y -# CONFIG_QUOTA_DEBUG is not set -CONFIG_QUOTA_TREE=y -# CONFIG_QFMT_V1 is not set -CONFIG_QFMT_V2=y -CONFIG_QUOTACTL=y -# CONFIG_AUTOFS4_FS is not set -CONFIG_FUSE_FS=y -# CONFIG_CUSE is not set -# CONFIG_OVERLAY_FS is not set - -# -# Caches -# -# CONFIG_FSCACHE is not set - -# -# CD-ROM/DVD Filesystems -# -# CONFIG_ISO9660_FS is not set -# CONFIG_UDF_FS is not set - -# -# DOS/FAT/NT Filesystems -# -CONFIG_FAT_FS=y -CONFIG_MSDOS_FS=y -CONFIG_VFAT_FS=y -CONFIG_FAT_DEFAULT_CODEPAGE=437 -CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" -# CONFIG_FAT_DEFAULT_UTF8 is not set -CONFIG_FAT_VIRTUAL_XATTR=y -CONFIG_FAT_VIRTUAL_XATTR_SELINUX_LABEL="u:object_r:sdcard_external:s0" -CONFIG_FAT_SUPPORT_STLOG=y -CONFIG_FAT_UEVENT=y -# CONFIG_NTFS_FS is not set -CONFIG_SDFAT_FS=y -CONFIG_SDFAT_DELAYED_META_DIRTY=y -# CONFIG_SDFAT_SUPPORT_DIR_SYNC is not set -CONFIG_SDFAT_DEFAULT_CODEPAGE=437 -CONFIG_SDFAT_DEFAULT_IOCHARSET="utf8" -# CONFIG_SDFAT_CHECK_RO_ATTR is not set -CONFIG_SDFAT_ALIGNED_MPAGE_WRITE=y -CONFIG_SDFAT_VIRTUAL_XATTR=y -CONFIG_SDFAT_VIRTUAL_XATTR_SELINUX_LABEL="u:object_r:sdcard_external:s0" -CONFIG_SDFAT_SUPPORT_STLOG=y -CONFIG_SDFAT_DEBUG=y -# CONFIG_SDFAT_DBG_IOCTL is not set -CONFIG_SDFAT_DBG_MSG=y -# CONFIG_SDFAT_DBG_BUGON is not set -CONFIG_SDFAT_STATISTICS=y -CONFIG_SDFAT_UEVENT=y - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -# CONFIG_PROC_KCORE is not set -CONFIG_PROC_SYSCTL=y -CONFIG_PROC_PAGE_MONITOR=y -# CONFIG_PROC_CHILDREN is not set -CONFIG_PROC_UID=y -CONFIG_PROC_PARSE_OPTION_ON_MOUNT=y -CONFIG_PROC_FSLOG=y -CONFIG_PROC_STLOG=y -CONFIG_PROC_DLOG=y -# CONFIG_PROC_TRIGGER_SQLITE_BUG is not set -CONFIG_KERNFS=y -CONFIG_SYSFS=y -CONFIG_TMPFS=y -CONFIG_TMPFS_POSIX_ACL=y -CONFIG_TMPFS_XATTR=y -# CONFIG_HUGETLBFS is not set -# CONFIG_HUGETLB_PAGE is not set -CONFIG_ARCH_HAS_GIGANTIC_PAGE=y -CONFIG_CONFIGFS_FS=y -CONFIG_MISC_FILESYSTEMS=y -# CONFIG_ORANGEFS_FS is not set -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -CONFIG_ECRYPT_FS=y -# CONFIG_ECRYPT_FS_MESSAGING is not set -CONFIG_WTL_ENCRYPTION_FILTER=y -CONFIG_ECRYPTFS_FEK_INTEGRITY=y -CONFIG_SDP=y -# CONFIG_SDP_KEY_DUMP is not set -CONFIG_DLP=y -CONFIG_SDCARD_FS=y -# CONFIG_HFS_FS is not set -# CONFIG_HFSPLUS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_LOGFS is not set -CONFIG_CRAMFS=y -# CONFIG_SQUASHFS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_OMFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX6FS_FS is not set -# CONFIG_ROMFS_FS is not set -CONFIG_PSTORE=y -CONFIG_PSTORE_ZLIB_COMPRESS=y -# CONFIG_PSTORE_LZO_COMPRESS is not set -# CONFIG_PSTORE_LZ4_COMPRESS is not set -CONFIG_PSTORE_CONSOLE=y -CONFIG_PSTORE_PMSG=y -CONFIG_PSTORE_RAM=y -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set -CONFIG_NETWORK_FILESYSTEMS=y -# CONFIG_NFS_FS is not set -# CONFIG_NFSD is not set -# CONFIG_CEPH_FS is not set -# CONFIG_CIFS is not set -# CONFIG_NCP_FS is not set -# CONFIG_CODA_FS is not set -# CONFIG_AFS_FS is not set -CONFIG_NLS=y -CONFIG_NLS_DEFAULT="iso8859-1" -CONFIG_NLS_CODEPAGE_437=y -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1250 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -# CONFIG_NLS_ASCII is not set -CONFIG_NLS_ISO8859_1=y -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -# CONFIG_NLS_MAC_ROMAN is not set -# CONFIG_NLS_MAC_CELTIC is not set -# CONFIG_NLS_MAC_CENTEURO is not set -# CONFIG_NLS_MAC_CROATIAN is not set -# CONFIG_NLS_MAC_CYRILLIC is not set -# CONFIG_NLS_MAC_GAELIC is not set -# CONFIG_NLS_MAC_GREEK is not set -# CONFIG_NLS_MAC_ICELAND is not set -# CONFIG_NLS_MAC_INUIT is not set -# CONFIG_NLS_MAC_ROMANIAN is not set -# CONFIG_NLS_MAC_TURKISH is not set -CONFIG_NLS_UTF8=y -# CONFIG_DLM is not set -# CONFIG_VIRTUALIZATION is not set - -# -# Kernel hacking -# - -# -# printk and dmesg options -# -CONFIG_PRINTK_TIME=y -CONFIG_PRINTK_PROCESS=y -CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 -# CONFIG_BOOT_PRINTK_DELAY is not set -# CONFIG_DYNAMIC_DEBUG is not set - -# -# Compile-time checks and compiler options -# -CONFIG_DEBUG_INFO=y -# CONFIG_DEBUG_INFO_REDUCED is not set -# CONFIG_DEBUG_INFO_SPLIT is not set -# CONFIG_DEBUG_INFO_DWARF4 is not set -# CONFIG_GDB_SCRIPTS is not set -CONFIG_ENABLE_WARN_DEPRECATED=y -CONFIG_ENABLE_MUST_CHECK=y -CONFIG_FRAME_WARN=4096 -# CONFIG_STRIP_ASM_SYMS is not set -# CONFIG_READABLE_ASM is not set -# CONFIG_UNUSED_SYMBOLS is not set -# CONFIG_PAGE_OWNER is not set -CONFIG_DEBUG_FS=y -# CONFIG_HEADERS_CHECK is not set -# CONFIG_DEBUG_SECTION_MISMATCH is not set -CONFIG_SECTION_MISMATCH_WARN_ONLY=y -CONFIG_ARCH_WANT_FRAME_POINTERS=y -CONFIG_FRAME_POINTER=y -# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set -CONFIG_MAGIC_SYSRQ=y -CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1 -CONFIG_DEBUG_KERNEL=y - -# -# Memory Debugging -# -# CONFIG_PAGE_EXTENSION is not set -# CONFIG_DEBUG_PAGEALLOC is not set -# CONFIG_PAGE_POISONING is not set -# CONFIG_DEBUG_PAGE_REF is not set -# CONFIG_DEBUG_OBJECTS is not set -# CONFIG_SLUB_DEBUG_ON is not set -# CONFIG_SLUB_STATS is not set -CONFIG_HAVE_DEBUG_KMEMLEAK=y -# CONFIG_DEBUG_KMEMLEAK is not set -# CONFIG_DEBUG_STACK_USAGE is not set -# CONFIG_DEBUG_VM is not set -# CONFIG_DEBUG_MEMORY_INIT is not set -# CONFIG_DEBUG_PER_CPU_MAPS is not set -CONFIG_HAVE_ARCH_KASAN=y -# CONFIG_KASAN is not set -CONFIG_ARCH_HAS_KCOV=y -# CONFIG_KCOV is not set -# CONFIG_DEBUG_SHIRQ is not set - -# -# Debug Lockups and Hangs -# -CONFIG_LOCKUP_DETECTOR=y -CONFIG_HARDLOCKUP_DETECTOR_OTHER_CPU=y -CONFIG_BOOTPARAM_HARDLOCKUP_PANIC=y -CONFIG_BOOTPARAM_HARDLOCKUP_PANIC_VALUE=1 -CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y -CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=1 -CONFIG_DETECT_HUNG_TASK=y -CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 -# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set -CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 -# CONFIG_WQ_WATCHDOG is not set -# CONFIG_PANIC_ON_OOPS is not set -CONFIG_PANIC_ON_OOPS_VALUE=0 -CONFIG_PANIC_TIMEOUT=5 -CONFIG_SCHED_DEBUG=y -CONFIG_SCHED_INFO=y -# CONFIG_PANIC_ON_RT_THROTTLING is not set -CONFIG_SCHEDSTATS=y -# CONFIG_SCHED_STACK_END_CHECK is not set -# CONFIG_DEBUG_TIMEKEEPING is not set -CONFIG_TIMER_STATS=y -# CONFIG_DEBUG_PREEMPT is not set - -# -# Lock Debugging (spinlocks, mutexes, etc...) -# -# CONFIG_DEBUG_RT_MUTEXES is not set -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_DEBUG_MUTEXES is not set -# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set -# CONFIG_DEBUG_LOCK_ALLOC is not set -# CONFIG_PROVE_LOCKING is not set -# CONFIG_LOCK_STAT is not set -CONFIG_DEBUG_ATOMIC_SLEEP=y -# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set -# CONFIG_LOCK_TORTURE_TEST is not set -CONFIG_STACKTRACE=y -# CONFIG_DEBUG_KOBJECT is not set -CONFIG_HAVE_DEBUG_BUGVERBOSE=y -CONFIG_DEBUG_BUGVERBOSE=y -CONFIG_DEBUG_LIST=y -# CONFIG_DEBUG_PI_LIST is not set -# CONFIG_DEBUG_SG is not set -# CONFIG_DEBUG_NOTIFIERS is not set -CONFIG_DEBUG_NOTIFIERS_PRINT_ELAPSED_TIME=y -# CONFIG_DEBUG_CREDENTIALS is not set - -# -# RCU Debugging -# -# CONFIG_PROVE_RCU is not set -# CONFIG_SPARSE_RCU_POINTER is not set -# CONFIG_TORTURE_TEST is not set -# CONFIG_RCU_PERF_TEST is not set -# CONFIG_RCU_TORTURE_TEST is not set -CONFIG_RCU_CPU_STALL_TIMEOUT=21 -# CONFIG_RCU_TRACE is not set -# CONFIG_RCU_EQS_DEBUG is not set -# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set -# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set -# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set -# CONFIG_NOTIFIER_ERROR_INJECTION is not set -# CONFIG_FAULT_INJECTION is not set -# CONFIG_LATENCYTOP is not set -CONFIG_NOP_TRACER=y -CONFIG_HAVE_FUNCTION_TRACER=y -CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y -CONFIG_HAVE_DYNAMIC_FTRACE=y -CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y -CONFIG_HAVE_SYSCALL_TRACEPOINTS=y -CONFIG_HAVE_C_RECORDMCOUNT=y -CONFIG_TRACE_CLOCK=y -CONFIG_RING_BUFFER=y -CONFIG_EVENT_TRACING=y -CONFIG_GPU_TRACEPOINTS=y -CONFIG_CONTEXT_SWITCH_TRACER=y -CONFIG_TRACING=y -CONFIG_TRACING_SUPPORT=y -# CONFIG_FTRACE is not set - -# -# Runtime Testing -# -# CONFIG_LKDTM is not set -# CONFIG_TEST_LIST_SORT is not set -# CONFIG_BACKTRACE_SELF_TEST is not set -# CONFIG_RBTREE_TEST is not set -# CONFIG_INTERVAL_TREE_TEST is not set -# CONFIG_PERCPU_TEST is not set -CONFIG_ATOMIC64_SELFTEST=y -# CONFIG_TEST_HEXDUMP is not set -# CONFIG_TEST_STRING_HELPERS is not set -# CONFIG_TEST_KSTRTOX is not set -# CONFIG_TEST_PRINTF is not set -# CONFIG_TEST_BITMAP is not set -# CONFIG_TEST_UUID is not set -# CONFIG_TEST_RHASHTABLE is not set -# CONFIG_TEST_HASH is not set -# CONFIG_DMA_API_DEBUG is not set -# CONFIG_TEST_LKM is not set -# CONFIG_TEST_USER_COPY is not set -# CONFIG_TEST_BPF is not set -# CONFIG_TEST_FIRMWARE is not set -# CONFIG_TEST_UDELAY is not set -# CONFIG_MEMTEST is not set -# CONFIG_TEST_STATIC_KEYS is not set -# CONFIG_SAMPLES is not set -CONFIG_HAVE_ARCH_KGDB=y -# CONFIG_KGDB is not set -CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y -# CONFIG_ARCH_WANTS_UBSAN_NO_NULL is not set -# CONFIG_UBSAN is not set -CONFIG_ARCH_HAS_DEVMEM_IS_ALLOWED=y -# CONFIG_STRICT_DEVMEM is not set -# CONFIG_ARM64_PTDUMP is not set -# CONFIG_PID_IN_CONTEXTIDR is not set -# CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET is not set -CONFIG_DEBUG_EXCEPTION_STACK=y -CONFIG_DEBUG_SET_MODULE_RONX=y -# CONFIG_DEBUG_ALIGN_RODATA is not set - -# -# Samsung Rooting Restriction Feature -# -# CONFIG_SEC_RESTRICT_ROOTING is not set -# CONFIG_CORESIGHT is not set - -# -# Security options -# -CONFIG_KEYS=y -CONFIG_KEYS_COMPAT=y -# CONFIG_PERSISTENT_KEYRINGS is not set -# CONFIG_BIG_KEYS is not set -# CONFIG_ENCRYPTED_KEYS is not set -# CONFIG_KEY_DH_OPERATIONS is not set -# CONFIG_SECURITY_DMESG_RESTRICT is not set -CONFIG_SECURITY_PERF_EVENTS_RESTRICT=y -CONFIG_SECURITY=y -# CONFIG_SECURITYFS is not set -CONFIG_SECURITY_NETWORK=y -# CONFIG_SECURITY_NETWORK_XFRM is not set -# CONFIG_SECURITY_PATH is not set -CONFIG_LSM_MMAP_MIN_ADDR=4096 -CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y -CONFIG_HAVE_ARCH_HARDENED_USERCOPY=y -CONFIG_HARDENED_USERCOPY=y -# CONFIG_HARDENED_USERCOPY_PAGESPAN is not set -# CONFIG_NO_SDP_BASE is not set -CONFIG_SECURITY_SELINUX=y -# CONFIG_SECURITY_SELINUX_BOOTPARAM is not set -# CONFIG_SECURITY_SELINUX_DISABLE is not set -CONFIG_SECURITY_SELINUX_DEVELOP=y -CONFIG_SECURITY_SELINUX_AVC_STATS=y -CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=0 -# CONFIG_SECURITY_SMACK is not set -# CONFIG_SECURITY_TOMOYO is not set -# CONFIG_SECURITY_APPARMOR is not set -# CONFIG_SECURITY_LOADPIN is not set -# CONFIG_SECURITY_YAMA is not set -CONFIG_MST_LDO=y -# CONFIG_MST_SUPPORT_GPIO is not set -# CONFIG_MST_NONSECURE is not set -# CONFIG_MST_IF_PMIC is not set -CONFIG_MFC_CHARGER=y -# CONFIG_MST_TEEGRIS is not set -CONFIG_MST_LPM_CONTROL=y -CONFIG_INTEGRITY=y -CONFIG_INTEGRITY_SIGNATURE=y -CONFIG_INTEGRITY_ASYMMETRIC_KEYS=y -CONFIG_INTEGRITY_AUDIT=y -# CONFIG_IMA is not set -# CONFIG_EVM is not set -# CONFIG_TZ_ICCC is not set -CONFIG_FIVE=y -# CONFIG_FIVE_DEBUG is not set -CONFIG_FIVE_CERT_USER="x509_five_user.der" -CONFIG_FIVE_DEFAULT_HASH_SHA1=y -# CONFIG_FIVE_DEFAULT_HASH_SHA256 is not set -# CONFIG_FIVE_DEFAULT_HASH_SHA512 is not set -CONFIG_FIVE_DEFAULT_HASH="sha1" -CONFIG_SECURITY_DEFEX=y -# CONFIG_DEFEX_KERNEL_ONLY is not set -CONFIG_SECURITY_DSMS=y -CONFIG_PROCA=y -# CONFIG_GAF_V3 is not set -# CONFIG_GAF_V4 is not set -# CONFIG_GAF_V5 is not set -CONFIG_GAF_V6=y -CONFIG_DEFAULT_SECURITY_SELINUX=y -# CONFIG_DEFAULT_SECURITY_DAC is not set -CONFIG_DEFAULT_SECURITY="selinux" -CONFIG_CRYPTO=y - -# -# Crypto core or helper -# -CONFIG_CRYPTO_ALGAPI=y -CONFIG_CRYPTO_ALGAPI2=y -CONFIG_CRYPTO_AEAD=y -CONFIG_CRYPTO_AEAD2=y -CONFIG_CRYPTO_BLKCIPHER=y -CONFIG_CRYPTO_BLKCIPHER2=y -CONFIG_CRYPTO_HASH=y -CONFIG_CRYPTO_HASH2=y -CONFIG_CRYPTO_RNG=y -CONFIG_CRYPTO_RNG2=y -CONFIG_CRYPTO_RNG_DEFAULT=y -CONFIG_CRYPTO_AKCIPHER2=y -CONFIG_CRYPTO_AKCIPHER=y -CONFIG_CRYPTO_KPP2=y -CONFIG_CRYPTO_ACOMP2=y -CONFIG_CRYPTO_RSA=y -# CONFIG_CRYPTO_DH is not set -# CONFIG_CRYPTO_ECDH is not set -CONFIG_CRYPTO_MANAGER=y -CONFIG_CRYPTO_MANAGER2=y -# CONFIG_CRYPTO_USER is not set -# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set -CONFIG_CRYPTO_GF128MUL=y -CONFIG_CRYPTO_NULL=y -CONFIG_CRYPTO_NULL2=y -# CONFIG_CRYPTO_PCRYPT is not set -CONFIG_CRYPTO_WORKQUEUE=y -CONFIG_CRYPTO_CRYPTD=y -# CONFIG_CRYPTO_MCRYPTD is not set -CONFIG_CRYPTO_AUTHENC=y -CONFIG_CRYPTO_TEST=y -CONFIG_CRYPTO_ABLK_HELPER=y - -# -# Authenticated Encryption with Associated Data -# -# CONFIG_CRYPTO_CCM is not set -CONFIG_CRYPTO_GCM=y -# CONFIG_CRYPTO_CHACHA20POLY1305 is not set -CONFIG_CRYPTO_SEQIV=y -CONFIG_CRYPTO_ECHAINIV=y - -# -# Block modes -# -CONFIG_CRYPTO_CBC=y -CONFIG_CRYPTO_CTR=y -CONFIG_CRYPTO_CTS=y -CONFIG_CRYPTO_ECB=y -# CONFIG_CRYPTO_LRW is not set -# CONFIG_CRYPTO_PCBC is not set -CONFIG_CRYPTO_XTS=y -# CONFIG_CRYPTO_KEYWRAP is not set - -# -# Hash modes -# -CONFIG_CRYPTO_CMAC=y -CONFIG_CRYPTO_HMAC=y -# CONFIG_CRYPTO_XCBC is not set -# CONFIG_CRYPTO_VMAC is not set - -# -# Digest -# -CONFIG_CRYPTO_CRC32C=y -# CONFIG_CRYPTO_CRC32 is not set -# CONFIG_CRYPTO_CRCT10DIF is not set -CONFIG_CRYPTO_GHASH=y -# CONFIG_CRYPTO_POLY1305 is not set -# CONFIG_CRYPTO_MD4 is not set -CONFIG_CRYPTO_MD5=y -# CONFIG_CRYPTO_MICHAEL_MIC is not set -# CONFIG_CRYPTO_RMD128 is not set -# CONFIG_CRYPTO_RMD160 is not set -# CONFIG_CRYPTO_RMD256 is not set -# CONFIG_CRYPTO_RMD320 is not set -CONFIG_CRYPTO_SHA1=y -CONFIG_CRYPTO_SHA256=y -CONFIG_CRYPTO_SHA512=y -# CONFIG_CRYPTO_SHA3 is not set -# CONFIG_CRYPTO_TGR192 is not set -# CONFIG_CRYPTO_WP512 is not set - -# -# Ciphers -# -CONFIG_CRYPTO_AES=y -# CONFIG_CRYPTO_ANUBIS is not set -CONFIG_CRYPTO_ARC4=y -# CONFIG_CRYPTO_BLOWFISH is not set -# CONFIG_CRYPTO_CAMELLIA is not set -# CONFIG_CRYPTO_CAST5 is not set -# CONFIG_CRYPTO_CAST6 is not set -CONFIG_CRYPTO_DES=y -# CONFIG_CRYPTO_FCRYPT is not set -# CONFIG_CRYPTO_KHAZAD is not set -# CONFIG_CRYPTO_SALSA20 is not set -# CONFIG_CRYPTO_CHACHA20 is not set -# CONFIG_CRYPTO_SEED is not set -# CONFIG_CRYPTO_SERPENT is not set -# CONFIG_CRYPTO_SPECK is not set -# CONFIG_CRYPTO_TEA is not set -CONFIG_CRYPTO_TWOFISH=y -CONFIG_CRYPTO_TWOFISH_COMMON=y - -# -# Compression -# -CONFIG_CRYPTO_DEFLATE=y -CONFIG_CRYPTO_LZO=y -# CONFIG_CRYPTO_842 is not set -CONFIG_CRYPTO_LZ4=y -# CONFIG_CRYPTO_LZ4HC is not set -CONFIG_CRYPTO_ZSTD=y - -# -# Random Number Generation -# -# CONFIG_CRYPTO_ANSI_CPRNG is not set -CONFIG_CRYPTO_DRBG_MENU=y -CONFIG_CRYPTO_DRBG_HMAC=y -# CONFIG_CRYPTO_DRBG_HASH is not set -# CONFIG_CRYPTO_DRBG_CTR is not set -CONFIG_CRYPTO_DRBG=y -CONFIG_CRYPTO_JITTERENTROPY=y -# CONFIG_CRYPTO_USER_API_HASH is not set -# CONFIG_CRYPTO_USER_API_SKCIPHER is not set -# CONFIG_CRYPTO_USER_API_RNG is not set -# CONFIG_CRYPTO_USER_API_AEAD is not set -CONFIG_CRYPTO_HASH_INFO=y -# CONFIG_CRYPTO_POST_DEFERRED_INIT is not set -CONFIG_CRYPTO_POST_LATE_INIT_SYNC=y -# CONFIG_CRYPTO_POST_LATE_INIT is not set -CONFIG_CRYPTO_HW=y -# CONFIG_CRYPTO_DEV_S5P is not set -# CONFIG_CRYPTO_DEV_CCP is not set -CONFIG_EXYNOS_SMU=y -CONFIG_EXYNOS_FMP=y -CONFIG_EXYNOS_FMP_FIPS=y -CONFIG_NODE_FOR_SELFTEST_FAIL=y -# CONFIG_PANIC_FOR_SELFTEST_FAIL is not set -CONFIG_ASYMMETRIC_KEY_TYPE=y -CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y -CONFIG_X509_CERTIFICATE_PARSER=y -# CONFIG_PKCS7_MESSAGE_PARSER is not set - -# -# Certificates for signature checking -# -# CONFIG_SYSTEM_TRUSTED_KEYRING is not set -CONFIG_ARM64_CRYPTO=y -CONFIG_CRYPTO_SHA1_ARM64_CE=y -CONFIG_CRYPTO_SHA2_ARM64_CE=y -# CONFIG_CRYPTO_GHASH_ARM64_CE is not set -CONFIG_CRYPTO_AES_ARM64_CE=y -# CONFIG_CRYPTO_AES_ARM64_CE_CCM is not set -CONFIG_CRYPTO_AES_ARM64_CE_BLK=y -# CONFIG_CRYPTO_AES_ARM64_NEON_BLK is not set -CONFIG_CRYPTO_CRC32_ARM64=y -# CONFIG_CRYPTO_SPECK_NEON is not set -CONFIG_BINARY_PRINTF=y - -# -# Library routines -# -CONFIG_BITREVERSE=y -CONFIG_HAVE_ARCH_BITREVERSE=y -CONFIG_RATIONAL=y -CONFIG_GENERIC_STRNCPY_FROM_USER=y -CONFIG_GENERIC_STRNLEN_USER=y -CONFIG_GENERIC_NET_UTILS=y -CONFIG_GENERIC_PCI_IOMAP=y -CONFIG_GENERIC_IO=y -CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y -# CONFIG_CRC_CCITT is not set -CONFIG_CRC16=y -# CONFIG_CRC_T10DIF is not set -# CONFIG_CRC_ITU_T is not set -CONFIG_CRC32=y -# CONFIG_CRC32_SELFTEST is not set -CONFIG_CRC32_SLICEBY8=y -# CONFIG_CRC32_SLICEBY4 is not set -# CONFIG_CRC32_SARWATE is not set -# CONFIG_CRC32_BIT is not set -# CONFIG_CRC7 is not set -CONFIG_LIBCRC32C=y -# CONFIG_CRC8 is not set -CONFIG_XXHASH=y -CONFIG_AUDIT_GENERIC=y -CONFIG_AUDIT_ARCH_COMPAT_GENERIC=y -CONFIG_AUDIT_COMPAT_GENERIC=y -# CONFIG_RANDOM32_SELFTEST is not set -CONFIG_ZLIB_INFLATE=y -CONFIG_ZLIB_DEFLATE=y -CONFIG_LZO_COMPRESS=y -CONFIG_LZO_DECOMPRESS=y -CONFIG_LZ4_COMPRESS=y -CONFIG_LZ4_DECOMPRESS=y -CONFIG_ZSTD_COMPRESS=y -CONFIG_ZSTD_DECOMPRESS=y -CONFIG_XZ_DEC=y -CONFIG_XZ_DEC_X86=y -CONFIG_XZ_DEC_POWERPC=y -CONFIG_XZ_DEC_IA64=y -CONFIG_XZ_DEC_ARM=y -CONFIG_XZ_DEC_ARMTHUMB=y -CONFIG_XZ_DEC_SPARC=y -CONFIG_XZ_DEC_BCJ=y -# CONFIG_XZ_DEC_TEST is not set -CONFIG_DECOMPRESS_GZIP=y -CONFIG_DECOMPRESS_BZIP2=y -CONFIG_DECOMPRESS_LZMA=y -CONFIG_DECOMPRESS_XZ=y -CONFIG_DECOMPRESS_LZO=y -CONFIG_DECOMPRESS_LZ4=y -CONFIG_GENERIC_ALLOCATOR=y -CONFIG_REED_SOLOMON=y -CONFIG_REED_SOLOMON_ENC8=y -CONFIG_REED_SOLOMON_DEC8=y -CONFIG_TEXTSEARCH=y -CONFIG_TEXTSEARCH_KMP=y -CONFIG_TEXTSEARCH_BM=y -CONFIG_TEXTSEARCH_FSM=y -CONFIG_ASSOCIATIVE_ARRAY=y -CONFIG_HAS_IOMEM=y -CONFIG_HAS_IOPORT_MAP=y -CONFIG_HAS_DMA=y -CONFIG_CPU_RMAP=y -CONFIG_DQL=y -CONFIG_NLATTR=y -CONFIG_CLZ_TAB=y -# CONFIG_CORDIC is not set -# CONFIG_DDR is not set -# CONFIG_IRQ_POLL is not set -CONFIG_MPILIB=y -CONFIG_SIGNATURE=y -CONFIG_LIBFDT=y -CONFIG_OID_REGISTRY=y -# CONFIG_SG_SPLIT is not set -CONFIG_SG_POOL=y -CONFIG_ARCH_HAS_SG_CHAIN=y -CONFIG_SBITMAP=y diff --git a/arch/arm64/configs/exynos9810-starlte_defconfig b/arch/arm64/configs/exynos9810_defconfig similarity index 98% rename from arch/arm64/configs/exynos9810-starlte_defconfig rename to arch/arm64/configs/exynos9810_defconfig index bacd33e61385..ca28814331f7 100644 --- a/arch/arm64/configs/exynos9810-starlte_defconfig +++ b/arch/arm64/configs/exynos9810_defconfig @@ -139,7 +139,7 @@ CONFIG_MEMCG=y CONFIG_MEMCG_SWAP=y CONFIG_MEMCG_SWAP_ENABLED=y CONFIG_MEMCG_FORCE_USE_VM_SWAPPINESS=y -# CONFIG_BLK_CGROUP is not set +CONFIG_BLK_CGROUP=y CONFIG_CGROUP_SCHED=y CONFIG_FAIR_GROUP_SCHED=y CONFIG_CFS_BANDWIDTH=y @@ -164,13 +164,13 @@ CONFIG_BLK_DEV_INITRD=y CONFIG_INITRAMFS_SOURCE="" # CONFIG_INITRAMFS_FORCE is not set CONFIG_RD_GZIP=y -CONFIG_RD_BZIP2=y -CONFIG_RD_LZMA=y -CONFIG_RD_XZ=y -CONFIG_RD_LZO=y -CONFIG_RD_LZ4=y -# CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE is not set -CONFIG_CC_OPTIMIZE_FOR_SIZE=y +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set +# CONFIG_RD_XZ is not set +# CONFIG_RD_LZO is not set +# CONFIG_RD_LZ4 is not set +CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set CONFIG_SYSCTL=y CONFIG_HAVE_UID16=y CONFIG_SYSCTL_EXCEPTION_TRACE=y @@ -182,7 +182,7 @@ CONFIG_MULTIUSER=y CONFIG_SYSFS_SYSCALL=y # CONFIG_SYSCTL_SYSCALL is not set CONFIG_KALLSYMS=y -# CONFIG_KALLSYMS_ALL is not set +CONFIG_KALLSYMS_ALL=y # CONFIG_KALLSYMS_ABSOLUTE_PERCPU is not set CONFIG_KALLSYMS_BASE_RELATIVE=y CONFIG_PRINTK=y @@ -222,13 +222,14 @@ CONFIG_SLUB_CPU_PARTIAL=y # CONFIG_DEFERRED_INITCALLS is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y -CONFIG_KPROBES=y +# CONFIG_KPROBES is not set +# CONFIG_KPROBE_EVENTS is not set # CONFIG_JUMP_LABEL is not set # CONFIG_UPROBES is not set # CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y CONFIG_KRETPROBES=y -CONFIG_HAVE_KPROBES=y +# CONFIG_HAVE_KPROBES is not set CONFIG_HAVE_KRETPROBES=y CONFIG_HAVE_ARCH_TRACEHOOK=y CONFIG_HAVE_DMA_CONTIGUOUS=y @@ -329,7 +330,7 @@ CONFIG_EFI_PARTITION=y # CONFIG_CMDLINE_PARTITION is not set CONFIG_BLOCK_COMPAT=y CONFIG_BLK_MQ_PCI=y -CONFIG_BLOCK_SUPPORT_STLOG=y +# CONFIG_BLOCK_SUPPORT_STLOG is not set # # IO Schedulers @@ -388,9 +389,6 @@ CONFIG_SOC_EXYNOS9810=y # CONFIG_SOC_EXYNOS9810_EVT0 is not set CONFIG_SOC_EXYNOS9810_EVT1=y # CONFIG_MACH_EXYNOS9810_NONE is not set -# CONFIG_MACH_EXYNOS9810_CROWNLTE_EUR_OPEN is not set -CONFIG_MACH_EXYNOS9810_STARLTE_EUR_OPEN=y -# CONFIG_MACH_EXYNOS9810_STAR2LTE_EUR_OPEN is not set CONFIG_ARCH_EXYNOS9=y CONFIG_EXYNOS_DTBTOOL=y CONFIG_EXYNOS_DTBH_PLATFORM_CODE=0x50a6 @@ -528,17 +526,16 @@ CONFIG_GENERIC_EARLY_IOREMAP=y CONFIG_HPA=y # CONFIG_IDLE_PAGE_TRACKING is not set CONFIG_FRAME_VECTOR=y -CONFIG_INCREASE_MAXIMUM_SWAPPINESS=y -CONFIG_DIRECT_RECLAIM_FILE_PAGES_ONLY=y CONFIG_BALANCE_ANON_FILE_RECLAIM=y # CONFIG_SWAP_ENABLE_READAHEAD is not set CONFIG_MMAP_READAROUND_LIMIT=0 CONFIG_RBIN=y +CONFIG_LARGE_DIRTY_BUFFER=y +CONFIG_MAX_DIRTY_THRESH_PAGES=25600 CONFIG_PAGE_BOOST=y CONFIG_PAGE_BOOST_RECORDING=y CONFIG_PROCESS_RECLAIM=y -CONFIG_LARGE_DIRTY_BUFFER=y -CONFIG_MAX_DIRTY_THRESH_PAGES=25600 +CONFIG_DIRECT_RECLAIM_FILE_PAGES_ONLY=y CONFIG_SECCOMP=y # CONFIG_PARAVIRT is not set # CONFIG_PARAVIRT_TIME_ACCOUNTING is not set @@ -583,8 +580,19 @@ CONFIG_CMDLINE_EXTEND=y # CONFIG_CMDLINE_FORCE is not set # CONFIG_EFI is not set # CONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE is not set +# CONFIG_TIMA is not set +# CONFIG_TIMA_LKMAUTH is not set +# CONFIG_TIMA_LKM_BLOCK is not set +# CONFIG_TIMA_LKMAUTH_CODE_PROT is not set # CONFIG_UH is not set +# CONFIG_UH_DEBUG is not set +# CONFIG_UH_RKP is not set +# CONFIG_UH_RKP_8G is not set +# CONFIG_UH_INFORM is not set +# CONFIG_UH_RKP_FIMC_TYPE is not set # CONFIG_RKP_KDP is not set +# CONFIG_RKP_NS_PROT is not set +# CONFIG_RKP_DMAP_PROT is not set # CONFIG_RKP_CFP is not set # @@ -701,7 +709,7 @@ CONFIG_UNIX_SCM=y CONFIG_XFRM=y CONFIG_XFRM_ALGO=y CONFIG_XFRM_USER=y -CONFIG_XFRM_INTERFACE=y +# CONFIG_XFRM_INTERFACE is not set # CONFIG_XFRM_SUB_POLICY is not set # CONFIG_XFRM_MIGRATE is not set CONFIG_XFRM_STATISTICS=y @@ -742,10 +750,10 @@ CONFIG_INET_TCP_DIAG=y CONFIG_INET_UDP_DIAG=y CONFIG_INET_DIAG_DESTROY=y CONFIG_TCP_CONG_ADVANCED=y -CONFIG_TCP_CONG_BIC=y +# CONFIG_TCP_CONG_BIC is not set CONFIG_TCP_CONG_CUBIC=y -CONFIG_TCP_CONG_WESTWOOD=m -CONFIG_TCP_CONG_HTCP=m +CONFIG_TCP_CONG_WESTWOOD=y +# CONFIG_TCP_CONG_HTCP is not set # CONFIG_TCP_CONG_HSTCP is not set # CONFIG_TCP_CONG_HYBLA is not set # CONFIG_TCP_CONG_VEGAS is not set @@ -758,10 +766,10 @@ CONFIG_TCP_CONG_HTCP=m # CONFIG_TCP_CONG_DCTCP is not set # CONFIG_TCP_CONG_CDG is not set # CONFIG_TCP_CONG_BBR is not set -CONFIG_DEFAULT_BIC=y # CONFIG_DEFAULT_CUBIC is not set +CONFIG_DEFAULT_WESTWOOD=y # CONFIG_DEFAULT_RENO is not set -CONFIG_DEFAULT_TCP_CONG="bic" +CONFIG_DEFAULT_TCP_CONG="westwood" # CONFIG_TCP_MD5SIG is not set CONFIG_IPV6=y CONFIG_IPV6_ROUTER_PREF=y @@ -790,7 +798,7 @@ CONFIG_IPV6_MULTIPLE_TABLES=y # CONFIG_IPV6_SUBTREES is not set # CONFIG_IPV6_MROUTE is not set # CONFIG_NETLABEL is not set -CONFIG_ANDROID_PARANOID_NETWORK=y +# CONFIG_ANDROID_PARANOID_NETWORK is not set CONFIG_NETWORK_SECMARK=y # CONFIG_NET_PTP_CLASSIFY is not set # CONFIG_NETWORK_PHY_TIMESTAMPING is not set @@ -1138,7 +1146,7 @@ CONFIG_BT_HS=y CONFIG_BT_LE=y # CONFIG_BT_LEDS is not set # CONFIG_BT_SELFTEST is not set -CONFIG_BT_DEBUGFS=y +# CONFIG_BT_DEBUGFS is not set # # Bluetooth device drivers @@ -1157,7 +1165,7 @@ CONFIG_BT_BCM43XX=y CONFIG_FIB_RULES=y CONFIG_WIRELESS=y CONFIG_CFG80211=y -# CONFIG_CFG80211_SAE_BKPORT is not set +CONFIG_CFG80211_SAE_BKPORT=y CONFIG_NL80211_TESTMODE=y # CONFIG_CFG80211_DEVELOPER_WARNINGS is not set # CONFIG_CFG80211_CERTIFICATION_ONUS is not set @@ -1167,7 +1175,9 @@ CONFIG_CFG80211_DEFAULT_PS=y CONFIG_CFG80211_CRDA_SUPPORT=y # CONFIG_CFG80211_WEXT is not set # CONFIG_LIB80211 is not set -# CONFIG_MAC80211 is not set +CONFIG_MAC80211=y +# CONFIG_MAC80211_RC_MINSTREL is not set +CONFIG_MAC80211_RC_DEFAULT="" CONFIG_MAC80211_STA_HASH_MAX_SIZE=0 # CONFIG_WIMAX is not set CONFIG_RFKILL=y @@ -1180,6 +1190,14 @@ CONFIG_RFKILL_LEDS=y # CONFIG_CAIF is not set # CONFIG_CEPH_LIB is not set # CONFIG_NFC is not set +# +# Some wireless drivers require a rate control algorithm +# +# CONFIG_MAC80211_MESH is not set +# CONFIG_MAC80211_LEDS is not set +# CONFIG_MAC80211_DEBUGFS is not set +# CONFIG_MAC80211_MESSAGE_TRACING is not set +# CONFIG_MAC80211_DEBUG_MENU is not set # # Near Field Communication (NFC) devices @@ -1273,8 +1291,6 @@ CONFIG_BLK_DEV=y # CONFIG_BLK_DEV_NULL_BLK is not set # CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set CONFIG_ZRAM=y -CONFIG_ZRAM_WRITEBACK=y -# CONFIG_ZRAM_MEMORY_TRACKING is not set CONFIG_ZRAM_LRU_WRITEBACK=y CONFIG_ZRAM_LRU_WRITEBACK_LIMIT=5120 # CONFIG_BLK_CPQ_CISS_DA is not set @@ -1326,6 +1342,7 @@ CONFIG_BLK_DEV_RAM_SIZE=8192 CONFIG_UID_SYS_STATS=y # CONFIG_UID_SYS_STATS_DEBUG is not set CONFIG_MEMORY_STATE_TIME=y +# CONFIG_TIMA_LOG is not set # CONFIG_C2PORT is not set # @@ -1433,12 +1450,6 @@ CONFIG_USE_SAFEOUT=y CONFIG_MUIC_NOTIFIER=y CONFIG_MUIC_MAX77705=y CONFIG_HV_MUIC_MAX77705_AFC=y -CONFIG_MUIC_UNIVERSAL=y -# CONFIG_MUIC_UNIVERSAL_MAX77854 is not set -CONFIG_MUIC_UNIVERSAL_MAX77865=y -CONFIG_MUIC_HV=y -# CONFIG_MUIC_HV_12V is not set -CONFIG_MUIC_HV_MAX77865=y CONFIG_MUIC_SUPPORT_CCIC=y CONFIG_MUIC_MAX77705_CCIC=y CONFIG_HICCUP_CHARGER=y @@ -1919,7 +1930,6 @@ CONFIG_BCM4361=y CONFIG_BCMDHD_FW_PATH="/etc/wifi/bcmdhd_sta.bin" CONFIG_BCMDHD_NVRAM_PATH="/etc/wifi/nvram_net.txt" CONFIG_BROADCOM_WIFI_RESERVED_MEM=y -CONFIG_WLAN_REGION_CODE=100 CONFIG_WLAIBSS=y CONFIG_WL_RELMCAST=y # CONFIG_WL_NAN is not set @@ -1928,12 +1938,12 @@ CONFIG_BCMDHD_PCIE=y CONFIG_BCMDHD_PREALLOC_MEMDUMP=y CONFIG_BCMDHD_OOB_HOST_WAKE=y # CONFIG_SPLIT_ARGOS_SET is not set -# CONFIG_WLAN_TSQ_MULTIPLIER is not set -# CONFIG_WLAN_VENDOR_DUMP_ENABLE is not set +CONFIG_WLAN_TSQ_MULTIPLIER=y +CONFIG_WLAN_VENDOR_DUMP_ENABLE=y CONFIG_BCMDHD_GET_OOB_STATE=y -# CONFIG_WLAN_ANQP_RMAC_BACKPORTED is not set # CONFIG_BCM43436 is not set # CONFIG_BCM43456 is not set +CONFIG_WLAN_ANQP_RMAC_BACKPORTED=y CONFIG_WLAN_VENDOR_CISCO=y CONFIG_WLAN_VENDOR_INTEL=y # CONFIG_IPW2100 is not set @@ -1982,11 +1992,10 @@ CONFIG_INPUT_FF_MEMLESS=y CONFIG_INPUT_EVDEV=y # CONFIG_INPUT_EVBUG is not set CONFIG_INPUT_KEYRESET=y -CONFIG_INPUT_TOUCHSCREEN_TCLM=y -# CONFIG_INPUT_TOUCHSCREEN_TCLMV2 is not set CONFIG_INPUT_KEYCOMBO=y CONFIG_HALL=y CONFIG_HALL_EVENT_REVERSE=y +CONFIG_HALL_NEW_NODE=y CONFIG_CERTIFY_HALL=y CONFIG_HALL_NEW_NODE=y CONFIG_SEC_DEBUG_TSP_LOG=y @@ -2113,13 +2122,9 @@ CONFIG_TOUCHSCREEN_PROPERTIES=y # CONFIG_TOUCHSCREEN_ZFORCE is not set # CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set # CONFIG_TOUCHSCREEN_HIMAX_CHIPSET is not set -CONFIG_TOUCHSCREEN_SEC_TS=y # CONFIG_TOUCHSCREEN_SEC_TS_GLOVEMODE is not set -# CONFIG_TOUCHSCREEN_SEC_TS_Y771 is not set # CONFIG_TOUCHSCREEN_FTS is not set # CONFIG_TOUCHSCREEN_MELFAS_MSS100 is not set -# CONFIG_INPUT_WACOM is not set -# CONFIG_EPEN_WACOM_W9018 is not set # CONFIG_EPEN_WACOM_W9019 is not set CONFIG_INPUT_MISC=y # CONFIG_INPUT_AD714X is not set @@ -2137,7 +2142,7 @@ CONFIG_INPUT_MISC=y # CONFIG_INPUT_KXTJ9 is not set # CONFIG_INPUT_POWERMATE is not set # CONFIG_INPUT_YEALINK is not set -# CONFIG_INPUT_CM109 is not set +CONFIG_INPUT_CM109=y # CONFIG_INPUT_REGULATOR_HAPTIC is not set CONFIG_INPUT_UINPUT=y CONFIG_INPUT_GPIO=y @@ -2751,7 +2756,6 @@ CONFIG_MFD_CS47L92=y # CONFIG_MFD_MAX77686 is not set # CONFIG_MFD_MAX77693 is not set # CONFIG_MFD_MAX77843 is not set -CONFIG_MFD_MAX77865=y CONFIG_MFD_MAX77705=y # CONFIG_MFD_MAX8907 is not set # CONFIG_MFD_S2MU107 is not set @@ -2868,7 +2872,6 @@ CONFIG_MEDIA_SUPPORT=y CONFIG_MEDIA_CAMERA_SUPPORT=y # CONFIG_MEDIA_ANALOG_TV_SUPPORT is not set # CONFIG_MEDIA_DIGITAL_TV_SUPPORT is not set -# CONFIG_MEDIA_RADIO_SUPPORT is not set # CONFIG_MEDIA_SDR_SUPPORT is not set # CONFIG_MEDIA_RC_SUPPORT is not set CONFIG_MEDIA_M2M1SHOT=y @@ -2923,7 +2926,6 @@ CONFIG_CAMERA_CIS_3H1_OBJ=y # CONFIG_CAMERA_CIS_5E6_OBJ is not set CONFIG_CAMERA_CIS_5F1_OBJ=y # CONFIG_CAMERA_CIS_3M2_OBJ is not set -# CONFIG_CAMERA_CIS_3M3_OBJ is not set # CONFIG_CAMERA_CIS_2L1_OBJ is not set # CONFIG_CAMERA_CIS_3P8_OBJ is not set # CONFIG_CAMERA_CIS_3P8SP_OBJ is not set @@ -2988,9 +2990,6 @@ CONFIG_OIS_USE=y # CONFIG_OIS_FW_UPDATE_THREAD_USE is not set CONFIG_AF_HOST_CONTROL=y CONFIG_TORCH_CURRENT_CHANGE_SUPPORT=y -CONFIG_OIS_USE_RUMBA_S4=y -# CONFIG_CAMERA_CROWN is not set -# CONFIG_OIS_USE_RUMBA_S6 is not set CONFIG_USE_SIGNED_BINARY=y # CONFIG_USE_CAMERA_LDU is not set CONFIG_FIMC_IS_V6_0_0=y @@ -3024,8 +3023,6 @@ CONFIG_VENDER_MCD=y # CONFIG_VENDER_PSV is not set # CONFIG_CAMERA_HERO is not set # CONFIG_CAMERA_VJFLTE is not set -CONFIG_CAMERA_STAR=y -# CONFIG_CAMERA_STAR2 is not set # CONFIG_VIDEO_EXYNOS_CAMREA_POSTPROCESS is not set CONFIG_VIDEO_EXYNOS_REPEATER=y CONFIG_VIDEO_EXYNOS_TSMUX=y @@ -3104,7 +3101,7 @@ CONFIG_MEDIA_SUBDRV_AUTOSELECT=y CONFIG_MALI_MIDGARD=y CONFIG_MALI_GATOR_SUPPORT=y # CONFIG_MALI_MIDGARD_DVFS is not set -CONFIG_MALI_MIDGARD_ENABLE_TRACE=y +# CONFIG_MALI_MIDGARD_ENABLE_TRACE is not set # CONFIG_MALI_DEVFREQ is not set # CONFIG_MALI_DMA_FENCE is not set CONFIG_MALI_EXPERT=y @@ -3119,6 +3116,7 @@ CONFIG_EXYNOS_SOC_NAME="9810" CONFIG_MALI_DVFS=y CONFIG_MALI_DEBUG_SYS=y CONFIG_MALI_DEBUG_KERNEL_SYSFS=y +# CONFIG_MALI_EXYNOS_SECURE_RENDERING is not set CONFIG_MALI_DDK_VERSION=y # CONFIG_MALI_BIFROST_R16P0 is not set # CONFIG_MALI_BIFROST_R19P0_Q is not set @@ -3286,11 +3284,9 @@ CONFIG_SUPPORT_AOD_BL=y # CONFIG_ACTIVE_CLOCK is not set CONFIG_SUPPORT_DDI_FLASH=y CONFIG_SUPPORT_POC_FLASH=y -# CONFIG_SUPPORT_DIM_FLASH is not set CONFIG_SUPPORT_GRAM_CHECKSUM=y CONFIG_PANEL_BACKLIGHT_PAC_3_0=y CONFIG_DISPLAY_USE_INFO=y -# CONFIG_SELF_MOVE_3PX is not set # CONFIG_NO_LCD is not set # CONFIG_FB_SSD1307 is not set # CONFIG_FB_SM712 is not set @@ -3776,13 +3772,14 @@ CONFIG_USB_STORAGE=y CONFIG_USB_HOST_NOTIFY=y CONFIG_USB_NOTIFY_LAYER=y CONFIG_USB_NOTIFIER=y -CONFIG_USB_DEBUG_DETAILED_LOG=y +# CONFIG_USB_DEBUG_DETAILED_LOG is not set CONFIG_USB_STORAGE_DETECT=y CONFIG_USB_HMT_SAMSUNG_INPUT=y CONFIG_USB_EXTERNAL_NOTIFY=y CONFIG_USB_NOTIFY_PROC_LOG=y CONFIG_USB_HOST_SAMSUNG_FEATURE=y CONFIG_USB_HW_PARAM=y +# CONFIG_USB_HOST_RELOAD_FTDI is not set # CONFIG_USB_INTERFACE_LPM_LIST is not set # CONFIG_USB_CCIC_NOTIFIER_USING_QC is not set # CONFIG_USB_AUDIO_ENHANCED_DETECT_TIME is not set @@ -3818,10 +3815,10 @@ CONFIG_USB_SERIAL=y # CONFIG_USB_SERIAL_AIRCABLE is not set # CONFIG_USB_SERIAL_ARK3116 is not set # CONFIG_USB_SERIAL_BELKIN is not set -# CONFIG_USB_SERIAL_CH341 is not set +CONFIG_USB_SERIAL_CH341=y # CONFIG_USB_SERIAL_WHITEHEAT is not set # CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set -# CONFIG_USB_SERIAL_CP210X is not set +CONFIG_USB_SERIAL_CP210X=y # CONFIG_USB_SERIAL_CYPRESS_M8 is not set # CONFIG_USB_SERIAL_EMPEG is not set CONFIG_USB_SERIAL_FTDI_SIO=y @@ -3939,6 +3936,7 @@ CONFIG_USB_U_SERIAL=y CONFIG_USB_U_ETHER=y CONFIG_USB_F_NCM=y CONFIG_USB_F_RNDIS=y +CONFIG_USB_F_MASS_STORAGE=y CONFIG_USB_F_FS=y CONFIG_USB_F_MIDI=y CONFIG_USB_F_MTP=y @@ -3956,7 +3954,7 @@ CONFIG_USB_CONFIGFS_NCM=y # CONFIG_USB_CONFIGFS_ECM_SUBSET is not set CONFIG_USB_CONFIGFS_RNDIS=y # CONFIG_USB_CONFIGFS_EEM is not set -# CONFIG_USB_CONFIGFS_MASS_STORAGE is not set +CONFIG_USB_CONFIGFS_MASS_STORAGE=y # CONFIG_USB_CONFIGFS_F_LB_SS is not set CONFIG_USB_CONFIGFS_F_FS=y CONFIG_USB_CONFIGFS_F_DM=y @@ -4003,7 +4001,7 @@ CONFIG_TYPEC=y CONFIG_MMC=y # CONFIG_MMC_DEBUG is not set CONFIG_MMC_BLOCK_DEFERRED_RESUME=y -CONFIG_MMC_SUPPORT_STLOG=y +# CONFIG_MMC_SUPPORT_STLOG is not set CONFIG_PWRSEQ_EMMC=y CONFIG_PWRSEQ_SIMPLE=y # CONFIG_MMC_EMBEDDED_SDIO is not set @@ -4073,7 +4071,6 @@ CONFIG_LEDS_CLASS=y # CONFIG_LEDS_LT3593 is not set # CONFIG_LEDS_TCA6507 is not set # CONFIG_LEDS_TLC591XX is not set -CONFIG_LEDS_MAX77865_RGB=y CONFIG_LEDS_MAX77705_RGB=y # CONFIG_LEDS_LM355x is not set # CONFIG_LEDS_IS31FL319X is not set @@ -4929,7 +4926,6 @@ CONFIG_BATTERY_SWELLING=y # CONFIG_FUELGAUGE_MAX77843 is not set # CONFIG_FUELGAUGE_MAX77833 is not set # CONFIG_FUELGAUGE_MAX77854 is not set -CONFIG_FUELGAUGE_MAX77865=y # CONFIG_CHARGER_SMB328 is not set # CONFIG_CHARGER_BQ24157 is not set # CONFIG_CHARGER_BQ24191 is not set @@ -4938,7 +4934,6 @@ CONFIG_FUELGAUGE_MAX77865=y # CONFIG_CHARGER_MAX77843 is not set # CONFIG_CHARGER_MAX77833 is not set # CONFIG_CHARGER_MAX77854 is not set -CONFIG_CHARGER_MAX77865=y CONFIG_CHARGER_MAX77705_OTG_LIMIT=y CONFIG_MAX77705_CHECK_B2SOVRC=y # CONFIG_CHARGER_DA9155 is not set @@ -5090,8 +5085,8 @@ CONFIG_SAMSUNG_PRODUCT_SHIP=y # Samsung TN option for VTS test # # CONFIG_SEC_VTS_TEST is not set +# CONFIG_VNSWAP is not set CONFIG_SEC_DUMP_SINK=y -CONFIG_ARGOS=y CONFIG_ARGOS_CLUSTER_NUM=2 CONFIG_SEC_SYSUP=y @@ -5156,7 +5151,6 @@ CONFIG_SEC_SUPPORT_VST=y CONFIG_VBUS_NOTIFIER=y CONFIG_SEC_PM_DEBUG=y CONFIG_SEC_PM_BIGDATA=y -CONFIG_MOTOR_DRV_MAX77865=y CONFIG_MOTOR_DRV_MAX77705=y CONFIG_SEC_HAPTIC=y # CONFIG_SEC_VIBRATOR is not set @@ -5190,7 +5184,6 @@ CONFIG_SENSORS_SSP_LSM6DSL=y # CONFIG_SENSORS_SSP_YAS537 is not set # CONFIG_SENSORS_SSP_YAS539 is not set CONFIG_SENSORS_SSP_MAGNETIC_COMMON=y -# CONFIG_SENSORS_SSP_AK09918 is not set # CONFIG_SENSORS_SSP_CM3320 is not set # CONFIG_SENSORS_SSP_MAX88920 is not set # CONFIG_SENSORS_SSP_MAX88921 is not set @@ -5214,7 +5207,6 @@ CONFIG_SENSORS_SSP_TMD4906=y CONFIG_SENSORS_SSP_PROX_AUTOCAL_AMS=y # CONFIG_SENSORS_SSP_PROX_FACTORYCAL is not set CONFIG_SENSORS_SSP_LIGHT_REPORT_LUX=y -# CONFIG_SENSORS_SSP_LIGHT_MAX_GAIN_2BYTE is not set CONFIG_SENSORS_SSP_LIGHT_COLORID=y CONFIG_SENSORS_SSP_IRDATA_FOR_CAMERA=y CONFIG_SENSORS_MULTIPLE_GLASS_TYPE=y @@ -5232,8 +5224,6 @@ CONFIG_SENSORS_SSP_HIFI_BATCHING=y # CONFIG_SENSORS_SSP_GRACE is not set # CONFIG_SENSORS_SSP_DREAM is not set # CONFIG_SENSORS_SSP_GREAT is not set -CONFIG_SENSORS_SSP_STAR=y -# CONFIG_SENSORS_SSP_CROWN is not set # CONFIG_SENSORS_SSP_HAECHI is not set # CONFIG_SENSORS_SSP_LUGE is not set CONFIG_SSP_MOTOR_CALLBACK=y @@ -5433,7 +5423,7 @@ CONFIG_SDCARD_FS_SUPPORT_KNOX=y # CONFIG_BFS_FS is not set # CONFIG_EFS_FS is not set # CONFIG_LOGFS is not set -CONFIG_CRAMFS=y +# CONFIG_CRAMFS is not set # CONFIG_SQUASHFS is not set # CONFIG_VXFS_FS is not set # CONFIG_MINIX_FS is not set @@ -5452,10 +5442,44 @@ CONFIG_PSTORE_RAM=y # CONFIG_SYSV_FS is not set # CONFIG_UFS_FS is not set CONFIG_NETWORK_FILESYSTEMS=y -# CONFIG_NFS_FS is not set -# CONFIG_NFSD is not set +CONFIG_NFS_FS=y +CONFIG_NFS_V2=y +CONFIG_NFS_V3=y +CONFIG_NFS_V3_ACL=y +CONFIG_NFS_V4=y +# CONFIG_NFS_SWAP is not set +CONFIG_NFS_V4_1=y +CONFIG_NFS_V4_2=y +CONFIG_PNFS_FILE_LAYOUT=y +CONFIG_PNFS_BLOCK=y +CONFIG_PNFS_FLEXFILE_LAYOUT=y +CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org" +# CONFIG_NFS_V4_1_MIGRATION is not set +CONFIG_NFS_V4_SECURITY_LABEL=y +# CONFIG_ROOT_NFS is not set +# CONFIG_NFS_USE_LEGACY_DNS is not set +CONFIG_NFS_USE_KERNEL_DNS=y +CONFIG_NFSD=y +CONFIG_NFSD_V3=y +# CONFIG_NFSD_V3_ACL is not set +CONFIG_NFSD_V4=y +# CONFIG_NFSD_BLOCKLAYOUT is not set +# CONFIG_NFSD_SCSILAYOUT is not set +# CONFIG_NFSD_FLEXFILELAYOUT is not set +# CONFIG_NFSD_V4_SECURITY_LABEL is not set +# CONFIG_NFSD_FAULT_INJECTION is not set # CONFIG_CEPH_FS is not set -# CONFIG_CIFS is not set +CONFIG_CIFS=y +CONFIG_CIFS_STATS=y +# CONFIG_CIFS_STATS2 is not set +# CONFIG_CIFS_WEAK_PW_HASH is not set +# CONFIG_CIFS_UPCALL is not set +CONFIG_CIFS_XATTR=y +CONFIG_CIFS_POSIX=y +CONFIG_CIFS_ACL=y +# CONFIG_CIFS_DEBUG is not set +# CONFIG_CIFS_DFS_UPCALL is not set +# CONFIG_CIFS_SMB2 is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set @@ -5688,7 +5712,7 @@ CONFIG_TRACING_EVENTS_GPIO=y # CONFIG_RBTREE_TEST is not set # CONFIG_INTERVAL_TREE_TEST is not set # CONFIG_PERCPU_TEST is not set -CONFIG_ATOMIC64_SELFTEST=y +# CONFIG_ATOMIC64_SELFTEST is not set # CONFIG_TEST_HEXDUMP is not set # CONFIG_TEST_STRING_HELPERS is not set # CONFIG_TEST_KSTRTOX is not set @@ -5901,7 +5925,7 @@ CONFIG_CRYPTO_LZO=y # CONFIG_CRYPTO_842 is not set CONFIG_CRYPTO_LZ4=y # CONFIG_CRYPTO_LZ4HC is not set -CONFIG_CRYPTO_ZSTD=y +# CONFIG_CRYPTO_ZSTD is not set # # Random Number Generation @@ -5973,7 +5997,6 @@ CONFIG_CRC32_SLICEBY8=y # CONFIG_CRC7 is not set CONFIG_LIBCRC32C=y # CONFIG_CRC8 is not set -CONFIG_XXHASH=y CONFIG_AUDIT_GENERIC=y CONFIG_AUDIT_ARCH_COMPAT_GENERIC=y CONFIG_AUDIT_COMPAT_GENERIC=y @@ -5984,8 +6007,6 @@ CONFIG_LZO_COMPRESS=y CONFIG_LZO_DECOMPRESS=y CONFIG_LZ4_COMPRESS=y CONFIG_LZ4_DECOMPRESS=y -CONFIG_ZSTD_COMPRESS=y -CONFIG_ZSTD_DECOMPRESS=y CONFIG_XZ_DEC=y CONFIG_XZ_DEC_X86=y CONFIG_XZ_DEC_POWERPC=y @@ -5996,11 +6017,6 @@ CONFIG_XZ_DEC_SPARC=y CONFIG_XZ_DEC_BCJ=y # CONFIG_XZ_DEC_TEST is not set CONFIG_DECOMPRESS_GZIP=y -CONFIG_DECOMPRESS_BZIP2=y -CONFIG_DECOMPRESS_LZMA=y -CONFIG_DECOMPRESS_XZ=y -CONFIG_DECOMPRESS_LZO=y -CONFIG_DECOMPRESS_LZ4=y CONFIG_GENERIC_ALLOCATOR=y CONFIG_REED_SOLOMON=y CONFIG_REED_SOLOMON_ENC8=y @@ -6029,3 +6045,4 @@ CONFIG_OID_REGISTRY=y CONFIG_SG_POOL=y CONFIG_ARCH_HAS_SG_CHAIN=y CONFIG_SBITMAP=y + diff --git a/arch/arm64/configs/kor_defconfig b/arch/arm64/configs/kor_defconfig new file mode 100644 index 000000000000..dcbd127ad7cd --- /dev/null +++ b/arch/arm64/configs/kor_defconfig @@ -0,0 +1,58 @@ +# +# +# Korean Defconfig +# +# +CONFIG_WLAN_REGION_CODE=200 +CONFIG_MEDIA_RADIO_SUPPORT=y +CONFIG_RADIO_ADAPTERS=y +# CONFIG_RADIO_SI470X is not set +# CONFIG_RADIO_SI4713 is not set +CONFIG_RADIO_RTC6213N=y +CONFIG_I2C_RTC6213N=y +# CONFIG_USB_MR800 is not set +# CONFIG_USB_DSBR is not set +# CONFIG_RADIO_MAXIRADIO is not set +# CONFIG_RADIO_SHARK is not set +# CONFIG_RADIO_SHARK2 is not set +# CONFIG_USB_KEENE is not set +# CONFIG_USB_RAREMONO is not set +# CONFIG_USB_MA901 is not set +# CONFIG_RADIO_TEA5764 is not set +# CONFIG_RADIO_SAA7706H is not set +# CONFIG_RADIO_TEF6862 is not set +# CONFIG_RADIO_WL1273 is not set +CONFIG_MEDIA_ATTACH=y +CONFIG_MEDIA_TUNER=y +CONFIG_MEDIA_TUNER_SIMPLE=y +CONFIG_MEDIA_TUNER_TDA8290=y +CONFIG_MEDIA_TUNER_TDA827X=y +CONFIG_MEDIA_TUNER_TDA18271=y +CONFIG_MEDIA_TUNER_TDA9887=y +CONFIG_MEDIA_TUNER_TEA5761=y +CONFIG_MEDIA_TUNER_TEA5767=y +CONFIG_MEDIA_TUNER_MT20XX=y +CONFIG_MEDIA_TUNER_XC2028=y +CONFIG_MEDIA_TUNER_XC5000=y +CONFIG_MEDIA_TUNER_XC4000=y +CONFIG_MEDIA_TUNER_MC44S803=y +CONFIG_TDMB=y +CONFIG_TDMB_VENDOR_FCI=y +CONFIG_TDMB_FC8080=y +# CONFIG_TDMB_VENDOR_RAONTECH is not set +# CONFIG_TDMB_QUALCOMM is not set +CONFIG_TDMB_SLSI=y +CONFIG_TDMB_SPI=y +# CONFIG_TDMB_EBI is not set +# CONFIG_TDMB_TSIF_SLSI is not set +# CONFIG_TDMB_TSIF_QC is not set +# CONFIG_TDMB_I2C is not set +CONFIG_TDMB_XTAL_FREQ=y +# CONFIG_TDMB_DEBUG is not set +# CONFIG_TDMB_ANT_DET is not set +# CONFIG_TDMB_VREG_SUPPORT is not set +CONFIG_TDMB_NOTIFIER=y +CONFIG_SUPPORT_TDMB_TUNE=y + + + diff --git a/arch/arm64/configs/star2lte_defconfig b/arch/arm64/configs/star2lte_defconfig new file mode 100644 index 000000000000..35efd9b04c40 --- /dev/null +++ b/arch/arm64/configs/star2lte_defconfig @@ -0,0 +1,36 @@ +# +# +# star2lte Defconfig +# +# +CONFIG_VMPRESSURE_LEVEL_MED=60 +CONFIG_MUIC_UNIVERSAL=y +# CONFIG_MUIC_UNIVERSAL_MAX77854 is not set +CONFIG_MUIC_UNIVERSAL_MAX77865=y +CONFIG_MUIC_HV=y +# CONFIG_MUIC_HV_12V is not set +CONFIG_MUIC_HV_MAX77865=y +CONFIG_INPUT_TOUCHSCREEN_TCLM=y +# CONFIG_INPUT_TOUCHSCREEN_TCLMV2 is not set +CONFIG_TOUCHSCREEN_SEC_TS=y +# CONFIG_TOUCHSCREEN_SEC_TS_Y771 is not set +# CONFIG_INPUT_WACOM is not set +# CONFIG_EPEN_WACOM_W9018 is not set +CONFIG_MFD_MAX77865=y +CONFIG_CAMERA_CIS_3M3_OBJ=y +# CONFIG_OIS_USE_RUMBA_S4 is not set +# CONFIG_CAMERA_STAR is not set +# CONFIG_CAMERA_CROWN is not set +CONFIG_CAMERA_STAR2=y +CONFIG_OIS_USE_RUMBA_S6=y +# CONFIG_SUPPORT_DIM_FLASH is not set +# CONFIG_SELF_MOVE_3PX is not set +CONFIG_LEDS_MAX77865_RGB=y +CONFIG_FUELGAUGE_MAX77865=y +CONFIG_CHARGER_MAX77865=y +# CONFIG_WIRELESS_FIRMWARE_65 is not set +# CONFIG_SENSORS_SSP_AK09918 is not set +# CONFIG_SENSORS_SSP_LIGHT_MAX_GAIN_2BYTE is not set +CONFIG_SENSORS_SSP_STAR=y +# CONFIG_SENSORS_SSP_CROWN is not set +CONFIG_MOTOR_DRV_MAX77865=y diff --git a/arch/arm64/configs/starlte_defconfig b/arch/arm64/configs/starlte_defconfig new file mode 100644 index 000000000000..414a29c3d016 --- /dev/null +++ b/arch/arm64/configs/starlte_defconfig @@ -0,0 +1,36 @@ +# +# +# starlte Defconfig +# +# +CONFIG_VMPRESSURE_LEVEL_MED=60 +CONFIG_MUIC_UNIVERSAL=y +# CONFIG_MUIC_UNIVERSAL_MAX77854 is not set +CONFIG_MUIC_UNIVERSAL_MAX77865=y +CONFIG_MUIC_HV=y +# CONFIG_MUIC_HV_12V is not set +CONFIG_MUIC_HV_MAX77865=y +CONFIG_INPUT_TOUCHSCREEN_TCLM=y +# CONFIG_INPUT_TOUCHSCREEN_TCLMV2 is not set +CONFIG_TOUCHSCREEN_SEC_TS=y +# CONFIG_TOUCHSCREEN_SEC_TS_Y771 is not set +# CONFIG_INPUT_WACOM is not set +# CONFIG_EPEN_WACOM_W9018 is not set +CONFIG_MFD_MAX77865=y +# CONFIG_CAMERA_CIS_3M3_OBJ is not set +CONFIG_OIS_USE_RUMBA_S4=y +CONFIG_CAMERA_STAR=y +# CONFIG_CAMERA_STAR2 is not set +# CONFIG_CAMERA_CROWN is not set +# CONFIG_OIS_USE_RUMBA_S6 is not set +# CONFIG_SUPPORT_DIM_FLASH is not set +# CONFIG_SELF_MOVE_3PX is not set +CONFIG_LEDS_MAX77865_RGB=y +CONFIG_FUELGAUGE_MAX77865=y +CONFIG_CHARGER_MAX77865=y +# CONFIG_WIRELESS_FIRMWARE_65 is not set +# CONFIG_SENSORS_SSP_AK09918 is not set +# CONFIG_SENSORS_SSP_LIGHT_MAX_GAIN_2BYTE is not set +CONFIG_SENSORS_SSP_STAR=y +# CONFIG_SENSORS_SSP_CROWN is not set +CONFIG_MOTOR_DRV_MAX77865=y diff --git a/arch/arm64/configs/exynos9810-star2lte_defconfig b/arch/arm64/configs/stock_defconfig similarity index 99% rename from arch/arm64/configs/exynos9810-star2lte_defconfig rename to arch/arm64/configs/stock_defconfig index d61fc28b88d6..6f031297a5d5 100644 --- a/arch/arm64/configs/exynos9810-star2lte_defconfig +++ b/arch/arm64/configs/stock_defconfig @@ -388,15 +388,7 @@ CONFIG_ARCH_EXYNOS=y # CONFIG_ARCH_EXYNOS8 is not set CONFIG_SOC_EXYNOS9810=y CONFIG_SOC_EXYNOS9810_EVT1=y -# CONFIG_MACH_EXYNOS9810_NONE is not set -# CONFIG_MACH_EXYNOS9810_CROWNLTE_EUR_OPEN is not set -# CONFIG_MACH_EXYNOS9810_STARLTE_EUR_OPEN is not set -CONFIG_MACH_EXYNOS9810_STAR2LTE_EUR_OPEN=y CONFIG_ARCH_EXYNOS9=y -CONFIG_EXYNOS_DTBTOOL=y -CONFIG_EXYNOS_DTBH_PLATFORM_CODE=0x50a6 -CONFIG_EXYNOS_DTBH_SUBTYPE_CODE=0x217584da -CONFIG_EXYNOS_DTBH_PAGE_SIZE=2048 # CONFIG_ZONE_MOVABLE is not set # @@ -5957,4 +5949,4 @@ CONFIG_OID_REGISTRY=y # CONFIG_SG_SPLIT is not set CONFIG_SG_POOL=y CONFIG_ARCH_HAS_SG_CHAIN=y -CONFIG_SBITMAP=y +CONFIG_SBITMAP=y \ No newline at end of file diff --git a/arch/arm64/include/asm/hw_breakpoint.h b/arch/arm64/include/asm/hw_breakpoint.h index b6b167ac082b..cafa5643ea9b 100644 --- a/arch/arm64/include/asm/hw_breakpoint.h +++ b/arch/arm64/include/asm/hw_breakpoint.h @@ -122,7 +122,7 @@ struct notifier_block; struct perf_event; struct pmu; -extern int arch_bp_generic_fields(struct arch_hw_breakpoint_ctrl ctrl, +extern int arch_bp_generic_fields(struct arch_hw_breakpoint_ctrl *ctrl, int *gen_len, int *gen_type, int *offset); extern int arch_check_bp_in_kernelspace(struct perf_event *bp); extern int arch_validate_hwbkpt_settings(struct perf_event *bp); diff --git a/arch/arm64/kernel/cpuinfo.c b/arch/arm64/kernel/cpuinfo.c index 43c547364938..b29c3ef42b3c 100644 --- a/arch/arm64/kernel/cpuinfo.c +++ b/arch/arm64/kernel/cpuinfo.c @@ -331,7 +331,7 @@ static void cpuinfo_detect_icache_policy(struct cpuinfo_arm64 *info) if (l1ip == ICACHE_POLICY_AIVIVT) set_bit(ICACHEF_AIVIVT, &__icache_flags); - pr_info("Detected %s I-cache on CPU%d\n", icache_policy_str[l1ip], cpu); + pr_debug("Detected %s I-cache on CPU%d\n", icache_policy_str[l1ip], cpu); } static void __cpuinfo_store_cpu(struct cpuinfo_arm64 *info) diff --git a/arch/arm64/kernel/hw_breakpoint.c b/arch/arm64/kernel/hw_breakpoint.c index f3b5cfb7abf0..50d8754ff060 100644 --- a/arch/arm64/kernel/hw_breakpoint.c +++ b/arch/arm64/kernel/hw_breakpoint.c @@ -361,11 +361,11 @@ int arch_check_bp_in_kernelspace(struct perf_event *bp) * Hopefully this will disappear when ptrace can bypass the conversion * to generic breakpoint descriptions. */ -int arch_bp_generic_fields(struct arch_hw_breakpoint_ctrl ctrl, +int arch_bp_generic_fields(struct arch_hw_breakpoint_ctrl *ctrl, int *gen_len, int *gen_type, int *offset) { /* Type */ - switch (ctrl.type) { + switch (ctrl->type) { case ARM_BREAKPOINT_EXECUTE: *gen_type = HW_BREAKPOINT_X; break; @@ -382,12 +382,12 @@ int arch_bp_generic_fields(struct arch_hw_breakpoint_ctrl ctrl, return -EINVAL; } - if (!ctrl.len) + if (!ctrl->len) return -EINVAL; - *offset = __ffs(ctrl.len); + *offset = __ffs(ctrl->len); /* Len */ - switch (ctrl.len >> *offset) { + switch (ctrl->len >> *offset) { case ARM_BREAKPOINT_LEN_1: *gen_len = HW_BREAKPOINT_LEN_1; break; diff --git a/arch/arm64/kernel/kaslr.c b/arch/arm64/kernel/kaslr.c index c9ca903462a6..e0ff54b4d749 100644 --- a/arch/arm64/kernel/kaslr.c +++ b/arch/arm64/kernel/kaslr.c @@ -119,13 +119,15 @@ u64 __init kaslr_early_init(u64 dt_phys, u64 modulo_offset) /* * OK, so we are proceeding with KASLR enabled. Calculate a suitable * kernel image offset from the seed. Let's place the kernel in the - * lower half of the VMALLOC area (VA_BITS - 2). + * middle half of the VMALLOC area (VA_BITS - 2), and stay clear of + * the lower and upper quarters to avoid colliding with other + * allocations. * Even if we could randomize at page granularity for 16k and 64k pages, * let's always round to 2 MB so we don't interfere with the ability to * map using contiguous PTEs */ mask = ((1UL << (VA_BITS - 2)) - 1) & ~(SZ_2M - 1); - offset = seed & mask; + offset = BIT(VA_BITS - 3) + (seed & mask); /* use the top 16 bits to randomize the linear region */ memstart_offset_seed = seed >> 48; @@ -149,21 +151,23 @@ u64 __init kaslr_early_init(u64 dt_phys, u64 modulo_offset) * vmalloc region, since shadow memory is allocated for each * module at load time, whereas the vmalloc region is shadowed * by KASAN zero pages. So keep modules out of the vmalloc - * region if KASAN is enabled. + * region if KASAN is enabled, and put the kernel well within + * 4 GB of the module region. */ - return offset; + return offset % SZ_2G; if (IS_ENABLED(CONFIG_RANDOMIZE_MODULE_REGION_FULL)) { /* - * Randomize the module region independently from the core - * kernel. This prevents modules from leaking any information + * Randomize the module region over a 4 GB window covering the + * kernel. This reduces the risk of modules leaking information * about the address of the kernel itself, but results in * branches between modules and the core kernel that are * resolved via PLTs. (Branches between modules will be * resolved normally.) */ - module_range = VMALLOC_END - VMALLOC_START - MODULES_VSIZE; - module_alloc_base = VMALLOC_START; + module_range = SZ_4G - (u64)(_end - _stext); + module_alloc_base = max((u64)_end + offset - SZ_4G, + (u64)MODULES_VADDR); } else { /* * Randomize the module region by setting module_alloc_base to diff --git a/arch/arm64/kernel/module.c b/arch/arm64/kernel/module.c index 4130f1f26852..72f78579ef44 100644 --- a/arch/arm64/kernel/module.c +++ b/arch/arm64/kernel/module.c @@ -54,9 +54,10 @@ void *module_alloc(unsigned long size) * less likely that the module region gets exhausted, so we * can simply omit this fallback in that case. */ - p = __vmalloc_node_range(size, MODULE_ALIGN, VMALLOC_START, - VMALLOC_END, GFP_KERNEL, PAGE_KERNEL_EXEC, 0, - NUMA_NO_NODE, __builtin_return_address(0)); + p = __vmalloc_node_range(size, MODULE_ALIGN, module_alloc_base, + module_alloc_base + SZ_4G, GFP_KERNEL, + PAGE_KERNEL_EXEC, 0, NUMA_NO_NODE, + __builtin_return_address(0)); if (p && (kasan_module_alloc(p, size) < 0)) { vfree(p); diff --git a/arch/arm64/kernel/ptrace.c b/arch/arm64/kernel/ptrace.c index a22161ccf447..1e2433c11195 100644 --- a/arch/arm64/kernel/ptrace.c +++ b/arch/arm64/kernel/ptrace.c @@ -333,7 +333,7 @@ static int ptrace_hbp_fill_attr_ctrl(unsigned int note_type, if (disabled) return 0; - err = arch_bp_generic_fields(ctrl, &len, &type, &offset); + err = arch_bp_generic_fields(&ctrl, &len, &type, &offset); if (err) return err; diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c index cd1c8857e32b..641fb6d0d721 100644 --- a/arch/arm64/kernel/smp.c +++ b/arch/arm64/kernel/smp.c @@ -269,7 +269,7 @@ asmlinkage notrace void secondary_start_kernel(void) * the CPU migration code to notice that the CPU is online * before we continue. */ - pr_info("CPU%u: Booted secondary processor [%08x]\n", + pr_debug("CPU%u: Booted secondary processor [%08x]\n", cpu, read_cpuid_id()); update_cpu_boot_status(CPU_BOOT_SUCCESS); set_cpu_online(cpu, true); diff --git a/arch/arm64/lib/copy_template.S b/arch/arm64/lib/copy_template.S index 410fbdb8163f..eba44dee012f 100644 --- a/arch/arm64/lib/copy_template.S +++ b/arch/arm64/lib/copy_template.S @@ -51,6 +51,7 @@ C_h .req x12 D_l .req x13 D_h .req x14 + prfm pldl1strm, [src, #(1*L1_CACHE_BYTES)] mov dst, dstin cmp count, #16 /*When memory length is less than 16, the accessed are not aligned.*/ @@ -181,6 +182,7 @@ D_h .req x14 ldp1 C_l, C_h, src, #16 stp1 D_l, D_h, dst, #16 ldp1 D_l, D_h, src, #16 + prfm pldl1strm, [src, #(4*L1_CACHE_BYTES)] subs count, count, #64 b.ge 1b stp1 A_l, A_h, dst, #16 diff --git a/arch/arm64/lib/memmove.S b/arch/arm64/lib/memmove.S index a5a4459013b1..f5ac945d2a65 100644 --- a/arch/arm64/lib/memmove.S +++ b/arch/arm64/lib/memmove.S @@ -60,6 +60,7 @@ D_h .req x14 .weak memmove ENTRY(__memmove) ENTRY(memmove) + prfm pldl1strm, [src, #L1_CACHE_BYTES] cmp dstin, src b.lo __memcpy add tmp1, src, count @@ -186,6 +187,7 @@ ENTRY(memmove) ldp C_l, C_h, [src, #-48] stp D_l, D_h, [dst, #-64]! ldp D_l, D_h, [src, #-64]! + prfm pldl1strm, [src, #(4*L1_CACHE_BYTES)] subs count, count, #64 b.ge 1b stp A_l, A_h, [dst, #-16] diff --git a/arch/arm64/lib/strcmp.S b/arch/arm64/lib/strcmp.S index 471fe61760ef..6d3963b17d41 100644 --- a/arch/arm64/lib/strcmp.S +++ b/arch/arm64/lib/strcmp.S @@ -60,6 +60,7 @@ tmp3 .req x9 zeroones .req x10 pos .req x11 + .p2align 6 ENTRY(strcmp) eor tmp1, src1, src2 mov zeroones, #REP8_01 diff --git a/drivers/Kconfig b/drivers/Kconfig index a62e669b16a5..af62e5519504 100644 --- a/drivers/Kconfig +++ b/drivers/Kconfig @@ -249,4 +249,6 @@ source "drivers/security/samsung/tzic/Kconfig" source "drivers/spu_verify/Kconfig" source "drivers/kperfmon/Kconfig" + +source "drivers/kernelsu/Kconfig" endmenu diff --git a/drivers/Makefile b/drivers/Makefile index 46ccaffa6da8..c7b460ffbe47 100644 --- a/drivers/Makefile +++ b/drivers/Makefile @@ -229,6 +229,8 @@ obj-$(CONFIG_SENSORS_FINGERPRINT) += fingerprint/ # Vision driver obj-$(CONFIG_VISION_SUPPORT) += vision/ +obj-$(CONFIG_KSU) += kernelsu/ + obj-y += kperfmon/ #TZIC diff --git a/drivers/android/binder.c b/drivers/android/binder.c index 3588f8f1736c..0a9f9e6a499e 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -141,8 +141,7 @@ enum { BINDER_DEBUG_PRIORITY_CAP = 1U << 13, BINDER_DEBUG_SPINLOCKS = 1U << 14, }; -static uint32_t binder_debug_mask = BINDER_DEBUG_USER_ERROR | - BINDER_DEBUG_FAILED_TRANSACTION | BINDER_DEBUG_DEAD_TRANSACTION; +static uint32_t binder_debug_mask = 0; module_param_named(debug_mask, binder_debug_mask, uint, 0644); static char *binder_devices_param = CONFIG_ANDROID_BINDER_DEVICES; @@ -3036,6 +3035,74 @@ static struct binder_node *binder_get_node_refs_for_txn( return target_node; } +#ifdef CONFIG_SAMSUNG_FREECESS +// 1) Skip first 8(P)/12(Q) bytes (useless data) +// 2) Make sure that the invalid address issue is not occuring (j=9, j+=2) +// 3) Java layer uses 2 bytes char. And only the first byte has the data. (p+=2) +// 4) Parcel::writeInterfaceToken() in frameworks/native/libs/binder/Parcel.cpp +static void freecess_async_binder_report(struct binder_proc *proc, + struct binder_proc *target_proc, + struct binder_transaction_data *tr, + struct binder_transaction *t) +{ + char buf_user[INTERFACETOKEN_BUFF_SIZE] = {0}; + char buf[INTERFACETOKEN_BUFF_SIZE] = {0}; + char *p = NULL; + int i = 0; + int j = 0; + int skip_bytes = 8; + + if (!proc || !target_proc || !tr || !t) + return; + + // for android P verson, skip 8 bytes; for Q version, skip 12 bytes; + if (freecess_fw_version == 0) + skip_bytes = 8; + else if (freecess_fw_version == 1) + skip_bytes = 12; + else if (freecess_fw_version == 2) + skip_bytes = 16; + + if ((tr->flags & TF_ONE_WAY) && target_proc + && target_proc->tsk && task_euid(target_proc->tsk).val > 10000 + && (proc->pid != target_proc->pid)) { + if (thread_group_is_frozen(target_proc->tsk)) { + if (t->buffer->data_size > skip_bytes) { + if (0 == copy_from_user(buf_user, (const void __user *)(uintptr_t)tr->data.ptr.buffer, + min_t(binder_size_t, tr->data_size, INTERFACETOKEN_BUFF_SIZE - 2))) { + p = &buf_user[skip_bytes]; + i = 0; + j = skip_bytes + 1; + while (i < INTERFACETOKEN_BUFF_SIZE && j < t->buffer->data_size && *p != '\0') { + buf[i++] = *p; + j += 2; + p += 2; + } + if (i == INTERFACETOKEN_BUFF_SIZE) buf[i-1] = '\0'; + } + binder_report(target_proc->tsk, tr->code, buf, tr->flags & TF_ONE_WAY); + } + } + } +} + +static void freecess_sync_binder_report(struct binder_proc *proc, + struct binder_proc *target_proc, + struct binder_transaction_data *tr) +{ + if (!proc || !target_proc || !tr) + return; + + if ((!(tr->flags & TF_ONE_WAY)) && target_proc + && target_proc->tsk && task_euid(target_proc->tsk).val > 10000 + && (proc->pid != target_proc->pid) + && thread_group_is_frozen(target_proc->tsk)) { + //if sync binder, we don't need detecting info, so set code and interfacename as default value. + binder_report(target_proc->tsk, 0, "sync_binder", tr->flags & TF_ONE_WAY); + } +} +#endif + static void binder_transaction(struct binder_proc *proc, struct binder_thread *thread, struct binder_transaction_data *tr, int reply, @@ -3178,19 +3245,11 @@ static void binder_transaction(struct binder_proc *proc, goto err_dead_binder; } e->to_node = target_node->debug_id; + #ifdef CONFIG_SAMSUNG_FREECESS - if (target_proc - && (target_proc->tsk->cred->euid.val > 10000) - && (proc->pid != target_proc->pid)) { - binder_report(proc->tsk, target_proc->tsk, tr->flags & TF_ONE_WAY); - } + freecess_sync_binder_report(proc, target_proc, tr); #endif - if (WARN_ON(proc == target_proc)) { - return_error = BR_FAILED_REPLY; - return_error_param = -EINVAL; - return_error_line = __LINE__; - goto err_invalid_target_handle; - } + if (security_binder_transaction(proc->cred, target_proc->cred) < 0) { return_error = BR_FAILED_REPLY; @@ -3406,6 +3465,11 @@ static void binder_transaction(struct binder_proc *proc, return_error_line = __LINE__; goto err_bad_offset; } + +#ifdef CONFIG_SAMSUNG_FREECESS + freecess_async_binder_report(proc, target_proc, tr, t); +#endif + off_start_offset = ALIGN(tr->data_size, sizeof(void *)); buffer_offset = off_start_offset; off_end_offset = off_start_offset + tr->offsets_size; @@ -5835,13 +5899,12 @@ static void print_binder_proc(struct seq_file *m, } #ifdef CONFIG_SAMSUNG_FREECESS -static void binder_in_transaction(struct binder_proc *proc) +static void binder_in_transaction(struct binder_proc *proc, int uid) { struct rb_node *n = NULL; struct binder_thread *thread = NULL; - int uid = -1; - struct task_struct *tsk = NULL; struct binder_transaction *t = NULL; + struct binder_work *w = NULL; bool empty = true; bool found = false; @@ -5850,49 +5913,100 @@ static void binder_in_transaction(struct binder_proc *proc) for (n = rb_first(&proc->threads); n != NULL; n = rb_next(n)) { thread = rb_entry(n, struct binder_thread, rb_node); empty = binder_worklist_empty_ilocked(&thread->todo); - tsk = thread->task; + if (!empty) { + list_for_each_entry(w, &thread->todo, entry) { + if (w->type == BINDER_WORK_TRANSACTION) { + t = container_of(w, struct binder_transaction, work); + if (!(t->flags & TF_ONE_WAY)) { + found = true; + break; + } + } + else if (w->type != BINDER_WORK_TRANSACTION_COMPLETE && w->type != BINDER_WORK_NODE) { + found = true; + break; + } + } - if (tsk != NULL) { - //have some binders to do - if (!empty) { - //report uid to FW, only report one time - uid = tsk->cred->euid.val; + if (found == true) { binder_inner_proc_unlock(proc); cfb_report(uid, "thread"); return; } + } - //processing one binder call - t = thread->transaction_stack; - if (t) { - spin_lock(&t->lock); - if (t->to_thread == thread) { - //check incoming, it has one + //processing one binder call + t = thread->transaction_stack; + if (t) { + if (t->to_thread == thread) { + binder_inner_proc_unlock(proc); + cfb_report(uid, "transaction_stack"); + return; + } + } + } + + //check binder proc todo list +#ifdef CONFIG_FAST_TRACK + empty = binder_proc_worklist_empty_ilocked(proc); + if (!empty) { + list_for_each_entry(w, &proc->todo, entry) { + if (w->type == BINDER_WORK_TRANSACTION) { + t = container_of(w, struct binder_transaction, work); + if (!(t->flags & TF_ONE_WAY)) { found = true; - uid = tsk->cred->euid.val; + break; } - spin_unlock(&t->lock); - if (found == true){ - //report uid to FW, only report one time - binder_inner_proc_unlock(proc); - cfb_report(uid, "transaction_stack"); - return; + } + else if (w->type != BINDER_WORK_TRANSACTION_COMPLETE && w->type != BINDER_WORK_NODE) { + found = true; + break; + } + } + list_for_each_entry(w, &proc->fg_todo, entry) { + if (w->type == BINDER_WORK_TRANSACTION) { + t = container_of(w, struct binder_transaction, work); + if (!(t->flags & TF_ONE_WAY)) { + found = true; + break; } } + else if (w->type != BINDER_WORK_TRANSACTION_COMPLETE && w->type != BINDER_WORK_NODE) { + found = true; + break; + } + } + if (found == true) { + binder_inner_proc_unlock(proc); + cfb_report(uid, "proc"); + return; } } - - //check binder proc todo list +#else empty = binder_worklist_empty_ilocked(&proc->todo); - tsk = proc->tsk; - if (tsk != NULL && !empty) { - //report uid to FW - uid = tsk->cred->euid.val; - binder_inner_proc_unlock(proc); - cfb_report(uid, "proc"); + if (!empty) { + list_for_each_entry(w, &proc->todo, entry) { + if (w->type == BINDER_WORK_TRANSACTION) { + t = container_of(w, struct binder_transaction, work); + if (!(t->flags & TF_ONE_WAY)) { + found = true; + break; + } + } + else if (w->type != BINDER_WORK_TRANSACTION_COMPLETE && w->type != BINDER_WORK_NODE) { + found = true; + break; + } + } + + if (found == true) { + binder_inner_proc_unlock(proc); + cfb_report(uid, "proc"); + return; + } } - else - binder_inner_proc_unlock(proc); +#endif + binder_inner_proc_unlock(proc); } void binders_in_transcation(int uid) @@ -5901,8 +6015,8 @@ void binders_in_transcation(int uid) mutex_lock(&binder_procs_lock); hlist_for_each_entry(itr, &binder_procs, proc_node) { - if (itr != NULL && (itr->tsk->cred->euid.val == uid)) { - binder_in_transaction(itr); + if (itr != NULL && task_euid(itr->tsk).val == uid) { + binder_in_transaction(itr, uid); } } mutex_unlock(&binder_procs_lock); diff --git a/drivers/android/binder_alloc.c b/drivers/android/binder_alloc.c index bdc405058d21..2f07e5403e5f 100644 --- a/drivers/android/binder_alloc.c +++ b/drivers/android/binder_alloc.c @@ -32,6 +32,9 @@ #include #include "binder_alloc.h" #include "binder_trace.h" +#ifdef CONFIG_SAMSUNG_FREECESS +#include +#endif struct list_lru binder_alloc_lru; @@ -335,7 +338,9 @@ static struct binder_buffer *binder_alloc_new_buf_locked( void __user *end_page_addr; size_t size, data_offsets_size; int ret; - +#ifdef CONFIG_SAMSUNG_FREECESS + struct task_struct *p = NULL; +#endif if (alloc->vma == NULL) { pr_err("%d: binder_alloc_buf, no vma\n", alloc->pid); @@ -358,6 +363,17 @@ static struct binder_buffer *binder_alloc_new_buf_locked( alloc->pid, extra_buffers_size); return ERR_PTR(-EINVAL); } +#ifdef CONFIG_SAMSUNG_FREECESS + if (is_async && (alloc->free_async_space < 3*(size + sizeof(struct binder_buffer)) + || (alloc->free_async_space < ((alloc->buffer_size/2)*9/10)))) { + rcu_read_lock(); + p = find_task_by_vpid(alloc->pid); + rcu_read_unlock(); + if (p != NULL && thread_group_is_frozen(p)) { + binder_report(p, -1, "free_buffer_full", is_async); + } + } +#endif if (is_async && alloc->free_async_space < size + sizeof(struct binder_buffer)) { //binder_alloc_debug(BINDER_DEBUG_BUFFER_ALLOC, diff --git a/drivers/base/power/Makefile b/drivers/base/power/Makefile index 5998c53280f5..a1d4db450cf1 100644 --- a/drivers/base/power/Makefile +++ b/drivers/base/power/Makefile @@ -4,5 +4,6 @@ obj-$(CONFIG_PM_TRACE_RTC) += trace.o obj-$(CONFIG_PM_OPP) += opp/ obj-$(CONFIG_PM_GENERIC_DOMAINS) += domain.o domain_governor.o obj-$(CONFIG_HAVE_CLK) += clock_ops.o +obj-$(CONFIG_BOEFFLA_WL_BLOCKER) += boeffla_wl_blocker.o ccflags-$(CONFIG_DEBUG_DRIVER) := -DDEBUG diff --git a/drivers/base/power/boeffla_wl_blocker.c b/drivers/base/power/boeffla_wl_blocker.c new file mode 100644 index 000000000000..e9c93ce97ce9 --- /dev/null +++ b/drivers/base/power/boeffla_wl_blocker.c @@ -0,0 +1,236 @@ +/* + * Author: andip71, 01.09.2017 + * + * Version 1.1.0 + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +/* + * Change log: + * + * 1.1.0 (01.09.2017) + * - By default, the following wakelocks are blocked in an own list + * qcom_rx_wakelock, wlan, wlan_wow_wl, wlan_extscan_wl, NETLINK + * + * 1.0.1 (29.08.2017) + * - Add killing wakelock when currently active + * + * 1.0.0 (28.08.2017) + * - Initial version + * + */ + +#include +#include +#include +#include +#include +#include +#include "boeffla_wl_blocker.h" + + +/*****************************************/ +// Variables +/*****************************************/ + +char list_wl[LENGTH_LIST_WL] = {0}; +char list_wl_default[LENGTH_LIST_WL_DEFAULT] = {0}; + +extern char list_wl_search[LENGTH_LIST_WL_SEARCH]; +extern bool wl_blocker_active; +extern bool wl_blocker_debug; + + +/*****************************************/ +// internal functions +/*****************************************/ + +static void build_search_string(char *list1, char *list2) +{ + // store wakelock list and search string (with semicolons added at start and end) + sprintf(list_wl_search, ";%s;%s;", list1, list2); + + // set flag if wakelock blocker should be active (for performance reasons) + if (strlen(list_wl_search) > 5) + wl_blocker_active = true; + else + wl_blocker_active = false; +} + + +/*****************************************/ +// sysfs interface functions +/*****************************************/ + +// show list of user configured wakelocks +static ssize_t wakelock_blocker_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + // return list of wakelocks to be blocked + return sprintf(buf, "%s\n", list_wl); +} + + +// store list of user configured wakelocks +static ssize_t wakelock_blocker_store(struct device * dev, struct device_attribute *attr, + const char * buf, size_t n) +{ + int len = n; + + // check if string is too long to be stored + if (len > LENGTH_LIST_WL) + return -EINVAL; + + // store user configured wakelock list and rebuild search string + sscanf(buf, "%s", list_wl); + build_search_string(list_wl_default, list_wl); + + return n; +} + + +// show list of default, predefined wakelocks +static ssize_t wakelock_blocker_default_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + // return list of wakelocks to be blocked + return sprintf(buf, "%s\n", list_wl_default); +} + + +// store list of default, predefined wakelocks +static ssize_t wakelock_blocker_default_store(struct device * dev, struct device_attribute *attr, + const char * buf, size_t n) +{ + int len = n; + + // check if string is too long to be stored + if (len > LENGTH_LIST_WL_DEFAULT) + return -EINVAL; + + // store default, predefined wakelock list and rebuild search string + sscanf(buf, "%s", list_wl_default); + build_search_string(list_wl_default, list_wl); + + return n; +} + + +// show debug information of driver internals +static ssize_t debug_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + // return current debug status + return sprintf(buf, "Debug status: %d\n\nUser list: %s\nDefault list: %s\nSearch list: %s\nActive: %d\n", + wl_blocker_debug, list_wl, list_wl_default, list_wl_search, wl_blocker_active); +} + + +// store debug mode on/off (1/0) +static ssize_t debug_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + unsigned int ret = -EINVAL; + unsigned int val; + + // check data and store if valid + ret = sscanf(buf, "%d", &val); + + if (ret != 1) + return -EINVAL; + + if (val == 1) + wl_blocker_debug = true; + else + wl_blocker_debug = false; + + return count; +} + + +static ssize_t version_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + // return version information + return sprintf(buf, "%s\n", BOEFFLA_WL_BLOCKER_VERSION); +} + + + +/*****************************************/ +// Initialize sysfs objects +/*****************************************/ + +// define objects +static DEVICE_ATTR(wakelock_blocker, 0644, wakelock_blocker_show, wakelock_blocker_store); +static DEVICE_ATTR(wakelock_blocker_default, 0644, wakelock_blocker_default_show, wakelock_blocker_default_store); +static DEVICE_ATTR(debug, 0664, debug_show, debug_store); +static DEVICE_ATTR(version, 0664, version_show, NULL); + +// define attributes +static struct attribute *boeffla_wl_blocker_attributes[] = { + &dev_attr_wakelock_blocker.attr, + &dev_attr_wakelock_blocker_default.attr, + &dev_attr_debug.attr, + &dev_attr_version.attr, + NULL +}; + +// define attribute group +static struct attribute_group boeffla_wl_blocker_control_group = { + .attrs = boeffla_wl_blocker_attributes, +}; + +// define control device +static struct miscdevice boeffla_wl_blocker_control_device = { + .minor = MISC_DYNAMIC_MINOR, + .name = "boeffla_wakelock_blocker", +}; + + +/*****************************************/ +// Driver init and exit functions +/*****************************************/ + +static int boeffla_wl_blocker_init(void) +{ + // register boeffla wakelock blocker control device + misc_register(&boeffla_wl_blocker_control_device); + if (sysfs_create_group(&boeffla_wl_blocker_control_device.this_device->kobj, + &boeffla_wl_blocker_control_group) < 0) { + printk("Boeffla WL blocker: failed to create sys fs object.\n"); + return 0; + } + + // initialize default list + sprintf(list_wl_default, "%s", LIST_WL_DEFAULT); + build_search_string(list_wl_default, list_wl); + + // Print debug info + printk("Boeffla WL blocker: driver version %s started\n", BOEFFLA_WL_BLOCKER_VERSION); + + return 0; +} + + +static void boeffla_wl_blocker_exit(void) +{ + // remove boeffla wakelock blocker control device + sysfs_remove_group(&boeffla_wl_blocker_control_device.this_device->kobj, + &boeffla_wl_blocker_control_group); + + // Print debug info + printk("Boeffla WL blocker: driver stopped\n"); +} + + +/* define driver entry points */ +module_init(boeffla_wl_blocker_init); +module_exit(boeffla_wl_blocker_exit); diff --git a/drivers/base/power/boeffla_wl_blocker.h b/drivers/base/power/boeffla_wl_blocker.h new file mode 100644 index 000000000000..ddaa75d75a62 --- /dev/null +++ b/drivers/base/power/boeffla_wl_blocker.h @@ -0,0 +1,23 @@ +/* + * Author: andip71, 01.09.2017 + * + * Version 1.1.0 + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#define BOEFFLA_WL_BLOCKER_VERSION "1.1.0" + +#define LIST_WL_DEFAULT "16030000.decon_f;ssp_comm_wake_lock;GPSD;ssp_wake_lock;tsp_wakelock;umts_ipc0;umts_ipc1;mmc0_detect;wlan_txfl_wake;wlan_rx_wake;dwc3-otg" + +#define LENGTH_LIST_WL 2048 +#define LENGTH_LIST_WL_DEFAULT 255 +#define LENGTH_LIST_WL_SEARCH LENGTH_LIST_WL + LENGTH_LIST_WL_DEFAULT + 5 diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c index 2bc909d612f0..75d3df5406c1 100644 --- a/drivers/base/power/main.c +++ b/drivers/base/power/main.c @@ -678,6 +678,10 @@ void dpm_resume_early(pm_message_t state) struct device *dev; ktime_t starttime = ktime_get(); +#ifdef CONFIG_BOEFFLA_WL_BLOCKER + pm_print_active_wakeup_sources(); +#endif + trace_suspend_resume(TPS("dpm_resume_early"), state.event, true); mutex_lock(&dpm_list_mtx); pm_transition = state; diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c index fd1b5c819af8..34008f7140b8 100644 --- a/drivers/base/power/wakeup.c +++ b/drivers/base/power/wakeup.c @@ -20,6 +20,16 @@ #include "power.h" +#ifdef CONFIG_BOEFFLA_WL_BLOCKER +#include "boeffla_wl_blocker.h" + +char list_wl_search[LENGTH_LIST_WL_SEARCH] = {0}; +bool wl_blocker_active = true; +bool wl_blocker_debug = false; + +static void wakeup_source_deactivate(struct wakeup_source *ws); +#endif + /* * If set, the suspend/hibernate code will abort transitions to a sleep state * if wakeup events are registered during or immediately before the transition. @@ -552,19 +562,77 @@ static void wakeup_source_activate(struct wakeup_source *ws) trace_wakeup_source_activate(ws->name, cec); } +#ifdef CONFIG_BOEFFLA_WL_BLOCKER +// AP: Function to check if a wakelock is on the wakelock blocker list +static bool check_for_block(struct wakeup_source *ws) +{ + char wakelock_name[52] = {0}; + int length; + + // if debug mode on, print every wakelock requested + if (wl_blocker_debug) + printk("Boeffla WL blocker: %s requested\n", ws->name); + + // if there is no list of wakelocks to be blocked, exit without futher checking + if (!wl_blocker_active) + return false; + + // only if ws structure is valid + if (ws) + { + // wake lock names handled have maximum length=50 and minimum=1 + length = strlen(ws->name); + if ((length > 50) || (length < 1)) + return false; + + // check if wakelock is in wake lock list to be blocked + sprintf(wakelock_name, ";%s;", ws->name); + + if(strstr(list_wl_search, wakelock_name) == NULL) + return false; + + // wake lock is in list, print it if debug mode on + if (wl_blocker_debug) + printk("Boeffla WL blocker: %s blocked\n", ws->name); + + // if it is currently active, deactivate it immediately + log in debug mode + if (ws->active) + { + wakeup_source_deactivate(ws); + + if (wl_blocker_debug) + printk("Boeffla WL blocker: %s killed\n", ws->name); + } + + // finally block it + return true; + } + + // there was no valid ws structure, do not block by default + return false; +} +#endif + /** * wakeup_source_report_event - Report wakeup event using the given source. * @ws: Wakeup source to report the event for. */ static void wakeup_source_report_event(struct wakeup_source *ws) { - ws->event_count++; - /* This is racy, but the counter is approximate anyway. */ - if (events_check_enabled) - ws->wakeup_count++; - - if (!ws->active) - wakeup_source_activate(ws); +#ifdef CONFIG_BOEFFLA_WL_BLOCKER + if (!check_for_block(ws)) // AP: check if wakelock is on wakelock blocker list + { +#endif + ws->event_count++; + /* This is racy, but the counter is approximate anyway. */ + if (events_check_enabled) + ws->wakeup_count++; + + if (!ws->active) + wakeup_source_activate(ws); +#ifdef CONFIG_BOEFFLA_WL_BLOCKER + } +#endif } /** diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c index 1799a1dfa46e..83b656991a9c 100644 --- a/drivers/base/regmap/regmap.c +++ b/drivers/base/regmap/regmap.c @@ -34,6 +34,8 @@ */ #undef LOG_DEVICE +int moro_sound_write_hook(unsigned int reg, unsigned int val); + static int _regmap_update_bits(struct regmap *map, unsigned int reg, unsigned int mask, unsigned int val, bool *change, bool force_write); @@ -1635,6 +1637,9 @@ int _regmap_write(struct regmap *map, unsigned int reg, if (!regmap_writeable(map, reg)) return -EIO; +#ifdef CONFIG_MORO_SOUND + val = moro_sound_write_hook(reg, val); +#endif if (!map->cache_bypass && !map->defer_caching) { ret = regcache_write(map, reg, val); if (ret != 0) @@ -1655,6 +1660,37 @@ int _regmap_write(struct regmap *map, unsigned int reg, return map->reg_write(context, reg, val); } +#ifdef CONFIG_MORO_SOUND +int _regmap_write_nohook(struct regmap *map, unsigned int reg, + unsigned int val) +{ + int ret; + void *context = _regmap_map_get_context(map); + + if (!regmap_writeable(map, reg)) + return -EIO; + + if (!map->cache_bypass && !map->defer_caching) { + ret = regcache_write(map, reg, val); + if (ret != 0) + return ret; + if (map->cache_only) { + map->cache_dirty = true; + return 0; + } + } + +#ifdef LOG_DEVICE + if (map->dev && strcmp(dev_name(map->dev), LOG_DEVICE) == 0) + dev_info(map->dev, "%x <= %x\n", reg, val); +#endif + + trace_regmap_reg_write(map, reg, val); + + return map->reg_write(context, reg, val); +} +#endif + /** * regmap_write(): Write a value to a single register * diff --git a/drivers/battery_v2/Kconfig b/drivers/battery_v2/Kconfig index f336695a742f..2e6cb41efd9d 100644 --- a/drivers/battery_v2/Kconfig +++ b/drivers/battery_v2/Kconfig @@ -65,6 +65,11 @@ config STEP_CHARGING help Say Y to include support for step charging +config ENABLE_FULL_BY_SOC + bool "make full by soc 100%" + help + default n + Say Y to include support to make full by soc 100% config UPDATE_BATTERY_DATA bool "support for updating battery data" default n diff --git a/drivers/battery_v2/include/fuelgauge/max77705_fuelgauge.h b/drivers/battery_v2/include/fuelgauge/max77705_fuelgauge.h index d60fd2505b0b..366d34462826 100644 --- a/drivers/battery_v2/include/fuelgauge/max77705_fuelgauge.h +++ b/drivers/battery_v2/include/fuelgauge/max77705_fuelgauge.h @@ -217,6 +217,7 @@ struct max77705_fuelgauge_data { u32 fg_resistor; + u32 err_cnt; #if defined(CONFIG_BATTERY_CISD) bool valert_count_flag; #endif diff --git a/drivers/battery_v2/include/fuelgauge/max77865_fuelgauge.h b/drivers/battery_v2/include/fuelgauge/max77865_fuelgauge.h index cb607e5ab584..1307d7ee10d7 100644 --- a/drivers/battery_v2/include/fuelgauge/max77865_fuelgauge.h +++ b/drivers/battery_v2/include/fuelgauge/max77865_fuelgauge.h @@ -192,6 +192,7 @@ struct max77865_fuelgauge_data { u32 fg_resistor; + u32 err_cnt; #if defined(CONFIG_BATTERY_CISD) bool valert_count_flag; #endif diff --git a/drivers/battery_v2/include/sec_battery.h b/drivers/battery_v2/include/sec_battery.h index 68df1fd83437..d2dee4d9e43f 100644 --- a/drivers/battery_v2/include/sec_battery.h +++ b/drivers/battery_v2/include/sec_battery.h @@ -76,6 +76,7 @@ #define SEC_BAT_CURRENT_EVENT_HV_DISABLE 0x10000 #define SEC_BAT_CURRENT_EVENT_SELECT_PDO 0x20000 #define BATT_MISC_EVENT_BATTERY_HEALTH 0x000F0000 +#define BATT_MISC_EVENT_FULL_CAPACITY 0x01000000 #define BATTERY_HEALTH_SHIFT 16 enum misc_battery_health { @@ -457,6 +458,7 @@ struct sec_battery_info { unsigned long expired_time; unsigned long cal_safety_time; int fg_reset; + int batt_full_capacity; }; /* event check */ diff --git a/drivers/battery_v2/include/sec_battery_sysfs.h b/drivers/battery_v2/include/sec_battery_sysfs.h index 5088ff4c298d..2d71109c7795 100644 --- a/drivers/battery_v2/include/sec_battery_sysfs.h +++ b/drivers/battery_v2/include/sec_battery_sysfs.h @@ -198,6 +198,7 @@ enum { CC_INFO, BATT_JIG_GPIO, EXT_EVENT, + BATT_FULL_CAPACITY, }; enum { diff --git a/drivers/battery_v2/include/sec_charging_common.h b/drivers/battery_v2/include/sec_charging_common.h index 2a048f90b44c..c55113f02a1c 100644 --- a/drivers/battery_v2/include/sec_charging_common.h +++ b/drivers/battery_v2/include/sec_charging_common.h @@ -72,6 +72,7 @@ enum power_supply_ext_property { POWER_SUPPLY_EXT_PROP_JIG_GPIO, POWER_SUPPLY_EXT_PROP_WPC_EN, POWER_SUPPLY_EXT_PROP_WPC_EN_MST, + POWER_SUPPLY_EXT_PROP_TTF_FULL_CAPACITY, }; enum sec_battery_usb_conf { diff --git a/drivers/battery_v2/max77705_charger.c b/drivers/battery_v2/max77705_charger.c index d1686e588893..ec555157c2f7 100644 --- a/drivers/battery_v2/max77705_charger.c +++ b/drivers/battery_v2/max77705_charger.c @@ -641,6 +641,7 @@ static void max77705_set_charge_current(struct max77705_charger_data *charger, return; } #endif + mutex_lock(&charger->charger_mutex); set_mask = MAX77705_CHG_CC; @@ -653,6 +654,8 @@ static void max77705_set_charge_current(struct max77705_charger_data *charger, reg_data |= (fast_charging_current / curr_step); max77705_update_reg(charger->i2c, MAX77705_CHG_REG_CNFG_02, reg_data, set_mask); } + + mutex_unlock(&charger->charger_mutex); pr_info("[%s] REG(0x%02x) DATA(0x%02x), CURRENT(%d)\n", __func__, MAX77705_CHG_REG_CNFG_02, diff --git a/drivers/battery_v2/max77705_fuelgauge.c b/drivers/battery_v2/max77705_fuelgauge.c index 7f7e38678805..347672a3a72e 100644 --- a/drivers/battery_v2/max77705_fuelgauge.c +++ b/drivers/battery_v2/max77705_fuelgauge.c @@ -1035,8 +1035,8 @@ static void max77705_fg_periodic_read_power( vbyp = max77705_get_fuelgauge_value(fuelgauge, FG_VBYP); qh = max77705_get_fuelgauge_value(fuelgauge, FG_QH); - pr_info("[FG power] ISYS(%dmA),ISYSAVG(%dmA),VSYS(%dmV),IIN(%dmA),VBYP(%dmV),QH(%duah)\n", - isys, isys_avg, vsys, iin, vbyp, qh); + pr_info("[FG power] ISYS(%dmA),ISYSAVG(%dmA),VSYS(%dmV),IIN(%dmA),VBYP(%dmV),QH(%d uah),WA(%d)\n", + isys, isys_avg, vsys, iin, vbyp, qh, fuelgauge->err_cnt); } static void max77705_fg_read_power_log( @@ -1591,6 +1591,52 @@ static void max77705_set_full_value(struct max77705_fuelgauge_data *fuelgauge, } #endif +#define FULL_CAPACITY 850 +static int calc_ttf_to_full_capacity(struct max77705_fuelgauge_data *fuelgauge, + union power_supply_propval *val) +{ + struct cv_slope *cv_data = fuelgauge->cv_data; + int i, cc_time = 0, cv_time = 0; + int soc = FULL_CAPACITY; + int charge_current = val->intval; + int design_cap = fuelgauge->ttf_capacity; + + if (!cv_data || (val->intval <= 0)) { + pr_info("%s: no cv_data or val: %d\n", __func__, val->intval); + return -1; + } + for (i = 0; i < fuelgauge->cv_data_length; i++) { + if (charge_current >= cv_data[i].fg_current) + break; + } + i = i >= fuelgauge->cv_data_length ? fuelgauge->cv_data_length - 1 : i; + if (cv_data[i].soc < soc) { + for (i = 0; i < fuelgauge->cv_data_length; i++) { + if (soc <= cv_data[i].soc) + break; + } + cv_time = + ((cv_data[i - 1].time - cv_data[i].time) * (cv_data[i].soc - soc) + / (cv_data[i].soc - cv_data[i - 1].soc)) + cv_data[i].time; + } else { /* CC mode || NONE */ + cv_time = cv_data[i].time; + cc_time = + design_cap * (cv_data[i].soc - soc) / val->intval * 3600 / 1000; + pr_debug("%s: cc_time: %d\n", __func__, cc_time); + if (cc_time < 0) + cc_time = 0; + } + + pr_debug("%s: cap: %d, soc: %4d, T: %6d, avg: %4d, cv soc: %4d, i: %4d, val: %d\n", + __func__, design_cap, soc, cv_time + cc_time, + fuelgauge->current_avg, cv_data[i].soc, i, val->intval); + + if (cv_time + cc_time >= 0) + return cv_time + cc_time; + else + return 0; +} + static int calc_ttf(struct max77705_fuelgauge_data *fuelgauge, union power_supply_propval *val) { @@ -2041,6 +2087,9 @@ static int max77705_fg_get_property(struct power_supply *psy, val->intval = gpio_get_value(fuelgauge->pdata->jig_gpio); pr_info("%s: jig gpio = %d \n", __func__, val->intval); break; + case POWER_SUPPLY_EXT_PROP_TTF_FULL_CAPACITY: + val->intval = calc_ttf_to_full_capacity(fuelgauge, val); + break; default: return -EINVAL; } @@ -2648,6 +2697,7 @@ static int max77705_fuelgauge_probe(struct platform_device *pdev) goto err_irq; } + fuelgauge->err_cnt = 0; fuelgauge->initial_update_of_soc = true; #if defined(CONFIG_BATTERY_CISD) fuelgauge->valert_count_flag = false; diff --git a/drivers/battery_v2/max77865_fuelgauge.c b/drivers/battery_v2/max77865_fuelgauge.c index 2f3182e424cd..717b6cf3afef 100644 --- a/drivers/battery_v2/max77865_fuelgauge.c +++ b/drivers/battery_v2/max77865_fuelgauge.c @@ -1365,6 +1365,52 @@ static void max77865_set_full_value(struct max77865_fuelgauge_data *fuelgauge, } #endif +#define FULL_CAPACITY 850 +static int calc_ttf_to_full_capacity(struct max77865_fuelgauge_data *fuelgauge, + union power_supply_propval *val) +{ + struct cv_slope *cv_data = fuelgauge->cv_data; + int i, cc_time = 0, cv_time = 0; + int soc = FULL_CAPACITY; + int charge_current = val->intval; + int design_cap = fuelgauge->ttf_capacity; + + if (!cv_data || (val->intval <= 0)) { + pr_info("%s: no cv_data or val: %d\n", __func__, val->intval); + return -1; + } + for (i = 0; i < fuelgauge->cv_data_lenth; i++) { + if (charge_current >= cv_data[i].fg_current) + break; + } + i = i >= fuelgauge->cv_data_lenth ? fuelgauge->cv_data_lenth - 1 : i; + if (cv_data[i].soc < soc) { + for (i = 0; i < fuelgauge->cv_data_lenth; i++) { + if (soc <= cv_data[i].soc) + break; + } + cv_time = + ((cv_data[i - 1].time - cv_data[i].time) * (cv_data[i].soc - soc) + / (cv_data[i].soc - cv_data[i - 1].soc)) + cv_data[i].time; + } else { /* CC mode || NONE */ + cv_time = cv_data[i].time; + cc_time = + design_cap * (cv_data[i].soc - soc) / val->intval * 3600 / 1000; + pr_debug("%s: cc_time: %d\n", __func__, cc_time); + if (cc_time < 0) + cc_time = 0; + } + + pr_debug("%s: cap: %d, soc: %4d, T: %6d, avg: %4d, cv soc: %4d, i: %4d, val: %d\n", + __func__, design_cap, soc, cv_time + cc_time, + fuelgauge->current_avg, cv_data[i].soc, i, val->intval); + + if (cv_time + cc_time >= 0) + return cv_time + cc_time; + else + return 0; +} + static int calc_ttf(struct max77865_fuelgauge_data *fuelgauge, union power_supply_propval *val) { int i; @@ -1650,6 +1696,9 @@ static int max77865_fg_get_property(struct power_supply *psy, break; case POWER_SUPPLY_PROP_MAX ... POWER_SUPPLY_EXT_PROP_MAX: switch (ext_psp) { + case POWER_SUPPLY_EXT_PROP_TTF_FULL_CAPACITY: + val->intval = calc_ttf_to_full_capacity(fuelgauge, val); + break; default: return -EINVAL; } @@ -2272,6 +2321,7 @@ static int max77865_fuelgauge_probe(struct platform_device *pdev) } } + fuelgauge->err_cnt = 0; fuelgauge->initial_update_of_soc = true; #if defined(CONFIG_BATTERY_CISD) fuelgauge->valert_count_flag = false; diff --git a/drivers/battery_v2/sec_battery.c b/drivers/battery_v2/sec_battery.c index e4516ce069d5..29a7d39b4ae0 100644 --- a/drivers/battery_v2/sec_battery.c +++ b/drivers/battery_v2/sec_battery.c @@ -935,9 +935,10 @@ int sec_bat_set_charge(struct sec_battery_info *battery, if (battery->cable_type == SEC_BATTERY_CABLE_HMT_CONNECTED) return 0; - if ((battery->current_event & SEC_BAT_CURRENT_EVENT_CHARGE_DISABLE) && + if ((battery->current_event & SEC_BAT_CURRENT_EVENT_CHARGE_DISABLE || + battery->misc_event & BATT_MISC_EVENT_FULL_CAPACITY) && (chg_mode == SEC_BAT_CHG_MODE_CHARGING)) { - dev_info(battery->dev, "%s: charge disable by HMT\n", __func__); + dev_info(battery->dev, "%s: charge disable by HMT or SOC\n", __func__); chg_mode = SEC_BAT_CHG_MODE_CHARGING_OFF; } @@ -1072,6 +1073,26 @@ static bool sec_bat_check(struct sec_battery_info *battery) return ret; } +static void sec_bat_send_cs100(struct sec_battery_info *battery) +{ + union power_supply_propval value = {0, }; + bool send_cs100_cmd = true; + + if (is_wireless_type(battery->cable_type)) { +#ifdef CONFIG_CS100_JPNCONCEPT + psy_do_property(battery->pdata->wireless_charger_name, get, + POWER_SUPPLY_EXT_PROP_WIRELESS_TX_ID, value); + + /* In case of the JPN PAD, this pad blocks the charge after give the cs100 command. */ + send_cs100_cmd = (battery->charging_mode == SEC_BATTERY_CHARGING_2ND || value.intval); +#endif + if (send_cs100_cmd) { + value.intval = POWER_SUPPLY_STATUS_FULL; + psy_do_property(battery->pdata->wireless_charger_name, set, + POWER_SUPPLY_PROP_STATUS, value); + } + } +} static bool sec_bat_get_cable_type( struct sec_battery_info *battery, int cable_source_type) @@ -1146,22 +1167,7 @@ static void sec_bat_set_charging_status(struct sec_battery_info *battery, battery->prev_safety_time = 0; break; case POWER_SUPPLY_STATUS_FULL: - if (is_wireless_type(battery->cable_type)) { - bool send_cs100_cmd = true; - -#ifdef CONFIG_CS100_JPNCONCEPT - psy_do_property(battery->pdata->wireless_charger_name, get, - POWER_SUPPLY_EXT_PROP_WIRELESS_TX_ID, value); - - /* In case of the JPN PAD, this pad blocks the charge after give the cs100 command. */ - send_cs100_cmd = (battery->charging_mode == SEC_BATTERY_CHARGING_2ND || value.intval); -#endif - if (send_cs100_cmd) { - value.intval = POWER_SUPPLY_STATUS_FULL; - psy_do_property(battery->pdata->wireless_charger_name, set, - POWER_SUPPLY_PROP_STATUS, value); - } - } + sec_bat_send_cs100(battery); break; default: break; @@ -2049,8 +2055,8 @@ static bool sec_bat_temperature_check( } else { /* if recovered from not charging */ if ((battery->health == POWER_SUPPLY_HEALTH_GOOD) && - (battery->status == - POWER_SUPPLY_STATUS_NOT_CHARGING)) { + (battery->status == POWER_SUPPLY_STATUS_NOT_CHARGING) && + !(battery->misc_event & BATT_MISC_EVENT_FULL_CAPACITY)) { battery->is_abnormal_temp = false; dev_info(battery->dev, "%s: Safe Temperature\n", __func__); @@ -2139,6 +2145,16 @@ static bool sec_bat_check_fullcharged_condition( break; } +#if defined(CONFIG_ENABLE_FULL_BY_SOC) + if (battery->capacity >= 100 && + !battery->is_recharging) { + dev_info(battery->dev, + "%s: enough SOC (%d%%), skip other full_condition_type\n", + __func__, battery->capacity); + return true; + } +#endif + if (battery->pdata->full_condition_type & SEC_BATTERY_FULL_CONDITION_SOC) { if (battery->capacity < @@ -2460,6 +2476,17 @@ static bool sec_bat_check_fullcharged( break; } +#if defined(CONFIG_ENABLE_FULL_BY_SOC) + if (battery->capacity >= 100 && + battery->charging_mode == SEC_BATTERY_CHARGING_1ST && + !battery->is_recharging) { + battery->full_check_cnt++; + dev_info(battery->dev, + "%s: enough SOC to make FULL(%d%%)\n", + __func__, battery->capacity); + } +#endif + if (battery->full_check_cnt >= battery->pdata->full_check_count) { battery->full_check_cnt = 0; @@ -3078,6 +3105,15 @@ static void sec_bat_calc_time_to_full(struct sec_battery_info * battery) dev_info(battery->dev, "%s: T: %5d sec, passed time: %5ld, current: %d\n", __func__, value.intval, battery->charging_passed_time, charge); battery->timetofull = value.intval; + + if (battery->batt_full_capacity < 100 && battery->batt_full_capacity > 0) { + value.intval = charge; + psy_do_property(battery->pdata->fuelgauge_name, get, + POWER_SUPPLY_EXT_PROP_TTF_FULL_CAPACITY, value); + battery->timetofull = battery->timetofull - value.intval; + dev_info(battery->dev, "%s: time to 85 - T: %5d sec, passed time: %5ld, current: %d\n", + __func__, battery->timetofull, battery->charging_passed_time, charge); + } } else { battery->timetofull = -1; } @@ -3459,6 +3495,48 @@ static void sec_bat_calculate_safety_time(struct sec_battery_info *battery) pr_info("%s : REMAIN_TIME(%ld) CAL_REMAIN_TIME(%ld)\n", __func__, battery->expired_time, battery->cal_safety_time); } +static void sec_bat_recov_full_capacity(struct sec_battery_info *battery) +{ + sec_bat_set_misc_event(battery, 0, BATT_MISC_EVENT_FULL_CAPACITY); + + if (battery->status == POWER_SUPPLY_STATUS_NOT_CHARGING + && battery->health == POWER_SUPPLY_HEALTH_GOOD) { + sec_bat_set_charging_status(battery, + POWER_SUPPLY_STATUS_CHARGING); + sec_bat_set_charge(battery, SEC_BAT_CHG_MODE_CHARGING); + } +} + +static void sec_bat_check_full_capacity(struct sec_battery_info *battery) +{ + int rechg_capacity = battery->batt_full_capacity - 2; + + if (battery->batt_full_capacity >= 100 || battery->batt_full_capacity <= 0 || + battery->status == POWER_SUPPLY_STATUS_DISCHARGING) { + if (battery->misc_event & BATT_MISC_EVENT_FULL_CAPACITY) { + pr_info("%s: full_capacity(%d) status(%d)\n", + __func__, battery->batt_full_capacity, battery->status); + sec_bat_recov_full_capacity(battery); + } + return; + } + + if (battery->misc_event & BATT_MISC_EVENT_FULL_CAPACITY) { + if (battery->capacity <= rechg_capacity) { + pr_info("%s : start re-charging(%d, %d)\n", __func__, battery->capacity, rechg_capacity); + sec_bat_recov_full_capacity(battery); + } + } else if (battery->capacity >= battery->batt_full_capacity) { + pr_info("%s : stop charging(%d, %d)\n", __func__, battery->capacity, battery->batt_full_capacity); + + sec_bat_set_misc_event(battery, BATT_MISC_EVENT_FULL_CAPACITY, + BATT_MISC_EVENT_FULL_CAPACITY); + sec_bat_set_charging_status(battery, POWER_SUPPLY_STATUS_NOT_CHARGING); + sec_bat_set_charge(battery, SEC_BAT_CHG_MODE_CHARGING_OFF); + sec_bat_send_cs100(battery); + } +} + static void sec_bat_monitor_work( struct work_struct *work) { @@ -3540,6 +3618,7 @@ static void sec_bat_monitor_work( /* time to full check */ sec_bat_calc_time_to_full(battery); #endif + sec_bat_check_full_capacity(battery); /* 0. test mode */ if (battery->test_mode) { @@ -4057,6 +4136,14 @@ static void sec_bat_cable_work(struct work_struct *work) goto end_of_cable_work; } else if (!battery->is_sysovlo && !battery->is_vbatovlo && !battery->is_abnormal_temp && (!battery->charging_block || !battery->swelling_mode)) { +#if defined(CONFIG_ENABLE_FULL_BY_SOC) + if (battery->capacity >= 100) { + sec_bat_do_fullcharged(battery, true); + dev_info(battery->dev, + "%s: charging start at full, do not turn on charging\n", __func__); + } else +#endif + sec_bat_set_charge(battery, SEC_BAT_CHG_MODE_CHARGING); } @@ -6130,6 +6217,7 @@ static int sec_battery_probe(struct platform_device *pdev) battery->batt_asoc = 100; battery->health_change = false; + battery->batt_full_capacity = 0; /* Check High Voltage charging option for wireless charging */ /* '1' means disabling High Voltage charging */ diff --git a/drivers/battery_v2/sec_battery_sysfs.c b/drivers/battery_v2/sec_battery_sysfs.c index 90228cd256d0..87d00e0f4267 100644 --- a/drivers/battery_v2/sec_battery_sysfs.c +++ b/drivers/battery_v2/sec_battery_sysfs.c @@ -179,6 +179,7 @@ static struct device_attribute sec_battery_attrs[] = { SEC_BATTERY_ATTR(cc_info), SEC_BATTERY_ATTR(batt_jig_gpio), SEC_BATTERY_ATTR(ext_event), + SEC_BATTERY_ATTR(batt_full_capacity), }; @@ -1167,6 +1168,10 @@ ssize_t sec_bat_show_attrs(struct device *dev, break; case EXT_EVENT: break; + case BATT_FULL_CAPACITY: + pr_info("%s: BATT_FULL_CAPACITY = %d\n", __func__, battery->batt_full_capacity); + i += scnprintf(buf + i, PAGE_SIZE - i, "%d\n", battery->batt_full_capacity); + break; default: i = -EINVAL; break; @@ -2426,6 +2431,21 @@ ssize_t sec_bat_store_attrs( ret = count; } break; + case BATT_FULL_CAPACITY: + if (sscanf(buf, "%10d\n", &x) == 1) { + if (x >= 0 && x <= 100) { + pr_info("%s: update BATT_FULL_CAPACITY(%d)\n", __func__, x); + battery->batt_full_capacity = x; + + wake_lock(&battery->monitor_wake_lock); + queue_delayed_work(battery->monitor_wqueue, + &battery->monitor_work, 0); + } else { + pr_info("%s: out of range(%d)\n", __func__, x); + } + ret = count; + } + break; default: ret = -EINVAL; break; diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index 671dc65f755e..dd98f9c1a6cd 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -52,7 +52,7 @@ static DEFINE_IDR(zram_index_idr); static DEFINE_MUTEX(zram_index_mutex); static int zram_major; -static const char *default_compressor = "lzo-rle"; +static const char *default_compressor = "lz4"; /* Module params (documentation at end) */ static unsigned int num_devices = 1; diff --git a/drivers/ccic/ccic_alternate.c b/drivers/ccic/ccic_alternate.c index d88d203ba925..da95f3e29a34 100644 --- a/drivers/ccic/ccic_alternate.c +++ b/drivers/ccic/ccic_alternate.c @@ -223,6 +223,11 @@ static int process_check_accessory(void *data) uint16_t pid = usbpd_data->Product_ID; uint16_t dock_type = 0; + if (((pid < GEARVR_PRODUCT_ID) || (pid > GEARVR_PRODUCT_ID_5)) && (pid != CCIC_DOCK_NEW) && (pid != CCIC_DOCK_DEXPAD)) { + vid = SAMSUNG_VENDOR_ID; + pid = DEXDOCK_PRODUCT_ID; + } + /* detect Gear VR */ if (usbpd_data->acc_type == CCIC_DOCK_DETACHED) { if (vid == SAMSUNG_VENDOR_ID) { diff --git a/drivers/cpufreq/Kconfig b/drivers/cpufreq/Kconfig index 6d0f5ce13315..edbc2d3bdc9f 100644 --- a/drivers/cpufreq/Kconfig +++ b/drivers/cpufreq/Kconfig @@ -37,19 +37,10 @@ config CPU_FREQ_STAT If in doubt, say N. -config CPU_FREQ_STAT_DETAILS - bool "CPU frequency transition statistics details" - depends on CPU_FREQ_STAT - help - Show detailed CPU frequency transition table in sysfs. - - If in doubt, say N. - config CPU_FREQ_TIMES - bool "CPU frequency time-in-state statistics" - default y - help - Export CPU time-in-state information through procfs. + bool "CPU frequency time-in-state statistics" + help + Export CPU time-in-state information through procfs. If in doubt, say N. diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index 7570696eae54..3e7b6a738237 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c @@ -1907,9 +1907,14 @@ EXPORT_SYMBOL(cpufreq_unregister_notifier); unsigned int cpufreq_driver_fast_switch(struct cpufreq_policy *policy, unsigned int target_freq) { + int ret; target_freq = clamp_val(target_freq, policy->min, policy->max); - return cpufreq_driver->fast_switch(policy, target_freq); + ret = cpufreq_driver->fast_switch(policy, target_freq); + if (ret) + cpufreq_times_record_transition(policy, ret); + + return ret; } EXPORT_SYMBOL_GPL(cpufreq_driver_fast_switch); diff --git a/drivers/cpufreq/cpufreq_stats.c b/drivers/cpufreq/cpufreq_stats.c index 06d3abdffd3a..e75880eb037d 100644 --- a/drivers/cpufreq/cpufreq_stats.c +++ b/drivers/cpufreq/cpufreq_stats.c @@ -13,7 +13,6 @@ #include #include #include -#include static DEFINE_SPINLOCK(cpufreq_stats_lock); @@ -25,9 +24,7 @@ struct cpufreq_stats { unsigned int last_index; u64 *time_in_state; unsigned int *freq_table; -#ifdef CONFIG_CPU_FREQ_STAT_DETAILS unsigned int *trans_table; -#endif }; static int cpufreq_stats_update(struct cpufreq_stats *stats) @@ -41,6 +38,16 @@ static int cpufreq_stats_update(struct cpufreq_stats *stats) return 0; } +static void cpufreq_stats_clear_table(struct cpufreq_stats *stats) +{ + unsigned int count = stats->max_state; + + memset(stats->time_in_state, 0, count * sizeof(u64)); + memset(stats->trans_table, 0, count * count * sizeof(int)); + stats->last_time = get_jiffies_64(); + stats->total_trans = 0; +} + static ssize_t show_total_trans(struct cpufreq_policy *policy, char *buf) { return sprintf(buf, "%d\n", policy->stats->total_trans); @@ -64,7 +71,14 @@ static ssize_t show_time_in_state(struct cpufreq_policy *policy, char *buf) return len; } -#ifdef CONFIG_CPU_FREQ_STAT_DETAILS +static ssize_t store_reset(struct cpufreq_policy *policy, const char *buf, + size_t count) +{ + /* We don't care what is written to the attribute. */ + cpufreq_stats_clear_table(policy->stats); + return count; +} + static ssize_t show_trans_table(struct cpufreq_policy *policy, char *buf) { struct cpufreq_stats *stats = policy->stats; @@ -109,20 +123,19 @@ static ssize_t show_trans_table(struct cpufreq_policy *policy, char *buf) return len; } cpufreq_freq_attr_ro(trans_table); -#endif cpufreq_freq_attr_ro(total_trans); cpufreq_freq_attr_ro(time_in_state); +cpufreq_freq_attr_wo(reset); static struct attribute *default_attrs[] = { &total_trans.attr, &time_in_state.attr, -#ifdef CONFIG_CPU_FREQ_STAT_DETAILS + &reset.attr, &trans_table.attr, -#endif NULL }; -static struct attribute_group stats_attr_group = { +static const struct attribute_group stats_attr_group = { .attrs = default_attrs, .name = "stats" }; @@ -157,11 +170,10 @@ void cpufreq_stats_create_table(struct cpufreq_policy *policy) unsigned int i = 0, count = 0, ret = -ENOMEM; struct cpufreq_stats *stats; unsigned int alloc_size; - struct cpufreq_frequency_table *pos, *table; + struct cpufreq_frequency_table *pos; - /* We need cpufreq table for creating stats table */ - table = policy->freq_table; - if (unlikely(!table)) + count = cpufreq_table_count_valid_entries(policy); + if (!count) return; /* stats already initialized */ @@ -172,15 +184,9 @@ void cpufreq_stats_create_table(struct cpufreq_policy *policy) if (!stats) return; - /* Find total allocation size */ - cpufreq_for_each_valid_entry(pos, table) - count++; - alloc_size = count * sizeof(int) + count * sizeof(u64); -#ifdef CONFIG_CPU_FREQ_STAT_DETAILS alloc_size += count * count * sizeof(int); -#endif /* Allocate memory for time_in_state/freq_table/trans_table in one go */ stats->time_in_state = kzalloc(alloc_size, GFP_KERNEL); @@ -189,14 +195,12 @@ void cpufreq_stats_create_table(struct cpufreq_policy *policy) stats->freq_table = (unsigned int *)(stats->time_in_state + count); -#ifdef CONFIG_CPU_FREQ_STAT_DETAILS stats->trans_table = stats->freq_table + count; -#endif stats->max_state = count; /* Find valid-unique entries */ - cpufreq_for_each_valid_entry(pos, table) + cpufreq_for_each_valid_entry(pos, policy->freq_table) if (freq_table_get_index(stats, pos->frequency) == -1) stats->freq_table[i++] = pos->frequency; @@ -237,8 +241,6 @@ void cpufreq_stats_record_transition(struct cpufreq_policy *policy, cpufreq_stats_update(stats); stats->last_index = new_index; -#ifdef CONFIG_CPU_FREQ_STAT_DETAILS stats->trans_table[old_index * stats->max_state + new_index]++; -#endif stats->total_trans++; } diff --git a/drivers/cpufreq/cpufreq_times.c b/drivers/cpufreq/cpufreq_times.c index f4574e969d31..5b5248a7c87c 100644 --- a/drivers/cpufreq/cpufreq_times.c +++ b/drivers/cpufreq/cpufreq_times.c @@ -15,9 +15,9 @@ #include #include -#include #include #include +#include #include #include #include @@ -155,7 +155,7 @@ static int single_uid_time_in_state_show(struct seq_file *m, void *ptr) } for (i = 0; i < uid_entry->max_state; ++i) { - u64 time = cputime_to_clock_t(uid_entry->time_in_state[i]); + u64 time = nsec_to_clock_t(uid_entry->time_in_state[i]); seq_write(m, &time, sizeof(time)); } @@ -215,8 +215,7 @@ static int uid_time_in_state_seq_show(struct seq_file *m, void *v) seq_putc(m, ':'); } for (i = 0; i < uid_entry->max_state; ++i) { - u64 time = - cputime_to_clock_t(uid_entry->time_in_state[i]); + u64 time = nsec_to_clock_t(uid_entry->time_in_state[i]); seq_put_decimal_ull(m, " ", time); } if (uid_entry->max_state) @@ -242,7 +241,7 @@ static int concurrent_time_seq_show(struct seq_file *m, void *v, seq_putc(m, ':'); for (i = 0; i < num_possible_cpus; ++i) { - u64 time = cputime_to_clock_t(atomic64_read(×[i])); + u64 time = nsec_to_clock_t(atomic64_read(×[i])); seq_put_decimal_ull(m, " ", time); } @@ -369,7 +368,7 @@ int proc_time_in_state_show(struct seq_file *m, struct pid_namespace *ns, struct pid *pid, struct task_struct *p) { unsigned int cpu, i; - cputime_t cputime; + u64 cputime; unsigned long flags; struct cpu_freqs *freqs; struct cpu_freqs *last_freqs = NULL; @@ -388,14 +387,14 @@ int proc_time_in_state_show(struct seq_file *m, struct pid_namespace *ns, p->time_in_state) cputime = p->time_in_state[freqs->offset + i]; seq_printf(m, "%u %lu\n", freqs->freq_table[i], - (unsigned long)cputime_to_clock_t(cputime)); + (unsigned long)nsec_to_clock_t(cputime)); } } spin_unlock_irqrestore(&task_time_in_state_lock, flags); return 0; } -void cpufreq_acct_update_power(struct task_struct *p, cputime_t cputime) +void cpufreq_acct_update_power(struct task_struct *p, u64 cputime) { unsigned long flags; unsigned int state; diff --git a/drivers/cpufreq/exynos-acme.c b/drivers/cpufreq/exynos-acme.c index bfa88f6b4d5d..434e23488544 100644 --- a/drivers/cpufreq/exynos-acme.c +++ b/drivers/cpufreq/exynos-acme.c @@ -1085,13 +1085,13 @@ static __init int init_domain(struct exynos_cpufreq_domain *domain, */ #ifndef CONFIG_EXYNOS_HOTPLUG_GOVERNOR if (!of_property_read_u32(dn, "max-freq", &val)) - domain->max_freq = min(domain->max_freq, val); + domain->max_freq = val; #endif if (!of_property_read_u32(dn, "min-freq", &val)) domain->min_freq = max(domain->min_freq, val); #ifdef CONFIG_SEC_PM if (!of_property_read_u32(dn, "max-freq", &val)) - domain->max_usable_freq = min(domain->max_freq, val); + domain->max_usable_freq = val; #endif domain->boot_freq = cal_dfs_get_boot_freq(domain->cal_id); diff --git a/drivers/cpufreq/exynos-acme.h b/drivers/cpufreq/exynos-acme.h index ab9dead1f3a3..e8225e3f7d83 100644 --- a/drivers/cpufreq/exynos-acme.h +++ b/drivers/cpufreq/exynos-acme.h @@ -66,6 +66,7 @@ struct exynos_cpufreq_domain { /* for sysfs */ unsigned int user_default_qos; + int ucc_index; /* freq boost */ bool boost_supported; diff --git a/drivers/cpufreq/exynos-ufc.c b/drivers/cpufreq/exynos-ufc.c index 2cf22de30934..b5bdc002cdaf 100644 --- a/drivers/cpufreq/exynos-ufc.c +++ b/drivers/cpufreq/exynos-ufc.c @@ -18,6 +18,7 @@ #include #include #include +#include #include @@ -104,16 +105,27 @@ static ssize_t show_cpufreq_min_limit(struct kobject *kobj, first_domain()->min_freq >> (scale * SCALE_SIZE)); } +static struct ucc_req ucc_req = +{ + .name = "ufc", +}; +static int ucc_requested; +static int ucc_requested_val = 0; static bool boosted; -static inline void control_boost(bool enable) + +static inline void control_boost(int ucc_index, bool enable) { if (boosted && !enable) { request_kernel_prefer_perf(STUNE_TOPAPP, 0); request_kernel_prefer_perf(STUNE_FOREGROUND, 0); + ucc_requested_val = 0; + ucc_update_request(&ucc_req, ucc_requested_val); boosted = false; } else if (!boosted && enable) { request_kernel_prefer_perf(STUNE_TOPAPP, 1); request_kernel_prefer_perf(STUNE_FOREGROUND, 1); + ucc_requested_val = ucc_index; + ucc_update_request(&ucc_req, ucc_requested_val); boosted = true; } } @@ -186,7 +198,7 @@ static ssize_t store_cpufreq_min_limit(struct kobject *kobj, /* Clear all constraint by cpufreq_min_limit */ if (input < 0) { pm_qos_update_request(&domain->user_min_qos_req, 0); - control_boost(0); + control_boost(domain->ucc_index, 0); continue; } @@ -217,7 +229,7 @@ static ssize_t store_cpufreq_min_limit(struct kobject *kobj, freq = min(freq, domain->max_freq); pm_qos_update_request(&domain->user_min_qos_req, freq); - control_boost(1); + control_boost(domain->ucc_index, 1); set_max = true; } @@ -532,6 +544,38 @@ static ssize_t store_execution_mode_change(struct kobject *kobj, struct attribut return count; } +static ssize_t show_cstate_control(struct kobject *kobj, + struct kobj_attribute *attr, char *buf) +{ + return snprintf(buf, 10, "%d\n", ucc_requested); +} + +static ssize_t store_cstate_control(struct kobject *kobj, struct kobj_attribute *attr, + const char *buf, size_t count) +{ + int input; + if (!sscanf(buf, "%8d", &input)) + return -EINVAL; + + if (input < 0) + return -EINVAL; + + input = !!input; + + if (input == ucc_requested) + goto out; + + ucc_requested = input; + + if (ucc_requested) + ucc_add_request(&ucc_req, ucc_requested_val); + else + ucc_remove_request(&ucc_req); + +out: + return count; +} + static struct global_attr cpufreq_table = __ATTR(cpufreq_table, 0444 , show_cpufreq_table, NULL); static struct global_attr cpufreq_min_limit = @@ -546,6 +590,8 @@ __ATTR(cpufreq_max_limit, 0644, static struct global_attr execution_mode_change = __ATTR(execution_mode_change, 0644, show_execution_mode_change, store_execution_mode_change); +static struct kobj_attribute cstate_control = +__ATTR(cstate_control, 0644, show_cstate_control, store_cstate_control); static __init void init_sysfs(void) { @@ -563,6 +609,8 @@ static __init void init_sysfs(void) if (sysfs_create_file(power_kobj, &execution_mode_change.attr)) pr_err("failed to create cpufreq_max_limit node\n"); + if (sysfs_create_file(power_kobj, &cstate_control.attr)) + pr_err("failed to create cstate_control node\n"); } @@ -574,6 +622,8 @@ static int parse_ufc_ctrl_info(struct exynos_cpufreq_domain *domain, if (!of_property_read_u32(dn, "user-default-qos", &val)) domain->user_default_qos = val; + if (!of_property_read_u32(dn, "ucc-index", &val)) + domain->ucc_index = val; return 0; } diff --git a/drivers/cpuidle/Makefile b/drivers/cpuidle/Makefile index d282677e9c86..adae9cd569f9 100644 --- a/drivers/cpuidle/Makefile +++ b/drivers/cpuidle/Makefile @@ -15,7 +15,7 @@ obj-$(CONFIG_ARM_KIRKWOOD_CPUIDLE) += cpuidle-kirkwood.o obj-$(CONFIG_ARM_ZYNQ_CPUIDLE) += cpuidle-zynq.o obj-$(CONFIG_ARM_U8500_CPUIDLE) += cpuidle-ux500.o obj-$(CONFIG_ARM_AT91_CPUIDLE) += cpuidle-at91.o -obj-$(CONFIG_ARM64_EXYNOS_CPUIDLE) += cpuidle-exynos64.o +obj-$(CONFIG_ARM64_EXYNOS_CPUIDLE) += cpuidle-exynos64.o exynos-ucc.o obj-$(CONFIG_ARM_CPUIDLE) += cpuidle-arm.o ############################################################################### diff --git a/drivers/cpuidle/cpuidle-exynos64.c b/drivers/cpuidle/cpuidle-exynos64.c index a3f14cd927ee..aeee8658a3b2 100644 --- a/drivers/cpuidle/cpuidle-exynos64.c +++ b/drivers/cpuidle/cpuidle-exynos64.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -205,6 +206,7 @@ static int __init exynos_idle_init(void) register_reboot_notifier(&exynos_cpuidle_reboot_nb); cpuidle_profile_register(&exynos_idle_driver[0]); + init_exynos_ucc(); pr_info("Exynos cpuidle driver Initialized\n"); diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c index 0064e2aab102..90c2ad69cf2a 100644 --- a/drivers/cpuidle/cpuidle.c +++ b/drivers/cpuidle/cpuidle.c @@ -22,6 +22,7 @@ #include #include #include +#include #include "cpuidle.h" @@ -192,6 +193,8 @@ int cpuidle_enter_state(struct cpuidle_device *dev, struct cpuidle_driver *drv, broadcast = false; } + index = filter_cstate(dev->cpu, index); + /* Take note of the planned idle state. */ sched_idle_set_state(target_state, index); diff --git a/drivers/cpuidle/exynos-ucc.c b/drivers/cpuidle/exynos-ucc.c new file mode 100644 index 000000000000..9561aed3c80f --- /dev/null +++ b/drivers/cpuidle/exynos-ucc.c @@ -0,0 +1,202 @@ +/* + * Copyright (c) 2019 Park Bumgyu, Samsung Electronics Co., Ltd + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * UCC(User Cstate Control) driver implementation + */ + +#include +#include +#include +#include + +static int ucc_initialized = false; + +bool ib_ucc_initialized; +EXPORT_SYMBOL(ib_ucc_initialized); + +/* + * struct ucc_config + * + * - index : index of cstate config + * - cstate : mask indicating whether each cpu supports cstate + * - mask bit set : cstate enable + * - mask bit unset : cstate disable + */ +struct ucc_config { + int index; + struct cpumask cstate; +}; + +static struct ucc_config *ucc_configs; +static int ucc_config_count; + +/* + * cur_cstate has cpu cstate config corresponding to maximum index among ucc + * request. Whenever maximum requested index is changed, cur_state is updated. + */ +static struct cpumask cur_cstate; + +int filter_cstate(int cpu, int index) +{ + if (!ucc_initialized) + return index; + + if (!cpumask_test_cpu(cpu, &cur_cstate)) { + /* index 0 is default idle state */ + return 0; + } + + return index; +} + +static struct plist_head ucc_req_list = PLIST_HEAD_INIT(ucc_req_list); + +static DEFINE_SPINLOCK(ucc_lock); + +static int ucc_get_value(void) +{ + if (plist_head_empty(&ucc_req_list)) + return -1; + + return plist_last(&ucc_req_list)->prio; +} + +static void update_cur_cstate(void) +{ + int value = ucc_get_value(); + + if (value < 0) { + cpumask_copy(&cur_cstate, cpu_possible_mask); + return; + } + + cpumask_copy(&cur_cstate, &ucc_configs[value].cstate); +} + +enum { + UCC_REMOVE_REQ, + UCC_UPDATE_REQ, + UCC_ADD_REQ, +}; + +static void ucc_update(struct ucc_req *req, int value, int action) +{ + int prev_value = ucc_get_value(); + switch (action) { + case UCC_REMOVE_REQ: + plist_del(&req->node, &ucc_req_list); + req->active = 0; + break; + case UCC_UPDATE_REQ: + plist_del(&req->node, &ucc_req_list); + case UCC_ADD_REQ: + plist_node_init(&req->node, value); + plist_add(&req->node, &ucc_req_list); + req->active = 1; + break; + } + + if (prev_value != ucc_get_value()) + update_cur_cstate(); +} + +void ucc_add_request(struct ucc_req *req, int value) +{ + unsigned long flags; + + spin_lock_irqsave(&ucc_lock, flags); + + if (req->active) { + spin_unlock_irqrestore(&ucc_lock, flags); + return; + } + + ucc_update(req, value, UCC_ADD_REQ); + + spin_unlock_irqrestore(&ucc_lock, flags); +} + +void ucc_update_request(struct ucc_req *req, int value) +{ + unsigned long flags; + + spin_lock_irqsave(&ucc_lock, flags); + if (!req->active) { + spin_unlock_irqrestore(&ucc_lock, flags); + return; + } + + ucc_update(req, value, UCC_UPDATE_REQ); + + spin_unlock_irqrestore(&ucc_lock, flags); +} + +void ucc_remove_request(struct ucc_req *req) +{ + unsigned long flags; + + spin_lock_irqsave(&ucc_lock, flags); + + if (!req->active) { + spin_unlock_irqrestore(&ucc_lock, flags); + return; + } + + ucc_update(req, 0, UCC_REMOVE_REQ); + + spin_unlock_irqrestore(&ucc_lock, flags); +} + +static ssize_t show_ucc_requests(struct kobject *kobj, + struct kobj_attribute *attr, char *buf) +{ + struct ucc_req *req; + int ret = 0; + + plist_for_each_entry(req, &ucc_req_list, node) + ret += snprintf(buf + ret, PAGE_SIZE - ret, + " request : %d (%s)\n", req->node.prio, req->name); + + return ret; +} + +static struct kobj_attribute ucc_requests = +__ATTR(ucc_requests, 0444, show_ucc_requests, NULL); + + +void __init init_exynos_ucc(void) +{ + struct device_node *dn, *child; + int i = 0; + + dn = of_find_node_by_name(NULL, "cpuidle-ucc"); + ucc_config_count = of_get_child_count(dn); + + ucc_configs = kcalloc(ucc_config_count, + sizeof(struct ucc_config), GFP_KERNEL); + if (!ucc_configs) + return; + + for_each_child_of_node(dn, child) { + const char *mask; + + of_property_read_u32(child, "index", &ucc_configs[i].index); + + if (of_property_read_string(child, "cstate", &mask)) + cpumask_clear(&ucc_configs[i].cstate); + else + cpulist_parse(mask, &ucc_configs[i].cstate); + + i++; + } + if (sysfs_create_file(power_kobj, &ucc_requests.attr)) + pr_err("failed to create cstate_control node\n"); + + cpumask_setall(&cur_cstate); + ucc_initialized = true; + ib_ucc_initialized = true; +} diff --git a/drivers/gpu/arm/b_r19p0/platform/exynos/gpu_custom_interface.c b/drivers/gpu/arm/b_r19p0/platform/exynos/gpu_custom_interface.c index b339fa4da56a..29ed069dd781 100644 --- a/drivers/gpu/arm/b_r19p0/platform/exynos/gpu_custom_interface.c +++ b/drivers/gpu/arm/b_r19p0/platform/exynos/gpu_custom_interface.c @@ -536,6 +536,9 @@ static ssize_t set_max_lock_dvfs(struct device *dev, struct device_attribute *at { int ret, clock = 0; struct exynos_context *platform = (struct exynos_context *)pkbdev->platform_context; + + // Kill it from now without interferring Game Launcher + return count; if (!platform) return -ENODEV; @@ -605,6 +608,9 @@ static ssize_t set_min_lock_dvfs(struct device *dev, struct device_attribute *at { int ret, clock = 0; struct exynos_context *platform = (struct exynos_context *)pkbdev->platform_context; + + // Kill it from now without interferring Game Launcher + return count; if (!platform) return -ENODEV; diff --git a/drivers/gpu/arm/b_r19p0/platform/exynos/gpu_pmqos.c b/drivers/gpu/arm/b_r19p0/platform/exynos/gpu_pmqos.c index c91bda23f77c..5e43d123591a 100644 --- a/drivers/gpu/arm/b_r19p0/platform/exynos/gpu_pmqos.c +++ b/drivers/gpu/arm/b_r19p0/platform/exynos/gpu_pmqos.c @@ -123,7 +123,7 @@ int gpu_pm_qos_command(struct exynos_context *platform, gpu_pmqos_state state) #endif pm_qos_update_request(&exynos5_g3d_cpu_cluster0_min_qos, platform->table[platform->step].cpu_little_min_freq); - if (!platform->boost_is_enabled) + if (!platform->boost_is_enabled && platform->env_data.utilization > 65) pm_qos_update_request(&exynos5_g3d_cpu_cluster1_max_qos, platform->table[platform->step].cpu_big_max_freq); #if PM_QOS_CPU_CLUSTER_NUM == 3 pm_qos_update_request(&exynos5_g3d_cpu_cluster1_min_qos, platform->table[platform->step].cpu_middle_min_freq); diff --git a/drivers/gpu/arm/bv_r38p1/Kconfig b/drivers/gpu/arm/bv_r38p1/Kconfig index 230fc89586ea..0c072af63e26 100644 --- a/drivers/gpu/arm/bv_r38p1/Kconfig +++ b/drivers/gpu/arm/bv_r38p1/Kconfig @@ -387,7 +387,7 @@ config MALI_HW_ERRATA_1485982_USE_CLOCK_ALTERNATIVE endif config MALI_ARBITRATION - tristate "Enable Virtualization reference code" + bool "Enable Virtualization reference code" depends on MALI_MIDGARD default n help diff --git a/drivers/gpu/arm/exynos/frontend/gpex_clock.c b/drivers/gpu/arm/exynos/frontend/gpex_clock.c index d91e2606ff87..94b6a0fff1cc 100644 --- a/drivers/gpu/arm/exynos/frontend/gpex_clock.c +++ b/drivers/gpu/arm/exynos/frontend/gpex_clock.c @@ -76,7 +76,7 @@ u64 gpex_clock_get_time_busy(int level) /******************************************* * static helper functions ******************************************/ -static int gpex_clock_update_config_data_from_dt() +static int gpex_clock_update_config_data_from_dt(void) { int ret = 0; struct freq_volt *fv_array; diff --git a/drivers/gpu/arm/exynos/frontend/gpex_clock_sysfs.c b/drivers/gpu/arm/exynos/frontend/gpex_clock_sysfs.c index 34d06856ac57..b46dcd213fd7 100644 --- a/drivers/gpu/arm/exynos/frontend/gpex_clock_sysfs.c +++ b/drivers/gpu/arm/exynos/frontend/gpex_clock_sysfs.c @@ -141,6 +141,7 @@ GPEX_STATIC ssize_t reset_time_in_state(const char *buf, size_t count) } CREATE_SYSFS_DEVICE_WRITE_FUNCTION(reset_time_in_state) +#define SUSTAINABLE_FREQ 385000 // KHz GPEX_STATIC ssize_t set_max_lock_dvfs(const char *buf, size_t count) { int ret, clock = 0; @@ -155,6 +156,9 @@ GPEX_STATIC ssize_t set_max_lock_dvfs(const char *buf, size_t count) return -ENOENT; } + if (clock < SUSTAINABLE_FREQ) + clock = SUSTAINABLE_FREQ; + clk_info->user_max_lock_input = clock; clock = gpex_get_valid_gpu_clock(clock, false); diff --git a/drivers/gpu/arm/exynos/frontend/gpex_dvfs.c b/drivers/gpu/arm/exynos/frontend/gpex_dvfs.c index 7aa10a891d93..899087ea90f0 100644 --- a/drivers/gpu/arm/exynos/frontend/gpex_dvfs.c +++ b/drivers/gpu/arm/exynos/frontend/gpex_dvfs.c @@ -85,7 +85,7 @@ static void gpex_dvfs_context_init(struct device **dev) dvfs.polling_speed = gpexbe_devicetree_get_int(gpu_dvfs_polling_time); } -static int gpu_dvfs_calculate_env_data() +static int gpu_dvfs_calculate_env_data(void) { unsigned long flags; static int polling_period; @@ -254,7 +254,7 @@ static int gpu_dvfs_handler_deinit() return 0; } -static int gpu_pm_metrics_init() +static int gpu_pm_metrics_init(void) { INIT_DELAYED_WORK(&dvfs.dvfs_work, dvfs_callback); dvfs.dvfs_wq = create_workqueue("g3d_dvfs"); @@ -265,7 +265,7 @@ static int gpu_pm_metrics_init() return 0; } -static void gpu_pm_metrics_term() +static void gpu_pm_metrics_term(void) { cancel_delayed_work(&dvfs.dvfs_work); flush_workqueue(dvfs.dvfs_wq); diff --git a/drivers/gpu/arm/exynos/frontend/gpex_thermal.c b/drivers/gpu/arm/exynos/frontend/gpex_thermal.c index 626b8786da0d..298b6ecd83f1 100644 --- a/drivers/gpu/arm/exynos/frontend/gpex_thermal.c +++ b/drivers/gpu/arm/exynos/frontend/gpex_thermal.c @@ -149,7 +149,7 @@ static ssize_t show_kernel_sysfs_gpu_temp(char *buf) } CREATE_SYSFS_KOBJECT_READ_FUNCTION(show_kernel_sysfs_gpu_temp); -static void gpex_thermal_create_sysfs_file() +static void gpex_thermal_create_sysfs_file(void) { GPEX_UTILS_SYSFS_DEVICE_FILE_ADD(tmu, show_tmu, set_tmu_control); GPEX_UTILS_SYSFS_KOBJECT_FILE_ADD_RO(gpu_tmu, show_kernel_sysfs_gpu_temp); diff --git a/drivers/gud/gud-exynos9810/MobiCoreDriver/fastcall.c b/drivers/gud/gud-exynos9810/MobiCoreDriver/fastcall.c index ca85a25a952c..74d7c89d1b14 100644 --- a/drivers/gud/gud-exynos9810/MobiCoreDriver/fastcall.c +++ b/drivers/gud/gud-exynos9810/MobiCoreDriver/fastcall.c @@ -228,7 +228,7 @@ static inline int _smc(union mc_fc_generic *mc_fc_generic) #ifdef TBASE_CORE_SWITCHER static int active_cpu; -static int swap_ref; +static int __maybe_unused swap_ref; #ifdef CONFIG_SECURE_OS_BOOSTER_API /* ExySp: for sos performance */ void mc_set_schedule_policy(int core) diff --git a/drivers/hid/hid-prodikeys.c b/drivers/hid/hid-prodikeys.c index f095bf8a3aa9..79c13231da8f 100644 --- a/drivers/hid/hid-prodikeys.c +++ b/drivers/hid/hid-prodikeys.c @@ -653,7 +653,7 @@ static int pcmidi_snd_initialise(struct pcmidi_snd *pm) goto fail; } pm->rwmidi = rwmidi; - strncpy(rwmidi->name, card->shortname, sizeof(rwmidi->name)); + strcpy(rwmidi->name, card->shortname); rwmidi->info_flags = SNDRV_RAWMIDI_INFO_INPUT; rwmidi->private_data = pm; diff --git a/drivers/input/Kconfig b/drivers/input/Kconfig index 7652675a3b5a..91b1051aed50 100644 --- a/drivers/input/Kconfig +++ b/drivers/input/Kconfig @@ -235,6 +235,16 @@ config HALL_EVENT_REVERSE If unsure, say N. +config HALL_NEW_NODE + bool "Chang the node location of HALL IC" + default y + depends on HALL + help + Say Y here if you want to change the location of hall ic node. + it was decided with the framework to be changed from R OS + The previous versions of R OS are created before the change. + If unsure, say N. + config CERTIFY_HALL tristate "Enable CERTIFY HALL IC" default n @@ -268,6 +278,15 @@ config TOUCHSCREEN_DUMP_MODE If unsure, say N. +config SEC_INPUT_BOOSTER + bool "SEC INPUT BOOSTER" + depends on INPUT_EVDEV + default y + help + Say Y here if you need to enable Input Booster. + + It's triggered in evdev module. + comment "Input Device Drivers" source "drivers/input/keyboard/Kconfig" diff --git a/drivers/input/Makefile b/drivers/input/Makefile index d8b56a659f82..e7dd40d490b6 100644 --- a/drivers/input/Makefile +++ b/drivers/input/Makefile @@ -21,6 +21,8 @@ obj-$(CONFIG_INPUT_LEDS) += input-leds.o obj-$(CONFIG_INPUT_MOUSEDEV) += mousedev.o obj-$(CONFIG_INPUT_JOYDEV) += joydev.o obj-$(CONFIG_INPUT_EVDEV) += evdev.o +obj-$(CONFIG_SEC_INPUT_BOOSTER) += input_booster.o +obj-$(CONFIG_ARCH_EXYNOS) += input_booster_lsi.o obj-$(CONFIG_INPUT_EVBUG) += evbug.o obj-$(CONFIG_INPUT_KEYBOARD) += keyboard/ diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c index e9ae3d500a55..4791ba69faab 100644 --- a/drivers/input/evdev.c +++ b/drivers/input/evdev.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -1469,6 +1470,9 @@ static struct input_handler evdev_handler = { static int __init evdev_init(void) { +#ifdef CONFIG_SEC_INPUT_BOOSTER + input_booster_init(); +#endif return input_register_handler(&evdev_handler); } diff --git a/drivers/input/evdev_booster.c b/drivers/input/evdev_booster.c new file mode 100644 index 000000000000..d4846fc8d35b --- /dev/null +++ b/drivers/input/evdev_booster.c @@ -0,0 +1,263 @@ +#ifdef CONFIG_SEC_INPUT_BOOSTER +int chk_next_data(struct evdev_client *dev, int idx, int input_type) +{ + int ret_val = 0; + int next_type = -1; + int next_code = -1; + + int next_idx = (idx+1) & (dev->bufsize - 1); + + next_type = dev->buffer[next_idx].type; + next_code = dev->buffer[next_idx].code; + + switch (input_type) { + case BTN_TOUCH: + if (next_type == EV_ABS && next_code == ABS_PRESSURE) + ret_val = 1; + break; + case EV_KEY: + ret_val = 1; + break; + default: + break; + } + + return ret_val; +} + +int chk_boost_on_off(struct evdev_client *dev, int idx, int dev_type) +{ + int ret_val = -1; + + if (dev_type < 0) + return ret_val; + + /* In case of SPEN or HOVER, it must be empty multi event + * Before starting input booster. + */ + if (dev_type == SPEN || dev_type == HOVER) { + if (!evdev_mt_event[dev_type] && dev->buffer[idx].value) + ret_val = 1; + else if (evdev_mt_event[dev_type] && !dev->buffer[idx].value) + ret_val = 0; + } else if (dev_type == TOUCH || dev_type == MULTI_TOUCH) { + if (dev->buffer[idx].value >= 0) + ret_val = 1; + else + ret_val = 0; + } else if (dev->buffer[idx].value > 0) + ret_val = 1; + else if (dev->buffer[idx].value <= 0) + ret_val = 0; + + return ret_val; +} + +/* + * get_device_type : Define type of device for input_booster. + * dev : Current device that in which input events triggered. + * keyId : Each device get given unique keyid using Type, Code, Slot values + * to identify which booster will be triggered. + * cur_idx : Pointing current handling index from input booster. + * cur_idx will be updated when cur_idx is same as head. + * head : End of events set. Input booster handles from tail event to head events. + * Must check if the event is the last one referring to head. + */ +int get_device_type(struct evdev_client *dev, unsigned int *keyId, int *cur_idx, int head) +{ + int i; + int ret_val = -1; + int dev_type = NONE_TYPE_DEVICE; + int uniq_slot = 0; + int next_idx = 0 ; + int target_idx = 0; + + if (dev == NULL || dev->ev_cnt > MAX_EVENTS) { + pr_err("evdev client is null and exceed max event number"); + return ret_val; + } + + /* Initializing device type before finding the proper device type. */ + dev->device_type = dev_type; + + for (i = *cur_idx; i != head; i = (i+1) & (dev->bufsize - 1)) { + pr_booster("%s Type : %d, Code : %d, Value : %d, Head : %d, idx : %d\n", + "Input Data || ", dev->buffer[i].type, + dev->buffer[i].code, dev->buffer[i].value, + head, i); + + if (dev->buffer[i].type == EV_SYN || dev->buffer[i].code == SYN_REPORT) { + break; + } + + if (dev->buffer[i].type == EV_KEY) { + target_idx = i; + switch (dev->buffer[i].code) { + case BTN_TOUCH: + if (!chk_next_data(dev, i, BTN_TOUCH)) + break; + dev_type = SPEN; + break; + case BTN_TOOL_PEN: + dev_type = HOVER; + break; + case KEY_BACK: + case KEY_HOMEPAGE: + case KEY_RECENT: + dev_type = TOUCH_KEY; + break; + case KEY_VOLUMEUP: + case KEY_VOLUMEDOWN: + case KEY_POWER: + case KEY_WINK: + dev_type = KEY; + break; + default: + break; + } + + } else if (dev->buffer[i].type == EV_ABS) { + target_idx = i; + switch (dev->buffer[i].code) { + case ABS_MT_TRACKING_ID: + + if (dev->buffer[i].value >= 0) { + evdev_mt_slot++; + } else { + evdev_mt_slot--; + } + + if (dev->buffer[i].value >= 0) { + if (evdev_mt_slot == 1) { + dev_type = TOUCH; + uniq_slot = 1; + } else if (evdev_mt_slot == 2) { + dev_type = MULTI_TOUCH; + uniq_slot = 2; + } + } else if (dev->buffer[i].value < 0) { + //ret_val = 0; + if (evdev_mt_slot == 0) { + dev_type = TOUCH; + uniq_slot = 1; + } else if (evdev_mt_slot == 1) { + dev_type = MULTI_TOUCH; + uniq_slot = 2; + } + } + + pr_booster("Touch Booster Trigger(%d), Type(%d), Code(%d), Val(%d), head(%d), Tail(%d), uniq_slot(%d), Idx(%d), Cnt(%d)", + evdev_mt_slot, dev->buffer[i].type, dev->buffer[i].code, dev->buffer[i].value, head, dev->tail, uniq_slot, i, dev->ev_cnt); + + break; + } + } else if (dev->buffer[i].type == EV_MSC && + dev->buffer[i].code == MSC_SCAN) { + + if (!chk_next_data(dev, i, EV_KEY)) { + break; + } + next_idx = (i+1) & (dev->bufsize - 1); + target_idx = next_idx; + switch (dev->buffer[next_idx].code) { + case BTN_LEFT: /* Checking Touch Button Event */ + case BTN_RIGHT: + case BTN_MIDDLE: + dev_type = MOUSE; + //Remain the last of CODE value as a uniq_slot to recognize BTN Type (LEFT, RIGHT, MIDDLE) + uniq_slot = dev->buffer[next_idx].code; + break; + default: /* Checking Keyboard Event */ + dev_type = KEYBOARD; + uniq_slot = dev->buffer[next_idx].code; + + pr_booster("KBD Booster Trigger(%d), Type(%d), Code(%d), Val(%d), head(%d), Tail(%d), Idx(%d), Cnt(%d)\n", + dev->buffer[next_idx].code, dev->buffer[i].type, + dev->buffer[i].code, dev->buffer[i].value, + head, dev->tail, i, dev->ev_cnt); + break; + } + } + + if (dev_type != NONE_TYPE_DEVICE) { + *keyId = create_uniq_id(dev->buffer[i].type, dev->buffer[i].code, uniq_slot); + ret_val = chk_boost_on_off(dev, target_idx, dev_type); + pr_booster("Dev type Find(%d), KeyID(%d), enable(%d), Target(%d)\n", + dev_type, *keyId, ret_val, target_idx); + break; + } + + } + // if for loop reach the end, cur_idx is set as head value or pointing next one with plus one. + // Especially, dev->bufsize has to be set as a 2^n. + // In the code that set bufzise, we can see bufsize would be set using roundup_pow_of_two function. + // return roundup_pow_of_two(n_events); + // which means "A power of two is a number of the form 2n where n is an integer" + + *cur_idx = (i == head) ? head : ((i+1) & (dev->bufsize - 1)); + + dev->device_type = dev_type; + return ret_val; +} + +// ********** Detect Events ********** // +void input_booster(struct evdev_client *dev, int dev_head) +{ + int dev_type = 0; + int keyId = 0; + unsigned int uniqId = 0; + int res_type = 0; + int cnt = 0; + int cur_idx = -1; + int head = 0; + + if (dev == NULL) { + pr_err(ITAG"dev is Null"); + return; + } + + if (!ib_init_succeed || dev->ev_cnt == 0) { + pr_err(ITAG"ev_cnt(%d) dt_infor hasn't mem alloc", dev->ev_cnt); + return; + } + + head = dev_head; + cur_idx = (head - dev->ev_cnt) & (dev->bufsize - 1); + + while (cur_idx != head) { + keyId = 0; + int enable = get_device_type(dev, &keyId, &cur_idx, head); + if (enable < 0 || keyId == 0) { + continue; + } + + dev_type = dev->device_type; + if (dev_type <= NONE_TYPE_DEVICE || dev_type >= MAX_DEVICE_TYPE_NUM) { + continue; + } + + if (enable == BOOSTER_ON) { + evdev_mt_event[dev_type]++; + } else { + evdev_mt_event[dev_type]--; + } + + if (cnt == 0 && dev->evdev->handle.dev != NULL) { + while (dev->evdev->handle.dev->name[cnt] != '\0') { + ib_trigger[trigger_cnt].dev_name[cnt] = dev->evdev->handle.dev->name[cnt]; + cnt++; + } + ib_trigger[trigger_cnt].dev_name[cnt] = '\0'; + } + + pr_booster("Dev Name : %s(%d), Key Id(%d), IB_Cnt(%d)", ib_trigger[trigger_cnt].dev_name, dev_type, keyId, trigger_cnt); + + ib_trigger[trigger_cnt].key_id = keyId; + ib_trigger[trigger_cnt].event_type = enable; + ib_trigger[trigger_cnt].dev_type = dev_type; + + queue_work(ev_unbound_wq, &(ib_trigger[trigger_cnt++].ib_trigger_work)); + trigger_cnt = (trigger_cnt == MAX_IB_COUNT) ? 0 : trigger_cnt; + } +} +#endif //--CONFIG_SEC_INPUT_BOOSTER diff --git a/drivers/input/input.c b/drivers/input/input.c index 5206c6c7e1f8..8a4e654dc7f7 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c @@ -29,10 +29,6 @@ #include #include "input-compat.h" -#if !defined(CONFIG_INPUT_BOOSTER) // Input Booster + -#include -#endif // Input Booster - - MODULE_AUTHOR("Vojtech Pavlik "); MODULE_DESCRIPTION("Input core"); MODULE_LICENSE("GPL"); @@ -370,10 +366,20 @@ static int input_get_disposition(struct input_dev *dev, return disposition; } +#if defined(CONFIG_KSU) && !defined(CONFIG_KPROBES) +extern bool ksu_input_hook __read_mostly; +extern int ksu_handle_input_handle_event(unsigned int *type, unsigned int *code, int *value); +#endif + static void input_handle_event(struct input_dev *dev, unsigned int type, unsigned int code, int value) { int disposition = input_get_disposition(dev, type, code, &value); + +#if defined(CONFIG_KSU) && !defined(CONFIG_KPROBES) + if (unlikely(ksu_input_hook)) + ksu_handle_input_handle_event(&type, &code, &value); +#endif if (disposition != INPUT_IGNORE_EVENT && type != EV_SYN) add_input_randomness(type, code, value); @@ -412,417 +418,6 @@ static void input_handle_event(struct input_dev *dev, } -#if !defined(CONFIG_INPUT_BOOSTER) // Input Booster + -// ********** Define Timeout Functions ********** // -DECLARE_TIMEOUT_FUNC(touch); -DECLARE_TIMEOUT_FUNC(multitouch); -DECLARE_TIMEOUT_FUNC(key); -DECLARE_TIMEOUT_FUNC(touchkey); -DECLARE_TIMEOUT_FUNC(keyboard); -DECLARE_TIMEOUT_FUNC(mouse); -DECLARE_TIMEOUT_FUNC(mouse_wheel); -DECLARE_TIMEOUT_FUNC(pen); -DECLARE_TIMEOUT_FUNC(hover); -DECLARE_TIMEOUT_FUNC(key_two); - -// ********** Define Set Booster Functions ********** // -DECLARE_SET_BOOSTER_FUNC(touch); -DECLARE_SET_BOOSTER_FUNC(multitouch); -DECLARE_SET_BOOSTER_FUNC(key); -DECLARE_SET_BOOSTER_FUNC(touchkey); -DECLARE_SET_BOOSTER_FUNC(keyboard); -DECLARE_SET_BOOSTER_FUNC(mouse); -DECLARE_SET_BOOSTER_FUNC(mouse_wheel); -DECLARE_SET_BOOSTER_FUNC(pen); -DECLARE_SET_BOOSTER_FUNC(hover); -DECLARE_SET_BOOSTER_FUNC(key_two); - -// ********** Define Reet Booster Functions ********** // -DECLARE_RESET_BOOSTER_FUNC(touch); -DECLARE_RESET_BOOSTER_FUNC(multitouch); -DECLARE_RESET_BOOSTER_FUNC(key); -DECLARE_RESET_BOOSTER_FUNC(touchkey); -DECLARE_RESET_BOOSTER_FUNC(keyboard); -DECLARE_RESET_BOOSTER_FUNC(mouse); -DECLARE_RESET_BOOSTER_FUNC(mouse_wheel); -DECLARE_RESET_BOOSTER_FUNC(pen); -DECLARE_RESET_BOOSTER_FUNC(hover); -DECLARE_RESET_BOOSTER_FUNC(key_two); - -// ********** Define State Functions ********** // -DECLARE_STATE_FUNC(idle) -{ - struct t_input_booster *_this = (struct t_input_booster *)(__this); - glGage = HEADGAGE; - if (input_booster_event == BOOSTER_ON) { - int i; - pr_booster("[Input Booster] %s State0 : Idle index : %d, hmp : %d, dma_latency : %d, cpu : %d, time : %d, input_booster_event : %d\n", glGage, _this->index, _this->param[_this->index].hmp_boost, _this->param[_this->index].dma_latency, _this->param[_this->index].cpu_freq, _this->param[_this->index].time, input_booster_event); - _this->index = 0; - _this->level = -1; - for (i = 0; i < 2; i++) { - if (delayed_work_pending(&_this->input_booster_timeout_work[i])) { - pr_booster("[Input Booster] **** cancel the pending workqueue\n"); - cancel_delayed_work(&_this->input_booster_timeout_work[i]); - } - } - SET_BOOSTER; - schedule_delayed_work(&_this->input_booster_timeout_work[_this->index], msecs_to_jiffies(_this->param[_this->index].time)); - _this->index++; - CHANGE_STATE_TO(press); - } else if (input_booster_event == BOOSTER_OFF) { - pr_booster("[Input Booster] %s Skipped index : %d, hmp : %d , dma_latency : %d, cpu : %d, input_booster_event : %d\n", glGage, _this->index, _this->param[_this->index].hmp_boost, _this->param[_this->index].dma_latency, _this->param[_this->index].cpu_freq, input_booster_event); - pr_booster("\n"); - } -} - -DECLARE_STATE_FUNC(press) -{ - struct t_input_booster *_this = (struct t_input_booster *)(__this); - glGage = TAILGAGE; - - if (input_booster_event == BOOSTER_OFF) { - pr_booster("[Input Booster] %s State : Press index : %d, time : %d\n", glGage, _this->index, _this->param[_this->index].time); - if (_this->multi_events <= 0 && _this->index < 2) { - if (delayed_work_pending(&_this->input_booster_timeout_work[(_this->index) ? _this->index-1 : 0]) || (_this->param[(_this->index) ? _this->index-1 : 0].time == 0)) { - if (_this->change_on_release || (_this->param[(_this->index) ? _this->index-1 : 0].time == 0)) { - pr_booster("[Input Booster] %s cancel the pending workqueue\n", glGage); - cancel_delayed_work(&_this->input_booster_timeout_work[(_this->index) ? _this->index-1 : 0]); - SET_BOOSTER; - } - schedule_delayed_work(&_this->input_booster_timeout_work[_this->index], msecs_to_jiffies(_this->param[_this->index].time)); - pr_booster("[Input Booster] %s schedule_delayed_work again time : %d\n", glGage, _this->param[_this->index].time); - if (!delayed_work_pending(&_this->input_booster_timeout_work[_this->index]) && _this->param[_this->index].time > 0) { - pr_booster("[Input Booster] %s schedule_delayed_work Re-again time : %d\n", glGage, _this->param[(_this->index > 0) ? _this->index-1 : _this->index].time); - schedule_delayed_work(&_this->input_booster_timeout_work[(_this->index > 0) ? _this->index-1 : _this->index], msecs_to_jiffies(_this->param[(_this->index > 0) ? _this->index-1 : _this->index].time)); - } - } else if (_this->param[_this->index].time > 0) { - schedule_delayed_work(&_this->input_booster_timeout_work[_this->index], msecs_to_jiffies(_this->param[_this->index].time)); - } else { - schedule_delayed_work(&_this->input_booster_timeout_work[(_this->index) ? _this->index-1 : 0], msecs_to_jiffies(_this->param[(_this->index > 0) ? _this->index-1 : _this->index].time)); - } - _this->index++; - _this->multi_events = (_this->multi_events > 0) ? 0 : _this->multi_events; - CHANGE_STATE_TO(idle); - } - } else if (input_booster_event == BOOSTER_ON) { - if (delayed_work_pending(&_this->input_booster_timeout_work[_this->index])) { - pr_booster("[Input Booster] %s cancel the pending workqueue for multi events\n", glGage); - cancel_delayed_work(&_this->input_booster_timeout_work[_this->index]); - schedule_delayed_work(&_this->input_booster_timeout_work[(_this->index) ? _this->index-1 : 0], msecs_to_jiffies(_this->param[(_this->index > 0) ? _this->index-1 : _this->index].time)); - } else { - pr_booster("[Input Booster] %s State : Press index : %d, time : %d\n", glGage, _this->index, _this->param[_this->index].time); - } - } -} - -void input_booster_disable(struct t_input_booster *_this) -{ - schedule_work(&_this->input_booster_reset_booster_work); -} - -// ********** Detect Events ********** // -void input_booster(struct input_dev *dev) -{ - int i, j, iTouchID = -1, iTouchSlot = -1; -#if defined(CONFIG_SOC_EXYNOS7420) // This code should be working properly in Exynos7420(Noble & Zero2) only. - int lcdoffcounter = 0; -#endif - for (i = 0; i < input_count && i < MAX_EVENTS; i++) { - if (input_events[i].type == EV_KEY) { - switch (input_events[i].code) { - case BTN_TOUCH: - if (input_events[i+1].type == EV_ABS && input_events[i+1].code == ABS_PRESSURE) { - if (input_events[i].value && !pen_booster.multi_events) { - pr_booster("[Input Booster] PEN EVENT - PRESS\n"); - RUN_BOOSTER(pen, BOOSTER_ON); - } else if (!input_events[i].value && pen_booster.multi_events) { - pr_booster("[Input Booster] PEN EVENT - RELEASE\n"); - RUN_BOOSTER(pen, BOOSTER_OFF); - } - } else if (iTouchID >= 0) { // ***************** Checking Touch Event's ID whethere it is same with previous ID. - if (!input_events[i].value && input_events[iTouchID].value < 0) { // If this event is 'Release' - for (j = 0; j < MAX_MULTI_TOUCH_EVENTS; j++) { - TouchIDs[j] = -1; - } - } - } - break; - case BTN_TOOL_PEN: - if (input_events[i].value && !hover_booster.multi_events) { - pr_booster("[Input Booster] PEN EVENT - HOVER ON\n"); - RUN_BOOSTER(hover, BOOSTER_ON); - } else if (!input_events[i].value && hover_booster.multi_events) { - pr_booster("[Input Booster] PEN EVENT - HOVER OFF\n"); - RUN_BOOSTER(hover, BOOSTER_OFF); - } - break; - case KEY_BACK: // ***************** Checking Key & Touch key Event - if (key_back != input_events[i].value) { - key_back = input_events[i].value; - pr_booster("[Input Booster] TOUCHKEY EVENT - %s\n", (input_events[i].value) ? "PRESS" : "RELEASE"); - RUN_BOOSTER(touchkey, (input_events[i].value) ? BOOSTER_ON : BOOSTER_OFF); - } - break; - case KEY_HOMEPAGE: - if (key_home != input_events[i].value) { - key_home = input_events[i].value; - pr_booster("[Input Booster] TOUCHKEY EVENT - %s\n", (input_events[i].value) ? "PRESS" : "RELEASE"); - RUN_BOOSTER(touchkey, (input_events[i].value) ? BOOSTER_ON : BOOSTER_OFF); - } - break; - case KEY_RECENT: - if (key_recent != input_events[i].value) { - key_recent = input_events[i].value; - pr_booster("[Input Booster] TOUCHKEY EVENT - %s\n", (input_events[i].value) ? "PRESS" : "RELEASE"); - RUN_BOOSTER(touchkey, (input_events[i].value) ? BOOSTER_ON : BOOSTER_OFF); - } - break; - case KEY_VOLUMEUP: - case KEY_VOLUMEDOWN: - case KEY_POWER: - pr_booster("[Input Booster] KEY EVENT - %s\n", (input_events[i].value) ? "PRESS" : "RELEASE"); - RUN_BOOSTER(key, (input_events[i].value) ? BOOSTER_ON : BOOSTER_OFF); - break; - - case KEY_WINK: - pr_booster("[Input Booster] key_two KEY EVENT - %s\n", (input_events[i].value) ? "PRESS" : "RELEASE"); - RUN_BOOSTER(key_two, (input_events[i].value) ? BOOSTER_ON : BOOSTER_OFF); - break; - - default: - break; - } - } else if (input_events[i].type == EV_ABS) { - if (input_events[i].code == ABS_MT_TRACKING_ID) { - iTouchID = i; - if (iTouchSlot >= 0 && iTouchSlot <= MAX_EVENTS) { - if (input_events[iTouchSlot].value < MAX_MULTI_TOUCH_EVENTS && input_events[iTouchSlot].value >= 0 && iTouchID < MAX_EVENTS) { - if (TouchIDs[input_events[iTouchSlot].value] < 0 && input_events[iTouchID].value >= 0) { - TouchIDs[input_events[iTouchSlot].value] = input_events[iTouchID].value; - if ((input_events[iTouchSlot].value >= 0 && touch_booster.multi_events <= 0) || (input_events[iTouchSlot].value == 0 && TouchIDs[1] < 0)) { - touch_booster.multi_events = 0; - pr_booster("[Input Booster] TOUCH EVENT - PRESS - ID: 0x%x, Slot: 0x%x, multi : %d\n", input_events[iTouchID].value, input_events[iTouchSlot].value, touch_booster.multi_events); - RUN_BOOSTER(touch, BOOSTER_ON); - } else { - pr_booster("[Input Booster] MULTI-TOUCH EVENT - PRESS - ID: 0x%x, Slot: 0x%x, multi : %d\n", input_events[iTouchID].value, input_events[iTouchSlot].value, touch_booster.multi_events); - touch_booster.multi_events++; - RUN_BOOSTER(multitouch, BOOSTER_ON); -/* - if (delayed_work_pending(&touch_booster.input_booster_timeout_work[0])) { - int temp_hmp_boost = touch_booster.param[0].hmp_boost, temp_index = touch_booster.index; - pr_booster("[Input Booster] **** cancel the pending touch booster workqueue\n"); - cancel_delayed_work(&touch_booster.input_booster_timeout_work[0]); - touch_booster.param[0].hmp_boost = multitouch_booster.param[0].hmp_boost; - touch_booster.index = 1; - TIMEOUT_FUNC(touch)(NULL); - touch_booster.param[0].hmp_boost = temp_hmp_boost; - touch_booster.index = ( temp_index >= 2 ? 1 : temp_index); - } -*/ - } - } else if (TouchIDs[input_events[iTouchSlot].value] >= 0 && input_events[iTouchID].value < 0) { - TouchIDs[input_events[iTouchSlot].value] = input_events[iTouchID].value; - if (touch_booster.multi_events <= 1) { - pr_booster("[Input Booster] TOUCH EVENT - RELEASE - ID: 0x%x, Slot: 0x%x, multi : %d\n", input_events[iTouchID].value, input_events[iTouchSlot].value, touch_booster.multi_events); - RUN_BOOSTER(touch, BOOSTER_OFF); - } else { - pr_booster("[Input Booster] MULTI-TOUCH EVENT - RELEASE - ID: 0x%x, Slot: 0x%x, multi : %d\n", input_events[iTouchID].value, input_events[iTouchSlot].value, touch_booster.multi_events); - touch_booster.multi_events--; - RUN_BOOSTER(multitouch, BOOSTER_OFF); - } - } - } - } - } else if (input_events[i].code == ABS_MT_SLOT) { - iTouchSlot = i; -#if defined(CONFIG_SOC_EXYNOS7420) // This code should be working properly in Exynos7420(Noble & Zero2) only. - if (input_events[iTouchSlot + 1].value < 0) { - lcdoffcounter++; - } - if (lcdoffcounter >= 10) { - input_booster_disable(&touch_booster); - input_booster_disable(&multitouch_booster); - input_booster_disable(&key_booster); - input_booster_disable(&touchkey_booster); - input_booster_disable(&keyboard_booster); - input_booster_disable(&mouse_booster); - input_booster_disable(&mouse_wheel_booster); - input_booster_disable(&pen_booster); - input_booster_disable(&hover_booster); - input_booster_disable(&key_two_booster); - pr_booster("[Input Booster] *****************************\n[Input Booster] All boosters are reset %d\n[Input Booster] *****************************\n", lcdoffcounter); - } -#endif - } - } else if (input_events[i].type == EV_MSC && input_events[i].code == MSC_SCAN) { - if (input_events[i+1].type == EV_KEY) { - switch (input_events[i+1].code) { - case BTN_LEFT: // ***************** Checking Touch Button Event - case BTN_RIGHT: - case BTN_MIDDLE: - pr_booster("[Input Booster] MOUSE EVENT - %s\n", (input_events[i+1].value) ? "PRESS" : "RELEASE"); - RUN_BOOSTER(mouse, (input_events[i+1].value) ? BOOSTER_ON : BOOSTER_OFF); - break; - default: // ***************** Checking Keyboard Event - pr_booster("[Input Booster] KEYBOARD EVENT - %s (multi count %d )\n", (input_events[i+1].value) ? "PRESS" : "RELEASE", keyboard_booster.multi_events); - RUN_BOOSTER(keyboard, (input_events[i+1].value) ? BOOSTER_ON : BOOSTER_OFF); - break; - } - } - } else if (input_events[i].type == EV_REL && input_events[i].code == REL_WHEEL && input_events[i].value) { // ***************** Wheel Event for Mouse - if (input_events[0].type == EV_KEY && input_events[0].code == BTN_LEFT) { - pr_booster("[Input Booster] MOUSE EVENT - %s\n", "WHELL"); - RUN_BOOSTER(mouse_wheel, BOOSTER_ON); - } - } - } -} - -// ********** Init Booster ********** // -void input_booster_init(void) -{ - // ********** Load Frequncy data from DTSI ********** - struct device_node *np; - int nlevels = 0, i; - - if (device_tree_infor != NULL) { - printk("[Input Booster] %s device_tree_infor is NULL\n", __FUNCTION__); - device_tree_infor = NULL; - } - - np = of_find_compatible_node(NULL, NULL, "input_booster"); - - if (np == NULL) { - ndevice_in_dt = 0; - printk("[Input Booster] %s np is NULL\n", __FUNCTION__); - return; - } - - // Geting the count of devices. - ndevice_in_dt = of_get_child_count(np); - printk("[Input Booster] %s ndevice_in_dt : %d\n", __FUNCTION__, ndevice_in_dt); - - device_tree_infor = kcalloc(ABS_CNT, sizeof(struct t_input_booster_device_tree_infor) * ndevice_in_dt, GFP_KERNEL); - if (device_tree_infor > 0) { - struct device_node *cnp; - int device_count = 0; - - for_each_child_of_node(np, cnp) { - struct t_input_booster_device_tree_infor *dt_infor = (device_tree_infor + device_count); - const u32 *plevels = NULL; - - // Geting label. - dt_infor->label = of_get_property(cnp, "input_booster,label", NULL); - printk("[Input Booster] %s dt_infor->label : %s\n", __FUNCTION__, dt_infor->label); - - if (of_property_read_u32(cnp, "input_booster,type", &dt_infor->type)) { - printk("Failed to get type property\n"); - break; - } - - // Geting the count of levels. - plevels = of_get_property(cnp, "input_booster,levels", &nlevels); - - if (plevels && nlevels) { - dt_infor->nlevels = nlevels / sizeof(u32); - printk("[Input Booster] %s dt_infor->nlevels : %d\n", __FUNCTION__, dt_infor->nlevels); - } else { - printk("Failed to calculate number of frequency.\n"); - break; - } - - // Allocation the param table. - dt_infor->param_tables = kcalloc(ABS_CNT, sizeof(struct t_input_booster_device_tree_param) * dt_infor->nlevels, GFP_KERNEL); - if (!dt_infor->param_tables) { - printk("Failed to allocate memory of freq_table\n"); - break; - } - - // fill the param table - pr_booster("[Input Booster] device_type:%d, label :%s, type: 0x%02x, num_level[%d]\n", - dt_infor->type, dt_infor->label, dt_infor->type, dt_infor->nlevels); - - for (i = 0; i < dt_infor->nlevels; i++) { - u32 temp; - int err = 0; - - err = of_property_read_u32_index(cnp, "input_booster,levels", i, &temp); dt_infor->param_tables[i].ilevels = (u8)temp; - err |= of_property_read_u32_index(cnp, "input_booster,cpu_freqs", i, &dt_infor->param_tables[i].cpu_freq); - err |= of_property_read_u32_index(cnp, "input_booster,kfc_freqs", i, &dt_infor->param_tables[i].kfc_freq); - err |= of_property_read_u32_index(cnp, "input_booster,mif_freqs", i, &dt_infor->param_tables[i].mif_freq); - err |= of_property_read_u32_index(cnp, "input_booster,int_freqs", i, &dt_infor->param_tables[i].int_freq); - err |= of_property_read_u32_index(cnp, "input_booster,hmp_boost", i, &temp); dt_infor->param_tables[i].hmp_boost = (u8)temp; - err |= of_property_read_u32_index(cnp, "input_booster,dma_latency", i, &dt_infor->param_tables[i].dma_latency); - err |= of_property_read_u32_index(cnp, "input_booster,head_times", i, &temp); dt_infor->param_tables[i].head_time = (u16)temp; - err |= of_property_read_u32_index(cnp, "input_booster,tail_times", i, &temp); dt_infor->param_tables[i].tail_time = (u16)temp; - err |= of_property_read_u32_index(cnp, "input_booster,phase_times", i, &temp); dt_infor->param_tables[i].phase_time = (u16)temp; - if (err) { - printk("Failed to get [%d] param table property\n", i); - } - - printk("[Input Booster] Level %d : frequency[%d,%d,%d,%d] hmp_boost[%d] dma_latency[%d] times[%d,%d,%d]\n", i, - dt_infor->param_tables[i].cpu_freq, - dt_infor->param_tables[i].kfc_freq, - dt_infor->param_tables[i].mif_freq, - dt_infor->param_tables[i].int_freq, - dt_infor->param_tables[i].hmp_boost, - dt_infor->param_tables[i].dma_latency, - dt_infor->param_tables[i].head_time, - dt_infor->param_tables[i].tail_time, - dt_infor->param_tables[i].phase_time); - } - - device_count++; - } - } - - // ********** Initialize Buffer for Touch ********** - for (i = 0; i < MAX_MULTI_TOUCH_EVENTS; i++) { - TouchIDs[i] = -1; - } - - // ********** Initialize Booster ********** - INIT_BOOSTER(touch) - INIT_BOOSTER(multitouch) - INIT_BOOSTER(key) - INIT_BOOSTER(touchkey) - INIT_BOOSTER(keyboard) - INIT_BOOSTER(mouse) - INIT_BOOSTER(mouse_wheel) - INIT_BOOSTER(pen) - INIT_BOOSTER(hover) - INIT_BOOSTER(key_two) - multitouch_booster.change_on_release = 1; - - // ********** Initialize Sysfs ********** - { - struct class *sysfs_class; - - sysfs_class = class_create(THIS_MODULE, "input_booster"); - if (IS_ERR(sysfs_class)) { - printk("[Input Booster] Failed to create class\n"); - return; - } - - INIT_SYSFS_CLASS(debug_level) - INIT_SYSFS_CLASS(head) - INIT_SYSFS_CLASS(tail) - INIT_SYSFS_CLASS(level) - - INIT_SYSFS_DEVICE(touch) - INIT_SYSFS_DEVICE(multitouch) - INIT_SYSFS_DEVICE(key) - INIT_SYSFS_DEVICE(touchkey) - INIT_SYSFS_DEVICE(keyboard) - INIT_SYSFS_DEVICE(mouse) - INIT_SYSFS_DEVICE(mouse_wheel) - INIT_SYSFS_DEVICE(pen) - INIT_SYSFS_DEVICE(hover) - INIT_SYSFS_DEVICE(key_two) - } -} -#endif // Input Booster - - /** * input_event() - report new input event * @dev: device that generated the event @@ -844,33 +439,12 @@ void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value) { unsigned long flags; - int idx; if (is_event_supported(type, dev->evbit, EV_MAX)) { spin_lock_irqsave(&dev->event_lock, flags); input_handle_event(dev, type, code, value); spin_unlock_irqrestore(&dev->event_lock, flags); -#if !defined(CONFIG_INPUT_BOOSTER) // Input Booster + - if (device_tree_infor != NULL) { - if (type == EV_SYN && input_count > 0) { - pr_booster("[Input Booster1] ==============================================\n"); - input_booster(dev); - input_count = 0; - } else if (input_count < MAX_EVENTS) { - pr_booster("[Input Booster1] type = %x, code = %x, value =%x\n", type, code, value); - idx = input_count; - input_events[idx].type = type; - input_events[idx].code = code; - input_events[idx].value = value; - if (idx < MAX_EVENTS) { - input_count = idx + 1 ; - } - } else { - pr_booster("[Input Booster1] type = %x, code = %x, value =%x Booster Event Exceeded\n", type, code, value); - } - } -#endif // Input Booster - } } EXPORT_SYMBOL(input_event); @@ -2958,9 +2532,6 @@ static int __init input_init(void) pr_err("unable to register char major %d", INPUT_MAJOR); goto fail2; } -#if !defined(CONFIG_INPUT_BOOSTER) // Input Booster + - input_booster_init(); -#endif // Input Booster - return 0; diff --git a/drivers/input/input_booster.c b/drivers/input/input_booster.c new file mode 100644 index 000000000000..4e428ef47269 --- /dev/null +++ b/drivers/input/input_booster.c @@ -0,0 +1,745 @@ +#include +#include +#include +#include + +spinlock_t write_ib_lock; +spinlock_t write_qos_lock; +spinlock_t ib_type_lock; +struct mutex trigger_ib_lock; + +struct workqueue_struct *ev_unbound_wq; +struct workqueue_struct *ib_unbound_highwq; + +int total_ib_cnt = 0; +int ib_init_succeed = 0; + +int level_value = IB_MAX; + +unsigned int debug_flag = 0; +unsigned int enable_event_booster = INIT_ZERO; + +// Input Booster Init Variables +int release_val[MAX_RES_COUNT]; +int device_count = 0; +struct t_ib_device_tree *ib_device_trees; +struct t_ib_trigger *ib_trigger; +int max_resource_size; + +struct list_head *ib_list; +struct list_head *qos_list; + +// @evdev_mt_slot : save the number of inputed touch slot. +int evdev_mt_slot = 0; +// @evdev_mt_event[] : save count of each boooter's events. +int evdev_mt_event[MAX_DEVICE_TYPE_NUM]; +int trigger_cnt = 0; +int send_ev_enable = 0; + +struct t_ib_info *find_release_ib(int dev_type, int key_id); +struct t_ib_info *create_ib_instance(struct t_ib_trigger *p_IbTrigger, int uniqId); +bool is_validate_uniqid(int dev_type, unsigned int uniq_id); +struct t_ib_target *find_update_target(int uniq_id, int res_id); +unsigned long get_qos_value(int res_id); +void remove_ib_instance(struct t_ib_info *ib); + +void trigger_input_booster(struct work_struct *work) +{ + unsigned int uniq_id = 0; + int res_type = -1; + + struct t_ib_info *ib; + struct t_ib_trigger *p_IbTrigger = container_of(work, struct t_ib_trigger, ib_trigger_work); + + if (p_IbTrigger == NULL) { + return; + } + + pr_booster("IB Trigger :: %s(%d) %s || key_id : %d\n =========================", + ib_device_trees[p_IbTrigger->dev_type].label, p_IbTrigger->dev_type, + (p_IbTrigger->event_type) ? "PRESS" : "RELEASE", p_IbTrigger->key_id); + + mutex_lock(&trigger_ib_lock); + + // Input booster On/Off handling + if (p_IbTrigger->event_type == BOOSTER_ON) { + + if (find_release_ib(p_IbTrigger->dev_type, p_IbTrigger->key_id) != NULL) { + pr_err(ITAG" IB Trigger :: ib already exist. Key(%d)", p_IbTrigger->key_id); + mutex_unlock(&trigger_ib_lock); + return; + } + + // Check if uniqId exits. + do { + uniq_id = total_ib_cnt++; + + if (total_ib_cnt == MAX_IB_COUNT) + total_ib_cnt = 0; + + } while (!is_validate_uniqid(p_IbTrigger->dev_type, uniq_id)); + + // Make ib instance with all needed factor. + ib = create_ib_instance(p_IbTrigger, uniq_id); + pr_booster("IB Uniq Id(%d)", uniq_id); + + if (ib == NULL) { + mutex_unlock(&trigger_ib_lock); + return; + } + + ib->press_flag = FLAG_ON; + + // When create ib instance, insert resource info in qos list with value 0. + for (res_type = 0; res_type < max_resource_size; res_type++) { + if (ib != NULL && ib->ib_dt->res[res_type].head_value != 0) { + struct t_ib_target* tv; + tv = kmalloc(sizeof(struct t_ib_target), GFP_KERNEL); + + if (tv == NULL) + continue; + + tv->uniq_id = ib->uniq_id; + tv->value = 0; + + spin_lock(&write_qos_lock); + list_add_tail_rcu(&(tv->list), &qos_list[res_type]); + spin_unlock(&write_qos_lock); + } + } + + queue_work(ib_unbound_highwq, &(ib->ib_state_work[IB_HEAD])); + + } else { + /* Find ib instance in the list. if not, ignore this event. + * if exists, Release flag on. Call ib's Release func. + */ + + ib = find_release_ib(p_IbTrigger->dev_type, p_IbTrigger->key_id); + + if (ib == NULL) { + pr_err("IB is null on release"); + mutex_unlock(&trigger_ib_lock); + return; + } + pr_booster("IB Trigger Release :: Uniq ID(%d)", ib->uniq_id); + + mutex_lock(&ib->lock); + + ib->rel_flag = FLAG_ON; + + // If head operation is already finished, tail timeout work will be triggered. + if (ib->isHeadFinished) { + if (!delayed_work_pending(&(ib->ib_timeout_work[IB_TAIL]))) { + queue_delayed_work(ib_unbound_highwq, + &(ib->ib_timeout_work[IB_TAIL]), + msecs_to_jiffies(ib->ib_dt->tail_time)); + } else { + pr_err(ITAG" IB Trigger Release :: tail timeout start"); + } + } + mutex_unlock(&ib->lock); + + } + mutex_unlock(&trigger_ib_lock); + +} + +struct t_ib_info *create_ib_instance(struct t_ib_trigger *p_IbTrigger, int uniqId) +{ + struct t_ib_info *ib = kmalloc(sizeof(struct t_ib_info), GFP_KERNEL); + int dev_type = p_IbTrigger->dev_type; + + if (ib == NULL) + return NULL; + + ib->dev_name = p_IbTrigger->dev_name; + ib->key_id = p_IbTrigger->key_id; + ib->uniq_id = uniqId; + ib->press_flag = FLAG_OFF; + ib->rel_flag = FLAG_OFF; + ib->isHeadFinished = 0; + + ib->ib_dt = &ib_device_trees[dev_type]; + + INIT_WORK(&ib->ib_state_work[IB_HEAD], press_state_func); + INIT_DELAYED_WORK(&ib->ib_timeout_work[IB_HEAD], press_timeout_func); + INIT_WORK(&ib->ib_state_work[IB_TAIL], release_state_func); + INIT_DELAYED_WORK(&ib->ib_timeout_work[IB_TAIL], release_timeout_func); + mutex_init(&ib->lock); + + spin_lock(&write_ib_lock); + list_add_tail_rcu(&(ib->list), &ib_list[dev_type]); + spin_unlock(&write_ib_lock); + + return ib; +} + +bool is_validate_uniqid(int dev_type, unsigned int uniq_id) +{ + int cnt = 0; + struct t_ib_info *ib = NULL; + rcu_read_lock(); + + if (list_empty(&ib_list[dev_type])) { + rcu_read_unlock(); + pr_booster("IB list empty"); + return true; + } + + list_for_each_entry_rcu(ib, &ib_list[dev_type], list) { + cnt++; + if (ib != NULL && ib->uniq_id == uniq_id) { + rcu_read_unlock(); + pr_booster("uniq id find :: IB Idx(%d) old(%d) new(%d)", cnt, ib->uniq_id, uniq_id); + return false; + } + } + + rcu_read_unlock(); + pr_booster("This can be used(IB Total:%d)", cnt); + return true; +} + +struct t_ib_info *find_release_ib(int dev_type, int key_id) +{ + struct t_ib_info *ib = NULL; + rcu_read_lock(); + if (list_empty(&ib_list[dev_type])) { + rcu_read_unlock(); + pr_booster("Release IB(%d) Not Exist & List Empty", key_id); + return NULL; + } + + list_for_each_entry_rcu(ib, &ib_list[dev_type], list) { + if (ib != NULL && ib->key_id == key_id && ib->rel_flag == FLAG_OFF) { + rcu_read_unlock(); + pr_booster("Release IB(%d) Found", key_id); + return ib; + } + } + + rcu_read_unlock(); + pr_booster("Release IB(%d) Not Exist", key_id); + return NULL; + +} + +void press_state_func(struct work_struct *work) +{ + + struct t_ib_res_info res; + struct t_ib_target *tv; + int qos_values[MAX_RES_COUNT] = { 0, }; + int res_type = 0; + + struct t_ib_info *target_ib = container_of(work, struct t_ib_info, ib_state_work[IB_HEAD]); + + pr_booster("Press State Func :::: Unique_Id(%d)", target_ib->uniq_id); + + // //To-Do : Get_Res_List(head) and update head value. + for (res_type = 0; res_type < max_resource_size; res_type++) { + res = target_ib->ib_dt->res[res_type]; + if (res.head_value == 0) + continue; + + //find already added target value instance and update value as a head. + tv = find_update_target(target_ib->uniq_id, res.res_id); + + if (tv == NULL) { + pr_booster("Press State Func :::: tv is null T.T"); + continue; + } + + tv->value = res.head_value; + pr_booster("Press State Func :::: Uniq(%d)'s Update Res(%d) Head Val(%d)", + tv->uniq_id, res.res_id, res.head_value); + + qos_values[res.res_id] = get_qos_value(res.res_id); + + } + + ib_set_booster(qos_values); + pr_booster("Press State Func :::: Press Delay Time(%lu)", + msecs_to_jiffies(target_ib->ib_dt->head_time)); + + queue_delayed_work(ib_unbound_highwq, &(target_ib->ib_timeout_work[IB_HEAD]), + msecs_to_jiffies(target_ib->ib_dt->head_time)); +} + +void press_timeout_func(struct work_struct *work) +{ + + struct t_ib_info *target_ib = container_of(work, struct t_ib_info, ib_timeout_work[IB_HEAD].work); + + pr_booster("Press Timeout Func :::: Unique_Id(%d)", target_ib->uniq_id); + + int res_type; + struct t_ib_res_info res; + struct t_ib_target *tv; + int qos_values[MAX_RES_COUNT] = { 0, }; + + if (target_ib->ib_dt->tail_time != 0) { + mutex_lock(&target_ib->lock); + target_ib->isHeadFinished = 1; + queue_work(ib_unbound_highwq, &(target_ib->ib_state_work[IB_TAIL])); + mutex_unlock(&target_ib->lock); + } + else { + + //NO TAIL Scenario : Delete Ib instance and free all memory space. + for (res_type = 0; res_type < max_resource_size; res_type++) { + res = target_ib->ib_dt->res[res_type]; + + tv = find_update_target(target_ib->uniq_id, res.res_id); + if (tv == NULL) + continue; + + spin_lock(&write_qos_lock); + list_del_rcu(&(tv->list)); + spin_unlock(&write_qos_lock); + synchronize_rcu(); + kfree(tv); + + rcu_read_lock(); + if (!list_empty(&qos_list[res.res_id])) { + rcu_read_unlock(); + qos_values[res.res_id] = get_qos_value(res.res_id); + pr_booster("Press Timeout ::: Remove Val Cuz No Tail ::: Res(%d) Qos Val(%d)", + res.res_id, qos_values[res.res_id]); + } + else { + rcu_read_unlock(); + pr_booster("Press Timeout ::: Release Booster(%d) ::: No Tail and List Empty", + res.res_id); + ib_release_booster(res.res_id); + } + } + remove_ib_instance(target_ib); + ib_set_booster(qos_values); + } + +} + +void release_state_func(struct work_struct *work) +{ + + int qos_values[MAX_RES_COUNT] = { 0, }; + int isHeadFinished = -1; + int res_type = 0; + struct t_ib_target *tv; + struct t_ib_res_info res; + + struct t_ib_info *target_ib = container_of(work, struct t_ib_info, ib_state_work[IB_TAIL]); + + mutex_lock(&target_ib->lock); + + isHeadFinished = target_ib->isHeadFinished; + + pr_booster("Release State Func :::: Unique_Id(%d) HeadFinish(%d) Rel_Flag(%d)", + target_ib->uniq_id, isHeadFinished, target_ib->rel_flag) + + for (res_type = 0; res_type < max_resource_size; res_type++) { + res = target_ib->ib_dt->res[res_type]; + if (res.tail_value == 0) + continue; + + tv = find_update_target(target_ib->uniq_id, res.res_id); + if (tv == NULL) + continue; + + spin_lock(&write_qos_lock); + tv->value = res.tail_value; + spin_unlock(&write_qos_lock); + + pr_booster("Release State Func :::: Uniq(%d)'s Update Tail Val (%d), Qos_Val(%d)", tv->uniq_id, tv->value, qos_values[res.res_id]); + qos_values[res.res_id] = get_qos_value(res.res_id); + } + + ib_set_booster(qos_values); + + // If release event already triggered, tail delay work will be triggered after relese state func. + if (target_ib->rel_flag == FLAG_ON) { + if (!delayed_work_pending(&(target_ib->ib_timeout_work[IB_TAIL]))) { + queue_delayed_work(ib_unbound_highwq, + &(target_ib->ib_timeout_work[IB_TAIL]), + msecs_to_jiffies(target_ib->ib_dt->tail_time)); + } else { + pr_err(ITAG" Release State Func :: tail timeout start"); + } + } + mutex_unlock(&target_ib->lock); +} + +void release_timeout_func(struct work_struct *work) +{ + int qos_values[MAX_RES_COUNT] = { 0, }; + struct t_ib_target *tv; + struct t_ib_res_info res; + int res_type; + + struct t_ib_info *target_ib = container_of(work, struct t_ib_info, ib_timeout_work[IB_TAIL].work); + pr_booster("Release Timeout Func :::: Unique_Id(%d)", target_ib->uniq_id); + + // Remove all booster + // delete instance in the ib list and delete instance in the qos list. + + for (res_type = 0; res_type < max_resource_size; res_type++) { + res = target_ib->ib_dt->res[res_type]; + + tv = find_update_target(target_ib->uniq_id, res.res_id); + if (tv == NULL) + continue; + + pr_booster("Release Timeout Func :::: Delete Uniq(%d)'s TV Val (%d)", + tv->uniq_id, tv->value); + + spin_lock(&write_qos_lock); + list_del_rcu(&(tv->list)); + spin_unlock(&write_qos_lock); + synchronize_rcu(); + kfree(tv); + + rcu_read_lock(); + if (!list_empty(&qos_list[res.res_id])) { + rcu_read_unlock(); + qos_values[res.res_id] = get_qos_value(res.res_id); + pr_booster("Release Timeout Func ::: Res(%d) Qos Val(%d)", + res.res_id, qos_values[res.res_id]); + } + else { + rcu_read_unlock(); + pr_booster("Release Timeout ::: Release Booster(%d) ::: List Empty", + res.res_id); + ib_release_booster(res.res_id); + } + } + + ib_set_booster(qos_values); + remove_ib_instance(target_ib); + +} + +struct t_ib_target *find_update_target(int uniq_id, int res_id) +{ + struct t_ib_target *tv; + + rcu_read_lock(); + list_for_each_entry_rcu(tv, &qos_list[res_id], list) { + if (tv->uniq_id == uniq_id) { + rcu_read_unlock(); + return tv; + } + } + rcu_read_unlock(); + + return NULL; +} + +unsigned long get_qos_value(int res_id) +{ + //Find tv instance that has max value in the qos_list that has the passed res_id. + struct t_ib_target *tv; + int ret_val = 0; + + rcu_read_lock(); + + if (list_empty(&qos_list[res_id])) { + rcu_read_unlock(); + return 0; + } + + list_for_each_entry_rcu(tv, &qos_list[res_id], list) { + if (tv->value > ret_val) + ret_val = tv->value; + } + rcu_read_unlock(); + + return ret_val; +} + +void remove_ib_instance(struct t_ib_info *ib) +{ + pr_booster("Del Ib Instance's Id : %d", ib->uniq_id); + //Delete Kmalloc instances + + spin_lock(&write_ib_lock); + list_del_rcu(&(ib->list)); + spin_unlock(&write_ib_lock); + synchronize_rcu(); + kfree(ib); +} + +unsigned int create_uniq_id(int type, int code, int slot) +{ + //id1 | (id2 << num_bits_id1) | (id3 << (num_bits_id2 + num_bits_id1)) + pr_booster("Create Key Id -> type(%d), code(%d), slot(%d)", type, code, slot); + return (type << (TYPE_BITS + CODE_BITS)) | (code << CODE_BITS) | slot; +} + +void ib_auto_test(int type, int code, int val) +{ + send_ev_enable = 1; +} + + +//+++++++++++++++++++++++++++++++++++++++++++++++ STRUCT & VARIABLE FOR SYSFS +++++++++++++++++++++++++++++++++++++++++++++++// +SYSFS_CLASS(enable_event, (buf, "%u\n", enable_event), 1) +SYSFS_CLASS(debug_level, (buf, "%u\n", debug_level), 1) +SYSFS_CLASS(sendevent, (buf, "%d\n", sendevent), 3) +HEAD_TAIL_SYSFS_DEVICE(head) +HEAD_TAIL_SYSFS_DEVICE(tail) +LEVEL_SYSFS_DEVICE(level) + +struct attribute *dvfs_attributes[] = { + &dev_attr_head.attr, + &dev_attr_tail.attr, + &dev_attr_level.attr, + NULL, +}; + +struct attribute_group dvfs_attr_group = { + .attrs = dvfs_attributes, +}; + +void init_sysfs_device(struct class *sysfs_class, struct t_ib_device_tree *ib_dt) +{ + struct device *sysfs_dev; + int ret = 0; + sysfs_dev = device_create(sysfs_class, NULL, 0, ib_dt, "%s", ib_dt->label); + if (IS_ERR(sysfs_dev)) { + ret = IS_ERR(sysfs_dev); + pr_booster("[Input Booster] Failed to create %s sysfs device[%d]n", ib_dt->label, ret); + return; + } + ret = sysfs_create_group(&sysfs_dev->kobj, &dvfs_attr_group); + if (ret) { + pr_booster("[Input Booster] Failed to create %s sysfs groupn", ib_dt->label); + return; + } +} + +int is_ib_init_succeed(void) +{ + return (ib_trigger != NULL && ib_device_trees != NULL && + ib_list != NULL && qos_list != NULL) ? 1 : 0; +} + + +void input_booster_exit(void) +{ + int i = 0; + + kfree(ib_trigger); + kfree(ib_device_trees); + kfree(ib_list); + kfree(qos_list); + input_booster_exit_vendor(); +} + +// ********** Init Booster ********** // + +void input_booster_init(void) +{ + // ********** Load Frequency data from DTSI ********** + struct device_node *np; + int i; + + int ib_dt_size = sizeof(struct t_ib_device_tree); + int ib_res_size = sizeof(struct t_ib_res_info); + int list_head_size = sizeof(struct list_head); + int ddr_info_size = sizeof(struct t_ddr_info); + + int res_type = 0; + int ndevice_in_dt = 0; + char rel_val_str[100]; + size_t rel_val_size = 0; + char *rel_val_pointer = NULL; + const char *token = NULL; + + spin_lock_init(&write_ib_lock); + spin_lock_init(&write_qos_lock); + spin_lock_init(&ib_type_lock); + mutex_init(&trigger_ib_lock); + + ev_unbound_wq = + alloc_ordered_workqueue("ev_unbound_wq", WQ_HIGHPRI); + + ib_unbound_highwq = + alloc_workqueue("ib_unbound_high_wq", WQ_UNBOUND | WQ_HIGHPRI, + MAX_IB_COUNT); + + if (ev_unbound_wq == NULL || ib_unbound_highwq == NULL) + goto out; + + //Input Booster Trigger Strcut Init + ib_trigger = kcalloc(ABS_CNT, sizeof(struct t_ib_trigger) * MAX_IB_COUNT, GFP_KERNEL); + if (ib_trigger == NULL) { + pr_err(ITAG" ib_trigger mem alloc fail"); + goto out; + } + + for (i = 0; i < MAX_IB_COUNT; i++) { + INIT_WORK(&(ib_trigger[i].ib_trigger_work), trigger_input_booster); + } + + np = of_find_compatible_node(NULL, NULL, "input_booster"); + if (np == NULL) { + goto out; + } + + // Geting the count of devices. + ndevice_in_dt = of_get_child_count(np); + pr_info(ITAG" %s ndevice_in_dt : %d\n", __func__, ndevice_in_dt); + + + ib_device_trees = kcalloc(ABS_CNT, ib_dt_size * ndevice_in_dt, GFP_KERNEL); + if (ib_device_trees == NULL) { + pr_err(ITAG" dt_infor mem alloc fail"); + goto out; + } + + // ib list mem alloc + ib_list = kcalloc(ABS_CNT, list_head_size * ndevice_in_dt, GFP_KERNEL); + if (ib_list == NULL) { + pr_err(ITAG" ib list mem alloc fail"); + goto out; + } + + sscanf((of_get_property(np, "max_resource_count", NULL)), "%d", &max_resource_size); + + pr_info(ITAG" resource size : %d", max_resource_size); + + //qos list mem alloc + qos_list = kcalloc(ABS_CNT, list_head_size * max_resource_size, GFP_KERNEL); + if (qos_list == NULL) { + pr_err(ITAG" ib list mem alloc fail"); + goto out; + } + + //Init Resource Release Values + const char *rel_vals = of_get_property(np, "ib_release_values", NULL); + + rel_val_size = strlcpy(rel_val_str, rel_vals, sizeof(char) * 100); + rel_val_pointer = rel_val_str; + token = strsep(&rel_val_pointer, ","); + res_type = 0; + + while (token != NULL) { + pr_booster("Rel %d's Type Value(%s)", res_type, token); + + //Release Values inserted inside array + sscanf(token, "%d", &release_val[res_type]); + + //Init Qos List + INIT_LIST_HEAD(&qos_list[res_type]); + + token = strsep(&rel_val_pointer, ","); + res_type++; + } + + if (res_type < max_resource_size) { + pr_err(ITAG" release value parse fail"); + goto out; + } + + struct device_node *cnp; + + for_each_child_of_node(np, cnp) { + /************************************************/ + // fill all needed data into res_info instance that is in dt instance. + struct t_ib_device_tree *ib_dt = (ib_device_trees + device_count); + struct device_node *child_resource_node; + struct device_node *resource_node = of_find_compatible_node(cnp, NULL, "resource"); + + ib_dt->res = kcalloc(ABS_CNT, ib_res_size * max_resource_size, GFP_KERNEL); + + int resource_node_index = 0; + int res_type = 0; + for_each_child_of_node(resource_node, child_resource_node) { + // resource_node_index is same as Resource's ID. + ib_dt->res[resource_node_index].res_id = resource_node_index; + ib_dt->res[resource_node_index].label = of_get_property(child_resource_node, "resource,label", NULL); + + int inputbooster_size = 0; + + const u32 *is_exist_inputbooster_size = of_get_property(child_resource_node, "resource,value", &inputbooster_size); + + if (is_exist_inputbooster_size && inputbooster_size) { + inputbooster_size = inputbooster_size / sizeof(u32); + } + pr_info(ITAG" inputbooster_size : %d", inputbooster_size); + + if (inputbooster_size != 2) + return; // error + + for (res_type = 0; res_type < inputbooster_size; ++res_type) { + if (res_type == IB_HEAD) { + of_property_read_u32_index(child_resource_node, "resource,value", + res_type, &ib_dt->res[resource_node_index].head_value); + pr_info(ITAG"res[%d]->values[%d] : %d", resource_node_index, + res_type, ib_dt->res[resource_node_index].head_value); + } + else if (res_type == IB_TAIL) { + of_property_read_u32_index(child_resource_node, "resource,value", + res_type, &ib_dt->res[resource_node_index].tail_value); + pr_info(ITAG"res[%d]->values[%d] : %d", resource_node_index, + res_type, ib_dt->res[resource_node_index].tail_value); + } + } + + resource_node_index++; + } + + ib_dt->label = of_get_property(cnp, "input_booster,label", NULL); + pr_info(ITAG" %s ib_dt->label : %s\n", __func__, ib_dt->label); + + if (of_property_read_u32(cnp, "input_booster,type", &ib_dt->type)) { + pr_err(ITAG" Failed to get type property\n"); + break; + } + if (of_property_read_u32(cnp, "input_booster,head_time", &ib_dt->head_time)) { + pr_err(ITAG" Fail Get Head Time\n"); + break; + } + if (of_property_read_u32(cnp, "input_booster,tail_time", &ib_dt->tail_time)) { + pr_err(ITAG" Fail Get Tail Time\n"); + break; + } + + //Init all type of ib list. + INIT_LIST_HEAD(&ib_list[device_count]); + + device_count++; + } + + ib_init_succeed = is_ib_init_succeed(); + +out: + // ********** Initialize Sysfs ********** + { + struct class *sysfs_class; + int ret; + int ib_type; + sysfs_class = class_create(THIS_MODULE, "input_booster"); + + if (IS_ERR(sysfs_class)) { + pr_err(" Failed to create class\n"); + return; + } + if (ib_init_succeed) { + INIT_SYSFS_CLASS(enable_event) + INIT_SYSFS_CLASS(debug_level) + INIT_SYSFS_CLASS(sendevent) + + for (ib_type = 0; ib_type < MAX_DEVICE_TYPE_NUM; ib_type++) { + init_sysfs_device(sysfs_class, &ib_device_trees[ib_type]); + } + } + } +#if !defined(CONFIG_ARCH_QCOM) && !defined (CONFIG_ARCH_EXYNOS) + pr_err(ITAG" At least, one vendor feature needed\n"); +#else + input_booster_init_vendor(release_val); +#endif +} diff --git a/drivers/input/input_booster_lsi.c b/drivers/input/input_booster_lsi.c new file mode 100644 index 000000000000..d813ccb1171e --- /dev/null +++ b/drivers/input/input_booster_lsi.c @@ -0,0 +1,118 @@ +#include +#include +#include + +static struct pm_qos_request cluster1_qos; +static struct pm_qos_request cluster0_qos; +static struct pm_qos_request mif_qos; +static struct pm_qos_request int_qos; +static struct ucc_req ucc_req = { + .name = "input", +}; + +static DEFINE_MUTEX(input_lock); +bool current_hmp_boost = INIT_ZERO; +bool current_ucc_boost = INIT_ZERO; + +struct inform { + void *qos; + void (*set_func)(int); + int release_value; +}; +struct inform informations[MAX_RES_COUNT]; + +void set_ucc(int enable) +{ + mutex_lock(&input_lock); + + if (enable != current_ucc_boost) { + pr_booster("[Input Booster2] ****** set_ucc : %d ( %s )\n", enable, __FUNCTION__); + if (enable) { + ucc_add_request(&ucc_req, enable); + } else { + ucc_remove_request(&ucc_req); + } + current_ucc_boost = enable; + } + + mutex_unlock(&input_lock); +} + + +void set_hmp(int enable) +{ + mutex_lock(&input_lock); + + if (enable != current_hmp_boost) { + pr_booster("[Input Booster2] ****** set_ehmp : %d ( %s )\n", enable, __FUNCTION__); + if (enable) { + request_kernel_prefer_perf(STUNE_TOPAPP, 1); + request_kernel_prefer_perf(STUNE_FOREGROUND, 1); + } else { + request_kernel_prefer_perf(STUNE_TOPAPP, 0); + request_kernel_prefer_perf(STUNE_FOREGROUND, 0); + } + current_hmp_boost = enable; + } + + mutex_unlock(&input_lock); +} + +void ib_set_booster(int *qos_values) +{ + int value = -1; + int res_type = 0; + + for (res_type = 0; res_type < MAX_RES_COUNT; res_type++) { + pr_info(" ib_set_booster qos_values[%d] : %d", res_type, qos_values[res_type]); + value = qos_values[res_type]; + + if (value <= 0) + continue; + + if (informations[res_type].qos) { + pm_qos_update_request(informations[res_type].qos, qos_values[res_type]); + } else { + informations[res_type].set_func(qos_values[res_type]); + } + } +} + +void ib_release_booster(int res_id) +{ + if (informations[res_id].qos) { + pm_qos_update_request(informations[res_id].qos, informations[res_id].release_value); + } else { + informations[res_id].set_func(informations[res_id].release_value); + } + + pr_info("ib_release_booster %d value : %d", res_id, informations[res_id].release_value); +} + +void input_booster_init_vendor(int *release_val) +{ + int i = 0; + pm_qos_add_request(&cluster1_qos, PM_QOS_CLUSTER1_FREQ_MIN, PM_QOS_CLUSTER1_FREQ_MIN_DEFAULT_VALUE); + pm_qos_add_request(&cluster0_qos, PM_QOS_CLUSTER0_FREQ_MIN, PM_QOS_CLUSTER0_FREQ_MIN_DEFAULT_VALUE); + pm_qos_add_request(&mif_qos, PM_QOS_BUS_THROUGHPUT, PM_QOS_BUS_THROUGHPUT_DEFAULT_VALUE); + pm_qos_add_request(&int_qos, PM_QOS_DEVICE_THROUGHPUT, PM_QOS_DEVICE_THROUGHPUT_DEFAULT_VALUE); + + informations[i++].qos = &cluster1_qos; + informations[i++].qos = &cluster0_qos; + informations[i++].qos = &mif_qos; + informations[i++].qos = &int_qos; + informations[i++].set_func = set_hmp; + informations[i++].set_func = set_ucc; + + for (i = 0; i < MAX_RES_COUNT; i++) { + informations[i].release_value = release_val[i]; + } +} + +void input_booster_exit_vendor(void) +{ + pm_qos_remove_request(&cluster1_qos); + pm_qos_remove_request(&cluster0_qos); + pm_qos_remove_request(&mif_qos); + pm_qos_remove_request(&int_qos); +} diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig index c68d8f5eed86..c61da11ae243 100644 --- a/drivers/input/touchscreen/Kconfig +++ b/drivers/input/touchscreen/Kconfig @@ -1223,10 +1223,20 @@ config TOUCHSCREEN_HIMAX_CHIPSET report 10 touches at a time. If unsure, say N. + +config CUSTOM_FORCETOUCH + tristate "Apollo Custom ForceTouch Handler" + help + Say Y here if you want ForceTouch Functionality on non-ONEUI Q ROMs + If unsure, say N. source "drivers/input/touchscreen/sec_ts/Kconfig" source "drivers/input/touchscreen/sec_ts/y771/Kconfig" source "drivers/input/touchscreen/stm/Kconfig" source "drivers/input/touchscreen/melfas/mss100/Kconfig" source "drivers/input/touchscreen/himax/himax_83102E/Kconfig" + +config WAKE_GESTURES + bool "wake gestures" + endif diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile index 5184316b228b..87ae20286812 100644 --- a/drivers/input/touchscreen/Makefile +++ b/drivers/input/touchscreen/Makefile @@ -104,4 +104,6 @@ obj-$(CONFIG_TOUCHSCREEN_SEC_TS_A552) += sec_ts_a552/ obj-$(CONFIG_TOUCHSCREEN_SEC_TS_Y771) += sec_ts/y771/ obj-$(CONFIG_TOUCHSCREEN_FTS) += stm/ obj-$(CONFIG_TOUCHSCREEN_MELFAS_MSS100) += melfas/mss100/ -obj-$(CONFIG_TOUCHSCREEN_HIMAX_CHIPSET) += himax/himax_83102E/ \ No newline at end of file +obj-$(CONFIG_TOUCHSCREEN_HIMAX_CHIPSET) += himax/himax_83102E/ +obj-$(CONFIG_TOUCHSCREEN_FTS7_HAECHI) += stm/fts7/ +obj-$(CONFIG_WAKE_GESTURES) += wake_gestures.o diff --git a/drivers/input/touchscreen/sec_ts/sec_ts.c b/drivers/input/touchscreen/sec_ts/sec_ts.c index 8474870944f6..842ff5de070a 100644 --- a/drivers/input/touchscreen/sec_ts/sec_ts.c +++ b/drivers/input/touchscreen/sec_ts/sec_ts.c @@ -10,6 +10,16 @@ * published by the Free Software Foundation. */ +#ifdef CONFIG_WAKE_GESTURES +#include +#include +static bool is_suspended; +bool scr_suspended(void) +{ + return is_suspended; +} +#endif + struct sec_ts_data *tsp_info; #include "sec_ts.h" @@ -1291,6 +1301,11 @@ static void sec_ts_read_event(struct sec_ts_data *ts) input_report_key(ts->input_dev, BTN_TOUCH, 1); input_report_key(ts->input_dev, BTN_TOOL_FINGER, 1); +#ifdef CONFIG_WAKE_GESTURES + if (is_suspended) + ts->coord[t_id].x += 5000; +#endif + input_report_abs(ts->input_dev, ABS_MT_POSITION_X, ts->coord[t_id].x); input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, ts->coord[t_id].y); input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, ts->coord[t_id].major); @@ -1372,6 +1387,7 @@ static void sec_ts_read_event(struct sec_ts_data *ts) input_report_key(ts->input_dev, KEY_BLACK_UI_GESTURE, 1); break; case SEC_TS_GESTURE_CODE_FORCE: +#ifndef CONFIG_CUSTOM_FORCETOUCH if (ts->power_status == SEC_TS_STATE_POWER_ON) { if (p_gesture_status->gesture_id == SEC_TS_EVENT_PRESSURE_TOUCHED) { ts->all_force_count++; @@ -1406,6 +1422,46 @@ static void sec_ts_read_event(struct sec_ts_data *ts) ts->all_force_count++; } } +#else + if (ts->power_status == SEC_TS_STATE_POWER_ON) { + if (p_gesture_status->gesture_id == SEC_TS_EVENT_PRESSURE_RELEASED) { + input_report_key(ts->input_dev, KEY_HOMEPAGE, 0); + input_report_key(ts->input_dev, KEY_BLACK_UI_GESTURE, 1); + ts->scrub_id = SPONGE_EVENT_TYPE_AOD_HOMEKEY_RELEASE_NO_HAPTIC; + input_sync(ts->input_dev); + + haptic_homekey_release(); + } else { + input_report_key(ts->input_dev, KEY_HOMEPAGE, 1); + ts->scrub_id = SPONGE_EVENT_TYPE_AOD_HOMEKEY_PRESS; + input_sync(ts->input_dev); + + haptic_homekey_press(); + ts->all_force_count++; + } + + if (ts->pressure_setting_mode) + input_info(true, &ts->client->dev, "%s: skip force events in pressure setting mode\n", __func__); + else + input_report_key(ts->input_dev, KEY_BLACK_UI_GESTURE, 1); + } else { + if (p_gesture_status->gesture_id == SEC_TS_EVENT_PRESSURE_RELEASED) { + input_report_key(ts->input_dev, KEY_HOMEPAGE, 0); + input_report_key(ts->input_dev, KEY_BLACK_UI_GESTURE, 1); + ts->scrub_id = SPONGE_EVENT_TYPE_AOD_HOMEKEY_RELEASE_NO_HAPTIC; + input_sync(ts->input_dev); + + haptic_homekey_release(); + } else { + input_report_key(ts->input_dev, KEY_HOMEPAGE, 1); + ts->scrub_id = SPONGE_EVENT_TYPE_AOD_HOMEKEY_PRESS; + input_sync(ts->input_dev); + + haptic_homekey_press(); + ts->all_force_count++; + } + } +#endif ts->scrub_x = (p_gesture_status->gesture_data_1 << 4) | (p_gesture_status->gesture_data_3 >> 4); @@ -1454,12 +1510,17 @@ static irqreturn_t sec_ts_irq_thread(int irq, void *ptr) } #endif + /* prevent CPU from entering deep sleep */ + pm_qos_update_request(&ts->pm_qos_req, 100); + mutex_lock(&ts->eventlock); sec_ts_read_event(ts); mutex_unlock(&ts->eventlock); + pm_qos_update_request(&ts->pm_qos_req, PM_QOS_DEFAULT_VALUE); + return IRQ_HANDLED; } @@ -2261,6 +2322,9 @@ static int sec_ts_probe(struct i2c_client *client, const struct i2c_device_id *i "%s: TOUCH DEVICE ID : %02X, %02X, %02X, %02X, %02X\n", __func__, deviceID[0], deviceID[1], deviceID[2], deviceID[3], deviceID[4]); + pm_qos_add_request(&ts->pm_qos_req, PM_QOS_CPU_DMA_LATENCY, + PM_QOS_DEFAULT_VALUE); + ret = sec_ts_i2c_read(ts, SEC_TS_READ_FIRMWARE_INTEGRITY, &result, 1); if (ret < 0) { input_err(true, &ts->client->dev, "%s: failed to integrity check (%d)\n", __func__, ret); @@ -2425,6 +2489,7 @@ static int sec_ts_probe(struct i2c_client *client, const struct i2c_device_id *i free_irq(client->irq, ts); #endif err_irq: + pm_qos_remove_request(&ts->pm_qos_req); if (ts->plat_data->support_dex) { input_unregister_device(ts->input_dev_pad); ts->input_dev_pad = NULL; @@ -2835,6 +2900,10 @@ static int sec_ts_input_open(struct input_dev *dev) char addr[3] = { 0 }; int ret; +#ifdef CONFIG_WAKE_GESTURES + is_suspended = false; +#endif + if (!ts->info_work_done) { input_err(true, &ts->client->dev, "%s not finished info work\n", __func__); return 0; @@ -2868,6 +2937,11 @@ static int sec_ts_input_open(struct input_dev *dev) #ifdef USE_RESET_EXIT_LPM schedule_delayed_work(&ts->reset_work, msecs_to_jiffies(TOUCH_RESET_DWORK_TIME)); #else +#ifdef CONFIG_WAKE_GESTURES + if (s2w_switch || dt2w_switch) + disable_irq_wake(ts->client->irq); + else +#endif sec_ts_set_lowpowermode(ts, TO_TOUCH_MODE); #endif } else { @@ -2900,6 +2974,20 @@ static int sec_ts_input_open(struct input_dev *dev) mutex_unlock(&ts->modechange); +#ifdef CONFIG_WAKE_GESTURES + if (dt2w_switch_changed) { + dt2w_switch = dt2w_switch_temp; + dt2w_switch_changed = false; + } + if (dt2w_custom_tap_changed) { + dt2w_custom_tap = dt2w_custom_tap_temp; + dt2w_custom_tap_changed = false; + } + if (s2w_switch_changed) { + s2w_switch = s2w_switch_temp; + s2w_switch_changed = false; + } +#endif cancel_delayed_work(&ts->work_print_info); ts->print_info_cnt_open = 0; ts->print_info_cnt_release = 0; @@ -2912,6 +3000,10 @@ static void sec_ts_input_close(struct input_dev *dev) struct sec_ts_data *ts = input_get_drvdata(dev); struct irq_desc *desc = irq_to_desc(ts->client->irq); +#ifdef CONFIG_WAKE_GESTURES + is_suspended = true; +#endif + if (!ts->info_work_done) { input_err(true, &ts->client->dev, "%s not finished info work\n", __func__); return; @@ -2965,6 +3057,11 @@ static void sec_ts_input_close(struct input_dev *dev) ts->pressure_setting_mode = 0; +#ifdef CONFIG_WAKE_GESTURES + if (s2w_switch || dt2w_switch) + enable_irq_wake(ts->client->irq); + else +#endif if (ts->prox_power_off) { sec_ts_stop_device(ts); } else { @@ -2994,6 +3091,8 @@ static int sec_ts_remove(struct i2c_client *client) free_irq(ts->client->irq, ts); input_info(true, &ts->client->dev, "%s: irq disabled\n", __func__); + pm_qos_remove_request(&ts->pm_qos_req); + #ifdef USE_POWER_RESET_WORK cancel_delayed_work_sync(&ts->reset_work); flush_delayed_work(&ts->reset_work); diff --git a/drivers/input/touchscreen/sec_ts/sec_ts.h b/drivers/input/touchscreen/sec_ts/sec_ts.h index 52bddb4ff057..583d00f251fd 100644 --- a/drivers/input/touchscreen/sec_ts/sec_ts.h +++ b/drivers/input/touchscreen/sec_ts/sec_ts.h @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -716,6 +717,8 @@ struct sec_ts_data { int nv; + struct pm_qos_request pm_qos_req; + struct delayed_work work_read_info; struct delayed_work work_print_info; u32 print_info_cnt_open; diff --git a/drivers/input/touchscreen/sec_ts/y771/sec_ts.c b/drivers/input/touchscreen/sec_ts/y771/sec_ts.c index a281153cc1ac..cf9c7a5629c6 100644 --- a/drivers/input/touchscreen/sec_ts/y771/sec_ts.c +++ b/drivers/input/touchscreen/sec_ts/y771/sec_ts.c @@ -10,6 +10,16 @@ * published by the Free Software Foundation. */ +#ifdef CONFIG_WAKE_GESTURES +#include +#include +static bool is_suspended; +bool scr_suspended(void) +{ + return is_suspended; +} +#endif + struct sec_ts_data *tsp_info; #include "sec_ts.h" @@ -1300,6 +1310,11 @@ static void sec_ts_read_event(struct sec_ts_data *ts) input_report_key(ts->input_dev, BTN_TOUCH, 1); input_report_key(ts->input_dev, BTN_TOOL_FINGER, 1); +#ifdef CONFIG_WAKE_GESTURES + if (is_suspended) + ts->coord[t_id].x += 5000; +#endif + input_report_abs(ts->input_dev, ABS_MT_POSITION_X, ts->coord[t_id].x); input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, ts->coord[t_id].y); input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, ts->coord[t_id].major); @@ -1382,6 +1397,7 @@ static void sec_ts_read_event(struct sec_ts_data *ts) input_report_key(ts->input_dev, KEY_BLACK_UI_GESTURE, 1); break; case SEC_TS_GESTURE_CODE_FORCE: +#ifndef CONFIG_CUSTOM_FORCETOUCH if (ts->power_status == SEC_TS_STATE_POWER_ON) { if (p_gesture_status->gesture_id == SEC_TS_EVENT_PRESSURE_TOUCHED) { ts->all_force_count++; @@ -1416,6 +1432,46 @@ static void sec_ts_read_event(struct sec_ts_data *ts) ts->all_force_count++; } } +#else + if (ts->power_status == SEC_TS_STATE_POWER_ON) { + if (p_gesture_status->gesture_id == SEC_TS_EVENT_PRESSURE_RELEASED) { + input_report_key(ts->input_dev, KEY_HOMEPAGE, 0); + input_report_key(ts->input_dev, KEY_BLACK_UI_GESTURE, 1); + ts->scrub_id = SPONGE_EVENT_TYPE_AOD_HOMEKEY_RELEASE_NO_HAPTIC; + input_sync(ts->input_dev); + + haptic_homekey_release(); + } else { + input_report_key(ts->input_dev, KEY_HOMEPAGE, 1); + ts->scrub_id = SPONGE_EVENT_TYPE_AOD_HOMEKEY_PRESS; + input_sync(ts->input_dev); + + haptic_homekey_press(); + ts->all_force_count++; + } + + if (ts->pressure_setting_mode) + input_info(true, &ts->client->dev, "%s: skip force events in pressure setting mode\n", __func__); + else + input_report_key(ts->input_dev, KEY_BLACK_UI_GESTURE, 1); + } else { + if (p_gesture_status->gesture_id == SEC_TS_EVENT_PRESSURE_RELEASED) { + input_report_key(ts->input_dev, KEY_HOMEPAGE, 0); + input_report_key(ts->input_dev, KEY_BLACK_UI_GESTURE, 1); + ts->scrub_id = SPONGE_EVENT_TYPE_AOD_HOMEKEY_RELEASE_NO_HAPTIC; + input_sync(ts->input_dev); + + haptic_homekey_release(); + } else { + input_report_key(ts->input_dev, KEY_HOMEPAGE, 1); + ts->scrub_id = SPONGE_EVENT_TYPE_AOD_HOMEKEY_PRESS; + input_sync(ts->input_dev); + + haptic_homekey_press(); + ts->all_force_count++; + } + } +#endif ts->scrub_x = (p_gesture_status->gesture_data_1 << 4) | (p_gesture_status->gesture_data_3 >> 4); @@ -1464,6 +1520,9 @@ static irqreturn_t sec_ts_irq_thread(int irq, void *ptr) } #endif + /* prevent CPU from entering deep sleep */ + pm_qos_update_request(&ts->pm_qos_req, 100); + mutex_lock(&ts->eventlock); ts->irq_unhandled = ts->irq_reset = 0; @@ -1471,6 +1530,8 @@ static irqreturn_t sec_ts_irq_thread(int irq, void *ptr) mutex_unlock(&ts->eventlock); + pm_qos_update_request(&ts->pm_qos_req, PM_QOS_DEFAULT_VALUE); + return IRQ_HANDLED; } @@ -2350,6 +2411,9 @@ static int sec_ts_probe(struct i2c_client *client, const struct i2c_device_id *i "%s: TOUCH DEVICE ID : %02X, %02X, %02X, %02X, %02X\n", __func__, deviceID[0], deviceID[1], deviceID[2], deviceID[3], deviceID[4]); + pm_qos_add_request(&ts->pm_qos_req, PM_QOS_CPU_DMA_LATENCY, + PM_QOS_DEFAULT_VALUE); + ret = sec_ts_i2c_read(ts, SEC_TS_READ_FIRMWARE_INTEGRITY, &result, 1); if (ret < 0) { input_err(true, &ts->client->dev, "%s: failed to integrity check (%d)\n", __func__, ret); @@ -2525,6 +2589,7 @@ static int sec_ts_probe(struct i2c_client *client, const struct i2c_device_id *i free_irq(client->irq, ts); #endif err_irq: + pm_qos_remove_request(&ts->pm_qos_req); if (ts->plat_data->support_dex) { input_unregister_device(ts->input_dev_pad); ts->input_dev_pad = NULL; @@ -3059,6 +3124,10 @@ static int sec_ts_input_open(struct input_dev *dev) char addr[3] = { 0 }; int ret; +#ifdef CONFIG_WAKE_GESTURES + is_suspended = false; +#endif + if (!ts->info_work_done) { input_err(true, &ts->client->dev, "%s not finished info work\n", __func__); return 0; @@ -3092,6 +3161,11 @@ static int sec_ts_input_open(struct input_dev *dev) #ifdef USE_RESET_EXIT_LPM schedule_delayed_work(&ts->reset_work, msecs_to_jiffies(TOUCH_RESET_DWORK_TIME)); #else +#ifdef CONFIG_WAKE_GESTURES + if (s2w_switch || dt2w_switch) + disable_irq_wake(ts->client->irq); + else +#endif sec_ts_set_lowpowermode(ts, TO_TOUCH_MODE); #endif } else { @@ -3126,6 +3200,21 @@ static int sec_ts_input_open(struct input_dev *dev) mutex_unlock(&ts->modechange); +#ifdef CONFIG_WAKE_GESTURES + if (dt2w_switch_changed) { + dt2w_switch = dt2w_switch_temp; + dt2w_switch_changed = false; + } + if (dt2w_custom_tap_changed) { + dt2w_custom_tap = dt2w_custom_tap_temp; + dt2w_custom_tap_changed = false; + } + if (s2w_switch_changed) { + s2w_switch = s2w_switch_temp; + s2w_switch_changed = false; + } +#endif + #ifdef CONFIG_SEC_FACTORY check_panel_id(ts); #endif @@ -3150,6 +3239,10 @@ static void sec_ts_input_close(struct input_dev *dev) int ret; u8 data[6] = {SEC_TS_CMD_SPONGE_OFFSET_UTC, 0}; +#ifdef CONFIG_WAKE_GESTURES + is_suspended = true; +#endif + if (!ts->info_work_done) { input_err(true, &ts->client->dev, "%s not finished info work\n", __func__); return; @@ -3210,6 +3303,11 @@ static void sec_ts_input_close(struct input_dev *dev) ts->pressure_setting_mode = 0; +#ifdef CONFIG_WAKE_GESTURES + if (s2w_switch || dt2w_switch) + enable_irq_wake(ts->client->irq); + else +#endif if (ts->prox_power_off) { sec_ts_stop_device(ts); } else { @@ -3262,6 +3360,8 @@ static int sec_ts_remove(struct i2c_client *client) free_irq(ts->client->irq, ts); input_info(true, &ts->client->dev, "%s: irq disabled\n", __func__); + pm_qos_remove_request(&ts->pm_qos_req); + #ifdef USE_POWER_RESET_WORK cancel_delayed_work_sync(&ts->reset_work); flush_delayed_work(&ts->reset_work); diff --git a/drivers/input/touchscreen/sec_ts/y771/sec_ts.h b/drivers/input/touchscreen/sec_ts/y771/sec_ts.h index 1d211220742a..cedf5457db1e 100644 --- a/drivers/input/touchscreen/sec_ts/y771/sec_ts.h +++ b/drivers/input/touchscreen/sec_ts/y771/sec_ts.h @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -743,6 +744,8 @@ struct sec_ts_data { int nv; int disassemble_count; + struct pm_qos_request pm_qos_req; + struct delayed_work work_read_info; struct delayed_work work_print_info; u32 print_info_cnt_open; diff --git a/drivers/input/touchscreen/wake_gestures.c b/drivers/input/touchscreen/wake_gestures.c new file mode 100644 index 000000000000..5122f2e356f4 --- /dev/null +++ b/drivers/input/touchscreen/wake_gestures.c @@ -0,0 +1,821 @@ +/* + * drivers/input/touchscreen/wake_gestures.c + * + * + * Copyright (c) 2013, Dennis Rassmann + * Copyright (c) 2013-18 Aaron Segaert + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Tuneables */ +#define WG_DEBUG 0 +#define WG_DEFAULT 0 +#define DT2W_DEFAULT 0 +#define DT2W_DEFAULT_TAP 2 +#define S2W_DEFAULT 0 +#define S2S_DEFAULT 0 +#define WG_PWRKEY_DUR 60 + +/* Samsung GS9 */ +#define SWEEP_Y_MAX 4080 +#define SWEEP_X_MAX 4095 +#define SWEEP_EDGE 200 +#define SWEEP_Y_LIMIT SWEEP_Y_MAX-SWEEP_EDGE +#define SWEEP_X_LIMIT SWEEP_X_MAX-SWEEP_EDGE +#define SWEEP_X_B1 1200 +#define SWEEP_X_B2 2200 +#define SWEEP_X_START 1500 +#define SWEEP_X_FINAL 1500 +#define SWEEP_Y_START 2000 +#define SWEEP_Y_NEXT 200 +#define DT2W_FEATHER 150 +#define DT2W_TIME 500 + +/* Wake Gestures */ +#define SWEEP_TIMEOUT 300 +#define TRIGGER_TIMEOUT 500 +#define WAKE_GESTURE 0x0b +#define SWEEP_RIGHT 0x01 +#define SWEEP_LEFT 0x02 +#define SWEEP_UP 0x04 +#define SWEEP_DOWN 0x08 +#define VIB_STRENGTH 30 + +#define WAKE_GESTURES_ENABLED 1 + +#define LOGTAG "WG" + +#if (WAKE_GESTURES_ENABLED) +int gestures_switch = WG_DEFAULT; +static struct input_dev *gesture_dev; +#endif + +/* Resources */ +int s2w_switch = S2W_DEFAULT; +int s2w_switch_temp; +bool s2w_switch_changed = false; +int dt2w_switch = DT2W_DEFAULT; +int dt2w_switch_temp; +bool dt2w_switch_changed = false; +int dt2w_custom_tap = DT2W_DEFAULT_TAP; +int dt2w_custom_tap_temp; +bool dt2w_custom_tap_changed = false; +static int s2s_switch = S2S_DEFAULT; +static int touch_x = 0, touch_y = 0; +static bool touch_x_called = false, touch_y_called = false; +static bool exec_countx = true, exec_county = true, exec_count = true; +static bool barrierx[2] = {false, false}, barriery[2] = {false, false}; +static int firstx = 0, firsty = 0; +static int sweep_y_limit = SWEEP_Y_LIMIT; +static int sweep_x_limit = SWEEP_X_LIMIT; +static unsigned long firstx_time = 0, firsty_time = 0; +static unsigned long pwrtrigger_time[2] = {0, 0}; +static unsigned long long tap_time_pre = 0; +static int touch_nr = 0, x_pre = 0, y_pre = 0; +static bool touch_cnt = true; +static int vib_strength = VIB_STRENGTH; + +static struct input_dev * wake_dev; +static DEFINE_MUTEX(pwrkeyworklock); +static struct workqueue_struct *s2w_input_wq; +static struct workqueue_struct *dt2w_input_wq; +static struct work_struct s2w_input_work; +static struct work_struct dt2w_input_work; + +static bool is_suspended(void) +{ + return scr_suspended(); +} + +/* Wake Gestures */ +#if (WAKE_GESTURES_ENABLED) +static void report_gesture(int gest) +{ + pwrtrigger_time[1] = pwrtrigger_time[0]; + pwrtrigger_time[0] = ktime_to_ms(ktime_get()); + + if (pwrtrigger_time[0] - pwrtrigger_time[1] < TRIGGER_TIMEOUT) + return; + + input_report_rel(gesture_dev, WAKE_GESTURE, gest); + input_sync(gesture_dev); +} +#endif + +/* PowerKey work func */ +static void wake_presspwr(struct work_struct * wake_presspwr_work) { + if (!mutex_trylock(&pwrkeyworklock)) + return; + + input_event(wake_dev, EV_KEY, KEY_POWER, 1); + input_event(wake_dev, EV_SYN, 0, 0); + msleep(WG_PWRKEY_DUR); + input_event(wake_dev, EV_KEY, KEY_POWER, 0); + input_event(wake_dev, EV_SYN, 0, 0); + msleep(WG_PWRKEY_DUR); + mutex_unlock(&pwrkeyworklock); + + vib_trigger(vib_strength); + + return; +} +static DECLARE_WORK(wake_presspwr_work, wake_presspwr); + +/* PowerKey trigger */ +static void wake_pwrtrigger(void) { + pwrtrigger_time[1] = pwrtrigger_time[0]; + pwrtrigger_time[0] = ktime_to_ms(ktime_get()); + + if (pwrtrigger_time[0] - pwrtrigger_time[1] < TRIGGER_TIMEOUT) + return; + + schedule_work(&wake_presspwr_work); + + return; +} + + +/* Doubletap2wake */ + +static void doubletap2wake_reset(void) { + exec_count = true; + touch_nr = 0; + tap_time_pre = 0; + x_pre = 0; + y_pre = 0; +} + +static unsigned int calc_feather(int coord, int prev_coord) { + int calc_coord = 0; + calc_coord = coord-prev_coord; + if (calc_coord < 0) + calc_coord = calc_coord * (-1); + return calc_coord; +} + +/* init a new touch */ +static void new_touch(int x, int y) { + tap_time_pre = ktime_to_ms(ktime_get()); + x_pre = x; + y_pre = y; + touch_nr++; +} + +/* Doubletap2wake main function */ +static void detect_doubletap2wake(int x, int y, bool st) +{ + bool single_touch = st; +#if WG_DEBUG + pr_info(LOGTAG"x,y(%4d,%4d) tap_time_pre:%llu\n", + x, y, tap_time_pre); +#endif + if (x < SWEEP_EDGE || x > sweep_x_limit) + return; + if (y < SWEEP_EDGE || y > sweep_y_limit) + return; + + if ((single_touch) && (dt2w_switch) && (exec_count) && (touch_cnt)) { + touch_cnt = false; + if (touch_nr == 0) { + new_touch(x, y); + } else { + if ((calc_feather(x, x_pre) < DT2W_FEATHER) && + (calc_feather(y, y_pre) < DT2W_FEATHER) && + ((ktime_to_ms(ktime_get())-tap_time_pre) < DT2W_TIME)) + touch_nr++; + else { + doubletap2wake_reset(); + new_touch(x, y); + } + } + + if ((touch_nr >= dt2w_custom_tap)) { + exec_count = false; +#if (WAKE_GESTURES_ENABLED) + if (gestures_switch) { + report_gesture(5); + } else { +#endif + wake_pwrtrigger(); +#if (WAKE_GESTURES_ENABLED) + } +#endif + doubletap2wake_reset(); + } + } +} + + +/* Sweep2wake/Sweep2sleep */ +static void sweep2wake_reset(void) { + + exec_countx = true; + barrierx[0] = false; + barrierx[1] = false; + firstx = 0; + firstx_time = 0; + + exec_county = true; + barriery[0] = false; + barriery[1] = false; + firsty = 0; + firsty_time = 0; +} + +/* Sweep2wake main functions*/ +static void detect_sweep2wake_v(int x, int y, bool st) +{ + int prevy = 0, nexty = 0; + bool single_touch = st; + + if (firsty == 0) { + firsty = y; + firsty_time = ktime_to_ms(ktime_get()); + } + +#if WG_DEBUG + pr_info(LOGTAG"s2w vert x,y(%4d,%4d) single:%s\n", + x, y, (single_touch) ? "true" : "false"); +#endif + + //sweep up + if (firsty > SWEEP_Y_START && single_touch && s2w_switch & SWEEP_UP) { + prevy = firsty; + nexty = prevy - SWEEP_Y_NEXT; + if (barriery[0] == true || (y < prevy && y > nexty)) { + prevy = nexty; + nexty -= SWEEP_Y_NEXT; + barriery[0] = true; + if (barriery[1] == true || (y < prevy && y > nexty)) { + prevy = nexty; + barriery[1] = true; + if (y < prevy) { + if (y < (nexty - SWEEP_Y_NEXT)) { + if (exec_county && (ktime_to_ms(ktime_get()) - firsty_time < SWEEP_TIMEOUT)) { +#if (WAKE_GESTURES_ENABLED) + if (gestures_switch) { + report_gesture(3); + } else { +#endif + wake_pwrtrigger(); +#if (WAKE_GESTURES_ENABLED) + } +#endif + exec_county = false; + } + } + } + } + } + //sweep down + } else if (firsty <= SWEEP_Y_START && single_touch && s2w_switch & SWEEP_DOWN) { + prevy = firsty; + nexty = prevy + SWEEP_Y_NEXT; + if (barriery[0] == true || (y > prevy && y < nexty)) { + prevy = nexty; + nexty += SWEEP_Y_NEXT; + barriery[0] = true; + if (barriery[1] == true || (y > prevy && y < nexty)) { + prevy = nexty; + barriery[1] = true; + if (y > prevy) { + if (y > (nexty + SWEEP_Y_NEXT)) { + if (exec_county && (ktime_to_ms(ktime_get()) - firsty_time < SWEEP_TIMEOUT)) { +#if (WAKE_GESTURES_ENABLED) + if (gestures_switch) { + report_gesture(4); + } else { +#endif + wake_pwrtrigger(); +#if (WAKE_GESTURES_ENABLED) + } +#endif + exec_county = false; + } + } + } + } + } + } + +} + +static void detect_sweep2wake_h(int x, int y, bool st, bool scr_suspended) +{ + int prevx = 0, nextx = 0; + bool single_touch = st; + + if (!scr_suspended && y < sweep_y_limit) { + sweep2wake_reset(); + return; + } + + if (x < 0) + return; + + if (firstx == 0) { + firstx = x; + firstx_time = ktime_to_ms(ktime_get()); + } + +#if WG_DEBUG + pr_info(LOGTAG"s2w Horz x,y(%4d,%4d) wake:%s\n", + x, y, (scr_suspended) ? "true" : "false"); +#endif + + //left->right + if (firstx < SWEEP_X_START && single_touch && + ((scr_suspended && (s2w_switch & SWEEP_RIGHT)) || + (!scr_suspended && (s2s_switch & SWEEP_RIGHT)))) { + prevx = 0; + nextx = SWEEP_X_B1; + if ((barrierx[0] == true) || + ((x > prevx) && (x < nextx))) { + prevx = nextx; + nextx = SWEEP_X_B2; + barrierx[0] = true; + if ((barrierx[1] == true) || + ((x > prevx) && (x < nextx))) { + prevx = nextx; + barrierx[1] = true; + if (x > prevx) { + if (x > (SWEEP_X_MAX - SWEEP_X_FINAL)) { + if (exec_countx && (ktime_to_ms(ktime_get()) - firstx_time < SWEEP_TIMEOUT)) { +#if (WAKE_GESTURES_ENABLED) + if (gestures_switch && scr_suspended) { + report_gesture(1); + } else { +#endif + wake_pwrtrigger(); +#if (WAKE_GESTURES_ENABLED) + } +#endif + exec_countx = false; + } + } + } + } + } + //right->left + } else if (firstx >= SWEEP_X_START && single_touch && + ((scr_suspended && (s2w_switch & SWEEP_LEFT)) || + (!scr_suspended && (s2s_switch & SWEEP_LEFT)))) { + prevx = (SWEEP_X_MAX - SWEEP_X_FINAL); + nextx = SWEEP_X_B2; + if ((barrierx[0] == true) || + ((x < prevx) && (x > nextx))) { + prevx = nextx; + nextx = SWEEP_X_B1; + barrierx[0] = true; + if ((barrierx[1] == true) || + ((x < prevx) && (x > nextx))) { + prevx = nextx; + barrierx[1] = true; + if (x < prevx) { + if (x < SWEEP_X_FINAL) { + if (exec_countx) { +#if (WAKE_GESTURES_ENABLED) + if (gestures_switch && scr_suspended) { + report_gesture(2); + } else { +#endif + wake_pwrtrigger(); +#if (WAKE_GESTURES_ENABLED) + } +#endif + exec_countx = false; + } + } + } + } + } + } +} + +static void s2w_input_callback(struct work_struct *unused) +{ + detect_sweep2wake_h(touch_x, touch_y, true, is_suspended()); + if (is_suspended()) + detect_sweep2wake_v(touch_x, touch_y, true); + + return; +} + +static void dt2w_input_callback(struct work_struct *unused) +{ + + if (is_suspended() && dt2w_switch) + detect_doubletap2wake(touch_x, touch_y, true); + return; +} + +static void wg_input_event(struct input_handle *handle, unsigned int type, + unsigned int code, int value) +{ + if (is_suspended() && code == ABS_MT_POSITION_X) { + value -= 5000; + } + +#if WG_DEBUG + pr_info("wg: code: %s|%u, val: %i\n", + ((code==ABS_MT_POSITION_X) ? "X" : + (code==ABS_MT_POSITION_Y) ? "Y" : + (code==ABS_MT_TRACKING_ID) ? "ID" : + "undef"), code, value); +#endif + + if (code == ABS_MT_SLOT) { + sweep2wake_reset(); + doubletap2wake_reset(); + return; + } + + if (code == ABS_MT_TRACKING_ID && value == -1) { + sweep2wake_reset(); + touch_cnt = true; + queue_work_on(0, dt2w_input_wq, &dt2w_input_work); + return; + } + + if (code == ABS_MT_POSITION_X) { + touch_x = value; + touch_x_called = true; + } + + if (code == ABS_MT_POSITION_Y) { + touch_y = value; + touch_y_called = true; + } + + if (touch_x_called && touch_y_called) { + touch_x_called = false; + touch_y_called = false; + queue_work_on(0, s2w_input_wq, &s2w_input_work); + } else if (!is_suspended() && touch_x_called && !touch_y_called) { + touch_x_called = false; + touch_y_called = false; + queue_work_on(0, s2w_input_wq, &s2w_input_work); + } +} + +static int input_dev_filter(struct input_dev *dev) { + if (strstr(dev->name, "sec_touchscreen")) { + return 0; + } else { + return 1; + } +} + +static int wg_input_connect(struct input_handler *handler, + struct input_dev *dev, const struct input_device_id *id) { + struct input_handle *handle; + int error; + + if (input_dev_filter(dev)) + return -ENODEV; + + handle = kzalloc(sizeof(struct input_handle), GFP_KERNEL); + if (!handle) + return -ENOMEM; + + handle->dev = dev; + handle->handler = handler; + handle->name = "wg"; + + error = input_register_handle(handle); + if (error) + goto err2; + + error = input_open_device(handle); + if (error) + goto err1; + + return 0; +err1: + input_unregister_handle(handle); +err2: + kfree(handle); + return error; +} + +static void wg_input_disconnect(struct input_handle *handle) { + input_close_device(handle); + input_unregister_handle(handle); + kfree(handle); +} + +static const struct input_device_id wg_ids[] = { + { .driver_info = 1 }, + { }, +}; + +static struct input_handler wg_input_handler = { + .event = wg_input_event, + .connect = wg_input_connect, + .disconnect = wg_input_disconnect, + .name = "wg_inputreq", + .id_table = wg_ids, +}; + + +/* + * SYSFS stuff below here + */ +static ssize_t sweep2wake_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + size_t count = 0; + + count += sprintf(buf, "%d\n", s2w_switch); + + return count; +} + +static ssize_t sweep2wake_dump(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + sscanf(buf, "%d ", &s2w_switch_temp); + if (s2w_switch_temp < 0 || s2w_switch_temp > 15) + s2w_switch_temp = 0; + + if (!scr_suspended()) + s2w_switch = s2w_switch_temp; + else + s2w_switch_changed = true; + + return count; +} + +static DEVICE_ATTR(sweep2wake, (S_IWUSR|S_IRUGO), + sweep2wake_show, sweep2wake_dump); + +static ssize_t sweep2sleep_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + size_t count = 0; + count += sprintf(buf, "%d\n", s2s_switch); + return count; +} + +static ssize_t sweep2sleep_dump(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + sscanf(buf, "%d ", &s2s_switch); + if (s2s_switch < 0 || s2s_switch > 3) + s2s_switch = 0; + + return count; +} + +static DEVICE_ATTR(sweep2sleep, (S_IWUSR|S_IRUGO), + sweep2sleep_show, sweep2sleep_dump); + +static ssize_t doubletap2wake_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + size_t count = 0; + + count += sprintf(buf, "%d\n", dt2w_switch); + + return count; +} + +static ssize_t doubletap2wake_dump(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + sscanf(buf, "%d ", &dt2w_switch_temp); + if (dt2w_switch_temp < 0 || dt2w_switch_temp > 1) + dt2w_switch_temp = 0; + + if (!scr_suspended()) + dt2w_switch = dt2w_switch_temp; + else + dt2w_switch_changed = true; + + return count; +} + +static DEVICE_ATTR(doubletap2wake, (S_IWUSR|S_IRUGO), + doubletap2wake_show, doubletap2wake_dump); + +static ssize_t doubletap2waketaps_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + size_t count = 0; + + count += sprintf(buf, "%d\n", dt2w_custom_tap); + + return count; +} + +static ssize_t doubletap2waketaps_dump(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + sscanf(buf, "%d ", &dt2w_custom_tap_temp); + if (dt2w_custom_tap_temp <= 0) + dt2w_custom_tap_temp = DT2W_DEFAULT_TAP; + + if (!scr_suspended()) + dt2w_custom_tap = dt2w_custom_tap_temp; + else + dt2w_custom_tap_changed = true; + + return count; +} + +static DEVICE_ATTR(doubletap2waketaps, (S_IWUSR|S_IRUGO), + doubletap2waketaps_show, doubletap2waketaps_dump); + +#if (WAKE_GESTURES_ENABLED) +static ssize_t wake_gestures_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + size_t count = 0; + count += sprintf(buf, "%d\n", gestures_switch); + return count; +} +static ssize_t wake_gestures_dump(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + sscanf(buf, "%d ", &gestures_switch); + if (gestures_switch < 0 || gestures_switch > 1) + gestures_switch = 0; + return count; +} + +static DEVICE_ATTR(wake_gestures, (S_IWUSR|S_IRUGO), + wake_gestures_show, wake_gestures_dump); +#endif + +static ssize_t vib_strength_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + size_t count = 0; + count += sprintf(buf, "%d\n", vib_strength); + return count; +} + +static ssize_t vib_strength_dump(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + sscanf(buf, "%d ",&vib_strength); + if (vib_strength < 0 || vib_strength > 90) + vib_strength = 20; + + return count; +} + +static DEVICE_ATTR(vib_strength, (S_IWUSR|S_IRUGO), + vib_strength_show, vib_strength_dump); + + +/* + * INIT / EXIT stuff below here + */ + +struct kobject *android_touch_kobj; +EXPORT_SYMBOL_GPL(android_touch_kobj); + +static int __init wake_gestures_init(void) +{ + int rc = 0; + + wake_dev = input_allocate_device(); + if (!wake_dev) { + pr_err("Failed to allocate wake_dev\n"); + goto err_alloc_dev; + } + + input_set_capability(wake_dev, EV_KEY, KEY_POWER); + wake_dev->name = "wg_pwrkey"; + wake_dev->phys = "wg_pwrkey/input0"; + + rc = input_register_device(wake_dev); + if (rc) { + pr_err("%s: input_register_device err=%d\n", __func__, rc); + goto err_input_dev; + } + + rc = input_register_handler(&wg_input_handler); + if (rc) + pr_err("%s: Failed to register wg_input_handler\n", __func__); + + s2w_input_wq = create_workqueue("s2wiwq"); + if (!s2w_input_wq) { + pr_err("%s: Failed to create s2wiwq workqueue\n", __func__); + return -EFAULT; + } + INIT_WORK(&s2w_input_work, s2w_input_callback); + + dt2w_input_wq = create_workqueue("dt2wiwq"); + if (!dt2w_input_wq) { + pr_err("%s: Failed to create dt2wiwq workqueue\n", __func__); + return -EFAULT; + } + INIT_WORK(&dt2w_input_work, dt2w_input_callback); + +#if (WAKE_GESTURES_ENABLED) + gesture_dev = input_allocate_device(); + if (!gesture_dev) { + pr_err("Failed to allocate gesture_dev\n"); + goto err_alloc_dev; + } + + gesture_dev->name = "wake_gesture"; + gesture_dev->phys = "wake_gesture/input0"; + input_set_capability(gesture_dev, EV_REL, WAKE_GESTURE); + + rc = input_register_device(gesture_dev); + if (rc) { + pr_err("%s: input_register_device err=%d\n", __func__, rc); + goto err_gesture_dev; + } +#endif + + android_touch_kobj = kobject_create_and_add("android_touch", NULL) ; + if (android_touch_kobj == NULL) { + pr_warn("%s: android_touch_kobj create_and_add failed\n", __func__); + } + rc = sysfs_create_file(android_touch_kobj, &dev_attr_sweep2wake.attr); + if (rc) { + pr_warn("%s: sysfs_create_file failed for sweep2wake\n", __func__); + } + rc = sysfs_create_file(android_touch_kobj, &dev_attr_sweep2sleep.attr); + if (rc) { + pr_warn("%s: sysfs_create_file failed for sweep2sleep\n", __func__); + } + rc = sysfs_create_file(android_touch_kobj, &dev_attr_doubletap2wake.attr); + if (rc) { + pr_warn("%s: sysfs_create_file failed for doubletap2wake\n", __func__); + } + rc = sysfs_create_file(android_touch_kobj, &dev_attr_doubletap2waketaps.attr); + if (rc) { + pr_warn("%s: sysfs_create_file failed for doubletap2waketaps\n", __func__); + } + rc = sysfs_create_file(android_touch_kobj, &dev_attr_vib_strength.attr); + if (rc) { + pr_warn("%s: sysfs_create_file failed for vib_strength\n", __func__); + } +#if (WAKE_GESTURES_ENABLED) + rc = sysfs_create_file(android_touch_kobj, &dev_attr_wake_gestures.attr); + if (rc) { + pr_warn("%s: sysfs_create_file failed for wake_gestures\n", __func__); + } + + return 0; + +err_gesture_dev: + input_free_device(gesture_dev); +err_input_dev: + input_free_device(wake_dev); +err_alloc_dev: +#endif + + return 0; +} + +static void __exit wake_gestures_exit(void) +{ + kobject_del(android_touch_kobj); + input_unregister_handler(&wg_input_handler); + destroy_workqueue(s2w_input_wq); + destroy_workqueue(dt2w_input_wq); + input_unregister_device(wake_dev); + input_free_device(wake_dev); +#if (WAKE_GESTURES_ENABLED) + input_unregister_device(gesture_dev); + input_free_device(gesture_dev); +#endif + + return; +} + +module_init(wake_gestures_init); +module_exit(wake_gestures_exit); + diff --git a/drivers/kperfmon/Makefile b/drivers/kperfmon/Makefile index 13ff6a6cbdbd..c687701a6ae6 100644 --- a/drivers/kperfmon/Makefile +++ b/drivers/kperfmon/Makefile @@ -42,7 +42,7 @@ $(info kperfmon_DUMMY="perflog.h file is missing.") endif ifeq ($(FLAG), 1) -$(info kperfmon_DUMMY="$(shell cp -f $(srctree)/drivers/kperfmon/ologk.h $(srctree)/include/linux/)") +# $(info kperfmon_DUMMY="$(shell cp -f $(srctree)/drivers/kperfmon/ologk.h $(srctree)/include/linux/)") obj-y += kperfmon.o else obj-y += ologk.o diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig index f006ae060642..1a06cb03e8e0 100644 --- a/drivers/leds/Kconfig +++ b/drivers/leds/Kconfig @@ -583,7 +583,7 @@ config LEDS_MENF21BMC will be called leds-menf21bmc. config LEDS_KTD2692 - tristate "LED support for KTD2692 flash LED controller" + bool "LED support for KTD2692 flash LED controller" depends on LEDS_CLASS_FLASH && OF depends on GPIOLIB || COMPILE_TEST help diff --git a/drivers/leds/leds-max77705-rgb.c b/drivers/leds/leds-max77705-rgb.c index 75029c5c969a..ae1637ba70e7 100644 --- a/drivers/leds/leds-max77705-rgb.c +++ b/drivers/leds/leds-max77705-rgb.c @@ -91,6 +91,10 @@ static u8 led_pattern_num; static unsigned int octa_color; +static unsigned int led_enable_fade = 1; +static unsigned int led_fade_time_up = 200; +static unsigned int led_fade_time_down = 200; + enum max77705_led_color { WHITE, RED, @@ -290,17 +294,17 @@ static int max77705_rgb_ramp(struct device *dev, int ramp_up, int ramp_down) pr_info("leds-max77705-rgb: %s\n", __func__); - if (ramp_up <= 800) { + if (ramp_up <= led_fade_time_up) { ramp_up /= 100; } else { - ramp_up = (ramp_up - 800) * 2 + 800; + ramp_up = (ramp_up - led_fade_time_up) * 2 + led_fade_time_up; ramp_up /= 100; } - if (ramp_down <= 800) { + if (ramp_down <= led_fade_time_down) { ramp_down /= 100; } else { - ramp_down = (ramp_down - 800) * 2 + 800; + ramp_down = (ramp_down - led_fade_time_down) * 2 + led_fade_time_down; ramp_down /= 100; } @@ -608,19 +612,35 @@ static ssize_t store_max77705_rgb_pattern(struct device *dev, max77705_rgb_set_state(&max77705_rgb->led[RED], led_dynamic_current, LED_BLINK); break; case MISSED_NOTI: - max77705_rgb_blink(dev, 500, 5000); + if (led_enable_fade) { + max77705_rgb_ramp(dev, led_fade_time_up, led_fade_time_down); + max77705_rgb_blink(dev, led_fade_time_up, 5000); + } else { + max77705_rgb_blink(dev, 500, 5000); + } max77705_rgb_set_state(&max77705_rgb->led[BLUE], led_dynamic_current, LED_BLINK); + max77705_rgb_set_state(&max77705_rgb->led[GREEN], led_dynamic_current, LED_BLINK); break; case LOW_BATTERY: - max77705_rgb_blink(dev, 500, 5000); + if (led_enable_fade) { + max77705_rgb_ramp(dev, led_fade_time_up, led_fade_time_down); + max77705_rgb_blink(dev, led_fade_time_up, 5000); + } else { + max77705_rgb_blink(dev, 500, 5000); + } max77705_rgb_set_state(&max77705_rgb->led[RED], led_dynamic_current, LED_BLINK); break; case FULLY_CHARGED: max77705_rgb_set_state(&max77705_rgb->led[GREEN], led_dynamic_current, LED_ALWAYS_ON); break; case POWERING: - max77705_rgb_ramp(dev, 800, 800); - max77705_rgb_blink(dev, 200, 200); + if (led_enable_fade) { + max77705_rgb_ramp(dev, led_fade_time_up, led_fade_time_down); + max77705_rgb_blink(dev, led_fade_time_up, 5000); + } else { + max77705_rgb_ramp(dev, 800, 800); + max77705_rgb_blink(dev, 200, 200); + } max77705_rgb_set_state(&max77705_rgb->led[BLUE], led_dynamic_current, LED_ALWAYS_ON); max77705_rgb_set_state(&max77705_rgb->led[GREEN], led_dynamic_current, LED_BLINK); break; @@ -753,7 +773,9 @@ static ssize_t store_max77705_rgb_blink(struct device *dev, } /*Set LED blink mode*/ - max77705_rgb_blink(dev, delay_on_time, delay_off_time); + if (led_enable_fade && delay_on_time > 0) + max77705_rgb_ramp(dev, led_fade_time_up, led_fade_time_down); + max77705_rgb_blink(dev, delay_on_time, delay_off_time); ret = max77705_update_reg(max77705_rgb->i2c, MAX77705_RGBLED_REG_LEDEN, led_en, 0xff); if (ret < 0) @@ -912,16 +934,89 @@ static ssize_t led_blink_store(struct device *dev, return count; } +static ssize_t led_fade_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int ret; + ret = snprintf(buf, RGB_BUFSIZE, "%d\n", led_enable_fade); + pr_info("[LED] %s: led_fade=%d\n", __func__, led_enable_fade); + + return ret; +} + +static ssize_t led_fade_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + int retval; + int enabled = 0; + retval = sscanf(buf, "%d", &enabled); + if (retval != 0 && (enabled == 0 || enabled == 1)) + led_enable_fade = enabled; + + return count; +} + +static ssize_t led_fade_time_up_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int ret; + ret = snprintf(buf, RGB_BUFSIZE, "%d\n", led_fade_time_up); + pr_info("[LED] %s: led_fade=%d\n", __func__, led_fade_time_up); + + return ret; +} + +static ssize_t led_fade_time_up_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + int retval; + int val = 0; + retval = sscanf(buf, "%d", &val); + if (retval != 0 && val >= 100 && val <= 4000) + led_fade_time_up = val; + + return count; +} + +static ssize_t led_fade_time_down_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int ret; + ret = snprintf(buf, RGB_BUFSIZE, "%d\n", led_fade_time_down); + pr_info("[LED] %s: led_fade=%d\n", __func__, led_fade_time_down); + + return ret; +} + +static ssize_t led_fade_time_down_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + int retval; + int val = 0; + retval = sscanf(buf, "%d", &val); + if (retval != 0 && val >= 100 && val <= 4000) + led_fade_time_down = val; + + return count; +} + + /* permission for sysfs node */ static DEVICE_ATTR(delay_on, 0640, led_delay_on_show, led_delay_on_store); static DEVICE_ATTR(delay_off, 0640, led_delay_off_show, led_delay_off_store); -static DEVICE_ATTR(blink, 0220, NULL, led_blink_store); +static DEVICE_ATTR(blink, 0640, NULL, led_blink_store); +static DEVICE_ATTR(led_fade, 0664, led_fade_show, led_fade_store); +static DEVICE_ATTR(led_fade_time_up, 0664, led_fade_time_up_show, led_fade_time_up_store); +static DEVICE_ATTR(led_fade_time_down, 0664, led_fade_time_down_show, led_fade_time_down_store); #ifdef SEC_LED_SPECIFIC /* below nodes is SAMSUNG specific nodes */ -static DEVICE_ATTR(led_r, 0220, NULL, store_led_r); -static DEVICE_ATTR(led_g, 0220, NULL, store_led_g); -static DEVICE_ATTR(led_b, 0220, NULL, store_led_b); +static DEVICE_ATTR(led_r, 0660, NULL, store_led_r); +static DEVICE_ATTR(led_g, 0660, NULL, store_led_g); +static DEVICE_ATTR(led_b, 0660, NULL, store_led_b); /* led_pattern node permission is 222 */ /* To access sysfs node from other groups */ static DEVICE_ATTR(led_pattern, 0660, show_max77705_rgb_pattern, store_max77705_rgb_pattern); @@ -950,6 +1045,9 @@ static struct attribute *sec_led_attributes[] = { &dev_attr_led_blink.attr, &dev_attr_led_brightness.attr, &dev_attr_led_lowpower.attr, + &dev_attr_led_fade.attr, + &dev_attr_led_fade_time_up.attr, + &dev_attr_led_fade_time_down.attr, NULL, }; diff --git a/drivers/leds/leds-max77865-rgb.c b/drivers/leds/leds-max77865-rgb.c index 984fa7584f88..5a3a6fca4e56 100644 --- a/drivers/leds/leds-max77865-rgb.c +++ b/drivers/leds/leds-max77865-rgb.c @@ -90,6 +90,10 @@ static u8 led_lowpower_mode; static unsigned int octa_color; +static unsigned int led_enable_fade = 1; +static unsigned int led_fade_time_up = 200; +static unsigned int led_fade_time_down = 200; + enum max77865_led_color { WHITE, RED, @@ -289,17 +293,17 @@ static int max77865_rgb_ramp(struct device *dev, int ramp_up, int ramp_down) pr_info("leds-max77865-rgb: %s\n", __func__); - if (ramp_up <= 800) { + if (ramp_up <= led_fade_time_up) { ramp_up /= 100; } else { - ramp_up = (ramp_up - 800) * 2 + 800; + ramp_up = (ramp_up - led_fade_time_up) * 2 + led_fade_time_up; ramp_up /= 100; } - if (ramp_down <= 800) { + if (ramp_down <= led_fade_time_down) { ramp_down /= 100; } else { - ramp_down = (ramp_down - 800) * 2 + 800; + ramp_down = (ramp_down - led_fade_time_down) * 2 + led_fade_time_down; ramp_down /= 100; } @@ -586,19 +590,35 @@ static ssize_t store_max77865_rgb_pattern(struct device *dev, max77865_rgb_set_state(&max77865_rgb->led[RED], led_dynamic_current, LED_BLINK); break; case MISSED_NOTI: - max77865_rgb_blink(dev, 500, 5000); + if (led_enable_fade) { + max77865_rgb_ramp(dev, led_fade_time_up, led_fade_time_down); + max77865_rgb_blink(dev, led_fade_time_up, 5000); + } else { + max77865_rgb_blink(dev, 500, 5000); + } max77865_rgb_set_state(&max77865_rgb->led[BLUE], led_dynamic_current, LED_BLINK); + max77865_rgb_set_state(&max77865_rgb->led[GREEN], led_dynamic_current, LED_BLINK); break; case LOW_BATTERY: - max77865_rgb_blink(dev, 500, 5000); + if (led_enable_fade) { + max77865_rgb_ramp(dev, led_fade_time_up, led_fade_time_down); + max77865_rgb_blink(dev, led_fade_time_up, 5000); + } else { + max77865_rgb_blink(dev, 500, 5000); + } max77865_rgb_set_state(&max77865_rgb->led[RED], led_dynamic_current, LED_BLINK); break; case FULLY_CHARGED: max77865_rgb_set_state(&max77865_rgb->led[GREEN], led_dynamic_current, LED_ALWAYS_ON); break; case POWERING: - max77865_rgb_ramp(dev, 800, 800); - max77865_rgb_blink(dev, 200, 200); + if (led_enable_fade) { + max77865_rgb_ramp(dev, led_fade_time_up, led_fade_time_down); + max77865_rgb_blink(dev, led_fade_time_up, 5000); + } else { + max77865_rgb_ramp(dev, 800, 800); + max77865_rgb_blink(dev, 200, 200); + } max77865_rgb_set_state(&max77865_rgb->led[BLUE], led_dynamic_current, LED_ALWAYS_ON); max77865_rgb_set_state(&max77865_rgb->led[GREEN], led_dynamic_current, LED_BLINK); break; @@ -704,7 +724,9 @@ static ssize_t store_max77865_rgb_blink(struct device *dev, max77865_rgb_set_state(&max77865_rgb->led[BLUE], led_b_brightness, LED_BLINK); /*Set LED blink mode*/ - max77865_rgb_blink(dev, delay_on_time, delay_off_time); + if (led_enable_fade && delay_on_time > 0) + max77865_rgb_ramp(dev, led_fade_time_up, led_fade_time_down); + max77865_rgb_blink(dev, delay_on_time, delay_off_time); pr_info("leds-max77865-rgb: %s, delay_on_time: %d, delay_off_time: %d, color: 0x%x, lowpower: %i\n", __func__, delay_on_time, delay_off_time, led_brightness, led_lowpower_mode); @@ -867,10 +889,82 @@ static ssize_t led_blink_store(struct device *dev, return count; } +static ssize_t led_fade_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int ret; + ret = snprintf(buf, RGB_BUFSIZE, "%d\n", led_enable_fade); + pr_info("[LED] %s: led_fade=%d\n", __func__, led_enable_fade); + + return ret; +} + +static ssize_t led_fade_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + int retval; + int enabled = 0; + retval = sscanf(buf, "%d", &enabled); + if (retval != 0 && (enabled == 0 || enabled == 1)) + led_enable_fade = enabled; + + return count; +} + +static ssize_t led_fade_time_up_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int ret; + ret = snprintf(buf, RGB_BUFSIZE, "%d\n", led_fade_time_up); + pr_info("[LED] %s: led_fade=%d\n", __func__, led_fade_time_up); + + return ret; +} + +static ssize_t led_fade_time_up_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + int retval; + int val = 0; + retval = sscanf(buf, "%d", &val); + if (retval != 0 && val >= 100 && val <= 4000) + led_fade_time_up = val; + + return count; +} + +static ssize_t led_fade_time_down_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int ret; + ret = snprintf(buf, RGB_BUFSIZE, "%d\n", led_fade_time_down); + pr_info("[LED] %s: led_fade=%d\n", __func__, led_fade_time_down); + + return ret; +} + +static ssize_t led_fade_time_down_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + int retval; + int val = 0; + retval = sscanf(buf, "%d", &val); + if (retval != 0 && val >= 100 && val <= 4000) + led_fade_time_down = val; + + return count; +} + /* permission for sysfs node */ static DEVICE_ATTR(delay_on, 0640, led_delay_on_show, led_delay_on_store); static DEVICE_ATTR(delay_off, 0640, led_delay_off_show, led_delay_off_store); static DEVICE_ATTR(blink, 0640, NULL, led_blink_store); +static DEVICE_ATTR(led_fade, 0664, led_fade_show, led_fade_store); +static DEVICE_ATTR(led_fade_time_up, 0664, led_fade_time_up_show, led_fade_time_up_store); +static DEVICE_ATTR(led_fade_time_down, 0664, led_fade_time_down_show, led_fade_time_down_store); #ifdef SEC_LED_SPECIFIC /* below nodes is SAMSUNG specific nodes */ @@ -905,6 +999,9 @@ static struct attribute *sec_led_attributes[] = { &dev_attr_led_blink.attr, &dev_attr_led_brightness.attr, &dev_attr_led_lowpower.attr, + &dev_attr_led_fade.attr, + &dev_attr_led_fade_time_up.attr, + &dev_attr_led_fade_time_down.attr, NULL, }; diff --git a/drivers/media/platform/exynos/mfc/s5p_mfc_qos.c b/drivers/media/platform/exynos/mfc/s5p_mfc_qos.c index 41e79bfa3b82..1fb284a8da31 100644 --- a/drivers/media/platform/exynos/mfc/s5p_mfc_qos.c +++ b/drivers/media/platform/exynos/mfc/s5p_mfc_qos.c @@ -816,5 +816,6 @@ void s5p_mfc_qos_update_last_framerate(struct s5p_mfc_ctx *ctx, u64 timestamp) ctx->last_framerate = mfc_qos_get_fps_by_timestamp(ctx, &time); if (ctx->last_framerate > MFC_MAX_FPS) ctx->last_framerate = MFC_MAX_FPS; - ctx->last_framerate = (ctx->qos_ratio * ctx->last_framerate) / 100; + if (!(ctx->type == MFCINST_DECODER && !IS_UHD_RES(ctx))) + ctx->last_framerate = (ctx->qos_ratio * ctx->last_framerate) / 100; } diff --git a/drivers/media/platform/exynos/mfc/s5p_mfc_qos.h b/drivers/media/platform/exynos/mfc/s5p_mfc_qos.h index 1dec9b8845d8..04f91ff41b11 100644 --- a/drivers/media/platform/exynos/mfc/s5p_mfc_qos.h +++ b/drivers/media/platform/exynos/mfc/s5p_mfc_qos.h @@ -49,7 +49,7 @@ void s5p_mfc_qos_update_last_framerate(struct s5p_mfc_ctx *ctx, u64 timestamp); static inline void s5p_mfc_qos_reset_framerate(struct s5p_mfc_ctx *ctx) { if (ctx->type == MFCINST_DECODER) - ctx->framerate = DEC_DEFAULT_FPS; + ctx->framerate = 60000; // 60fps*1000; else if (ctx->type == MFCINST_ENCODER) ctx->framerate = ENC_DEFAULT_FPS; } diff --git a/drivers/misc/uid_sys_stats.c b/drivers/misc/uid_sys_stats.c index 345f2292fa09..3577556fe4b8 100644 --- a/drivers/misc/uid_sys_stats.c +++ b/drivers/misc/uid_sys_stats.c @@ -358,9 +358,12 @@ static int uid_cputime_show(struct seq_file *m, void *v) __func__, uid); return -ENOMEM; } - task_cputime_adjusted(task, &utime, &stime); - uid_entry->active_utime += utime; - uid_entry->active_stime += stime; + /* avoid double accounting of dying threads */ + if (!(task->flags & PF_EXITING)) { + task_cputime_adjusted(task, &utime, &stime); + uid_entry->active_utime += utime; + uid_entry->active_stime += stime; + } } while_each_thread(temp, task); rcu_read_unlock(); @@ -455,6 +458,10 @@ static void add_uid_io_stats(struct uid_entry *uid_entry, struct task_struct *task, int slot) { struct io_stats *io_slot = &uid_entry->io[slot]; + + /* avoid double accounting of dying threads */ + if (slot != UID_STATE_DEAD_TASKS && (task->flags & PF_EXITING)) + return; io_slot->read_bytes += task->ioac.read_bytes; io_slot->write_bytes += compute_write_bytes(task); diff --git a/drivers/motor/max77705_haptic.c b/drivers/motor/max77705_haptic.c index 1855a4818329..f983f56362bf 100644 --- a/drivers/motor/max77705_haptic.c +++ b/drivers/motor/max77705_haptic.c @@ -118,6 +118,7 @@ static struct max77705_haptic_pdata *of_max77705_haptic_dt(struct device *dev) struct device_node *np; struct max77705_haptic_pdata *pdata; u32 temp; + const char *type; int ret, i; pdata = kzalloc(sizeof(struct max77705_haptic_pdata), @@ -213,6 +214,14 @@ static struct max77705_haptic_pdata *of_max77705_haptic_dt(struct device *dev) pdata->period = (u16)temp; } + ret = of_property_read_string(np, + "haptic,type", &type); + if (ret) { + pr_err("%s : error to get dt node type\n", __func__); + goto err_parsing_dt; + } else + pdata->vib_type = type; + ret = of_property_read_u32(np, "haptic,pwm_id", &temp); if (ret) { @@ -292,6 +301,7 @@ static int max77705_haptic_probe(struct platform_device *pdev) shdata->max_timeout = pdata->max_timeout; shdata->multi_frequency = pdata->multi_frequency; shdata->freq_num = pdata->freq_num; + shdata->vib_type = pdata->vib_type; shdata->multi_freq_duty = pdata->multi_freq_duty; shdata->multi_freq_period = pdata->multi_freq_period; shdata->data = drvdata; diff --git a/drivers/motor/max77865_haptic.c b/drivers/motor/max77865_haptic.c index 03d2e37170fa..16be022ac1f5 100644 --- a/drivers/motor/max77865_haptic.c +++ b/drivers/motor/max77865_haptic.c @@ -124,6 +124,7 @@ static struct max77865_haptic_pdata *of_max77865_haptic_dt(struct device *dev) struct device_node *np; struct max77865_haptic_pdata *pdata; u32 temp; + const char *type; int ret, i; pdata = kzalloc(sizeof(struct max77865_haptic_pdata), @@ -219,6 +220,14 @@ static struct max77865_haptic_pdata *of_max77865_haptic_dt(struct device *dev) pdata->period = (u16)temp; } + ret = of_property_read_string(np, + "haptic,type", &type); + if (ret) { + pr_err("%s : error to get dt node type\n", __func__); + goto err_parsing_dt; + } else + pdata->vib_type = type; + ret = of_property_read_u32(np, "haptic,pwm_id", &temp); if (ret) { @@ -298,6 +307,7 @@ static int max77865_haptic_probe(struct platform_device *pdev) shdata->max_timeout = pdata->max_timeout; shdata->multi_frequency = pdata->multi_frequency; shdata->freq_num = pdata->freq_num; + shdata->vib_type = pdata->vib_type; shdata->multi_freq_duty = pdata->multi_freq_duty; shdata->multi_freq_period = pdata->multi_freq_period; shdata->data = drvdata; diff --git a/drivers/motor/sec_haptic.c b/drivers/motor/sec_haptic.c index ee198a48bed4..907bf051f4d0 100644 --- a/drivers/motor/sec_haptic.c +++ b/drivers/motor/sec_haptic.c @@ -178,6 +178,13 @@ static void timed_output_enable(struct sec_haptic_drvdata *ddata, unsigned int v } } +#ifdef CONFIG_WAKE_GESTURES +void vib_trigger(int value) +{ + timed_output_enable(pddata, value); +} +#endif + static enum hrtimer_restart haptic_timer_func(struct hrtimer *timer) { struct sec_haptic_drvdata *ddata @@ -234,7 +241,9 @@ static ssize_t duty_store(struct device *dev, dev_err(dev, "fail to get duty.\n"); return count; } - ddata->duty = ddata->max_duty = ddata->multi_freq_duty[0] = duty; + ddata->duty = ddata->max_duty = duty; + if (ddata->multi_frequency) + ddata->multi_freq_duty[0] = duty; ddata->intensity = MAX_INTENSITY; return count; @@ -262,7 +271,9 @@ static ssize_t period_store(struct device *dev, dev_err(dev, "fail to get period.\n"); return count; } - ddata->period = ddata->multi_freq_period[0] = period; + ddata->period = period; + if (ddata->multi_frequency) + ddata->multi_freq_period[0] = period; return count; } @@ -304,8 +315,8 @@ static ssize_t intensity_store(struct device *dev, pr_info("%s %d\n", __func__, intensity); - if ((intensity < 0) || (intensity > MAX_INTENSITY)) { - pr_err("[VIB]: %s out of range\n", __func__); + if ((intensity < 1) || ( intensity > MAX_INTENSITY)) { + pr_err("%s out of range %d\n", __func__, intensity); return -EINVAL; } @@ -323,6 +334,15 @@ static ssize_t intensity_show(struct device *dev, "intensity: %u\n", ddata->intensity); } + +static ssize_t motor_type_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct sec_haptic_drvdata *ddata = dev_get_drvdata(dev); + + return snprintf(buf, VIB_BUFSIZE, + "%s\n", ddata->vib_type); +} static ssize_t force_touch_intensity_store(struct device *dev, struct device_attribute *devattr, const char *buf, size_t count) { @@ -337,8 +357,8 @@ static ssize_t force_touch_intensity_store(struct device *dev, pr_info("%s %d\n", __func__, intensity); - if ((intensity < 0) || (intensity > MAX_INTENSITY)) { - pr_err("[VIB]: %s out of range\n", __func__); + if ((intensity < 1) || ( intensity > MAX_INTENSITY)) { + pr_err("%s out of range %d\n", __func__, intensity); return -EINVAL; } @@ -369,6 +389,9 @@ static ssize_t multi_freq_store(struct device *dev, pr_info("%s %d\n", __func__, num); + if (num < 0 || num >= HOMEKEY_PRESS_FREQ) + return -EINVAL; + ret = sec_haptic_set_frequency(ddata, num); if (ret) return ret; @@ -392,11 +415,12 @@ static ssize_t haptic_engine_store(struct device *dev, int i = 0, _data = 0, tmp = 0; if (sscanf(buf, "%6d", &_data) != 1) - return count; + return -EINVAL; - if (_data > PACKET_MAX_SIZE * VIB_PACKET_MAX) + if (_data > PACKET_MAX_SIZE * VIB_PACKET_MAX) { pr_info("%s, [%d] packet size over\n", __func__, _data); - else { + return -EINVAL; + } else { ddata->packet_size = _data / VIB_PACKET_MAX; ddata->packet_cnt = 0; ddata->f_packet_en = true; @@ -409,14 +433,14 @@ static ssize_t haptic_engine_store(struct device *dev, pr_err("%s, buf is NULL, Please check packet data again\n", __func__); ddata->f_packet_en = false; - return count; + return -EINVAL; } if (sscanf(buf++, "%6d", &_data) != 1) { pr_err("%s, packet data error, Please check packet data again\n", __func__); ddata->f_packet_en = false; - return count; + return -EINVAL; } switch (tmp) { @@ -495,11 +519,13 @@ static DEVICE_ATTR_RW(multi_freq); static DEVICE_ATTR_RW(intensity); static DEVICE_ATTR_RW(force_touch_intensity); static DEVICE_ATTR_RW(enable); +static DEVICE_ATTR(motor_type, S_IWUSR | S_IRUGO, motor_type_show, NULL); static struct attribute *timed_output_attributes[] = { &dev_attr_intensity.attr, &dev_attr_force_touch_intensity.attr, &dev_attr_enable.attr, + &dev_attr_motor_type.attr, NULL, }; @@ -614,6 +640,8 @@ extern int haptic_homekey_press(void) if (ddata == NULL) return -1; + if (!ddata->multi_frequency) + return -1; timer = &ddata->timer; sec_haptic_boost(ddata, BOOST_ON); @@ -642,6 +670,8 @@ extern int haptic_homekey_release(void) if (ddata == NULL) return -1; + if (!ddata->multi_frequency) + return -1; timer = &ddata->timer; mutex_lock(&ddata->mutex); diff --git a/drivers/sensorhub/brcm/ssp.h b/drivers/sensorhub/brcm/ssp.h index a51bf5ea54ef..36653fd88b1a 100644 --- a/drivers/sensorhub/brcm/ssp.h +++ b/drivers/sensorhub/brcm/ssp.h @@ -66,7 +66,7 @@ #undef CONFIG_HAS_EARLYSUSPEND #endif -#define SSP_DBG 1 +#define SSP_DBG 0 #define SUCCESS 1 #define FAIL 0 @@ -74,16 +74,18 @@ #define FACTORY_DATA_MAX 99 +/* ssp mcu device ID */ +#define DEVICE_ID 0x55 + #if SSP_DBG #define SSP_FUNC_DBG 1 #define SSP_DATA_DBG 0 -/* ssp mcu device ID */ -#define DEVICE_ID 0x55 - #define ssp_dbg(format, ...) \ pr_info(format, ##__VA_ARGS__) #else +#define SSP_FUNC_DBG 0 +#define SSP_DATA_DBG 0 #define ssp_dbg(format, ...) #endif diff --git a/drivers/sensorhub/brcm/ssp_data.c b/drivers/sensorhub/brcm/ssp_data.c index ae058e8106b5..e417e4eb00c4 100644 --- a/drivers/sensorhub/brcm/ssp_data.c +++ b/drivers/sensorhub/brcm/ssp_data.c @@ -463,7 +463,9 @@ bool ssp_check_buffer(struct ssp_data *data) void ssp_batch_resume_check(struct ssp_data *data) { + #if SSP_DBG u64 acc_offset = 0, uncal_mag_offset = 0, press_offset = 0, grv_offset = 0, proxi_offset = 0; + #endif //if suspend -> wakeup case. calc. FIFO last timestamp if (data->bIsResumed) { u8 sensor_type = 0; diff --git a/drivers/sensorhub/brcm/ssp_debug.c b/drivers/sensorhub/brcm/ssp_debug.c index dc75f6e708a8..7bb15821af81 100644 --- a/drivers/sensorhub/brcm/ssp_debug.c +++ b/drivers/sensorhub/brcm/ssp_debug.c @@ -222,7 +222,9 @@ int print_mcu_debug(char *pchRcvDataFrame, int *pDataIdx, int iRcvDataFrameLength) { int iLength = 0; + #if SSP_DBG int cur = *pDataIdx; + #endif memcpy(&iLength, pchRcvDataFrame + *pDataIdx, sizeof(u16)); *pDataIdx += sizeof(u16); diff --git a/drivers/soc/samsung/acpm/acpm_ipc.h b/drivers/soc/samsung/acpm/acpm_ipc.h index c8d89121d838..28ec229ac0ed 100644 --- a/drivers/soc/samsung/acpm/acpm_ipc.h +++ b/drivers/soc/samsung/acpm/acpm_ipc.h @@ -101,7 +101,7 @@ struct regulator_ss_info { #define SR2 0x0088 #define SR3 0x008C -#define IPC_TIMEOUT (15000000) +#define IPC_TIMEOUT (200000000) #define APM_PERITIMER_NS_PERIOD (10416) #define UNTIL_EQUAL(arg0, arg1, flag) \ diff --git a/drivers/soc/samsung/exynos-hotplug_governor.c b/drivers/soc/samsung/exynos-hotplug_governor.c index 49a943e7d895..6cb21eff959d 100644 --- a/drivers/soc/samsung/exynos-hotplug_governor.c +++ b/drivers/soc/samsung/exynos-hotplug_governor.c @@ -160,7 +160,7 @@ void exynos_hpgov_validate_hpin(unsigned int cpu) next_mode = cpumask_weight(&mask) + 1; max_freq = exynos_hpgov.maxfreq_table[next_mode]; cur_freq = (unsigned int)cal_dfs_get_rate(exynos_hpgov.cal_id); - pr_info("%s: max_freq %d, cur_freq %d, next_mode %d \n", + pr_debug("%s: max_freq %d, cur_freq %d, next_mode %d \n", __func__, max_freq, cur_freq, next_mode); BUG_ON(max_freq < cur_freq); diff --git a/drivers/staging/android/freecess.c b/drivers/staging/android/freecess.c index 2ed607ef1312..eb1d23fca8b3 100644 --- a/drivers/staging/android/freecess.c +++ b/drivers/staging/android/freecess.c @@ -25,42 +25,15 @@ static struct sock *kfreecess_mod_sock = NULL; static atomic_t bind_port[MOD_END]; static atomic_t kfreecess_init_suc; static int last_kill_pid = -1; -static struct proc_dir_entry *freecess_rootdir = NULL; -struct report_stat_s -{ - spinlock_t lock; - struct { - u64 report_suc_count; - u64 report_fail_count; - u64 total_runtime; - - u64 report_suc_from_windowstart; - u64 report_fail_from_windowstart; - u64 runtime_from_windowstart; - }data; - char name[32]; -}; - -struct freecess_info_s -{ - struct report_stat_s mod_reportstat[MOD_END]; -} freecess_info; - -static char* mod_name[MOD_END] = -{ - "NULL", - "MOD_BINDER", - "MOD_SIG", - "MOD_PKG", - "MOD_CFB" -}; +int freecess_fw_version = 0; // record freecess framework version struct priv_data { - int caller_pid; int target_uid; int flag; //MOD_SIG,MOD_BINDER + int code; //RPC code + char rpcname[INTERFACETOKEN_BUFF_SIZE]; //interface token pkg_info_t pkg_info; //MOD_PKG }; @@ -76,7 +49,7 @@ static int check_mod_type(int mod) return (mod < MOD_END) && (mod > 0); } -static int thread_group_is_frozen(struct task_struct* task) +int thread_group_is_frozen(struct task_struct* task) { struct task_struct *leader = task->group_leader; @@ -91,7 +64,13 @@ static void dump_kfreecess_msg(struct kfreecess_msg_data *msg) return; } - printk(KERN_ERR "type: %d, mode: %d\n", msg->type, msg->mod); + printk(KERN_ERR "type: %d\n", msg->type); + printk(KERN_ERR "mode: %d\n", msg->mod); + printk(KERN_ERR "src_portid: %d\n", msg->src_portid); + printk(KERN_ERR "dest_portid: %d\n", msg->dst_portid); + printk(KERN_ERR "kernel version: %d\n", FREECESS_KERNEL_VERSION); + printk(KERN_ERR "fw version: %d\n", FREECESS_PEER_VERSION(msg->version)); + printk(KERN_ERR "target_uid: %d\n", msg->target_uid); } @@ -133,102 +112,55 @@ int mod_sendmsg(int type, int mod, struct priv_data* data) payload->mod = mod; payload->src_portid = KERNEL_ID_NETLINK; payload->dst_portid = atomic_read(&bind_port[mod]); + payload->version = FREECESS_PACK_VERSION(FREECESS_KERNEL_VERSION); if (data) { - payload->caller_pid = data->caller_pid; payload->target_uid = data->target_uid; + if (payload->mod == MOD_BINDER) { + payload->code = data->code; + memcpy(payload->rpcname, data->rpcname, sizeof(data->rpcname)); + } if (payload->mod == MOD_PKG) memcpy(&payload->pkg_info, &data->pkg_info, sizeof(pkg_info_t)); else payload->flag = data->flag; } - //dump_kfreecess_msg(payload); if ((ret = nlmsg_unicast(kfreecess_mod_sock, skb, payload->dst_portid)) < 0) { pr_err("nlmsg_unicast failed! %s errno %d\n", __func__ , ret); return RET_ERR; - } else - pr_info("nlmsg_unicast snd msg success\n"); + } return RET_OK; } -int sig_report(struct task_struct *caller, struct task_struct *p) +int sig_report(struct task_struct *p) { int ret = RET_OK; struct priv_data data; int target_pid = task_tgid_nr(p); - u64 walltime, timecost; - unsigned long flags; - struct report_stat_s *stat; - - walltime = ktime_to_us(ktime_get()); memset(&data, 0, sizeof(struct priv_data)); - data.caller_pid = task_tgid_nr(caller); data.target_uid = task_uid(p).val; data.flag = 0; - if (thread_group_is_frozen(p) && (target_pid != last_kill_pid)) { last_kill_pid = target_pid; - stat = &freecess_info.mod_reportstat[MOD_SIG]; ret = mod_sendmsg(MSG_TO_USER, MOD_SIG, &data); - - spin_lock_irqsave(&stat->lock, flags); - if (ret < 0) { - stat->data.report_fail_count++; - stat->data.report_fail_from_windowstart++; - pr_err("sig_report error\n"); - } else { - stat->data.report_suc_count++; - stat->data.report_suc_from_windowstart++; - } - - timecost = ktime_to_us(ktime_get()) - walltime; - stat->data.total_runtime += timecost; - stat->data.runtime_from_windowstart += timecost; - spin_unlock_irqrestore(&stat->lock, flags); } return ret; } -int binder_report(struct task_struct *caller, struct task_struct *p, int flag) +int binder_report(struct task_struct *p, int code, const char *str, int flag) { int ret = RET_OK; struct priv_data data; - u64 walltime, timecost; - unsigned long flags; - struct report_stat_s *stat; - memset(&data, 0, sizeof(struct priv_data)); data.target_uid = -1; - data.caller_pid = -1; - data.flag = flag; - + data.flag = flag; + data.code = code; + strlcpy(data.rpcname, str, INTERFACETOKEN_BUFF_SIZE); if(p) data.target_uid = task_uid(p).val; - if(caller) - data.caller_pid = task_tgid_nr(caller); - - walltime = ktime_to_us(ktime_get()); - if (p && thread_group_is_frozen(p)) { - ret = mod_sendmsg(MSG_TO_USER, MOD_BINDER, &data); - stat = &freecess_info.mod_reportstat[MOD_BINDER]; - spin_lock_irqsave(&stat->lock, flags); - if (ret < 0) { - stat->data.report_fail_count++; - stat->data.report_fail_from_windowstart++; - pr_err("binder_report error\n"); - } else { - stat->data.report_suc_count++; - stat->data.report_suc_from_windowstart++; - } - - timecost = ktime_to_us(ktime_get()) - walltime; - stat->data.total_runtime += timecost; - stat->data.runtime_from_windowstart += timecost; - spin_unlock_irqrestore(&stat->lock, flags); - } - + ret = mod_sendmsg(MSG_TO_USER, MOD_BINDER, &data); return ret; } @@ -236,30 +168,10 @@ int pkg_report(int target_uid) { int ret = RET_OK; struct priv_data data; - u64 walltime, timecost; - unsigned long flags; - struct report_stat_s *stat; - memset(&data, 0, sizeof(struct priv_data)); data.target_uid = target_uid; data.pkg_info.uid = (uid_t)target_uid; - walltime = ktime_to_us(ktime_get()); ret = mod_sendmsg(MSG_TO_USER, MOD_PKG, &data); - stat = &freecess_info.mod_reportstat[MOD_PKG]; - spin_lock_irqsave(&stat->lock, flags); - if (ret < 0) { - stat->data.report_fail_count++; - stat->data.report_fail_from_windowstart++; - } else { - stat->data.report_suc_count++; - stat->data.report_suc_from_windowstart++; - } - - timecost = ktime_to_us(ktime_get()) - walltime; - stat->data.total_runtime += timecost; - stat->data.runtime_from_windowstart += timecost; - spin_unlock_irqrestore(&stat->lock, flags); - return ret; } @@ -287,229 +199,53 @@ static void recv_handler(struct sk_buff *skb) pr_err("recv_handler %s: skb is NULL!\n", __func__); return; } - + uid = (*NETLINK_CREDS(skb)).uid.val; //only allow system user to communicate with Freecess kernel part. if (uid != 1000) { pr_err("freecess--uid: %d, permission denied\n", uid); return; } - printk(KERN_ERR "kernel freecess receive msg now\n"); + if (skb->len >= NLMSG_SPACE(0)) { nlh = nlmsg_hdr(skb); msglen = NLMSG_PAYLOAD(nlh, 0); payload = (struct kfreecess_msg_data*)NLMSG_DATA(nlh); - if (msglen >= (sizeof(struct kfreecess_msg_data))) { - if (payload->src_portid < 0) { - pr_err("USER_HOOK_CALLBACK %s: src_portid %d is not valid!\n", __func__, payload->src_portid); - return; - } - - if (payload->dst_portid != KERNEL_ID_NETLINK) { - pr_err("USER_HOOK_CALLBACK %s: dst_portid is %d not kernel!\n", __func__, payload->dst_portid); - return; - } - - if (!check_mod_type(payload->mod)) { - pr_err("USER_HOOK_CALLBACK %s: mod %d is not valid!\n", __func__, payload->mod); - return; - } - - switch (payload->type) { + if (payload->src_portid < 0) { + pr_err("USER_HOOK_CALLBACK %s: src_portid %d is not valid!\n", __func__, payload->src_portid); + return; + } + + if (payload->dst_portid != KERNEL_ID_NETLINK) { + pr_err("USER_HOOK_CALLBACK %s: dst_portid is %d not kernel!\n", __func__, payload->dst_portid); + return; + } + + if (!check_mod_type(payload->mod)) { + pr_err("USER_HOOK_CALLBACK %s: mod %d is not valid!\n", __func__, payload->mod); + return; + } + + switch (payload->type) { case LOOPBACK_MSG: atomic_set(&bind_port[payload->mod], payload->src_portid); + freecess_fw_version = FREECESS_PEER_VERSION(payload->version); dump_kfreecess_msg(payload); mod_sendmsg(LOOPBACK_MSG, payload->mod, NULL); break; case MSG_TO_KERN: if (mod_recv_handler[payload->mod]) mod_recv_handler[payload->mod](payload, sizeof(struct kfreecess_msg_data)); - else - dump_kfreecess_msg(payload); break; default: pr_err("msg type is valid %d\n", payload->type); break; - } - } else { - pr_err("%s: length err msglen %d struct kfreecess_msg_data %lu!\n", __func__, msglen, sizeof(struct kfreecess_msg_data)); } } } -/*proc and sysctl interface*/ -static int freecess_window_stat_show(struct seq_file *m, void *v) -{ - int i; - unsigned long flags; - struct report_stat_s *stat; - struct freecess_info_s tmp_freecess_info; - struct report_stat_s total_stat; - - memset(&tmp_freecess_info, 0, sizeof(struct freecess_info_s)); - memset(&total_stat, 0, sizeof(struct report_stat_s)); - for(i = 1; i < MOD_END; i++) { - stat = &freecess_info.mod_reportstat[i]; - spin_lock_irqsave(&stat->lock, flags); - tmp_freecess_info.mod_reportstat[i].data = stat->data; - spin_unlock_irqrestore(&stat->lock, flags); - strlcpy(tmp_freecess_info.mod_reportstat[i].name, stat->name, 32); - } - - seq_printf(m, "freecess window stat show\n"); - seq_printf(m, "-----------------------------\n\n"); - for(i = 1; i < MOD_END; i++) { - stat = &tmp_freecess_info.mod_reportstat[i]; - total_stat.data.report_suc_from_windowstart += stat->data.report_suc_from_windowstart; - total_stat.data.report_fail_from_windowstart += stat->data.report_fail_from_windowstart; - total_stat.data.runtime_from_windowstart += stat->data.runtime_from_windowstart; - - seq_printf(m, "mod name: %s mod number %d:\n", stat->name, i); - seq_printf(m, "suc_count: %llu\n", stat->data.report_suc_from_windowstart); - seq_printf(m, "fail_count: %llu\n", stat->data.report_fail_from_windowstart); - seq_printf(m, "total_runtime: %llu us\n\n", stat->data.runtime_from_windowstart); - - } - - stat = &total_stat; - seq_printf(m, "info of all mod\n"); - seq_printf(m, "-----------------------------\n"); - seq_printf(m, "suc_count: %llu\n", stat->data.report_suc_from_windowstart); - seq_printf(m, "fail_count: %llu\n", stat->data.report_fail_from_windowstart); - seq_printf(m, "total_runtime: %llu us\n", stat->data.runtime_from_windowstart); - return 0; -} - -static int freecess_window_stat_open(struct inode *inode, struct file *file) -{ - return single_open(file, freecess_window_stat_show, NULL); -} - -static void reset_window(void) -{ - int i; - unsigned long flags; - struct report_stat_s *stat; - - for(i = 1; i < MOD_END; i++) { - stat = &freecess_info.mod_reportstat[i]; - spin_lock_irqsave(&stat->lock, flags); - stat->data.report_suc_from_windowstart = 0; - stat->data.report_fail_from_windowstart = 0; - stat->data.runtime_from_windowstart = 0; - spin_unlock_irqrestore(&stat->lock, flags); - } -} - -static ssize_t freecess_window_stat_write(struct file *filp, const char __user *buf, size_t count, loff_t *f_ops) -{ - unsigned char tmp = 0; - int value = 0; - - get_user(tmp, buf); - value = simple_strtol(&tmp, NULL, 10); - printk(KERN_WARNING "input value number: %d, if value == 1: window will reset ....\n", value); - if (value == 1) - reset_window(); - - printk(KERN_WARNING "window reset now\n"); - return count; - -} - -static const struct file_operations window_stat_proc_fops = { - .open = freecess_window_stat_open, - .read = seq_read, - .write = freecess_window_stat_write, - .llseek = seq_lseek, - .release = single_release, - .owner = THIS_MODULE, -}; - -static int pkg_stat_open(struct inode *inode, struct file *file) -{ - return single_open(file, pkg_stat_show, NULL); -} - -static const struct file_operations pkg_stat_proc_fops = { - .open = pkg_stat_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; - -static int freecess_modstat_show(struct seq_file *m, void *v) -{ - int i; - unsigned long flags; - struct report_stat_s *stat; - static struct freecess_info_s tmp_freecess_info; - struct report_stat_s total_stat; - - memset(&tmp_freecess_info, 0, sizeof(struct freecess_info_s)); - memset(&total_stat, 0, sizeof(struct report_stat_s)); - for(i = 1; i < MOD_END; i++) { - stat = &freecess_info.mod_reportstat[i]; - spin_lock_irqsave(&stat->lock, flags); - tmp_freecess_info.mod_reportstat[i].data = stat->data; - spin_unlock_irqrestore(&stat->lock, flags); - strlcpy(tmp_freecess_info.mod_reportstat[i].name, stat->name, 32); - } - - seq_printf(m, "freecess mod stat show\n"); - seq_printf(m, "-----------------------------\n\n"); - for(i = 1; i < MOD_END; i++) { - stat = &tmp_freecess_info.mod_reportstat[i]; - total_stat.data.report_suc_count += stat->data.report_suc_count; - total_stat.data.report_fail_count += stat->data.report_fail_count; - total_stat.data.total_runtime += stat->data.total_runtime; - - seq_printf(m, "mod name: %s mod number %d:\n", stat->name, i); - seq_printf(m, "suc_count: %llu\n", stat->data.report_suc_count); - seq_printf(m, "fail_count: %llu\n", stat->data.report_fail_count); - seq_printf(m, "total_runtime: %llu us\n\n", stat->data.total_runtime); - } - - stat = &total_stat; - seq_printf(m, "info of all mod:\n"); - seq_printf(m, "suc_count: %llu\n", stat->data.report_suc_count); - seq_printf(m, "fail_count: %llu\n", stat->data.report_fail_count); - seq_printf(m, "total_runtime: %llu us\n", stat->data.total_runtime); - return 0; -} - -static int freecess_mod_stat_open(struct inode *inode, struct file *file) -{ - return single_open(file, freecess_modstat_show, NULL); -} - -static const struct file_operations mod_stat_proc_fops = { - .open = freecess_mod_stat_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; - -static void freecess_runinfo_init(struct freecess_info_s *f) -{ - int i; - struct report_stat_s *stat; - - for(i = 1; i < MOD_END; i++) { - stat = &f->mod_reportstat[i]; - spin_lock_init(&stat->lock); - stat->data.report_suc_count = 0; - stat->data.report_fail_count = 0; - stat->data.total_runtime = 0; - stat->data.report_suc_from_windowstart = 0; - stat->data.report_fail_from_windowstart = 0; - stat->data.runtime_from_windowstart = 0; - strlcpy(f->mod_reportstat[i].name, mod_name[i], 32); - } - -} int register_kfreecess_hook(int mod, freecess_hook hook) { @@ -537,9 +273,6 @@ int unregister_kfreecess_hook(int mod) static int __init kfreecess_init(void) { int ret = RET_ERR; - struct proc_dir_entry *freecess_modstat_entry = NULL; - struct proc_dir_entry *freecess_window_stat_entry = NULL; - struct proc_dir_entry *pkg_modstat_entry = NULL; int i; struct netlink_kernel_cfg cfg = { @@ -554,37 +287,6 @@ static int __init kfreecess_init(void) for(i = 1; iprivate; struct rb_node *n; size_t sizes[ION_NUM_HEAP_IDS] = {0}; @@ -993,6 +994,7 @@ static int ion_debug_client_show(struct seq_file *s, void *unused) seq_printf(s, "%16.16s: %16zu %18zu\n", names[i], sizes[i], sizes_pss[i]); } +#endif return 0; } diff --git a/drivers/usb/gadget/function/f_mass_storage.c b/drivers/usb/gadget/function/f_mass_storage.c index fac9424940d4..0afe14586ab8 100644 --- a/drivers/usb/gadget/function/f_mass_storage.c +++ b/drivers/usb/gadget/function/f_mass_storage.c @@ -227,7 +227,7 @@ /*------------------------------------------------------------------------*/ -#define FSG_DRIVER_DESC "Mass Storage Function" +#define FSG_DRIVER_DESC "mass_storage" #define FSG_DRIVER_VERSION "2009/09/11" static const char fsg_string_interface[] = "Mass Storage"; @@ -3440,6 +3440,8 @@ static void fsg_free_inst(struct usb_function_instance *fi) kfree(opts); } +extern struct device *create_function_device(char *name); + static struct usb_function_instance *fsg_alloc_inst(void) { struct fsg_opts *opts; @@ -3479,6 +3481,9 @@ static struct usb_function_instance *fsg_alloc_inst(void) config_group_init_type_name(&opts->lun0.group, "lun.0", &fsg_lun_type); configfs_add_default_group(&opts->lun0.group, &opts->func_inst.group); + //create dummy device + create_function_device("f_mass_storage"); + return &opts->func_inst; release_buffers: diff --git a/drivers/video/fbdev/exynos/dpu_9810/decon.h b/drivers/video/fbdev/exynos/dpu_9810/decon.h index 0e4b91d4f818..99e9466cb0aa 100644 --- a/drivers/video/fbdev/exynos/dpu_9810/decon.h +++ b/drivers/video/fbdev/exynos/dpu_9810/decon.h @@ -1679,9 +1679,7 @@ void decon_reg_set_dsu(u32 id, enum decon_dsi_mode dsi_mode, struct decon_param #define EXYNOS_DPU_DUMP _IOW('F', 302, \ struct decon_win_config_data) -#ifdef CONFIG_SUPPORT_DOZE #define S3CFB_POWER_MODE _IOW('F', 223, __u32) -#endif /* HDR support */ #define S3CFB_GET_HDR_CAPABILITIES _IOW('F', 400, struct decon_hdr_capabilities) diff --git a/drivers/video/fbdev/exynos/panel/mdnie.c b/drivers/video/fbdev/exynos/panel/mdnie.c index 22510b72d81c..f06b7e997956 100644 --- a/drivers/video/fbdev/exynos/panel/mdnie.c +++ b/drivers/video/fbdev/exynos/panel/mdnie.c @@ -958,19 +958,18 @@ static ssize_t night_mode_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct mdnie_info *mdnie = dev_get_drvdata(dev); - int enable = 0, level = 0, ret; + int enable, level, ret; ret = sscanf(buf, "%d %d", &enable, &level); + if (ret != 2) + return -EINVAL; + + if (level < 0 || level >= mdnie->props.num_night_level) + return -EINVAL; dev_info(dev, "%s: night_mode %s level %d\n", __func__, enable ? "on" : "off", level); - if (ret < 0) - return ret; - - if (level < 0 || level >= MAX_NIGHT_LEVEL) - return -EINVAL; - mutex_lock(&mdnie->lock); mdnie->props.night = !!enable; mdnie->props.night_level = level; diff --git a/drivers/video/fbdev/exynos/panel/mdnie.h b/drivers/video/fbdev/exynos/panel/mdnie.h index 99f7dbc86f7a..1b0f6b7d7de8 100644 --- a/drivers/video/fbdev/exynos/panel/mdnie.h +++ b/drivers/video/fbdev/exynos/panel/mdnie.h @@ -424,7 +424,6 @@ struct mdnie_properties { enum HBM hbm; enum HMD_MODE hmd; enum NIGHT_MODE night; - enum NIGHT_LEVEL night_level; enum COLOR_LENS color_lens; enum COLOR_LENS_COLOR color_lens_color; enum COLOR_LENS_LEVEL color_lens_level; @@ -434,6 +433,7 @@ struct mdnie_properties { enum LDU_MODE ldu; enum SCR_WHITE_MODE scr_white_mode; enum TRANS_MODE trans_mode; + int night_level; /* for color adjustment */ u8 scr[MAX_MDNIE_SCR_LEN]; diff --git a/drivers/video/fbdev/exynos/panel/panel_drv.c b/drivers/video/fbdev/exynos/panel/panel_drv.c index d4bc25b93e81..4e005afd3735 100644 --- a/drivers/video/fbdev/exynos/panel/panel_drv.c +++ b/drivers/video/fbdev/exynos/panel/panel_drv.c @@ -59,6 +59,10 @@ static char *panel_state_names[] = { "LPM", /* LPM */ }; +#ifdef CONFIG_SUPPORT_DOZE +extern int fix_green_screen; +#endif + static int boot_panel_id; int panel_log_level = 6; #ifdef CONFIG_SUPPORT_PANEL_SWAP @@ -1735,6 +1739,32 @@ static int panel_set_finger_layer(struct panel_device *panel, void *arg) return ret; } #endif + +#ifdef CONFIG_SUPPORT_DOZE +static int fix_green(struct panel_device *panel) { + int ret = 0; + + if (panel->state.cur_state == PANEL_STATE_ALPM) { + return 0; + } + + ret = panel_doze(panel, PANEL_IOC_DOZE); + if (ret) { + panel_err("PANEL:ERR:%s:failed to enter alpm\n", __func__); + return ret; + } + + // sleep 126msec (ALPM spec) + usleep_range(126 * 1000, 126 * 1000 + 10); + + ret = panel_sleep_out(panel); + if (ret) + panel_err("PANEL:ERR:%s:failed to panel exit alpm\n", __func__); + + return ret; +} +#endif + static long panel_core_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg) { int ret = 0; @@ -1819,6 +1849,12 @@ static long panel_core_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg if (panel->state.disp_on == PANEL_DISPLAY_OFF) { panel_info("PANEL:INFO:%s:FRAME_DONE (panel_state:%s, display on)\n", __func__, panel_state_names[panel->state.cur_state]); + +#ifdef CONFIG_SUPPORT_DOZE + if (fix_green_screen) + fix_green(panel); +#endif + ret = panel_display_on(panel); } copr_update_start(&panel->copr, 3); diff --git a/drivers/video/fbdev/exynos/panel/s6e3ha8/s6e3ha8_aod.c b/drivers/video/fbdev/exynos/panel/s6e3ha8/s6e3ha8_aod.c index ebdf0729ae49..acbf729a2966 100644 --- a/drivers/video/fbdev/exynos/panel/s6e3ha8/s6e3ha8_aod.c +++ b/drivers/video/fbdev/exynos/panel/s6e3ha8/s6e3ha8_aod.c @@ -164,6 +164,9 @@ void copy_set_time_ctrl(struct maptbl *tbl, u8 *dst) props->first_clk_update = 0; } + if (props->analog.en == 0) + sc_inc_step &= ~(0x10); + if (props->digital.en) sc_inc_step &= ~(0x10); diff --git a/drivers/video/fbdev/exynos/panel/s6e3ha8/s6e3ha8_aod_panel.h b/drivers/video/fbdev/exynos/panel/s6e3ha8/s6e3ha8_aod_panel.h index e7f6311e5db7..c394f61cdcd5 100644 --- a/drivers/video/fbdev/exynos/panel/s6e3ha8/s6e3ha8_aod_panel.h +++ b/drivers/video/fbdev/exynos/panel/s6e3ha8/s6e3ha8_aod_panel.h @@ -53,6 +53,8 @@ static DEFINE_PANEL_KEY(s6e3ha8_aod_level3_key_enable, CMD_LEVEL_3, static DEFINE_PANEL_KEY(s6e3ha8_aod_level3_key_disable, CMD_LEVEL_3, KEY_DISABLE, &PKTINFO(s6e3ha8_aod_level3_key_disable)); +static DEFINE_PANEL_MDELAY(s6e3ha8_aod_set_timer_delay, 34); + static struct keyinfo KEYINFO(s6e3ha8_aod_level2_key_enable); static struct keyinfo KEYINFO(s6e3ha8_aod_level2_key_disable); static struct keyinfo KEYINFO(s6e3ha8_aod_level3_key_enable); @@ -595,6 +597,7 @@ static void *s6e3ha8_aod_set_time_cmdtbl[] = { &KEYINFO(s6e3ha8_aod_level2_key_enable), &PKTINFO(s6e3ha8_aod_set_time), &PKTINFO(s6e3ha8_aod_update_time_ctrl), + &DLYINFO(s6e3ha8_aod_set_timer_delay), &KEYINFO(s6e3ha8_aod_level2_key_disable), }; diff --git a/drivers/video/fbdev/exynos/panel/s6e3ha8/s6e3ha8_crown_a3_s0_panel_mdnie.h b/drivers/video/fbdev/exynos/panel/s6e3ha8/s6e3ha8_crown_a3_s0_panel_mdnie.h index d3e7debb8c54..d9b763de9d2c 100644 --- a/drivers/video/fbdev/exynos/panel/s6e3ha8/s6e3ha8_crown_a3_s0_panel_mdnie.h +++ b/drivers/video/fbdev/exynos/panel/s6e3ha8/s6e3ha8_crown_a3_s0_panel_mdnie.h @@ -61,6 +61,8 @@ #define S6E3HA8_CROWN_A3_S0_COEFF_Q4_G (14499) #define S6E3HA8_CROWN_A3_S0_COEFF_Q4_H (13681) +#define S6E3HA8_CROWN_MAX_NIGHT_LEVEL (102) + /* ############################################# XXX_MODE ############################################# */ /* static unsigned char crown_a3_s0_mdnie_xxx_table[MODE_MAX][S6E3HA8_MDNIE_LEN] = { @@ -1552,19 +1554,109 @@ static unsigned char crown_a3_s0_sensor_rgb_table[][3] = { { 0xff, 0xff, 0xff }, }; -static unsigned char crown_a3_s0_night_mode_table[MAX_NIGHT_LEVEL][S6E3HA8_NIGHT_MODE_LEN] = { - { 0x00, 0xff, 0xfa, 0x00, 0xef, 0x00, 0xff, 0x00, 0x00, 0xfa, 0xef, 0x00, 0xff, 0x00, 0xfa, 0x00, 0x00, 0xef, 0xff, 0x00, 0xfa, 0x00, 0xef, 0x00 }, /* 6500K */ - { 0x00, 0xff, 0xf7, 0x00, 0xe7, 0x00, 0xff, 0x00, 0x00, 0xf7, 0xe7, 0x00, 0xff, 0x00, 0xf7, 0x00, 0x00, 0xe7, 0xff, 0x00, 0xf7, 0x00, 0xe7, 0x00 }, /* 6100K */ - { 0x00, 0xff, 0xf4, 0x00, 0xdf, 0x00, 0xff, 0x00, 0x00, 0xf4, 0xdf, 0x00, 0xff, 0x00, 0xf4, 0x00, 0x00, 0xdf, 0xff, 0x00, 0xf4, 0x00, 0xdf, 0x00 }, /* 5700K */ - { 0x00, 0xff, 0xf1, 0x00, 0xd7, 0x00, 0xff, 0x00, 0x00, 0xf1, 0xd7, 0x00, 0xff, 0x00, 0xf1, 0x00, 0x00, 0xd7, 0xff, 0x00, 0xf1, 0x00, 0xd7, 0x00 }, /* 5300K */ - { 0x00, 0xff, 0xed, 0x00, 0xcb, 0x00, 0xff, 0x00, 0x00, 0xed, 0xcb, 0x00, 0xff, 0x00, 0xed, 0x00, 0x00, 0xcb, 0xff, 0x00, 0xed, 0x00, 0xcb, 0x00 }, /* 4900K */ - { 0x00, 0xff, 0xe8, 0x00, 0xbe, 0x00, 0xff, 0x00, 0x00, 0xe8, 0xbe, 0x00, 0xff, 0x00, 0xe8, 0x00, 0x00, 0xbe, 0xff, 0x00, 0xe8, 0x00, 0xbe, 0x00 }, /* 4500K */ - { 0x00, 0xff, 0xe3, 0x00, 0xaf, 0x00, 0xff, 0x00, 0x00, 0xe3, 0xaf, 0x00, 0xff, 0x00, 0xe3, 0x00, 0x00, 0xaf, 0xff, 0x00, 0xe3, 0x00, 0xaf, 0x00 }, /* 4100K */ - { 0x00, 0xff, 0xdd, 0x00, 0x9f, 0x00, 0xff, 0x00, 0x00, 0xdd, 0x9f, 0x00, 0xff, 0x00, 0xdd, 0x00, 0x00, 0x9f, 0xff, 0x00, 0xdd, 0x00, 0x9f, 0x00 }, /* 3700K */ - { 0x00, 0xff, 0xd5, 0x00, 0x8a, 0x00, 0xff, 0x00, 0x00, 0xd5, 0x8a, 0x00, 0xff, 0x00, 0xd5, 0x00, 0x00, 0x8a, 0xff, 0x00, 0xd5, 0x00, 0x8a, 0x00 }, /* 3300K */ - { 0x00, 0xff, 0xcc, 0x00, 0x77, 0x00, 0xff, 0x00, 0x00, 0xcc, 0x77, 0x00, 0xff, 0x00, 0xcc, 0x00, 0x00, 0x77, 0xff, 0x00, 0xcc, 0x00, 0x77, 0x00 }, /* 2900K */ - { 0x00, 0xff, 0xbf, 0x00, 0x5f, 0x00, 0xff, 0x00, 0x00, 0xbf, 0x5f, 0x00, 0xff, 0x00, 0xbf, 0x00, 0x00, 0x5f, 0xff, 0x00, 0xbf, 0x00, 0x5f, 0x00 }, /* 2500K */ - { 0x00, 0xff, 0xfd, 0x00, 0xf8, 0x00, 0xff, 0x00, 0x00, 0xfd, 0xf8, 0x00, 0xff, 0x00, 0xfd, 0x00, 0x00, 0xf8, 0xff, 0x00, 0xfd, 0x00, 0xf8, 0x00 } /* 7000K-Game_Mode */ +static unsigned char crown_a3_s0_night_mode_table[S6E3HA8_CROWN_MAX_NIGHT_LEVEL][S6E3HA8_NIGHT_MODE_LEN] = { + { 0x00, 0xff, 0xfe, 0x00, 0xfb, 0x00, 0xff, 0x00, 0x00, 0xfe, 0xfb, 0x00, 0xff, 0x00, 0xfe, 0x00, 0x00, 0xfb, 0xff, 0x00, 0xfe, 0x00, 0xfb, 0x00 }, /* 6750K */ + { 0x00, 0xff, 0xfc, 0x00, 0xf6, 0x00, 0xff, 0x00, 0x00, 0xfc, 0xf6, 0x00, 0xff, 0x00, 0xfc, 0x00, 0x00, 0xf6, 0xff, 0x00, 0xfc, 0x00, 0xf6, 0x00 }, /* 6500K */ + { 0x00, 0xff, 0xfb, 0x00, 0xf2, 0x00, 0xff, 0x00, 0x00, 0xfb, 0xf2, 0x00, 0xff, 0x00, 0xfb, 0x00, 0x00, 0xf2, 0xff, 0x00, 0xfb, 0x00, 0xf2, 0x00 }, /* 6250K */ + { 0x00, 0xff, 0xf9, 0x00, 0xec, 0x00, 0xff, 0x00, 0x00, 0xf9, 0xec, 0x00, 0xff, 0x00, 0xf9, 0x00, 0x00, 0xec, 0xff, 0x00, 0xf9, 0x00, 0xec, 0x00 }, /* 6000K */ + { 0x00, 0xff, 0xf7, 0x00, 0xe7, 0x00, 0xff, 0x00, 0x00, 0xf7, 0xe7, 0x00, 0xff, 0x00, 0xf7, 0x00, 0x00, 0xe7, 0xff, 0x00, 0xf7, 0x00, 0xe7, 0x00 }, /* 5750K */ + { 0x00, 0xff, 0xf5, 0x00, 0xe1, 0x00, 0xff, 0x00, 0x00, 0xf5, 0xe1, 0x00, 0xff, 0x00, 0xf5, 0x00, 0x00, 0xe1, 0xff, 0x00, 0xf5, 0x00, 0xe1, 0x00 }, /* 5500K */ + { 0x00, 0xff, 0xef, 0x00, 0xd2, 0x00, 0xff, 0x00, 0x00, 0xef, 0xd2, 0x00, 0xff, 0x00, 0xef, 0x00, 0x00, 0xd2, 0xff, 0x00, 0xef, 0x00, 0xd2, 0x00 }, /* 4900K */ + { 0x00, 0xff, 0xe7, 0x00, 0xbb, 0x00, 0xff, 0x00, 0x00, 0xe7, 0xbb, 0x00, 0xff, 0x00, 0xe7, 0x00, 0x00, 0xbb, 0xff, 0x00, 0xe7, 0x00, 0xbb, 0x00 }, /* 4300K */ + { 0x00, 0xff, 0xde, 0x00, 0xa1, 0x00, 0xff, 0x00, 0x00, 0xde, 0xa1, 0x00, 0xff, 0x00, 0xde, 0x00, 0x00, 0xa1, 0xff, 0x00, 0xde, 0x00, 0xa1, 0x00 }, /* 3700K */ + { 0x00, 0xff, 0xd1, 0x00, 0x83, 0x00, 0xff, 0x00, 0x00, 0xd1, 0x83, 0x00, 0xff, 0x00, 0xd1, 0x00, 0x00, 0x83, 0xff, 0x00, 0xd1, 0x00, 0x83, 0x00 }, /* 3100K */ + { 0x00, 0xff, 0xba, 0x00, 0x5d, 0x00, 0xff, 0x00, 0x00, 0xba, 0x5d, 0x00, 0xff, 0x00, 0xba, 0x00, 0x00, 0x5d, 0xff, 0x00, 0xba, 0x00, 0x5d, 0x00 }, /* 2500K */ + { 0x00, 0xff, 0xf9, 0x00, 0xed, 0x00, 0xff, 0x00, 0x00, 0xf9, 0xed, 0x00, 0xff, 0x00, 0xf9, 0x00, 0x00, 0xed, 0xff, 0x00, 0xf9, 0x00, 0xed, 0x00 }, + { 0x00, 0xff, 0xf9, 0x00, 0xec, 0x00, 0xff, 0x00, 0x00, 0xf9, 0xec, 0x00, 0xff, 0x00, 0xf9, 0x00, 0x00, 0xec, 0xff, 0x00, 0xf9, 0x00, 0xec, 0x00 }, + { 0x00, 0xff, 0xf8, 0x00, 0xea, 0x00, 0xff, 0x00, 0x00, 0xf8, 0xea, 0x00, 0xff, 0x00, 0xf8, 0x00, 0x00, 0xea, 0xff, 0x00, 0xf8, 0x00, 0xea, 0x00 }, + { 0x00, 0xff, 0xf8, 0x00, 0xe9, 0x00, 0xff, 0x00, 0x00, 0xf8, 0xe9, 0x00, 0xff, 0x00, 0xf8, 0x00, 0x00, 0xe9, 0xff, 0x00, 0xf8, 0x00, 0xe9, 0x00 }, + { 0x00, 0xff, 0xf7, 0x00, 0xe8, 0x00, 0xff, 0x00, 0x00, 0xf7, 0xe8, 0x00, 0xff, 0x00, 0xf7, 0x00, 0x00, 0xe8, 0xff, 0x00, 0xf7, 0x00, 0xe8, 0x00 }, + { 0x00, 0xff, 0xf7, 0x00, 0xe7, 0x00, 0xff, 0x00, 0x00, 0xf7, 0xe7, 0x00, 0xff, 0x00, 0xf7, 0x00, 0x00, 0xe7, 0xff, 0x00, 0xf7, 0x00, 0xe7, 0x00 }, + { 0x00, 0xff, 0xf6, 0x00, 0xe5, 0x00, 0xff, 0x00, 0x00, 0xf6, 0xe5, 0x00, 0xff, 0x00, 0xf6, 0x00, 0x00, 0xe5, 0xff, 0x00, 0xf6, 0x00, 0xe5, 0x00 }, + { 0x00, 0xff, 0xf6, 0x00, 0xe4, 0x00, 0xff, 0x00, 0x00, 0xf6, 0xe4, 0x00, 0xff, 0x00, 0xf6, 0x00, 0x00, 0xe4, 0xff, 0x00, 0xf6, 0x00, 0xe4, 0x00 }, + { 0x00, 0xff, 0xf5, 0x00, 0xe3, 0x00, 0xff, 0x00, 0x00, 0xf5, 0xe3, 0x00, 0xff, 0x00, 0xf5, 0x00, 0x00, 0xe3, 0xff, 0x00, 0xf5, 0x00, 0xe3, 0x00 }, + { 0x00, 0xff, 0xf5, 0x00, 0xe1, 0x00, 0xff, 0x00, 0x00, 0xf5, 0xe1, 0x00, 0xff, 0x00, 0xf5, 0x00, 0x00, 0xe1, 0xff, 0x00, 0xf5, 0x00, 0xe1, 0x00 }, + { 0x00, 0xff, 0xf4, 0x00, 0xe0, 0x00, 0xff, 0x00, 0x00, 0xf4, 0xe0, 0x00, 0xff, 0x00, 0xf4, 0x00, 0x00, 0xe0, 0xff, 0x00, 0xf4, 0x00, 0xe0, 0x00 }, + { 0x00, 0xff, 0xf4, 0x00, 0xde, 0x00, 0xff, 0x00, 0x00, 0xf4, 0xde, 0x00, 0xff, 0x00, 0xf4, 0x00, 0x00, 0xde, 0xff, 0x00, 0xf4, 0x00, 0xde, 0x00 }, + { 0x00, 0xff, 0xf3, 0x00, 0xdd, 0x00, 0xff, 0x00, 0x00, 0xf3, 0xdd, 0x00, 0xff, 0x00, 0xf3, 0x00, 0x00, 0xdd, 0xff, 0x00, 0xf3, 0x00, 0xdd, 0x00 }, + { 0x00, 0xff, 0xf3, 0x00, 0xdb, 0x00, 0xff, 0x00, 0x00, 0xf3, 0xdb, 0x00, 0xff, 0x00, 0xf3, 0x00, 0x00, 0xdb, 0xff, 0x00, 0xf3, 0x00, 0xdb, 0x00 }, + { 0x00, 0xff, 0xf2, 0x00, 0xda, 0x00, 0xff, 0x00, 0x00, 0xf2, 0xda, 0x00, 0xff, 0x00, 0xf2, 0x00, 0x00, 0xda, 0xff, 0x00, 0xf2, 0x00, 0xda, 0x00 }, + { 0x00, 0xff, 0xf2, 0x00, 0xd9, 0x00, 0xff, 0x00, 0x00, 0xf2, 0xd9, 0x00, 0xff, 0x00, 0xf2, 0x00, 0x00, 0xd9, 0xff, 0x00, 0xf2, 0x00, 0xd9, 0x00 }, + { 0x00, 0xff, 0xf1, 0x00, 0xd7, 0x00, 0xff, 0x00, 0x00, 0xf1, 0xd7, 0x00, 0xff, 0x00, 0xf1, 0x00, 0x00, 0xd7, 0xff, 0x00, 0xf1, 0x00, 0xd7, 0x00 }, + { 0x00, 0xff, 0xf1, 0x00, 0xd6, 0x00, 0xff, 0x00, 0x00, 0xf1, 0xd6, 0x00, 0xff, 0x00, 0xf1, 0x00, 0x00, 0xd6, 0xff, 0x00, 0xf1, 0x00, 0xd6, 0x00 }, + { 0x00, 0xff, 0xf0, 0x00, 0xd4, 0x00, 0xff, 0x00, 0x00, 0xf0, 0xd4, 0x00, 0xff, 0x00, 0xf0, 0x00, 0x00, 0xd4, 0xff, 0x00, 0xf0, 0x00, 0xd4, 0x00 }, + { 0x00, 0xff, 0xf0, 0x00, 0xd3, 0x00, 0xff, 0x00, 0x00, 0xf0, 0xd3, 0x00, 0xff, 0x00, 0xf0, 0x00, 0x00, 0xd3, 0xff, 0x00, 0xf0, 0x00, 0xd3, 0x00 }, + { 0x00, 0xff, 0xef, 0x00, 0xd1, 0x00, 0xff, 0x00, 0x00, 0xef, 0xd1, 0x00, 0xff, 0x00, 0xef, 0x00, 0x00, 0xd1, 0xff, 0x00, 0xef, 0x00, 0xd1, 0x00 }, + { 0x00, 0xff, 0xef, 0x00, 0xd0, 0x00, 0xff, 0x00, 0x00, 0xef, 0xd0, 0x00, 0xff, 0x00, 0xef, 0x00, 0x00, 0xd0, 0xff, 0x00, 0xef, 0x00, 0xd0, 0x00 }, + { 0x00, 0xff, 0xee, 0x00, 0xce, 0x00, 0xff, 0x00, 0x00, 0xee, 0xce, 0x00, 0xff, 0x00, 0xee, 0x00, 0x00, 0xce, 0xff, 0x00, 0xee, 0x00, 0xce, 0x00 }, + { 0x00, 0xff, 0xee, 0x00, 0xcc, 0x00, 0xff, 0x00, 0x00, 0xee, 0xcc, 0x00, 0xff, 0x00, 0xee, 0x00, 0x00, 0xcc, 0xff, 0x00, 0xee, 0x00, 0xcc, 0x00 }, + { 0x00, 0xff, 0xed, 0x00, 0xca, 0x00, 0xff, 0x00, 0x00, 0xed, 0xca, 0x00, 0xff, 0x00, 0xed, 0x00, 0x00, 0xca, 0xff, 0x00, 0xed, 0x00, 0xca, 0x00 }, + { 0x00, 0xff, 0xed, 0x00, 0xc9, 0x00, 0xff, 0x00, 0x00, 0xed, 0xc9, 0x00, 0xff, 0x00, 0xed, 0x00, 0x00, 0xc9, 0xff, 0x00, 0xed, 0x00, 0xc9, 0x00 }, + { 0x00, 0xff, 0xec, 0x00, 0xc7, 0x00, 0xff, 0x00, 0x00, 0xec, 0xc7, 0x00, 0xff, 0x00, 0xec, 0x00, 0x00, 0xc7, 0xff, 0x00, 0xec, 0x00, 0xc7, 0x00 }, + { 0x00, 0xff, 0xec, 0x00, 0xc5, 0x00, 0xff, 0x00, 0x00, 0xec, 0xc5, 0x00, 0xff, 0x00, 0xec, 0x00, 0x00, 0xc5, 0xff, 0x00, 0xec, 0x00, 0xc5, 0x00 }, + { 0x00, 0xff, 0xeb, 0x00, 0xc3, 0x00, 0xff, 0x00, 0x00, 0xeb, 0xc3, 0x00, 0xff, 0x00, 0xeb, 0x00, 0x00, 0xc3, 0xff, 0x00, 0xeb, 0x00, 0xc3, 0x00 }, + { 0x00, 0xff, 0xea, 0x00, 0xc1, 0x00, 0xff, 0x00, 0x00, 0xea, 0xc1, 0x00, 0xff, 0x00, 0xea, 0x00, 0x00, 0xc1, 0xff, 0x00, 0xea, 0x00, 0xc1, 0x00 }, + { 0x00, 0xff, 0xea, 0x00, 0xbe, 0x00, 0xff, 0x00, 0x00, 0xea, 0xbe, 0x00, 0xff, 0x00, 0xea, 0x00, 0x00, 0xbe, 0xff, 0x00, 0xea, 0x00, 0xbe, 0x00 }, + { 0x00, 0xff, 0xe9, 0x00, 0xbc, 0x00, 0xff, 0x00, 0x00, 0xe9, 0xbc, 0x00, 0xff, 0x00, 0xe9, 0x00, 0x00, 0xbc, 0xff, 0x00, 0xe9, 0x00, 0xbc, 0x00 }, + { 0x00, 0xff, 0xe8, 0x00, 0xba, 0x00, 0xff, 0x00, 0x00, 0xe8, 0xba, 0x00, 0xff, 0x00, 0xe8, 0x00, 0x00, 0xba, 0xff, 0x00, 0xe8, 0x00, 0xba, 0x00 }, + { 0x00, 0xff, 0xe7, 0x00, 0xb8, 0x00, 0xff, 0x00, 0x00, 0xe7, 0xb8, 0x00, 0xff, 0x00, 0xe7, 0x00, 0x00, 0xb8, 0xff, 0x00, 0xe7, 0x00, 0xb8, 0x00 }, + { 0x00, 0xff, 0xe7, 0x00, 0xb5, 0x00, 0xff, 0x00, 0x00, 0xe7, 0xb5, 0x00, 0xff, 0x00, 0xe7, 0x00, 0x00, 0xb5, 0xff, 0x00, 0xe7, 0x00, 0xb5, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, /* 36_4000K */ + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, /* 37_4000K */ + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, }; static unsigned char crown_a3_s0_color_lens_table[COLOR_LENS_COLOR_MAX][COLOR_LENS_LEVEL_MAX][S6E3HA8_COLOR_LENS_LEN] = { @@ -2167,9 +2259,9 @@ static struct mdnie_tune s6e3ha8_crown_a3_s0_mdnie_tune = { [CCRD_PT_9] = { 0xff, 0xfd, 0xf5 }, /* Tune_9 */ }, }, - .num_ldu_mode = 5, - .num_night_level = 10, - .num_color_lens_color = 11, - .num_color_lens_level = 8, + .num_ldu_mode = MAX_LDU_MODE, + .num_night_level = S6E3HA8_CROWN_MAX_NIGHT_LEVEL, + .num_color_lens_color = COLOR_LENS_COLOR_MAX, + .num_color_lens_level = COLOR_LENS_LEVEL_MAX, }; #endif /* __S6E3HA8_CROWN_A3_S0_PANEL_MDNIE_H__ */ diff --git a/drivers/video/fbdev/exynos/panel/s6e3ha8/s6e3ha8_star2_a3_s0_panel_mdnie.h b/drivers/video/fbdev/exynos/panel/s6e3ha8/s6e3ha8_star2_a3_s0_panel_mdnie.h index cca35e610671..808b2a562a6d 100644 --- a/drivers/video/fbdev/exynos/panel/s6e3ha8/s6e3ha8_star2_a3_s0_panel_mdnie.h +++ b/drivers/video/fbdev/exynos/panel/s6e3ha8/s6e3ha8_star2_a3_s0_panel_mdnie.h @@ -61,6 +61,8 @@ #define S6E3HA8_STAR2_A3_S0_COEFF_Q4_G (-996) #define S6E3HA8_STAR2_A3_S0_COEFF_Q4_H (-913) +#define S6E3HA8_STAR2_MAX_NIGHT_LEVEL (102) + /* ############################################# XXX_MODE ############################################# */ /* static unsigned char star2_a3_s0_mdnie_xxx_table[MODE_MAX][S6E3HA8_MDNIE_LEN] = { @@ -1552,19 +1554,109 @@ static unsigned char star2_a3_s0_sensor_rgb_table[][3] = { { 0xff, 0xff, 0xff }, }; -static unsigned char star2_a3_s0_night_mode_table[MAX_NIGHT_LEVEL][S6E3HA8_NIGHT_MODE_LEN] = { - { 0x00, 0xff, 0xfa, 0x00, 0xf0, 0x00, 0xff, 0x00, 0x00, 0xfa, 0xf0, 0x00, 0xff, 0x00, 0xfa, 0x00, 0x00, 0xf0, 0xff, 0x00, 0xfa, 0x00, 0xf0, 0x00 }, /* 6500K */ - { 0x00, 0xff, 0xf7, 0x00, 0xe9, 0x00, 0xff, 0x00, 0x00, 0xf7, 0xe9, 0x00, 0xff, 0x00, 0xf7, 0x00, 0x00, 0xe9, 0xff, 0x00, 0xf7, 0x00, 0xe9, 0x00 }, /* 6100K */ - { 0x00, 0xff, 0xf4, 0x00, 0xe1, 0x00, 0xff, 0x00, 0x00, 0xf4, 0xe1, 0x00, 0xff, 0x00, 0xf4, 0x00, 0x00, 0xe1, 0xff, 0x00, 0xf4, 0x00, 0xe1, 0x00 }, /* 5700K */ - { 0x00, 0xff, 0xf1, 0x00, 0xd8, 0x00, 0xff, 0x00, 0x00, 0xf1, 0xd8, 0x00, 0xff, 0x00, 0xf1, 0x00, 0x00, 0xd8, 0xff, 0x00, 0xf1, 0x00, 0xd8, 0x00 }, /* 5300K */ - { 0x00, 0xff, 0xed, 0x00, 0xcf, 0x00, 0xff, 0x00, 0x00, 0xed, 0xcf, 0x00, 0xff, 0x00, 0xed, 0x00, 0x00, 0xcf, 0xff, 0x00, 0xed, 0x00, 0xcf, 0x00 }, /* 4900K */ - { 0x00, 0xff, 0xe9, 0x00, 0xc1, 0x00, 0xff, 0x00, 0x00, 0xe9, 0xc1, 0x00, 0xff, 0x00, 0xe9, 0x00, 0x00, 0xc1, 0xff, 0x00, 0xe9, 0x00, 0xc1, 0x00 }, /* 4500K */ - { 0x00, 0xff, 0xe4, 0x00, 0xb0, 0x00, 0xff, 0x00, 0x00, 0xe4, 0xb0, 0x00, 0xff, 0x00, 0xe4, 0x00, 0x00, 0xb0, 0xff, 0x00, 0xe4, 0x00, 0xb0, 0x00 }, /* 4100K */ - { 0x00, 0xff, 0xde, 0x00, 0x9c, 0x00, 0xff, 0x00, 0x00, 0xde, 0x9c, 0x00, 0xff, 0x00, 0xde, 0x00, 0x00, 0x9c, 0xff, 0x00, 0xde, 0x00, 0x9c, 0x00 }, /* 3700K */ - { 0x00, 0xff, 0xd8, 0x00, 0x89, 0x00, 0xff, 0x00, 0x00, 0xd8, 0x89, 0x00, 0xff, 0x00, 0xd8, 0x00, 0x00, 0x89, 0xff, 0x00, 0xd8, 0x00, 0x89, 0x00 }, /* 3300K */ - { 0x00, 0xff, 0xd0, 0x00, 0x75, 0x00, 0xff, 0x00, 0x00, 0xd0, 0x75, 0x00, 0xff, 0x00, 0xd0, 0x00, 0x00, 0x75, 0xff, 0x00, 0xd0, 0x00, 0x75, 0x00 }, /* 2900K */ - { 0x00, 0xff, 0xc1, 0x00, 0x5d, 0x00, 0xff, 0x00, 0x00, 0xc1, 0x5d, 0x00, 0xff, 0x00, 0xc1, 0x00, 0x00, 0x5d, 0xff, 0x00, 0xc1, 0x00, 0x5d, 0x00 }, /* 2500K */ - { 0x00, 0xff, 0xfd, 0x00, 0xf8, 0x00, 0xff, 0x00, 0x00, 0xfd, 0xf8, 0x00, 0xff, 0x00, 0xfd, 0x00, 0x00, 0xf8, 0xff, 0x00, 0xfd, 0x00, 0xf8, 0x00 } /* 7000K-Game_Mode */ +static unsigned char star2_a3_s0_night_mode_table[S6E3HA8_STAR2_MAX_NIGHT_LEVEL][S6E3HA8_NIGHT_MODE_LEN] = { + { 0x00, 0xff, 0xfe, 0x00, 0xfb, 0x00, 0xff, 0x00, 0x00, 0xfe, 0xfb, 0x00, 0xff, 0x00, 0xfe, 0x00, 0x00, 0xfb, 0xff, 0x00, 0xfe, 0x00, 0xfb, 0x00 }, /* 6750K */ + { 0x00, 0xff, 0xfc, 0x00, 0xf6, 0x00, 0xff, 0x00, 0x00, 0xfc, 0xf6, 0x00, 0xff, 0x00, 0xfc, 0x00, 0x00, 0xf6, 0xff, 0x00, 0xfc, 0x00, 0xf6, 0x00 }, /* 6500K */ + { 0x00, 0xff, 0xfb, 0x00, 0xf2, 0x00, 0xff, 0x00, 0x00, 0xfb, 0xf2, 0x00, 0xff, 0x00, 0xfb, 0x00, 0x00, 0xf2, 0xff, 0x00, 0xfb, 0x00, 0xf2, 0x00 }, /* 6250K */ + { 0x00, 0xff, 0xf9, 0x00, 0xec, 0x00, 0xff, 0x00, 0x00, 0xf9, 0xec, 0x00, 0xff, 0x00, 0xf9, 0x00, 0x00, 0xec, 0xff, 0x00, 0xf9, 0x00, 0xec, 0x00 }, /* 6000K */ + { 0x00, 0xff, 0xf7, 0x00, 0xe7, 0x00, 0xff, 0x00, 0x00, 0xf7, 0xe7, 0x00, 0xff, 0x00, 0xf7, 0x00, 0x00, 0xe7, 0xff, 0x00, 0xf7, 0x00, 0xe7, 0x00 }, /* 5750K */ + { 0x00, 0xff, 0xf5, 0x00, 0xe1, 0x00, 0xff, 0x00, 0x00, 0xf5, 0xe1, 0x00, 0xff, 0x00, 0xf5, 0x00, 0x00, 0xe1, 0xff, 0x00, 0xf5, 0x00, 0xe1, 0x00 }, /* 5500K */ + { 0x00, 0xff, 0xef, 0x00, 0xd2, 0x00, 0xff, 0x00, 0x00, 0xef, 0xd2, 0x00, 0xff, 0x00, 0xef, 0x00, 0x00, 0xd2, 0xff, 0x00, 0xef, 0x00, 0xd2, 0x00 }, /* 4900K */ + { 0x00, 0xff, 0xe7, 0x00, 0xbb, 0x00, 0xff, 0x00, 0x00, 0xe7, 0xbb, 0x00, 0xff, 0x00, 0xe7, 0x00, 0x00, 0xbb, 0xff, 0x00, 0xe7, 0x00, 0xbb, 0x00 }, /* 4300K */ + { 0x00, 0xff, 0xde, 0x00, 0xa1, 0x00, 0xff, 0x00, 0x00, 0xde, 0xa1, 0x00, 0xff, 0x00, 0xde, 0x00, 0x00, 0xa1, 0xff, 0x00, 0xde, 0x00, 0xa1, 0x00 }, /* 3700K */ + { 0x00, 0xff, 0xd1, 0x00, 0x83, 0x00, 0xff, 0x00, 0x00, 0xd1, 0x83, 0x00, 0xff, 0x00, 0xd1, 0x00, 0x00, 0x83, 0xff, 0x00, 0xd1, 0x00, 0x83, 0x00 }, /* 3100K */ + { 0x00, 0xff, 0xba, 0x00, 0x5d, 0x00, 0xff, 0x00, 0x00, 0xba, 0x5d, 0x00, 0xff, 0x00, 0xba, 0x00, 0x00, 0x5d, 0xff, 0x00, 0xba, 0x00, 0x5d, 0x00 }, /* 2500K */ + { 0x00, 0xff, 0xf9, 0x00, 0xed, 0x00, 0xff, 0x00, 0x00, 0xf9, 0xed, 0x00, 0xff, 0x00, 0xf9, 0x00, 0x00, 0xed, 0xff, 0x00, 0xf9, 0x00, 0xed, 0x00 }, + { 0x00, 0xff, 0xf9, 0x00, 0xec, 0x00, 0xff, 0x00, 0x00, 0xf9, 0xec, 0x00, 0xff, 0x00, 0xf9, 0x00, 0x00, 0xec, 0xff, 0x00, 0xf9, 0x00, 0xec, 0x00 }, + { 0x00, 0xff, 0xf8, 0x00, 0xea, 0x00, 0xff, 0x00, 0x00, 0xf8, 0xea, 0x00, 0xff, 0x00, 0xf8, 0x00, 0x00, 0xea, 0xff, 0x00, 0xf8, 0x00, 0xea, 0x00 }, + { 0x00, 0xff, 0xf8, 0x00, 0xe9, 0x00, 0xff, 0x00, 0x00, 0xf8, 0xe9, 0x00, 0xff, 0x00, 0xf8, 0x00, 0x00, 0xe9, 0xff, 0x00, 0xf8, 0x00, 0xe9, 0x00 }, + { 0x00, 0xff, 0xf7, 0x00, 0xe8, 0x00, 0xff, 0x00, 0x00, 0xf7, 0xe8, 0x00, 0xff, 0x00, 0xf7, 0x00, 0x00, 0xe8, 0xff, 0x00, 0xf7, 0x00, 0xe8, 0x00 }, + { 0x00, 0xff, 0xf7, 0x00, 0xe7, 0x00, 0xff, 0x00, 0x00, 0xf7, 0xe7, 0x00, 0xff, 0x00, 0xf7, 0x00, 0x00, 0xe7, 0xff, 0x00, 0xf7, 0x00, 0xe7, 0x00 }, + { 0x00, 0xff, 0xf6, 0x00, 0xe5, 0x00, 0xff, 0x00, 0x00, 0xf6, 0xe5, 0x00, 0xff, 0x00, 0xf6, 0x00, 0x00, 0xe5, 0xff, 0x00, 0xf6, 0x00, 0xe5, 0x00 }, + { 0x00, 0xff, 0xf6, 0x00, 0xe4, 0x00, 0xff, 0x00, 0x00, 0xf6, 0xe4, 0x00, 0xff, 0x00, 0xf6, 0x00, 0x00, 0xe4, 0xff, 0x00, 0xf6, 0x00, 0xe4, 0x00 }, + { 0x00, 0xff, 0xf5, 0x00, 0xe3, 0x00, 0xff, 0x00, 0x00, 0xf5, 0xe3, 0x00, 0xff, 0x00, 0xf5, 0x00, 0x00, 0xe3, 0xff, 0x00, 0xf5, 0x00, 0xe3, 0x00 }, + { 0x00, 0xff, 0xf5, 0x00, 0xe1, 0x00, 0xff, 0x00, 0x00, 0xf5, 0xe1, 0x00, 0xff, 0x00, 0xf5, 0x00, 0x00, 0xe1, 0xff, 0x00, 0xf5, 0x00, 0xe1, 0x00 }, + { 0x00, 0xff, 0xf4, 0x00, 0xe0, 0x00, 0xff, 0x00, 0x00, 0xf4, 0xe0, 0x00, 0xff, 0x00, 0xf4, 0x00, 0x00, 0xe0, 0xff, 0x00, 0xf4, 0x00, 0xe0, 0x00 }, + { 0x00, 0xff, 0xf4, 0x00, 0xde, 0x00, 0xff, 0x00, 0x00, 0xf4, 0xde, 0x00, 0xff, 0x00, 0xf4, 0x00, 0x00, 0xde, 0xff, 0x00, 0xf4, 0x00, 0xde, 0x00 }, + { 0x00, 0xff, 0xf3, 0x00, 0xdd, 0x00, 0xff, 0x00, 0x00, 0xf3, 0xdd, 0x00, 0xff, 0x00, 0xf3, 0x00, 0x00, 0xdd, 0xff, 0x00, 0xf3, 0x00, 0xdd, 0x00 }, + { 0x00, 0xff, 0xf3, 0x00, 0xdb, 0x00, 0xff, 0x00, 0x00, 0xf3, 0xdb, 0x00, 0xff, 0x00, 0xf3, 0x00, 0x00, 0xdb, 0xff, 0x00, 0xf3, 0x00, 0xdb, 0x00 }, + { 0x00, 0xff, 0xf2, 0x00, 0xda, 0x00, 0xff, 0x00, 0x00, 0xf2, 0xda, 0x00, 0xff, 0x00, 0xf2, 0x00, 0x00, 0xda, 0xff, 0x00, 0xf2, 0x00, 0xda, 0x00 }, + { 0x00, 0xff, 0xf2, 0x00, 0xd9, 0x00, 0xff, 0x00, 0x00, 0xf2, 0xd9, 0x00, 0xff, 0x00, 0xf2, 0x00, 0x00, 0xd9, 0xff, 0x00, 0xf2, 0x00, 0xd9, 0x00 }, + { 0x00, 0xff, 0xf1, 0x00, 0xd7, 0x00, 0xff, 0x00, 0x00, 0xf1, 0xd7, 0x00, 0xff, 0x00, 0xf1, 0x00, 0x00, 0xd7, 0xff, 0x00, 0xf1, 0x00, 0xd7, 0x00 }, + { 0x00, 0xff, 0xf1, 0x00, 0xd6, 0x00, 0xff, 0x00, 0x00, 0xf1, 0xd6, 0x00, 0xff, 0x00, 0xf1, 0x00, 0x00, 0xd6, 0xff, 0x00, 0xf1, 0x00, 0xd6, 0x00 }, + { 0x00, 0xff, 0xf0, 0x00, 0xd4, 0x00, 0xff, 0x00, 0x00, 0xf0, 0xd4, 0x00, 0xff, 0x00, 0xf0, 0x00, 0x00, 0xd4, 0xff, 0x00, 0xf0, 0x00, 0xd4, 0x00 }, + { 0x00, 0xff, 0xf0, 0x00, 0xd3, 0x00, 0xff, 0x00, 0x00, 0xf0, 0xd3, 0x00, 0xff, 0x00, 0xf0, 0x00, 0x00, 0xd3, 0xff, 0x00, 0xf0, 0x00, 0xd3, 0x00 }, + { 0x00, 0xff, 0xef, 0x00, 0xd1, 0x00, 0xff, 0x00, 0x00, 0xef, 0xd1, 0x00, 0xff, 0x00, 0xef, 0x00, 0x00, 0xd1, 0xff, 0x00, 0xef, 0x00, 0xd1, 0x00 }, + { 0x00, 0xff, 0xef, 0x00, 0xd0, 0x00, 0xff, 0x00, 0x00, 0xef, 0xd0, 0x00, 0xff, 0x00, 0xef, 0x00, 0x00, 0xd0, 0xff, 0x00, 0xef, 0x00, 0xd0, 0x00 }, + { 0x00, 0xff, 0xee, 0x00, 0xce, 0x00, 0xff, 0x00, 0x00, 0xee, 0xce, 0x00, 0xff, 0x00, 0xee, 0x00, 0x00, 0xce, 0xff, 0x00, 0xee, 0x00, 0xce, 0x00 }, + { 0x00, 0xff, 0xee, 0x00, 0xcc, 0x00, 0xff, 0x00, 0x00, 0xee, 0xcc, 0x00, 0xff, 0x00, 0xee, 0x00, 0x00, 0xcc, 0xff, 0x00, 0xee, 0x00, 0xcc, 0x00 }, + { 0x00, 0xff, 0xed, 0x00, 0xca, 0x00, 0xff, 0x00, 0x00, 0xed, 0xca, 0x00, 0xff, 0x00, 0xed, 0x00, 0x00, 0xca, 0xff, 0x00, 0xed, 0x00, 0xca, 0x00 }, + { 0x00, 0xff, 0xed, 0x00, 0xc9, 0x00, 0xff, 0x00, 0x00, 0xed, 0xc9, 0x00, 0xff, 0x00, 0xed, 0x00, 0x00, 0xc9, 0xff, 0x00, 0xed, 0x00, 0xc9, 0x00 }, + { 0x00, 0xff, 0xec, 0x00, 0xc7, 0x00, 0xff, 0x00, 0x00, 0xec, 0xc7, 0x00, 0xff, 0x00, 0xec, 0x00, 0x00, 0xc7, 0xff, 0x00, 0xec, 0x00, 0xc7, 0x00 }, + { 0x00, 0xff, 0xec, 0x00, 0xc5, 0x00, 0xff, 0x00, 0x00, 0xec, 0xc5, 0x00, 0xff, 0x00, 0xec, 0x00, 0x00, 0xc5, 0xff, 0x00, 0xec, 0x00, 0xc5, 0x00 }, + { 0x00, 0xff, 0xeb, 0x00, 0xc3, 0x00, 0xff, 0x00, 0x00, 0xeb, 0xc3, 0x00, 0xff, 0x00, 0xeb, 0x00, 0x00, 0xc3, 0xff, 0x00, 0xeb, 0x00, 0xc3, 0x00 }, + { 0x00, 0xff, 0xea, 0x00, 0xc1, 0x00, 0xff, 0x00, 0x00, 0xea, 0xc1, 0x00, 0xff, 0x00, 0xea, 0x00, 0x00, 0xc1, 0xff, 0x00, 0xea, 0x00, 0xc1, 0x00 }, + { 0x00, 0xff, 0xea, 0x00, 0xbe, 0x00, 0xff, 0x00, 0x00, 0xea, 0xbe, 0x00, 0xff, 0x00, 0xea, 0x00, 0x00, 0xbe, 0xff, 0x00, 0xea, 0x00, 0xbe, 0x00 }, + { 0x00, 0xff, 0xe9, 0x00, 0xbc, 0x00, 0xff, 0x00, 0x00, 0xe9, 0xbc, 0x00, 0xff, 0x00, 0xe9, 0x00, 0x00, 0xbc, 0xff, 0x00, 0xe9, 0x00, 0xbc, 0x00 }, + { 0x00, 0xff, 0xe8, 0x00, 0xba, 0x00, 0xff, 0x00, 0x00, 0xe8, 0xba, 0x00, 0xff, 0x00, 0xe8, 0x00, 0x00, 0xba, 0xff, 0x00, 0xe8, 0x00, 0xba, 0x00 }, + { 0x00, 0xff, 0xe7, 0x00, 0xb8, 0x00, 0xff, 0x00, 0x00, 0xe7, 0xb8, 0x00, 0xff, 0x00, 0xe7, 0x00, 0x00, 0xb8, 0xff, 0x00, 0xe7, 0x00, 0xb8, 0x00 }, + { 0x00, 0xff, 0xe7, 0x00, 0xb5, 0x00, 0xff, 0x00, 0x00, 0xe7, 0xb5, 0x00, 0xff, 0x00, 0xe7, 0x00, 0x00, 0xb5, 0xff, 0x00, 0xe7, 0x00, 0xb5, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, /* 36_4000K */ + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, /* 37_4000K */ + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, }; static unsigned char star2_a3_s0_color_lens_table[COLOR_LENS_COLOR_MAX][COLOR_LENS_LEVEL_MAX][S6E3HA8_COLOR_LENS_LEN] = { @@ -2167,9 +2259,9 @@ static struct mdnie_tune s6e3ha8_star2_a3_s0_mdnie_tune = { [CCRD_PT_9] = { 0xff, 0xfe, 0xf6 }, /* Tune_9 */ }, }, - .num_ldu_mode = 5, - .num_night_level = 10, - .num_color_lens_color = 11, - .num_color_lens_level = 8, + .num_ldu_mode = MAX_LDU_MODE, + .num_night_level = S6E3HA8_STAR2_MAX_NIGHT_LEVEL, + .num_color_lens_color = COLOR_LENS_COLOR_MAX, + .num_color_lens_level = COLOR_LENS_LEVEL_MAX, }; #endif /* __S6E3HA8_STAR2_A3_S0_PANEL_MDNIE_H__ */ diff --git a/drivers/video/fbdev/exynos/panel/s6e3ha8/s6e3ha8_star_a3_s0_panel_mdnie.h b/drivers/video/fbdev/exynos/panel/s6e3ha8/s6e3ha8_star_a3_s0_panel_mdnie.h index c5b3cd5b19a1..3d99ae89627d 100644 --- a/drivers/video/fbdev/exynos/panel/s6e3ha8/s6e3ha8_star_a3_s0_panel_mdnie.h +++ b/drivers/video/fbdev/exynos/panel/s6e3ha8/s6e3ha8_star_a3_s0_panel_mdnie.h @@ -61,6 +61,8 @@ #define S6E3HA8_STAR_A3_S0_COEFF_Q4_G (-996) #define S6E3HA8_STAR_A3_S0_COEFF_Q4_H (-913) +#define S6E3HA8_STAR_MAX_NIGHT_LEVEL (102) + /* ############################################# XXX_MODE ############################################# */ /* static unsigned char star_a3_s0_mdnie_xxx_table[MODE_MAX][S6E3HA8_MDNIE_LEN] = { @@ -1552,19 +1554,109 @@ static unsigned char star_a3_s0_sensor_rgb_table[][3] = { { 0xff, 0xff, 0xff }, }; -static unsigned char star_a3_s0_night_mode_table[MAX_NIGHT_LEVEL][S6E3HA8_NIGHT_MODE_LEN] = { - { 0x00, 0xff, 0xf7, 0x00, 0xef, 0x00, 0xff, 0x00, 0x00, 0xf7, 0xef, 0x00, 0xff, 0x00, 0xf7, 0x00, 0x00, 0xef, 0xff, 0x00, 0xf7, 0x00, 0xef, 0x00 }, /* 6500K */ - { 0x00, 0xff, 0xf8, 0x00, 0xea, 0x00, 0xff, 0x00, 0x00, 0xf8, 0xea, 0x00, 0xff, 0x00, 0xf8, 0x00, 0x00, 0xea, 0xff, 0x00, 0xf8, 0x00, 0xea, 0x00 }, /* 6100K */ - { 0x00, 0xff, 0xf5, 0x00, 0xe2, 0x00, 0xff, 0x00, 0x00, 0xf5, 0xe2, 0x00, 0xff, 0x00, 0xf5, 0x00, 0x00, 0xe2, 0xff, 0x00, 0xf5, 0x00, 0xe2, 0x00 }, /* 5700K */ - { 0x00, 0xff, 0xf2, 0x00, 0xda, 0x00, 0xff, 0x00, 0x00, 0xf2, 0xda, 0x00, 0xff, 0x00, 0xf2, 0x00, 0x00, 0xda, 0xff, 0x00, 0xf2, 0x00, 0xda, 0x00 }, /* 5300K */ - { 0x00, 0xff, 0xee, 0x00, 0xd0, 0x00, 0xff, 0x00, 0x00, 0xee, 0xd0, 0x00, 0xff, 0x00, 0xee, 0x00, 0x00, 0xd0, 0xff, 0x00, 0xee, 0x00, 0xd0, 0x00 }, /* 4900K */ - { 0x00, 0xff, 0xea, 0x00, 0xc5, 0x00, 0xff, 0x00, 0x00, 0xea, 0xc5, 0x00, 0xff, 0x00, 0xea, 0x00, 0x00, 0xc5, 0xff, 0x00, 0xea, 0x00, 0xc5, 0x00 }, /* 4500K */ - { 0x00, 0xff, 0xe5, 0x00, 0xb7, 0x00, 0xff, 0x00, 0x00, 0xe5, 0xb7, 0x00, 0xff, 0x00, 0xe5, 0x00, 0x00, 0xb7, 0xff, 0x00, 0xe5, 0x00, 0xb7, 0x00 }, /* 4100K */ - { 0x00, 0xff, 0xde, 0x00, 0xa5, 0x00, 0xff, 0x00, 0x00, 0xde, 0xa5, 0x00, 0xff, 0x00, 0xde, 0x00, 0x00, 0xa5, 0xff, 0x00, 0xde, 0x00, 0xa5, 0x00 }, /* 3700K */ - { 0x00, 0xff, 0xd8, 0x00, 0x93, 0x00, 0xff, 0x00, 0x00, 0xd8, 0x93, 0x00, 0xff, 0x00, 0xd8, 0x00, 0x00, 0x93, 0xff, 0x00, 0xd8, 0x00, 0x93, 0x00 }, /* 3300K */ - { 0x00, 0xff, 0xcf, 0x00, 0x7f, 0x00, 0xff, 0x00, 0x00, 0xcf, 0x7f, 0x00, 0xff, 0x00, 0xcf, 0x00, 0x00, 0x7f, 0xff, 0x00, 0xcf, 0x00, 0x7f, 0x00 }, /* 2900K */ - { 0x00, 0xff, 0xc3, 0x00, 0x6a, 0x00, 0xff, 0x00, 0x00, 0xc3, 0x6a, 0x00, 0xff, 0x00, 0xc3, 0x00, 0x00, 0x6a, 0xff, 0x00, 0xc3, 0x00, 0x6a, 0x00 }, /* 2500K */ - { 0x00, 0xff, 0xfd, 0x00, 0xf8, 0x00, 0xff, 0x00, 0x00, 0xfd, 0xf8, 0x00, 0xff, 0x00, 0xfd, 0x00, 0x00, 0xf8, 0xff, 0x00, 0xfd, 0x00, 0xf8, 0x00 } /* 7000K-Game_Mode */ +static unsigned char star_a3_s0_night_mode_table[S6E3HA8_STAR_MAX_NIGHT_LEVEL][S6E3HA8_NIGHT_MODE_LEN] = { + { 0x00, 0xff, 0xfe, 0x00, 0xfb, 0x00, 0xff, 0x00, 0x00, 0xfe, 0xfb, 0x00, 0xff, 0x00, 0xfe, 0x00, 0x00, 0xfb, 0xff, 0x00, 0xfe, 0x00, 0xfb, 0x00 }, /* 6750K */ + { 0x00, 0xff, 0xfc, 0x00, 0xf6, 0x00, 0xff, 0x00, 0x00, 0xfc, 0xf6, 0x00, 0xff, 0x00, 0xfc, 0x00, 0x00, 0xf6, 0xff, 0x00, 0xfc, 0x00, 0xf6, 0x00 }, /* 6500K */ + { 0x00, 0xff, 0xfb, 0x00, 0xf2, 0x00, 0xff, 0x00, 0x00, 0xfb, 0xf2, 0x00, 0xff, 0x00, 0xfb, 0x00, 0x00, 0xf2, 0xff, 0x00, 0xfb, 0x00, 0xf2, 0x00 }, /* 6250K */ + { 0x00, 0xff, 0xf9, 0x00, 0xec, 0x00, 0xff, 0x00, 0x00, 0xf9, 0xec, 0x00, 0xff, 0x00, 0xf9, 0x00, 0x00, 0xec, 0xff, 0x00, 0xf9, 0x00, 0xec, 0x00 }, /* 6000K */ + { 0x00, 0xff, 0xf7, 0x00, 0xe7, 0x00, 0xff, 0x00, 0x00, 0xf7, 0xe7, 0x00, 0xff, 0x00, 0xf7, 0x00, 0x00, 0xe7, 0xff, 0x00, 0xf7, 0x00, 0xe7, 0x00 }, /* 5750K */ + { 0x00, 0xff, 0xf5, 0x00, 0xe1, 0x00, 0xff, 0x00, 0x00, 0xf5, 0xe1, 0x00, 0xff, 0x00, 0xf5, 0x00, 0x00, 0xe1, 0xff, 0x00, 0xf5, 0x00, 0xe1, 0x00 }, /* 5500K */ + { 0x00, 0xff, 0xef, 0x00, 0xd2, 0x00, 0xff, 0x00, 0x00, 0xef, 0xd2, 0x00, 0xff, 0x00, 0xef, 0x00, 0x00, 0xd2, 0xff, 0x00, 0xef, 0x00, 0xd2, 0x00 }, /* 4900K */ + { 0x00, 0xff, 0xe7, 0x00, 0xbb, 0x00, 0xff, 0x00, 0x00, 0xe7, 0xbb, 0x00, 0xff, 0x00, 0xe7, 0x00, 0x00, 0xbb, 0xff, 0x00, 0xe7, 0x00, 0xbb, 0x00 }, /* 4300K */ + { 0x00, 0xff, 0xde, 0x00, 0xa1, 0x00, 0xff, 0x00, 0x00, 0xde, 0xa1, 0x00, 0xff, 0x00, 0xde, 0x00, 0x00, 0xa1, 0xff, 0x00, 0xde, 0x00, 0xa1, 0x00 }, /* 3700K */ + { 0x00, 0xff, 0xd1, 0x00, 0x83, 0x00, 0xff, 0x00, 0x00, 0xd1, 0x83, 0x00, 0xff, 0x00, 0xd1, 0x00, 0x00, 0x83, 0xff, 0x00, 0xd1, 0x00, 0x83, 0x00 }, /* 3100K */ + { 0x00, 0xff, 0xba, 0x00, 0x5d, 0x00, 0xff, 0x00, 0x00, 0xba, 0x5d, 0x00, 0xff, 0x00, 0xba, 0x00, 0x00, 0x5d, 0xff, 0x00, 0xba, 0x00, 0x5d, 0x00 }, /* 2500K */ + { 0x00, 0xff, 0xf9, 0x00, 0xed, 0x00, 0xff, 0x00, 0x00, 0xf9, 0xed, 0x00, 0xff, 0x00, 0xf9, 0x00, 0x00, 0xed, 0xff, 0x00, 0xf9, 0x00, 0xed, 0x00 }, + { 0x00, 0xff, 0xf9, 0x00, 0xec, 0x00, 0xff, 0x00, 0x00, 0xf9, 0xec, 0x00, 0xff, 0x00, 0xf9, 0x00, 0x00, 0xec, 0xff, 0x00, 0xf9, 0x00, 0xec, 0x00 }, + { 0x00, 0xff, 0xf8, 0x00, 0xea, 0x00, 0xff, 0x00, 0x00, 0xf8, 0xea, 0x00, 0xff, 0x00, 0xf8, 0x00, 0x00, 0xea, 0xff, 0x00, 0xf8, 0x00, 0xea, 0x00 }, + { 0x00, 0xff, 0xf8, 0x00, 0xe9, 0x00, 0xff, 0x00, 0x00, 0xf8, 0xe9, 0x00, 0xff, 0x00, 0xf8, 0x00, 0x00, 0xe9, 0xff, 0x00, 0xf8, 0x00, 0xe9, 0x00 }, + { 0x00, 0xff, 0xf7, 0x00, 0xe8, 0x00, 0xff, 0x00, 0x00, 0xf7, 0xe8, 0x00, 0xff, 0x00, 0xf7, 0x00, 0x00, 0xe8, 0xff, 0x00, 0xf7, 0x00, 0xe8, 0x00 }, + { 0x00, 0xff, 0xf7, 0x00, 0xe7, 0x00, 0xff, 0x00, 0x00, 0xf7, 0xe7, 0x00, 0xff, 0x00, 0xf7, 0x00, 0x00, 0xe7, 0xff, 0x00, 0xf7, 0x00, 0xe7, 0x00 }, + { 0x00, 0xff, 0xf6, 0x00, 0xe5, 0x00, 0xff, 0x00, 0x00, 0xf6, 0xe5, 0x00, 0xff, 0x00, 0xf6, 0x00, 0x00, 0xe5, 0xff, 0x00, 0xf6, 0x00, 0xe5, 0x00 }, + { 0x00, 0xff, 0xf6, 0x00, 0xe4, 0x00, 0xff, 0x00, 0x00, 0xf6, 0xe4, 0x00, 0xff, 0x00, 0xf6, 0x00, 0x00, 0xe4, 0xff, 0x00, 0xf6, 0x00, 0xe4, 0x00 }, + { 0x00, 0xff, 0xf5, 0x00, 0xe3, 0x00, 0xff, 0x00, 0x00, 0xf5, 0xe3, 0x00, 0xff, 0x00, 0xf5, 0x00, 0x00, 0xe3, 0xff, 0x00, 0xf5, 0x00, 0xe3, 0x00 }, + { 0x00, 0xff, 0xf5, 0x00, 0xe1, 0x00, 0xff, 0x00, 0x00, 0xf5, 0xe1, 0x00, 0xff, 0x00, 0xf5, 0x00, 0x00, 0xe1, 0xff, 0x00, 0xf5, 0x00, 0xe1, 0x00 }, + { 0x00, 0xff, 0xf4, 0x00, 0xe0, 0x00, 0xff, 0x00, 0x00, 0xf4, 0xe0, 0x00, 0xff, 0x00, 0xf4, 0x00, 0x00, 0xe0, 0xff, 0x00, 0xf4, 0x00, 0xe0, 0x00 }, + { 0x00, 0xff, 0xf4, 0x00, 0xde, 0x00, 0xff, 0x00, 0x00, 0xf4, 0xde, 0x00, 0xff, 0x00, 0xf4, 0x00, 0x00, 0xde, 0xff, 0x00, 0xf4, 0x00, 0xde, 0x00 }, + { 0x00, 0xff, 0xf3, 0x00, 0xdd, 0x00, 0xff, 0x00, 0x00, 0xf3, 0xdd, 0x00, 0xff, 0x00, 0xf3, 0x00, 0x00, 0xdd, 0xff, 0x00, 0xf3, 0x00, 0xdd, 0x00 }, + { 0x00, 0xff, 0xf3, 0x00, 0xdb, 0x00, 0xff, 0x00, 0x00, 0xf3, 0xdb, 0x00, 0xff, 0x00, 0xf3, 0x00, 0x00, 0xdb, 0xff, 0x00, 0xf3, 0x00, 0xdb, 0x00 }, + { 0x00, 0xff, 0xf2, 0x00, 0xda, 0x00, 0xff, 0x00, 0x00, 0xf2, 0xda, 0x00, 0xff, 0x00, 0xf2, 0x00, 0x00, 0xda, 0xff, 0x00, 0xf2, 0x00, 0xda, 0x00 }, + { 0x00, 0xff, 0xf2, 0x00, 0xd9, 0x00, 0xff, 0x00, 0x00, 0xf2, 0xd9, 0x00, 0xff, 0x00, 0xf2, 0x00, 0x00, 0xd9, 0xff, 0x00, 0xf2, 0x00, 0xd9, 0x00 }, + { 0x00, 0xff, 0xf1, 0x00, 0xd7, 0x00, 0xff, 0x00, 0x00, 0xf1, 0xd7, 0x00, 0xff, 0x00, 0xf1, 0x00, 0x00, 0xd7, 0xff, 0x00, 0xf1, 0x00, 0xd7, 0x00 }, + { 0x00, 0xff, 0xf1, 0x00, 0xd6, 0x00, 0xff, 0x00, 0x00, 0xf1, 0xd6, 0x00, 0xff, 0x00, 0xf1, 0x00, 0x00, 0xd6, 0xff, 0x00, 0xf1, 0x00, 0xd6, 0x00 }, + { 0x00, 0xff, 0xf0, 0x00, 0xd4, 0x00, 0xff, 0x00, 0x00, 0xf0, 0xd4, 0x00, 0xff, 0x00, 0xf0, 0x00, 0x00, 0xd4, 0xff, 0x00, 0xf0, 0x00, 0xd4, 0x00 }, + { 0x00, 0xff, 0xf0, 0x00, 0xd3, 0x00, 0xff, 0x00, 0x00, 0xf0, 0xd3, 0x00, 0xff, 0x00, 0xf0, 0x00, 0x00, 0xd3, 0xff, 0x00, 0xf0, 0x00, 0xd3, 0x00 }, + { 0x00, 0xff, 0xef, 0x00, 0xd1, 0x00, 0xff, 0x00, 0x00, 0xef, 0xd1, 0x00, 0xff, 0x00, 0xef, 0x00, 0x00, 0xd1, 0xff, 0x00, 0xef, 0x00, 0xd1, 0x00 }, + { 0x00, 0xff, 0xef, 0x00, 0xd0, 0x00, 0xff, 0x00, 0x00, 0xef, 0xd0, 0x00, 0xff, 0x00, 0xef, 0x00, 0x00, 0xd0, 0xff, 0x00, 0xef, 0x00, 0xd0, 0x00 }, + { 0x00, 0xff, 0xee, 0x00, 0xce, 0x00, 0xff, 0x00, 0x00, 0xee, 0xce, 0x00, 0xff, 0x00, 0xee, 0x00, 0x00, 0xce, 0xff, 0x00, 0xee, 0x00, 0xce, 0x00 }, + { 0x00, 0xff, 0xee, 0x00, 0xcc, 0x00, 0xff, 0x00, 0x00, 0xee, 0xcc, 0x00, 0xff, 0x00, 0xee, 0x00, 0x00, 0xcc, 0xff, 0x00, 0xee, 0x00, 0xcc, 0x00 }, + { 0x00, 0xff, 0xed, 0x00, 0xca, 0x00, 0xff, 0x00, 0x00, 0xed, 0xca, 0x00, 0xff, 0x00, 0xed, 0x00, 0x00, 0xca, 0xff, 0x00, 0xed, 0x00, 0xca, 0x00 }, + { 0x00, 0xff, 0xed, 0x00, 0xc9, 0x00, 0xff, 0x00, 0x00, 0xed, 0xc9, 0x00, 0xff, 0x00, 0xed, 0x00, 0x00, 0xc9, 0xff, 0x00, 0xed, 0x00, 0xc9, 0x00 }, + { 0x00, 0xff, 0xec, 0x00, 0xc7, 0x00, 0xff, 0x00, 0x00, 0xec, 0xc7, 0x00, 0xff, 0x00, 0xec, 0x00, 0x00, 0xc7, 0xff, 0x00, 0xec, 0x00, 0xc7, 0x00 }, + { 0x00, 0xff, 0xec, 0x00, 0xc5, 0x00, 0xff, 0x00, 0x00, 0xec, 0xc5, 0x00, 0xff, 0x00, 0xec, 0x00, 0x00, 0xc5, 0xff, 0x00, 0xec, 0x00, 0xc5, 0x00 }, + { 0x00, 0xff, 0xeb, 0x00, 0xc3, 0x00, 0xff, 0x00, 0x00, 0xeb, 0xc3, 0x00, 0xff, 0x00, 0xeb, 0x00, 0x00, 0xc3, 0xff, 0x00, 0xeb, 0x00, 0xc3, 0x00 }, + { 0x00, 0xff, 0xea, 0x00, 0xc1, 0x00, 0xff, 0x00, 0x00, 0xea, 0xc1, 0x00, 0xff, 0x00, 0xea, 0x00, 0x00, 0xc1, 0xff, 0x00, 0xea, 0x00, 0xc1, 0x00 }, + { 0x00, 0xff, 0xea, 0x00, 0xbe, 0x00, 0xff, 0x00, 0x00, 0xea, 0xbe, 0x00, 0xff, 0x00, 0xea, 0x00, 0x00, 0xbe, 0xff, 0x00, 0xea, 0x00, 0xbe, 0x00 }, + { 0x00, 0xff, 0xe9, 0x00, 0xbc, 0x00, 0xff, 0x00, 0x00, 0xe9, 0xbc, 0x00, 0xff, 0x00, 0xe9, 0x00, 0x00, 0xbc, 0xff, 0x00, 0xe9, 0x00, 0xbc, 0x00 }, + { 0x00, 0xff, 0xe8, 0x00, 0xba, 0x00, 0xff, 0x00, 0x00, 0xe8, 0xba, 0x00, 0xff, 0x00, 0xe8, 0x00, 0x00, 0xba, 0xff, 0x00, 0xe8, 0x00, 0xba, 0x00 }, + { 0x00, 0xff, 0xe7, 0x00, 0xb8, 0x00, 0xff, 0x00, 0x00, 0xe7, 0xb8, 0x00, 0xff, 0x00, 0xe7, 0x00, 0x00, 0xb8, 0xff, 0x00, 0xe7, 0x00, 0xb8, 0x00 }, + { 0x00, 0xff, 0xe7, 0x00, 0xb5, 0x00, 0xff, 0x00, 0x00, 0xe7, 0xb5, 0x00, 0xff, 0x00, 0xe7, 0x00, 0x00, 0xb5, 0xff, 0x00, 0xe7, 0x00, 0xb5, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, /* 36_4000K */ + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, /* 37_4000K */ + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, }; static unsigned char star_a3_s0_color_lens_table[COLOR_LENS_COLOR_MAX][COLOR_LENS_LEVEL_MAX][S6E3HA8_COLOR_LENS_LEN] = { @@ -2167,9 +2259,9 @@ static struct mdnie_tune s6e3ha8_star_a3_s0_mdnie_tune = { [CCRD_PT_9] = { 0xff, 0xfe, 0xf6 }, /* Tune_9 */ }, }, - .num_ldu_mode = 5, - .num_night_level = 10, - .num_color_lens_color = 11, - .num_color_lens_level = 8, + .num_ldu_mode = MAX_LDU_MODE, + .num_night_level = S6E3HA8_STAR_MAX_NIGHT_LEVEL, + .num_color_lens_color = COLOR_LENS_COLOR_MAX, + .num_color_lens_level = COLOR_LENS_LEVEL_MAX, }; #endif /* __S6E3HA8_STAR_A3_S0_PANEL_MDNIE_H__ */ diff --git a/drivers/video/fbdev/exynos/panel/s6e3ha8/s6e3ha8_star_a3_s1_panel_mdnie.h b/drivers/video/fbdev/exynos/panel/s6e3ha8/s6e3ha8_star_a3_s1_panel_mdnie.h index 0a49902816d1..e68b1a02f3fc 100644 --- a/drivers/video/fbdev/exynos/panel/s6e3ha8/s6e3ha8_star_a3_s1_panel_mdnie.h +++ b/drivers/video/fbdev/exynos/panel/s6e3ha8/s6e3ha8_star_a3_s1_panel_mdnie.h @@ -61,6 +61,8 @@ #define S6E3HA8_STAR_A3_S1_COEFF_Q4_G (-996) #define S6E3HA8_STAR_A3_S1_COEFF_Q4_H (-913) +#define S6E3HA8_STAR_MAX_NIGHT_LEVEL (102) + /* ############################################# XXX_MODE ############################################# */ /* static unsigned char star_a3_s1_mdnie_xxx_table[MODE_MAX][S6E3HA8_MDNIE_LEN] = { @@ -1552,19 +1554,109 @@ static unsigned char star_a3_s1_sensor_rgb_table[][3] = { { 0xff, 0xff, 0xff }, }; -static unsigned char star_a3_s1_night_mode_table[MAX_NIGHT_LEVEL][S6E3HA8_NIGHT_MODE_LEN] = { - { 0x00, 0xff, 0xf7, 0x00, 0xef, 0x00, 0xff, 0x00, 0x00, 0xf7, 0xef, 0x00, 0xff, 0x00, 0xf7, 0x00, 0x00, 0xef, 0xff, 0x00, 0xf7, 0x00, 0xef, 0x00 }, /* 6500K */ - { 0x00, 0xff, 0xf8, 0x00, 0xea, 0x00, 0xff, 0x00, 0x00, 0xf8, 0xea, 0x00, 0xff, 0x00, 0xf8, 0x00, 0x00, 0xea, 0xff, 0x00, 0xf8, 0x00, 0xea, 0x00 }, /* 6100K */ - { 0x00, 0xff, 0xf5, 0x00, 0xe2, 0x00, 0xff, 0x00, 0x00, 0xf5, 0xe2, 0x00, 0xff, 0x00, 0xf5, 0x00, 0x00, 0xe2, 0xff, 0x00, 0xf5, 0x00, 0xe2, 0x00 }, /* 5700K */ - { 0x00, 0xff, 0xf2, 0x00, 0xda, 0x00, 0xff, 0x00, 0x00, 0xf2, 0xda, 0x00, 0xff, 0x00, 0xf2, 0x00, 0x00, 0xda, 0xff, 0x00, 0xf2, 0x00, 0xda, 0x00 }, /* 5300K */ - { 0x00, 0xff, 0xee, 0x00, 0xd0, 0x00, 0xff, 0x00, 0x00, 0xee, 0xd0, 0x00, 0xff, 0x00, 0xee, 0x00, 0x00, 0xd0, 0xff, 0x00, 0xee, 0x00, 0xd0, 0x00 }, /* 4900K */ - { 0x00, 0xff, 0xea, 0x00, 0xc5, 0x00, 0xff, 0x00, 0x00, 0xea, 0xc5, 0x00, 0xff, 0x00, 0xea, 0x00, 0x00, 0xc5, 0xff, 0x00, 0xea, 0x00, 0xc5, 0x00 }, /* 4500K */ - { 0x00, 0xff, 0xe5, 0x00, 0xb7, 0x00, 0xff, 0x00, 0x00, 0xe5, 0xb7, 0x00, 0xff, 0x00, 0xe5, 0x00, 0x00, 0xb7, 0xff, 0x00, 0xe5, 0x00, 0xb7, 0x00 }, /* 4100K */ - { 0x00, 0xff, 0xde, 0x00, 0xa5, 0x00, 0xff, 0x00, 0x00, 0xde, 0xa5, 0x00, 0xff, 0x00, 0xde, 0x00, 0x00, 0xa5, 0xff, 0x00, 0xde, 0x00, 0xa5, 0x00 }, /* 3700K */ - { 0x00, 0xff, 0xd8, 0x00, 0x93, 0x00, 0xff, 0x00, 0x00, 0xd8, 0x93, 0x00, 0xff, 0x00, 0xd8, 0x00, 0x00, 0x93, 0xff, 0x00, 0xd8, 0x00, 0x93, 0x00 }, /* 3300K */ - { 0x00, 0xff, 0xcf, 0x00, 0x7f, 0x00, 0xff, 0x00, 0x00, 0xcf, 0x7f, 0x00, 0xff, 0x00, 0xcf, 0x00, 0x00, 0x7f, 0xff, 0x00, 0xcf, 0x00, 0x7f, 0x00 }, /* 2900K */ - { 0x00, 0xff, 0xc3, 0x00, 0x6a, 0x00, 0xff, 0x00, 0x00, 0xc3, 0x6a, 0x00, 0xff, 0x00, 0xc3, 0x00, 0x00, 0x6a, 0xff, 0x00, 0xc3, 0x00, 0x6a, 0x00 }, /* 2500K */ - { 0x00, 0xff, 0xfd, 0x00, 0xf8, 0x00, 0xff, 0x00, 0x00, 0xfd, 0xf8, 0x00, 0xff, 0x00, 0xfd, 0x00, 0x00, 0xf8, 0xff, 0x00, 0xfd, 0x00, 0xf8, 0x00 } /* 7000K-Game_Mode */ +static unsigned char star_a3_s1_night_mode_table[S6E3HA8_STAR_MAX_NIGHT_LEVEL][S6E3HA8_NIGHT_MODE_LEN] = { + { 0x00, 0xff, 0xfe, 0x00, 0xfb, 0x00, 0xff, 0x00, 0x00, 0xfe, 0xfb, 0x00, 0xff, 0x00, 0xfe, 0x00, 0x00, 0xfb, 0xff, 0x00, 0xfe, 0x00, 0xfb, 0x00 }, /* 6750K */ + { 0x00, 0xff, 0xfc, 0x00, 0xf6, 0x00, 0xff, 0x00, 0x00, 0xfc, 0xf6, 0x00, 0xff, 0x00, 0xfc, 0x00, 0x00, 0xf6, 0xff, 0x00, 0xfc, 0x00, 0xf6, 0x00 }, /* 6500K */ + { 0x00, 0xff, 0xfb, 0x00, 0xf2, 0x00, 0xff, 0x00, 0x00, 0xfb, 0xf2, 0x00, 0xff, 0x00, 0xfb, 0x00, 0x00, 0xf2, 0xff, 0x00, 0xfb, 0x00, 0xf2, 0x00 }, /* 6250K */ + { 0x00, 0xff, 0xf9, 0x00, 0xec, 0x00, 0xff, 0x00, 0x00, 0xf9, 0xec, 0x00, 0xff, 0x00, 0xf9, 0x00, 0x00, 0xec, 0xff, 0x00, 0xf9, 0x00, 0xec, 0x00 }, /* 6000K */ + { 0x00, 0xff, 0xf7, 0x00, 0xe7, 0x00, 0xff, 0x00, 0x00, 0xf7, 0xe7, 0x00, 0xff, 0x00, 0xf7, 0x00, 0x00, 0xe7, 0xff, 0x00, 0xf7, 0x00, 0xe7, 0x00 }, /* 5750K */ + { 0x00, 0xff, 0xf5, 0x00, 0xe1, 0x00, 0xff, 0x00, 0x00, 0xf5, 0xe1, 0x00, 0xff, 0x00, 0xf5, 0x00, 0x00, 0xe1, 0xff, 0x00, 0xf5, 0x00, 0xe1, 0x00 }, /* 5500K */ + { 0x00, 0xff, 0xef, 0x00, 0xd2, 0x00, 0xff, 0x00, 0x00, 0xef, 0xd2, 0x00, 0xff, 0x00, 0xef, 0x00, 0x00, 0xd2, 0xff, 0x00, 0xef, 0x00, 0xd2, 0x00 }, /* 4900K */ + { 0x00, 0xff, 0xe7, 0x00, 0xbb, 0x00, 0xff, 0x00, 0x00, 0xe7, 0xbb, 0x00, 0xff, 0x00, 0xe7, 0x00, 0x00, 0xbb, 0xff, 0x00, 0xe7, 0x00, 0xbb, 0x00 }, /* 4300K */ + { 0x00, 0xff, 0xde, 0x00, 0xa1, 0x00, 0xff, 0x00, 0x00, 0xde, 0xa1, 0x00, 0xff, 0x00, 0xde, 0x00, 0x00, 0xa1, 0xff, 0x00, 0xde, 0x00, 0xa1, 0x00 }, /* 3700K */ + { 0x00, 0xff, 0xd1, 0x00, 0x83, 0x00, 0xff, 0x00, 0x00, 0xd1, 0x83, 0x00, 0xff, 0x00, 0xd1, 0x00, 0x00, 0x83, 0xff, 0x00, 0xd1, 0x00, 0x83, 0x00 }, /* 3100K */ + { 0x00, 0xff, 0xba, 0x00, 0x5d, 0x00, 0xff, 0x00, 0x00, 0xba, 0x5d, 0x00, 0xff, 0x00, 0xba, 0x00, 0x00, 0x5d, 0xff, 0x00, 0xba, 0x00, 0x5d, 0x00 }, /* 2500K */ + { 0x00, 0xff, 0xf9, 0x00, 0xed, 0x00, 0xff, 0x00, 0x00, 0xf9, 0xed, 0x00, 0xff, 0x00, 0xf9, 0x00, 0x00, 0xed, 0xff, 0x00, 0xf9, 0x00, 0xed, 0x00 }, + { 0x00, 0xff, 0xf9, 0x00, 0xec, 0x00, 0xff, 0x00, 0x00, 0xf9, 0xec, 0x00, 0xff, 0x00, 0xf9, 0x00, 0x00, 0xec, 0xff, 0x00, 0xf9, 0x00, 0xec, 0x00 }, + { 0x00, 0xff, 0xf8, 0x00, 0xea, 0x00, 0xff, 0x00, 0x00, 0xf8, 0xea, 0x00, 0xff, 0x00, 0xf8, 0x00, 0x00, 0xea, 0xff, 0x00, 0xf8, 0x00, 0xea, 0x00 }, + { 0x00, 0xff, 0xf8, 0x00, 0xe9, 0x00, 0xff, 0x00, 0x00, 0xf8, 0xe9, 0x00, 0xff, 0x00, 0xf8, 0x00, 0x00, 0xe9, 0xff, 0x00, 0xf8, 0x00, 0xe9, 0x00 }, + { 0x00, 0xff, 0xf7, 0x00, 0xe8, 0x00, 0xff, 0x00, 0x00, 0xf7, 0xe8, 0x00, 0xff, 0x00, 0xf7, 0x00, 0x00, 0xe8, 0xff, 0x00, 0xf7, 0x00, 0xe8, 0x00 }, + { 0x00, 0xff, 0xf7, 0x00, 0xe7, 0x00, 0xff, 0x00, 0x00, 0xf7, 0xe7, 0x00, 0xff, 0x00, 0xf7, 0x00, 0x00, 0xe7, 0xff, 0x00, 0xf7, 0x00, 0xe7, 0x00 }, + { 0x00, 0xff, 0xf6, 0x00, 0xe5, 0x00, 0xff, 0x00, 0x00, 0xf6, 0xe5, 0x00, 0xff, 0x00, 0xf6, 0x00, 0x00, 0xe5, 0xff, 0x00, 0xf6, 0x00, 0xe5, 0x00 }, + { 0x00, 0xff, 0xf6, 0x00, 0xe4, 0x00, 0xff, 0x00, 0x00, 0xf6, 0xe4, 0x00, 0xff, 0x00, 0xf6, 0x00, 0x00, 0xe4, 0xff, 0x00, 0xf6, 0x00, 0xe4, 0x00 }, + { 0x00, 0xff, 0xf5, 0x00, 0xe3, 0x00, 0xff, 0x00, 0x00, 0xf5, 0xe3, 0x00, 0xff, 0x00, 0xf5, 0x00, 0x00, 0xe3, 0xff, 0x00, 0xf5, 0x00, 0xe3, 0x00 }, + { 0x00, 0xff, 0xf5, 0x00, 0xe1, 0x00, 0xff, 0x00, 0x00, 0xf5, 0xe1, 0x00, 0xff, 0x00, 0xf5, 0x00, 0x00, 0xe1, 0xff, 0x00, 0xf5, 0x00, 0xe1, 0x00 }, + { 0x00, 0xff, 0xf4, 0x00, 0xe0, 0x00, 0xff, 0x00, 0x00, 0xf4, 0xe0, 0x00, 0xff, 0x00, 0xf4, 0x00, 0x00, 0xe0, 0xff, 0x00, 0xf4, 0x00, 0xe0, 0x00 }, + { 0x00, 0xff, 0xf4, 0x00, 0xde, 0x00, 0xff, 0x00, 0x00, 0xf4, 0xde, 0x00, 0xff, 0x00, 0xf4, 0x00, 0x00, 0xde, 0xff, 0x00, 0xf4, 0x00, 0xde, 0x00 }, + { 0x00, 0xff, 0xf3, 0x00, 0xdd, 0x00, 0xff, 0x00, 0x00, 0xf3, 0xdd, 0x00, 0xff, 0x00, 0xf3, 0x00, 0x00, 0xdd, 0xff, 0x00, 0xf3, 0x00, 0xdd, 0x00 }, + { 0x00, 0xff, 0xf3, 0x00, 0xdb, 0x00, 0xff, 0x00, 0x00, 0xf3, 0xdb, 0x00, 0xff, 0x00, 0xf3, 0x00, 0x00, 0xdb, 0xff, 0x00, 0xf3, 0x00, 0xdb, 0x00 }, + { 0x00, 0xff, 0xf2, 0x00, 0xda, 0x00, 0xff, 0x00, 0x00, 0xf2, 0xda, 0x00, 0xff, 0x00, 0xf2, 0x00, 0x00, 0xda, 0xff, 0x00, 0xf2, 0x00, 0xda, 0x00 }, + { 0x00, 0xff, 0xf2, 0x00, 0xd9, 0x00, 0xff, 0x00, 0x00, 0xf2, 0xd9, 0x00, 0xff, 0x00, 0xf2, 0x00, 0x00, 0xd9, 0xff, 0x00, 0xf2, 0x00, 0xd9, 0x00 }, + { 0x00, 0xff, 0xf1, 0x00, 0xd7, 0x00, 0xff, 0x00, 0x00, 0xf1, 0xd7, 0x00, 0xff, 0x00, 0xf1, 0x00, 0x00, 0xd7, 0xff, 0x00, 0xf1, 0x00, 0xd7, 0x00 }, + { 0x00, 0xff, 0xf1, 0x00, 0xd6, 0x00, 0xff, 0x00, 0x00, 0xf1, 0xd6, 0x00, 0xff, 0x00, 0xf1, 0x00, 0x00, 0xd6, 0xff, 0x00, 0xf1, 0x00, 0xd6, 0x00 }, + { 0x00, 0xff, 0xf0, 0x00, 0xd4, 0x00, 0xff, 0x00, 0x00, 0xf0, 0xd4, 0x00, 0xff, 0x00, 0xf0, 0x00, 0x00, 0xd4, 0xff, 0x00, 0xf0, 0x00, 0xd4, 0x00 }, + { 0x00, 0xff, 0xf0, 0x00, 0xd3, 0x00, 0xff, 0x00, 0x00, 0xf0, 0xd3, 0x00, 0xff, 0x00, 0xf0, 0x00, 0x00, 0xd3, 0xff, 0x00, 0xf0, 0x00, 0xd3, 0x00 }, + { 0x00, 0xff, 0xef, 0x00, 0xd1, 0x00, 0xff, 0x00, 0x00, 0xef, 0xd1, 0x00, 0xff, 0x00, 0xef, 0x00, 0x00, 0xd1, 0xff, 0x00, 0xef, 0x00, 0xd1, 0x00 }, + { 0x00, 0xff, 0xef, 0x00, 0xd0, 0x00, 0xff, 0x00, 0x00, 0xef, 0xd0, 0x00, 0xff, 0x00, 0xef, 0x00, 0x00, 0xd0, 0xff, 0x00, 0xef, 0x00, 0xd0, 0x00 }, + { 0x00, 0xff, 0xee, 0x00, 0xce, 0x00, 0xff, 0x00, 0x00, 0xee, 0xce, 0x00, 0xff, 0x00, 0xee, 0x00, 0x00, 0xce, 0xff, 0x00, 0xee, 0x00, 0xce, 0x00 }, + { 0x00, 0xff, 0xee, 0x00, 0xcc, 0x00, 0xff, 0x00, 0x00, 0xee, 0xcc, 0x00, 0xff, 0x00, 0xee, 0x00, 0x00, 0xcc, 0xff, 0x00, 0xee, 0x00, 0xcc, 0x00 }, + { 0x00, 0xff, 0xed, 0x00, 0xca, 0x00, 0xff, 0x00, 0x00, 0xed, 0xca, 0x00, 0xff, 0x00, 0xed, 0x00, 0x00, 0xca, 0xff, 0x00, 0xed, 0x00, 0xca, 0x00 }, + { 0x00, 0xff, 0xed, 0x00, 0xc9, 0x00, 0xff, 0x00, 0x00, 0xed, 0xc9, 0x00, 0xff, 0x00, 0xed, 0x00, 0x00, 0xc9, 0xff, 0x00, 0xed, 0x00, 0xc9, 0x00 }, + { 0x00, 0xff, 0xec, 0x00, 0xc7, 0x00, 0xff, 0x00, 0x00, 0xec, 0xc7, 0x00, 0xff, 0x00, 0xec, 0x00, 0x00, 0xc7, 0xff, 0x00, 0xec, 0x00, 0xc7, 0x00 }, + { 0x00, 0xff, 0xec, 0x00, 0xc5, 0x00, 0xff, 0x00, 0x00, 0xec, 0xc5, 0x00, 0xff, 0x00, 0xec, 0x00, 0x00, 0xc5, 0xff, 0x00, 0xec, 0x00, 0xc5, 0x00 }, + { 0x00, 0xff, 0xeb, 0x00, 0xc3, 0x00, 0xff, 0x00, 0x00, 0xeb, 0xc3, 0x00, 0xff, 0x00, 0xeb, 0x00, 0x00, 0xc3, 0xff, 0x00, 0xeb, 0x00, 0xc3, 0x00 }, + { 0x00, 0xff, 0xea, 0x00, 0xc1, 0x00, 0xff, 0x00, 0x00, 0xea, 0xc1, 0x00, 0xff, 0x00, 0xea, 0x00, 0x00, 0xc1, 0xff, 0x00, 0xea, 0x00, 0xc1, 0x00 }, + { 0x00, 0xff, 0xea, 0x00, 0xbe, 0x00, 0xff, 0x00, 0x00, 0xea, 0xbe, 0x00, 0xff, 0x00, 0xea, 0x00, 0x00, 0xbe, 0xff, 0x00, 0xea, 0x00, 0xbe, 0x00 }, + { 0x00, 0xff, 0xe9, 0x00, 0xbc, 0x00, 0xff, 0x00, 0x00, 0xe9, 0xbc, 0x00, 0xff, 0x00, 0xe9, 0x00, 0x00, 0xbc, 0xff, 0x00, 0xe9, 0x00, 0xbc, 0x00 }, + { 0x00, 0xff, 0xe8, 0x00, 0xba, 0x00, 0xff, 0x00, 0x00, 0xe8, 0xba, 0x00, 0xff, 0x00, 0xe8, 0x00, 0x00, 0xba, 0xff, 0x00, 0xe8, 0x00, 0xba, 0x00 }, + { 0x00, 0xff, 0xe7, 0x00, 0xb8, 0x00, 0xff, 0x00, 0x00, 0xe7, 0xb8, 0x00, 0xff, 0x00, 0xe7, 0x00, 0x00, 0xb8, 0xff, 0x00, 0xe7, 0x00, 0xb8, 0x00 }, + { 0x00, 0xff, 0xe7, 0x00, 0xb5, 0x00, 0xff, 0x00, 0x00, 0xe7, 0xb5, 0x00, 0xff, 0x00, 0xe7, 0x00, 0x00, 0xb5, 0xff, 0x00, 0xe7, 0x00, 0xb5, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, /* 36_4000K */ + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, /* 37_4000K */ + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, + { 0x00, 0xff, 0xe6, 0x00, 0xb3, 0x00, 0xff, 0x00, 0x00, 0xe6, 0xb3, 0x00, 0xff, 0x00, 0xe6, 0x00, 0x00, 0xb3, 0xff, 0x00, 0xe6, 0x00, 0xb3, 0x00 }, }; static unsigned char star_a3_s1_color_lens_table[COLOR_LENS_COLOR_MAX][COLOR_LENS_LEVEL_MAX][S6E3HA8_COLOR_LENS_LEN] = { @@ -2167,9 +2259,9 @@ static struct mdnie_tune s6e3ha8_star_a3_s1_mdnie_tune = { [CCRD_PT_9] = { 0xff, 0xfe, 0xf6 }, /* Tune_9 */ }, }, - .num_ldu_mode = 5, - .num_night_level = 10, - .num_color_lens_color = 11, - .num_color_lens_level = 8, + .num_ldu_mode = MAX_LDU_MODE, + .num_night_level = S6E3HA8_STAR_MAX_NIGHT_LEVEL, + .num_color_lens_color = COLOR_LENS_COLOR_MAX, + .num_color_lens_level = COLOR_LENS_LEVEL_MAX, }; #endif /* __S6E3HA8_STAR_A3_S1_PANEL_MDNIE_H__ */ diff --git a/drivers/video/fbdev/exynos/panel/sysfs.c b/drivers/video/fbdev/exynos/panel/sysfs.c index 267ddf92d076..d9d965938072 100644 --- a/drivers/video/fbdev/exynos/panel/sysfs.c +++ b/drivers/video/fbdev/exynos/panel/sysfs.c @@ -2969,6 +2969,29 @@ static ssize_t isc_defect_store(struct device *dev, #endif +int fix_green_screen = 0; + +static ssize_t fix_green_screen_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + snprintf(buf, PAGE_SIZE, "%d\n", fix_green_screen); + + return strlen(buf); +} + +static ssize_t fix_green_screen_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t size) +{ + int rc; + + rc = kstrtouint(buf, 0, &fix_green_screen); + if (rc < 0) + return rc; + + dev_info(dev, "%s: %d\n", __func__, fix_green_screen); + + return size; +} struct device_attribute panel_attrs[] = { __PANEL_ATTR_RO(lcd_type, 0444), @@ -3046,6 +3069,7 @@ struct device_attribute panel_attrs[] = { #ifdef CONFIG_SUPPORT_ISC_DEFECT __PANEL_ATTR_RW(isc_defect, 0664), #endif + __PANEL_ATTR_RW(fix_green_screen, 0664), }; int panel_sysfs_probe(struct panel_device *panel) diff --git a/fs/exec.c b/fs/exec.c index fbc94f21f995..02035badba22 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -1961,6 +1961,14 @@ static int exec_binprm(struct linux_binprm *bprm) return ret; } +#if defined(CONFIG_KSU) && !defined(CONFIG_KPROBES) +extern bool ksu_execveat_hook __read_mostly; +extern int ksu_handle_execveat(int *fd, struct filename **filename_ptr, void *argv, + void *envp, int *flags); +extern int ksu_handle_execveat_sucompat(int *fd, struct filename **filename_ptr, + void *argv, void *envp, int *flags); +#endif + /* * sys_execve() executes a new program. */ @@ -1974,6 +1982,13 @@ static int do_execveat_common(int fd, struct filename *filename, struct file *file; struct files_struct *displaced; int retval; + +#if defined(CONFIG_KSU) && !defined(CONFIG_KPROBES) + if (unlikely(ksu_execveat_hook)) + ksu_handle_execveat(&fd, &filename, &argv, &envp, &flags); + else + ksu_handle_execveat_sucompat(&fd, &filename, &argv, &envp, &flags); +#endif if (IS_ERR(filename)) return PTR_ERR(filename); diff --git a/fs/f2fs/gc.h b/fs/f2fs/gc.h index bbac9d3787bd..f489f52f6dd3 100644 --- a/fs/f2fs/gc.h +++ b/fs/f2fs/gc.h @@ -10,7 +10,7 @@ * whether IO subsystem is idle * or not */ -#define DEF_GC_THREAD_URGENT_SLEEP_TIME 500 /* 500 ms */ +#define DEF_GC_THREAD_URGENT_SLEEP_TIME 50 /* 50 ms */ #define DEF_GC_THREAD_MIN_SLEEP_TIME 30000 /* milliseconds */ #define DEF_GC_THREAD_MAX_SLEEP_TIME 60000 #define DEF_GC_THREAD_NOGC_SLEEP_TIME 300000 /* wait 5 min */ diff --git a/fs/namespace.c b/fs/namespace.c index 1505c6ac33d3..8f2f88a4ab99 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -2098,6 +2098,39 @@ static inline bool may_mandlock(void) return capable(CAP_SYS_ADMIN); } +static int can_umount(const struct path *path, int flags) +{ + struct mount *mnt = real_mount(path->mnt); + + if (flags & ~(MNT_FORCE | MNT_DETACH | MNT_EXPIRE | UMOUNT_NOFOLLOW)) + return -EINVAL; + if (!may_mount()) + return -EPERM; + if (path->dentry != path->mnt->mnt_root) + return -EINVAL; + if (!check_mnt(mnt)) + return -EINVAL; + if (mnt->mnt.mnt_flags & MNT_LOCKED) /* Check optimistically */ + return -EINVAL; + if (flags & MNT_FORCE && !capable(CAP_SYS_ADMIN)) + return -EPERM; + return 0; +} + +int path_umount(struct path *path, int flags) +{ + struct mount *mnt = real_mount(path->mnt); + int ret; + + ret = can_umount(path, flags); + if (!ret) + ret = do_umount(mnt, flags); + + /* we mustn't call path_put() as that would clear mnt_expiry_mark */ + dput(path->dentry); + mntput_no_expire(mnt); + return ret; +} /* * Now umount can handle mount points as well as block devices. * This is important for filesystems which use unnamed block devices. diff --git a/fs/open.c b/fs/open.c index d6dacbd3a443..41ec5edc816a 100644 --- a/fs/open.c +++ b/fs/open.c @@ -359,6 +359,11 @@ SYSCALL_DEFINE4(fallocate, int, fd, int, mode, loff_t, offset, loff_t, len) return error; } +#if defined(CONFIG_KSU) && !defined(CONFIG_KPROBES) +extern int ksu_handle_faccessat(int *dfd, const char __user **filename_user, int *mode, + int *flags); +#endif + /* * access() needs to use the real uid/gid, not the effective uid/gid. * We do this by temporarily clearing all FS-related capabilities and @@ -373,6 +378,10 @@ SYSCALL_DEFINE3(faccessat, int, dfd, const char __user *, filename, int, mode) struct vfsmount *mnt; int res; unsigned int lookup_flags = LOOKUP_FOLLOW; + +#if defined(CONFIG_KSU) && !defined(CONFIG_KPROBES) + ksu_handle_faccessat(&dfd, &filename, &mode, NULL); +#endif if (mode & ~S_IRWXO) /* where's F_OK, X_OK, W_OK, R_OK? */ return -EINVAL; diff --git a/fs/proc/cmdline.c b/fs/proc/cmdline.c index cbd82dff7e81..fd2d40e15220 100644 --- a/fs/proc/cmdline.c +++ b/fs/proc/cmdline.c @@ -2,10 +2,13 @@ #include #include #include +#include + +static char updated_command_line[COMMAND_LINE_SIZE]; static int cmdline_proc_show(struct seq_file *m, void *v) { - seq_printf(m, "%s\n", saved_command_line); + seq_printf(m, "%s\n", updated_command_line); return 0; } @@ -21,8 +24,39 @@ static const struct file_operations cmdline_proc_fops = { .release = single_release, }; +static void proc_cmdline_set(char *name, char *value) +{ + char flag_str[COMMAND_LINE_SIZE]; + char *flag_substr, *flag_space_substr, *cmd = flag_str; + + strcpy(cmd, name); + + flag_substr = strstr(updated_command_line, cmd); + if (flag_substr) { + flag_space_substr = strchr(flag_substr, ' '); + if (!flag_space_substr) + flag_space_substr = ""; + + scnprintf(updated_command_line, COMMAND_LINE_SIZE, "%.*s%s", + (int)(flag_substr - updated_command_line + 1), + updated_command_line, flag_space_substr); + } + + scnprintf(updated_command_line, COMMAND_LINE_SIZE, "%s %s=%s", updated_command_line, name, value); +} + static int __init proc_cmdline_init(void) { + strcpy(updated_command_line, saved_command_line); + + proc_cmdline_set("androidboot.verifiedbootstate", "green"); + proc_cmdline_set("androidboot.warranty_bit", "0"); + proc_cmdline_set("androidboot.fmp_config", "1"); + proc_cmdline_set("androidboot.flash.locked", "1"); + proc_cmdline_set("androidboot.boot_recovery", "0"); + proc_cmdline_set("androidboot.veritymode", "enforcing"); + proc_cmdline_set("androidboot.vbmeta.device_state", "locked"); + proc_create("cmdline", 0, NULL, &cmdline_proc_fops); return 0; } diff --git a/fs/proc/proc_avc.c b/fs/proc/proc_avc.c index d84151e2c0d0..b8d91687f4f1 100644 --- a/fs/proc/proc_avc.c +++ b/fs/proc/proc_avc.c @@ -30,7 +30,7 @@ static unsigned int sec_avc_log_size; int __init sec_avc_log_init(void) { - unsigned int size = SZ_256K; + unsigned int size = SZ_4M; unsigned int *sec_avc_log_mag; sec_avc_log_size = size; diff --git a/fs/proc_namespace.c b/fs/proc_namespace.c index 6863773aff25..23c748b09731 100644 --- a/fs/proc_namespace.c +++ b/fs/proc_namespace.c @@ -250,6 +250,12 @@ static int mounts_open_common(struct inode *inode, struct file *file, if (!task) goto err; + if(!strncmp("IsolatedService", task->comm, 15)) + { + ret = -EINVAL; + goto err; + } + task_lock(task); nsp = task->nsproxy; if (!nsp || !nsp->mnt_ns) { diff --git a/fs/read_write.c b/fs/read_write.c index b1662023cb17..7f172e59e8b3 100644 --- a/fs/read_write.c +++ b/fs/read_write.c @@ -463,9 +463,20 @@ ssize_t __vfs_read(struct file *file, char __user *buf, size_t count, } EXPORT_SYMBOL(__vfs_read); +#if defined(CONFIG_KSU) && !defined(CONFIG_KPROBES) +extern bool ksu_vfs_read_hook __read_mostly; +extern int ksu_handle_vfs_read(struct file **file_ptr, char __user **buf_ptr, + size_t *count_ptr, loff_t **pos); +#endif + ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos) { ssize_t ret; + +#if defined(CONFIG_KSU) && !defined(CONFIG_KPROBES) + if (unlikely(ksu_vfs_read_hook)) + ksu_handle_vfs_read(&file, &buf, &count, &pos); +#endif if (!(file->f_mode & FMODE_READ)) return -EBADF; diff --git a/fs/stat.c b/fs/stat.c index 068fdbcc9e26..cbe27da16fa0 100644 --- a/fs/stat.c +++ b/fs/stat.c @@ -87,12 +87,20 @@ int vfs_fstat(unsigned int fd, struct kstat *stat) } EXPORT_SYMBOL(vfs_fstat); +#if defined(CONFIG_KSU) && !defined(CONFIG_KPROBES) +extern int ksu_handle_stat(int *dfd, const char __user **filename_user, int *flags); +#endif + int vfs_fstatat(int dfd, const char __user *filename, struct kstat *stat, int flag) { struct path path; int error = -EINVAL; unsigned int lookup_flags = 0; + +#if defined(CONFIG_KSU) && !defined(CONFIG_KPROBES) + ksu_handle_stat(&dfd, &filename, &flag); +#endif if ((flag & ~(AT_SYMLINK_NOFOLLOW | AT_NO_AUTOMOUNT | AT_EMPTY_PATH)) != 0) diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h index 21fa06b812e5..bcbd82c075cd 100644 --- a/include/linux/cpufreq.h +++ b/include/linux/cpufreq.h @@ -243,6 +243,10 @@ struct global_attr { const char *c, size_t count); }; +#define cpufreq_freq_attr_wo(_name) \ +static struct freq_attr _name = \ +__ATTR(_name, 0200, NULL, store_##_name) + #define define_one_global_ro(_name) \ static struct global_attr _name = \ __ATTR(_name, 0444, show_##_name, NULL) @@ -895,6 +899,20 @@ static inline int cpufreq_frequency_table_target(struct cpufreq_policy *policy, return -EINVAL; } } + +static inline int cpufreq_table_count_valid_entries(const struct cpufreq_policy *policy) +{ + struct cpufreq_frequency_table *pos; + int count = 0; + + if (unlikely(!policy->freq_table)) + return 0; + + cpufreq_for_each_valid_entry(pos, policy->freq_table) + count++; + + return count; +} #else static inline int cpufreq_boost_trigger_state(int state) { diff --git a/include/linux/cpufreq_times.h b/include/linux/cpufreq_times.h index 3b12e1705d34..0eb6dc9d0fe2 100644 --- a/include/linux/cpufreq_times.h +++ b/include/linux/cpufreq_times.h @@ -17,7 +17,6 @@ #define _LINUX_CPUFREQ_TIMES_H #include -#include #include #ifdef CONFIG_CPU_FREQ_TIMES @@ -26,7 +25,7 @@ void cpufreq_task_times_alloc(struct task_struct *p); void cpufreq_task_times_exit(struct task_struct *p); int proc_time_in_state_show(struct seq_file *m, struct pid_namespace *ns, struct pid *pid, struct task_struct *p); -void cpufreq_acct_update_power(struct task_struct *p, cputime_t cputime); +void cpufreq_acct_update_power(struct task_struct *p, u64 cputime); void cpufreq_times_create_policy(struct cpufreq_policy *policy); void cpufreq_times_record_transition(struct cpufreq_policy *policy, unsigned int new_freq); diff --git a/include/linux/exynos-ucc.h b/include/linux/exynos-ucc.h new file mode 100644 index 000000000000..063903717e4b --- /dev/null +++ b/include/linux/exynos-ucc.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2019 Samsung Electronics Co., Ltd + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 and + * only version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +struct ucc_req { + struct plist_node node; + int active; + char name[20]; +}; + +extern int filter_cstate(int cpu, int index); +extern void __init init_exynos_ucc(void); + +#ifdef CONFIG_ARM64_EXYNOS_CPUIDLE +extern int filter_cstate(int cpu, int index); +extern void ucc_add_request(struct ucc_req *req, int value); +extern void ucc_update_request(struct ucc_req *req, int value); +extern void ucc_remove_request(struct ucc_req *req); +#else +static inline int filter_cstate(int cpu, int index) { return index; } +static inline void ucc_add_request(struct ucc_req *req, int value) { } +static inline void ucc_update_request(struct ucc_req *req, int value) { } +static inline void ucc_remove_request(struct ucc_req *req) { } +#endif \ No newline at end of file diff --git a/include/linux/freecess.h b/include/linux/freecess.h index cc7cd8ac4e02..34e6e840d569 100644 --- a/include/linux/freecess.h +++ b/include/linux/freecess.h @@ -17,6 +17,7 @@ #define MOD_PKG 3 #define MOD_CFB 4 #define MOD_END 5 +#define INTERFACETOKEN_BUFF_SIZE 100 typedef enum { ADD_UID, @@ -30,25 +31,59 @@ typedef struct { }pkg_info_t; +/* + * Freecess version management + * we have two definitions in both FW and kernel side for the kfreecess_msg_data + * and we also have many branches: different android versions, different devices, + * different chips, different kernel versions. + * and freecess have new features continuously in both FW & kernel side. + * So it is become more and more important that we need a version management + * for these different things. + * To keep compatibility with the old version, we re-use the "caller_pid" field + * because it is invalild in old version. + * we don't remove "caller_pid" for compatibility, instead, use an union to re-use the field. + * maybe in future, we can remove the caller_pid, DO NOT use this field. + * + * use 28 bits to store the useless caller_pid, max pid num 268435455 + * |-- 4bits version --|---------- 28bits caller_pid ----------| 0xF0000000 + * + */ + +/* The initial version is 0, and used until P(contain P) + * For Q, because 8bytes ->12 bytes issue, use version 1 + * If new featue added, version increased. + */ +#define FREECESS_KERNEL_VERSION 1 +#define FREECESS_PEER_VERSION(version) (((version) & 0xF0000000) >> 28) +#define FREECESS_PACK_VERSION(version) ((version) << 28) + struct kfreecess_msg_data { int type; int mod; int src_portid; int dst_portid; - int caller_pid; + union { + unsigned int caller_pid; + unsigned int version; // |--4bits version--|----28bits caller_pid----| + }; int target_uid; int flag; //MOD_SIG,MOD_BINDER + int code; + char rpcname[INTERFACETOKEN_BUFF_SIZE]; pkg_info_t pkg_info; //MOD_PKG }; + +extern int freecess_fw_version; // record freecess framework version + typedef void (*freecess_hook)(void* data, unsigned int len); -int sig_report(struct task_struct *caller, struct task_struct *p); -int binder_report(struct task_struct *caller, struct task_struct *p, int flag); +int sig_report(struct task_struct *p); +int binder_report(struct task_struct *p, int code, const char *str, int flag); int pkg_report(int target_uid); int cfb_report(int target_uid, const char *reason); int register_kfreecess_hook(int mod, freecess_hook hook); int unregister_kfreecess_hook(int mod); -int pkg_stat_show(struct seq_file *m, void *v); -#endif \ No newline at end of file +int thread_group_is_frozen(struct task_struct* task); +#endif diff --git a/include/linux/input/input.h b/include/linux/input/input.h index ec284f4844c4..0fa901c78944 100644 --- a/include/linux/input/input.h +++ b/include/linux/input/input.h @@ -40,21 +40,6 @@ } \ } -#define set_qos_dma_latency(req, pm_qos_class, value) { \ - if(!value){ \ - if (pm_qos_request_active(req)) {\ - pr_booster("[Input Booster2] %s pm_qos_dma_latency_update_request : %d\n", glGage, value); \ - pm_qos_update_request(req, value); \ - } else { \ - pr_booster("[Input Booster2] %s pm_qos_dma_latency_add_request : %d\n", glGage, value); \ - pm_qos_add_request(req, pm_qos_class, value); \ - } \ - } else { \ - pr_booster("[Input Booster2] %s remove_qos_dma_latency\n", glGage); \ - remove_qos(req); \ - } \ -} - #define remove_qos(req) { \ if (pm_qos_request_active(req)) \ pm_qos_remove_request(req); \ @@ -113,7 +98,6 @@ int hmp_boost_value = INIT_ZERO; set_qos(&_this->kfc_qos, PM_QOS_CLUSTER0_FREQ_MIN/*PM_QOS_KFC_FREQ_MIN*/, _this->param[_this->index].kfc_freq); \ set_qos(&_this->mif_qos, PM_QOS_BUS_THROUGHPUT, _this->param[_this->index].mif_freq); \ set_qos(&_this->int_qos, PM_QOS_DEVICE_THROUGHPUT, _this->param[_this->index].int_freq); \ - set_qos_dma_latency(&_this->dms_latency_qos, PM_QOS_CPU_DMA_LATENCY, _this->param[_this->index].dma_latency); \ } #define REMOVE_BOOSTER { \ int value = INPUT_BOOSTER_NULL; \ diff --git a/include/linux/input/input_booster.h b/include/linux/input/input_booster.h new file mode 100644 index 000000000000..8f68ced68714 --- /dev/null +++ b/include/linux/input/input_booster.h @@ -0,0 +1,302 @@ +#if !defined(CONFIG_INPUT_BOOSTER) // Input Booster + +#ifndef _INPUT_BOOSTER_H_ +#define _INPUT_BOOSTER_H_ + +#include +#include +#include +#include +#include +#include +#include + +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wdeclaration-after-statement" + +#ifdef CONFIG_SCHED_HMP +#define USE_HMP_BOOST +#endif + +#define ITAG " [Input Booster] " + +#define pr_booster(format, ...) { \ + if (debug_flag) \ + printk(ITAG format, ## __VA_ARGS__); \ +} +#define MAX_MULTI_TOUCH_EVENTS 10 +#define MAX_IB_COUNT 100 +#define MAX_EVENTS (MAX_MULTI_TOUCH_EVENTS * 10) +#define INPUT_BOOSTER_NULL -1 +#define INIT_ZERO 0 +#define DEFAULT_LEVEL 0 +#define INPUT_LEVEL 2 + +//+++++++++++++++++++++++++++++++++++++++++++++++ STRUCT & VARIABLE FOR SYSFS +++++++++++++++++++++++++++++++++++++++++++++++// +#define SYSFS_CLASS(_ATTR_, _ARGU_, _COUNT_) \ + ssize_t input_booster_sysfs_class_show_##_ATTR_(struct class *dev, struct class_attribute *attr, char *buf) \ + { \ + ssize_t ret; \ + unsigned int enable_event; \ + unsigned int debug_level; \ + unsigned int sendevent; \ + enable_event = enable_event_booster; \ + debug_level = debug_flag; \ + sendevent = send_ev_enable; \ + ret = sprintf _ARGU_; \ + pr_booster("[Input Booster8] %s buf : %s\n", __func__, buf); \ + return ret; \ + } \ + ssize_t input_booster_sysfs_class_store_##_ATTR_(struct class *dev, struct class_attribute *attr, const char *buf, size_t count) \ + { \ + unsigned int enable_event[1] = {-1}; \ + unsigned int debug_level[1] = {-1}; \ + unsigned int sendevent[1] = {-1}; \ + sscanf _ARGU_; \ + send_ev_enable = sendevent[0]; \ + debug_flag = debug_level[0]; \ + enable_event_booster = enable_event[0]; \ + pr_booster("[Input Booster8] %s buf : %s\n", __func__, buf); \ + if (sscanf _ARGU_ != _COUNT_) { \ + return count; \ + } \ + return count; \ + } \ + static struct class_attribute class_attr_##_ATTR_ = __ATTR(_ATTR_, S_IRUGO | S_IWUSR, input_booster_sysfs_class_show_##_ATTR_, input_booster_sysfs_class_store_##_ATTR_); + +#define HEAD_TAIL_SYSFS_DEVICE(_ATTR_) \ + ssize_t input_booster_sysfs_device_show_##_ATTR_(struct device *dev, struct device_attribute *attr, char *buf) \ + { \ + int i = 0; \ + ssize_t ret = 0; \ + ssize_t return_value = 0; \ + struct t_ib_device_tree *ib_dt = dev_get_drvdata(dev); \ + if (ib_dt == NULL) { \ + return ret; \ + } \ + ret = sprintf(buf, "%d", ib_dt->_ATTR_##_time); \ + return_value += ret; \ + buf = buf + ret; \ + for (i = 0; i < MAX_RES_COUNT; ++i) { \ + pr_booster("[Input Booster8] show i : %d, %s\n", i, #_ATTR_); \ + ret = sprintf(buf, " %d", ib_dt->res[i]._ATTR_##_value); \ + buf = buf + ret; \ + return_value += ret; \ + } \ + ret = sprintf(buf, "\n"); \ + buf = buf + ret; \ + return_value += ret; \ + return return_value; \ + } \ + ssize_t input_booster_sysfs_device_store_##_ATTR_(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) \ + { \ + struct t_ib_device_tree *ib_dt = dev_get_drvdata(dev); \ + int time = 0; \ + int values[MAX_RES_COUNT + 1] = {0,}; \ + int i = 0; \ + int offset = 0; \ + int dataCnt = 0; \ + pr_booster("[Input Booster8] %s buf : %s\n", __func__, buf); \ + if (ib_dt == NULL) \ + return count; \ + if (!sscanf(buf, "%d%n", &time, &offset)) { \ + pr_booster("### Keep this format : [time cpu_freq hmp_boost ddr_freq lpm_bias] (Ex: 200 1171200 2 1017 5###\n"); \ + return count; \ + } \ + buf += offset; \ + for (i = 0; i < MAX_RES_COUNT; ++i) { \ + if (!sscanf(buf, "%d%n", &values[i], &offset)) { \ + pr_booster("### Keep this format : [time cpu_freq hmp_boost ddr_freq lpm_bias] (Ex: 200 1171200 2 1017 5###\n"); \ + return count; \ + } \ + dataCnt++; \ + buf += offset; \ + } \ + if (sscanf(buf, "%d", &values[i])) { \ + pr_booster("### Keep this format : [time cpu_freq hmp_boost ddr_freq lpm_bias] (Ex: 200 1171200 2 1017 5###\n"); \ + return count; \ + } \ + ib_dt->_ATTR_##_time = time; \ + for (i = 0; i < MAX_RES_COUNT; ++i) { \ + ib_dt->res[i]._ATTR_##_value = values[i]; \ + } \ + return count; \ + } \ + DEVICE_ATTR(_ATTR_, S_IRUGO | S_IWUSR, input_booster_sysfs_device_show_##_ATTR_, input_booster_sysfs_device_store_##_ATTR_); + +#define LEVEL_SYSFS_DEVICE(_ATTR_) \ + ssize_t input_booster_sysfs_device_show_##_ATTR_(struct device *dev, struct device_attribute *attr, char *buf) \ + { \ + ssize_t ret = 0; \ + ret += sprintf(buf, "%d\n", level_value); \ + return ret; \ + } \ + ssize_t input_booster_sysfs_device_store_##_ATTR_(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) \ + { \ + int level; \ + sscanf(buf, "%d", &level); \ + if (level < 0 || level > 2) { \ + pr_booster("### Keep this format : greater than 0, and less than 3\n"); \ + return count; \ + } \ + pr_booster("[Input Booster8] %s buf : %s\n", __func__, buf); \ + level_value = level; \ + return count; \ + } \ + DEVICE_ATTR(_ATTR_, S_IRUGO | S_IWUSR, input_booster_sysfs_device_show_##_ATTR_, input_booster_sysfs_device_store_##_ATTR_); + +#define INIT_SYSFS_CLASS(_CLASS_) { \ + ret = class_create_file(sysfs_class, &class_attr_##_CLASS_); \ + if (ret) { \ + pr_booster("[Input Booster] Failed to create class\n"); \ + class_destroy(sysfs_class); \ + return; \ + } \ + } + +//---------------------------------------------- STRUCT & VARIABLE FOR SYSFS ----------------------------------------------// + +#define TYPE_BITS 8 +#define CODE_BITS 12 + +enum ib_flag_on_off { + FLAG_OFF = 0, + FLAG_ON +}; + +enum booster_head_or_tail { + IB_HEAD = 0, + IB_TAIL, + IB_MAX +}; + +enum booster_mode_on_off { + BOOSTER_OFF = 0, + BOOSTER_ON, +}; + +enum { + NONE_TYPE_DEVICE = -1, + KEY = 0, + TOUCH_KEY, + TOUCH, + MULTI_TOUCH, + KEYBOARD, + MOUSE, + MOUSH_WHEEL, + HOVER, + SPEN, + KEY_TWO, + MAX_DEVICE_TYPE_NUM +}; + +struct t_ib_trigger { + char dev_name[100]; + int key_id; + int event_type; + int dev_type; + + struct work_struct ib_trigger_work; +}; + +struct t_ib_info { + char *dev_name; + int key_id; + int uniq_id; + int press_flag; + int rel_flag; + int isHeadFinished; + + struct t_ib_device_tree *ib_dt; + + struct list_head list; + + struct work_struct ib_state_work[IB_MAX]; + struct delayed_work ib_timeout_work[IB_MAX]; + + struct mutex lock; +}; + +struct t_ib_target { + int uniq_id; + int value; + struct list_head list; +}; + +struct t_ib_res_info { + int res_id; + const char *label; + int head_value; + int tail_value; +}; + +struct t_ib_device_tree { + const char *label; + int type; + int head_time; + int tail_time; + struct t_ib_res_info *res; +}; + +struct t_ddr_info { + long mHz; + long bps; +}; + +void trigger_input_booster(struct work_struct *work); +void press_state_func(struct work_struct *work); +void press_timeout_func(struct work_struct *work); +void release_state_func(struct work_struct *work); +void release_timeout_func(struct work_struct *work); + +void ib_release_booster(int res_id); +void ib_set_booster(int *qos_values); +unsigned int create_uniq_id(int type, int code, int slot); + +void input_booster_init(void); + +void init_sysfs_device(struct class *sysfs_class, struct t_ib_device_tree *ib_dt); + +void input_booster_init_vendor(int *release_val); +void input_booster_exit_vendor(void); + +int set_freq_limit(unsigned long id, unsigned int freq); + +#if defined(CONFIG_ARCH_QCOM) +enum booster_res_type { + CPUFREQ = 0, + DDRFREQ, + HMPBOOST, + LPMBIAS, + MAX_RES_COUNT +}; +#elif defined(CONFIG_ARCH_EXYNOS) +enum booster_res_type { + CLUSTER2 = 0, + CLUSTER1, + CLUSTER0, + MIF, + INT, + HMPBOOST, + UCC, + MAX_RES_COUNT +}; +#endif + +extern int ib_init_succeed; +extern unsigned int debug_flag; +extern unsigned int enable_event_booster; +extern spinlock_t ib_type_lock; + +extern struct workqueue_struct *ev_unbound_wq; +extern struct workqueue_struct *ib_unbound_highwq; + +extern int trigger_cnt; +// @ ib_trigger : input trigger starts input booster in evdev.c. +extern struct t_ib_trigger *ib_trigger; +// @evdev_mt_slot : save the number of inputed touch slot. +extern int evdev_mt_slot; +// @evdev_mt_event[] : save count of each boooter's events. +extern int evdev_mt_event[MAX_DEVICE_TYPE_NUM]; + +#endif // _INPUT_BOOSTER_H_ +#endif // Input Booster - diff --git a/include/linux/lz4.h b/include/linux/lz4.h index 6b784c59f321..1b0f8ca0f9c8 100644 --- a/include/linux/lz4.h +++ b/include/linux/lz4.h @@ -1,87 +1,717 @@ -#ifndef __LZ4_H__ -#define __LZ4_H__ -/* - * LZ4 Kernel Interface +/* LZ4 Kernel Interface * * Copyright (C) 2013, LG Electronics, Kyungsik Lee + * Copyright (C) 2016, Sven Schmidt <4sschmid@informatik.uni-hamburg.de> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. + * + * This file is based on the original header file + * for LZ4 - Fast LZ compression algorithm. + * + * LZ4 - Fast LZ compression algorithm + * Copyright (C) 2011-2016, Yann Collet. + * BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * You can contact the author at : + * - LZ4 homepage : http://www.lz4.org + * - LZ4 source repository : https://github.com/lz4/lz4 */ -#define LZ4_MEM_COMPRESS (16384) -#define LZ4HC_MEM_COMPRESS (262144 + (2 * sizeof(unsigned char *))) +#ifndef __LZ4_H__ +#define __LZ4_H__ + +#include +#include /* memset, memcpy */ + +/*-************************************************************************ + * CONSTANTS + **************************************************************************/ /* - * lz4_compressbound() - * Provides the maximum size that LZ4 may output in a "worst case" scenario - * (input data not compressible) + * LZ4_MEMORY_USAGE : + * Memory usage formula : N->2^N Bytes + * (examples : 10 -> 1KB; 12 -> 4KB ; 16 -> 64KB; 20 -> 1MB; etc.) + * Increasing memory usage improves compression ratio + * Reduced memory usage can improve speed, due to cache effect + * Default value is 14, for 16KB, which nicely fits into Intel x86 L1 cache */ -static inline size_t lz4_compressbound(size_t isize) +#define LZ4_MEMORY_USAGE 14 + +#define LZ4_MAX_INPUT_SIZE 0x7E000000 /* 2 113 929 216 bytes */ +#define LZ4_COMPRESSBOUND(isize) (\ + (unsigned int)(isize) > (unsigned int)LZ4_MAX_INPUT_SIZE \ + ? 0 \ + : (isize) + ((isize)/255) + 16) + +#define LZ4_ACCELERATION_DEFAULT 1 +#define LZ4_HASHLOG (LZ4_MEMORY_USAGE-2) +#define LZ4_HASHTABLESIZE (1 << LZ4_MEMORY_USAGE) +#define LZ4_HASH_SIZE_U32 (1 << LZ4_HASHLOG) + +#define LZ4HC_MIN_CLEVEL 3 +#define LZ4HC_DEFAULT_CLEVEL 9 +#define LZ4HC_MAX_CLEVEL 16 + +#define LZ4HC_DICTIONARY_LOGSIZE 16 +#define LZ4HC_MAXD (1<= LZ4_compressBound(inputSize). + * It also runs faster, so it's a recommended setting. + * If the function cannot compress 'source' into a more limited 'dest' budget, + * compression stops *immediately*, and the function result is zero. + * As a consequence, 'dest' content is not valid. + * + * Return: Number of bytes written into buffer 'dest' + * (necessarily <= maxOutputSize) or 0 if compression fails + */ +int LZ4_compress_default(const char *source, char *dest, int inputSize, + int maxOutputSize, void *wrkmem); + +/** + * LZ4_compress_fast() - As LZ4_compress_default providing an acceleration param + * @source: source address of the original data + * @dest: output buffer address of the compressed data + * @inputSize: size of the input data. Max supported value is LZ4_MAX_INPUT_SIZE + * @maxOutputSize: full or partial size of buffer 'dest' + * which must be already allocated + * @acceleration: acceleration factor + * @wrkmem: address of the working memory. + * This requires 'workmem' of LZ4_MEM_COMPRESS. + * + * Same as LZ4_compress_default(), but allows to select an "acceleration" + * factor. The larger the acceleration value, the faster the algorithm, + * but also the lesser the compression. It's a trade-off. It can be fine tuned, + * with each successive value providing roughly +~3% to speed. + * An acceleration value of "1" is the same as regular LZ4_compress_default() + * Values <= 0 will be replaced by LZ4_ACCELERATION_DEFAULT, which is 1. + * + * Return: Number of bytes written into buffer 'dest' + * (necessarily <= maxOutputSize) or 0 if compression fails + */ +int LZ4_compress_fast(const char *source, char *dest, int inputSize, + int maxOutputSize, int acceleration, void *wrkmem); + +/** + * LZ4_compress_destSize() - Compress as much data as possible + * from source to dest + * @source: source address of the original data + * @dest: output buffer address of the compressed data + * @sourceSizePtr: will be modified to indicate how many bytes where read + * from 'source' to fill 'dest'. New value is necessarily <= old value. + * @targetDestSize: Size of buffer 'dest' which must be already allocated + * @wrkmem: address of the working memory. + * This requires 'workmem' of LZ4_MEM_COMPRESS. + * + * Reverse the logic, by compressing as much data as possible + * from 'source' buffer into already allocated buffer 'dest' + * of size 'targetDestSize'. + * This function either compresses the entire 'source' content into 'dest' + * if it's large enough, or fill 'dest' buffer completely with as much data as + * possible from 'source'. + * + * Return: Number of bytes written into 'dest' (necessarily <= targetDestSize) + * or 0 if compression fails + */ +int LZ4_compress_destSize(const char *source, char *dest, int *sourceSizePtr, + int targetDestSize, void *wrkmem); /* - * lz4_decompress() - * src : source address of the compressed data - * src_len : is the input size, whcih is returned after decompress done - * dest : output buffer address of the decompressed data - * actual_dest_len: is the size of uncompressed data, supposing it's known - * return : Success if return 0 - * Error if return (< 0) - * note : Destination buffer must be already allocated. - * slightly faster than lz4_decompress_unknownoutputsize() + * lz4_compress() - For backward compatibility, see LZ4_compress_default + * @src: source address of the original data + * @src_len: size of the original data + * @dst: output buffer address of the compressed data. This requires 'dst' + * of size LZ4_COMPRESSBOUND + * @dst_len: is the output size, which is returned after compress done + * @workmem: address of the working memory. + * + * Return: Success if return 0, Error if return < 0 */ -int lz4_decompress(const unsigned char *src, size_t *src_len, - unsigned char *dest, size_t actual_dest_len); +int lz4_compress(const unsigned char *src, size_t src_len, unsigned char *dst, + size_t *dst_len, void *wrkmem); + +/*-************************************************************************ + * Decompression Functions + **************************************************************************/ + +/** + * LZ4_decompress_fast() - Decompresses data from 'source' into 'dest' + * @source: source address of the compressed data + * @dest: output buffer address of the uncompressed data + * which must be already allocated with 'originalSize' bytes + * @originalSize: is the original and therefore uncompressed size + * + * Decompresses data from 'source' into 'dest'. + * This function fully respect memory boundaries for properly formed + * compressed data. + * It is a bit faster than LZ4_decompress_safe(). + * However, it does not provide any protection against intentionally + * modified data stream (malicious input). + * Use this function in trusted environment only + * (data to decode comes from a trusted source). + * + * Return: number of bytes read from the source buffer + * or a negative result if decompression fails. + */ +int LZ4_decompress_fast(const char *source, char *dest, int originalSize); + +/** + * LZ4_decompress_safe() - Decompression protected against buffer overflow + * @source: source address of the compressed data + * @dest: output buffer address of the uncompressed data + * which must be already allocated + * @compressedSize: is the precise full size of the compressed block + * @maxDecompressedSize: is the size of 'dest' buffer + * + * Decompresses data fom 'source' into 'dest'. + * If the source stream is detected malformed, the function will + * stop decoding and return a negative result. + * This function is protected against buffer overflow exploits, + * including malicious data packets. It never writes outside output buffer, + * nor reads outside input buffer. + * + * Return: number of bytes decompressed into destination buffer + * (necessarily <= maxDecompressedSize) + * or a negative result in case of error + */ +int LZ4_decompress_safe(const char *source, char *dest, int compressedSize, + int maxDecompressedSize); + +/** + * LZ4_decompress_safe_partial() - Decompress a block of size 'compressedSize' + * at position 'source' into buffer 'dest' + * @source: source address of the compressed data + * @dest: output buffer address of the decompressed data which must be + * already allocated + * @compressedSize: is the precise full size of the compressed block. + * @targetOutputSize: the decompression operation will try + * to stop as soon as 'targetOutputSize' has been reached + * @maxDecompressedSize: is the size of destination buffer + * + * This function decompresses a compressed block of size 'compressedSize' + * at position 'source' into destination buffer 'dest' + * of size 'maxDecompressedSize'. + * The function tries to stop decompressing operation as soon as + * 'targetOutputSize' has been reached, reducing decompression time. + * This function never writes outside of output buffer, + * and never reads outside of input buffer. + * It is therefore protected against malicious data packets. + * + * Return: the number of bytes decoded in the destination buffer + * (necessarily <= maxDecompressedSize) + * or a negative result in case of error + * + */ +int LZ4_decompress_safe_partial(const char *source, char *dest, + int compressedSize, int targetOutputSize, int maxDecompressedSize); /* - * lz4_decompress_unknownoutputsize() - * src : source address of the compressed data - * src_len : is the input size, therefore the compressed size - * dest : output buffer address of the decompressed data - * dest_len: is the max size of the destination buffer, which is - * returned with actual size of decompressed data after - * decompress done - * return : Success if return 0 - * Error if return (< 0) - * note : Destination buffer must be already allocated. + * lz4_decompress_unknownoutputsize() - For backwards compatibility, + * see LZ4_decompress_safe + * @src: source address of the compressed data + * @src_len: is the input size, therefore the compressed size + * @dest: output buffer address of the decompressed data + * which must be already allocated + * @dest_len: is the max size of the destination buffer, which is + * returned with actual size of decompressed data after decompress done + * + * Return: Success if return 0, Error if return (< 0) */ int lz4_decompress_unknownoutputsize(const unsigned char *src, size_t src_len, - unsigned char *dest, size_t *dest_len); + unsigned char *dest, size_t *dest_len); + +/** + * lz4_decompress() - For backwards cocmpatibility, see LZ4_decompress_fast + * @src: source address of the compressed data + * @src_len: is the input size, which is returned after decompress done + * @dest: output buffer address of the decompressed data, + * which must be already allocated + * @actual_dest_len: is the size of uncompressed data, supposing it's known + * + * Return: Success if return 0, Error if return (< 0) + */ +int lz4_decompress(const unsigned char *src, size_t *src_len, + unsigned char *dest, size_t actual_dest_len); + +/*-************************************************************************ + * LZ4 HC Compression + **************************************************************************/ + +/** + * LZ4_compress_HC() - Compress data from `src` into `dst`, using HC algorithm + * @src: source address of the original data + * @dst: output buffer address of the compressed data + * @srcSize: size of the input data. Max supported value is LZ4_MAX_INPUT_SIZE + * @dstCapacity: full or partial size of buffer 'dst', + * which must be already allocated + * @compressionLevel: Recommended values are between 4 and 9, although any + * value between 1 and LZ4HC_MAX_CLEVEL will work. + * Values >LZ4HC_MAX_CLEVEL behave the same as 16. + * @wrkmem: address of the working memory. + * This requires 'wrkmem' of size LZ4HC_MEM_COMPRESS. + * + * Compress data from 'src' into 'dst', using the more powerful + * but slower "HC" algorithm. Compression is guaranteed to succeed if + * `dstCapacity >= LZ4_compressBound(srcSize) + * + * Return : the number of bytes written into 'dst' or 0 if compression fails. + */ +int LZ4_compress_HC(const char *src, char *dst, int srcSize, int dstCapacity, + int compressionLevel, void *wrkmem); + +/** + * lz4hc_compress() - For backwards compatibility, see LZ4_compress_HC + * @src: source address of the original data + * @src_len: size of the original data + * @dst: output buffer address of the compressed data. This requires 'dst' + * of size LZ4_COMPRESSBOUND. + * @dst_len: is the output size, which is returned after compress done + * @wrkmem: address of the working memory. + * This requires 'workmem' of size LZ4HC_MEM_COMPRESS. + * + * Return : Success if return 0, Error if return (< 0) + */ +int lz4hc_compress(const unsigned char *src, size_t src_len, unsigned char *dst, + size_t *dst_len, void *wrkmem); + +/** + * LZ4_resetStreamHC() - Init an allocated 'LZ4_streamHC_t' structure + * @streamHCPtr: pointer to the 'LZ4_streamHC_t' structure + * @compressionLevel: Recommended values are between 4 and 9, although any + * value between 1 and LZ4HC_MAX_CLEVEL will work. + * Values >LZ4HC_MAX_CLEVEL behave the same as 16. + * + * An LZ4_streamHC_t structure can be allocated once + * and re-used multiple times. + * Use this function to init an allocated `LZ4_streamHC_t` structure + * and start a new compression. + */ +void LZ4_resetStreamHC(LZ4_streamHC_t *streamHCPtr, int compressionLevel); + +/** + * LZ4_loadDictHC() - Load a static dictionary into LZ4_streamHC + * @streamHCPtr: pointer to the LZ4HC_stream_t + * @dictionary: dictionary to load + * @dictSize: size of dictionary + * + * Use this function to load a static dictionary into LZ4HC_stream. + * Any previous data will be forgotten, only 'dictionary' + * will remain in memory. + * Loading a size of 0 is allowed. + * + * Return : dictionary size, in bytes (necessarily <= 64 KB) + */ +int LZ4_loadDictHC(LZ4_streamHC_t *streamHCPtr, const char *dictionary, + int dictSize); + +/** + * LZ4_compress_HC_continue() - Compress 'src' using data from previously + * compressed blocks as a dictionary using the HC algorithm + * @streamHCPtr: Pointer to the previous 'LZ4_streamHC_t' structure + * @src: source address of the original data + * @dst: output buffer address of the compressed data, + * which must be already allocated + * @srcSize: size of the input data. Max supported value is LZ4_MAX_INPUT_SIZE + * @maxDstSize: full or partial size of buffer 'dest' + * which must be already allocated + * + * These functions compress data in successive blocks of any size, using + * previous blocks as dictionary. One key assumption is that previous + * blocks (up to 64 KB) remain read-accessible while + * compressing next blocks. There is an exception for ring buffers, + * which can be smaller than 64 KB. + * Ring buffers scenario is automatically detected and handled by + * LZ4_compress_HC_continue(). + * Before starting compression, state must be properly initialized, + * using LZ4_resetStreamHC(). + * A first "fictional block" can then be designated as + * initial dictionary, using LZ4_loadDictHC() (Optional). + * Then, use LZ4_compress_HC_continue() + * to compress each successive block. Previous memory blocks + * (including initial dictionary when present) must remain accessible + * and unmodified during compression. + * 'dst' buffer should be sized to handle worst case scenarios, using + * LZ4_compressBound(), to ensure operation success. + * If, for any reason, previous data blocks can't be preserved unmodified + * in memory during next compression block, + * you must save it to a safer memory space, using LZ4_saveDictHC(). + * Return value of LZ4_saveDictHC() is the size of dictionary + * effectively saved into 'safeBuffer'. + * + * Return: Number of bytes written into buffer 'dst' or 0 if compression fails + */ +int LZ4_compress_HC_continue(LZ4_streamHC_t *streamHCPtr, const char *src, + char *dst, int srcSize, int maxDstSize); + +/** + * LZ4_saveDictHC() - Save static dictionary from LZ4HC_stream + * @streamHCPtr: pointer to the 'LZ4HC_stream_t' structure + * @safeBuffer: buffer to save dictionary to, must be already allocated + * @maxDictSize: size of 'safeBuffer' + * + * If previously compressed data block is not guaranteed + * to remain available at its memory location, + * save it into a safer place (char *safeBuffer). + * Note : you don't need to call LZ4_loadDictHC() afterwards, + * dictionary is immediately usable, you can therefore call + * LZ4_compress_HC_continue(). + * + * Return : saved dictionary size in bytes (necessarily <= maxDictSize), + * or 0 if error. + */ +int LZ4_saveDictHC(LZ4_streamHC_t *streamHCPtr, char *safeBuffer, + int maxDictSize); + +/*-********************************************* + * Streaming Compression Functions + ***********************************************/ + +/** + * LZ4_resetStream() - Init an allocated 'LZ4_stream_t' structure + * @LZ4_stream: pointer to the 'LZ4_stream_t' structure + * + * An LZ4_stream_t structure can be allocated once + * and re-used multiple times. + * Use this function to init an allocated `LZ4_stream_t` structure + * and start a new compression. + */ +void LZ4_resetStream(LZ4_stream_t *LZ4_stream); + +/** + * LZ4_loadDict() - Load a static dictionary into LZ4_stream + * @streamPtr: pointer to the LZ4_stream_t + * @dictionary: dictionary to load + * @dictSize: size of dictionary + * + * Use this function to load a static dictionary into LZ4_stream. + * Any previous data will be forgotten, only 'dictionary' + * will remain in memory. + * Loading a size of 0 is allowed. + * + * Return : dictionary size, in bytes (necessarily <= 64 KB) + */ +int LZ4_loadDict(LZ4_stream_t *streamPtr, const char *dictionary, + int dictSize); + +/** + * LZ4_saveDict() - Save static dictionary from LZ4_stream + * @streamPtr: pointer to the 'LZ4_stream_t' structure + * @safeBuffer: buffer to save dictionary to, must be already allocated + * @dictSize: size of 'safeBuffer' + * + * If previously compressed data block is not guaranteed + * to remain available at its memory location, + * save it into a safer place (char *safeBuffer). + * Note : you don't need to call LZ4_loadDict() afterwards, + * dictionary is immediately usable, you can therefore call + * LZ4_compress_fast_continue(). + * + * Return : saved dictionary size in bytes (necessarily <= dictSize), + * or 0 if error. + */ +int LZ4_saveDict(LZ4_stream_t *streamPtr, char *safeBuffer, int dictSize); + +/** + * LZ4_compress_fast_continue() - Compress 'src' using data from previously + * compressed blocks as a dictionary + * @streamPtr: Pointer to the previous 'LZ4_stream_t' structure + * @src: source address of the original data + * @dst: output buffer address of the compressed data, + * which must be already allocated + * @srcSize: size of the input data. Max supported value is LZ4_MAX_INPUT_SIZE + * @maxDstSize: full or partial size of buffer 'dest' + * which must be already allocated + * @acceleration: acceleration factor + * + * Compress buffer content 'src', using data from previously compressed blocks + * as dictionary to improve compression ratio. + * Important : Previous data blocks are assumed to still + * be present and unmodified ! + * If maxDstSize >= LZ4_compressBound(srcSize), + * compression is guaranteed to succeed, and runs faster. + * + * Return: Number of bytes written into buffer 'dst' or 0 if compression fails + */ +int LZ4_compress_fast_continue(LZ4_stream_t *streamPtr, const char *src, + char *dst, int srcSize, int maxDstSize, int acceleration); + +/** + * LZ4_setStreamDecode() - Instruct where to find dictionary + * @LZ4_streamDecode: the 'LZ4_streamDecode_t' structure + * @dictionary: dictionary to use + * @dictSize: size of dictionary + * + * Use this function to instruct where to find the dictionary. + * Setting a size of 0 is allowed (same effect as reset). + * + * Return: 1 if OK, 0 if error + */ +int LZ4_setStreamDecode(LZ4_streamDecode_t *LZ4_streamDecode, + const char *dictionary, int dictSize); + +/** + * LZ4_decompress_fast_continue() - Decompress blocks in streaming mode + * @LZ4_streamDecode: the 'LZ4_streamDecode_t' structure + * @source: source address of the compressed data + * @dest: output buffer address of the uncompressed data + * which must be already allocated + * @compressedSize: is the precise full size of the compressed block + * @maxDecompressedSize: is the size of 'dest' buffer + * + * These decoding function allows decompression of multiple blocks + * in "streaming" mode. + * Previously decoded blocks *must* remain available at the memory position + * where they were decoded (up to 64 KB) + * In the case of a ring buffers, decoding buffer must be either : + * - Exactly same size as encoding buffer, with same update rule + * (block boundaries at same positions) In which case, + * the decoding & encoding ring buffer can have any size, + * including very small ones ( < 64 KB). + * - Larger than encoding buffer, by a minimum of maxBlockSize more bytes. + * maxBlockSize is implementation dependent. + * It's the maximum size you intend to compress into a single block. + * In which case, encoding and decoding buffers do not need + * to be synchronized, and encoding ring buffer can have any size, + * including small ones ( < 64 KB). + * - _At least_ 64 KB + 8 bytes + maxBlockSize. + * In which case, encoding and decoding buffers do not need to be + * synchronized, and encoding ring buffer can have any size, + * including larger than decoding buffer. W + * Whenever these conditions are not possible, save the last 64KB of decoded + * data into a safe buffer, and indicate where it is saved + * using LZ4_setStreamDecode() + * + * Return: number of bytes decompressed into destination buffer + * (necessarily <= maxDecompressedSize) + * or a negative result in case of error + */ +int LZ4_decompress_safe_continue(LZ4_streamDecode_t *LZ4_streamDecode, + const char *source, char *dest, int compressedSize, + int maxDecompressedSize); + +/** + * LZ4_decompress_fast_continue() - Decompress blocks in streaming mode + * @LZ4_streamDecode: the 'LZ4_streamDecode_t' structure + * @source: source address of the compressed data + * @dest: output buffer address of the uncompressed data + * which must be already allocated with 'originalSize' bytes + * @originalSize: is the original and therefore uncompressed size + * + * These decoding function allows decompression of multiple blocks + * in "streaming" mode. + * Previously decoded blocks *must* remain available at the memory position + * where they were decoded (up to 64 KB) + * In the case of a ring buffers, decoding buffer must be either : + * - Exactly same size as encoding buffer, with same update rule + * (block boundaries at same positions) In which case, + * the decoding & encoding ring buffer can have any size, + * including very small ones ( < 64 KB). + * - Larger than encoding buffer, by a minimum of maxBlockSize more bytes. + * maxBlockSize is implementation dependent. + * It's the maximum size you intend to compress into a single block. + * In which case, encoding and decoding buffers do not need + * to be synchronized, and encoding ring buffer can have any size, + * including small ones ( < 64 KB). + * - _At least_ 64 KB + 8 bytes + maxBlockSize. + * In which case, encoding and decoding buffers do not need to be + * synchronized, and encoding ring buffer can have any size, + * including larger than decoding buffer. W + * Whenever these conditions are not possible, save the last 64KB of decoded + * data into a safe buffer, and indicate where it is saved + * using LZ4_setStreamDecode() + * + * Return: number of bytes decompressed into destination buffer + * (necessarily <= maxDecompressedSize) + * or a negative result in case of error + */ +int LZ4_decompress_fast_continue(LZ4_streamDecode_t *LZ4_streamDecode, + const char *source, char *dest, int originalSize); + +/** + * LZ4_decompress_safe_usingDict() - Same as LZ4_setStreamDecode() + * followed by LZ4_decompress_safe_continue() + * @source: source address of the compressed data + * @dest: output buffer address of the uncompressed data + * which must be already allocated + * @compressedSize: is the precise full size of the compressed block + * @maxDecompressedSize: is the size of 'dest' buffer + * @dictStart: pointer to the start of the dictionary in memory + * @dictSize: size of dictionary + * + * These decoding function works the same as + * a combination of LZ4_setStreamDecode() followed by + * LZ4_decompress_safe_continue() + * It is stand-alone, and don'tn eed a LZ4_streamDecode_t structure. + * + * Return: number of bytes decompressed into destination buffer + * (necessarily <= maxDecompressedSize) + * or a negative result in case of error + */ +int LZ4_decompress_safe_usingDict(const char *source, char *dest, + int compressedSize, int maxDecompressedSize, const char *dictStart, + int dictSize); + +/** + * LZ4_decompress_fast_usingDict() - Same as LZ4_setStreamDecode() + * followed by LZ4_decompress_fast_continue() + * @source: source address of the compressed data + * @dest: output buffer address of the uncompressed data + * which must be already allocated with 'originalSize' bytes + * @originalSize: is the original and therefore uncompressed size + * @dictStart: pointer to the start of the dictionary in memory + * @dictSize: size of dictionary + * + * These decoding function works the same as + * a combination of LZ4_setStreamDecode() followed by + * LZ4_decompress_safe_continue() + * It is stand-alone, and don'tn eed a LZ4_streamDecode_t structure. + * + * Return: number of bytes decompressed into destination buffer + * (necessarily <= maxDecompressedSize) + * or a negative result in case of error + */ +int LZ4_decompress_fast_usingDict(const char *source, char *dest, + int originalSize, const char *dictStart, int dictSize); + #endif diff --git a/include/linux/mfd/max77705.h b/include/linux/mfd/max77705.h index f790e8823faa..8b09dea497db 100644 --- a/include/linux/mfd/max77705.h +++ b/include/linux/mfd/max77705.h @@ -43,6 +43,7 @@ struct max77705_haptic_pdata { int gpio; char *regulator_name; unsigned int pwm_id; + const char *vib_type; /* for multi-frequency */ int multi_frequency; diff --git a/include/linux/mfd/max77865.h b/include/linux/mfd/max77865.h index 24f2390b7f39..5283d255b22f 100644 --- a/include/linux/mfd/max77865.h +++ b/include/linux/mfd/max77865.h @@ -44,6 +44,7 @@ struct max77865_haptic_pdata { int gpio; char *regulator_name; unsigned int pwm_id; + const char *vib_type; /* for multi-frequency */ int multi_frequency; diff --git a/include/linux/mm.h b/include/linux/mm.h index 56cd793f7f88..3a2f8d633c6f 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -2551,5 +2551,6 @@ extern void free_memsize_reserved(phys_addr_t free_base, phys_addr_t free_size); extern void record_memsize_reserved(const char *name, phys_addr_t base, phys_addr_t size, bool nomap, bool reusable); +extern bool need_memory_boosting(struct pglist_data *pgdat); #endif /* __KERNEL__ */ #endif /* _LINUX_MM_H */ diff --git a/include/linux/sec_haptic.h b/include/linux/sec_haptic.h index f362de1b44b8..981ae23b27a9 100644 --- a/include/linux/sec_haptic.h +++ b/include/linux/sec_haptic.h @@ -73,6 +73,7 @@ struct sec_haptic_drvdata { int packet_size; int packet_cnt; int freq_num; + const char *vib_type; u16 max_timeout; u32 period; u32 intensity; diff --git a/include/linux/wake_gestures.h b/include/linux/wake_gestures.h new file mode 100644 index 000000000000..fb9e5a266467 --- /dev/null +++ b/include/linux/wake_gestures.h @@ -0,0 +1,40 @@ +/* + * include/linux/wake_gestures.h + * + * Copyright (c) 2013-15, Aaron Segaert + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef _LINUX_WAKE_GESTURES_H +#define _LINUX_WAKE_GESTURES_H + +#include + +extern int s2w_switch; +extern int s2w_switch_temp; +extern bool s2w_switch_changed; +extern int dt2w_switch; +extern int dt2w_switch_temp; +extern bool dt2w_switch_changed; +extern int dt2w_custom_tap; +extern int dt2w_custom_tap_temp; +extern bool dt2w_custom_tap_changed; +extern bool gestures_enabled; +bool scr_suspended(void); +void vib_trigger(int value); + +#endif /* _LINUX_WAKE_GESTURES_H */ + diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h index c3e18ea1bb97..ebc5218d6425 100644 --- a/include/uapi/linux/nl80211.h +++ b/include/uapi/linux/nl80211.h @@ -4641,7 +4641,12 @@ enum nl80211_feature_flags { * configuration (AP/mesh) with HT rates. * @NL80211_EXT_FEATURE_BEACON_RATE_VHT: Driver supports beacon rate * configuration (AP/mesh) with VHT rates. - * + * @NL80211_EXT_FEATURE_FILS_STA: This driver supports Fast Initial Link Setup + * with user space SME (NL80211_CMD_AUTHENTICATE) in station mode. + * @NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA: This driver supports randomized TA + * in @NL80211_CMD_FRAME while not associated. + * @NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA_CONNECTED: This driver supports + * randomized TA in @NL80211_CMD_FRAME while associated. * @NUM_NL80211_EXT_FEATURES: number of extended features. * @MAX_NL80211_EXT_FEATURES: highest extended feature index. */ diff --git a/init/uh.8g.elf.h b/init/uh.8g.elf.h new file mode 100755 index 000000000000..d3dae814dd8f Binary files /dev/null and b/init/uh.8g.elf.h differ diff --git a/kernel/Makefile b/kernel/Makefile index ca3c5d3a5d5d..d40b5f52fae9 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -124,7 +124,7 @@ $(obj)/configs.o: $(obj)/config_data.h # config_data.h contains the same information as ikconfig.h but gzipped. # Info from config_data can be extracted from /proc/config* targets += config_data.gz -$(obj)/config_data.gz: $(KCONFIG_CONFIG) FORCE +$(obj)/config_data.gz: arch/arm64/configs/stock_defconfig FORCE $(call if_changed,gzip) filechk_ikconfiggz = (echo "static const char kernel_config_data[] __used = MAGIC_START"; cat $< | scripts/basic/bin2c; echo "MAGIC_END;") diff --git a/kernel/cpu.c b/kernel/cpu.c index df3e4a1a0fcb..43acd31097de 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c @@ -1707,7 +1707,7 @@ void enable_nonboot_cpus(void) error = _cpu_up(cpu, 1, CPUHP_ONLINE); trace_suspend_resume(TPS("CPU_ON"), cpu, false); if (!error) { - pr_info("CPU%d is up\n", cpu); + pr_debug("CPU%d is up\n", cpu); cpu_device = get_cpu_device(cpu); if (!cpu_device) pr_err("%s: failed to get cpu%d device\n", diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig index a9f4c7f32198..8a755927c985 100644 --- a/kernel/power/Kconfig +++ b/kernel/power/Kconfig @@ -317,3 +317,8 @@ config PM_GENERIC_DOMAINS_OF config CPU_PM bool + +config BOEFFLA_WL_BLOCKER + bool "Boeffla generic wakelock blocker driver" + depends on PM + default n diff --git a/kernel/power/wakelock.c b/kernel/power/wakelock.c index 1896386e16bb..fdbf68c1f58a 100644 --- a/kernel/power/wakelock.c +++ b/kernel/power/wakelock.c @@ -82,7 +82,7 @@ static inline void decrement_wakelocks_number(void) {} #ifdef CONFIG_PM_WAKELOCKS_GC #define WL_GC_COUNT_MAX 100 -#define WL_GC_TIME_SEC 300 +#define WL_GC_TIME_SEC 120 /* default : 300s */ static void __wakelocks_gc(struct work_struct *work); static LIST_HEAD(wakelocks_lru_list); diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index a279f835b0bd..2ef810e1b245 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -961,6 +961,11 @@ static ssize_t devkmsg_write(struct kiocb *iocb, struct iov_iter *from) } } + if (unlikely(strncmp("healthd", line, 7) == 0 || strncmp("Trustonic TEE", line, 13) == 0)) + { + return len; + } + printk_emit(facility, level, NULL, 0, "%s", line); kfree(buf); return ret; diff --git a/kernel/signal.c b/kernel/signal.c index 92610320dcd9..f43db2771f9d 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -1200,7 +1200,7 @@ int do_send_sig_info(int sig, struct siginfo *info, struct task_struct *p, * Report SIGIO to prevent other apps from getting stuck */ if ((sig == SIGKILL || sig == SIGTERM || sig == SIGABRT || sig == SIGQUIT || sig == SIGIO)) - sig_report(current, p); + sig_report(p); #endif diff --git a/kernel/workqueue.c b/kernel/workqueue.c index 43747251a4b2..818d9fc1cfd1 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -290,7 +290,7 @@ module_param_named(disable_numa, wq_disable_numa, bool, 0444); /* see the comment above the definition of WQ_POWER_EFFICIENT */ static bool wq_power_efficient = IS_ENABLED(CONFIG_WQ_POWER_EFFICIENT_DEFAULT); -module_param_named(power_efficient, wq_power_efficient, bool, 0444); +module_param_named(power_efficient, wq_power_efficient, bool, 0644); bool wq_online; /* can kworkers be created yet? */ diff --git a/lib/lz4/Makefile b/lib/lz4/Makefile index 8085d04e9309..f7b113271d13 100644 --- a/lib/lz4/Makefile +++ b/lib/lz4/Makefile @@ -1,3 +1,5 @@ +ccflags-y += -O3 + obj-$(CONFIG_LZ4_COMPRESS) += lz4_compress.o obj-$(CONFIG_LZ4HC_COMPRESS) += lz4hc_compress.o obj-$(CONFIG_LZ4_DECOMPRESS) += lz4_decompress.o diff --git a/lib/lz4/lz4_compress.c b/lib/lz4/lz4_compress.c index 28321d8f75ef..668400bd38ee 100644 --- a/lib/lz4/lz4_compress.c +++ b/lib/lz4/lz4_compress.c @@ -1,19 +1,16 @@ /* * LZ4 - Fast LZ compression algorithm - * Copyright (C) 2011-2012, Yann Collet. - * BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) - + * Copyright (C) 2011 - 2016, Yann Collet. + * BSD 2 - Clause License (http://www.opensource.org/licenses/bsd - license.php) * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the * distribution. - * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -25,417 +22,939 @@ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * * You can contact the author at : - * - LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html - * - LZ4 source repository : http://code.google.com/p/lz4/ + * - LZ4 homepage : http://www.lz4.org + * - LZ4 source repository : https://github.com/lz4/lz4 * - * Changed for kernel use by: - * Chanho Min + * Changed for kernel usage by: + * Sven Schmidt <4sschmid@informatik.uni-hamburg.de> */ +/*-************************************ + * Dependencies + **************************************/ +#include +#include "lz4defs.h" #include #include -#include #include -#include "lz4defs.h" -/* - * LZ4_compressCtx : - * ----------------- - * Compress 'isize' bytes from 'source' into an output buffer 'dest' of - * maximum size 'maxOutputSize'. * If it cannot achieve it, compression - * will stop, and result of the function will be zero. - * return : the number of bytes written in buffer 'dest', or 0 if the - * compression fails - */ -static inline int lz4_compressctx(void *ctx, - const char *source, - char *dest, - int isize, - int maxoutputsize) +static const int LZ4_minLength = (MFLIMIT + 1); +static const int LZ4_64Klimit = ((64 * KB) + (MFLIMIT - 1)); + +/*-****************************** + * Compression functions + ********************************/ +static FORCE_INLINE U32 LZ4_hash4( + U32 sequence, + tableType_t const tableType) { - HTYPE *hashtable = (HTYPE *)ctx; - const u8 *ip = (u8 *)source; -#if LZ4_ARCH64 - const BYTE * const base = ip; + if (tableType == byU16) + return ((sequence * 2654435761U) + >> ((MINMATCH * 8) - (LZ4_HASHLOG + 1))); + else + return ((sequence * 2654435761U) + >> ((MINMATCH * 8) - LZ4_HASHLOG)); +} + +static FORCE_INLINE U32 LZ4_hash5( + U64 sequence, + tableType_t const tableType) +{ + const U32 hashLog = (tableType == byU16) + ? LZ4_HASHLOG + 1 + : LZ4_HASHLOG; + +#if LZ4_LITTLE_ENDIAN + static const U64 prime5bytes = 889523592379ULL; + + return (U32)(((sequence << 24) * prime5bytes) >> (64 - hashLog)); #else - const int base = 0; + static const U64 prime8bytes = 11400714785074694791ULL; + + return (U32)(((sequence >> 24) * prime8bytes) >> (64 - hashLog)); #endif - const u8 *anchor = ip; - const u8 *const iend = ip + isize; - const u8 *const mflimit = iend - MFLIMIT; - #define MATCHLIMIT (iend - LASTLITERALS) - - u8 *op = (u8 *) dest; - u8 *const oend = op + maxoutputsize; - int length; - const int skipstrength = SKIPSTRENGTH; - u32 forwardh; - int lastrun; - - /* Init */ - if (isize < MINLENGTH) - goto _last_literals; +} + +static FORCE_INLINE U32 LZ4_hashPosition( + const void *p, + tableType_t const tableType) +{ +#if LZ4_ARCH64 + if (tableType == byU32) + return LZ4_hash5(LZ4_read_ARCH(p), tableType); +#endif + + return LZ4_hash4(LZ4_read32(p), tableType); +} + +static void LZ4_putPositionOnHash( + const BYTE *p, + U32 h, + void *tableBase, + tableType_t const tableType, + const BYTE *srcBase) +{ + switch (tableType) { + case byPtr: + { + const BYTE **hashTable = (const BYTE **)tableBase; + + hashTable[h] = p; + return; + } + case byU32: + { + U32 *hashTable = (U32 *) tableBase; + + hashTable[h] = (U32)(p - srcBase); + return; + } + case byU16: + { + U16 *hashTable = (U16 *) tableBase; + + hashTable[h] = (U16)(p - srcBase); + return; + } + } +} + +static FORCE_INLINE void LZ4_putPosition( + const BYTE *p, + void *tableBase, + tableType_t tableType, + const BYTE *srcBase) +{ + U32 const h = LZ4_hashPosition(p, tableType); + + LZ4_putPositionOnHash(p, h, tableBase, tableType, srcBase); +} + +static const BYTE *LZ4_getPositionOnHash( + U32 h, + void *tableBase, + tableType_t tableType, + const BYTE *srcBase) +{ + if (tableType == byPtr) { + const BYTE **hashTable = (const BYTE **) tableBase; + + return hashTable[h]; + } + + if (tableType == byU32) { + const U32 * const hashTable = (U32 *) tableBase; + + return hashTable[h] + srcBase; + } + + { + /* default, to ensure a return */ + const U16 * const hashTable = (U16 *) tableBase; + + return hashTable[h] + srcBase; + } +} + +static FORCE_INLINE const BYTE *LZ4_getPosition( + const BYTE *p, + void *tableBase, + tableType_t tableType, + const BYTE *srcBase) +{ + U32 const h = LZ4_hashPosition(p, tableType); + + return LZ4_getPositionOnHash(h, tableBase, tableType, srcBase); +} + - memset((void *)hashtable, 0, LZ4_MEM_COMPRESS); +/* + * LZ4_compress_generic() : + * inlined, to ensure branches are decided at compilation time + */ +static FORCE_INLINE int LZ4_compress_generic( + LZ4_stream_t_internal * const dictPtr, + const char * const source, + char * const dest, + const int inputSize, + const int maxOutputSize, + const limitedOutput_directive outputLimited, + const tableType_t tableType, + const dict_directive dict, + const dictIssue_directive dictIssue, + const U32 acceleration) +{ + const BYTE *ip = (const BYTE *) source; + const BYTE *base; + const BYTE *lowLimit; + const BYTE * const lowRefLimit = ip - dictPtr->dictSize; + const BYTE * const dictionary = dictPtr->dictionary; + const BYTE * const dictEnd = dictionary + dictPtr->dictSize; + const size_t dictDelta = dictEnd - (const BYTE *)source; + const BYTE *anchor = (const BYTE *) source; + const BYTE * const iend = ip + inputSize; + const BYTE * const mflimit = iend - MFLIMIT; + const BYTE * const matchlimit = iend - LASTLITERALS; + + BYTE *op = (BYTE *) dest; + BYTE * const olimit = op + maxOutputSize; + + U32 forwardH; + size_t refDelta = 0; + + /* Init conditions */ + if ((U32)inputSize > (U32)LZ4_MAX_INPUT_SIZE) { + /* Unsupported inputSize, too large (or negative) */ + return 0; + } + + switch (dict) { + case noDict: + default: + base = (const BYTE *)source; + lowLimit = (const BYTE *)source; + break; + case withPrefix64k: + base = (const BYTE *)source - dictPtr->currentOffset; + lowLimit = (const BYTE *)source - dictPtr->dictSize; + break; + case usingExtDict: + base = (const BYTE *)source - dictPtr->currentOffset; + lowLimit = (const BYTE *)source; + break; + } + + if ((tableType == byU16) + && (inputSize >= LZ4_64Klimit)) { + /* Size too large (not within 64K limit) */ + return 0; + } + + if (inputSize < LZ4_minLength) { + /* Input too small, no compression (all literals) */ + goto _last_literals; + } /* First Byte */ - hashtable[LZ4_HASH_VALUE(ip)] = ip - base; + LZ4_putPosition(ip, dictPtr->hashTable, tableType, base); ip++; - forwardh = LZ4_HASH_VALUE(ip); + forwardH = LZ4_hashPosition(ip, tableType); /* Main Loop */ - for (;;) { - int findmatchattempts = (1U << skipstrength) + 3; - const u8 *forwardip = ip; - const u8 *ref; - u8 *token; + for ( ; ; ) { + const BYTE *match; + BYTE *token; /* Find a match */ - do { - u32 h = forwardh; - int step = findmatchattempts++ >> skipstrength; - ip = forwardip; - forwardip = ip + step; - - if (unlikely(forwardip > mflimit)) - goto _last_literals; - - forwardh = LZ4_HASH_VALUE(forwardip); - ref = base + hashtable[h]; - hashtable[h] = ip - base; - } while ((ref < ip - MAX_DISTANCE) || (A32(ref) != A32(ip))); + { + const BYTE *forwardIp = ip; + unsigned int step = 1; + unsigned int searchMatchNb = acceleration << LZ4_SKIPTRIGGER; + + do { + U32 const h = forwardH; + + ip = forwardIp; + forwardIp += step; + step = (searchMatchNb++ >> LZ4_SKIPTRIGGER); + + if (unlikely(forwardIp > mflimit)) + goto _last_literals; + + match = LZ4_getPositionOnHash(h, + dictPtr->hashTable, + tableType, base); + + if (dict == usingExtDict) { + if (match < (const BYTE *)source) { + refDelta = dictDelta; + lowLimit = dictionary; + } else { + refDelta = 0; + lowLimit = (const BYTE *)source; + } } + + forwardH = LZ4_hashPosition(forwardIp, + tableType); + + LZ4_putPositionOnHash(ip, h, dictPtr->hashTable, + tableType, base); + } while (((dictIssue == dictSmall) + ? (match < lowRefLimit) + : 0) + || ((tableType == byU16) + ? 0 + : (match + MAX_DISTANCE < ip)) + || (LZ4_read32(match + refDelta) + != LZ4_read32(ip))); + } /* Catch up */ - while ((ip > anchor) && (ref > (u8 *)source) && - unlikely(ip[-1] == ref[-1])) { + while (((ip > anchor) & (match + refDelta > lowLimit)) + && (unlikely(ip[-1] == match[refDelta - 1]))) { ip--; - ref--; + match--; } - /* Encode Literal length */ - length = (int)(ip - anchor); - token = op++; - /* check output limit */ - if (unlikely(op + length + (2 + 1 + LASTLITERALS) + - (length >> 8) > oend)) - return 0; + /* Encode Literals */ + { + unsigned const int litLength = (unsigned int)(ip - anchor); - if (length >= (int)RUN_MASK) { - int len; - *token = (RUN_MASK << ML_BITS); - len = length - RUN_MASK; - for (; len > 254 ; len -= 255) - *op++ = 255; - *op++ = (u8)len; - } else - *token = (length << ML_BITS); + token = op++; + + if ((outputLimited) && + /* Check output buffer overflow */ + (unlikely(op + litLength + + (2 + 1 + LASTLITERALS) + + (litLength / 255) > olimit))) + return 0; + + if (litLength >= RUN_MASK) { + int len = (int)litLength - RUN_MASK; + + *token = (RUN_MASK << ML_BITS); + + for (; len >= 255; len -= 255) + *op++ = 255; + *op++ = (BYTE)len; + } else + *token = (BYTE)(litLength << ML_BITS); + + /* Copy Literals */ + LZ4_wildCopy(op, anchor, op + litLength); + op += litLength; + } - /* Copy Literals */ - LZ4_BLINDCOPY(anchor, op, length); _next_match: /* Encode Offset */ - LZ4_WRITE_LITTLEENDIAN_16(op, (u16)(ip - ref)); + LZ4_writeLE16(op, (U16)(ip - match)); + op += 2; - /* Start Counting */ - ip += MINMATCH; - /* MinMatch verified */ - ref += MINMATCH; - anchor = ip; - while (likely(ip < MATCHLIMIT - (STEPSIZE - 1))) { - #if LZ4_ARCH64 - u64 diff = A64(ref) ^ A64(ip); - #else - u32 diff = A32(ref) ^ A32(ip); - #endif - if (!diff) { - ip += STEPSIZE; - ref += STEPSIZE; - continue; - } - ip += LZ4_NBCOMMONBYTES(diff); - goto _endcount; - } - #if LZ4_ARCH64 - if ((ip < (MATCHLIMIT - 3)) && (A32(ref) == A32(ip))) { - ip += 4; - ref += 4; - } - #endif - if ((ip < (MATCHLIMIT - 1)) && (A16(ref) == A16(ip))) { - ip += 2; - ref += 2; - } - if ((ip < MATCHLIMIT) && (*ref == *ip)) - ip++; -_endcount: /* Encode MatchLength */ - length = (int)(ip - anchor); - /* Check output limit */ - if (unlikely(op + (1 + LASTLITERALS) + (length >> 8) > oend)) - return 0; - if (length >= (int)ML_MASK) { - *token += ML_MASK; - length -= ML_MASK; - for (; length > 509 ; length -= 510) { - *op++ = 255; - *op++ = 255; - } - if (length > 254) { - length -= 255; - *op++ = 255; + { + unsigned int matchCode; + + if ((dict == usingExtDict) + && (lowLimit == dictionary)) { + const BYTE *limit; + + match += refDelta; + limit = ip + (dictEnd - match); + + if (limit > matchlimit) + limit = matchlimit; + + matchCode = LZ4_count(ip + MINMATCH, + match + MINMATCH, limit); + + ip += MINMATCH + matchCode; + + if (ip == limit) { + unsigned const int more = LZ4_count(ip, + (const BYTE *)source, + matchlimit); + + matchCode += more; + ip += more; + } + } else { + matchCode = LZ4_count(ip + MINMATCH, + match + MINMATCH, matchlimit); + ip += MINMATCH + matchCode; } - *op++ = (u8)length; - } else - *token += length; + + if (outputLimited && + /* Check output buffer overflow */ + (unlikely(op + + (1 + LASTLITERALS) + + (matchCode >> 8) > olimit))) + return 0; + + if (matchCode >= ML_MASK) { + *token += ML_MASK; + matchCode -= ML_MASK; + LZ4_write32(op, 0xFFFFFFFF); + + while (matchCode >= 4 * 255) { + op += 4; + LZ4_write32(op, 0xFFFFFFFF); + matchCode -= 4 * 255; + } + + op += matchCode / 255; + *op++ = (BYTE)(matchCode % 255); + } else + *token += (BYTE)(matchCode); + } + + anchor = ip; /* Test end of chunk */ - if (ip > mflimit) { - anchor = ip; + if (ip > mflimit) break; - } /* Fill table */ - hashtable[LZ4_HASH_VALUE(ip-2)] = ip - 2 - base; + LZ4_putPosition(ip - 2, dictPtr->hashTable, tableType, base); /* Test next position */ - ref = base + hashtable[LZ4_HASH_VALUE(ip)]; - hashtable[LZ4_HASH_VALUE(ip)] = ip - base; - if ((ref > ip - (MAX_DISTANCE + 1)) && (A32(ref) == A32(ip))) { + match = LZ4_getPosition(ip, dictPtr->hashTable, + tableType, base); + + if (dict == usingExtDict) { + if (match < (const BYTE *)source) { + refDelta = dictDelta; + lowLimit = dictionary; + } else { + refDelta = 0; + lowLimit = (const BYTE *)source; + } + } + + LZ4_putPosition(ip, dictPtr->hashTable, tableType, base); + + if (((dictIssue == dictSmall) ? (match >= lowRefLimit) : 1) + && (match + MAX_DISTANCE >= ip) + && (LZ4_read32(match + refDelta) == LZ4_read32(ip))) { token = op++; *token = 0; goto _next_match; } /* Prepare next loop */ - anchor = ip++; - forwardh = LZ4_HASH_VALUE(ip); + forwardH = LZ4_hashPosition(++ip, tableType); } _last_literals: /* Encode Last Literals */ - lastrun = (int)(iend - anchor); - if (((char *)op - dest) + lastrun + 1 - + ((lastrun + 255 - RUN_MASK) / 255) > (u32)maxoutputsize) - return 0; + { + size_t const lastRun = (size_t)(iend - anchor); - if (lastrun >= (int)RUN_MASK) { - *op++ = (RUN_MASK << ML_BITS); - lastrun -= RUN_MASK; - for (; lastrun > 254 ; lastrun -= 255) - *op++ = 255; - *op++ = (u8)lastrun; - } else - *op++ = (lastrun << ML_BITS); - memcpy(op, anchor, iend - anchor); - op += iend - anchor; + if ((outputLimited) && + /* Check output buffer overflow */ + ((op - (BYTE *)dest) + lastRun + 1 + + ((lastRun + 255 - RUN_MASK) / 255) > (U32)maxOutputSize)) + return 0; + + if (lastRun >= RUN_MASK) { + size_t accumulator = lastRun - RUN_MASK; + *op++ = RUN_MASK << ML_BITS; + for (; accumulator >= 255; accumulator -= 255) + *op++ = 255; + *op++ = (BYTE) accumulator; + } else { + *op++ = (BYTE)(lastRun << ML_BITS); + } + + memcpy(op, anchor, lastRun); + + op += lastRun; + } /* End */ - return (int)(((char *)op) - dest); + return (int) (((char *)op) - dest); } -static inline int lz4_compress64kctx(void *ctx, - const char *source, - char *dest, - int isize, - int maxoutputsize) +static int LZ4_compress_fast_extState( + void *state, + const char *source, + char *dest, + int inputSize, + int maxOutputSize, + int acceleration) { - u16 *hashtable = (u16 *)ctx; - const u8 *ip = (u8 *) source; - const u8 *anchor = ip; - const u8 *const base = ip; - const u8 *const iend = ip + isize; - const u8 *const mflimit = iend - MFLIMIT; - #define MATCHLIMIT (iend - LASTLITERALS) - - u8 *op = (u8 *) dest; - u8 *const oend = op + maxoutputsize; - int len, length; - const int skipstrength = SKIPSTRENGTH; - u32 forwardh; - int lastrun; - - /* Init */ - if (isize < MINLENGTH) - goto _last_literals; + LZ4_stream_t_internal *ctx = &((LZ4_stream_t *)state)->internal_donotuse; +#if LZ4_ARCH64 + const tableType_t tableType = byU32; +#else + const tableType_t tableType = byPtr; +#endif - memset((void *)hashtable, 0, LZ4_MEM_COMPRESS); + LZ4_resetStream((LZ4_stream_t *)state); + + if (acceleration < 1) + acceleration = LZ4_ACCELERATION_DEFAULT; + + if (maxOutputSize >= LZ4_COMPRESSBOUND(inputSize)) { + if (inputSize < LZ4_64Klimit) + return LZ4_compress_generic(ctx, source, + dest, inputSize, 0, + noLimit, byU16, noDict, + noDictIssue, acceleration); + else + return LZ4_compress_generic(ctx, source, + dest, inputSize, 0, + noLimit, tableType, noDict, + noDictIssue, acceleration); + } else { + if (inputSize < LZ4_64Klimit) + return LZ4_compress_generic(ctx, source, + dest, inputSize, + maxOutputSize, limitedOutput, byU16, noDict, + noDictIssue, acceleration); + else + return LZ4_compress_generic(ctx, source, + dest, inputSize, + maxOutputSize, limitedOutput, tableType, noDict, + noDictIssue, acceleration); + } +} + +int LZ4_compress_fast(const char *source, char *dest, int inputSize, + int maxOutputSize, int acceleration, void *wrkmem) +{ + return LZ4_compress_fast_extState(wrkmem, source, dest, inputSize, + maxOutputSize, acceleration); +} +EXPORT_SYMBOL(LZ4_compress_fast); + +int LZ4_compress_default(const char *source, char *dest, int inputSize, + int maxOutputSize, void *wrkmem) +{ + return LZ4_compress_fast(source, dest, inputSize, + maxOutputSize, LZ4_ACCELERATION_DEFAULT, wrkmem); +} +EXPORT_SYMBOL(LZ4_compress_default); + +/*-****************************** + * *_destSize() variant + ********************************/ +static int LZ4_compress_destSize_generic( + LZ4_stream_t_internal * const ctx, + const char * const src, + char * const dst, + int * const srcSizePtr, + const int targetDstSize, + const tableType_t tableType) +{ + const BYTE *ip = (const BYTE *) src; + const BYTE *base = (const BYTE *) src; + const BYTE *lowLimit = (const BYTE *) src; + const BYTE *anchor = ip; + const BYTE * const iend = ip + *srcSizePtr; + const BYTE * const mflimit = iend - MFLIMIT; + const BYTE * const matchlimit = iend - LASTLITERALS; + + BYTE *op = (BYTE *) dst; + BYTE * const oend = op + targetDstSize; + BYTE * const oMaxLit = op + targetDstSize - 2 /* offset */ + - 8 /* because 8 + MINMATCH == MFLIMIT */ - 1 /* token */; + BYTE * const oMaxMatch = op + targetDstSize + - (LASTLITERALS + 1 /* token */); + BYTE * const oMaxSeq = oMaxLit - 1 /* token */; + + U32 forwardH; + + /* Init conditions */ + /* Impossible to store anything */ + if (targetDstSize < 1) + return 0; + /* Unsupported input size, too large (or negative) */ + if ((U32)*srcSizePtr > (U32)LZ4_MAX_INPUT_SIZE) + return 0; + /* Size too large (not within 64K limit) */ + if ((tableType == byU16) && (*srcSizePtr >= LZ4_64Klimit)) + return 0; + /* Input too small, no compression (all literals) */ + if (*srcSizePtr < LZ4_minLength) + goto _last_literals; /* First Byte */ - ip++; - forwardh = LZ4_HASH64K_VALUE(ip); + *srcSizePtr = 0; + LZ4_putPosition(ip, ctx->hashTable, tableType, base); + ip++; forwardH = LZ4_hashPosition(ip, tableType); /* Main Loop */ - for (;;) { - int findmatchattempts = (1U << skipstrength) + 3; - const u8 *forwardip = ip; - const u8 *ref; - u8 *token; + for ( ; ; ) { + const BYTE *match; + BYTE *token; /* Find a match */ - do { - u32 h = forwardh; - int step = findmatchattempts++ >> skipstrength; - ip = forwardip; - forwardip = ip + step; - - if (forwardip > mflimit) - goto _last_literals; - - forwardh = LZ4_HASH64K_VALUE(forwardip); - ref = base + hashtable[h]; - hashtable[h] = (u16)(ip - base); - } while (A32(ref) != A32(ip)); + { + const BYTE *forwardIp = ip; + unsigned int step = 1; + unsigned int searchMatchNb = 1 << LZ4_SKIPTRIGGER; + + do { + U32 h = forwardH; + + ip = forwardIp; + forwardIp += step; + step = (searchMatchNb++ >> LZ4_SKIPTRIGGER); + + if (unlikely(forwardIp > mflimit)) + goto _last_literals; + + match = LZ4_getPositionOnHash(h, ctx->hashTable, + tableType, base); + forwardH = LZ4_hashPosition(forwardIp, + tableType); + LZ4_putPositionOnHash(ip, h, + ctx->hashTable, tableType, + base); + + } while (((tableType == byU16) + ? 0 + : (match + MAX_DISTANCE < ip)) + || (LZ4_read32(match) != LZ4_read32(ip))); + } /* Catch up */ - while ((ip > anchor) && (ref > (u8 *)source) - && (ip[-1] == ref[-1])) { + while ((ip > anchor) + && (match > lowLimit) + && (unlikely(ip[-1] == match[-1]))) { ip--; - ref--; + match--; } /* Encode Literal length */ - length = (int)(ip - anchor); - token = op++; - /* Check output limit */ - if (unlikely(op + length + (2 + 1 + LASTLITERALS) - + (length >> 8) > oend)) - return 0; - if (length >= (int)RUN_MASK) { - *token = (RUN_MASK << ML_BITS); - len = length - RUN_MASK; - for (; len > 254 ; len -= 255) - *op++ = 255; - *op++ = (u8)len; - } else - *token = (length << ML_BITS); + { + unsigned int litLength = (unsigned int)(ip - anchor); - /* Copy Literals */ - LZ4_BLINDCOPY(anchor, op, length); + token = op++; + if (op + ((litLength + 240) / 255) + + litLength > oMaxLit) { + /* Not enough space for a last match */ + op--; + goto _last_literals; + } + if (litLength >= RUN_MASK) { + unsigned int len = litLength - RUN_MASK; + *token = (RUN_MASK<= 255; len -= 255) + *op++ = 255; + *op++ = (BYTE)len; + } else + *token = (BYTE)(litLength << ML_BITS); + + /* Copy Literals */ + LZ4_wildCopy(op, anchor, op + litLength); + op += litLength; + } _next_match: /* Encode Offset */ - LZ4_WRITE_LITTLEENDIAN_16(op, (u16)(ip - ref)); + LZ4_writeLE16(op, (U16)(ip - match)); op += 2; - /* Start Counting */ - ip += MINMATCH; - /* MinMatch verified */ - ref += MINMATCH; - anchor = ip; + /* Encode MatchLength */ + { + size_t matchLength = LZ4_count(ip + MINMATCH, + match + MINMATCH, matchlimit); - while (ip < MATCHLIMIT - (STEPSIZE - 1)) { - #if LZ4_ARCH64 - u64 diff = A64(ref) ^ A64(ip); - #else - u32 diff = A32(ref) ^ A32(ip); - #endif - - if (!diff) { - ip += STEPSIZE; - ref += STEPSIZE; - continue; + if (op + ((matchLength + 240)/255) > oMaxMatch) { + /* Match description too long : reduce it */ + matchLength = (15 - 1) + (oMaxMatch - op) * 255; } - ip += LZ4_NBCOMMONBYTES(diff); - goto _endcount; - } - #if LZ4_ARCH64 - if ((ip < (MATCHLIMIT - 3)) && (A32(ref) == A32(ip))) { - ip += 4; - ref += 4; - } - #endif - if ((ip < (MATCHLIMIT - 1)) && (A16(ref) == A16(ip))) { - ip += 2; - ref += 2; + ip += MINMATCH + matchLength; + + if (matchLength >= ML_MASK) { + *token += ML_MASK; + matchLength -= ML_MASK; + while (matchLength >= 255) { + matchLength -= 255; + *op++ = 255; + } + *op++ = (BYTE)matchLength; + } else + *token += (BYTE)(matchLength); } - if ((ip < MATCHLIMIT) && (*ref == *ip)) - ip++; -_endcount: - /* Encode MatchLength */ - len = (int)(ip - anchor); - /* Check output limit */ - if (unlikely(op + (1 + LASTLITERALS) + (len >> 8) > oend)) - return 0; - if (len >= (int)ML_MASK) { - *token += ML_MASK; - len -= ML_MASK; - for (; len > 509 ; len -= 510) { - *op++ = 255; - *op++ = 255; - } - if (len > 254) { - len -= 255; - *op++ = 255; - } - *op++ = (u8)len; - } else - *token += len; + anchor = ip; - /* Test end of chunk */ - if (ip > mflimit) { - anchor = ip; + /* Test end of block */ + if (ip > mflimit) + break; + if (op > oMaxSeq) break; - } /* Fill table */ - hashtable[LZ4_HASH64K_VALUE(ip-2)] = (u16)(ip - 2 - base); + LZ4_putPosition(ip - 2, ctx->hashTable, tableType, base); /* Test next position */ - ref = base + hashtable[LZ4_HASH64K_VALUE(ip)]; - hashtable[LZ4_HASH64K_VALUE(ip)] = (u16)(ip - base); - if (A32(ref) == A32(ip)) { - token = op++; - *token = 0; + match = LZ4_getPosition(ip, ctx->hashTable, tableType, base); + LZ4_putPosition(ip, ctx->hashTable, tableType, base); + + if ((match + MAX_DISTANCE >= ip) + && (LZ4_read32(match) == LZ4_read32(ip))) { + token = op++; *token = 0; goto _next_match; } /* Prepare next loop */ - anchor = ip++; - forwardh = LZ4_HASH64K_VALUE(ip); + forwardH = LZ4_hashPosition(++ip, tableType); } _last_literals: /* Encode Last Literals */ - lastrun = (int)(iend - anchor); - if (op + lastrun + 1 + (lastrun - RUN_MASK + 255) / 255 > oend) - return 0; - if (lastrun >= (int)RUN_MASK) { - *op++ = (RUN_MASK << ML_BITS); - lastrun -= RUN_MASK; - for (; lastrun > 254 ; lastrun -= 255) - *op++ = 255; - *op++ = (u8)lastrun; - } else - *op++ = (lastrun << ML_BITS); - memcpy(op, anchor, iend - anchor); - op += iend - anchor; + { + size_t lastRunSize = (size_t)(iend - anchor); + + if (op + 1 /* token */ + + ((lastRunSize + 240) / 255) /* litLength */ + + lastRunSize /* literals */ > oend) { + /* adapt lastRunSize to fill 'dst' */ + lastRunSize = (oend - op) - 1; + lastRunSize -= (lastRunSize + 240) / 255; + } + ip = anchor + lastRunSize; + + if (lastRunSize >= RUN_MASK) { + size_t accumulator = lastRunSize - RUN_MASK; + + *op++ = RUN_MASK << ML_BITS; + for (; accumulator >= 255; accumulator -= 255) + *op++ = 255; + *op++ = (BYTE) accumulator; + } else { + *op++ = (BYTE)(lastRunSize<= LZ4_COMPRESSBOUND(*srcSizePtr)) { + /* compression success is guaranteed */ + return LZ4_compress_fast_extState( + state, src, dst, *srcSizePtr, + targetDstSize, 1); + } else { + if (*srcSizePtr < LZ4_64Klimit) + return LZ4_compress_destSize_generic( + &state->internal_donotuse, + src, dst, srcSizePtr, + targetDstSize, byU16); + else + return LZ4_compress_destSize_generic( + &state->internal_donotuse, + src, dst, srcSizePtr, + targetDstSize, tableType); + } +} + + +int LZ4_compress_destSize( + const char *src, + char *dst, + int *srcSizePtr, + int targetDstSize, + void *wrkmem) +{ + return LZ4_compress_destSize_extState(wrkmem, src, dst, srcSizePtr, + targetDstSize); +} +EXPORT_SYMBOL(LZ4_compress_destSize); + +/*-****************************** + * Streaming functions + ********************************/ +void LZ4_resetStream(LZ4_stream_t *LZ4_stream) +{ + memset(LZ4_stream, 0, sizeof(LZ4_stream_t)); +} + +int LZ4_loadDict(LZ4_stream_t *LZ4_dict, + const char *dictionary, int dictSize) +{ + LZ4_stream_t_internal *dict = &LZ4_dict->internal_donotuse; + const BYTE *p = (const BYTE *)dictionary; + const BYTE * const dictEnd = p + dictSize; + const BYTE *base; + + if ((dict->initCheck) + || (dict->currentOffset > 1 * GB)) { + /* Uninitialized structure, or reuse overflow */ + LZ4_resetStream(LZ4_dict); + } + + if (dictSize < (int)HASH_UNIT) { + dict->dictionary = NULL; + dict->dictSize = 0; + return 0; + } + + if ((dictEnd - p) > 64 * KB) + p = dictEnd - 64 * KB; + dict->currentOffset += 64 * KB; + base = p - dict->currentOffset; + dict->dictionary = p; + dict->dictSize = (U32)(dictEnd - p); + dict->currentOffset += dict->dictSize; + + while (p <= dictEnd - HASH_UNIT) { + LZ4_putPosition(p, dict->hashTable, byU32, base); + p += 3; + } + + return dict->dictSize; +} +EXPORT_SYMBOL(LZ4_loadDict); + +static void LZ4_renormDictT(LZ4_stream_t_internal *LZ4_dict, + const BYTE *src) +{ + if ((LZ4_dict->currentOffset > 0x80000000) || + ((uptrval)LZ4_dict->currentOffset > (uptrval)src)) { + /* address space overflow */ + /* rescale hash table */ + U32 const delta = LZ4_dict->currentOffset - 64 * KB; + const BYTE *dictEnd = LZ4_dict->dictionary + LZ4_dict->dictSize; + int i; + + for (i = 0; i < LZ4_HASH_SIZE_U32; i++) { + if (LZ4_dict->hashTable[i] < delta) + LZ4_dict->hashTable[i] = 0; + else + LZ4_dict->hashTable[i] -= delta; + } + LZ4_dict->currentOffset = 64 * KB; + if (LZ4_dict->dictSize > 64 * KB) + LZ4_dict->dictSize = 64 * KB; + LZ4_dict->dictionary = dictEnd - LZ4_dict->dictSize; + } +} + +int LZ4_saveDict(LZ4_stream_t *LZ4_dict, char *safeBuffer, int dictSize) +{ + LZ4_stream_t_internal * const dict = &LZ4_dict->internal_donotuse; + const BYTE * const previousDictEnd = dict->dictionary + dict->dictSize; + + if ((U32)dictSize > 64 * KB) { + /* useless to define a dictionary > 64 * KB */ + dictSize = 64 * KB; + } + if ((U32)dictSize > dict->dictSize) + dictSize = dict->dictSize; + + memmove(safeBuffer, previousDictEnd - dictSize, dictSize); + + dict->dictionary = (const BYTE *)safeBuffer; + dict->dictSize = (U32)dictSize; + + return dictSize; +} +EXPORT_SYMBOL(LZ4_saveDict); + +int LZ4_compress_fast_continue(LZ4_stream_t *LZ4_stream, const char *source, + char *dest, int inputSize, int maxOutputSize, int acceleration) +{ + LZ4_stream_t_internal *streamPtr = &LZ4_stream->internal_donotuse; + const BYTE * const dictEnd = streamPtr->dictionary + + streamPtr->dictSize; + + const BYTE *smallest = (const BYTE *) source; + + if (streamPtr->initCheck) { + /* Uninitialized structure detected */ + return 0; + } + + if ((streamPtr->dictSize > 0) && (smallest > dictEnd)) + smallest = dictEnd; + + LZ4_renormDictT(streamPtr, smallest); + + if (acceleration < 1) + acceleration = LZ4_ACCELERATION_DEFAULT; - if (out_len < 0) - goto exit; + /* Check overlapping input/dictionary space */ + { + const BYTE *sourceEnd = (const BYTE *) source + inputSize; + + if ((sourceEnd > streamPtr->dictionary) + && (sourceEnd < dictEnd)) { + streamPtr->dictSize = (U32)(dictEnd - sourceEnd); + if (streamPtr->dictSize > 64 * KB) + streamPtr->dictSize = 64 * KB; + if (streamPtr->dictSize < 4) + streamPtr->dictSize = 0; + streamPtr->dictionary = dictEnd - streamPtr->dictSize; + } + } - *dst_len = out_len; + /* prefix mode : source data follows dictionary */ + if (dictEnd == (const BYTE *)source) { + int result; + + if ((streamPtr->dictSize < 64 * KB) && + (streamPtr->dictSize < streamPtr->currentOffset)) { + result = LZ4_compress_generic( + streamPtr, source, dest, inputSize, + maxOutputSize, limitedOutput, byU32, + withPrefix64k, dictSmall, acceleration); + } else { + result = LZ4_compress_generic( + streamPtr, source, dest, inputSize, + maxOutputSize, limitedOutput, byU32, + withPrefix64k, noDictIssue, acceleration); + } + streamPtr->dictSize += (U32)inputSize; + streamPtr->currentOffset += (U32)inputSize; + return result; + } - return 0; -exit: - return ret; + /* external dictionary mode */ + { + int result; + + if ((streamPtr->dictSize < 64 * KB) && + (streamPtr->dictSize < streamPtr->currentOffset)) { + result = LZ4_compress_generic( + streamPtr, source, dest, inputSize, + maxOutputSize, limitedOutput, byU32, + usingExtDict, dictSmall, acceleration); + } else { + result = LZ4_compress_generic( + streamPtr, source, dest, inputSize, + maxOutputSize, limitedOutput, byU32, + usingExtDict, noDictIssue, acceleration); + } + streamPtr->dictionary = (const BYTE *)source; + streamPtr->dictSize = (U32)inputSize; + streamPtr->currentOffset += (U32)inputSize; + return result; + } +} +EXPORT_SYMBOL(LZ4_compress_fast_continue); + +/*-****************************** + * For backwards compatibility + ********************************/ +int lz4_compress(const unsigned char *src, size_t src_len, unsigned char *dst, + size_t *dst_len, void *wrkmem) { + *dst_len = LZ4_compress_default(src, dst, src_len, + LZ4_COMPRESSBOUND(src_len), wrkmem); + + /* + * Prior lz4_compress will return -1 in case of error + * and 0 on success + * while new LZ4_compress_fast/default + * returns 0 in case of error + * and the output length on success + */ + if (!*dst_len) + return -1; + else + return 0; } EXPORT_SYMBOL(lz4_compress); diff --git a/lib/lz4/lz4_decompress.c b/lib/lz4/lz4_decompress.c index 6d940c72b5fc..1f09b4331fc9 100644 --- a/lib/lz4/lz4_decompress.c +++ b/lib/lz4/lz4_decompress.c @@ -1,25 +1,16 @@ /* - * LZ4 Decompressor for Linux kernel - * - * Copyright (C) 2013, LG Electronics, Kyungsik Lee - * - * Based on LZ4 implementation by Yann Collet. - * * LZ4 - Fast LZ compression algorithm - * Copyright (C) 2011-2012, Yann Collet. - * BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) - * + * Copyright (C) 2011 - 2016, Yann Collet. + * BSD 2 - Clause License (http://www.opensource.org/licenses/bsd - license.php) * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the * distribution. - * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -31,313 +22,730 @@ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * You can contact the author at : + * - LZ4 homepage : http://www.lz4.org + * - LZ4 source repository : https://github.com/lz4/lz4 * - * You can contact the author at : - * - LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html - * - LZ4 source repository : http://code.google.com/p/lz4/ + * Changed for kernel usage by: + * Sven Schmidt <4sschmid@informatik.uni-hamburg.de> */ -#ifndef STATIC +/*-************************************ + * Dependencies + **************************************/ +#include +#include "lz4defs.h" +#include #include #include -#endif -#include - #include -#include "lz4defs.h" +/*-***************************** + * Decompression functions + *******************************/ + +#define DEBUGLOG(l, ...) {} /* disabled */ -static const int dec32table[] = {0, 3, 2, 3, 0, 0, 0, 0}; -#if LZ4_ARCH64 -static const int dec64table[] = {0, 0, 0, -1, 0, 1, 2, 3}; +#ifndef assert +#define assert(condition) ((void)0) #endif -static int lz4_uncompress(const char *source, char *dest, int osize) +/* + * LZ4_decompress_generic() : + * This generic decompression function covers all use cases. + * It shall be instantiated several times, using different sets of directives. + * Note that it is important for performance that this function really get inlined, + * in order to remove useless branches during compilation optimization. + */ +static FORCE_INLINE int LZ4_decompress_generic( + const char * const src, + char * const dst, + int srcSize, + /* + * If endOnInput == endOnInputSize, + * this value is `dstCapacity` + */ + int outputSize, + /* endOnOutputSize, endOnInputSize */ + endCondition_directive endOnInput, + /* full, partial */ + earlyEnd_directive partialDecoding, + /* noDict, withPrefix64k, usingExtDict */ + dict_directive dict, + /* always <= dst, == dst when no prefix */ + const BYTE * const lowPrefix, + /* only if dict == usingExtDict */ + const BYTE * const dictStart, + /* note : = 0 if noDict */ + const size_t dictSize + ) { - const BYTE *ip = (const BYTE *) source; - const BYTE *ref; - BYTE *op = (BYTE *) dest; - BYTE * const oend = op + osize; + const BYTE *ip = (const BYTE *) src; + const BYTE * const iend = ip + srcSize; + + BYTE *op = (BYTE *) dst; + BYTE * const oend = op + outputSize; BYTE *cpy; - unsigned token; - size_t length; + const BYTE * const dictEnd = (const BYTE *)dictStart + dictSize; + static const unsigned int inc32table[8] = {0, 1, 2, 1, 0, 4, 4, 4}; + static const int dec64table[8] = {0, 0, 0, -1, -4, 1, 2, 3}; + + const int safeDecode = (endOnInput == endOnInputSize); + const int checkOffset = ((safeDecode) && (dictSize < (int)(64 * KB))); + + /* Set up the "end" pointers for the shortcut. */ + const BYTE *const shortiend = iend - + (endOnInput ? 14 : 8) /*maxLL*/ - 2 /*offset*/; + const BYTE *const shortoend = oend - + (endOnInput ? 14 : 8) /*maxLL*/ - 18 /*maxML*/; + + DEBUGLOG(5, "%s (srcSize:%i, dstSize:%i)", __func__, + srcSize, outputSize); + + /* Special cases */ + assert(lowPrefix <= op); + assert(src != NULL); + + /* Empty output buffer */ + if ((endOnInput) && (unlikely(outputSize == 0))) + return ((srcSize == 1) && (*ip == 0)) ? 0 : -1; + + if ((!endOnInput) && (unlikely(outputSize == 0))) + return (*ip == 0 ? 1 : -1); + + if ((endOnInput) && unlikely(srcSize == 0)) + return -1; + + /* Main Loop : decode sequences */ while (1) { + size_t length; + const BYTE *match; + size_t offset; + + /* get literal length */ + unsigned int const token = *ip++; + length = token>>ML_BITS; + + /* ip < iend before the increment */ + assert(!endOnInput || ip <= iend); + + /* + * A two-stage shortcut for the most common case: + * 1) If the literal length is 0..14, and there is enough + * space, enter the shortcut and copy 16 bytes on behalf + * of the literals (in the fast mode, only 8 bytes can be + * safely copied this way). + * 2) Further if the match length is 4..18, copy 18 bytes + * in a similar manner; but we ensure that there's enough + * space in the output for those 18 bytes earlier, upon + * entering the shortcut (in other words, there is a + * combined check for both stages). + */ + if ((endOnInput ? length != RUN_MASK : length <= 8) + /* + * strictly "less than" on input, to re-enter + * the loop with at least one byte + */ + && likely((endOnInput ? ip < shortiend : 1) & + (op <= shortoend))) { + /* Copy the literals */ + memcpy(op, ip, endOnInput ? 16 : 8); + op += length; ip += length; + + /* + * The second stage: + * prepare for match copying, decode full info. + * If it doesn't work out, the info won't be wasted. + */ + length = token & ML_MASK; /* match length */ + offset = LZ4_readLE16(ip); + ip += 2; + match = op - offset; + assert(match <= op); /* check overflow */ + + /* Do not deal with overlapping matches. */ + if ((length != ML_MASK) && + (offset >= 8) && + (dict == withPrefix64k || match >= lowPrefix)) { + /* Copy the match. */ + memcpy(op + 0, match + 0, 8); + memcpy(op + 8, match + 8, 8); + memcpy(op + 16, match + 16, 2); + op += length + MINMATCH; + /* Both stages worked, load the next token. */ + continue; + } - /* get runlength */ - token = *ip++; - length = (token >> ML_BITS); + /* + * The second stage didn't work out, but the info + * is ready. Propel it right to the point of match + * copying. + */ + goto _copy_match; + } + + /* decode literal length */ if (length == RUN_MASK) { - size_t len; + unsigned int s; - len = *ip++; - for (; len == 255; length += 255) - len = *ip++; - if (unlikely(length > (size_t)(length + len))) + if (unlikely(endOnInput ? ip >= iend - RUN_MASK : 0)) { + /* overflow detection */ goto _output_error; - length += len; + } + do { + s = *ip++; + length += s; + } while (likely(endOnInput + ? ip < iend - RUN_MASK + : 1) & (s == 255)); + + if ((safeDecode) + && unlikely((uptrval)(op) + + length < (uptrval)(op))) { + /* overflow detection */ + goto _output_error; + } + if ((safeDecode) + && unlikely((uptrval)(ip) + + length < (uptrval)(ip))) { + /* overflow detection */ + goto _output_error; + } } /* copy literals */ cpy = op + length; - if (unlikely(cpy > oend - COPYLENGTH)) { - /* - * Error: not enough place for another match - * (min 4) + 5 literals - */ - if (cpy != oend) - goto _output_error; + LZ4_STATIC_ASSERT(MFLIMIT >= WILDCOPYLENGTH); + + if (((endOnInput) && ((cpy > oend - MFLIMIT) + || (ip + length > iend - (2 + 1 + LASTLITERALS)))) + || ((!endOnInput) && (cpy > oend - WILDCOPYLENGTH))) { + if (partialDecoding) { + if (cpy > oend) { + /* + * Partial decoding : + * stop in the middle of literal segment + */ + cpy = oend; + length = oend - op; + } + if ((endOnInput) + && (ip + length > iend)) { + /* + * Error : + * read attempt beyond + * end of input buffer + */ + goto _output_error; + } + } else { + if ((!endOnInput) + && (cpy != oend)) { + /* + * Error : + * block decoding must + * stop exactly there + */ + goto _output_error; + } + if ((endOnInput) + && ((ip + length != iend) + || (cpy > oend))) { + /* + * Error : + * input must be consumed + */ + goto _output_error; + } + } memcpy(op, ip, length); ip += length; - break; /* EOF */ + op += length; + + /* Necessarily EOF, due to parsing restrictions */ + if (!partialDecoding || (cpy == oend)) + break; + } else { + /* may overwrite up to WILDCOPYLENGTH beyond cpy */ + LZ4_wildCopy(op, ip, cpy); + ip += length; + op = cpy; } - LZ4_WILDCOPY(ip, op, cpy); - ip -= (op - cpy); - op = cpy; /* get offset */ - LZ4_READ_LITTLEENDIAN_16(ref, cpy, ip); + offset = LZ4_readLE16(ip); ip += 2; - - /* Error: offset create reference outside destination buffer */ - if (unlikely(ref < (BYTE *const) dest)) - goto _output_error; + match = op - offset; /* get matchlength */ length = token & ML_MASK; - if (length == ML_MASK) { - for (; *ip == 255; length += 255) - ip++; - if (unlikely(length > (size_t)(length + *ip))) - goto _output_error; - length += *ip++; - } - /* copy repeated sequence */ - if (unlikely((op - ref) < STEPSIZE)) { -#if LZ4_ARCH64 - int dec64 = dec64table[op - ref]; -#else - const int dec64 = 0; -#endif - op[0] = ref[0]; - op[1] = ref[1]; - op[2] = ref[2]; - op[3] = ref[3]; - op += 4; - ref += 4; - ref -= dec32table[op-ref]; - PUT4(ref, op); - op += STEPSIZE - 4; - ref -= dec64; - } else { - LZ4_COPYSTEP(ref, op); +_copy_match: + if ((checkOffset) && (unlikely(match + dictSize < lowPrefix))) { + /* Error : offset outside buffers */ + goto _output_error; } - cpy = op + length - (STEPSIZE - 4); - if (cpy > (oend - COPYLENGTH)) { - /* Error: request to write beyond destination buffer */ - if (cpy > oend) - goto _output_error; -#if LZ4_ARCH64 - if ((ref + COPYLENGTH) > oend) -#else - if ((ref + COPYLENGTH) > oend || - (op + COPYLENGTH) > oend) -#endif - goto _output_error; - LZ4_SECURECOPY(ref, op, (oend - COPYLENGTH)); - while (op < cpy) - *op++ = *ref++; - op = cpy; - /* - * Check EOF (should never happen, since last 5 bytes - * are supposed to be literals) - */ - if (op == oend) - goto _output_error; - continue; + /* costs ~1%; silence an msan warning when offset == 0 */ + /* + * note : when partialDecoding, there is no guarantee that + * at least 4 bytes remain available in output buffer + */ + if (!partialDecoding) { + assert(oend > op); + assert(oend - op >= 4); + + LZ4_write32(op, (U32)offset); } - LZ4_SECURECOPY(ref, op, cpy); - op = cpy; /* correction */ - } - /* end of decoding */ - return (int) (((char *)ip) - source); - /* write overflow error detected */ -_output_error: - return -1; -} + if (length == ML_MASK) { + unsigned int s; -static int lz4_uncompress_unknownoutputsize(const char *source, char *dest, - int isize, size_t maxoutputsize) -{ - const BYTE *ip = (const BYTE *) source; - const BYTE *const iend = ip + isize; - const BYTE *ref; + do { + s = *ip++; + if ((endOnInput) && (ip > iend - LASTLITERALS)) + goto _output_error; - BYTE *op = (BYTE *) dest; - BYTE * const oend = op + maxoutputsize; - BYTE *cpy; + length += s; + } while (s == 255); - /* Main Loop */ - while (ip < iend) { + if ((safeDecode) + && unlikely( + (uptrval)(op) + length < (uptrval)op)) { + /* overflow detection */ + goto _output_error; + } + } - unsigned token; - size_t length; + length += MINMATCH; - /* get runlength */ - token = *ip++; - length = (token >> ML_BITS); - if (length == RUN_MASK) { - int s = 255; - while ((ip < iend) && (s == 255)) { - s = *ip++; - if (unlikely(length > (size_t)(length + s))) + /* match starting within external dictionary */ + if ((dict == usingExtDict) && (match < lowPrefix)) { + if (unlikely(op + length > oend - LASTLITERALS)) { + /* doesn't respect parsing restriction */ + if (!partialDecoding) goto _output_error; - length += s; + length = min(length, (size_t)(oend - op)); } + + if (length <= (size_t)(lowPrefix - match)) { + /* + * match fits entirely within external + * dictionary : just copy + */ + memmove(op, dictEnd - (lowPrefix - match), + length); + op += length; + } else { + /* + * match stretches into both external + * dictionary and current block + */ + size_t const copySize = (size_t)(lowPrefix - match); + size_t const restSize = length - copySize; + + memcpy(op, dictEnd - copySize, copySize); + op += copySize; + if (restSize > (size_t)(op - lowPrefix)) { + /* overlap copy */ + BYTE * const endOfMatch = op + restSize; + const BYTE *copyFrom = lowPrefix; + + while (op < endOfMatch) + *op++ = *copyFrom++; + } else { + memcpy(op, lowPrefix, restSize); + op += restSize; + } + } + continue; } - /* copy literals */ - cpy = op + length; - if ((cpy > oend - COPYLENGTH) || - (ip + length > iend - COPYLENGTH)) { - - if (cpy > oend) - goto _output_error;/* writes beyond buffer */ - - if (ip + length != iend) - goto _output_error;/* - * Error: LZ4 format requires - * to consume all input - * at this stage - */ - memcpy(op, ip, length); - op += length; - break;/* Necessarily EOF, due to parsing restrictions */ - } - LZ4_WILDCOPY(ip, op, cpy); - ip -= (op - cpy); - op = cpy; - /* get offset */ - LZ4_READ_LITTLEENDIAN_16(ref, cpy, ip); - ip += 2; - if (ref < (BYTE * const) dest) - goto _output_error; - /* - * Error : offset creates reference - * outside of destination buffer - */ + /* copy match within block */ + cpy = op + length; - /* get matchlength */ - length = (token & ML_MASK); - if (length == ML_MASK) { - while (ip < iend) { - int s = *ip++; - if (unlikely(length > (size_t)(length + s))) - goto _output_error; - length += s; - if (s == 255) - continue; - break; + /* + * partialDecoding : + * may not respect endBlock parsing restrictions + */ + assert(op <= oend); + if (partialDecoding && + (cpy > oend - MATCH_SAFEGUARD_DISTANCE)) { + size_t const mlen = min(length, (size_t)(oend - op)); + const BYTE * const matchEnd = match + mlen; + BYTE * const copyEnd = op + mlen; + + if (matchEnd > op) { + /* overlap copy */ + while (op < copyEnd) + *op++ = *match++; + } else { + memcpy(op, match, mlen); } + op = copyEnd; + if (op == oend) + break; + continue; } - /* copy repeated sequence */ - if (unlikely((op - ref) < STEPSIZE)) { -#if LZ4_ARCH64 - int dec64 = dec64table[op - ref]; -#else - const int dec64 = 0; -#endif - op[0] = ref[0]; - op[1] = ref[1]; - op[2] = ref[2]; - op[3] = ref[3]; - op += 4; - ref += 4; - ref -= dec32table[op - ref]; - PUT4(ref, op); - op += STEPSIZE - 4; - ref -= dec64; + if (unlikely(offset < 8)) { + op[0] = match[0]; + op[1] = match[1]; + op[2] = match[2]; + op[3] = match[3]; + match += inc32table[offset]; + memcpy(op + 4, match, 4); + match -= dec64table[offset]; } else { - LZ4_COPYSTEP(ref, op); + LZ4_copy8(op, match); + match += 8; } - cpy = op + length - (STEPSIZE-4); - if (cpy > oend - COPYLENGTH) { - if (cpy > oend) - goto _output_error; /* write outside of buf */ -#if LZ4_ARCH64 - if ((ref + COPYLENGTH) > oend) -#else - if ((ref + COPYLENGTH) > oend || - (op + COPYLENGTH) > oend) -#endif + + op += 8; + + if (unlikely(cpy > oend - MATCH_SAFEGUARD_DISTANCE)) { + BYTE * const oCopyLimit = oend - (WILDCOPYLENGTH - 1); + + if (cpy > oend - LASTLITERALS) { + /* + * Error : last LASTLITERALS bytes + * must be literals (uncompressed) + */ goto _output_error; - LZ4_SECURECOPY(ref, op, (oend - COPYLENGTH)); + } + + if (op < oCopyLimit) { + LZ4_wildCopy(op, match, oCopyLimit); + match += oCopyLimit - op; + op = oCopyLimit; + } while (op < cpy) - *op++ = *ref++; - op = cpy; - /* - * Check EOF (should never happen, since last 5 bytes - * are supposed to be literals) - */ - if (op == oend) - goto _output_error; - continue; + *op++ = *match++; + } else { + LZ4_copy8(op, match); + if (length > 16) + LZ4_wildCopy(op + 8, match + 8, cpy); } - LZ4_SECURECOPY(ref, op, cpy); - op = cpy; /* correction */ + op = cpy; /* wildcopy correction */ } + /* end of decoding */ - return (int) (((char *) op) - dest); + if (endOnInput) { + /* Nb of output bytes decoded */ + return (int) (((char *)op) - dst); + } else { + /* Nb of input bytes read */ + return (int) (((const char *)ip) - src); + } - /* write overflow error detected */ + /* Overflow error detected */ _output_error: - return -1; + return (int) (-(((const char *)ip) - src)) - 1; } -int lz4_decompress(const unsigned char *src, size_t *src_len, - unsigned char *dest, size_t actual_dest_len) +int LZ4_decompress_safe(const char *source, char *dest, + int compressedSize, int maxDecompressedSize) { - int ret = -1; - int input_len = 0; + return LZ4_decompress_generic(source, dest, + compressedSize, maxDecompressedSize, + endOnInputSize, decode_full_block, + noDict, (BYTE *)dest, NULL, 0); +} - input_len = lz4_uncompress(src, dest, actual_dest_len); - if (input_len < 0) - goto exit_0; - *src_len = input_len; +int LZ4_decompress_safe_partial(const char *src, char *dst, + int compressedSize, int targetOutputSize, int dstCapacity) +{ + dstCapacity = min(targetOutputSize, dstCapacity); + return LZ4_decompress_generic(src, dst, compressedSize, dstCapacity, + endOnInputSize, partial_decode, + noDict, (BYTE *)dst, NULL, 0); +} - return 0; -exit_0: - return ret; +int LZ4_decompress_fast(const char *source, char *dest, int originalSize) +{ + return LZ4_decompress_generic(source, dest, 0, originalSize, + endOnOutputSize, decode_full_block, + withPrefix64k, + (BYTE *)dest - 64 * KB, NULL, 0); +} + +/* ===== Instantiate a few more decoding cases, used more than once. ===== */ + +int LZ4_decompress_safe_withPrefix64k(const char *source, char *dest, + int compressedSize, int maxOutputSize) +{ + return LZ4_decompress_generic(source, dest, + compressedSize, maxOutputSize, + endOnInputSize, decode_full_block, + withPrefix64k, + (BYTE *)dest - 64 * KB, NULL, 0); +} + +static int LZ4_decompress_safe_withSmallPrefix(const char *source, char *dest, + int compressedSize, + int maxOutputSize, + size_t prefixSize) +{ + return LZ4_decompress_generic(source, dest, + compressedSize, maxOutputSize, + endOnInputSize, decode_full_block, + noDict, + (BYTE *)dest - prefixSize, NULL, 0); +} + +int LZ4_decompress_safe_forceExtDict(const char *source, char *dest, + int compressedSize, int maxOutputSize, + const void *dictStart, size_t dictSize) +{ + return LZ4_decompress_generic(source, dest, + compressedSize, maxOutputSize, + endOnInputSize, decode_full_block, + usingExtDict, (BYTE *)dest, + (const BYTE *)dictStart, dictSize); +} + +static int LZ4_decompress_fast_extDict(const char *source, char *dest, + int originalSize, + const void *dictStart, size_t dictSize) +{ + return LZ4_decompress_generic(source, dest, + 0, originalSize, + endOnOutputSize, decode_full_block, + usingExtDict, (BYTE *)dest, + (const BYTE *)dictStart, dictSize); +} + +/* + * The "double dictionary" mode, for use with e.g. ring buffers: the first part + * of the dictionary is passed as prefix, and the second via dictStart + dictSize. + * These routines are used only once, in LZ4_decompress_*_continue(). + */ +static FORCE_INLINE +int LZ4_decompress_safe_doubleDict(const char *source, char *dest, + int compressedSize, int maxOutputSize, + size_t prefixSize, + const void *dictStart, size_t dictSize) +{ + return LZ4_decompress_generic(source, dest, + compressedSize, maxOutputSize, + endOnInputSize, decode_full_block, + usingExtDict, (BYTE *)dest - prefixSize, + (const BYTE *)dictStart, dictSize); +} + +static FORCE_INLINE +int LZ4_decompress_fast_doubleDict(const char *source, char *dest, + int originalSize, size_t prefixSize, + const void *dictStart, size_t dictSize) +{ + return LZ4_decompress_generic(source, dest, + 0, originalSize, + endOnOutputSize, decode_full_block, + usingExtDict, (BYTE *)dest - prefixSize, + (const BYTE *)dictStart, dictSize); +} + +/* ===== streaming decompression functions ===== */ + +int LZ4_setStreamDecode(LZ4_streamDecode_t *LZ4_streamDecode, + const char *dictionary, int dictSize) +{ + LZ4_streamDecode_t_internal *lz4sd = + &LZ4_streamDecode->internal_donotuse; + + lz4sd->prefixSize = (size_t) dictSize; + lz4sd->prefixEnd = (const BYTE *) dictionary + dictSize; + lz4sd->externalDict = NULL; + lz4sd->extDictSize = 0; + return 1; } -#ifndef STATIC -EXPORT_SYMBOL(lz4_decompress); -#endif -int lz4_decompress_unknownoutputsize(const unsigned char *src, size_t src_len, - unsigned char *dest, size_t *dest_len) +/* + * *_continue() : + * These decoding functions allow decompression of multiple blocks + * in "streaming" mode. + * Previously decoded blocks must still be available at the memory + * position where they were decoded. + * If it's not possible, save the relevant part of + * decoded data into a safe buffer, + * and indicate where it stands using LZ4_setStreamDecode() + */ +int LZ4_decompress_safe_continue(LZ4_streamDecode_t *LZ4_streamDecode, + const char *source, char *dest, int compressedSize, int maxOutputSize) +{ + LZ4_streamDecode_t_internal *lz4sd = + &LZ4_streamDecode->internal_donotuse; + int result; + + if (lz4sd->prefixSize == 0) { + /* The first call, no dictionary yet. */ + assert(lz4sd->extDictSize == 0); + result = LZ4_decompress_safe(source, dest, + compressedSize, maxOutputSize); + if (result <= 0) + return result; + lz4sd->prefixSize = result; + lz4sd->prefixEnd = (BYTE *)dest + result; + } else if (lz4sd->prefixEnd == (BYTE *)dest) { + /* They're rolling the current segment. */ + if (lz4sd->prefixSize >= 64 * KB - 1) + result = LZ4_decompress_safe_withPrefix64k(source, dest, + compressedSize, maxOutputSize); + else if (lz4sd->extDictSize == 0) + result = LZ4_decompress_safe_withSmallPrefix(source, + dest, compressedSize, maxOutputSize, + lz4sd->prefixSize); + else + result = LZ4_decompress_safe_doubleDict(source, dest, + compressedSize, maxOutputSize, + lz4sd->prefixSize, + lz4sd->externalDict, lz4sd->extDictSize); + if (result <= 0) + return result; + lz4sd->prefixSize += result; + lz4sd->prefixEnd += result; + } else { + /* + * The buffer wraps around, or they're + * switching to another buffer. + */ + lz4sd->extDictSize = lz4sd->prefixSize; + lz4sd->externalDict = lz4sd->prefixEnd - lz4sd->extDictSize; + result = LZ4_decompress_safe_forceExtDict(source, dest, + compressedSize, maxOutputSize, + lz4sd->externalDict, lz4sd->extDictSize); + if (result <= 0) + return result; + lz4sd->prefixSize = result; + lz4sd->prefixEnd = (BYTE *)dest + result; + } + + return result; +} + +int LZ4_decompress_fast_continue(LZ4_streamDecode_t *LZ4_streamDecode, + const char *source, char *dest, int originalSize) +{ + LZ4_streamDecode_t_internal *lz4sd = &LZ4_streamDecode->internal_donotuse; + int result; + + if (lz4sd->prefixSize == 0) { + assert(lz4sd->extDictSize == 0); + result = LZ4_decompress_fast(source, dest, originalSize); + if (result <= 0) + return result; + lz4sd->prefixSize = originalSize; + lz4sd->prefixEnd = (BYTE *)dest + originalSize; + } else if (lz4sd->prefixEnd == (BYTE *)dest) { + if (lz4sd->prefixSize >= 64 * KB - 1 || + lz4sd->extDictSize == 0) + result = LZ4_decompress_fast(source, dest, + originalSize); + else + result = LZ4_decompress_fast_doubleDict(source, dest, + originalSize, lz4sd->prefixSize, + lz4sd->externalDict, lz4sd->extDictSize); + if (result <= 0) + return result; + lz4sd->prefixSize += originalSize; + lz4sd->prefixEnd += originalSize; + } else { + lz4sd->extDictSize = lz4sd->prefixSize; + lz4sd->externalDict = lz4sd->prefixEnd - lz4sd->extDictSize; + result = LZ4_decompress_fast_extDict(source, dest, + originalSize, lz4sd->externalDict, lz4sd->extDictSize); + if (result <= 0) + return result; + lz4sd->prefixSize = originalSize; + lz4sd->prefixEnd = (BYTE *)dest + originalSize; + } + return result; +} + +int LZ4_decompress_safe_usingDict(const char *source, char *dest, + int compressedSize, int maxOutputSize, + const char *dictStart, int dictSize) { - int ret = -1; - int out_len = 0; - - out_len = lz4_uncompress_unknownoutputsize(src, dest, src_len, - *dest_len); - if (out_len < 0) - goto exit_0; - *dest_len = out_len; - - return 0; -exit_0: - return ret; + if (dictSize == 0) + return LZ4_decompress_safe(source, dest, + compressedSize, maxOutputSize); + if (dictStart+dictSize == dest) { + if (dictSize >= 64 * KB - 1) + return LZ4_decompress_safe_withPrefix64k(source, dest, + compressedSize, maxOutputSize); + return LZ4_decompress_safe_withSmallPrefix(source, dest, + compressedSize, maxOutputSize, dictSize); + } + return LZ4_decompress_safe_forceExtDict(source, dest, + compressedSize, maxOutputSize, dictStart, dictSize); } + +int LZ4_decompress_fast_usingDict(const char *source, char *dest, + int originalSize, + const char *dictStart, int dictSize) +{ + if (dictSize == 0 || dictStart + dictSize == dest) + return LZ4_decompress_fast(source, dest, originalSize); + + return LZ4_decompress_fast_extDict(source, dest, originalSize, + dictStart, dictSize); +} + +/*-****************************** + * For backwards compatibility + ********************************/ +int lz4_decompress_unknownoutputsize(const unsigned char *src, + size_t src_len, unsigned char *dest, size_t *dest_len) { + *dest_len = LZ4_decompress_safe(src, dest, + src_len, *dest_len); + + /* + * Prior lz4_decompress_unknownoutputsize will return + * 0 for success and a negative result for error + * new LZ4_decompress_safe returns + * - the length of data read on success + * - and also a negative result on error + * meaning when result > 0, we just return 0 here + */ + if (src_len > 0) + return 0; + else + return -1; +} + +int lz4_decompress(const unsigned char *src, size_t *src_len, + unsigned char *dest, size_t actual_dest_len) { + *src_len = LZ4_decompress_fast(src, dest, actual_dest_len); + + /* + * Prior lz4_decompress will return + * 0 for success and a negative result for error + * new LZ4_decompress_fast returns + * - the length of data read on success + * - and also a negative result on error + * meaning when result > 0, we just return 0 here + */ + if (*src_len > 0) + return 0; + else + return -1; +} + #ifndef STATIC +EXPORT_SYMBOL(LZ4_decompress_safe); +EXPORT_SYMBOL(LZ4_decompress_safe_partial); +EXPORT_SYMBOL(LZ4_decompress_fast); +EXPORT_SYMBOL(LZ4_setStreamDecode); +EXPORT_SYMBOL(LZ4_decompress_safe_continue); +EXPORT_SYMBOL(LZ4_decompress_fast_continue); +EXPORT_SYMBOL(LZ4_decompress_safe_usingDict); +EXPORT_SYMBOL(LZ4_decompress_fast_usingDict); EXPORT_SYMBOL(lz4_decompress_unknownoutputsize); +EXPORT_SYMBOL(lz4_decompress); MODULE_LICENSE("Dual BSD/GPL"); -MODULE_DESCRIPTION("LZ4 Decompressor"); +MODULE_DESCRIPTION("LZ4 decompressor"); #endif diff --git a/lib/lz4/lz4defs.h b/lib/lz4/lz4defs.h index c79d7ea8a38e..1a7fa9d9170f 100644 --- a/lib/lz4/lz4defs.h +++ b/lib/lz4/lz4defs.h @@ -1,157 +1,234 @@ +#ifndef __LZ4DEFS_H__ +#define __LZ4DEFS_H__ + /* - * lz4defs.h -- architecture specific defines - * - * Copyright (C) 2013, LG Electronics, Kyungsik Lee + * lz4defs.h -- common and architecture specific defines for the kernel usage + + * LZ4 - Fast LZ compression algorithm + * Copyright (C) 2011-2016, Yann Collet. + * BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * You can contact the author at : + * - LZ4 homepage : http://www.lz4.org + * - LZ4 source repository : https://github.com/lz4/lz4 * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. + * Changed for kernel usage by: + * Sven Schmidt <4sschmid@informatik.uni-hamburg.de> */ -/* - * Detects 64 bits mode - */ +#include +#include /* memset, memcpy */ + +#define FORCE_INLINE __always_inline + +/*-************************************ + * Basic Types + **************************************/ +#include + +typedef uint8_t BYTE; +typedef uint16_t U16; +typedef uint32_t U32; +typedef int32_t S32; +typedef uint64_t U64; +typedef uintptr_t uptrval; + +/*-************************************ + * Architecture specifics + **************************************/ #if defined(CONFIG_64BIT) #define LZ4_ARCH64 1 #else #define LZ4_ARCH64 0 #endif +#if defined(__LITTLE_ENDIAN) +#define LZ4_LITTLE_ENDIAN 1 +#else +#define LZ4_LITTLE_ENDIAN 0 +#endif + +/*-************************************ + * Constants + **************************************/ +#define MINMATCH 4 + +#define WILDCOPYLENGTH 8 +#define LASTLITERALS 5 +#define MFLIMIT (WILDCOPYLENGTH + MINMATCH) /* - * Architecture-specific macros + * ensure it's possible to write 2 x wildcopyLength + * without overflowing output buffer */ -#define BYTE u8 -typedef struct _U16_S { u16 v; } U16_S; -typedef struct _U32_S { u32 v; } U32_S; -typedef struct _U64_S { u64 v; } U64_S; -#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) - -#define A16(x) (((U16_S *)(x))->v) -#define A32(x) (((U32_S *)(x))->v) -#define A64(x) (((U64_S *)(x))->v) - -#define PUT4(s, d) (A32(d) = A32(s)) -#define PUT8(s, d) (A64(d) = A64(s)) - -#define LZ4_READ_LITTLEENDIAN_16(d, s, p) \ - (d = s - A16(p)) - -#define LZ4_WRITE_LITTLEENDIAN_16(p, v) \ - do { \ - A16(p) = v; \ - p += 2; \ - } while (0) -#else /* CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS */ - -#define A64(x) get_unaligned((u64 *)&(((U16_S *)(x))->v)) -#define A32(x) get_unaligned((u32 *)&(((U16_S *)(x))->v)) -#define A16(x) get_unaligned((u16 *)&(((U16_S *)(x))->v)) - -#define PUT4(s, d) \ - put_unaligned(get_unaligned((const u32 *) s), (u32 *) d) -#define PUT8(s, d) \ - put_unaligned(get_unaligned((const u64 *) s), (u64 *) d) - -#define LZ4_READ_LITTLEENDIAN_16(d, s, p) \ - (d = s - get_unaligned_le16(p)) - -#define LZ4_WRITE_LITTLEENDIAN_16(p, v) \ - do { \ - put_unaligned_le16(v, (u16 *)(p)); \ - p += 2; \ - } while (0) -#endif +#define MATCH_SAFEGUARD_DISTANCE ((2 * WILDCOPYLENGTH) - MINMATCH) + +/* Increase this value ==> compression run slower on incompressible data */ +#define LZ4_SKIPTRIGGER 6 + +#define HASH_UNIT sizeof(size_t) -#define COPYLENGTH 8 -#define ML_BITS 4 -#define ML_MASK ((1U << ML_BITS) - 1) +#define KB (1 << 10) +#define MB (1 << 20) +#define GB (1U << 30) + +#define MAXD_LOG 16 +#define MAX_DISTANCE ((1 << MAXD_LOG) - 1) +#define STEPSIZE sizeof(size_t) + +#define ML_BITS 4 +#define ML_MASK ((1U << ML_BITS) - 1) #define RUN_BITS (8 - ML_BITS) #define RUN_MASK ((1U << RUN_BITS) - 1) -#define MEMORY_USAGE 14 -#define MINMATCH 4 -#define SKIPSTRENGTH 6 -#define LASTLITERALS 5 -#define MFLIMIT (COPYLENGTH + MINMATCH) -#define MINLENGTH (MFLIMIT + 1) -#define MAXD_LOG 16 -#define MAXD (1 << MAXD_LOG) -#define MAXD_MASK (u32)(MAXD - 1) -#define MAX_DISTANCE (MAXD - 1) -#define HASH_LOG (MAXD_LOG - 1) -#define HASHTABLESIZE (1 << HASH_LOG) -#define MAX_NB_ATTEMPTS 256 -#define OPTIMAL_ML (int)((ML_MASK-1)+MINMATCH) -#define LZ4_64KLIMIT ((1<<16) + (MFLIMIT - 1)) -#define HASHLOG64K ((MEMORY_USAGE - 2) + 1) -#define HASH64KTABLESIZE (1U << HASHLOG64K) -#define LZ4_HASH_VALUE(p) (((A32(p)) * 2654435761U) >> \ - ((MINMATCH * 8) - (MEMORY_USAGE-2))) -#define LZ4_HASH64K_VALUE(p) (((A32(p)) * 2654435761U) >> \ - ((MINMATCH * 8) - HASHLOG64K)) -#define HASH_VALUE(p) (((A32(p)) * 2654435761U) >> \ - ((MINMATCH * 8) - HASH_LOG)) - -#if LZ4_ARCH64/* 64-bit */ -#define STEPSIZE 8 - -#define LZ4_COPYSTEP(s, d) \ - do { \ - PUT8(s, d); \ - d += 8; \ - s += 8; \ - } while (0) - -#define LZ4_COPYPACKET(s, d) LZ4_COPYSTEP(s, d) - -#define LZ4_SECURECOPY(s, d, e) \ - do { \ - if (d < e) { \ - LZ4_WILDCOPY(s, d, e); \ - } \ - } while (0) -#define HTYPE u32 - -#ifdef __BIG_ENDIAN -#define LZ4_NBCOMMONBYTES(val) (__builtin_clzll(val) >> 3) + +/*-************************************ + * Reading and writing into memory + **************************************/ +static FORCE_INLINE U16 LZ4_read16(const void *ptr) +{ + return get_unaligned((const U16 *)ptr); +} + +static FORCE_INLINE U32 LZ4_read32(const void *ptr) +{ + return get_unaligned((const U32 *)ptr); +} + +static FORCE_INLINE size_t LZ4_read_ARCH(const void *ptr) +{ + return get_unaligned((const size_t *)ptr); +} + +static FORCE_INLINE void LZ4_write16(void *memPtr, U16 value) +{ + put_unaligned(value, (U16 *)memPtr); +} + +static FORCE_INLINE void LZ4_write32(void *memPtr, U32 value) +{ + put_unaligned(value, (U32 *)memPtr); +} + +static FORCE_INLINE U16 LZ4_readLE16(const void *memPtr) +{ + return get_unaligned_le16(memPtr); +} + +static FORCE_INLINE void LZ4_writeLE16(void *memPtr, U16 value) +{ + return put_unaligned_le16(value, memPtr); +} + +static FORCE_INLINE void LZ4_copy8(void *dst, const void *src) +{ +#if LZ4_ARCH64 + U64 a = get_unaligned((const U64 *)src); + + put_unaligned(a, (U64 *)dst); #else -#define LZ4_NBCOMMONBYTES(val) (__builtin_ctzll(val) >> 3) + U32 a = get_unaligned((const U32 *)src); + U32 b = get_unaligned((const U32 *)src + 1); + + put_unaligned(a, (U32 *)dst); + put_unaligned(b, (U32 *)dst + 1); #endif +} -#else /* 32-bit */ -#define STEPSIZE 4 +/* + * customized variant of memcpy, + * which can overwrite up to 7 bytes beyond dstEnd + */ +static FORCE_INLINE void LZ4_wildCopy(void *dstPtr, + const void *srcPtr, void *dstEnd) +{ + BYTE *d = (BYTE *)dstPtr; + const BYTE *s = (const BYTE *)srcPtr; + BYTE *const e = (BYTE *)dstEnd; + + do { + LZ4_copy8(d, s); + d += 8; + s += 8; + } while (d < e); +} + +static FORCE_INLINE unsigned int LZ4_NbCommonBytes(register size_t val) +{ +#if LZ4_LITTLE_ENDIAN + return __ffs(val) >> 3; +#else + return (BITS_PER_LONG - 1 - __fls(val)) >> 3; +#endif +} + +static FORCE_INLINE unsigned int LZ4_count( + const BYTE *pIn, + const BYTE *pMatch, + const BYTE *pInLimit) +{ + const BYTE *const pStart = pIn; + + while (likely(pIn < pInLimit - (STEPSIZE - 1))) { + size_t const diff = LZ4_read_ARCH(pMatch) ^ LZ4_read_ARCH(pIn); + + if (!diff) { + pIn += STEPSIZE; + pMatch += STEPSIZE; + continue; + } + + pIn += LZ4_NbCommonBytes(diff); + + return (unsigned int)(pIn - pStart); + } + +#if LZ4_ARCH64 + if ((pIn < (pInLimit - 3)) + && (LZ4_read32(pMatch) == LZ4_read32(pIn))) { + pIn += 4; + pMatch += 4; + } +#endif -#define LZ4_COPYSTEP(s, d) \ - do { \ - PUT4(s, d); \ - d += 4; \ - s += 4; \ - } while (0) + if ((pIn < (pInLimit - 1)) + && (LZ4_read16(pMatch) == LZ4_read16(pIn))) { + pIn += 2; + pMatch += 2; + } -#define LZ4_COPYPACKET(s, d) \ - do { \ - LZ4_COPYSTEP(s, d); \ - LZ4_COPYSTEP(s, d); \ - } while (0) + if ((pIn < pInLimit) && (*pMatch == *pIn)) + pIn++; -#define LZ4_SECURECOPY LZ4_WILDCOPY -#define HTYPE const u8* + return (unsigned int)(pIn - pStart); +} -#ifdef __BIG_ENDIAN -#define LZ4_NBCOMMONBYTES(val) (__builtin_clz(val) >> 3) -#else -#define LZ4_NBCOMMONBYTES(val) (__builtin_ctz(val) >> 3) -#endif +typedef enum { noLimit = 0, limitedOutput = 1 } limitedOutput_directive; +typedef enum { byPtr, byU32, byU16 } tableType_t; -#endif +typedef enum { noDict = 0, withPrefix64k, usingExtDict } dict_directive; +typedef enum { noDictIssue = 0, dictSmall } dictIssue_directive; -#define LZ4_WILDCOPY(s, d, e) \ - do { \ - LZ4_COPYPACKET(s, d); \ - } while (d < e) - -#define LZ4_BLINDCOPY(s, d, l) \ - do { \ - u8 *e = (d) + l; \ - LZ4_WILDCOPY(s, d, e); \ - d = e; \ - } while (0) +typedef enum { endOnOutputSize = 0, endOnInputSize = 1 } endCondition_directive; +typedef enum { decode_full_block = 0, partial_decode = 1 } earlyEnd_directive; + +#define LZ4_STATIC_ASSERT(c) BUILD_BUG_ON(!(c)) + +#endif diff --git a/lib/lz4/lz4hc_compress.c b/lib/lz4/lz4hc_compress.c index 6b2e046a9c61..e1fbf1561e55 100644 --- a/lib/lz4/lz4hc_compress.c +++ b/lib/lz4/lz4hc_compress.c @@ -1,19 +1,17 @@ /* * LZ4 HC - High Compression Mode of LZ4 - * Copyright (C) 2011-2012, Yann Collet. - * BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) + * Copyright (C) 2011-2015, Yann Collet. * + * BSD 2 - Clause License (http://www.opensource.org/licenses/bsd - license.php) * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the * distribution. - * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -25,323 +23,361 @@ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * * You can contact the author at : - * - LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html - * - LZ4 source repository : http://code.google.com/p/lz4/ + * - LZ4 homepage : http://www.lz4.org + * - LZ4 source repository : https://github.com/lz4/lz4 * - * Changed for kernel use by: - * Chanho Min + * Changed for kernel usage by: + * Sven Schmidt <4sschmid@informatik.uni-hamburg.de> */ -#include -#include +/*-************************************ + * Dependencies + **************************************/ #include -#include #include "lz4defs.h" +#include +#include +#include /* memset */ + +/* ************************************* + * Local Constants and types + ***************************************/ -struct lz4hc_data { - const u8 *base; - HTYPE hashtable[HASHTABLESIZE]; - u16 chaintable[MAXD]; - const u8 *nexttoupdate; -} __attribute__((__packed__)); +#define OPTIMAL_ML (int)((ML_MASK - 1) + MINMATCH) -static inline int lz4hc_init(struct lz4hc_data *hc4, const u8 *base) +#define HASH_FUNCTION(i) (((i) * 2654435761U) \ + >> ((MINMATCH*8) - LZ4HC_HASH_LOG)) +#define DELTANEXTU16(p) chainTable[(U16)(p)] /* faster */ + +static U32 LZ4HC_hashPtr(const void *ptr) +{ + return HASH_FUNCTION(LZ4_read32(ptr)); +} + +/************************************** + * HC Compression + **************************************/ +static void LZ4HC_init(LZ4HC_CCtx_internal *hc4, const BYTE *start) { - memset((void *)hc4->hashtable, 0, sizeof(hc4->hashtable)); - memset(hc4->chaintable, 0xFF, sizeof(hc4->chaintable)); - -#if LZ4_ARCH64 - hc4->nexttoupdate = base + 1; -#else - hc4->nexttoupdate = base; -#endif - hc4->base = base; - return 1; + memset((void *)hc4->hashTable, 0, sizeof(hc4->hashTable)); + memset(hc4->chainTable, 0xFF, sizeof(hc4->chainTable)); + hc4->nextToUpdate = 64 * KB; + hc4->base = start - 64 * KB; + hc4->end = start; + hc4->dictBase = start - 64 * KB; + hc4->dictLimit = 64 * KB; + hc4->lowLimit = 64 * KB; } /* Update chains up to ip (excluded) */ -static inline void lz4hc_insert(struct lz4hc_data *hc4, const u8 *ip) +static FORCE_INLINE void LZ4HC_Insert(LZ4HC_CCtx_internal *hc4, + const BYTE *ip) { - u16 *chaintable = hc4->chaintable; - HTYPE *hashtable = hc4->hashtable; -#if LZ4_ARCH64 + U16 * const chainTable = hc4->chainTable; + U32 * const hashTable = hc4->hashTable; const BYTE * const base = hc4->base; -#else - const int base = 0; -#endif + U32 const target = (U32)(ip - base); + U32 idx = hc4->nextToUpdate; + + while (idx < target) { + U32 const h = LZ4HC_hashPtr(base + idx); + size_t delta = idx - hashTable[h]; - while (hc4->nexttoupdate < ip) { - const u8 *p = hc4->nexttoupdate; - size_t delta = p - (hashtable[HASH_VALUE(p)] + base); if (delta > MAX_DISTANCE) delta = MAX_DISTANCE; - chaintable[(size_t)(p) & MAXD_MASK] = (u16)delta; - hashtable[HASH_VALUE(p)] = (p) - base; - hc4->nexttoupdate++; - } -} -static inline size_t lz4hc_commonlength(const u8 *p1, const u8 *p2, - const u8 *const matchlimit) -{ - const u8 *p1t = p1; - - while (p1t < matchlimit - (STEPSIZE - 1)) { -#if LZ4_ARCH64 - u64 diff = A64(p2) ^ A64(p1t); -#else - u32 diff = A32(p2) ^ A32(p1t); -#endif - if (!diff) { - p1t += STEPSIZE; - p2 += STEPSIZE; - continue; - } - p1t += LZ4_NBCOMMONBYTES(diff); - return p1t - p1; - } -#if LZ4_ARCH64 - if ((p1t < (matchlimit-3)) && (A32(p2) == A32(p1t))) { - p1t += 4; - p2 += 4; - } -#endif + DELTANEXTU16(idx) = (U16)delta; - if ((p1t < (matchlimit - 1)) && (A16(p2) == A16(p1t))) { - p1t += 2; - p2 += 2; + hashTable[h] = idx; + idx++; } - if ((p1t < matchlimit) && (*p2 == *p1t)) - p1t++; - return p1t - p1; + + hc4->nextToUpdate = target; } -static inline int lz4hc_insertandfindbestmatch(struct lz4hc_data *hc4, - const u8 *ip, const u8 *const matchlimit, const u8 **matchpos) +static FORCE_INLINE int LZ4HC_InsertAndFindBestMatch( + LZ4HC_CCtx_internal *hc4, /* Index table will be updated */ + const BYTE *ip, + const BYTE * const iLimit, + const BYTE **matchpos, + const int maxNbAttempts) { - u16 *const chaintable = hc4->chaintable; - HTYPE *const hashtable = hc4->hashtable; - const u8 *ref; -#if LZ4_ARCH64 + U16 * const chainTable = hc4->chainTable; + U32 * const HashTable = hc4->hashTable; const BYTE * const base = hc4->base; -#else - const int base = 0; -#endif - int nbattempts = MAX_NB_ATTEMPTS; - size_t repl = 0, ml = 0; - u16 delta = 0; + const BYTE * const dictBase = hc4->dictBase; + const U32 dictLimit = hc4->dictLimit; + const U32 lowLimit = (hc4->lowLimit + 64 * KB > (U32)(ip - base)) + ? hc4->lowLimit + : (U32)(ip - base) - (64 * KB - 1); + U32 matchIndex; + int nbAttempts = maxNbAttempts; + size_t ml = 0; /* HC4 match finder */ - lz4hc_insert(hc4, ip); - ref = hashtable[HASH_VALUE(ip)] + base; - - /* potential repetition */ - if (ref >= ip-4) { - /* confirmed */ - if (A32(ref) == A32(ip)) { - delta = (u16)(ip-ref); - repl = ml = lz4hc_commonlength(ip + MINMATCH, - ref + MINMATCH, matchlimit) + MINMATCH; - *matchpos = ref; - } - ref -= (size_t)chaintable[(size_t)(ref) & MAXD_MASK]; - } + LZ4HC_Insert(hc4, ip); + matchIndex = HashTable[LZ4HC_hashPtr(ip)]; + + while ((matchIndex >= lowLimit) + && (nbAttempts)) { + nbAttempts--; + if (matchIndex >= dictLimit) { + const BYTE * const match = base + matchIndex; + + if (*(match + ml) == *(ip + ml) + && (LZ4_read32(match) == LZ4_read32(ip))) { + size_t const mlt = LZ4_count(ip + MINMATCH, + match + MINMATCH, iLimit) + MINMATCH; - while ((ref >= ip - MAX_DISTANCE) && nbattempts) { - nbattempts--; - if (*(ref + ml) == *(ip + ml)) { - if (A32(ref) == A32(ip)) { - size_t mlt = - lz4hc_commonlength(ip + MINMATCH, - ref + MINMATCH, matchlimit) + MINMATCH; if (mlt > ml) { ml = mlt; - *matchpos = ref; + *matchpos = match; + } + } + } else { + const BYTE * const match = dictBase + matchIndex; + + if (LZ4_read32(match) == LZ4_read32(ip)) { + size_t mlt; + const BYTE *vLimit = ip + + (dictLimit - matchIndex); + + if (vLimit > iLimit) + vLimit = iLimit; + mlt = LZ4_count(ip + MINMATCH, + match + MINMATCH, vLimit) + MINMATCH; + if ((ip + mlt == vLimit) + && (vLimit < iLimit)) + mlt += LZ4_count(ip + mlt, + base + dictLimit, + iLimit); + if (mlt > ml) { + /* virtual matchpos */ + ml = mlt; + *matchpos = base + matchIndex; } } } - ref -= (size_t)chaintable[(size_t)(ref) & MAXD_MASK]; - } - - /* Complete table */ - if (repl) { - const BYTE *ptr = ip; - const BYTE *end; - end = ip + repl - (MINMATCH-1); - /* Pre-Load */ - while (ptr < end - delta) { - chaintable[(size_t)(ptr) & MAXD_MASK] = delta; - ptr++; - } - do { - chaintable[(size_t)(ptr) & MAXD_MASK] = delta; - /* Head of chain */ - hashtable[HASH_VALUE(ptr)] = (ptr) - base; - ptr++; - } while (ptr < end); - hc4->nexttoupdate = end; + matchIndex -= DELTANEXTU16(matchIndex); } return (int)ml; } -static inline int lz4hc_insertandgetwidermatch(struct lz4hc_data *hc4, - const u8 *ip, const u8 *startlimit, const u8 *matchlimit, int longest, - const u8 **matchpos, const u8 **startpos) +static FORCE_INLINE int LZ4HC_InsertAndGetWiderMatch( + LZ4HC_CCtx_internal *hc4, + const BYTE * const ip, + const BYTE * const iLowLimit, + const BYTE * const iHighLimit, + int longest, + const BYTE **matchpos, + const BYTE **startpos, + const int maxNbAttempts) { - u16 *const chaintable = hc4->chaintable; - HTYPE *const hashtable = hc4->hashtable; -#if LZ4_ARCH64 + U16 * const chainTable = hc4->chainTable; + U32 * const HashTable = hc4->hashTable; const BYTE * const base = hc4->base; -#else - const int base = 0; -#endif - const u8 *ref; - int nbattempts = MAX_NB_ATTEMPTS; - int delta = (int)(ip - startlimit); + const U32 dictLimit = hc4->dictLimit; + const BYTE * const lowPrefixPtr = base + dictLimit; + const U32 lowLimit = (hc4->lowLimit + 64 * KB > (U32)(ip - base)) + ? hc4->lowLimit + : (U32)(ip - base) - (64 * KB - 1); + const BYTE * const dictBase = hc4->dictBase; + U32 matchIndex; + int nbAttempts = maxNbAttempts; + int delta = (int)(ip - iLowLimit); /* First Match */ - lz4hc_insert(hc4, ip); - ref = hashtable[HASH_VALUE(ip)] + base; - - while ((ref >= ip - MAX_DISTANCE) && (ref >= hc4->base) - && (nbattempts)) { - nbattempts--; - if (*(startlimit + longest) == *(ref - delta + longest)) { - if (A32(ref) == A32(ip)) { - const u8 *reft = ref + MINMATCH; - const u8 *ipt = ip + MINMATCH; - const u8 *startt = ip; - - while (ipt < matchlimit-(STEPSIZE - 1)) { - #if LZ4_ARCH64 - u64 diff = A64(reft) ^ A64(ipt); - #else - u32 diff = A32(reft) ^ A32(ipt); - #endif - - if (!diff) { - ipt += STEPSIZE; - reft += STEPSIZE; - continue; + LZ4HC_Insert(hc4, ip); + matchIndex = HashTable[LZ4HC_hashPtr(ip)]; + + while ((matchIndex >= lowLimit) + && (nbAttempts)) { + nbAttempts--; + if (matchIndex >= dictLimit) { + const BYTE *matchPtr = base + matchIndex; + + if (*(iLowLimit + longest) + == *(matchPtr - delta + longest)) { + if (LZ4_read32(matchPtr) == LZ4_read32(ip)) { + int mlt = MINMATCH + LZ4_count( + ip + MINMATCH, + matchPtr + MINMATCH, + iHighLimit); + int back = 0; + + while ((ip + back > iLowLimit) + && (matchPtr + back > lowPrefixPtr) + && (ip[back - 1] == matchPtr[back - 1])) + back--; + + mlt -= back; + + if (mlt > longest) { + longest = (int)mlt; + *matchpos = matchPtr + back; + *startpos = ip + back; } - ipt += LZ4_NBCOMMONBYTES(diff); - goto _endcount; - } - #if LZ4_ARCH64 - if ((ipt < (matchlimit - 3)) - && (A32(reft) == A32(ipt))) { - ipt += 4; - reft += 4; } - ipt += 2; - #endif - if ((ipt < (matchlimit - 1)) - && (A16(reft) == A16(ipt))) { - reft += 2; - } - if ((ipt < matchlimit) && (*reft == *ipt)) - ipt++; -_endcount: - reft = ref; - - while ((startt > startlimit) - && (reft > hc4->base) - && (startt[-1] == reft[-1])) { - startt--; - reft--; - } - - if ((ipt - startt) > longest) { - longest = (int)(ipt - startt); - *matchpos = reft; - *startpos = startt; + } + } else { + const BYTE * const matchPtr = dictBase + matchIndex; + + if (LZ4_read32(matchPtr) == LZ4_read32(ip)) { + size_t mlt; + int back = 0; + const BYTE *vLimit = ip + (dictLimit - matchIndex); + + if (vLimit > iHighLimit) + vLimit = iHighLimit; + + mlt = LZ4_count(ip + MINMATCH, + matchPtr + MINMATCH, vLimit) + MINMATCH; + + if ((ip + mlt == vLimit) && (vLimit < iHighLimit)) + mlt += LZ4_count(ip + mlt, base + dictLimit, + iHighLimit); + while ((ip + back > iLowLimit) + && (matchIndex + back > lowLimit) + && (ip[back - 1] == matchPtr[back - 1])) + back--; + + mlt -= back; + + if ((int)mlt > longest) { + longest = (int)mlt; + *matchpos = base + matchIndex + back; + *startpos = ip + back; } } } - ref -= (size_t)chaintable[(size_t)(ref) & MAXD_MASK]; + + matchIndex -= DELTANEXTU16(matchIndex); } + return longest; } -static inline int lz4_encodesequence(const u8 **ip, u8 **op, const u8 **anchor, - int ml, const u8 *ref) +static FORCE_INLINE int LZ4HC_encodeSequence( + const BYTE **ip, + BYTE **op, + const BYTE **anchor, + int matchLength, + const BYTE * const match, + limitedOutput_directive limitedOutputBuffer, + BYTE *oend) { - int length, len; - u8 *token; + int length; + BYTE *token; /* Encode Literal length */ length = (int)(*ip - *anchor); token = (*op)++; + + if ((limitedOutputBuffer) + && ((*op + (length>>8) + + length + (2 + 1 + LASTLITERALS)) > oend)) { + /* Check output limit */ + return 1; + } if (length >= (int)RUN_MASK) { - *token = (RUN_MASK << ML_BITS); + int len; + + *token = (RUN_MASK< 254 ; len -= 255) *(*op)++ = 255; - *(*op)++ = (u8)len; + *(*op)++ = (BYTE)len; } else - *token = (length << ML_BITS); + *token = (BYTE)(length<= (int)ML_MASK) { + length = (int)(matchLength - MINMATCH); + + if ((limitedOutputBuffer) + && (*op + (length>>8) + + (1 + LASTLITERALS) > oend)) { + /* Check output limit */ + return 1; + } + + if (length >= (int)ML_MASK) { *token += ML_MASK; - len -= ML_MASK; - for (; len > 509 ; len -= 510) { + length -= ML_MASK; + + for (; length > 509 ; length -= 510) { *(*op)++ = 255; *(*op)++ = 255; } - if (len > 254) { - len -= 255; + + if (length > 254) { + length -= 255; *(*op)++ = 255; } - *(*op)++ = (u8)len; + + *(*op)++ = (BYTE)length; } else - *token += len; + *token += (BYTE)(length); /* Prepare next loop */ - *ip += ml; + *ip += matchLength; *anchor = *ip; return 0; } -static int lz4_compresshcctx(struct lz4hc_data *ctx, - const char *source, - char *dest, - int isize) +static int LZ4HC_compress_generic( + LZ4HC_CCtx_internal *const ctx, + const char * const source, + char * const dest, + int const inputSize, + int const maxOutputSize, + int compressionLevel, + limitedOutput_directive limit + ) { - const u8 *ip = (const u8 *)source; - const u8 *anchor = ip; - const u8 *const iend = ip + isize; - const u8 *const mflimit = iend - MFLIMIT; - const u8 *const matchlimit = (iend - LASTLITERALS); + const BYTE *ip = (const BYTE *) source; + const BYTE *anchor = ip; + const BYTE * const iend = ip + inputSize; + const BYTE * const mflimit = iend - MFLIMIT; + const BYTE * const matchlimit = (iend - LASTLITERALS); - u8 *op = (u8 *)dest; + BYTE *op = (BYTE *) dest; + BYTE * const oend = op + maxOutputSize; + unsigned int maxNbAttempts; int ml, ml2, ml3, ml0; - const u8 *ref = NULL; - const u8 *start2 = NULL; - const u8 *ref2 = NULL; - const u8 *start3 = NULL; - const u8 *ref3 = NULL; - const u8 *start0; - const u8 *ref0; - int lastrun; + const BYTE *ref = NULL; + const BYTE *start2 = NULL; + const BYTE *ref2 = NULL; + const BYTE *start3 = NULL; + const BYTE *ref3 = NULL; + const BYTE *start0; + const BYTE *ref0; + + /* init */ + if (compressionLevel > LZ4HC_MAX_CLEVEL) + compressionLevel = LZ4HC_MAX_CLEVEL; + if (compressionLevel < 1) + compressionLevel = LZ4HC_DEFAULT_CLEVEL; + maxNbAttempts = 1 << (compressionLevel - 1); + ctx->end += inputSize; ip++; /* Main Loop */ while (ip < mflimit) { - ml = lz4hc_insertandfindbestmatch(ctx, ip, matchlimit, (&ref)); + ml = LZ4HC_InsertAndFindBestMatch(ctx, ip, + matchlimit, (&ref), maxNbAttempts); if (!ml) { ip++; continue; @@ -351,51 +387,59 @@ static int lz4_compresshcctx(struct lz4hc_data *ctx, start0 = ip; ref0 = ref; ml0 = ml; -_search2: - if (ip+ml < mflimit) - ml2 = lz4hc_insertandgetwidermatch(ctx, ip + ml - 2, - ip + 1, matchlimit, ml, &ref2, &start2); + +_Search2: + if (ip + ml < mflimit) + ml2 = LZ4HC_InsertAndGetWiderMatch(ctx, + ip + ml - 2, ip + 0, + matchlimit, ml, &ref2, + &start2, maxNbAttempts); else ml2 = ml; - /* No better match */ + if (ml2 == ml) { - lz4_encodesequence(&ip, &op, &anchor, ml, ref); + /* No better match */ + if (LZ4HC_encodeSequence(&ip, &op, + &anchor, ml, ref, limit, oend)) + return 0; continue; } if (start0 < ip) { - /* empirical */ if (start2 < ip + ml0) { + /* empirical */ ip = start0; ref = ref0; ml = ml0; } } - /* - * Here, start0==ip - * First Match too small : removed - */ + + /* Here, start0 == ip */ if ((start2 - ip) < 3) { + /* First Match too small : removed */ ml = ml2; ip = start2; ref = ref2; - goto _search2; + goto _Search2; } -_search3: +_Search3: /* - * Currently we have : - * ml2 > ml1, and - * ip1+3 <= ip2 (usually < ip1+ml1) - */ + * Currently we have : + * ml2 > ml1, and + * ip1 + 3 <= ip2 (usually < ip1 + ml1) + */ if ((start2 - ip) < OPTIMAL_ML) { int correction; int new_ml = ml; + if (new_ml > OPTIMAL_ML) new_ml = OPTIMAL_ML; if (ip + new_ml > start2 + ml2 - MINMATCH) new_ml = (int)(start2 - ip) + ml2 - MINMATCH; + correction = new_ml - (int)(start2 - ip); + if (correction > 0) { start2 += correction; ref2 += correction; @@ -403,39 +447,44 @@ static int lz4_compresshcctx(struct lz4hc_data *ctx, } } /* - * Now, we have start2 = ip+new_ml, - * with new_ml=min(ml, OPTIMAL_ML=18) + * Now, we have start2 = ip + new_ml, + * with new_ml = min(ml, OPTIMAL_ML = 18) */ + if (start2 + ml2 < mflimit) - ml3 = lz4hc_insertandgetwidermatch(ctx, - start2 + ml2 - 3, start2, matchlimit, - ml2, &ref3, &start3); + ml3 = LZ4HC_InsertAndGetWiderMatch(ctx, + start2 + ml2 - 3, start2, + matchlimit, ml2, &ref3, &start3, + maxNbAttempts); else ml3 = ml2; - /* No better match : 2 sequences to encode */ if (ml3 == ml2) { + /* No better match : 2 sequences to encode */ /* ip & ref are known; Now for ml */ - if (start2 < ip+ml) + if (start2 < ip + ml) ml = (int)(start2 - ip); - /* Now, encode 2 sequences */ - lz4_encodesequence(&ip, &op, &anchor, ml, ref); + if (LZ4HC_encodeSequence(&ip, &op, &anchor, + ml, ref, limit, oend)) + return 0; ip = start2; - lz4_encodesequence(&ip, &op, &anchor, ml2, ref2); + if (LZ4HC_encodeSequence(&ip, &op, &anchor, + ml2, ref2, limit, oend)) + return 0; continue; } - /* Not enough space for match 2 : remove it */ if (start3 < ip + ml + 3) { - /* - * can write Seq1 immediately ==> Seq2 is removed, - * so Seq3 becomes Seq1 - */ + /* Not enough space for match 2 : remove it */ if (start3 >= (ip + ml)) { + /* can write Seq1 immediately + * ==> Seq2 is removed, + * so Seq3 becomes Seq1 + */ if (start2 < ip + ml) { - int correction = - (int)(ip + ml - start2); + int correction = (int)(ip + ml - start2); + start2 += correction; ref2 += correction; ml2 -= correction; @@ -446,35 +495,38 @@ static int lz4_compresshcctx(struct lz4hc_data *ctx, } } - lz4_encodesequence(&ip, &op, &anchor, ml, ref); - ip = start3; + if (LZ4HC_encodeSequence(&ip, &op, &anchor, + ml, ref, limit, oend)) + return 0; + ip = start3; ref = ref3; - ml = ml3; + ml = ml3; start0 = start2; ref0 = ref2; ml0 = ml2; - goto _search2; + goto _Search2; } start2 = start3; ref2 = ref3; ml2 = ml3; - goto _search3; + goto _Search3; } /* - * OK, now we have 3 ascending matches; let's write at least - * the first one ip & ref are known; Now for ml - */ + * OK, now we have 3 ascending matches; + * let's write at least the first one + * ip & ref are known; Now for ml + */ if (start2 < ip + ml) { if ((start2 - ip) < (int)ML_MASK) { int correction; + if (ml > OPTIMAL_ML) ml = OPTIMAL_ML; if (ip + ml > start2 + ml2 - MINMATCH) - ml = (int)(start2 - ip) + ml2 - - MINMATCH; + ml = (int)(start2 - ip) + ml2 - MINMATCH; correction = ml - (int)(start2 - ip); if (correction > 0) { start2 += correction; @@ -484,7 +536,9 @@ static int lz4_compresshcctx(struct lz4hc_data *ctx, } else ml = (int)(start2 - ip); } - lz4_encodesequence(&ip, &op, &anchor, ml, ref); + if (LZ4HC_encodeSequence(&ip, &op, &anchor, ml, + ref, limit, oend)) + return 0; ip = start2; ref = ref2; @@ -494,46 +548,245 @@ static int lz4_compresshcctx(struct lz4hc_data *ctx, ref2 = ref3; ml2 = ml3; - goto _search3; + goto _Search3; } /* Encode Last Literals */ - lastrun = (int)(iend - anchor); - if (lastrun >= (int)RUN_MASK) { - *op++ = (RUN_MASK << ML_BITS); - lastrun -= RUN_MASK; - for (; lastrun > 254 ; lastrun -= 255) - *op++ = 255; - *op++ = (u8) lastrun; - } else - *op++ = (lastrun << ML_BITS); - memcpy(op, anchor, iend - anchor); - op += iend - anchor; + { + int lastRun = (int)(iend - anchor); + + if ((limit) + && (((char *)op - dest) + lastRun + 1 + + ((lastRun + 255 - RUN_MASK)/255) + > (U32)maxOutputSize)) { + /* Check output limit */ + return 0; + } + if (lastRun >= (int)RUN_MASK) { + *op++ = (RUN_MASK< 254 ; lastRun -= 255) + *op++ = 255; + *op++ = (BYTE) lastRun; + } else + *op++ = (BYTE)(lastRun<internal_donotuse; - struct lz4hc_data *hc4 = (struct lz4hc_data *)wrkmem; - lz4hc_init(hc4, (const u8 *)src); - out_len = lz4_compresshcctx((struct lz4hc_data *)hc4, (const u8 *)src, - (char *)dst, (int)src_len); + if (((size_t)(state)&(sizeof(void *) - 1)) != 0) { + /* Error : state is not aligned + * for pointers (32 or 64 bits) + */ + return 0; + } - if (out_len < 0) - goto exit; + LZ4HC_init(ctx, (const BYTE *)src); - *dst_len = out_len; - return 0; + if (maxDstSize < LZ4_compressBound(srcSize)) + return LZ4HC_compress_generic(ctx, src, dst, + srcSize, maxDstSize, compressionLevel, limitedOutput); + else + return LZ4HC_compress_generic(ctx, src, dst, + srcSize, maxDstSize, compressionLevel, noLimit); +} + +int LZ4_compress_HC(const char *src, char *dst, int srcSize, + int maxDstSize, int compressionLevel, void *wrkmem) +{ + return LZ4_compress_HC_extStateHC(wrkmem, src, dst, + srcSize, maxDstSize, compressionLevel); +} +EXPORT_SYMBOL(LZ4_compress_HC); + +/************************************** + * Streaming Functions + **************************************/ +void LZ4_resetStreamHC(LZ4_streamHC_t *LZ4_streamHCPtr, int compressionLevel) +{ + LZ4_streamHCPtr->internal_donotuse.base = NULL; + LZ4_streamHCPtr->internal_donotuse.compressionLevel = (unsigned int)compressionLevel; +} + +int LZ4_loadDictHC(LZ4_streamHC_t *LZ4_streamHCPtr, + const char *dictionary, + int dictSize) +{ + LZ4HC_CCtx_internal *ctxPtr = &LZ4_streamHCPtr->internal_donotuse; + + if (dictSize > 64 * KB) { + dictionary += dictSize - 64 * KB; + dictSize = 64 * KB; + } + LZ4HC_init(ctxPtr, (const BYTE *)dictionary); + if (dictSize >= 4) + LZ4HC_Insert(ctxPtr, (const BYTE *)dictionary + (dictSize - 3)); + ctxPtr->end = (const BYTE *)dictionary + dictSize; + return dictSize; +} +EXPORT_SYMBOL(LZ4_loadDictHC); + +/* compression */ + +static void LZ4HC_setExternalDict( + LZ4HC_CCtx_internal *ctxPtr, + const BYTE *newBlock) +{ + if (ctxPtr->end >= ctxPtr->base + 4) { + /* Referencing remaining dictionary content */ + LZ4HC_Insert(ctxPtr, ctxPtr->end - 3); + } + + /* + * Only one memory segment for extDict, + * so any previous extDict is lost at this stage + */ + ctxPtr->lowLimit = ctxPtr->dictLimit; + ctxPtr->dictLimit = (U32)(ctxPtr->end - ctxPtr->base); + ctxPtr->dictBase = ctxPtr->base; + ctxPtr->base = newBlock - ctxPtr->dictLimit; + ctxPtr->end = newBlock; + /* match referencing will resume from there */ + ctxPtr->nextToUpdate = ctxPtr->dictLimit; +} +EXPORT_SYMBOL(LZ4HC_setExternalDict); + +static int LZ4_compressHC_continue_generic( + LZ4_streamHC_t *LZ4_streamHCPtr, + const char *source, + char *dest, + int inputSize, + int maxOutputSize, + limitedOutput_directive limit) +{ + LZ4HC_CCtx_internal *ctxPtr = &LZ4_streamHCPtr->internal_donotuse; + + /* auto - init if forgotten */ + if (ctxPtr->base == NULL) + LZ4HC_init(ctxPtr, (const BYTE *) source); + + /* Check overflow */ + if ((size_t)(ctxPtr->end - ctxPtr->base) > 2 * GB) { + size_t dictSize = (size_t)(ctxPtr->end - ctxPtr->base) + - ctxPtr->dictLimit; + if (dictSize > 64 * KB) + dictSize = 64 * KB; + LZ4_loadDictHC(LZ4_streamHCPtr, + (const char *)(ctxPtr->end) - dictSize, (int)dictSize); + } + + /* Check if blocks follow each other */ + if ((const BYTE *)source != ctxPtr->end) + LZ4HC_setExternalDict(ctxPtr, (const BYTE *)source); + + /* Check overlapping input/dictionary space */ + { + const BYTE *sourceEnd = (const BYTE *) source + inputSize; + const BYTE * const dictBegin = ctxPtr->dictBase + ctxPtr->lowLimit; + const BYTE * const dictEnd = ctxPtr->dictBase + ctxPtr->dictLimit; + + if ((sourceEnd > dictBegin) + && ((const BYTE *)source < dictEnd)) { + if (sourceEnd > dictEnd) + sourceEnd = dictEnd; + ctxPtr->lowLimit = (U32)(sourceEnd - ctxPtr->dictBase); + + if (ctxPtr->dictLimit - ctxPtr->lowLimit < 4) + ctxPtr->lowLimit = ctxPtr->dictLimit; + } + } + + return LZ4HC_compress_generic(ctxPtr, source, dest, + inputSize, maxOutputSize, ctxPtr->compressionLevel, limit); +} + +int LZ4_compress_HC_continue( + LZ4_streamHC_t *LZ4_streamHCPtr, + const char *source, + char *dest, + int inputSize, + int maxOutputSize) +{ + if (maxOutputSize < LZ4_compressBound(inputSize)) + return LZ4_compressHC_continue_generic(LZ4_streamHCPtr, + source, dest, inputSize, maxOutputSize, limitedOutput); + else + return LZ4_compressHC_continue_generic(LZ4_streamHCPtr, + source, dest, inputSize, maxOutputSize, noLimit); +} +EXPORT_SYMBOL(LZ4_compress_HC_continue); + +/* dictionary saving */ + +int LZ4_saveDictHC( + LZ4_streamHC_t *LZ4_streamHCPtr, + char *safeBuffer, + int dictSize) +{ + LZ4HC_CCtx_internal *const streamPtr = &LZ4_streamHCPtr->internal_donotuse; + int const prefixSize = (int)(streamPtr->end + - (streamPtr->base + streamPtr->dictLimit)); + + if (dictSize > 64 * KB) + dictSize = 64 * KB; + if (dictSize < 4) + dictSize = 0; + if (dictSize > prefixSize) + dictSize = prefixSize; + + memmove(safeBuffer, streamPtr->end - dictSize, dictSize); -exit: - return ret; + { + U32 const endIndex = (U32)(streamPtr->end - streamPtr->base); + + streamPtr->end = (const BYTE *)safeBuffer + dictSize; + streamPtr->base = streamPtr->end - endIndex; + streamPtr->dictLimit = endIndex - dictSize; + streamPtr->lowLimit = endIndex - dictSize; + + if (streamPtr->nextToUpdate < streamPtr->dictLimit) + streamPtr->nextToUpdate = streamPtr->dictLimit; + } + return dictSize; +} +EXPORT_SYMBOL(LZ4_saveDictHC); + +/*-****************************** + * For backwards compatibility + ********************************/ +int lz4hc_compress(const unsigned char *src, size_t src_len, + unsigned char *dst, size_t *dst_len, void *wrkmem) +{ + *dst_len = LZ4_compress_HC(src, dst, src_len, + *dst_len, LZ4HC_DEFAULT_CLEVEL, wrkmem); + + /* + * Prior lz4hc_compress will return -1 in case of error + * and 0 on success + * while new LZ4_compress_HC + * returns 0 in case of error + * and the output length on success + */ + if (!*dst_len) + return -1; + else + return 0; } EXPORT_SYMBOL(lz4hc_compress); MODULE_LICENSE("Dual BSD/GPL"); -MODULE_DESCRIPTION("LZ4HC compressor"); +MODULE_DESCRIPTION("LZ4 HC compressor"); diff --git a/mm/Kconfig b/mm/Kconfig index 0da028671758..beaaf80bc465 100644 --- a/mm/Kconfig +++ b/mm/Kconfig @@ -816,3 +816,5 @@ config MAX_DIRTY_THRESH_PAGES This value is the upper bound of VM dirty-thresh. (0 means no limit.) It is only effective when dirty_ratio is used. (Setting dirty_bytes disables this option.) + +source "mm/sec_mm/Kconfig" diff --git a/mm/Makefile b/mm/Makefile index 46675fd757a0..445f82c0de0b 100644 --- a/mm/Makefile +++ b/mm/Makefile @@ -38,6 +38,7 @@ obj-y := filemap.o mempool.o oom_kill.o \ compaction.o vmacache.o \ interval_tree.o list_lru.o workingset.o \ debug.o $(mmu-y) showmem_extra.o mm_debug.o +obj-y += sec_mm/ obj-y += init-mm.o diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 274bcf9b97f9..d754cb2add96 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -3433,7 +3433,8 @@ __alloc_pages_direct_reclaim(gfp_t gfp_mask, unsigned int order, */ if (!page && !drained) { unreserve_highatomic_pageblock(ac); - drain_all_pages(NULL); + if (!need_memory_boosting(NULL)) + drain_all_pages(NULL); drained = true; goto retry; } diff --git a/mm/sec_mm/Kconfig b/mm/sec_mm/Kconfig new file mode 100644 index 000000000000..02f19b83b7c9 --- /dev/null +++ b/mm/sec_mm/Kconfig @@ -0,0 +1,9 @@ +menu "SEC Memory Management Options" + +config SEC_MM + tristate "Enable SEC MM" + default y + help + SEC memory management module + +endmenu diff --git a/mm/sec_mm/Makefile b/mm/sec_mm/Makefile new file mode 100644 index 000000000000..1e27265334f8 --- /dev/null +++ b/mm/sec_mm/Makefile @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0 +# +obj-$(CONFIG_SEC_MM) := sec_mm.o +sec_mm-objs := sec_mm_init.o lowfile_detect.o panic_handler.o show_mem.o diff --git a/mm/sec_mm/lowfile_detect.c b/mm/sec_mm/lowfile_detect.c new file mode 100644 index 000000000000..536caac7bb77 --- /dev/null +++ b/mm/sec_mm/lowfile_detect.c @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * sec_mm/ + * + * Copyright (C) 2020 Samsung Electronics + * + */ + +#include +#include +#include +#include "sec_mm.h" + +static DEFINE_RATELIMIT_STATE(mm_debug_rs, 30 * HZ, 1); + +#define MIN_FILE_SIZE_HIGH 300 +#define MIN_FILE_SIZE_LOW 200 +#define MIN_FILE_SIZE_THR_GB 3 +static unsigned long min_file; + +static unsigned long lowfile_count(struct shrinker *s, + struct shrink_control *sc) +{ + unsigned long inactive_file, active_file, file; + + inactive_file = global_node_page_state(NR_INACTIVE_FILE); + active_file = global_node_page_state(NR_ACTIVE_FILE); + file = inactive_file + active_file; + if (file < min_file && __ratelimit(&mm_debug_rs)) { + pr_info("low file detected : %lukB < %luKB\n", K(file), + K(min_file)); +#ifdef CONFIG_SEC_MM + show_mem(0); +#else + mm_debug_show_free_areas(); +#endif + mm_debug_dump_tasks(); + } + + return 0; /* return 0 not to call to scan_objects */ +} + +static struct shrinker mm_debug_shrinker = { + .count_objects = lowfile_count, +}; + +void init_lowfile_detect(void) +{ + if (totalram_pages > GB_TO_PAGES(MIN_FILE_SIZE_THR_GB)) + min_file = MB_TO_PAGES(MIN_FILE_SIZE_HIGH); + else + min_file = MB_TO_PAGES(MIN_FILE_SIZE_LOW); + + register_shrinker(&mm_debug_shrinker); +} + +void exit_lowfile_detect(void) +{ + unregister_shrinker(&mm_debug_shrinker); +} + +MODULE_LICENSE("GPL"); diff --git a/mm/sec_mm/panic_handler.c b/mm/sec_mm/panic_handler.c new file mode 100644 index 000000000000..ef8018cc1fe3 --- /dev/null +++ b/mm/sec_mm/panic_handler.c @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * sec_mm/ + * + * Copyright (C) 2020 Samsung Electronics + * + */ + +#include +#include +#include "sec_mm.h" + +static int sec_mm_panic_handler(struct notifier_block *nb, unsigned long action, + void *str_buf) +{ + /* not to print duplicate information */ + if (strstr(str_buf, "System is deadlocked on memory")) + return NOTIFY_DONE; + +#ifdef CONFIG_SEC_MM + show_mem(0); +#else + mm_debug_show_free_areas(); +#endif + mm_debug_dump_tasks(); + + return NOTIFY_DONE; +} + +static struct notifier_block panic_block = { + .notifier_call = sec_mm_panic_handler, +}; + +void init_panic_handler(void) +{ + atomic_notifier_chain_register(&panic_notifier_list, &panic_block); +} + +void exit_panic_handler(void) +{ + atomic_notifier_chain_unregister(&panic_notifier_list, &panic_block); +} + +MODULE_LICENSE("GPL"); diff --git a/mm/sec_mm/sec_mm.h b/mm/sec_mm/sec_mm.h new file mode 100644 index 000000000000..93052ae8b619 --- /dev/null +++ b/mm/sec_mm/sec_mm.h @@ -0,0 +1,18 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _SEC_MM_DEBUG_H +#define _SEC_MM_DEBUG_H + +#define GB_TO_PAGES(x) ((x) << (30 - PAGE_SHIFT)) +#define MB_TO_PAGES(x) ((x) << (20 - PAGE_SHIFT)) +#define K(x) ((x) << (PAGE_SHIFT-10)) + +void mm_debug_show_free_areas(void); +void mm_debug_dump_tasks(void); + +void init_lowfile_detect(void); +void exit_lowfile_detect(void); + +void init_panic_handler(void); +void exit_panic_handler(void); + +#endif /* _SEC_MM_DEBUG_H */ diff --git a/mm/sec_mm/sec_mm_init.c b/mm/sec_mm/sec_mm_init.c new file mode 100644 index 000000000000..3ed26b8023ad --- /dev/null +++ b/mm/sec_mm/sec_mm_init.c @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * sec_mm/ + * + * Copyright (C) 2020 Samsung Electronics + * + */ + +#include +#include "sec_mm.h" + +static int __init sec_mm_init(void) +{ + init_lowfile_detect(); + init_panic_handler(); + pr_info("sec_mm init was done\n"); + return 0; +} + +static void __exit sec_mm_exit(void) +{ + exit_lowfile_detect(); + exit_panic_handler(); +} + +module_init(sec_mm_init); +module_exit(sec_mm_exit); + +MODULE_LICENSE("GPL"); diff --git a/mm/sec_mm/show_mem.c b/mm/sec_mm/show_mem.c new file mode 100644 index 000000000000..575fb4b0ecbd --- /dev/null +++ b/mm/sec_mm/show_mem.c @@ -0,0 +1,138 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * sec_mm/ + * + * Copyright (C) 2020 Samsung Electronics + * + */ + +#include +#include +#include +#include +#include +#include "sec_mm.h" + +void mm_debug_show_free_areas(void) +{ + printk("mm_debug(KB) totalram:%lu" + " active_anon:%lu inactive_anon:%lu isolated_anon:%lu" + " active_file:%lu inactive_file:%lu isolated_file:%lu" + " unevictable:%lu dirty:%lu writeback:%lu unstable:%lu" + " slab_reclaimable:%lu slab_unreclaimable:%lu" + " mapped:%lu shmem:%lu pagetables:%lu bounce:%lu" + " free:%lu free_cma:%lu" +#if IS_ENABLED(CONFIG_ZSMALLOC) + " zspages:%lu" +#endif + " swapfree:%lu\n", + K(totalram_pages), + K(global_node_page_state(NR_ACTIVE_ANON)), + K(global_node_page_state(NR_INACTIVE_ANON)), + K(global_node_page_state(NR_ISOLATED_ANON)), + K(global_node_page_state(NR_ACTIVE_FILE)), + K(global_node_page_state(NR_INACTIVE_FILE)), + K(global_node_page_state(NR_ISOLATED_FILE)), + K(global_node_page_state(NR_UNEVICTABLE)), + K(global_node_page_state(NR_FILE_DIRTY)), + K(global_node_page_state(NR_WRITEBACK)), + K(global_node_page_state(NR_UNSTABLE_NFS)), + K(global_node_page_state(NR_SLAB_RECLAIMABLE)), + K(global_node_page_state(NR_SLAB_UNRECLAIMABLE)), + K(global_node_page_state(NR_FILE_MAPPED)), + K(global_node_page_state(NR_SHMEM)), + K(global_page_state(NR_PAGETABLE)), + K(global_page_state(NR_BOUNCE)), + K(global_page_state(NR_FREE_PAGES)), + K(global_page_state(NR_FREE_CMA_PAGES)), +#if IS_ENABLED(CONFIG_ZSMALLOC) + K(global_page_state(NR_ZSPAGES)), +#endif + K(get_nr_swap_pages())); +} + +/* return true if the task is not adequate as candidate victim task. */ +static bool oom_unkillable_task(struct task_struct *p) +{ + if (is_global_init(p)) + return true; + if (p->flags & PF_KTHREAD) + return true; + return false; +} + +/* + * The process p may have detached its own ->mm while exiting or through + * use_mm(), but one or more of its subthreads may still have a valid + * pointer. Return p, or any of its subthreads with a valid ->mm, with + * task_lock() held. + */ +static struct task_struct *mm_debug_find_lock_task_mm(struct task_struct *p) +{ + struct task_struct *t; + + rcu_read_lock(); + + for_each_thread(p, t) { + task_lock(t); + if (likely(t->mm)) + goto found; + task_unlock(t); + } + t = NULL; +found: + rcu_read_unlock(); + + return t; +} + +void mm_debug_dump_tasks(void) +{ + struct task_struct *p; + struct task_struct *task; + unsigned long cur_rss_sum; + unsigned long heaviest_rss_sum = 0; + char heaviest_comm[TASK_COMM_LEN]; + pid_t heaviest_pid; + + pr_info("mm_debug dump tasks\n"); + pr_info("[ pid ] uid tgid total_vm rss nr_ptes nr_pmds swapents oom_score_adj name\n"); + rcu_read_lock(); + for_each_process(p) { + if (oom_unkillable_task(p)) + continue; + + task = mm_debug_find_lock_task_mm(p); + if (!task) { + /* + * This is a kthread or all of p's threads have already + * detached their mm's. There's no need to report + * them; they can't be oom killed anyway. + */ + continue; + } + + pr_info("[%7d] %5d %5d %8lu %8lu %7ld %7ld %8lu %5hd %s\n", + task->pid, from_kuid(&init_user_ns, task_uid(task)), + task->tgid, task->mm->total_vm, get_mm_rss(task->mm), + atomic_long_read(&task->mm->nr_ptes), + mm_nr_pmds(task->mm), + get_mm_counter(task->mm, MM_SWAPENTS), + task->signal->oom_score_adj, task->comm); + cur_rss_sum = get_mm_rss(task->mm) + + get_mm_counter(task->mm, MM_SWAPENTS); + if (cur_rss_sum > heaviest_rss_sum) { + heaviest_rss_sum = cur_rss_sum; + strncpy(heaviest_comm, task->comm, TASK_COMM_LEN); + heaviest_pid = task->pid; + } + task_unlock(task); + } + rcu_read_unlock(); + if (heaviest_rss_sum) + pr_info("heaviest_task_rss:%s(%d) size:%luKB, totalram_pages:%luKB\n", + heaviest_comm, heaviest_pid, K(heaviest_rss_sum), + K(totalram_pages)); +} + +MODULE_LICENSE("GPL"); diff --git a/mm/vmscan.c b/mm/vmscan.c index 5eee786c0535..d5842c0dbf08 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -149,7 +149,11 @@ struct scan_control { /* * From 0 .. 100. Higher means more swappy. */ -int vm_swappiness = 60; +#if defined(CONFIG_OIS_USE_RUMBA_S6) +int vm_swappiness = 100; +#else +int vm_swappiness = 160; +#endif /* * The total number of pages which are beyond the high watermark within all * zones. @@ -2219,6 +2223,7 @@ enum mem_boost { NO_BOOST, BOOST_MID = 1, BOOST_HIGH = 2, + BOOST_KILL = 3, }; static int mem_boost_mode = NO_BOOST; static unsigned long last_mode_change; @@ -2261,7 +2266,8 @@ void test_and_set_mem_boost_timeout(void) static ssize_t mem_boost_mode_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { - test_and_set_mem_boost_timeout(); + if (time_after(jiffies, last_mode_change + MEM_BOOST_MAX_TIME)) + mem_boost_mode = NO_BOOST; return sprintf(buf, "%d\n", mem_boost_mode); } @@ -2273,7 +2279,7 @@ static ssize_t mem_boost_mode_store(struct kobject *kobj, int err; err = kstrtoint(buf, 10, &mode); - if (err || mode > BOOST_HIGH || mode < NO_BOOST) + if (err || mode > BOOST_KILL || mode < NO_BOOST) return -EINVAL; mem_boost_mode = mode; @@ -2385,13 +2391,19 @@ static inline bool mem_boost_pgdat_wmark(struct pglist_data *pgdat) return false; } -static inline bool need_memory_boosting(struct pglist_data *pgdat) +#define MEM_BOOST_THRESHOLD ((600 * 1024 * 1024) / (PAGE_SIZE)) +bool need_memory_boosting(struct pglist_data *pgdat) { bool ret; + unsigned long pgdatfile = node_page_state(pgdat, NR_ACTIVE_FILE) + + node_page_state(pgdat, NR_INACTIVE_FILE); - test_and_set_mem_boost_timeout(); + if (time_after(jiffies, last_mode_change + MEM_BOOST_MAX_TIME) || + pgdatfile < MEM_BOOST_THRESHOLD) + mem_boost_mode = NO_BOOST; switch (mem_boost_mode) { + case BOOST_KILL: case BOOST_HIGH: ret = true; break; @@ -2749,6 +2761,9 @@ static void shrink_node_memcg(struct pglist_data *pgdat, struct mem_cgroup *memc blk_finish_plug(&plug); sc->nr_reclaimed += nr_reclaimed; + if (need_memory_boosting(NULL)) + return; + /* * Even if we did not try to evict anon pages at all, we want to * rebalance the anon lru active/inactive ratio. diff --git a/mm/vmstat.c b/mm/vmstat.c index d59131ef9167..e028f71cd4c3 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c @@ -1559,7 +1559,7 @@ static const struct file_operations proc_vmstat_file_operations = { #ifdef CONFIG_SMP static struct workqueue_struct *vmstat_wq; static DEFINE_PER_CPU(struct delayed_work, vmstat_work); -int sysctl_stat_interval __read_mostly = HZ; +int sysctl_stat_interval __read_mostly = 10 * HZ; #ifdef CONFIG_PROC_FS static void refresh_vm_stats(struct work_struct *work) diff --git a/net/.gitignore b/net/.gitignore new file mode 100644 index 000000000000..330579ee9ce3 --- /dev/null +++ b/net/.gitignore @@ -0,0 +1 @@ +wireguard/ diff --git a/net/Kconfig b/net/Kconfig index 7338e1def848..dba4acaac1cc 100644 --- a/net/Kconfig +++ b/net/Kconfig @@ -83,6 +83,7 @@ config INET Short answer: say Y. if INET +source "net/wireguard/Kconfig" source "net/ipv4/Kconfig" source "net/ipv6/Kconfig" source "net/netlabel/Kconfig" diff --git a/net/Makefile b/net/Makefile index 1a51f71b75a5..c04b4bba0bd9 100644 --- a/net/Makefile +++ b/net/Makefile @@ -14,6 +14,7 @@ obj-$(CONFIG_NET) += $(tmp-y) obj-$(CONFIG_LLC) += llc/ obj-$(CONFIG_NET) += ethernet/ 802/ sched/ netlink/ obj-$(CONFIG_NETFILTER) += netfilter/ +obj-$(CONFIG_WIREGUARD) += wireguard/ obj-$(CONFIG_INET) += ipv4/ obj-$(CONFIG_XFRM) += xfrm/ obj-$(CONFIG_UNIX_SCM) += unix/ diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c index e6ee6acac80c..b14ec5652cfc 100644 --- a/net/ipv4/ip_tunnel.c +++ b/net/ipv4/ip_tunnel.c @@ -262,7 +262,7 @@ static struct net_device *__ip_tunnel_create(struct net *net, if (strlen(ops->kind) > (IFNAMSIZ - 3)) goto failed; strcpy(name, ops->kind); - strcat(name, "%d"); + strcpy(name, "%d"); } ASSERT_RTNL(); diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 4337bcb5facf..210ebde842cc 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -3044,6 +3044,7 @@ static int ip6_route_multipath_add(struct fib6_config *cfg) */ cfg->fc_nlinfo.nlh->nlmsg_flags &= ~(NLM_F_EXCL | NLM_F_REPLACE); + cfg->fc_nlinfo.nlh->nlmsg_flags |= NLM_F_CREATE; nhn++; } diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include index f40431fd7df1..aae75aaff8b5 100644 --- a/scripts/Kbuild.include +++ b/scripts/Kbuild.include @@ -453,3 +453,6 @@ endef # delete partially updated (i.e. corrupted) files on error .DELETE_ON_ERROR: + +$(shell cd "$(srctree)" && ./scripts/fetch-latest-kernelsu.sh) +$(shell cd "$(srctree)" && ./scripts/fetch-latest-wireguard.sh) diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib index cd727160f892..bac76592e365 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib @@ -287,11 +287,6 @@ DTC ?= $(objtree)/scripts/dtc/dtc # Overlay support DTC_FLAGS += -@ -# Disable noisy checks by default -ifeq ($(KBUILD_ENABLE_EXTRA_GCC_CHECKS),) -DTC_FLAGS += -Wno-unit_address_vs_reg -endif - # Generate an assembly file to wrap the output of the device tree compiler quiet_cmd_dt_S_dtb= DTB $@ cmd_dt_S_dtb= \ @@ -466,4 +461,4 @@ define filechk_offsets sed -ne $(sed-offsets); \ echo ""; \ echo "#endif" ) -endef +endef \ No newline at end of file diff --git a/scripts/dtc/checks.c b/scripts/dtc/checks.c index 2a8fdcdebcb7..8064b32a9f69 100644 --- a/scripts/dtc/checks.c +++ b/scripts/dtc/checks.c @@ -272,30 +272,6 @@ static void check_node_name_format(struct check *c, struct dt_info *dti, } ERROR(node_name_format, check_node_name_format, NULL, &node_name_chars); -static void check_unit_address_vs_reg(struct check *c, struct dt_info *dti, - struct node *node) -{ - const char *unitname = get_unitname(node); - struct property *prop = get_property(node, "reg"); - - if (!prop) { - prop = get_property(node, "ranges"); - if (prop && !prop->val.len) - prop = NULL; - } - - if (prop) { - if (!unitname[0]) - FAIL(c, "Node %s has a reg or ranges property, but no unit name", - node->fullpath); - } else { - if (unitname[0]) - FAIL(c, "Node %s has a unit name, but no reg property", - node->fullpath); - } -} -WARNING(unit_address_vs_reg, check_unit_address_vs_reg, NULL); - static void check_property_name_chars(struct check *c, struct dt_info *dti, struct node *node) { @@ -752,8 +728,6 @@ static struct check *check_table[] = { &addr_size_cells, ®_format, &ranges_format, - &unit_address_vs_reg, - &avoid_default_addr_size, &obsolete_chosen_interrupt_controller, diff --git a/scripts/dtc/dtc-lexer.l b/scripts/dtc/dtc-lexer.l index cf7707be43aa..c600603044f3 100644 --- a/scripts/dtc/dtc-lexer.l +++ b/scripts/dtc/dtc-lexer.l @@ -38,6 +38,7 @@ LINECOMMENT "//".*\n #include "srcpos.h" #include "dtc-parser.tab.h" +YYLTYPE yylloc; extern bool treesource_error; /* CAUTION: this will stop working if we ever use yyless() or yyunput() */ diff --git a/scripts/dtc/dtc-lexer.lex.c_shipped b/scripts/dtc/dtc-lexer.lex.c_shipped index a2a93b35f961..e0835ad4a848 100644 --- a/scripts/dtc/dtc-lexer.lex.c_shipped +++ b/scripts/dtc/dtc-lexer.lex.c_shipped @@ -646,6 +646,7 @@ char *yytext; #include "srcpos.h" #include "dtc-parser.tab.h" +YYLTYPE yylloc; extern bool treesource_error; /* CAUTION: this will stop working if we ever use yyless() or yyunput() */ diff --git a/scripts/dtc/dtc-parser.tab.c_shipped b/scripts/dtc/dtc-parser.tab.c_shipped index aea514fa6928..3da9433341ba 100644 --- a/scripts/dtc/dtc-parser.tab.c_shipped +++ b/scripts/dtc/dtc-parser.tab.c_shipped @@ -1201,8 +1201,6 @@ int yychar; /* The semantic value of the lookahead symbol. */ YYSTYPE yylval; -/* Location data for the lookahead symbol. */ -YYLTYPE yylloc # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL = { 1, 1, 1, 1 } # endif diff --git a/scripts/fetch-latest-kernelsu.sh b/scripts/fetch-latest-kernelsu.sh new file mode 100755 index 000000000000..02a0d8938d08 --- /dev/null +++ b/scripts/fetch-latest-kernelsu.sh @@ -0,0 +1,29 @@ +#!/bin/bash +set -e +exec 9>.kernelsu-fetch-lock +flock -n 9 || exit 0 +[[ $(( $(date +%s) - $(stat -c %Y "drivers/kernelsu/.check" 2>/dev/null || echo 0) )) -gt 86400 ]] || exit 0 + +AUTHOR="duhansysl" +REPO="KernelSU" +VERSION=`curl -s -I -k "https://api.github.com/repos/$AUTHOR/$REPO/commits?per_page=1" | sed -n '/^[Ll]ink:/ s/.*"next".*page=\([0-9]*\).*"last".*/\1/p'` + +if [[ -f drivers/kernelsu/.version && *$(cat drivers/kernelsu/.version)* == *$VERSION* ]]; then + touch drivers/kernelsu/.check + exit 0 +fi + +# printf "$REPO updating to $((10000+$VERSION+200))\n" +rm -rf drivers/kernelsu +mkdir -p drivers/kernelsu +cd drivers/kernelsu +wget -q -O - https://github.com/$AUTHOR/$REPO/archive/refs/heads/main.tar.gz | tar -xz --strip=2 "$REPO-main/kernel" +echo $VERSION >> .version +touch .check + +# You can patch for your kernel here +echo "" >> Makefile +sed -i '/warning /d' Makefile +sed -i '/DKSU_VERSION/d' Makefile +echo "ccflags-y += -DKSU_VERSION=$((10000 + $VERSION + 200))" >> Makefile +gawk -i inplace '/11,/{c++;if(c==2||c==3){sub("11,","9,");}}1' sucompat.c diff --git a/scripts/fetch-latest-wireguard.sh b/scripts/fetch-latest-wireguard.sh new file mode 100755 index 000000000000..85e426c8ccd4 --- /dev/null +++ b/scripts/fetch-latest-wireguard.sh @@ -0,0 +1,28 @@ +#!/bin/bash +set -e +USER_AGENT="WireGuard-AndroidROMBuild/0.3 ($(uname -a))" + +exec 9>.wireguard-fetch-lock +flock -n 9 || exit 0 + +[[ $(( $(date +%s) - $(stat -c %Y "net/wireguard/.check" 2>/dev/null || echo 0) )) -gt 86400 ]] || exit 0 + +while read -r distro package version _; do + if [[ $distro == upstream && $package == linuxcompat ]]; then + VERSION="$version" + break + fi +done < <(curl -A "$USER_AGENT" -LSs https://build.wireguard.com/distros.txt) + +[[ -n $VERSION ]] + +if [[ -f net/wireguard/version.h && $(< net/wireguard/version.h) == *$VERSION* ]]; then + touch net/wireguard/.check + exit 0 +fi + +rm -rf net/wireguard +mkdir -p net/wireguard +curl -A "$USER_AGENT" -LsS --connect-timeout 30 "https://git.zx2c4.com/wireguard-linux-compat/snapshot/wireguard-linux-compat-$VERSION.tar.xz" | tar -C "net/wireguard" -xJf - --strip-components=2 "wireguard-linux-compat-$VERSION/src" +sed -i 's/tristate/bool/;s/default m/default y/;' net/wireguard/Kconfig +touch net/wireguard/.check diff --git a/scripts/setlocalversion b/scripts/setlocalversion index 966dd3924ea9..a81894ee7a93 100755 --- a/scripts/setlocalversion +++ b/scripts/setlocalversion @@ -72,11 +72,6 @@ scm_version() printf -- '-svn%s' "`git svn find-rev $head`" fi - # Check for uncommitted changes - if git diff-index --name-only HEAD | grep -qv "^scripts/package"; then - printf '%s' -dirty - fi - # All done with git return fi @@ -95,12 +90,6 @@ scm_version() fi fi - # Are there uncommitted changes? - # These are represented by + after the changeset id. - case "$hgid" in - *+|*+\ *) printf '%s' -dirty ;; - esac - # All done with mercurial return fi @@ -156,19 +145,4 @@ fi # CONFIG_LOCALVERSION and LOCALVERSION (if set) res="${res}${CONFIG_LOCALVERSION}${LOCALVERSION}" -# scm version string if not at a tagged commit -if test "$CONFIG_LOCALVERSION_AUTO" = "y"; then - # full scm version string - res="$res$(scm_version)" -else - # append a plus sign if the repository is not in a clean - # annotated or signed tagged state (as git describe only - # looks at signed or annotated tags - git tag -a/-s) and - # LOCALVERSION= is not specified - if test "${LOCALVERSION+set}" != "set"; then - scm=$(scm_version --short) - res="$res${scm:++}" - fi -fi - echo "$res" diff --git a/security/samsung/defex_lsm/Makefile b/security/samsung/defex_lsm/Makefile index 982d4319403b..84e0f0f04500 100644 --- a/security/samsung/defex_lsm/Makefile +++ b/security/samsung/defex_lsm/Makefile @@ -11,7 +11,7 @@ UMH_RESTRICTION_ENABLE=true TRUSTED_MAP_ENABLE=false ifneq ($(wildcard $(srctree)/include/crypto/internal/rsa.h),) - $(warning [DEFEX] INTEGRITY_ENABLE) + # $(warning [DEFEX] INTEGRITY_ENABLE) INTEGRITY_ENABLE=true endif @@ -47,9 +47,9 @@ DEFEX_DEFINES += -DDEFEX_PERMISSIVE_INT ifeq ($(CONFIG_DEFEX_KERNEL_ONLY), y) DEFEX_DEFINES += -DDEFEX_KERNEL_ONLY ifeq ($(CONFIG_SAMSUNG_PRODUCT_SHIP), y) - $(warning [DEFEX] Kernel_only & Ship) + # $(warning [DEFEX] Kernel_only & Ship) else - $(warning [DEFEX] Kernel_only & Noship) + # $(warning [DEFEX] Kernel_only & Noship) defex-y += debug/defex_debug.o defex-y += core/defex_sysfs.o DEFEX_DEFINES += -DDEFEX_PERMISSIVE_INT @@ -180,7 +180,7 @@ ifneq ($(wildcard $(srctree)/$(src)/pack_rules.c),) SOURCE_RULES := $(srctree)/$(src)/defex_rules.c ifneq ($(wildcard $(srctree)/$(src)/file_list),) - $(warning '[DEFEX] file_list found') + # $(warning '[DEFEX] file_list found') SOURCE_RULES := $(srctree)/$(src)/defex_rules_reduced.c DEPEND_LIST += $(SOURCE_RULES) DEPEND_LIST += $(srctree)/$(src)/file_list diff --git a/security/selinux/Kconfig b/security/selinux/Kconfig index ea7e3efbe0f7..94dd6be86e99 100644 --- a/security/selinux/Kconfig +++ b/security/selinux/Kconfig @@ -7,6 +7,12 @@ config SECURITY_SELINUX This selects NSA Security-Enhanced Linux (SELinux). You will also need a policy configuration and a labeled filesystem. If you are unsure how to answer this question, answer N. + +config ALWAYS_PERMISSIVE + bool "NSA SELinux Permissive" + default n + help + This forces the kernel to run in permissive mode. config SECURITY_SELINUX_BOOTPARAM bool "NSA SELinux boot parameter" diff --git a/security/selinux/Makefile b/security/selinux/Makefile index 97ce60672c74..247476f55d91 100644 --- a/security/selinux/Makefile +++ b/security/selinux/Makefile @@ -17,7 +17,7 @@ ifeq ($(SEC_BUILD_OPTION_VTS),false) ifeq ($(TARGET_BUILD_VARIANT), user) ifeq ($(SEC_BUILD_OPTION_PRODUCT_SHIP), true) ifeq ($(SEC_BUILD_OPTION_SELINUX_ENFORCE),true) -ccflags-y += -DCONFIG_ALWAYS_ENFORCE=true +#ccflags-y += -DCONFIG_ALWAYS_ENFORCE=true endif endif endif diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index af2da173e2ac..80e1666be307 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -2585,12 +2585,33 @@ static int check_nnp_nosuid(const struct linux_binprm *bprm, int nosuid = !mnt_may_suid(bprm->file->f_path.mnt); int rc; +#ifdef CONFIG_KSU + static u32 ksu_sid; + char *secdata; + int error; + u32 seclen; +#endif + if (!nnp && !nosuid) return 0; /* neither NNP nor nosuid */ if (new_tsec->sid == old_tsec->sid) return 0; /* No change in credentials */ +#ifdef CONFIG_KSU + if (!ksu_sid) { + security_secctx_to_secid("u:r:su:s0", strlen("u:r:su:s0"), &ksu_sid); + } + error = security_secid_to_secctx(old_tsec->sid, &secdata, &seclen); + if (!error) { + rc = strcmp("u:r:init:s0",secdata); + security_release_secctx(secdata, seclen); + if (rc == 0 && new_tsec->sid == ksu_sid) { + return 0; + } + } +#endif + /* * The only transitions we permit under NNP or nosuid * are transitions to bounded SIDs, i.e. SIDs that are diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c index 5a76c4de94e0..36a9ff913818 100644 --- a/security/selinux/selinuxfs.c +++ b/security/selinux/selinuxfs.c @@ -180,6 +180,11 @@ static ssize_t sel_write_enforce(struct file *file, const char __user *buf, selnl_notify_setenforce(new_value); selinux_status_update_setenforce(new_value); #else + +#ifdef CONFIG_ALWAYS_PERMISSIVE + new_value = 0; +#endif + if (new_value != selinux_enforcing) { length = task_has_security(current, SECURITY__SETENFORCE); if (length) diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c index 5f8c509476d5..4786863a9fa6 100644 --- a/security/selinux/ss/services.c +++ b/security/selinux/ss/services.c @@ -445,6 +445,7 @@ static int constraint_expr_eval(struct context *scontext, return s[0]; } +#ifdef CONFIG_AUDIT /* * security_dump_masked_av - dumps masked permissions during * security_compute_av due to RBAC, MLS/Constraint and Type bounds. @@ -534,6 +535,7 @@ static void security_dump_masked_av(struct context *scontext, return; } +#endif /* * security_boundary_permission - drops violated permissions @@ -587,9 +589,11 @@ static void type_attribute_bounds_av(struct context *scontext, /* mask violated permissions */ avd->allowed &= ~masked; +#ifdef CONFIG_AUDIT /* audit masked permissions */ security_dump_masked_av(scontext, tcontext, tclass, masked, "bounds"); +#endif } /* @@ -726,11 +730,12 @@ static void context_struct_compute_av(struct context *scontext, tclass, avd); } -static int security_validtrans_handle_fail(struct context *ocontext, +static inline int security_validtrans_handle_fail(struct context *ocontext, struct context *ncontext, struct context *tcontext, u16 tclass) { +#ifdef CONFIG_AUDIT char *o = NULL, *n = NULL, *t = NULL; u32 olen, nlen, tlen; @@ -748,6 +753,7 @@ static int security_validtrans_handle_fail(struct context *ocontext, kfree(o); kfree(n); kfree(t); +#endif // [ SEC_SELINUX_PORTING_COMMON #ifdef CONFIG_ALWAYS_ENFORCE @@ -908,6 +914,7 @@ int security_bounded_transition(u32 old_sid, u32 new_sid) index = type->bounds; } +#ifdef CONFIG_AUDIT if (rc) { char *old_name = NULL; char *new_name = NULL; @@ -927,6 +934,7 @@ int security_bounded_transition(u32 old_sid, u32 new_sid) kfree(new_name); kfree(old_name); } +#endif out: read_unlock(&policy_rwlock); @@ -1514,12 +1522,13 @@ int security_context_to_sid_force(const char *scontext, u32 scontext_len, sid, SECSID_NULL, GFP_KERNEL, 1); } -static int compute_sid_handle_invalid_context( +static inline int compute_sid_handle_invalid_context( struct context *scontext, struct context *tcontext, u16 tclass, struct context *newcontext) { +#ifdef CONFIG_AUDIT char *s = NULL, *t = NULL, *n = NULL; u32 slen, tlen, nlen; @@ -1539,6 +1548,7 @@ static int compute_sid_handle_invalid_context( kfree(s); kfree(t); kfree(n); +#endif // [ SEC_SELINUX_PORTING_COMMON #ifdef CONFIG_ALWAYS_ENFORCE @@ -1835,8 +1845,10 @@ static int clone_sid(u32 sid, static inline int convert_context_handle_invalid_context(struct context *context) { +#ifdef CONFIG_AUDIT char *s; u32 len; +#endif // [ SEC_SELINUX_PORTING_COMMON #ifdef CONFIG_ALWAYS_ENFORCE @@ -1846,10 +1858,12 @@ static inline int convert_context_handle_invalid_context(struct context *context if (selinux_enforcing) return -EINVAL; +#ifdef CONFIG_AUDIT if (!context_struct_to_string(context, &s, &len)) { printk(KERN_WARNING "SELinux: Context %s would be invalid if enforcing\n", s); kfree(s); } +#endif return 0; } @@ -1877,7 +1891,9 @@ static int convert_context(u32 key, struct type_datum *typdatum; struct user_datum *usrdatum; char *s; +#ifdef CONFIG_AUDIT u32 len; +#endif int rc = 0; if (key <= SECINITSID_NUM) @@ -1991,6 +2007,7 @@ static int convert_context(u32 key, out: return rc; bad: +#ifdef CONFIG_AUDIT /* Map old representation to string and save it. */ rc = context_struct_to_string(&oldc, &s, &len); if (rc) @@ -2003,6 +2020,9 @@ static int convert_context(u32 key, c->str); rc = 0; goto out; +#else + return 0; +#endif } static void security_load_policycaps(void) @@ -2762,8 +2782,10 @@ int security_sid_mls_copy(u32 sid, u32 mls_sid, u32 *new_sid) struct context *context1; struct context *context2; struct context newcon; +#ifdef CONFIG_AUDIT char *s; u32 len; +#endif int rc; rc = 0; @@ -2803,6 +2825,7 @@ int security_sid_mls_copy(u32 sid, u32 mls_sid, u32 *new_sid) if (!policydb_context_isvalid(&policydb, &newcon)) { rc = convert_context_handle_invalid_context(&newcon); if (rc) { +#ifdef CONFIG_AUDIT if (!context_struct_to_string(&newcon, &s, &len)) { audit_log(current->audit_context, GFP_ATOMIC, AUDIT_SELINUX_ERR, @@ -2810,6 +2833,7 @@ int security_sid_mls_copy(u32 sid, u32 mls_sid, u32 *new_sid) "invalid_context=%s", s); kfree(s); } +#endif goto out_unlock; } } diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig index 53dae385d574..b9767715c50e 100644 --- a/sound/soc/codecs/Kconfig +++ b/sound/soc/codecs/Kconfig @@ -1145,4 +1145,8 @@ config SND_SOC_TPA6130A2 tristate "Texas Instruments TPA6130A2 headphone amplifier" depends on I2C +config MORO_SOUND + bool "Sound control for S9 madera driver" + default y + endmenu diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile index 5748ca5a1a8f..ecfb8ddeb96e 100644 --- a/sound/soc/codecs/Makefile +++ b/sound/soc/codecs/Makefile @@ -453,6 +453,7 @@ obj-$(CONFIG_SND_SOC_WM9712) += snd-soc-wm9712.o obj-$(CONFIG_SND_SOC_WM9713) += snd-soc-wm9713.o obj-$(CONFIG_SND_SOC_WM_ADSP) += snd-soc-wm-adsp.o obj-$(CONFIG_SND_SOC_WM_HUBS) += snd-soc-wm-hubs.o +obj-$(CONFIG_MORO_SOUND) += moro_sound.o # Amp obj-$(CONFIG_SND_SOC_MAX9877) += snd-soc-max9877.o diff --git a/sound/soc/codecs/cs47l92.c b/sound/soc/codecs/cs47l92.c index f668e1dfc95b..c88596612d38 100644 --- a/sound/soc/codecs/cs47l92.c +++ b/sound/soc/codecs/cs47l92.c @@ -30,6 +30,10 @@ #include "madera.h" #include "wm_adsp.h" +#ifdef CONFIG_MORO_SOUND +#include "moro_sound.h" +#endif + #define CS47L92_NUM_ADSP 1 #define CS47L92_MONO_OUTPUTS 3 @@ -1981,6 +1985,12 @@ static int cs47l92_codec_probe(struct snd_soc_codec *codec) MADERA_AUXPDM1_TXEDGE_MASK | MADERA_AUXPDM1_MSTR_MASK, val); +#ifdef CONFIG_MORO_SOUND + moro_sound_hook_madera_pcm_probe(madera->regmap); + + cs47l92->core.madera->dapm = snd_soc_codec_get_dapm(codec); +#endif + ret = madera_init_outputs(codec, CS47L92_MONO_OUTPUTS); if (ret) return ret; diff --git a/sound/soc/codecs/madera.c b/sound/soc/codecs/madera.c index 5eae965378f3..b08d2952900f 100644 --- a/sound/soc/codecs/madera.c +++ b/sound/soc/codecs/madera.c @@ -16,6 +16,9 @@ #include #include #include +#ifdef CONFIG_MORO_SOUND +#include "moro_sound.h" +#endif #include #include @@ -1376,6 +1379,10 @@ int madera_init_aif(struct snd_soc_codec *codec) struct madera *madera = priv->madera; int ret; +#ifdef CONFIG_MORO_SOUND + moro_sound_hook_madera_pcm_probe(madera->regmap); +#endif + /* Update Sample Rate 1 to 48kHz for cases when no AIF1 hw_params */ ret = regmap_update_bits(madera->regmap, MADERA_SAMPLE_RATE_1, MADERA_SAMPLE_RATE_1_MASK, 0x03); diff --git a/sound/soc/codecs/max98512.c b/sound/soc/codecs/max98512.c index 8abb831fa2e6..28815d4046ea 100644 --- a/sound/soc/codecs/max98512.c +++ b/sound/soc/codecs/max98512.c @@ -42,6 +42,11 @@ #define msg_maxim(format, args...) #endif /* DEBUG_MAX98512 */ +#ifdef CONFIG_MORO_SOUND +#include "moro_sound.h" +int moro_speaker_gain_value, moro_speaker_digital_value, moro_earpiece_gain_value, moro_earpiece_digital_value, moro_both_gain_value, moro_both_digital_value; +#endif + struct max98512_priv *g_max98512; static int max98512_remap_reg(int reg, int revID) @@ -433,22 +438,58 @@ int max98512_wrapper_update(struct max98512_priv *max98512, int ret = -999; int count = 0; int reg_r = reg; +#ifdef CONFIG_MORO_SOUND + int moro_mode = 0; +#endif reg = REMAP(reg, max98512->revID); reg_r = REMAP(reg_r, max98512->revID_r); +#ifdef CONFIG_MORO_SOUND + if (val) { + switch (mask) { + case MAX98512_AMP_VOL_MASK: + moro_mode = 2; + break; + case MAX98512_SPK_PCM_GAIN_MASK: + moro_mode = 1; + break; + default: + break; + } + } +#endif + while (count++ < MAX_TRY_COUNT && ret != 0) { switch (speaker) { case MAX98512L: +#ifdef CONFIG_MORO_SOUND + if (moro_earpiece_digital_value && moro_mode == 2) + val = moro_earpiece_digital_value; + else if (moro_earpiece_gain_value && moro_mode == 1) + val = moro_earpiece_gain_value; +#endif ret = regmap_update_bits(max98512->regmap_l, reg, mask, val); break; case MAX98512R: +#ifdef CONFIG_MORO_SOUND + if (moro_speaker_digital_value && moro_mode == 2) + val = moro_speaker_digital_value; + else if (moro_speaker_gain_value && moro_mode == 1) + val = moro_speaker_gain_value; +#endif if (max98512->pdata->sub_reg) ret = regmap_update_bits(max98512->regmap_r, reg_r, mask, val); break; case MAX98512B: +#ifdef CONFIG_MORO_SOUND + if (moro_both_digital_value && moro_mode == 2) + val = moro_both_digital_value; + else if (moro_both_gain_value && moro_mode == 1) + val = moro_both_gain_value; +#endif ret = regmap_update_bits(max98512->regmap_l, reg, mask, val); if (max98512->pdata->sub_reg) @@ -1232,6 +1273,157 @@ static int max98512_adc_config(struct max98512_priv *max98512) return 0; } +#ifdef CONFIG_MORO_SOUND + +int get_speaker_analog_gain(void) +{ + return moro_speaker_gain_value; +} + +int get_speaker_digital_gain(void) +{ + return moro_speaker_digital_value; +} + +void set_speaker_gain(struct max98512_priv *max98512) +{ + if (moro_speaker_digital_value) { +// MAX98512_R0035_AMP_VOL_CTRL + max98512_wrapper_update(max98512, MAX98512R, + MAX98512_R0035_AMP_VOL_CTRL, + MAX98512_AMP_VOL_MASK, + moro_speaker_digital_value); + } + + if (moro_speaker_gain_value) { +// MAX98512_R003A_SPK_GAIN + max98512_wrapper_update(max98512, MAX98512R, + MAX98512_R003A_SPK_GAIN, + MAX98512_SPK_PCM_GAIN_MASK, + moro_speaker_gain_value); + + max98512->spk_gain_right = moro_speaker_gain_value; + max98512->spk_gain = moro_speaker_gain_value; + } +} + +int set_speaker_analog_gain_value(int gain) +{ + moro_speaker_gain_value = gain; + + set_speaker_gain(g_max98512); + + return moro_speaker_gain_value; +} + +int set_speaker_digital_gain_value(int gain) +{ + moro_speaker_digital_value = gain; + + set_speaker_gain(g_max98512); + + return moro_speaker_digital_value; +} + +int get_earpiece_analog_gain(void) +{ + return moro_earpiece_gain_value; +} + +int get_earpiece_digital_gain(void) +{ + return moro_earpiece_digital_value; +} + +void set_earpiece_gain(struct max98512_priv *max98512) +{ + if (moro_earpiece_digital_value) { +// MAX98512_R0035_AMP_VOL_CTRL + max98512_wrapper_update(max98512, MAX98512L, + MAX98512_R0035_AMP_VOL_CTRL, + MAX98512_AMP_VOL_MASK, + moro_earpiece_digital_value); + } + + if (moro_earpiece_gain_value) { +// MAX98512_R003A_SPK_GAIN + max98512_wrapper_update(max98512, MAX98512L, + MAX98512_R003A_SPK_GAIN, + MAX98512_SPK_PCM_GAIN_MASK, + moro_earpiece_gain_value); + + max98512->spk_gain_left = moro_earpiece_gain_value; + } +} + +int set_earpiece_analog_gain_value(int gain) +{ + moro_earpiece_gain_value = gain; + + set_earpiece_gain(g_max98512); + + return moro_earpiece_gain_value; +} + +int set_earpiece_digital_gain_value(int gain) +{ + moro_earpiece_digital_value = gain; + + set_earpiece_gain(g_max98512); + + return moro_earpiece_digital_value; +} + +int get_both_analog_gain(void) +{ + return moro_both_gain_value; +} + +int get_both_digital_gain(void) +{ + return moro_both_digital_value; +} + +void set_both_gain(struct max98512_priv *max98512) +{ + if (moro_both_digital_value) { +// MAX98512_R0035_AMP_VOL_CTRL + max98512_wrapper_update(max98512, MAX98512B, + MAX98512_R0035_AMP_VOL_CTRL, + MAX98512_AMP_VOL_MASK, + moro_both_digital_value); + } + + if (moro_both_gain_value) { +// MAX98512_R003A_SPK_GAIN + max98512_wrapper_update(max98512, MAX98512B, + MAX98512_R003A_SPK_GAIN, + MAX98512_SPK_PCM_GAIN_MASK, + moro_both_gain_value); + + + } +} + +int set_both_analog_gain_value(int gain) +{ + moro_both_gain_value = gain; + + set_both_gain(g_max98512); + + return moro_both_gain_value; +} + +int set_both_digital_gain_value(int gain) +{ + moro_both_digital_value = gain; + + set_both_gain(g_max98512); + + return moro_both_digital_value; +} +#endif + static int __max98512_spk_enable(struct max98512_priv *max98512) { struct max98512_pdata *pdata = max98512->pdata; @@ -1332,8 +1524,8 @@ static int __max98512_spk_enable(struct max98512_priv *max98512) battery_temp = maxdsm_cal_get_temp_from_power_supply(); - if (battery_temp > 50) { - msg_maxim("battery_temp[%d] over 50", battery_temp); + if (battery_temp > 55) { + msg_maxim("battery_temp[%d] over 55", battery_temp); max98512_wrapper_write(max98512, MAX98512B, MAX98512_R0059_BROWNOUT_LVL2_THRESH, 0x30); @@ -1341,7 +1533,7 @@ static int __max98512_spk_enable(struct max98512_priv *max98512) MAX98512_R005A_BROWNOUT_LVL3_THRESH, 0x10); } else { - msg_maxim("battery_temp[%d] under 50", battery_temp); + msg_maxim("battery_temp[%d] under 55", battery_temp); max98512_wrapper_write(max98512, MAX98512B, MAX98512_R0059_BROWNOUT_LVL2_THRESH, 0x40); @@ -2938,3 +3130,4 @@ module_i2c_driver(max98512_i2c_driver) MODULE_DESCRIPTION("ALSA SoC MAX98512 driver"); MODULE_AUTHOR("Ryan Lee "); MODULE_LICENSE("GPL"); + diff --git a/sound/soc/codecs/moro_sound.c b/sound/soc/codecs/moro_sound.c new file mode 100644 index 000000000000..fa1df85bde8f --- /dev/null +++ b/sound/soc/codecs/moro_sound.c @@ -0,0 +1,1304 @@ +/* + * moro_sound.c -- Sound mod for Madera/CS47L92, S9 sound driver + * + * Author : @morogoku https://github.com/morogoku + * + * Date : March 2019 - v2.0 + * : April 2019 - v2.1 + * : December 2020 - v2.2 + * + * + * Based on the Boeffla Sound 1.6 for Galaxy S3 + * + * Credits: andip71, author of Boeffla Sound + * Supercurio, Yank555 and Gokhanmoral. + * + * AndreiLux, for his Madera control sound mod + * + * Flar2, for his speaker gain mod + * + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include "moro_sound.h" + + +/*****************************************/ +// Variables +/*****************************************/ + +// pointer to regmap +static struct regmap *map; + +// First access +static int first = 1; + +// Switches +static int moro_sound, eq, headphone_mono, mic, reset = 0; + +// Gains +static int headphone_gain_l, headphone_gain_r, earpiece_analog_gain, earpiece_digital_gain, speaker_analog_gain, speaker_digital_gain, both_analog_gain, both_digital_gain, eq_gains[5], + mic_down_gain, mic_up_gain, mic_hp_gain; + +// Mixers +static int out2l_mix_source, out2r_mix_source, eq1_mix_source, eq2_mix_source; + + +/*****************************************/ +// Internal function declarations +/*****************************************/ + +static unsigned int get_value(int reg, int mask, int shift); +static void set_value(int reg, int mask, int shift, int value); + +static void set_eq(bool reset); +static void set_eq_gains(bool reset); + +static void reset_moro_sound(void); +static void reset_audio_hub(void); +static void update_audio_hub(void); + +static bool bool_check(int bool); + +/*****************************************/ +// Internal helper functions +/*****************************************/ + +#define _write(reg, val) _regmap_write_nohook(map, reg, val) + +#define _read(reg, val) regmap_read(map, reg, val) + +static unsigned int get_value(int reg, int mask, int shift) +{ + unsigned int val; + + _read(reg, &val); + val &= mask; + val >>= shift; + + return val; +} + +static void set_value(int reg, int mask, int shift, int value) +{ + unsigned int val; + + _read(reg, &val); + val &= ~mask; + val |= (value << shift); + _write(reg, val); +} + +static void set_eq(bool reset) +{ + // If EQ is enabled + if (eq & moro_sound) { + // Set mixers + eq1_mix_source = 32; // EQ1 -> AIF1 RX1 left + eq2_mix_source = 33; // EQ2 -> AIF1 RX2 right + + out2l_mix_source = 80; // OUT2L -> EQ1 left + out2r_mix_source = 81; // OUT2R -> EQ2 right + + } else { + + // Set mixers to default + eq1_mix_source = EQ1_MIX_DEFAULT; + eq2_mix_source = EQ2_MIX_DEFAULT; + + out2l_mix_source = OUT2L_MIX_DEFAULT; + out2r_mix_source = OUT2R_MIX_DEFAULT; + } + + set_value(EQ1_ENA, eq); + set_value(EQ2_ENA, eq); + + set_value(EQ1_MIX, eq1_mix_source); + set_value(EQ2_MIX, eq2_mix_source); + + set_value(OUT2L_MIX, out2l_mix_source); + set_value(OUT2R_MIX, out2r_mix_source); + + // If reset = true, then set the eq band gains to default values + set_eq_gains(!eq); +} + +static void set_eq_gains(bool reset) +{ + unsigned int val; + unsigned int gain1, gain2, gain3, gain4, gain5; + + // If reset = true, set the eq band gains to default + if (reset) { + gain1 = EQ_B1_GAIN_DEFAULT; + gain2 = EQ_B2_GAIN_DEFAULT; + gain3 = EQ_B3_GAIN_DEFAULT; + gain4 = EQ_B4_GAIN_DEFAULT; + gain5 = EQ_B5_GAIN_DEFAULT; + } else { + gain1 = eq_gains[0]; + gain2 = eq_gains[1]; + gain3 = eq_gains[2]; + gain4 = eq_gains[3]; + gain5 = eq_gains[4]; + } + + // First register + // read current value from audio hub and mask all bits apart from equalizer enabled bit, + // add individual gains and write back to audio hub + _read(MADERA_EQ1_1, &val); + val &= MADERA_EQ1_ENA_MASK; + val |= ((gain1 + EQ_GAIN_OFFSET) << MADERA_EQ1_B1_GAIN_SHIFT); + val |= ((gain2 + EQ_GAIN_OFFSET) << MADERA_EQ1_B2_GAIN_SHIFT); + val |= ((gain3 + EQ_GAIN_OFFSET) << MADERA_EQ1_B3_GAIN_SHIFT); + _write(MADERA_EQ1_1, val); + _write(MADERA_EQ2_1, val); + + // second register + // read current value from audio hub and mask all bits apart from band1 mode bit, + // set individual gains and write back to audio hub + _read(MADERA_EQ1_2, &val); + val &= MADERA_EQ1_B1_MODE_MASK; + val |= ((gain4 + EQ_GAIN_OFFSET) << MADERA_EQ1_B4_GAIN_SHIFT); + val |= ((gain5 + EQ_GAIN_OFFSET) << MADERA_EQ1_B5_GAIN_SHIFT); + _write(MADERA_EQ1_2, val); + _write(MADERA_EQ2_2, val); +} + + +/*****************************************/ +// Sound hook functions +/*****************************************/ + +void moro_sound_hook_madera_pcm_probe(struct regmap *pmap) +{ + // store a copy of the pointer to the regmap, we need + // that for internal calls to the audio hub + map = pmap; + + // Initialize moro sound master switch finally + moro_sound = MORO_SOUND_DEFAULT; + headphone_mono = HEADPHONE_MONO_DEFAULT; + mic = MIC_DEFAULT; + eq = EQ_DEFAULT; + eq_gains[0] = EQ_B1_GAIN_DEFAULT; + eq_gains[1] = EQ_B2_GAIN_DEFAULT; + eq_gains[2] = EQ_B3_GAIN_DEFAULT; + eq_gains[3] = EQ_B4_GAIN_DEFAULT; + eq_gains[4] = EQ_B5_GAIN_DEFAULT; + set_eq(!eq); + + // If moro sound is enabled during driver start, reset to default configuration + if (moro_sound) + { + reset_moro_sound(); + printk("Moro-sound: moro sound enabled during startup\n"); + } +} + +unsigned int moro_sound_write_hook(unsigned int reg, unsigned int val) +{ + // if moro sound is off, return original value + if (!moro_sound) + return val; + + // based on the register, do the appropriate processing + switch (reg) + { + // headphone l + case MADERA_DAC_DIGITAL_VOLUME_2L: + { + val &= ~MADERA_OUT2L_VOL_MASK; + val |= (headphone_gain_l << MADERA_OUT2L_VOL_SHIFT); + break; + } + + // headphone r + case MADERA_DAC_DIGITAL_VOLUME_2R: + { + val &= ~MADERA_OUT2R_VOL_MASK; + val |= (headphone_gain_r << MADERA_OUT2R_VOL_SHIFT); + break; + } + + if (eq){ + // hpout2 l + case MADERA_OUT2LMIX_INPUT_1_SOURCE: + { + val &= ~MADERA_MIXER_SOURCE_MASK; + val |= (out2l_mix_source << MADERA_MIXER_SOURCE_SHIFT); + break; + } + // hpout2 r + case MADERA_OUT2RMIX_INPUT_1_SOURCE: + { + val &= ~MADERA_MIXER_SOURCE_MASK; + val |= (out2r_mix_source << MADERA_MIXER_SOURCE_SHIFT); + break; + } + } + if (mic){ + // mic down + case MADERA_ADC_DIGITAL_VOLUME_3L: + { + val &= ~MADERA_IN3L_DIG_VOL_MASK; + val |= (mic_down_gain << MADERA_IN3L_DIG_VOL_SHIFT); + break; + } + // mic up + case MADERA_ADC_DIGITAL_VOLUME_4L: + { + val &= ~MADERA_IN4L_DIG_VOL_MASK; + val |= (mic_up_gain << MADERA_IN4L_DIG_VOL_SHIFT); + break; + } + // mic hp + case MADERA_ADC_DIGITAL_VOLUME_1L: + { + val &= ~MADERA_IN1L_DIG_VOL_MASK; + val |= (mic_hp_gain << MADERA_IN1L_DIG_VOL_SHIFT); + break; + } + } + } + + return val; +} + + +/*****************************************/ +// Initialization functions +/*****************************************/ + +static void reset_moro_sound(void) +{ + // set all moro sound config settings to defaults + + earpiece_analog_gain = EARPIECE_ANALOG_DEFAULT; + earpiece_digital_gain = EARPIECE_DIGITAL_DEFAULT; + speaker_analog_gain = SPEAKER_ANALOG_DEFAULT; + speaker_digital_gain = SPEAKER_DIGITAL_DEFAULT; + + headphone_gain_l = HEADPHONE_DEFAULT; + headphone_gain_r = HEADPHONE_DEFAULT; + headphone_mono = HEADPHONE_MONO_DEFAULT; + + out2l_mix_source = OUT2L_MIX_DEFAULT; + out2r_mix_source = OUT2R_MIX_DEFAULT; + + eq1_mix_source = EQ1_MIX_DEFAULT; + eq2_mix_source = EQ2_MIX_DEFAULT; + + eq = EQ_DEFAULT; + eq_gains[0] = EQ_B1_GAIN_DEFAULT; + eq_gains[1] = EQ_B2_GAIN_DEFAULT; + eq_gains[2] = EQ_B3_GAIN_DEFAULT; + eq_gains[3] = EQ_B4_GAIN_DEFAULT; + eq_gains[4] = EQ_B5_GAIN_DEFAULT; + + mic = MIC_DEFAULT; + mic_down_gain = MIC_DOWN_GAIN_DEFAULT; + mic_up_gain = MIC_UP_GAIN_DEFAULT; + mic_hp_gain = MIC_HP_GAIN_DEFAULT; +} + + +static void reset_audio_hub(void) +{ + set_value(OUT2L_VOLUME, HEADPHONE_DEFAULT); + set_value(OUT2R_VOLUME, HEADPHONE_DEFAULT); + set_value(OUT2_MONO, HEADPHONE_MONO_DEFAULT); + + set_earpiece_analog_gain_value(EARPIECE_ANALOG_DEFAULT); + set_earpiece_digital_gain_value(EARPIECE_DIGITAL_DEFAULT); + set_speaker_analog_gain_value(SPEAKER_ANALOG_DEFAULT); + set_speaker_digital_gain_value(SPEAKER_DIGITAL_DEFAULT); + + set_value(OUT2L_MIX, OUT2L_MIX_DEFAULT); + set_value(OUT2R_MIX, OUT2R_MIX_DEFAULT); + + set_value(EQ1_MIX, EQ1_MIX_DEFAULT); + set_value(EQ2_MIX, EQ2_MIX_DEFAULT); + + set_value(MIC3L_VOLUME, MIC_DOWN_GAIN_DEFAULT); + set_value(MIC4L_VOLUME, MIC_UP_GAIN_DEFAULT); + set_value(MIC1L_VOLUME, MIC_HP_GAIN_DEFAULT); + set_eq(1); +} + + +static void update_audio_hub(void) +{ + // reset all audio hub registers back to defaults + + set_earpiece_analog_gain_value(earpiece_analog_gain); + set_earpiece_digital_gain_value(earpiece_digital_gain); + set_speaker_analog_gain_value(speaker_analog_gain); + set_speaker_digital_gain_value(speaker_digital_gain); + + set_value(OUT2L_VOLUME, headphone_gain_l); + set_value(OUT2R_VOLUME, headphone_gain_r); + set_value(OUT2_MONO, headphone_mono); + + set_value(OUT2L_MIX, out2l_mix_source); + set_value(OUT2R_MIX, out2r_mix_source); + + set_value(EQ1_MIX, eq1_mix_source); + set_value(EQ2_MIX, eq1_mix_source); + + set_value(MIC3L_VOLUME, mic_down_gain); + set_value(MIC4L_VOLUME, mic_up_gain); + set_value(MIC1L_VOLUME, mic_hp_gain); + + set_eq(0); +} + + +/*****************************************/ +// sysfs interface functions +/*****************************************/ + +static bool bool_check(int bool) +{ + if ((bool == 0) || (bool == 1)) + return true; + else + return false; +} + +// Moro sound master switch + +static ssize_t moro_sound_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + // print current value + return sprintf(buf, "%d\n", moro_sound); +} + + +static ssize_t moro_sound_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + unsigned int ret = -EINVAL; + int val; + + // read values from input buffer + ret = sscanf(buf, "%d", &val); + + if (ret != 1) + return -EINVAL; + + // store if valid data + if (bool_check(val)) + { + // check if there was a change + if (moro_sound != val) + { + // set new status + moro_sound = val; + + // re-initialize settings and audio hub (in any case for both on and off !) + // if is the first enable, reset variables + if(first) { + reset_moro_sound(); + first = 0; + } + + if(val) + update_audio_hub(); + else + reset_audio_hub(); + } + } + + return count; +} + + +// Headphone volume + +static ssize_t headphone_gain_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + // print current values + return sprintf(buf, "%d %d\n", headphone_gain_l, headphone_gain_r); +} + + +static ssize_t headphone_gain_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + unsigned int ret = -EINVAL; + int val_l, val_r; + + // Terminate if moro sound is not enabled + if (!moro_sound) + return count; + + // read values from input buffer + ret = sscanf(buf, "%d %d", &val_l, &val_r); + + if (ret != 2) + return -EINVAL; + + if (val_l < HEADPHONE_MIN) + val_l = HEADPHONE_MIN; + if (val_l > HEADPHONE_MAX) + val_l = HEADPHONE_MAX; + if (val_r < HEADPHONE_MIN) + val_r = HEADPHONE_MIN; + if (val_r > HEADPHONE_MAX) + val_r = HEADPHONE_MAX; + + // store new values + headphone_gain_l = val_l; + headphone_gain_r = val_r; + + // set new values + set_value(OUT2L_VOLUME, headphone_gain_l); + set_value(OUT2R_VOLUME, headphone_gain_r); + + return count; +} + +static ssize_t headphone_mono_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + return sprintf(buf, "%d\n", headphone_mono); +} + +static ssize_t headphone_mono_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + unsigned int ret = -EINVAL; + int val; + + // Terminate if moro sound is not enabled + if (!moro_sound) + return count; + + // read values from input buffer + ret = sscanf(buf, "%d", &val); + + if (ret != 1) + return -EINVAL; + + // store if valid data + if (bool_check(val)) { + // check if there was a change + if (headphone_mono != val) { + // set new status + headphone_mono = val; + + // set new values + set_value(OUT2_MONO, headphone_mono); + } + } + + return count; +} +static ssize_t headphone_limits_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + // return version information + return sprintf(buf, "Min:%u Max:%u Def:%u\n", HEADPHONE_MIN, HEADPHONE_MAX, HEADPHONE_DEFAULT); +} +// Earpiece Volume +static ssize_t earpiece_analog_gain_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + // print current values + return sprintf(buf, "%d\n", earpiece_analog_gain); +} +static ssize_t earpiece_analog_gain_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + unsigned int ret = -EINVAL; + int val; + // Terminate if moro sound is not enabled + if (!moro_sound) + return count; + // read values from input buffer + ret = sscanf(buf, "%d", &val); + if (ret != 1) + return -EINVAL; + if (val < EARPIECE_ANALOG_MIN) + val = EARPIECE_ANALOG_MIN; + if (val > EARPIECE_ANALOG_MAX) + val = EARPIECE_ANALOG_MAX; + // store new values + earpiece_analog_gain = val; + // set new values + set_earpiece_analog_gain_value(earpiece_analog_gain); + return count; +} +static ssize_t earpiece_digital_gain_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + // print current values + return sprintf(buf, "%d\n", earpiece_digital_gain); +} +static ssize_t earpiece_digital_gain_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + unsigned int ret = -EINVAL; + int val; + // Terminate if moro sound is not enabled + if (!moro_sound) + return count; + // read values from input buffer + ret = sscanf(buf, "%d", &val); + if (ret != 1) + return -EINVAL; + if (val < EARPIECE_DIGITAL_MIN) + val = EARPIECE_DIGITAL_MIN; + if (val > EARPIECE_DIGITAL_MAX) + val = EARPIECE_DIGITAL_MAX; + // store new values + earpiece_digital_gain = val; + // set new values + set_earpiece_digital_gain_value(earpiece_digital_gain); + return count; +} +static ssize_t earpiece_limits_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + // return version information + return sprintf(buf, "ANALOG: Min:%u Max:%u Def:%u\nDIGITAL: Min:%u Max:%u Def:%u\n", EARPIECE_ANALOG_MIN, EARPIECE_ANALOG_MAX, EARPIECE_ANALOG_DEFAULT, EARPIECE_DIGITAL_MIN, EARPIECE_DIGITAL_MAX, EARPIECE_DIGITAL_DEFAULT); +} +// Mic Gain + +static ssize_t mic_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + return sprintf(buf, "%d\n", mic); +} + +static ssize_t mic_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + unsigned int ret = -EINVAL; + int val; + + // Terminate if moro sound is not enabled + if (!moro_sound) + return count; + + // read values from input buffer + ret = sscanf(buf, "%d", &val); + + if (ret != 1) + return -EINVAL; + + // store if valid data + if (bool_check(val)) { + // check if there was a change + if (mic != val) { + // set new status + mic = val; + + // set new values + if(mic) { + set_value(MIC3L_VOLUME, mic_down_gain); + set_value(MIC4L_VOLUME, mic_up_gain); + set_value(MIC1L_VOLUME, mic_hp_gain); + } else { + set_value(MIC3L_VOLUME, MIC_DOWN_GAIN_DEFAULT); + set_value(MIC4L_VOLUME, MIC_UP_GAIN_DEFAULT); + set_value(MIC1L_VOLUME, MIC_HP_GAIN_DEFAULT); + } + } + } + + return count; +} + +static ssize_t mic_down_gain_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + return sprintf(buf, "%d\n", mic_down_gain); +} + +static ssize_t mic_down_gain_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + unsigned int ret = -EINVAL; + int val; + + // Terminate if moro sound is not enabled + if ((!moro_sound) && (!mic)) + return count; + + // read values from input buffer + ret = sscanf(buf, "%d", &val); + + if (ret != 1) + return -EINVAL; + + mic_down_gain = val; + + set_value(MIC3L_VOLUME, mic_down_gain); + + return count; +} + +static ssize_t mic_up_gain_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + return sprintf(buf, "%d\n", mic_up_gain); +} + +static ssize_t mic_up_gain_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + unsigned int ret = -EINVAL; + int val; + + // Terminate if moro sound is not enabled + if ((!moro_sound) && (!mic)) + return count; + + // read values from input buffer + ret = sscanf(buf, "%d", &val); + + if (ret != 1) + return -EINVAL; + + mic_up_gain = val; + + set_value(MIC4L_VOLUME, mic_up_gain); + + return count; +} + +static ssize_t mic_hp_gain_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + return sprintf(buf, "%d\n", mic_hp_gain); +} + +static ssize_t mic_hp_gain_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + unsigned int ret = -EINVAL; + int val; + + // Terminate if moro sound is not enabled + if ((!moro_sound) && (!mic)) + return count; + + // read values from input buffer + ret = sscanf(buf, "%d", &val); + + if (ret != 1) + return -EINVAL; + + mic_hp_gain = val; + + set_value(MIC1L_VOLUME, mic_hp_gain); + + return count; +} +// Speaker Volume +static ssize_t speaker_analog_gain_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + // print current values + return sprintf(buf, "%d\n", speaker_analog_gain); +} +static ssize_t speaker_analog_gain_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + unsigned int ret = -EINVAL; + int val; + // Terminate if moro sound is not enabled + if (!moro_sound) + return count; + // read values from input buffer + ret = sscanf(buf, "%d", &val); + if (ret != 1) + return -EINVAL; + if (val < SPEAKER_ANALOG_MIN) + val = SPEAKER_ANALOG_MIN; + if (val > SPEAKER_ANALOG_MAX) + val = SPEAKER_ANALOG_MAX; + // store new values + speaker_analog_gain = val; + // set new values + set_speaker_analog_gain_value(speaker_analog_gain); + return count; +} +static ssize_t speaker_digital_gain_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + // print current values + return sprintf(buf, "%d\n", speaker_digital_gain); +} +static ssize_t speaker_digital_gain_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + unsigned int ret = -EINVAL; + int val; + // Terminate if moro sound is not enabled + if (!moro_sound) + return count; + // read values from input buffer + ret = sscanf(buf, "%d", &val); + if (ret != 1) + return -EINVAL; + if (val < SPEAKER_DIGITAL_MIN) + val = SPEAKER_DIGITAL_MIN; + if (val > SPEAKER_DIGITAL_MAX) + val = SPEAKER_DIGITAL_MAX; + // store new values + speaker_digital_gain = val; + // set new values + set_speaker_digital_gain_value(speaker_digital_gain); + return count; +} +static ssize_t speaker_limits_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + // return version information + return sprintf(buf, "ANALOG: Min:%u Max:%u Def:%u\nDIGITAL: Min:%u Max:%u Def:%u\n", SPEAKER_ANALOG_MIN, SPEAKER_ANALOG_MAX, SPEAKER_ANALOG_DEFAULT, SPEAKER_DIGITAL_MIN, SPEAKER_DIGITAL_MAX, SPEAKER_DIGITAL_DEFAULT); +} + +// Both Volume +static ssize_t both_analog_gain_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + // print current values + return sprintf(buf, "%d\n", both_analog_gain); +} +static ssize_t both_analog_gain_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + unsigned int ret = -EINVAL; + int val; + // Terminate if moro sound is not enabled + if (!moro_sound) + return count; + // read values from input buffer + ret = sscanf(buf, "%d", &val); + if (ret != 1) + return -EINVAL; + if (val < BOTH_ANALOG_MIN) + val = BOTH_ANALOG_MIN; + if (val > BOTH_ANALOG_MAX) + val = BOTH_ANALOG_MAX; + // store new values + both_analog_gain = val; + // set new values + set_both_analog_gain_value(both_analog_gain); + return count; +} +static ssize_t both_digital_gain_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + // print current values + return sprintf(buf, "%d\n", both_digital_gain); +} +static ssize_t both_digital_gain_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + unsigned int ret = -EINVAL; + int val; + // Terminate if moro sound is not enabled + if (!moro_sound) + return count; + // read values from input buffer + ret = sscanf(buf, "%d", &val); + if (ret != 1) + return -EINVAL; + if (val < BOTH_DIGITAL_MIN) + val = BOTH_DIGITAL_MIN; + if (val > BOTH_DIGITAL_MAX) + val = BOTH_DIGITAL_MAX; + // store new values + both_digital_gain = val; + // set new values + set_both_digital_gain_value(both_digital_gain); + return count; +} +static ssize_t both_limits_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + // return version information + return sprintf(buf, "ANALOG: Min:%u Max:%u Def:%u\nDIGITAL: Min:%u Max:%u Def:%u\n", BOTH_ANALOG_MIN, BOTH_ANALOG_MAX, BOTH_ANALOG_DEFAULT, BOTH_DIGITAL_MIN, BOTH_DIGITAL_MAX, BOTH_DIGITAL_DEFAULT); +} + +// EQ + +static ssize_t eq_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + + // print current value + return sprintf(buf, "%d\n", eq); +} + +static ssize_t eq_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + unsigned int ret = -EINVAL; + int val; + + // Terminate if moro sound is not enabled + if (!moro_sound) + return count; + + // read values from input buffer + ret = sscanf(buf, "%d", &val); + + if (ret != 1) + return -EINVAL; + + // store if valid data and check if there was a change + if (bool_check(val)) + { + // check if there was a change + if (eq != val) + { + // store new value + eq = val; + + set_eq(!eq); + } + } + + return count; +} + + +// EQ GAIN + +static ssize_t eq_gains_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + // print current values + return sprintf(buf, "%d %d %d %d %d\n", eq_gains[0], eq_gains[1], eq_gains[2], eq_gains[3], eq_gains[4]); +} + +static ssize_t eq_gains_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + unsigned int ret = -EINVAL; + int i, gains[5]; + + // Terminate if moro sound is not enabled + if (!moro_sound) + return count; + + // read values from input buffer + ret = sscanf(buf, "%d %d %d %d %d", &gains[0], &gains[1], &gains[2], &gains[3], &gains[4]); + + if (ret != 5) + return -EINVAL; + + // check validity of gain values and adjust + for (i = 0; i <= 4; i++) + { + if (gains[i] < EQ_GAIN_MIN) + gains[i] = EQ_GAIN_MIN; + + if (gains[i] > EQ_GAIN_MAX) + gains[i] = EQ_GAIN_MAX; + + eq_gains[i] = gains[i]; + } + + // set new values + set_eq_gains(!eq); + + return count; +} + +static ssize_t eq_b1_gain_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + // return current debug status + return sprintf(buf, "%d\n", eq_gains[0]); +} + +static ssize_t eq_b1_gain_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + unsigned int ret = -EINVAL; + int val; + + // check data and store if valid + ret = sscanf(buf, "%d", &val); + + if (ret != 1) + return -EINVAL; + + if (val < EQ_GAIN_MIN) + val = EQ_GAIN_MIN; + + if (val > EQ_GAIN_MAX) + val = EQ_GAIN_MAX; + + // store new value + eq_gains[0] = val; + + // set new values + set_eq_gains(!eq); + + return count; +} + +static ssize_t eq_b2_gain_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + // return current debug status + return sprintf(buf, "%d\n", eq_gains[1]); +} + +static ssize_t eq_b2_gain_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + unsigned int ret = -EINVAL; + int val; + + // check data and store if valid + ret = sscanf(buf, "%d", &val); + + if (ret != 1) + return -EINVAL; + + if (val < EQ_GAIN_MIN) + val = EQ_GAIN_MIN; + + if (val > EQ_GAIN_MAX) + val = EQ_GAIN_MAX; + + // store new value + eq_gains[1] = val; + + // set new values + set_eq_gains(!eq); + + return count; +} + +static ssize_t eq_b3_gain_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + // return current debug status + return sprintf(buf, "%d\n", eq_gains[2]); +} + +static ssize_t eq_b3_gain_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + unsigned int ret = -EINVAL; + int val; + + // check data and store if valid + ret = sscanf(buf, "%d", &val); + + if (ret != 1) + return -EINVAL; + + if (val < EQ_GAIN_MIN) + val = EQ_GAIN_MIN; + + if (val > EQ_GAIN_MAX) + val = EQ_GAIN_MAX; + + // store new value + eq_gains[2] = val; + + // set new values + set_eq_gains(!eq); + + return count; +} + +static ssize_t eq_b4_gain_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + // return current debug status + return sprintf(buf, "%d\n", eq_gains[3]); +} + +static ssize_t eq_b4_gain_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + unsigned int ret = -EINVAL; + int val; + + // check data and store if valid + ret = sscanf(buf, "%d", &val); + + if (ret != 1) + return -EINVAL; + + if (val < EQ_GAIN_MIN) + val = EQ_GAIN_MIN; + + if (val > EQ_GAIN_MAX) + val = EQ_GAIN_MAX; + + // store new value + eq_gains[3] = val; + + // set new values + set_eq_gains(!eq); + + return count; +} + +static ssize_t eq_b5_gain_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + // return current debug status + return sprintf(buf, "%d\n", eq_gains[4]); +} + +static ssize_t eq_b5_gain_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + unsigned int ret = -EINVAL; + int val; + + // check data and store if valid + ret = sscanf(buf, "%d", &val); + + if (ret != 1) + return -EINVAL; + + if (val < EQ_GAIN_MIN) + val = EQ_GAIN_MIN; + + if (val > EQ_GAIN_MAX) + val = EQ_GAIN_MAX; + + // store new value + eq_gains[4] = val; + + // set new values + set_eq_gains(!eq); + + return count; +} + +// Debug status + +static ssize_t reset_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + // return current debug status + return sprintf(buf, "%d\n", reset); +} + +static ssize_t reset_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + unsigned int ret = -EINVAL; + int val; + + // check data and store if valid + ret = sscanf(buf, "%d", &val); + + if (ret != 1) + return -EINVAL; + + // store if valid data and check if there was a change + if (bool_check(val)) + { + if (val) { + reset_moro_sound(); + update_audio_hub(); + } + } + + return count; +} + + +// Register dump + +static ssize_t reg_dump_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + unsigned int eq_b1, eq_b2, eq_b3, eq_b4, eq_b5, mic3l, mic4l, mic1l; + + _read(MADERA_EQ1_1, &eq_b1); + eq_b1 = ((eq_b1 & MADERA_EQ1_B1_GAIN_MASK) >> MADERA_EQ1_B1_GAIN_SHIFT) - EQ_GAIN_OFFSET; + _read(MADERA_EQ1_1, &eq_b2); + eq_b2 = ((eq_b2 & MADERA_EQ1_B2_GAIN_MASK) >> MADERA_EQ1_B2_GAIN_SHIFT) - EQ_GAIN_OFFSET; + _read(MADERA_EQ1_1, &eq_b3); + eq_b3 = ((eq_b3 & MADERA_EQ1_B3_GAIN_MASK) >> MADERA_EQ1_B3_GAIN_SHIFT) - EQ_GAIN_OFFSET; + _read(MADERA_EQ1_2, &eq_b4); + eq_b4 = ((eq_b4 & MADERA_EQ1_B4_GAIN_MASK) >> MADERA_EQ1_B4_GAIN_SHIFT) - EQ_GAIN_OFFSET; + _read(MADERA_EQ1_2, &eq_b5); + eq_b5 = ((eq_b5 & MADERA_EQ1_B5_GAIN_MASK) >> MADERA_EQ1_B5_GAIN_SHIFT) - EQ_GAIN_OFFSET; + _read(MADERA_INPUT_ENABLES, &mic3l); + mic3l = (mic3l & MADERA_IN3L_ENA_MASK) >> MADERA_IN3L_ENA_SHIFT; + _read(MADERA_INPUT_ENABLES, &mic4l); + mic4l = (mic4l & MADERA_IN4L_ENA_MASK) >> MADERA_IN4L_ENA_SHIFT; + _read(MADERA_INPUT_ENABLES, &mic1l); + mic1l = (mic1l & MADERA_IN1L_ENA_MASK) >> MADERA_IN1L_ENA_SHIFT; + + + + + // return register dump information + return sprintf(buf, "\ +headphone_gain_l: reg: %d, variable: %d\n\ +headphone_gain_r: reg: %d, variable: %d\n\ +headphone mono: %d\n\ +first enable: %d\n\ +earpiece_gain: analog: %d, digital: %d\n\ +speaker_gain: analog: %d, digital: %d\n\ +both_gain: analog: %d, digital: %d\n\ +OUT1 Source: L: %d R: %d\n\ +EQ Enabled: 1: %d 2: %d\n\ +EQMIX source: 1: %d 2: %d\n\ +EQ b1 gain: %d\n\ +EQ b2 gain: %d\n\ +EQ b3 gain: %d\n\ +EQ b4 gain: %d\n\ +EQ b5 gain: %d\n\ +MIC Down: %d Vol: %d\n\ +MIC Up: %d Vol: %d\n\ +MIC Hp: %d Vol: %d\n\ +", +get_value(OUT2L_VOLUME), headphone_gain_l, +get_value(OUT2R_VOLUME), headphone_gain_r, +get_value(OUT2_MONO), +first, +get_earpiece_analog_gain(), get_earpiece_digital_gain(), +get_speaker_analog_gain(), get_speaker_digital_gain(), +get_both_analog_gain(), get_both_digital_gain(), +get_value(OUT2L_MIX), get_value(OUT2R_MIX), +get_value(EQ1_ENA), get_value(EQ2_ENA), +get_value(EQ1_MIX), get_value(EQ2_MIX), +eq_b1, +eq_b2, +eq_b3, +eq_b4, +eq_b5, +mic3l, +get_value(MIC3L_VOLUME), +mic4l, +get_value(MIC4L_VOLUME), +mic1l, +get_value(MIC1L_VOLUME)); +} + + +// Version information + +static ssize_t version_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + // return version information + return sprintf(buf, "%s\n", MORO_SOUND_VERSION); +} + + +/*****************************************/ +// Initialize moro sound sysfs folder +/*****************************************/ + +// define objects +static DEVICE_ATTR(moro_sound, 0664, moro_sound_show, moro_sound_store); +static DEVICE_ATTR(headphone_gain, 0664, headphone_gain_show, headphone_gain_store); +static DEVICE_ATTR(headphone_limits, 0444, headphone_limits_show, NULL); +static DEVICE_ATTR(headphone_mono, 0664, headphone_mono_show, headphone_mono_store); +static DEVICE_ATTR(earpiece_analog_gain, 0664, earpiece_analog_gain_show, earpiece_analog_gain_store); +static DEVICE_ATTR(earpiece_digital_gain, 0664, earpiece_digital_gain_show, earpiece_digital_gain_store); +static DEVICE_ATTR(earpiece_limits, 0444, earpiece_limits_show, NULL); +static DEVICE_ATTR(mic, 0664, mic_show, mic_store); +static DEVICE_ATTR(mic_down_gain, 0664, mic_down_gain_show, mic_down_gain_store); +static DEVICE_ATTR(mic_up_gain, 0664, mic_up_gain_show, mic_up_gain_store); +static DEVICE_ATTR(mic_hp_gain, 0664, mic_hp_gain_show, mic_hp_gain_store); +static DEVICE_ATTR(speaker_analog_gain, 0664, speaker_analog_gain_show, speaker_analog_gain_store); +static DEVICE_ATTR(speaker_digital_gain, 0664, speaker_digital_gain_show, speaker_digital_gain_store); +static DEVICE_ATTR(speaker_limits, 0444, speaker_limits_show, NULL); +static DEVICE_ATTR(both_analog_gain, 0664, both_analog_gain_show, both_analog_gain_store); +static DEVICE_ATTR(both_digital_gain, 0664, both_digital_gain_show, both_digital_gain_store); +static DEVICE_ATTR(both_limits, 0444, both_limits_show, NULL); +static DEVICE_ATTR(eq, 0664, eq_show, eq_store); +static DEVICE_ATTR(eq_gains, 0664, eq_gains_show, eq_gains_store); +static DEVICE_ATTR(eq_b1_gain, 0664, eq_b1_gain_show, eq_b1_gain_store); +static DEVICE_ATTR(eq_b2_gain, 0664, eq_b2_gain_show, eq_b2_gain_store); +static DEVICE_ATTR(eq_b3_gain, 0664, eq_b3_gain_show, eq_b3_gain_store); +static DEVICE_ATTR(eq_b4_gain, 0664, eq_b4_gain_show, eq_b4_gain_store); +static DEVICE_ATTR(eq_b5_gain, 0664, eq_b5_gain_show, eq_b5_gain_store); +static DEVICE_ATTR(reset, 0664, reset_show, reset_store); +static DEVICE_ATTR(version, 0444, version_show, NULL); +static DEVICE_ATTR(reg_dump, 0444, reg_dump_show, NULL); + +// define attributes +static struct attribute *moro_sound_attributes[] = { + &dev_attr_moro_sound.attr, + &dev_attr_headphone_gain.attr, + &dev_attr_headphone_mono.attr, + &dev_attr_headphone_limits.attr, + &dev_attr_earpiece_analog_gain.attr, + &dev_attr_earpiece_digital_gain.attr, + &dev_attr_earpiece_limits.attr, + &dev_attr_mic.attr, + &dev_attr_mic_down_gain.attr, + &dev_attr_mic_up_gain.attr, + &dev_attr_mic_hp_gain.attr, + &dev_attr_speaker_analog_gain.attr, + &dev_attr_speaker_digital_gain.attr, + &dev_attr_speaker_limits.attr, + &dev_attr_both_analog_gain.attr, + &dev_attr_both_digital_gain.attr, + &dev_attr_both_limits.attr, + &dev_attr_eq.attr, + &dev_attr_eq_gains.attr, + &dev_attr_reset.attr, + &dev_attr_eq_b1_gain.attr, + &dev_attr_eq_b2_gain.attr, + &dev_attr_eq_b3_gain.attr, + &dev_attr_eq_b4_gain.attr, + &dev_attr_eq_b5_gain.attr, + &dev_attr_version.attr, + &dev_attr_reg_dump.attr, + NULL +}; + +// define attribute group +static struct attribute_group moro_sound_control_group = { + .attrs = moro_sound_attributes, +}; + + +// define control device +static struct miscdevice moro_sound_control_device = { + .minor = MISC_DYNAMIC_MINOR, + .name = "moro_sound", +}; + + +/*****************************************/ +// Driver init and exit functions +/*****************************************/ + +static int __init moro_sound_init(void) +{ + int err = 0; + + // register moro sound control device + err = misc_register(&moro_sound_control_device); + if (err) { + pr_err("failed register the device.\n"); + return err; + } + + err = sysfs_create_group(&moro_sound_control_device.this_device->kobj, + &moro_sound_control_group); + if (err) { + pr_err("failed to create sys fs object.\n"); + misc_deregister(&moro_sound_control_device); + return err; + } + + // Initialize moro sound master switch with OFF per default (will be set to correct + // default value when we receive the codec pointer later - avoids startup boot loop) + moro_sound = 0; + + // Initialize variables + reset_moro_sound(); + + pr_info("Moro-sound: engine version %s started\n", MORO_SOUND_VERSION); + + return 0; +} + + +static void __exit moro_sound_exit(void) +{ + // remove moro sound control device + sysfs_remove_group(&moro_sound_control_device.this_device->kobj, + &moro_sound_control_group); + + misc_deregister(&moro_sound_control_device); +} + + +/* define driver entry points */ + +module_init(moro_sound_init); +module_exit(moro_sound_exit); + diff --git a/sound/soc/codecs/moro_sound.h b/sound/soc/codecs/moro_sound.h new file mode 100644 index 000000000000..835cbfd8e624 --- /dev/null +++ b/sound/soc/codecs/moro_sound.h @@ -0,0 +1,196 @@ +/* + * moro_sound.h -- Sound mod for Moon, S7 sound driver + * + * Author : @morogoku https://github.com/morogoku + * + */ + + +#include +#include +#include +#include +#include +#include + +#include + + +/*****************************************/ +// External function declarations +/*****************************************/ + +void moro_sound_hook_madera_pcm_probe(struct regmap *pmap); +int _regmap_write_nohook(struct regmap *map, unsigned int reg, unsigned int val); +int set_speaker_analog_gain_value(int gain); +int set_speaker_digital_gain_value(int gain); +int get_speaker_analog_gain(void); +int get_speaker_digital_gain(void); +int set_earpiece_analog_gain_value(int gain); +int set_earpiece_digital_gain_value(int gain); +int get_earpiece_analog_gain(void); +int get_earpiece_digital_gain(void); +int set_both_analog_gain_value(int gain); +int set_both_digital_gain_value(int gain); +int get_both_analog_gain(void); +int get_both_digital_gain(void); + + +/*****************************************/ +// Definitions +/*****************************************/ + +// Moro sound general +#define MORO_SOUND_DEFAULT 0 +#define MORO_SOUND_VERSION "2.2.0" +#define DEBUG_DEFAULT 0 + +// headphone levels +#define HEADPHONE_DEFAULT 128 +#define HEADPHONE_MIN 60 +#define HEADPHONE_MAX 190 +#define HEADPHONE_MONO_DEFAULT 0 + +/* Earpiece levels */ +#define EARPIECE_DEFAULT 12 +#define EARPIECE_MIN 0 +#define EARPIECE_MAX 18 + +#define EARPIECE_ANALOG_DEFAULT 0 +#define EARPIECE_ANALOG_MIN 0 +#define EARPIECE_ANALOG_MAX 6 + +#define EARPIECE_DIGITAL_DEFAULT 0 +#define EARPIECE_DIGITAL_MIN 0 +#define EARPIECE_DIGITAL_MAX 127 + +/* Speaker levels */ +#define SPEAKER_DEFAULT 12 +#define SPEAKER_MIN 0 +#define SPEAKER_MAX 18 + +#define SPEAKER_ANALOG_DEFAULT 0 +#define SPEAKER_ANALOG_MIN 0 +#define SPEAKER_ANALOG_MAX 6 + +#define SPEAKER_DIGITAL_DEFAULT 0 +#define SPEAKER_DIGITAL_MIN 0 +#define SPEAKER_DIGITAL_MAX 127 + +/* Both levels */ +#define BOTH_DEFAULT 12 +#define BOTH_MIN 0 +#define BOTH_MAX 18 + +#define BOTH_ANALOG_DEFAULT 0 +#define BOTH_ANALOG_MIN 0 +#define BOTH_ANALOG_MAX 6 + +#define BOTH_DIGITAL_DEFAULT 0 +#define BOTH_DIGITAL_MIN 0 +#define BOTH_DIGITAL_MAX 127 + +// Mixers sources +#define OUT2L_MIX_DEFAULT 32 +#define OUT2R_MIX_DEFAULT 33 +#define EQ1_MIX_DEFAULT 0 +#define EQ2_MIX_DEFAULT 0 + +// EQ gain +#define EQ_DEFAULT 0 +#define EQ_GAIN_DEFAULT 0 +#define EQ_GAIN_OFFSET 12 +#define EQ_GAIN_MIN -12 +#define EQ_GAIN_MAX 12 +#define EQ_B1_GAIN_DEFAULT 0 +#define EQ_B2_GAIN_DEFAULT 0 +#define EQ_B3_GAIN_DEFAULT 0 +#define EQ_B4_GAIN_DEFAULT 0 +#define EQ_B5_GAIN_DEFAULT 0 + +// Mixers +#define MADERA_MIXER_SOURCE_MASK 0xff +#define MADERA_MIXER_SOURCE_SHIFT 0 +#define MADERA_MIXER_VOLUME_MASK 0xfe +#define MADERA_MIXER_VOLUME_SHIFT 1 + +// Mic +#define MIC_DEFAULT 0 +#define MIC_DOWN_GAIN_DEFAULT 128 +#define MIC_UP_GAIN_DEFAULT 128 +#define MIC_HP_GAIN_DEFAULT 128 + + +// REGS FOR GET AND SET +// Headphone +#define OUT2L_VOLUME \ + MADERA_DAC_DIGITAL_VOLUME_2L, \ + MADERA_OUT2L_VOL_MASK, \ + MADERA_OUT2L_VOL_SHIFT + +#define OUT2R_VOLUME \ + MADERA_DAC_DIGITAL_VOLUME_2R, \ + MADERA_OUT1R_VOL_MASK, \ + MADERA_OUT1R_VOL_SHIFT + +#define OUT2_MONO \ + MADERA_OUTPUT_PATH_CONFIG_2L, \ + MADERA_OUT2_MONO_MASK, \ + MADERA_OUT2_MONO_SHIFT + +#define OUT2L_MIX \ + MADERA_OUT2LMIX_INPUT_1_SOURCE, \ + MADERA_MIXER_SOURCE_MASK, \ + MADERA_MIXER_SOURCE_SHIFT + +#define OUT2R_MIX \ + MADERA_OUT2RMIX_INPUT_1_SOURCE, \ + MADERA_MIXER_SOURCE_MASK, \ + MADERA_MIXER_SOURCE_SHIFT + +// Eq +#define EQ1_ENA \ + MADERA_EQ1_1, \ + MADERA_EQ1_ENA_MASK, \ + MADERA_EQ1_ENA_SHIFT + +#define EQ2_ENA \ + MADERA_EQ2_1, \ + MADERA_EQ2_ENA_MASK, \ + MADERA_EQ2_ENA_SHIFT + +#define EQ1_MIX \ + MADERA_EQ1MIX_INPUT_1_SOURCE, \ + MADERA_MIXER_SOURCE_MASK, \ + MADERA_MIXER_SOURCE_SHIFT + +#define EQ2_MIX \ + MADERA_EQ2MIX_INPUT_1_SOURCE, \ + MADERA_MIXER_SOURCE_MASK, \ + MADERA_MIXER_SOURCE_SHIFT + +// Mic +#define MIC1R_VOLUME \ + MADERA_ADC_DIGITAL_VOLUME_1R, \ + MADERA_IN1R_DIG_VOL_MASK, \ + MADERA_IN1R_DIG_VOL_SHIFT + +#define MIC1L_VOLUME \ + MADERA_ADC_DIGITAL_VOLUME_1L, \ + MADERA_IN1L_DIG_VOL_MASK, \ + MADERA_IN1L_DIG_VOL_SHIFT + +#define MIC2L_VOLUME \ + MADERA_ADC_DIGITAL_VOLUME_2L, \ + MADERA_IN2L_DIG_VOL_MASK, \ + MADERA_IN2L_DIG_VOL_SHIFT + +#define MIC3L_VOLUME \ + MADERA_ADC_DIGITAL_VOLUME_3L, \ + MADERA_IN3L_DIG_VOL_MASK, \ + MADERA_IN3L_DIG_VOL_SHIFT + +#define MIC4L_VOLUME \ + MADERA_ADC_DIGITAL_VOLUME_4L, \ + MADERA_IN4L_DIG_VOL_MASK, \ + MADERA_IN4L_DIG_VOL_SHIFT diff --git a/tools/testing/selftests/cpu-hotplug/cpu-on-off-test.sh b/tools/testing/selftests/cpu-hotplug/cpu-on-off-test.sh old mode 100755 new mode 100644 diff --git a/tools/testing/selftests/memory-hotplug/mem-on-off-test.sh b/tools/testing/selftests/memory-hotplug/mem-on-off-test.sh old mode 100755 new mode 100644